1

第７章 Deep Submicron プロセス向け回路記述法(.PARAM と.LIB、MOSFET の Binning 処理)
Ns-tools に添付の回路シミュレータ：ns-spice においては、最近の Deep Submicron
プロセス向け SPICE シミュレータにおいて一般的となっている下記の機能が使用可能です。
(1) .param 記述によるパラメータ定義(2) .lib 記述によるライブラリファイルのインクルード(3) MOSFET ビニングモデルへの対応
サンプル回路図を図１に示します。

NS-Draw Drawing
nakamura@7-PC
2010 / 03 / 12
Path: C:\Design\ns-tools\example\CHAPTER_7(Binning)\inv1_TRAN.nsd
Last Modified : 2010/03/12 20:42:03
nakamura@7-PCVdd(spice) # .param Ln=0.18u Lp=0.18u LD=0.4u WD=0u(spice) # .param Vdd=1.8V Td=200p Tcyc=1ns Tr=50p Tf=50p(spice) # VIN in 0 PULSE (0 'Vdd' 'Td' 'Tr' 'Tf' 'Tcyc/2-Tr-Tf' 'Tcyc')

L=Lp(spice) # VVDD Vdd 0 DC 'Vdd'(spice) # VGND Gnd 0 DC 0V

W=2uinout(spice) # .lib mos_b4.skw @{FF|TT|SS}(spice) # .include mos_b4.mdl

W=1u(spice) # .print v(in) v(out)L=LnGnd(spice) # .tran 'Tcyc/100' 'Tcyc'

20fFGnd

図１

インバータ回路の例

図１はインバータ回路の過渡解析を行う回路図になっています。Ns-spice によるシミュレーション結果を図２に示します。この回路図では、次章以降で説明するパラメータスキャンを使用しており、MOS トランジスタのプロセス条件を変更して３回（FF,TT,SS）のシミュレーションが連続して行われます。図２の波形では、３回分のシミュレーション結果を同時に示しています。

2v(in):ffv(out):ffv(in):ttv(out):ttv(in):ssv(out):ss2
1.6
1.2
800m
400m
-000200p

400p

600p

800p

1ntime図２インバータ回路のシミュレーション結果（FF,TT,SS）

ここで、図１の回路図からネットリスト出力を行うと、リスト１のネットリストが得られます。
リスト１ 図１の回路のネットリスト
1:**********************************************************************
2: * Top Level: inv1_TRAN
3: *+ (C:¥Design¥ns-tools¥example¥CHAPTER_7(Binning)¥inv1_TRAN.nsd)
4:**********************************************************************
5: M1 out in Vdd Vdd pch W=2u L=Lp AD='LD*(W-2*WD)' AS='LD*(W-2*WD)'
6: + PD='2*(W-2*WD+LD)' PS='2*(W-2*WD+LD)' NRD='LD/(W-2*WD)'
7: + NRS='LD/(W-2*WD)'
8: M0 out in Gnd Gnd nch W=1u L=Ln AD='LD*(W-2*WD)' AS='LD*(W-2*WD)'
9: + PD='2*(W-2*WD+LD)' PS='2*(W-2*WD+LD)' NRD='LD/(W-2*WD)'
10: + NRS='LD/(W-2*WD)'
11: C0 out Gnd 20fF
12: .param Ln=0.18u Lp=0.18u LD=0.4u WD=0u
13: .param Vdd=1.8V Td=200p Tcyc=1ns Tr=50p Tf=50p
14: VIN in 0 PULSE (0 'Vdd' 'Td' 'Tr' 'Tf' 'Tcyc/2-Tr-Tf' 'Tcyc')
15: VVDD Vdd 0 DC 'Vdd'
16: VGND Gnd 0 DC 0V
17: .tran 'Tcyc/100' 'Tcyc'
18: .lib mos_b4.skw @{FF|TT|SS}3

19: .include mos_b4.mdl20: .print v(in) v(out)
21: .GLOBAL Vdd Gnd
22: .END
ここで、12,13行目の２つの.paramで始まる行は、パラメータ定義文であり、９個のパラメータが定義されています。
12: .param Ln=0.18u Lp=0.18u LD=0.4u WD=0u
13: .param Vdd=1.8V Td=200p Tcyc=1ns Tr=50p Tf=50p

14-16 行目では、定義されたパラメータを用いて、電圧源の定義がされています。パラメータの引用は必ず、式の中で行う必要があり、式は、必ず’’で囲う必要があります。
式 の 中 で は 、 数 式 演 算 (+,-,*,/,^) が 可 能 で あ り 、 ま た 、 組 み 込 み 関 数（ sin(x),cos(x),tan(x),asin(x),acos(x),atan(x),sinh(x),cosh(x),tanh(x),abs(x),min(x,y),max(x,y),sqrt(x),exp(x),db(x),ln(x)[log(x)],log10(x),pwr(x)[pow(x)],unif(x,y),aunif(x,y),gauss(x,y,z),agauss(x,y,z)）も利用可能になっています。
14: VIN in 0 PULSE (0 'Vdd' 'Td' 'Tr' 'Tf' 'Tcyc/2-Tr-Tf' 'Tcyc')
15: VVDD Vdd 0 DC 'Vdd'
16: VGND Gnd 0 DC 0V
17: .tran 'Tcyc/100' 'Tcyc'

18 行目は、ライブラリのインクルード指定です。
18: .lib mos_b4.skw @{FF|TT|SS}

18 行目では、@{|}指定によるパラメータスキャンが用いられており。３回のシミュレーションが実行され、その各回ごとに際に 18 行目は下記のように変更されます。
1回目: .lib mos_b4.skw FF
2回目: .lib mos_b4.skw TT
3回目: .lib mos_b4.skw SS.lib 行では、下記のようにファイル名とキーワードを指定します。
.lib ファイル名 キーワード

指定ファイル内のキーワードが一致する「.lib キーワード」行から、.endl 行までを、ネットリスト内にインクルードします。この.lib 行は、同一ファイル内でネスティングすることも可能です。

4mos_b4.skw* Typical model.lib TT.lib mos_b4.skw NT.lib mos_b4.skw PT.endl* Corner models.lib FF.lib mos_b4.skw NF.lib mos_b4.skw PF.endl.lib SS.lib mos_b4.skw NS.lib mos_b4.skw PS.endl.lib FS.lib mos_b4.skw NF.lib mos_b4.skw PS.endl.lib SF.lib mos_b4.skw NS.lib mos_b4.skw PF.endl***.lib NF
.param vth0_n= 0.1.endl.lib NT.param vth0_n= 0.3.endl.lib NS.param vth0_n= 0.5.endl.lib PF.param vth0_p=-0.1.endl.lib PT.param vth0_p=-0.3.endl.lib PS.param vth0_p=-0.5.endl
リスト１から.lib mos_b4.skw TT でインクルードされる上記の mos_b4.skw の例では、赤字で示される部分が抽出されることになり、結果として下記の２つの行が抽出され、インクルードされることになります。

5.param vth0_n= 0.3.param vth0_p=-0.3
また、19 行目の.include mos_b4.mdl では、mos_b4.mdl ファイルがそのままイン k る
ルードされますが、この中で、以下のように、MOSFET のモデルがビニングにより定義されています。下記の例では、nMOSFET、pMOSFET としてそれぞれ２種類のモデルが定義されていますが、モデル名がたとえば nMOSFET は、nch.x という名称になっており、それぞれのパラメータの有効範囲が青字で示す範囲で指定されています。Mos_b4.mdlの例では、nch.1 の有効範囲は、0.1um≦L＜20um, 0.1um≦W＜10um, nch.2 の有効範囲
は、0.1um≦L＜20um, 10um≦W＜100um になります。ネットリスト中での nMOSFET のモ
デル名を nch としておけば、その nMOSFET の L 値、W 値から、この有効範囲に合うものが自動的に選択され、モデルが nch.1 あるいは nch.2 と置き換わることになります。
Mos_b4.mdl*.model nch.1 nmos ( level=54 version=4.4.0 lmin=0.1u lmax=20u
wmin=0.1u wmax=10u vth0='vth0_n').model nch.2 nmos ( level=54 version=4.4.0 lmin=0.1u lmax=20u wmin=10u
wmax=100u vth0='vth0_n').model pch.1 pmos ( version=4.4.0 level=54 lmin=0.1u lmax=20u
wmin=0.1u wmax=10u vth0='vth0_p').model pch.2 pmos ( version=4.4.0 level=54 lmin=0.1u lmax=20u wmin=10u
wmax=100u vth0='vth0_p')
Ns-spice の実行時には、カレントフォルダ内に、ネットリストを展開したいくつかの中 間 フ ァ イ ル が 出 力 さ れ て い ま す 。 こ の 中 で 、 SIM_netlist2(FileIcluded).sp
は、.lib/.include の処理を行った後のネットリストです。ここでは、２つの MOSFET、M1,M0 のモデル名はそれぞれ、pch, nch のままとなっています。また、.param 行での定義や、ネットリスト内での式(’’で囲まれた部分)も、そのままとなっています。
SIM_netlist2(FileIcluded).sp（コメント文は省略）
M1 out in Vdd Vdd pch W=2u L=Lp AD='LD*(W-2*WD)' AS='LD*(W-2*WD)'
PD='2*(W-2*WD+LD)'
PS='2*(W-2*WD+LD)'
NRD='LD/(W-2*WD)'
NRS='LD/(W-2*WD)'
M0 out in Gnd Gnd nch W=1u L=Ln AD='LD*(W-2*WD)' AS='LD*(W-2*WD)'
PD='2*(W-2*WD+LD)'
PS='2*(W-2*WD+LD)'
NRD='LD/(W-2*WD)'
NRS='LD/(W-2*WD)'
C0 out Gnd 20fF
.param Ln=0.18u Lp=0.18u LD=0.4u WD=0u.param Vdd=1.8V Td=200p Tcyc=1ns Tr=50p Tf=50p
VIN in 0 PULSE (0 'Vdd' 'Td' 'Tr' 'Tf' 'Tcyc/2-Tr-Tf' 'Tcyc')
VVDD Vdd 0 DC 'Vdd'
VGND Gnd 0 DC 0V.tran 'Tcyc/100' 'Tcyc'

6.param vth0_n=0.5.param vth0_p=-0.5.model nch.1 nmos level=54 version=4.4.0 lmin=0.1u lmax=20u wmin=0.1u
wmax=10u vth0='vth0_n'.model nch.2 nmos level=54 version=4.4.0 lmin=0.1u lmax=20u wmin=10u
wmax=100u vth0='vth0_n'.model pch.1 pmos version=4.4.0 level=54 lmin=0.1u lmax=20u wmin=0.1u
wmax=10u vth0='vth0_p'.model pch.2 pmos version=4.4.0 level=54 lmin=0.1u lmax=20u wmin=10u
wmax=100u vth0='vth0_p'.print v(in) v(out).GLOBAL Vdd Gnd.END
次に、.param パラメータが展開され、BINNING も処理も終了したネットリストがSIM_netlist4(ParamExpanded).sp に出力されています。このネットリストでは、パラメータ値を含む式がすべて計算済みで実数値となっており、また、BINNNING も適用されて、2 つの MOSFET のモデル名も pch.1, nch.1 に変換されていることが確認できます。
SIM_netlist4(ParamExpanded).sp（コメント文は省略）
m1 out in vdd vdd pch.1 w=2e-006 l=1.8e-007 ad=8e-013 as=8e-013
pd=4.8e-006 ps=4.8e-006 nrd=0.2 nrs=0.2
m0 out in gnd gnd nch.1 w=1e-006 l=1.8e-007 ad=4e-013 as=4e-013
pd=2.8e-006 ps=2.8e-006 nrd=0.4 nrs=0.4
c0 out gnd 20ff*.param ln=0.18u lp=0.18u ld=0.4u wd=0u*.param vdd=1.8v td=200p tcyc=1ns tr=50p tf=50p
vin in 0 pulse (0 1.8 2e-010 5e-011 5e-011 4e-010 1e-009)
vvdd vdd 0 dc 1.8vgnd gnd 0 dc 0v.tran 1e-011 1e-009*.param vth0_n=0.5*.param vth0_p=-0.5.model nch.1 nmos level=54 version=4.4 lmin=1e-007 lmax=2e-005
wmin=1e-007 wmax=1e-005 vth0=0.5.model nch.2 nmos level=54 version=4.4 lmin=1e-007 lmax=2e-005
wmin=1e-005 wmax=0.0001 vth0=0.5.model pch.1 pmos version=4.4 level=54 lmin=1e-007 lmax=2e-005
wmin=1e-007 wmax=1e-005 vth0=-0.5.model pch.2 pmos version=4.4 level=54 lmin=1e-007 lmax=2e-005
wmin=1e-005 wmax=0.0001 vth0=-0.5.print v(in) v(out).end
このファイルが ns-spice のシミュレータコアに入力されるネットリストの実体になります。