見出し画像

Klayoutの使い方 その1:基本的な使い方

ここではレイアウトエディター Klayout の使い方を説明します.環境は Skywater 130 nm プロセス,IIC-OSIC-TOOLS を想定しています.環境のセットアップについては以下を参照してください.

1.起動と設定

1.1 基本設定

klayout の起動は

$ klayout

なんですが,これだと編集ができない Viewerモードで起動します.編集ができる Editingモードで起動するには

$ klayout -e

です.面倒なのでデフォルトで Editingモードにしましょう.File → Setup を開いて,Application - Editing Mode の Use editing mode by default をチェックします.

デフォルト Editing mode で起動

これは好みですが,Klayout はデフォルトの背景色が白です.私は黒に慣れているので (Virtuoso が黒なので) Display - Background で Background color を黒にします.

背景色の設定

環境を終了すると ~/.klayout 以下が初期化される? klayoutrc が消えるため設定が保存されない…
対策としては,設定を行なったあと ~/.klayout/klayoutrc をどこかに保存しておいて

$ klayout -c klayoutrc

で起動すればいいんですが,マクロの登録 (DRC/LVS) などは保存されないので,このあたりを自動化する方法は別記事にまとめました.


1.2 新規レイアウトの作成

新規レイアウトの作成は File → New Layout です.Viewer モードだと作成ができません.Editingモードで起動しましょう.作成しようとするといくつのか設定項目が現れます.

New Layout 設定項目

Technology のところを sky130A に変えます.Top cell の名前も適当なものに変えておきましょう.OK を押すと,下のように新規レイアウトが開きます.

新規レイアウト画面

右の Layers のところに多数のレイヤーが表示されていることを確認してください.このレイヤーはテクノロジごとに定義されており,New Layout で sky130A を選んでいれば sky130A用のレイヤーが表示されます.Default など,別のテクノロジを選んだ場合はレイヤーがない,もしくは違うレイヤーが表示されて Skywater 130 nm用のレイアウトが描けません.

1.3 Layersウィンドウの見方

Layers ウィンドウには下のように利用可能なレイヤーがずらっと並んでいます.

Layers の表示

レイヤー名の右側の領域は,そのレイヤーの表示色を表すと同時に状態を表しています.×や三角のマークがついているレイヤーがありますが,それぞれの意味は

  • ▲: Hide 状態を表す.このレイヤーが画面に表示されない.

  • ×:Invalid 状態を表す.このレイヤーは選択や表示ができない.

で,右クリックから変更できます.Hide/Show はダブルクリックでも切り替えが可能.Layersウィンドウを見れば分かる通り,レイアウト設計では多数のレイヤーを使うため,いくつかのレイヤーを Hide して見やすくしたり,Invalid にして誤編集を防いだりすることで効率よくレイアウトを描くことができます.

1.4 Editor Options

編集中によく変える設定は Editor Options としてまとめられています.メニューの Edit → Editor Options か, F3 です.

Editor Options

グリッドへのスナップの ON/OFF,移動方向の制限などが設定できます.集積回路のレイアウトでは基本的に水平・垂直・45度のパターンしか許可されていませんので,Angle Constraints を Diagonal か Manhattan に変えておくとよいです.

2.基本操作

2.1 とりあえず

他のツールと同じく,ESC が Cancel です.困ったら ESC 押しましょう.

2.2 表示関係

Virtuoso使いの方には残念ながら,全体表示は f ではなく F2 です.

  • 全体表示:F2

  • 選択したものを全体表示:Shift-F2

  • Zoom-in/out : Ctrl-+/-,マウスホイール

  • 画面水平移動:Ctrl-マウスホイール

  • 画面上下移動:Shift-マウスホイール

2.3 描画・編集

描画は基本的に画面上部のボタンの機能で行ないます.

描画に使うボタン
  • Select : オブジェクトをクリックして選択します.Ctrl,Shift,マウスでの範囲指定などが使えます.ただし Ctrl-A での全選択はできません.選択を解除するときは ESC を押しましょう.

  • Move:選択したオブジェクトを移動します.移動方向を制限するには Editor Options の Angle Constraints で設定できますが,Movement: Any angle の状態でも Ctrl を押しながらだと Diagonal,Shift を押しながらだた Manhattan に一時的に制限することができます.

  • Ruler:定規です.描画した定規をすべて消すには Ctrl-K です.

  • Add/Merge/Erase/Mask/Diff:オブジェクトが重なったときにどのように処理されるかを指定します.

    • Add:なにもしない.そのままオブジェクトが置かれる.

    • Merge:重なったオブジェクト同士を結合 (Polygon に変換される)

    • Erase:Eraseモードにした後に描画したオブジェクトは消しゴムのようにはたらく.ただし消せるのは同じレイヤーのオブジェクトのみ.

    • Mask:重なったところのみが残る.

    • Diff:重なっていないところのみが残る.

  • Polygon:頂点を指定していき,多角形を作る.最後はダブルクリック.

  • Text:テキストを置く

  • Path:指定した経路に沿って,指定した幅の線を引く.

  • Instance:インスタンスを置く (3節を参照)

  • Partial:指定したオブジェクトの頂点を編集する

描画したオブジェクトは選択してショートカットキー Q でプロパティが開きます.座標などを直接指定できるので,正確な形状を作る場合にはプロパティから数値指定の方が早いこともあります.その他,反転や回転などは Edit → Selection 以下に多数の機能があります.

2.4 レイヤーを変える

Virtuoso と異なるのが,オブジェクトのレイヤーを変更する方法です.Qでプロパティを開いてレイヤーを選択…としたくなりますが,Klayout のプロパティにはレイヤーの選択はありません.レイヤーの変更は Edit → Selection → Change Layer です.使い方は

  1. レイヤーを選択する

  2. 選択したレイヤーに変えたいオブジェクトを選択する

  3. Change Layer を実行

という手順です.まとめて変更するには楽な気もしますが最初はちょっと戸惑います.

3.セル/インスタンスの操作

2節までの操作でレイアウトは描けます.が,レイアウトパターンを1つ1つ手で描いていくのはいろいろと無理です.ということで,既存のレイアウトを再利用する方法を説明します.

3.1 セル,インスタンス,ライブラリ

レイアウトを再利用できるようにまとめたものをセル,セルの集合をライブラリと呼びます.あるレイアウトに別のセルを配置するとき,そのオブジェクトをインスタンスと呼びます.このあたりはだいたい Virtuoso と同じですが,ライブラリとセルの扱い方がちょっと異なるので特に Virtuoso使いの人は混乱しないように注意しましょう.

IIC-OSIC-TOOLS では Skywater 130 nm のライブラリは登録されていませんが,~/.klayout/libraries に GDSファイルを置くことでライブラリとして参照することができます.Skywater 130 nm のセルを使う方法については4節で説明します.

3.2 セルを作る

簡単な例としてビアをセルにします.ビアは形状が固定されている上に大量に使用するので,セルにしておきましょう.Edit → Cell → New Cell を実行すると下のようなウィンドウが開きます.なお,すでに作成したレイアウトをセルにしたい場合は Edit → Selection → Make Cell です.

名前を via1 にして OK を押すと,セルリストに "via1" が登録されます.

via1 が登録されたセルリスト

via1 がトップに表示 (セルリストで太字で表示) されていることを確認し,レイアウトを描きます.ルール (via.1a) に従い,via.drawing レイヤーで0.15um×0.15um の正方形を描きます.

via1 (ルーラーは分かりやすいように表示していますが,不要なので消しましょう)


これで via1 が利用可能になりました.

3.3 インスタンス

作成した via1 を元のレイアウトで利用します.アイコンから Instance ボタンを押すと,Editor Options ウィンドウの Instanceタブが開きます.

Instanceボタン
インスタンス挿入

ライブラリは Local (no library),Cell の横にある虫めがねアイコンをクリックすると,下図のようなセルリストが開きます.

挿入するセルの選択

via1 を選択し,レイアウト画面で配置すると via1 がインスタンスとして配置されます.

配置されたインスタンス (via1)

枠線で表示されますが,中身を表示したい場合はセルリストのレベルを調整します.どの階層からどの階層までの表示するかを数字で設定します.右側を2まで上げると via1 の中身が表示されます.

セル表示のレベル選択

3.4 注意

セル/インスタンスを扱う際に注意することとして,Editor Option の "Select top level object only" を有効にしておきましょう.Klayout ではこのオプションを有効にしていないと,「インスタンスの中身を直接編集できてしまう」という動きをします.意図せずセルの中身を編集してしまうというのはかなり危険なので,このオプションは必ず ON にしておきましょう.

Select top level object only オプション

3.4 アレイ

インスタンスの挿入で強力な機能がアレイです.指定した間隔で指定した数だけ一気にインスタンスを挿入します.

アレイの設定

インスタンス挿入ウィンドウの下半分,Array Instance がアレイの設定です.rows が行 (y方向),columns が列 (x方向) の数で,Row step/Column step が行・列がどういう間隔で配置されるかですが,Klayout は step に x, y を指定できるため正方形以外のアレイが作れます.Virtuoso はできません.まぁ,下に Warning が書いてあるようにトラブルを起こす可能性があるのであんまり使わない方がいいようですが.
上の画像の設定では,via1 を 0.3 um間隔で3×3 に配置します.挿入すると下のようになります.

3×3のアレイ

挿入されたアレイは,3×3 で1つのオブジェクトであるかのように扱われます.9個のうち1つだけ移動,ということは (たぶん) できません.
Virtuoso だとアレイを分解できるので Klayout でもできてもよさそうなものですが,今のところやり方は見つけられていません.Edit → Selection → Flatten Instances をかけると hierarchy level を1にしてもインスタンスではなく描画オブジェクトにまで分解されてしまう…

4.Skywater 130 nmのセルを使う

OpenLane など,デジタル回路設計では当然ながらスタンダードセルライブラリが使えるわけですが,Klayout ではそのままではライブラリとして参照することはできません.~/.klayout/libraries にGDSファイルを置けばライブラリとして使うことができます.もしくは,必要なセルをローカルライブラリにコピーして使うという方法もあります.

4.1 ライブラリに登録

KLayout では,~/.klayout/libraries にGDSファイルを置くと,そのGDSファイルの中身がライブラリとして参照できます.SkyWater 130 nm のGDSファイルは /foss/pdk/sky130A/libs.ref/sky130_**/gds/  にあります.単体MOSなどを含む sky130_fd_pr,デジタルのスタンダードセルを含む sky130_fd_sc_hd あたりをコピーしておくと便利です.

% mkdir ~/.klayout/libraries
% cp /foss/pdk/sky130A/libs.ref/sky130_fd_pr/gds/sky130_fd_pr.gds ~/.klayout/libraries/
% cp /foss/pdk/sky130A/libs.ref/sky130_fd_sc_hd/gds/sky130_fd_sc_hd.gds ~/.klayout/libraies/

これでインスタンスを置く際にライブラリとして参照できます.

GDSファイルをライブラリとして登録
スタンダードセル (sc_hd)

ただし,~/.klayout の下はコンテナを起動する度に初期化されます.毎回起動するたびにこの作業をするのが面倒であればスクリプトで自動化できます.詳しくは以下の記事を参照してください.

4.2 GDSからセルをコピーして使う

ライブラリとして読み込むのではなく,ローカルライブラリにコピーするには GDSファイルを開いて,そこからコピーすればよいです.

GDSIIのありか

読み込むと,下図のようになりセルリストに大量のセルが読み込まれているのが分かります.

sky130_fd_pr.gds を読み込んだところ

あとは使うセルを右クリックして Copy,セルリストに Paste すれば Local ライブラリのインスタンスとして使うことができます.例えば sky130_fd_pr__rf_pfet_01v8_aF02W2p00L0p15 をインスタンスとして使うと下のようになります.

rf_pfet をインスタンスとして使用

しかしセル名からどういうセルか判別しにくいし商用PDKで Pcell に慣れている身にはちょっと辛い… これについては引き続き調べます.

この記事が気に入ったらサポートをしてみませんか?