CADソフトウエアの初期設定

回路図の作成と回路シミュレーション

  1. Xschem(回路図エディタ)の起動
    cd
    mkdir Custom  // 作業ディレクトリ(好きな名称)
    cd ~/Custom
    xschem  // &を付けないこと
    
    top.schに部品のシンボルが表示される。
  2. メニュー: File - Create new window/tab を選ぶと、新しい編集画面が表示される。
  3. 新しい編集画面に下記の回路(インバータ)を入力。

  4. 回路図が完成したら、メニューより、File - Save as で保存。
  5. 右上の Netlist ボタンをクリックして、ネットリストを生成。
  6. 右上の Simulate ボタンをクリックして、回路シミュレーションを実行。Ngspiceが起動し、暫く待つと下記のような結果が表示されるので、エラーがないか確認する。ネットリスト(.spiceファイル)とシミュレーション結果(.rawファイル)は、~/.xschem/simulations/ ディレクトリに保存されている。

  7. 右上の Waves ボタンをクリックすると、Gaw(波形ビュワー)が起動する。シミュレーション結果のリストが表示されるので、入力v(a)と出力v(x)をグラフポートにドラッグして表示させる。

レイアウトの作成

  1. Klatout(レイアウトエディタ)の起動
    cd ~/Custom  // 作業ディレクトリに移動
    klayout &
    
  2. メニューより、File - New Layout を選択し、New Layout フォームで、Technology と Top cellの名前を入力する(Topセル名は、TOPのままでもよい)。

  3. 下記のようなインバータのレイアウトを入力してみよう。回路図に合わせて、n-ch MOSFETは、L = 0.15, W = 0.65、p-ch MOSFETは、L = 0.15, W = 1.0 とする。どちらのトランジスタも Nf (Finger) = 1 とする。操作は、Layyers欄(右側)で、描画するレイヤーを選択してから、上部のアイコンでBox, Polygon, Diffなどを選択し、レイアウトを描く。Partialを使用すると、既に描いた形状を伸ばしたり、縮めたりできる。Rularを使って、距離を測ることができる。設計ルールに目を通しておく必要があるが、最小線幅、コンタクト/VIAサイズなどの、基本的なところだけで十分。

    Skywater 130nm デザインルール

    使用したレイヤーは下表の通り。レイアウトを分かりやすくするために、li1レイヤーを配線に使用したが、PDKのライブラリセルを見ると、li1レイヤーをS, D, G, Bの各電極として使用し(複数のコンタクトを一つにまとめる役割)、各電極からmet1以上のレイヤーで配線することを想定しているようだ。

    レイヤー説明
    nwell.drawing緑網点nウエル
    diff.drawing緑半透明アクティブ(S, D)
    tap.drawing黄半透明アクティブ(B)
    psdm.drawing紫網点nイオン注入
    nsdm.drawing赤網点pイオン注入
    poly.drawing赤斜線ポリシリコン(G)
    licon.drawing白市松ローカル配線コンタクト
    npc.drawing赤枠(塗りなし)ナイトライド-ポリカット(ポリシリコンのコンタクト部の窒化物を除去)
    li1.drawingモカシン半透明ローカル配線

  4. セルの登録
    コンタクト(licon1), ローカル配線コンタクト(mcon), ビアは、アレイにして使用するため、セルとして登録しておく。
    1. メニューより、Edit - Cell - New cell を選択
    2. New Cell フォームで、Cell Name を設定してOKボタンをクリック
    3. 空のレイアウト編集画面が表示されるので、セルのレイアウトを描く
    4. セルを選択して Qキーを押すと、Object Properties フォームが開くので、ポリゴンの形状を設定する。
  5. セルの呼び出し

  6. ピンの作成
    入出力ポートと電源の配線に、以下の手順でピン名を付ける。
    1. Layer = li1.pin を選択(li1.drawingレイヤーの配線に名前を付ける場合)
    2. 配線の上にBoxを描く(大きさは任意、はみ出さないように)。
    3. Layer = li1.label を選択
    4. ツールバーで、Textを選び、Editor OptionsフォームのText欄にピン名を入力し、li1.pinレイヤーのBoxの上に配置(デフォルトの文字サイズが小さいが、何故か変更できない)。
    5. ピンの設定は、回路図と合わせる必要がある。この例では、VDD, GND, A, Zのピンを作成する。
DRC(Design Rule Check)

レイアウトデータにDRCエラーがあると製造ができないため、エラーフリーになるまでレイアウトを修正する必要がある。
  1. Klayoutのメニューより、Tools - Manage Technologies を選択。
  2. Technology Managerウインドウが表示されたら、Technologies欄で、sky130 - skywater 130nm を展開し、配下のDRCを選択。ディレクトリを作るよう指示が出たらOKする(~/.klayout/drc が作成される)。
  3. メニューより、Macros - Macro Development を選択。
  4. Macro Development フォームが表示されるので、左欄で[Technology sky130]を選択。
  5. ツールバーで、Import file (四角に矢印のアイコン)を選択
  6. Import Macro File フォームが表示されるので、~/pdk/sky130A/libs.tech/klayout/drc/sky130A.lydrc を選択
  7. DRCファイルが読み込まれ、下記の状態になる。
  8. 緑の三角アイコンをクリックすると、DRCが実行される。

  9. DRCが完了すると、Marker Database Browser が起動する。
    エラーの個数、エラーとなったルール番号、エラーとなったルールの内容などが表示される。下の図では、li.5のルールに関するエラーが1個発生しており、その内容は、「liconを囲んでいるliの2辺への最小距離は0.08um」と言っている。エラーの内容が分かりにくい場合は、デザインルールのページで、デザインルール番号を探すと、該当するルールが図で示されている。また、Merkers欄のエラーリストをダブルクリックすると、レイアウトエディタの方で、エラーの箇所が大きく表示される。

    Skywater 130nm デザインルール(左上のメニューボタンで、Design Rules - Periphery Rules)をクリック)

  10. レイアウトを修正して(この場合は、コンタクト(licon)の位置を少しずらす)、レイアウトを保存したら、再度DRCを実行。エラーが無くなると、下図のようにエラー個数が表示されない。

LVS(Layout vs Schematic)

回路図とレイアウト図の等価性検証(LVS)を実施する。LVSエラーがあっても製造は可能であるが、製造した回路は動作しない。
  1. Magic(レイアウトエディタ)を使用して、レイアウトデータからネットリスト(回路データ)を抽出する。
    1. LVS専用の作業ディレクトリでを用意する。
      cd ~/Custom  // 全体の作業ディレクトリ
      mkdir LVS
      cd LVS       // 作業ディレクトリに移動
      
    2. Magicを起動
      magic &
      
    3. Magicのコンソールで、以下のコマンドを実行(レイアウトウインドウで、コマンドの頭に:をつけて実行してもよい)。
      gds read ../
      load <セル名>               // レイアウトウインドウにレイアウトが表示される
      extract                    // 実行ディレクトリに.extファイルが作成される
      ext2spice cthresh infinite  // 寄生抵抗を出力しない
      ext2spice rthresh infinite  // 寄生容量を出力しない
      ext2spice                  // 実行ディレクトリに.spiceファイルが作成される
      quit                        // Magicの終了
      
  2. Magicで作成したネットリストをテキストエディタで開いて、下記の記述行の行頭に*を付ける(* はコメント行)。
    .subckt
    .ends
    
  3. Xschemで作成したネットリストを、作業ディレクトリにコピー。
    cp ~/.xschem/simulation/ネットリストファイル名.spice ./
    
  4. コピーしたXschemのネットリストをテキストエディタで開いて、下記の行(それぞれ、デバイスモデルのファイル指定、電源、入力波形)の頭に*を付ける(* はコメント行)。
    .lib /home/kitagawa/dependencies/pdks/sky130A/libs.tech/ngspice/sky130.lib.spice tt
    va a 0 pulse(0V 1.8V 50ps 1ps 1ps 50ps 100ps) dc 0V
    vvdd VDD 0 dc 1.8V
    
  5. Netgen-LVS用の設定ファイルをコピー
    cp ~/pdk/sky130A/libs.tech/netgen/setup.tcl ./
    
  6. Netgen(ネットリスト操作ツール)を起動。
    netgen
    
  7. Netgenのコンソールで、以下のコマンドを実行。
    lvs Xschemのネットリスト.spice Magicのネットリスト.spice
    quit  // Netgenの終了
    
    [注意] 回路図またはレイアウトの修正後にLVSを再実行する場合は、Netgenを一度終了し、再起動する必要がある。

  8. LVSの結果が、comp.out に出力される。Final result: Circuits match uniquely. と表示されれば、回路とレイアウトが一致している。


© 2013, Akio Kitagawa, Kanazawa Univ.