マニマルファブPDKによるフルカスタム設計実習

ミニマルファブから無料公開されているSOI CMOSプロセスPDK(Process Design Kit)を使用してみます。ただし、私はミニマルファブでチップを試作したことがないので、実際にこの設計手順で製造が可能かは分かりません。産総研インダストリアルCPS研究センターでチップ試作が可能なようですので(ただしメタルは1層のみ)、近日試したいと思います。

開発環境のインストールは、こちらの投稿を参考にしてください。

回路図エディタは、EEschema(KiCAD), LTspice, Xschemに対応しているようです。ここでは、操作が簡単なXschemを使用します。

以降、作業ディレクトリを /home/ユーザ名/work として説明します。WSLのUbuntu端末から、Xschemをフォアグラウンドで起動してください。

cd ~
mkdir work
cd work
xschem

もし、起動画面になにかの回路が表示されているようなら、メニューより、File – Create new window/tab を選んで新しい入力シートを表示させてください。ここに下記のようにインバータの回路を入力します。

  1. 回路名や回路の説明は、ツールバーの”Insert Text”ボタンまたは tキー で入力します(入力しなくても問題はないが、何の回路で誰が何時作ったのか分かると便利)。
  2. 回路部品、入出力ピン、回路シミュレータへの指示等は、ツールバーの”Insert Symbol”ボタンまたは Shift + i で入力します。
    1. Choose symbolフォームが表示されるので、左欄でシンボルライブラリを選択。ここでは、layout/salt/ICPS2023_05/tech/symbols/xschem を使用します。
    2. 下記表1に従って、部品シンボルと回路シミュレータへの指示欄を呼び出します。シンボル等を選んで、OKボタンを押し、シンボルを配置する場所をクリック。
    3. シンボルの削除は、シンボルを選択してDELキーまたはツールバーでハサミのアイコンをクリック。
  3. 配線は、ツールバーの”Insert Wire”ボタンまたは wキー で入力します。ミニマルファブのMOSFETは完全空乏型SOI MOSFET(3端子デバイス)と説明されていますが、Bulk MOFETモデル(BSIM3v3)を流用しているため、4端子のシンボルになっています。B端子はVSSまたはVDDではなく各MOSFETのS(ソース)に接続して使用します(説明書には書いてないのですが、たぶんこれでよいと思います)。
  4. 回路シミュレータへの命令(SPICE directive)や回路の接続情報(Netlist)もツールバーの”Insert Symbol”ボタンをクリックして入力します。
表1 使用するシンボル
シンボル名説明
PMOS_MIN.symp-ch MOSFET
NMOS_MIN.symn-ch MOSFET
iopin.symioピン [注1]
netlist.sumNetlist等の入力/表示欄
code_shown.symSPICE directive等の入力/表示欄

[注1] ipin(入力ピン)、 opin(出力ピン)も用意されているが、SPICE(回路シミュレータ)は、入力、出力、電源の見分けがないため、全てのピンにiopin(入出力ピン)を使用すること。opinまたはipinを使用するとERC(Electrical Rule Check)エラーの原因になることがあります。

  1. プロパティの設定

各シンボルのプロパティを設定します。シンボルをダブルクリックするか、シンボルを選んで qキーを押して、Edit Propertiesフォームを開き、ピン名や部品のパラメータを設定します。各パラメータは、下記表2のようにしてください。

表2 MOSFETのパラメータ
シンボル名設定内容
PMOS_MIN.symname=M2 model=pch w=61u l=10u m=1
NMOS_MIN.sym
[注2]
name=M1 model=nch w=13u l=10u m=1
iopin.sym (A)name=p1 lab=A
iopin.sym (X)name=p2 lab=X
iopin.sym (VDD)name=p3 lab=VDD
iopin.sym (VSS)name=p4 lab=VSS
netlist.sym
[注3, 4]
name=s0
value=
“Va A 0 pulse(0V 5V 10ns 0.1ns 0.1ns 10ns 20ns) dc 0V
Vd VDD 0 dc 5V
Vs VSS 0 dc 0V”
code_shown.sym
[注5]
name=Ngspice
only_toplevel=false
value=
“.include ~/SOI_CMOS
.dc va 0V 5V 0.001V
*.tran 10ps 80ns”

[注2] PDKのリファレンスマニュアルには、LTiNとL (= Lchannel)が定義されていますが、回路図(デバイスモデル)では、L = LTiNの値を設定します。設計規則より、Lmin = 10um, Wmin = 13umであることに注意。

[注3] 電圧源(直流電源と入力信号源)は、設計する回路に含まれないので、回路図には描かず、netlist.sym の方に記入します。value= の記述内容に改行を入れる場合は、” “で囲むことに注意。

[注4] 集積回路の設計では、GND(ノード番号0)とVSSを分けることを推奨します。GNDはグローバルな配線であるため、GNDを含む回路モジュールは、モジュール間で意図しないショートが発生し、部品として使いまわす場合に不都合です。このため、0Vの電圧源VsをGNDとVSSに挟んで、GNDとVSSを分けるようにします。

[注5] 回路シミュレータへの命令は code_shown.sym に記入してください。ただし、シミュレータの起動オプションがキャンセルされるため、.control ~ .endc ブロックは使用しないでください。

  1. 回路図が完成したら、メニューより、File – Save as で、回路図を保存してください。(ファイル名:inv.sch)

回路シミュレーションは、XschemからNgspiceをバッチモードで呼び出して実行します。

  1. モデルパラメータファイルのパスを、.include ~/SOI_CMOS と指定したので、ホームディレクトリからPDK内のSOI_CMOSにシンボリックリンクを作成しておきます。
ln -s ~/.klayout/salt/ICPS2023_5/Technology/tech/models/SOI_CMOS SOI_CMOS
  1. Xschem のメニューより、Simulation – Configure simulators and tools を選び、Ngspice batch のラジオボタンを選択し、Accept, Save and Closeボタンをクリックします。これにより、回路シミュレータ(Ngspice)をバッチモードで呼び出します。
  1. Xsxhemのメニューバーより、Netlist -> Simulate のボタンを順にクリックします。ボタンが緑色になったら成功です。
  2. Ngspiceからエラーメッセージが出なければ、メニューバーのWavesボタンより、External Viewerを選択します。Gawの波形ウインドウと信号選択ウインドウが表示されます。
  3. Gawを使いやすくするため、Gawのメニューより次の設定をしておきます。
    • Preferences – show more Y labelsにチェック
    • Preferences – Show Gridにチェック
    • Preferences – Allow Resizeにチェック
    • Preferences – Algorithm List – per-pixelmodified にチェック
    • File – Save confを実行(設定の保存)
  4. 信号選択ウインドウから、入力電圧v(a)と出力電圧v(x)を空のグラフ上にドラッグ&ドロップして、波形を表示してください。
  1. 不要なグラフは、グラフの上で右クリック – Remove this Panel で消すことができます。グラフウインドウを広げて下図(上)のように表示させてください。横軸が入力端子の電圧、横軸が出力端子の電圧、青線が入力電圧、赤線が出力電圧です。スイッチング閾値がほぼ\( VDD/2 )\になります。
  1. Xschemのcode_show.symの内容を下記のように変更して、シミュレーションを再度実行してみてください。
*.dc va 0V 5V 0.001V
.tran 10ps 80ns"

今度は横軸が時間、縦軸が電圧です。下のグラフが入力波形、上のグラフが出力波形です。やや立ち上がりが遅い(つまりp-ch MOSFETの電流値が小さい)ようですが許容範囲です。

レイアウト設計は、ミニマルPDKが対応しているKLayoutを使用します。下記のように起動してください。-e オプションをつけると、編集モードでの起動になります。

cd ~/work
klayout -e &
  1. メニューより、File – Setup を選び、Setup画面で、表3のように初期設定を行います。この設定は、初回のみです。
表3 初期設定
項目(左欄)設定備考
Application -Editing ModeUse editing mode by defaultに☑次回起動から -e オプション不要
Application -Grid0.5
Application -Default Grids1,0.5, を追加メニュー: View – Grid で 1um. 0.5umを選択できるようにするため
Display – TextsText font = Stick
Standard text size = 10(20でもよいかも)
フォントをdefault以外にしないと、sizeが反映されないので注意
Display – BackgroundBack ground color を設定見やすい背景色にする(黒など)
Rules And Anotations – SnappingSnap to gridに☑
  1. メニューより、File – New Layout を選択して、レイアウト画面を表示させます。Technology は、ICPS2023_5を選択、Initial window size – 200um(適当で)にしてOKボタンをクリック。
  2. メニューより、Edit – Editor Options を選択すると、ウインドウ左下にEditor Optionsペインが表示されるので、表4のように設定します。この設定は初回のみです。
表4 エディター設定
項目(左欄)設定備考
Angle Constraints – ConnectionsManhattan縦横方向のみ接続可能
Angle Constraints – MovementsManhattan縦横方向のみ移動可能
Hierarchical Features – Shallow selectSelect top level objects onlyに☑下の階層の構造は選択対象から外す
  1. レイアウトの作成の前に、下記の画面操作を覚えておいてください。
    • 拡大縮小:マウスホイール
    • 左右移動:CTRL + マウスホイール
    • 上下移動:SHIFT + マウスホイール
    • 画面パン:マウス中ボタンを押してドラッグ
    • 全画面フィット:F2キー

[参考] メニューより、File – Setup -> Application – Custmize Menu の設定画面で、キーバインドを設定することができます。

  1. MOSFETのPCELL (Parametric Cell) を呼び出します。
    1. 左側のLibraries欄で、Pcells – ICPS2023_5 – Pcells を選択。->[参考]
    2. Libraries窓に、各種Pcellが表示されます。
    3. PchとNchのPcellをレイアウトウインドウにドラッグして置きます。
    4. メニューより、Display – Full Hierarchy を選択すると、Pcell内部の構造が表示されます(編集中の階層より下の階層が表示された)。

[参考] ~/.klayout/libraries を作成して、その中にGDSファイルを置くとLibraries欄に表示され、セル(レイアウト部品)として呼び出せます。

  1. PCELLのパラメータを設定します。
    1. n-ch MOSFETのPCELLレイアウトを選択し、qキー(または、メニューより、Edit – Properties)でObject Propertiesフォームを表示させます。
    2. PCell Parametersタブを開き、回路図と一致するように、Mumber of fingers, Nch w, Nch l等を設定します。チェックボックスは、変更するとレイアウトがどう変化するかを確認し、好みで設定します。PDKの説明ではVIAをなるべく使わないようにとのことなので、Put Via over contact のチェックを外します。とりあえず、下図のように設定してください。
  1. n-ch MOSFETとp-ch MOSFETの距離を調整します。
    1. 最小面積でレイアウトができるように下図のように、21umの距離を空けます。なぜ21umにしたのかは、後で解ります。
    2. 距離は、ルーラで測定します。Rulerボタンをクリックし、レイアウト上をクリックスすると、クリックした点からの距離が表示されます。単位はマイクロメートルです。21umの位置で再度クリックしてルーラを固定します。ルーラモードは、ESCキーで解除します。ルーラモードを抜けても、ルーラは残ります。CTRL + kキーで、ルーラが全て消えます。
    3. Moveボタンをクリックしてから、PCELLをクリックして移動させます。移動モードは、ESCキーで解除します。
  1. 配線を行います。配線は、BoxまたはPathで作成することができます。Pathは折れ曲がりができるので、通常はPathが使いやすいと思います。
    1. 設計規則により、メタル配線間の最小距離は4umなので、配線が近づきそうな場所に、4umのルーラを設置します(下図参照)。
    2. Pathボタンをクリックし、レイヤー欄からML1(金属層)を選びます。
    3. 右下ペインにEditor Options欄が現れるので、PCELLの配線幅に合わせて、Width = 13に設定します。
    4. レイアウト画面上で、クリックすると配線が始まり、ダブルクリックで終了します。ダブルクリックではなくクリックすると折れ曲がりになります。Pathの作成には、少し慣れが必要だと思います。
    5. 電源配線VDD, VSSは、後で他の回路と繋いだときに抵抗が小さくなるよう(本来は電源ラインに抵抗があってはいけない)、太めにしてみましょう。ここでは、Width = 26 にします。
    6. 配線Pathは適当に作成しておき、後でMoveボタンにより移動させるという方法もあります。
  1. レイアウト上の配線にPin名を設定します。回路図との対応を取るため、Pin名に対応する配線がどれかを明示しておきます。
    1. Textボタンをクリックし、名前をつけたい配線のレイヤーを選択します。ここでは、配線にML1を使用しているので、配線名のレイヤーもML1です。
    2. 右下ペインEditor OptionsのText欄にピン名を入力します。
    3. レイアウト上をマウスで左クリックすると、その位置にピン名が設置されます。ピン名左下あたりにある+マークが、対象の配線上に乗っていることが必要です。
  1. レイアウト図が完成したら、メニューより、File – Save As で、回路図を保存してください。(ファイル名:inv.gds)

以上でインバータのレイアウトは完成ですが、PDKマニュアルには示されていないレイヤー名が表示されていて、?なところもあります。レイヤ番号と照合すると下記のように読み替えできそうです。また、PCELL内部が自己整合プロセスを想定したレイアウトになっていますが、後でフォトマスクアライメント形式に自動変換されているようです。恐らく、他のミニマルファブプロセスとテクノロジデータを共有しているためではないかと思われます。

Layer表示実際のLayer
DIFFSOI
TINTiN-Gate
CONContact
ML1M1
PareaP-diff
NareaN-diff
P-WellN-ch

手動でレイアウトを行った場合は、DRCが必須です。DRCをパスしていないデータでは製造ができません。

  1. KLayoutのメニューより、Tools – DRC – DRC for ICPS2023_5 を選択。
  2. DRCが実行され、Marker Databese Browserが表示されます。
  3. Directory欄(左側)の全てのチェック項目が緑になっていれば、DRCをパスしています。
  4. 試しに、わざとエラーを作ってみます。
    1. KLayoutで、下記のようにメタル間隔が4umよりも短くなるように、ML1レイヤーのボックスを追加します。
  1. DRCを再実行して(Marker Databese Browserが起動したままなら、緑の三角ボタンをクリック)、エラーを確認します。
    1. Directory欄のチェック項目リストに黒文字の[Top]が表示されているので、三角マークをクリックして展開
    2. “(ML1-8)Ml1 space < 4” は、ML1レイヤーで間隔が4um以下になっていることを指摘しています。
    3. エラーの表示をクリックすると、Merker欄にフラグが、Info欄に座標が表示され、KLayoutの画面で、該当箇所が拡大表示されます。

LVSはパスしていなくても製造はできますがデバイス寸法や配線が間違っているので回路が動作しません。PDKにLVSの実行スクリプトが用意されているので、これを使ってみます。

LVSは、回路図から作成した参照ネットリストとレイアウト図から作成した抽出ネットリストを比較します。参照ネットリストを作成するため、Ngspiceのシミュレーション用ネットリストをworkディレクトリにコピーしてください。

cd ~/work
cp ~/.xschem/simulations/inv.spice ./
  1. KLayoutのメニューより、Macros – Get referemce for OCPS2023_5 を選ぶと、入力ファイルを聞いてくるので、先程コピーした、inv.spiceを指定。~/work/lvs_workというディレクトリが作成され、参照ネットリストが保存されます。
  2. メニューより、Tools – LVS – LVS for ICPS2023_5 を選ぶと、Netlist Database Browser が表示されます
  3. INV <-> TOPをダブルクリックして展開すると、配線とデバイスの対応関係が示されます。
  4. 全てグリーンであればLVSをパスしています。エラーがあると赤い停止アイコンが表示されます。

レイアウトデータをメーカに提出するためには、GDS IIフォーマットのファイル(GDSファイルまたはGDSストリームと呼ばれる)が必要です。通常、レイアウトエディタのレイヤー構成と製造メーカのレイヤー構成は異なっているため、翻訳が必要になります。下記の操作で、製造用GDSファイルの出力を行います。

  1. KLayoutのメニューより、Macros – ICPS2023_5(SOI mixed) to SOI conversion を選択します。
  2. 作業ディレクトリに inv_converted.gds という変換されたGDSファイルが作成されています。