KLayout:インバータの設計(レイアウトの作成)
メモ
使用したKLayoutのバージョン:0.26.7
KLayoutを使ってOpenRule1umでのインバータのレイアウトを作成します。KLayoutのインストールや最初の設定などはKLayoutを使ったLSI設計をまずはご覧ください。本チュートリアルはWindows上でKLayoutを実行して行いました。 レイアウト作成前の各種設定:以下の設定を行います
グリッドは0.5umに設定する(”File”→"Setup"の"Application"タブの"Grid"を「0.5um」にする)⇒置くことのできる座標単位になる。
デフォルトグリッドを設定しておくといい。設定しておくと簡単に切り替えできる(”File”→"Setup"の"Application"タブ"Default Grids"を「0.5,1」 にして"OK"を押す。そして"View"→"Grid"から「0.5um」を選択)⇒レイアウト画面に表示されるグリッドの間隔が0.5umになる。
“File”→”Setup”の”Rulers And Annotations”タブの”Snapping”をクリックして、「Snap to grid」にチェックを入れる。⇒ルーラーの座標がグリッドの設定単位になる。
インバータのレイアウト作成
ここでは下のようなインバータを作っていきます。
KLayoutはデフォルトでは背景が白色になっています。好み次第ですが、背景色を変更したい場合は、"File"→"Setup"→"Display"タブの→"Background"をクリックして、"Background color"の色の選択のところをクリック、"Choose ..."をクリックして変更したい色を選択した後、"OK"を押すと背景色がその色になります。
https://makelsi.github.io/images/docs/KLayout/inv_sample.jpg
新規レイアウトの作成
"File"->"New Layout"をクリックして出てくるウィンドウで作成するセルの設定を行います。"Technology"は「OpenRule1um」を選択します。そのほか、"Top cell"はこれから作るセルの名前(例:「inv_test」)で、"Database unit"は空欄、"Initial window size"は最初のウィンドウサイズで、例えば「20 um」としておきます。
https://makelsi.github.io/images/docs/KLayout/inv_01_NewLayout.jpg
"OK"を押すと↓のようにレイアウトの編集ウィンドウが表示されます。
ウィンドウの右側に"Layers"が表示されていない場合は”View”->”Layers”をクリックして表示させてください。
https://makelsi.github.io/images/docs/KLayout/inv_02_Window.jpg
では早速描いていきましょう!
まずはインバータの回路の上側にあるPMOSから作ってみます。
ウィンドウ上部にある"Box"を選択して、右側にある"Layers"の中から"NWL"を選択します。まずは適当な大きさで↓のように描いてみてください。この時、画面に表示されているグリッドにBoxの始点を合わせると後から見やすくなります。一度クリックして始点を決めると、縦と横それぞれ0.5um単位でサイズを決められます。これが先ほどのGridの設定です。
https://makelsi.github.io/images/docs/KLayout/inv_03_NWL.jpg
次はダミーセルを置きます。ウィンドウ上部にある"Instance"を選択して”Library”で「OpenRule1um_Basic - OpenRule1um_Basic.gds」を選び、その左にある”...”をクリックします。出てきたウィンドウの下にある”Show all cells”にチェック(※)を入れて「nsubcont」を選択して"OK"を押し、↓のように先ほどのNWLの中に置きます。
※一部のセルはチェックを入れないと表示されないため、注意してください。
https://makelsi.github.io/images/docs/KLayout/inv_04_nsubcont.jpg
レイヤとダミーセルについて
ここで”Display”→”Full Hierarchy”をクリックしてすべてのレイヤを表示させると、先ほど置いたダミーセルの中身のレイヤも表示されます。
このダミーセルは、表示されたように複数のレイヤがすでに描かれています。これはOpenRule1umを使用する上で、このレイヤのうち、CNT(コンタクト)とVia(ビア)は直接描かないことになっているからです。その代わりにこのダミーセルを使います。普通は製造しようとする工場固有のテクノロジファイルをもらって、製造工場に合わせたプロセスで今回のように回路を描いていきます。しかし、OpenRule1umは製造工場に依存しないテクノロジファイルであるがために、置かれたダミーセルは製造前に製造工場のプロセスに合わせた実際のサイズのコンタクトやビアに置き換えることによって、実際に製造できる回路を描くことができます。
ほかにもDM_xxxという名前のレイヤが6つほどありますが、これも直接描きません(ダミーレイヤ)。
また、"Layers"の中の各レイヤをダブルクリックするとそのレイヤの表示/非表示が切り替えできます。ちなみにダミーセルのnsubcontを見てみると、NWL, DIFF, CNT, ML1, TEXT, Narea, DN_dcn, DM_nscnのレイヤから構成されていることが分かります。
インバータのレイアウト作成のつづき
これまでレイヤの描画やダミーセルの配置でやったように↓の画像を参考にして、とりあえずNWLの中身を完成させます。
Parea、DIFF、ML1、POLはレイヤで、6つあるdcontはダミーセルです。
https://makelsi.github.io/images/docs/KLayout/inv_sample_01.jpg
ひとつ、"POL"は"Box"ではなく”Path"を使って描いています。主に配線などはPathを使うと良いでしょう。"Path"を選択すると↓のようなウィンドウが出てくるので、"Width"を「1 micron」、"Type"は「Variable」を選択、"start"と"end"はともに「0 micron」として、"Ok"を押します。Pathはクリックして始点を決めて、ダブルクリックで終点を決めます。
https://makelsi.github.io/images/docs/KLayout/inv_05_2_Path.jpg
そのほか、よく使う操作をここにまとめます。
移動:"Move"
描いたレイヤやセルをクリックして移動できる。ドラックすると範囲を指定できて、選択範囲内のすべてを移動できる。
描いたレイヤの大きさ変更:"Partial"
描いたレイヤのサイズを変更したいとき、"Partial"を選択して変更したい辺or角をクリック、長さを変えたらもう一度クリックする。
ルーラーの使い方
ルーラーは描いたレイヤのサイズを知りたい時などに使います。"Ruler"を選択すると始点と終点を決めてその間の長さを計測します。また、"Ruler"の右に小さくある▼をクリックすると"Cross", "Measure", "Elipse", "Box"も選べます。
ルーラーの消し方については画面上部の"Select"をクリックしてルーラーを選択している状態から抜けて(Escキーでもできます)、消したルーラーを選択後にDeleteキーを押すと消せます。描いたルーラーをすべて消したい場合は、"Edit"→"Clear All Rulers and Annotations"(ショートカットキー:Ctrl+K)で消えます。
Tips:レイヤの描画で始点を決めた後はウィンドウ左下に相対座標が表示される⇒これを見ながら寸法を決めるとやりやすい。
Tips:セルをウィンドウに合わせて表示する⇒"F2"キーで"Zoom Fit"される("View"→"Zoom Fit"からもできる)。
そして、完成させるとこのような感じになると思います↓
https://makelsi.github.io/images/docs/KLayout/inv_05_PMOScomp.jpg
次はインバータの回路の下側のNMOSの部分を作ります。
Narea、DIFF、POL、ML1はレイヤで、dcont、psubcontはダミーセルです。
https://makelsi.github.io/images/docs/KLayout/inv_sample_02.jpg
出来たらこんな感じでしょうか↓
https://makelsi.github.io/images/docs/KLayout/inv_06_NMOScomp.jpg
ここまでできたら、PMOSとNMOSをつなげて入出力端子も作ります。
ML1とPOLはレイヤで、Viaとpcontはダミーセルです。pcontとViaは重ねるようにして置きます。
https://makelsi.github.io/images/docs/KLayout/inv_sample_03.jpg
これでレイアウト自体は出来ました!
https://makelsi.github.io/images/docs/KLayout/inv_07_INOUTcomp.jpg
最後にTEXTを入れます。電源線(VDDとVSS)や入出力(AとX)に付けていきます。まず、インバータの+側電源のVDDからつけましょう。ウィンドウ上部の"Text"を選択するとウィンドウが出てくるので、"Text"を「VDD」として、"Ok"を押します。VDDはML1のレイヤにつなげるのでウィンドウ右側の"ML1"を選択して、↓の画像のようにちょっと分かりにくいですがインバータの上あたり、ダミーセルのnsubcontのML1がある部分の右端に置いてみます。Textを配置する位置(置いたときに"+"マークが表示される位置)は、必ず選択したレイヤに重なる位置に置いてください(選択したレイヤとダミーセルの中にある選択したのと同じレイヤが重なるようにします)。
https://makelsi.github.io/images/docs/KLayout/inv_08_VDDcomp.jpg
同じように、下の画像を参考にしてVSSについてはpsubcontへ、入出力のAとXについてはレイヤがML2なので、"ML1"ではなく"ML2"を選択してTextを置きます。というのも、ここでは電源線はML1を、信号線はML2を使うという方針にしているからです。
https://makelsi.github.io/images/docs/KLayout/inv_09_VSS_A_Xcomp.jpg
これでインバータの完成です!
作成したセルの保存
ここで一度ファイルを保存します。Ctrl+Sは押さないでください! Ctrl+Sはデフォルトでは"Save"のショートカットキーではなく、KLayoutではデフォルトで「Show As New Top」のショートカットキーに割り当てられているので、もし押してしまった場合は、今まで書いていたレイアウトがウィンドウから消えたように見えます。元に戻すには”Display”→“Select Cell”を選択して、編集中だったセルを選択して“Ok”をクリックします。
保存は"File"→"Save As"で名前を付けて保存できます。セルの名前と同じようにここでは「inv_test」とでもしておきましょう。
次は...
History
2020/05/25~:Okawa作成。
2020/08/11:Ver. 1.0
2021/3/12 Okawa:ページタイトル変更とDRCの項目を削除。
2021/3/15 Okawa:若干の修正と追記。
2021/9/1 Okawa:ダミーセルの選択に関して注記を追加。