MOSFETにAD, AS, PD, PSを付加する
研究室に残してきたノウハウ(2006-09-24)より転記.
シミュレーションする際,MOSFETにL, Wのみではなく,周辺長等のAD, AS, PD, PSのパラメータを追加しないと,正確なシミュレーションができない.しかし,実際はAD, AS, PD, PSのパラメータを計算し,手入力するのは大変である.
そこで,以前から使用していた,add-spice-adas-pdps.rbスクリプトを修正して,add-ltspice-adas-pdps.rbを作成した(本エントリ最後: add-ltspice-adas-pdps.rb).以下のコマンドで,MOSFETのL, WからAD, AS, PD, PSを追加することができる.
なお,スクリプト中には,lambdaを指定する必要がある.現在は,TSMC 0.18umプロセス用にlambda=0.1としてあるのに注意.
また,LTSpice上でサブサーキットを利用している場合は,サブサーキットの方にもAD, AS, PD, PSを付加しなくてはならないのに注意.
以下,add-ltspice-adas-pdps.rb
#!/usr/bin/env ruby #!/opt/local/bin/ruby # 作成 in 2003-11-29 # 修正 in 2003-07-16 # LTSpice向けに修正 in 2006-09-23 # 使い方 : add-adas-pdps.rb hoge.sp > xxx.sp # 結果 : W,L から AD,AS,PD,PS を計算して結果を挿入 # 対応書式 : M2 Y A VDD! VDD! P L=400E-9 W=1.9E-6 # M2 Y A VDD! VDD! P L=0.4u W=1.9u # 0.1は,TSMC 0.18umの場合 lambda = 0.1 # W,L の値を入れる変数(小数)と計算パラメータ p_w = 0.0; p_l = 0.0; p_adas = 0.0; p_pdps = 0.0; lines = ARGF.readlines lines.each do |x| flag_w = 0; flag_l = 0 if /[Ww]\=([0-9]+(?:\.[0-9]+)?)(u|([eE]-[0-9]))/ =~ x then # W=0.4u または W=400E-9 にマッチ p_w = $1.to_f; flag_w = 1 p_w = p_w * 0.001 if /[eE]-9/ =~ $2 # E-9 の場合は 0.001 をかける end if /[Ll]\=([0-9]+(?:\.[0-9]+)?)(u|([eE]-[0-9]))/ =~ x then # W=0.4u または W=400E-9 にマッチ p_l = $1.to_f; flag_l = 1 p_l = p_l * 0.001 if /[eE]-9/ =~ $2 # E-9 の場合は 0.001 をかける end p_adas = p_w * 6*lambda # AD=AS=W*6*lambda p_pdps = 2 * (p_w + 6*lambda) # PD=PS=2*(W+6*lambda) see study note M1.5 if flag_w==1 and flag_l==1 then x = x.chomp + " ad=#{p_adas}e-12 as=#{p_adas}e-12 pd=#{p_pdps}e-6 ps=#{p_pdps}e-6" puts x else print x end end
> |