WGexの使い方
インストールと準備
CADツールのWGexと関連ファイル一式は、設計試作に参加される方にのみ配布しております。(動作環境はWindowsのみ(仮想マシンなども可)、です。ご了承ください) フリーウエアのWineBottlerを使ってMacで起動できた、との情報をr.kitahata様よりいただきました! akita11.icon 2015/1/12 WGex開発者の東大・浅田邦博先生より、配布先リストの管理と再配布なし、を使用条件とされていますので、お手数をおかけしますが、こちらから、登録をお願いします。折り返し、一式ファイル(2016年時点でメインで使っている北九州ひびきのの設計ルールの情報を含みます)をお送りします。情報共有のためのメーリングリストへの登録もあわせてさせていただきますが、希望されない場合はその旨チェックをしてください。なお実際の設計試作に加わることは条件ではありませんので、雰囲気をみるだけ、でも結構です。 ファイル一式を受け取られたら、適当な場所(作業フォルダが望ましい)に展開し、その中のフォルダ「Moses」内の「wgex.exe」のショートカットを、デスクトップ等に作成します。そのショートカットをダブルクリックして起動します。
LSIの設計は、最終的には「マスクデータ」と呼ばれる図形データをつくることになります。つまり「長方形」を、いくつかの「レイヤ」(色)ごとに、ルールに従って描いていく、ということになります。 言い換えれば、設計するものは回路でなくても、ルールさえ満たしていれば、単なる図形でも構いません。
この図形データを、実際には「レイヤ」ごとに図形データとして分離し、写真原板として半導体の製造工程を進めてLSIを作っていくことになります。
ここでは、MOSトランジスタを含む電子回路を設計するために最低限必要なことがらにしぼってまとめておきます。詳しいことは、必要であれば半導体・集積回路の専門書をご参照ください。 CAD(WGex)の基本操作
ファイル一式の中のフォルダ「Moses」の中の「MOSES_READEME.PDF」が、浅田先生作のWGexの公式(?)マニュアルです。ただ、詳しすぎるので、以下に要点をまとめておきます。基本的には、これらの操作だけで十分なはずです。
まず起動後、ファイル→新規作成で、空のファイルを開き、ここで操作に慣れましょう。
まず「右クリック」で、レイヤ選択や操作選択のメニューを開きます。
https://makelsi.github.io/images/docs/wgex_howto/wgex1.png
下半分が、描画する図形のレイヤ(色)、右上が描画する図形の種類です。 とりあえず、レイヤは左上の「L00」を選び、「四角形」を押してください。
1回目のクリック点と2回目のクリック点を対角線とする長方形が描画されます。
https://makelsi.github.io/images/docs/wgex_howto/wgex2.png
描画のグリッドがありますが、グリッドの間隔は、実際のLSIチップ上の寸法で 2μmとなります(この数字は覚えておいてください。「2um」とも表記します)。 ちなみに描画の座標の単位は1um(グリッド間隔の半分)です。
変形/移動/コピーについて説明します。変形は少し特殊なので、まず、移動とコピーを説明します。
ドラッグ操作をすると、ドラッグした範囲を矩形とする白く反転した領域があらわれます。この白い矩形が、移動/コピーしたい対象の図形に掛かるようにします(移動/コピーでは、図形のある頂点に掛かっていればその図形全体が選択されます)。
https://makelsi.github.io/images/docs/wgex_howto/wgex4.png
続いて、上のツールバーの中央にあるボタンで、行う操作を選びます。
https://makelsi.github.io/images/docs/wgex_howto/wgex3.png
左から順に、変形、移動、コピー、です。ここでは移動かコピーを選びます(このボタンが押されたままになっている間は、連続した編集中に毎回押す必要はありません)。
その後のドラッグ操作により相対指定された距離だけ、移動であれば複製されずに移動し、コピーであればその距離だけ移動した複製が作成されます。ドラッグ中は移動orコピー先の目安が表示されます。この時のドラッグ操作の場所はどこでもかまいません(このドラッグの時にも白ベタの矩形が現れますが気にしなくてかまいません)。
続いて変形について説明します。変形ではドラッグによる白く反転した領域により、図形全体ではなく頂点が選択されます。その後のドラッグ操作により、選択された頂点が移動し変形操作となります。同様に変形中は目安が表示されます。
基本的にはこれだけですべての作業はできますので、まずは操作に慣れてください。
※描画に「パス」というのがあります。メタル配線を描くのに便利なのですが、wgexでの描画にバグがあり、縮小表示時にwgexが強制終了する場合があることが既知のバグとしてあります。そのため、当面は「パス」を使わず、「四角形」を使う方がよいです。(2015/10/17:akita11.icon)
※セル名(ファイル名)は、「-」(ハイフン)や「.」(ピリオド)は含めない方が無難です。(2016/4/4:akita11.icon追記)
MOSトランジスタの設計
- P型・N型領域
まずNWLとPSLとNSLとACTの4つのレイヤを使って、次のような図形を描いてみてください。寸法はとりあえずは適当でOKです(図中には説明がないですが、次の節にあるCSTも描かれています)。
https://makelsi.github.io/images/docs/wgex_howto/actn.jpg
この図形は、LSIチップ上では、次の断面図のような構造になります。
https://makelsi.github.io/images/docs/wgex_howto/cs-actn.png
基本的には半導体なので、P型とN型の領域がありますが、この例では、N-Well(ウエル)と呼ばれるN型の「お風呂」(不純物濃度が薄い)の中に、実際のP型(PACT)とN型(NACT)の領域がつくられます。
このうちP型(PACT)は、N-Wellとの間にPN接合を形成します。
またN型(NACT)は、N-Wellと同じN型なので、普通に電気的に接触しているのと同じになります。
実際のN型領域(NACT)は、描画では「NSL」の中に描いた「ACT」の部分になります。 (同様に、PACTは、PSLの中のACT) つまり、図形の大小関係は、必ず、 NWL(N-Well)の中に、PSLまたはNSLがあり、その中にACTがある、ことになります。
次の例は、一番外側のお風呂がP型のP-Wellの例です。
https://makelsi.github.io/images/docs/wgex_howto/actp.jpg
https://makelsi.github.io/images/docs/wgex_howto/cs-actp.png
この場合は、NACTとP-WellがPN接合を形成し、PACTとP-Wellは電気的に接触していることになります。
- MOSトランジスタ
続いて、次のような図を描いてみてください。 ちょっと複雑ですが、これがMOSトランジスタの基本構造です。 (NチャネルMOSトランジスタ:nMOSFET)
https://makelsi.github.io/images/docs/wgex_howto/nmos.jpg
ここでは、先ほど出てこなかった、次のようなレイヤが使われています。
(CST : チャネルストップ。ウエルの内側に描く)
POL : ポリシリコン。MOSトランジスタのゲート電極に使う
ML1 : 第1層メタル(アルミ)配線
CNA : Activeコンタクト。PACT/NACTとML1を電気的に接触させる
CNP : Polyコンタクト。POLとML1を電気的に接触させる(これらの詳細は、興味のある方はファイル一式の中にある「プロセス仕様書_20120313.pdf」を参照してください)
このうち、CSTは、機械的にウエル(この例ではP-Well)の内側に描けばOKです。
POLは、MOSトランジスタのゲート電極になりますが、ACT領域をまたがるように置きます。そしてPOLで区切られた2つのACTが、MOSトランジスタのS(ソース)とD(ドレイン)になります。(ちなみに自己整合プロセスと呼び、POLの下のACTは、チャネル領域になります)
ML1は、第1層メタル配線で、いろいろな端子をつなぐ配線として使います。実際にはこのMLは、N/P型領域やPOLの「上」に形成されます。
このML1とN/P型領域をつなぐ縦の配線の柱がCNA、POLをつなぐ縦の配線の柱がCNPです。
なおP-Wellは、PSLで囲まれたACTと、そこにつながるCNAを通してML1につながっています。(MOSトランジスタのB(ボディ)端子)
レイアウト図と、以下の断面図をつなげて理解してください。
この例では、S(ソース)領域とB(ボディ)は、ML1を通して接続されています。
https://makelsi.github.io/images/docs/wgex_howto/cs-nmos.png
これのN/Pをすべて逆にしたものが、PチャネルMOSFET=pMOSFETです。
https://makelsi.github.io/images/docs/wgex_howto/pmos.jpg
https://makelsi.github.io/images/docs/wgex_howto/cs-pmos.png
また金属配線は、ML1の上にもう1層、ML2があり、ML1とは交差することができます。 この両者は、VIAで縦方向に接続することができます。
https://makelsi.github.io/images/docs/wgex_howto/m1m2.jpg
https://makelsi.github.io/images/docs/wgex_howto/cs-m1m2.png
デザインルールチェック(DRC)
これらの各レイヤの図形(長方形)は、実際の製造ではマスクデータとしてウエハ上に転写され、エッチングなどの工程が行われます。 この転写は光学的に行われますので、細すぎる線や近すぎる図形は、正しく転写されません。 そのため、各図形のサイズや間隔は、レイヤごとに最小寸法やサイズが決まっています(デザインルール)。 この詳細は、「 プロセス仕様書_20120313.pdf (2016/2/21:akita11.icon)プロセス仕様書_20120313_160116.pdf」に載っていますが、 これを要約したものが「DesignRule_summary.pdf」で、これを見ていただければ十分かと思います。
描いた図形がデザインルールを満たしているかのチェック(Design Rule Check; DRC)は、 設計の最終段階で必ずパスしなければいけません。 ただ、設計の過程で、まめにチェックをかける方がよいと思います。
例として、ファイル一式の中にある「nmos.gex」を開いてみてください。 (この例では、意図的にDRC違反を入れてあります)
https://makelsi.github.io/images/docs/wgex_howto/drc1.png
上のツールバーから、DRCを押します。
https://makelsi.github.io/images/docs/wgex_howto/toolbar-drc.png
DRC設定ダイアログが現れますので、 確認用に「出力の表示」にチェックを入れてOKを押します。
https://makelsi.github.io/images/docs/wgex_howto/drc2.png
DRCが実行され、次のようなDRCエラーの内容が表示されます。
https://makelsi.github.io/images/docs/wgex_howto/drc3.png
ちょっと見にくいですが、この中に2つのエラーがあることがわかります。
element width<6um(幅が6um未満)
ContactA_Overlap_Error_M1(ContactA(CNA)とM1の重なりがない)
この例では、たしかに幅が6um必要なML1が4umしかないところと、 CNAのところにML1がないところがあります。
このままだとどこがDRCエラーなのかわかりにくいので、 DRCエラーの箇所を示す図形を呼び出します。 セル入力(ショートカット=c)のダイアログを表示させ、 セル名に「nmos.drc」、右下の基準座標を(0,0)に設定してOKボタンを押します。 (このエラー箇所図形ファイルは、元のファイル名+拡張子drc、となります)
https://makelsi.github.io/images/docs/wgex_howto/drc4.png
すると、DRCエラーの箇所を示す図形が表示されます。
https://makelsi.github.io/images/docs/wgex_howto/drc5.png
このエラーの2か所を、ML1の変形やML1の描画で修正します。
https://makelsi.github.io/images/docs/wgex_howto/drc6.png
再度DRCをかけて、エラーがなくなって、次のようなダイアログが表示されたら、 めでたくDRCパスです。
https://makelsi.github.io/images/docs/wgex_howto/drc7.png
インバータの設計
この調子で、nMOSとpMOSを1個ずつつかう、もっとも基本的なCMOS回路である インバータ(NOTゲート)をつくってみましょう。
https://makelsi.github.io/images/docs/wgex_howto/inv.jpg
電源のVDD/GNDと、入力IN、出力OUTのところに、 それぞれの端子と同じレイヤで文字を書いておくとわかりやすいです(文字の左下の点が、各レイヤ領域の中に来るようにすること)。
※(2015/3/15:akita11.icon追記) 「Vdd」、「Gnd」という文字を置いたところのノードが、それぞれ1番と0番になります!(大文字・小文字は区別します)→Vdd、Gndと文字列を書いておくとよいです!
ちなみにできあがったものは、ファイル一式の中にinv.gexとして置いてあります。
回路抽出とシミュレーション
設計した回路が正しく動作するか、回路シミュレーションで確認することができます。
まず、描いたレイアウト図形から、回路シミュレーション用の回路情報を抽出します。
ツールバーのこのボタンを押します。
https://makelsi.github.io/images/docs/wgex_howto/toolbar-cex.png
現れるダイアログでOKを押すと、inv.cexというファイルができます。 これは回路シミュレーション用の回路情報(spiceネットリスト)です。
まずさきほどのinv.cexをテキストエディタ(メモ帳など)で開いておきます。
続いて、こちらのファイルをダウンロードします。
これをLTspiceで開き、その中の 「* copy from *.cex here (except .end)」の下に、 さきほどのinv.cexの内容のうち、最後の「.end」以外をコピ&ペーストします。以下のような感じになるはずです。
code:sp
* SPICE FET model
.lib 'mos_tt.lib'
mfet1 1 3 2 1 pch w=6u l=2u
mfet2 0 3 2 10nch w=6u l=2u
c1 0 2 0.0084pF
c2 0 3 0.0186pF
.end
** Net name table **
*$ OUT 0
*$ VDD 1
*$ OUT 2
*$ IN 3
vji 3 0 pwl 0ns 0v 100ns 0v 101ns 5v 200ns 5v
vs 1 0 dc 5v
.tran 1ns 200ns
inv.cexのままでは、回路の電源や入力信号がありませんので、 test.spでは、電圧源として追記してあります(この例ではもう書かれていますね)。それぞれの意味は、以下の通りです。
vi 3 0 pwl 0ns 0v 100ns 0v 101ns 5v ... →電圧源viの+端子が3番(IN)、-端子が0(GND)。波形を指定(PWL)し、 0nsで0V、100nsで0V、101nsで5V、・・・という折れ線で変化する電圧波形。 これが入力波形。
vs 1 0 dc 5v →電圧源vsの+端子が1番(VDD)、-端子が0(GND)。直流(DC)で5V。これが電源。 端子名とノード番号は、inv.cexの最後に書いてあります。この結果と違う場合は、 得られたinv.cexに書いてあるノード番号にあわせてください。
※(2015/2/24:akita11.icon追記:ただしGND=ノード0となる場合は、以下のものは不要です)ksmakotoさんが、ノード番号をすべて+1するスクリプトを作られました。Spiceではノード0は標準でGNDとして扱われますので、変換後のGNDノードと0番ノードとの間に0Vの電圧源や0Ωの抵抗を手動で挿入することで、0番ノードを基準とする電圧として扱うことができます(例えば3番ノードの電圧は、下記のv(3)-v(1)のような表記ではなく、v(3)、と書けます) https://github.com/metanest/mklsi/tree/master/cexrenum 上のツールバーから、走っているアイコン(Simulation)を押します。
https://makelsi.github.io/images/docs/wgex_howto/sim2.png
続いて、グラフを表示する電圧を指定します。 この例では、入力(ノード3-0間)と出力(ノード2-0間)を表示させれば、 インバータとして動作しているか確認できますので、これを表示させましょう。 ノード間の電圧は「2つのノードの電位の差」として表現されますので、 例えばノード3-0間は「v(3)-v(0)」と書きます。ちなみにノード0は常に0V(基準電位)なので、v(3)を指定してもOKです。
https://makelsi.github.io/images/docs/wgex_howto/sim3.png
このようなグラフが表示されるはずです。 たしかにインバータとして動作していることがわかります。
https://makelsi.github.io/images/docs/wgex_howto/sim4.png
なおそのほかのシミュレーションもできます。
code:sp
* SPICE FET model
.lib 'mos_tt.lib'
mfet1 2 1 0 0 nch w=6u l=2u
vgs 1 0 0v
vds 2 0 5v
.dc vds 0 5 0.1 vgs 0 5 1
.save I(vds)
.end
これはDC解析をしてVDS-ID特性を求める*.spです。 SPICEの各コマンドは、ここなどの情報や文献を参考にしてください。 ※(2015/1/7)使っているMOSトランジスタのモデルのうち、pMOSFETのモデルに不備がある可能性があります。現在原因究明中ですが、アナログ回路で使われる予定の方は、ご注意ください。
LSIチップ全体のレイアウト
今回製造を予定している北九州ひびきのでは、3.2mm x 3.2mmのLSIチップをつくります。
ただしその周辺は、外部の回路に接続するためのパッドという電極領域があるため、実質的に使える領域は2.5mm x 2.5mm (2500um x 2500um)程度です。それを設計試作に参加する皆さんで相乗りすることになります。
したがって一人であまり大きな領域を使ってしまうと、全体が入らなくなってしまうため、今回の試作に乗らない可能性があることはご了承ください。
みなさんの設計したレイアウトデータをまとめて全体に乗せる作業は、秋田が行います。面積割り振りの調整や設計締切などは、秋田に一任してください。
関連ページ