Glade:はじめの一歩(1)=インバータの設計(回路図の作成)
(17/03/09:akita11=1st draft)
(20/05/06:akita11=OpenRule1um向けに更新を開始)
(20/05/12:akita11=OpenRule1um向けに更新)
例として、最初の一歩としてお約束のインバータ(NOTゲート)をつくってみましょう。回路図、レイアウトの順に作成し、それが正しいかの検証へと進めます。
まずMOSFETを使ってインバータの回路図を描いてみます。インバータはpMOSとnMOSを1個ずつ使います(これのほかに電源端子が必要ですね。インバータの回路図自体については適当に検索してもらえればだいたい見つかるはずですが、↓こんな回路です)。以下、順につくっていきましょう。
https://makelsi.github.io/images/docs/Glade/sch20.png
まずこちらから、OpenRule1um用の基本ファイルをダウンロード(zipでダウンロードして展開、またはGitHubでclone)しておきます。
Gladeを起動し、File→OpenLibraryで、この中のOpenRule1um/Glade/の中にある"OpenRule1um_Basic"というフォルダを選択します。そうすると、"OpenRule1um_Basic"というライブラリが読み込まれている状態になります(左側のLibrary Browserにそのライブラリが表示されています)。
https://makelsi.github.io/images/docs/Glade/sch01.png
インバータの回路図の作成
↓まずこれから作る回路の置き場に相当する「ライブラリ」をつくりましょう。ここでは「test」という名前にしておきます。このとき、ライブラリの設定に相当する「テクノロジファイル」を指定します。さきほどダウンロードしたOpenRule1um関連ファイルのOpenRule1um/Glade内にある"OpenRule1um.tch"を指定しておいてください。(最後の"Database units/micron"が1000になっていることを確認しておく)。OKで作成します。
https://makelsi.github.io/images/docs/Glade/sch02.png
↓こんな感じで、testというライブラリがつくられました。
https://makelsi.github.io/images/docs/Glade/sch03.png
↓まずはこの中に、インバータの回路図をつくってみましょう。Create Cellviewから、CellName(回路名)に"inv"、ViewTypeで"schematic"(回路図)を選んで、OKします。
https://makelsi.github.io/images/docs/Glade/sch04.png
続いて、今後の作業の準備の一環として、回路図を描きやすいように、描画グリッドとそこへのスナップを設定しておきます。
↓DisplayOptionsの"Display Grid"から、以下のようにグリッド間隔=0.0625(=1/16)、種類をドットに指定しておきます。
https://makelsi.github.io/images/docs/Glade/sch05.png
↓あわせてスナップする間隔をグリッドと同じ0.0625にしておきます。また、"SnapAngle"で"Any"を選んでおくと、移動させるときに任意の方向に移動できるようにしておくと便利でしょう(ここが"90degree"だと、上下または左右の90度方向の移動しかできなくなります)。
https://makelsi.github.io/images/docs/Glade/sch06.png
さあいよいよインバータの回路図を描いていきます。
↓まず最初にインバータを構成するいを1個置きます。pMOS素子は、ライブラリ"OpenRule1um_Basic"の中に"pchOR1"という名前でありますので、I(インスタンス作成)を押し、設定ダイアログで"Library"、"CellName"、"Viewtye"をそれぞれ、OpenRule1um_Basic/pchOR1/symbolを選んでおきます。(回路を描くときの素子などはこの3つの組み合わせで指定しますので、以下ではこのように/で区切って3つの情報を表記することにします)なお"symbol"は、回路図の中に置く素子の記号です。(このダイアログが表示されないときは、F3キーを押すと表示されます)
https://makelsi.github.io/images/docs/Glade/sch07.png
↓適当なところでクリックすると、pMOSが置かれます。配置する素子の情報のダイアログがじゃまならばHideボタンで消しておきましょう。また表示の縮尺があわないと置いたpMOSが見えない場合があるので、F(描画全体を再表示するショートカットキー)で再描画しておきましょう。こんな感じに見えるはずです。
https://makelsi.github.io/images/docs/Glade/sch08.png
※ラベルの文字が大きすぎたり小さすぎて見にくいときは、DisplayOptionsの"Label Size Scale"(右下)の値で変更できます。
↓同様にnMOS(名前はnchOR1)を置きます。
https://makelsi.github.io/images/docs/Glade/sch09.png
↓場所はpMOSの少し下あたりがいいでしょう。ずれていたら、左クリックで素子を選択→M(移動)→移動先へクリック、で移動できます。
https://makelsi.github.io/images/docs/Glade/sch10.png
なお一般にpMOSは、nMOSよりも電流を流す能力が低く、nMOSと同じ電流を流せるようにpMOSのサイズ(ゲート幅W)をnMOSよりも大きくしておきます。ここでは、pMOSを選択してプロパティを開き、そこのwを、デフォルトの2uから6u(nMOS(2um)の3倍の6um)にしておきます。
https://makelsi.github.io/images/docs/Glade/sch10a.png
↓続いて電源ピンを置きます。Create→Pin(またはP)(ピン作成)で現れるダイアログ(表示されなければF3キー)で、ピンの名前を"VDD"、DirectionをINOUT(双方向)(またはNONE)、Useを"POWER"に指定します。
[https://makelsi.github.io/images/docs/Glade/sch11.png
↓場所はpMOSの少し上に置きます。
https://makelsi.github.io/images/docs/Glade/sch12.png
↓続いてVSS(負電源側)を置きます。同様にCreate→Pinから、VSS/INOUT/POWERとします。
https://makelsi.github.io/images/docs/Glade/sch13.png
↓場所はnMOSの少し下に置きます。
https://makelsi.github.io/images/docs/Glade/sch14.png
↓続いて、回路の入力端子(pin)を置きます。Create→Pinで、ピンの名前を"A"、DirectionをINPUT(入力)、UseはSIGNAL(信号)に指定します。場所は両MOSの少し左あたりに。
https://makelsi.github.io/images/docs/Glade/sch15.png
↓同様に、出力端子をX/OUTPUT/SIGNALとして置きます。
https://makelsi.github.io/images/docs/Glade/sch16.png
↓こんな感じになります。
https://makelsi.github.io/images/docs/Glade/sch17.png
↓これらを配線でつないで回路をつくっていきます。W(ワイヤ)で赤四角どうしをつないでいきます。間違えたら削除や移動して修正しましょう。ワイヤがつながるところには接続点を示す丸ポッチが現れるはずです。
https://makelsi.github.io/images/docs/Glade/sch18.png
一通り回路を描いたら、Check→Check Cellviewで、回路図のチェックをかけます。ここでは、各素子の接続関係をチェックし、未接続端子などの検出ができます。この作業は、回路図を描いたら保存したら毎回行うことになります。
↓この例では、2か所の未接続端子があることがわかります(下のほうに赤色でエラー内容が表示されている)。この例の1つ目のWarningには、"素子M1のピンBがFloating(浮いている=どこともつながっていない)"と書いてあります。これは、M1(下側のnMOSに赤で書いてある素子名)の"B"端子(MOSトランジスタのボディ=右側の端子)が浮いている、という意味で、たしかにどことも配線がつながっていません。未配線個所は、やや見にくいのですが、白い四角で表示されています。
https://makelsi.github.io/images/docs/Glade/sch19.png
同様にM0(上側のpMOS)の"B"もつながっていませんので、pMOS、nMOSの"B"を、それぞれVDDとVSSにつないでおきます。Check Cellviewすると、エラーがないことがわかります。
https://makelsi.github.io/images/docs/Glade/sch20.png
[https://makelsi.github.io/images/docs/Glade/sch20a.png
インバータのシンボル図の作成]
↓回路図が完成したようなので、これを別の回路で呼び出しで使えるように、symbolを作成しておきます。
https://makelsi.github.io/images/docs/Glade/sch21.png
シンボル作成時のオプションが選べます。この中に、端子(Pin)の位置(Side)を指定するとこがあります。一般に正電源(VDD)はシンボルの上側、負電源(VSS)は下側に置くので、VSSの位置を"bottom"にしておきましょう。また一般に入力は左側、出力は右側に置くので、入力Aはleft、出力Xはrightになっていることを確認しておきます。
https://makelsi.github.io/images/docs/Glade/sch21a.png
↓ライブラリの中のセルtest/invの中に、symbolというviewが作られます。
https://makelsi.github.io/images/docs/Glade/sch22.png
↓test/inv/symbolを開くと、とりあえずということで入出力端子とセル名などが描かれた図がつくられていることがわかります。
https://makelsi.github.io/images/docs/Glade/sch23.png
ところでGladeでの移動操作にはちょっとクセがあって、移動対象のオブジェクトの選択モードに、FullとPartialの2種類があります。Fullはオブジェクトの一部をクリックするとオブジェクト全体が選択(白で囲われる)されます。Partialでは、クリックした箇所の近くの辺または頂点のみが選択されます。回路図を描くときはFullモードで困りませんが、後述のレイアウト設計では長方形を伸ばすなどの操作があり、そのときにはPartialモードを使うことになりますので、少し頭に入れておいてください。両モードは、Display OptionのMiscellaneousから、またはF4キーで切り替えられます。(↓はF4キーを押してPartialモードに切り替わったところ)
https://makelsi.github.io/images/docs/Glade/sch25.png
また移動やワイヤを引く方向は、操作時に現れる↓のようなダイアログ(現れていなければF3キー)で、90度(上下左右だけ)、45度(上下左右と斜め)、Any(任意の方向)から選べます。
https://makelsi.github.io/images/docs/Glade/sch26.png
さてさきほどのtest/inv/symbolですが、四角であらわされていて味気ないので、インバータっぽくしてみましょう。緑色の線は配線とは無関係ですので、削除や修正してOKです。(赤四角の端子やCellname、Instnameの文字列は削除・修正しない)線を描画するときは、ウインドウ右側にある"LSW"で、レイヤ"device"(だいぶ下の方にある)を選んでおくといいです。
https://makelsi.github.io/images/docs/Glade/sch26a.png
↓こんな感じでしょうか。(厳密にはMIL規格で寸法や角度が決まっていますが、まあそのあたりは・・・)
https://makelsi.github.io/images/docs/Glade/sch27.png
↓適宜保存しておきましょう。Cellviewのみでもいいですし、Library全体でもいいです。
https://makelsi.github.io/images/docs/Glade/sch28.png
インバータをほかの回路で使ってみる
せかっくなので、いまつくったインバータを使って、もう少し大きな回路をつくってみましょう。↓例としてinv2という回路図(schematic)のCellを新規に作成します。
https://makelsi.github.io/images/docs/Glade/sch29.png
↓この中で、I(インスタンス作成)からsymbolを置けますので、test/inv/symbolを選ぶと、さきほど作ったインバータのシンボルが現れます。適当なところに置きましょう。
https://makelsi.github.io/images/docs/Glade/sch30.png
せっかくなので3つ置いてみます。1個ずつ置いてもいいですし、1個置いたものをコピーしていってもOKです。(↓はコピーしている様子)
https://makelsi.github.io/images/docs/Glade/sch31.png
↓こんな感じに3個のインバータがおかれました。各インバータの左上の赤文字でインスタンス名がI0、I1、I2と順についていることがわかります。
https://makelsi.github.io/images/docs/Glade/sch32.png
↓ところで移動やコピーのたびにダイアログが現れるのがじゃまだなあ、と思ったら、DisplyOptionのMiscellaneousの"Always popup option dialogs"のチェックをはずすと現れなくなります。(といってもインスタンス作成のときは現れてほしいので、悩ましいところです)
https://makelsi.github.io/images/docs/Glade/sch33.png
↓例として3個のインバータをW(配線)でこのようにつないでみましょう。(いわゆるリングオシレータ)
https://makelsi.github.io/images/docs/Glade/sch34.png
↓回路全体の接続状態は、Tools→Net Browserで右下のほうNetBrowerを表示させて確認することができます。
https://makelsi.github.io/images/docs/Glade/sch35.png
Check→Check cellviewすると、↓このように回路図inv2の中に、ネット(節点)n0、n1、n2があることがわかります。(未配線の端子があるとwarningが出ます)
https://makelsi.github.io/images/docs/Glade/sch36.png
↓Net Browserでネット名を選ぶと、回路図の中でそのネットの箇所がハイライト表示されるので、回路の接続状態を確認できます。
https://makelsi.github.io/images/docs/Glade/sch37.png
ところでGladeは開発途上のソフトで、たまに画面描画が怪しいことや、動作が怪しい(あるいは強制終了したり)ことがあります。そういうときは、あまり気にせず、いったんCellviewを閉じて開きなおすとなんともなくなったりします。それぐらいの気構えで接して、改善を待つorバグとしてForumに報告するのがよさそうです。