ラベル HSPICE の投稿を表示しています。 すべての投稿を表示
ラベル HSPICE の投稿を表示しています。 すべての投稿を表示

2024年2月1日木曜日

HSPICE で過渡解析の結果として初期値のみが表示される

HSPICEで過渡解析を行ったときに,初期値(時間0点)のみ表示されて波形が表示されないことがある.

これは autostop を使っている状態で .Measure の条件を満たす波形入力が存在しないことが自明な場合(例えばトリガ条件の信号が存在しないなど)に過渡解析を実施せずに終了してしまう様だ.ややこしいのは最後のログが "*** job concluded" と表示される事だけれど,実際には初期条件の評価しかしていない.

例えばこんなSPICE CARDを入力すると.


.Measureの条件である W6_01,W6_02 は存在しないのでこの .Measure は無視される.


結局生成された波形ファイル (.tr0) を見ても,時間ゼロでの初期値(ここでは0.7 V)が点で表示されるだけである. ちゃんとログを見ると,

**warning** (delay_wring.sp:32) Unable to find referenced node w5_10; Output variable ignored. Specify a valid node.

という感じに存在しないネットについてはワーニングがでているので,まあちゃんと確認しなさいということか. 

昔の HSPICE はこんな振る舞いだったかな,とはちょっと疑問ではある.ここでは P-2019.06-1 を使っている.

2022年5月28日土曜日

Setup search inside SiliconSmart

Flip-Flop の遅延特性のうち,Setup time の定義は2つある.
(1) C2Q 遅延の最小値から C2Q 遅延が 3~5% 悪化した点の D2C 遅延を Setup とする.
(2) D2Q 遅延が最小となる D2C 遅延を Setup とする.

広く認識されているのは (1) で,(2) はマイナーなイメージ.多くの人が参照している CMOS VLSI Design では (1) と (2) の両方を上げて,(2)でよいのではと述べている.

実際のキャラクタライザではどうしているのか調べたところ,SiliconSmart では D2C 遅延を変更し Q 出力が失敗する直前を探す探査をしているとマニュアルに書かれていた((1),(2)とも違う動き).
なお SiliconSmart が吐き出した SPICE ネットリストを見ると,SiliconSmart 自身は HSPICE による Setup の bisection 探査を呼び出していて,HSPICE の内部アルゴリズムが Setup を調べてレポートしているようだ.

2022年3月21日月曜日

HSPICEで容量を測る

 容量を測るには3つ方法がある.

・AC解析で測る
.print ac cap(Node)
.ac dec 15 .1k 100k
対象 Node の容量の周波数特性を評価することができる.ただし,Nodeとどこの間の結合容量を見ているのかはわからない.他のすべてのノードとの容量の和なのだろうか.

・captabを使う
.option captab
回路中の全ノードを対象に,GND(0)に対するDC容量を評価する.抵抗などでGNDとつながっているノードの容量値の算出はできない.

・過渡解析で充電してみる
実際に過渡解析で充電を行い,流れた電流の積分(Q)とノード間電圧(V)からC=Q/Vで求める.理想コンデンサとして近似できる事が前提.

2021年4月23日金曜日

HSPICE の Advanced Server/Client モードでマルチスレッドシミュレーションを行う

以前の記事
HSPICE で Advanced Server/Clientモードを使う
https://kawaiihaseigi.blogspot.com/2016/10/hspice-advanced-serverclient.html
でマルチスレッドもどきを実現したのだけれどその実装を公開してみる.ファイルが連番になっていることが前提です.

4 つライセンスを取得して,計8回シミュレーション実行し,その後ライセンスを解放します.
追記:バグを修正.実際に動く事を確認.

2020年8月1日土曜日

BSIM-CMGでトランジスタ特性をばらつかせる

BSIM-CMGでトランジスタ特性をばらつかせるには,以下のモデルパラメータが利用できる.DELVTRAND,U0MULT,ISD0MULT以外はモデルパラメータとしてあらかじめ存在しているものである.

パラメータ:初期値:説明
DTEMP :0 K:デバイスの温度シフト量
DELVTRAND:0 V :閾値電圧シフト量
U0MULT:1.0 :移動度の係数
IDS0MULT:1.0 :ソースドレイン間チャネル電流の係数
TFIN:15e-9 m:Finの厚み
FPITCH:80e-9 m:Finピッチ
XL:0.0 m:マスク/エッチによるゲート長シフト量
NBODY:1e-22 m-3:チャネルドープ濃度
EOT:1e-9 m :実効ゲート酸化膜厚
TOXP:1.2e-9 m:実ゲート酸化膜厚
RSHS:0.0 Ω:ソースシート抵抗
RSHD:0.0 Ω:ドレインシート抵抗
RHOC:1e-12 Ω-m^2:シリコンシリサイド界面のコンタクト抵抗
RHORSD:計算される:ソースドレインの盛り上がり部の平均抵抗

Reference: BSIM-CMG 110.0.0 Multi-Gate MOSFET Compact Model Technical Manual, 2015

2020年6月26日金曜日

BSIM4 level 72におけるトランジスタ構造オプション

BSIM4 level 72 (BSIM-CMG)モデルは,一つのモデル式で様々な形状のトランジスタを表すことが可能である.近年のデバイス構造の進化によって様々なトランジスタ構造が提案されている.モデル式の中でトランジスタ構造を選択するオプションがあるので紹介する.

BULKMOD: default 1
BULK/SOIセレクターで,1だとBULK.

GEOMOD:default 1
ゲート構造セレクター.0はdouble gate, 1はtripple gate,2はquadruple gate,4はcylindrical gate

2019年8月22日木曜日

HSPICEのVariation Blockを無効にする (option ignore_variation_block)

Fab提供のPDKにおいてVariation Blockが利用されている場合,これまでの伝統的なばらつき生成(Agaussなど)とは異なるばらつきが生成されてしまう(PDKにもよるが,ローカルばらつきとグローバルばらつきを同時に生成したり,空間相関ばらつきを生成することができる).その場合,Variation Blockを使わないようにするために以下のオプションを定義する事で,これまでの伝統的なばらつきを生成できる.
Variation Blockに対するオプションなので,.variation 関数中に書く.

.variation
option ignore_variation_block=yes
.end_variation

Variation Blockに対する他のオプションも併記しておく.

・ローカルばらつきを生成しない
option ignore_local_variation=yes

・グローバルばらつきを生成しない
option ignore_global_variation=yes

・空間相関ばらつきを生成しない
option ignore_spatial_variation=yes

・配線ばらつきを生成しない
option interconnect_local_variation=yes

Variation Blockが使われた場合,*.mc0ファイルが生成され,その中にどのようなオプションが使われたか記載されているので,このファイルの中を確認する事で現在のオプションを知ることができる.

他にも,特定のインスタンスのみばらつきを与えたり,特定のサブサーキットにはばらつきを与えないなど,柔軟にばらつきを制御できるようだ.

2019年8月19日月曜日

HSPICE互換シミュレータ

HSPICE はゴールデンな回路シミュレータですが,みんなが使うのでライセンスがなくなりやすい.パンがなければお菓子を食べれば(ry と言われるけれど,じゃあどんなお菓子(選択肢)があるのか気になります. 代替になりうるシミュレータについて調べてみた.

・FineSim SPICE
旧Magma の SPICE / FastSPICE シミュレータ.HSPICE 向けの記述がほぼそのまま動きます.今は Synopsys が売り出しているから安心?
finesim  spice.sp -mode=spicemd -np [numCPU] -auto -spice

・Eldo
Mentor Graphics の SPICE シミュレータ.HSPICE 互換モードがある(-compat).欧州では結構メジャーらしい.
eldo -compat spice.sp

こちらの環境ではプロセスコーナーオプションの指定に難があり,ライブラリが多段になっていてなかでプロセスコーナーオプションの名前が変わる場合(例えば,最初の.libで"TT"オプションを指定し,呼び出した次の.libでは"tt_core"オプションになる)に追随できないようで,最終的に「そんなトランジスタモデル無いよ」と言われてエラーが出る.
トランジスタモデルが暗号化されているからかもしれない.
そもそもこの PDK の設計がクソという意見もある.

・Spectre
Cadence の SPICE シミュレータ.HSPICE 互換モードがあるのか調べてません.

・SmartSpice
Silvaco の SPICE シミュレータ.某所ではバイナリがなくなってしまったので未調査.ライセンスはまだ発行されているっぽい??

LTspice や Ngspice が商用 PDK で動くかどうかは知りません.計算結果もあまり変わらない Finesim でいいんじゃないかな.

2019年8月18日日曜日

HSPICE で .measure の結果を出力しない (.option measout)

HSPICE で .measure の結果を出力を制御するには .option measout を使う.

.option measout [=1 | 0]

1を指定すると結果を.mt# に出力し,0を指定すると.mt#を生成しない.
デフォルトは1.

どういった場面で使うのだろうか??

2019年8月17日土曜日

HSPICE のモンテカルロシミュレーションの結果の出力を制御する(.option mcbrief)

過去の HSPICE (2012あたり) でモンテカルロシミュレーションをすると,変動させたパラメータ,.measure の結果だけが出力されていた.最近の HSPICE はそれ以外にも大量のパラメータを.mt#に出力するので,.mt#のファイルサイズもとにかく大きくスクリプトでパースするのも大変である.

モンテカルロシミュレーションで出力する変数を制御するには,.option mcbrief オプションを利用する.

mcbrief=0 : .mt#,.lis にすべてのモンテカルロ変数を出力する.
mcbrief=1 : .mt#,.lis には .measure の結果のみ出力し,モンテカルロ変数を出力しない
mcbrief=2 : .mt#には .measure の結果のみ出力し,モンテカルロ変数を出力しない..lis には出力する.
mcbrief=3 : .lis には .measure の結果のみ出力し,モンテカルロ変数を出力しない..mt# には出力する.
mcbrief=4 :
.lis にはモンテカルロの結果を出力しない.
IRVの情報を.mt#に出力しない.
.mc#ファイルを出力する.
mcbrief=5 :
.lis にすべての情報を出力する.
IRV の情報を .mt# に出力する.
.mc# ファイルを出力する.
mcbrief=6 :
.lis にはモンテカルロの結果を出力しない.
IRV の情報を .mt# に出力しない.
.mc#,*.mpp#,*.annotate を出力しない.
ヒストグラム,QQ プロットなどを出力しない.
セルのキャラクタライズで利用することを想定しているらしい.

私は,mcbrief=1 にして .measure の結果だけを出力するように設定し,
agauss などでばらつかせた変量はあえて .measure param 構文を使って出力
する事で,ばらつかせた変量とそれによる回路特性の変動量を .mt# に出力するようにした.

IRVファイルってなんでしょう..option set_missing_value に関連するので
使われなかった乱数変数の事だろうか(未調査).

2019年7月5日金曜日

HSPICEにおける非収束(Non-Convergent)の原因と対策

マニュアルを訳しただけです.

HSPICEでなんで収束しないの?そもそも収束って何?と言う人はSPICEの動作原理について勉強するといいかも.

[原因]
#0 回路構造の確認
回路にフローティングが存在すると,その点の電圧を決定できないために非収束となる.すべてのノードがなんらかしらの素子を経由しながら電源もしくはグラウンドに接続されている事を確認する.

#1 初期値の設定
安定状態が複数ある回路の場合,初期値を自動的に決められない.特にリングオシレータやフリップフロップは初期値を一意に決められない.その場合,.ic コマンド(initial condition)を使い初期値を与える必要がある.

#2 不適切なモデルパラメータの導入
物理モデルパラメータに沿わないパラメータを導入した結果,ソースドレイン電流や容量特製に不連続が発生する事がある.これはinitial timestep too smallエラーを引き起こす.

#3 PN結合の高抵抗
BJTやMOSFETのPN結合は高いオフ抵抗を持つ.このオフ抵抗が非収束の原因となる.HSPICEでは,.option gmindc .option gminを設定する事で,これらの素子に自動的に抵抗を挿入し収束可能性を向上する.

[対策]
#1 すべてのオプションを消して,HSPICEの標準の収束アルゴリズムを動かしてみる.

#2 .nodesetや.icを用いて初期値を適切に与える.

#3 デジタル回路であるなら,シンボリック動作点解析アルゴリズムを利用する.
.option symb=1

#4 ITL1とITL2を200から500の範囲で増やす.
.option ITL1=300 ITL2=300

#5 収束アルゴリズムを変える.HSPICEは標準でDCON=1,2とアルゴリズムを変え,
最終的にconverge=1を選ぶ.これでも収束しない場合設定で変えてやる.また
gmindcの値を小さくする(ただし1e-9より小さくしてはいけない)
.option converge=2 gmindc=1e-11
.option converge=3 gmindc=1e-11

#6 2 DC バイアスポイントによる方法もあるが,よくわからなかった.非収束の原因となるデバイスをオフにしてバイアスポイントを求め,次にこの素子をオンにしてバイアスポイントを求めるのだろうか.

2019年7月1日月曜日

HSPICEの性能を上げる10のtips

SynopsysのBlogを直訳したものです.
10 tips to improve performance using HSPICE

#1 HSPICEの収束性を上げるためにrun levelを適切に設定する.
.option runlvl = 1|2|3|4|5|6

#2 High Performance Parallel(HPP)オプションを使い,マルチスレッドで高速化する.
% hspice [file].sp -mt [numCPU] -hpp

あまりたくさんのCPUを指定しても速くならない.2~4CPU程度

#3 分散コンピューティング(Distributed Computing)オプションを使い,マルチマシンで高速化する
% hspice [file].sp -dp [numCPU]

分散コンピューティングのための事前に設定が必要.

#4 ポストレイアウトシミュレーションの場合, RC 縮約を使う.
.option sim_la

#5 ワイルドカードを使ってすべてのノードの電圧・電流を見るのではなく,見たいノードを指定する.
.probe tran v(xi.*)  i(xi.*)
× .probe tran v(*)  i(*)

#6 ポートの電流の向きを指定する.
.probe tran isub(xinv.vdd) isub(xinv.v*)
×  .probe tran isub(*)

#7 .alterを使っている場合,回路構造の解析を省略する.
.option altcc altchk

#8 回路要素のチェックや回路構造のチェックを飛ばしシミュレーション時間を短くする
.option notop noelck

#9 回路を変更していない場合,過去のシミュレーション結果を再利用する事でシミュレーション時間を短縮する
% hspice -i [file].tr0 -meas [meas file]

[meas file]は,HSPICEの構文のうち.measureなどの測定命令,.paramなどの設定命令のみを抜き出したもの

#10 .measureがすべて終了したらシミュレーションを終了する.
.option autostop

2018年12月20日木曜日

SiliconSmartでHSPICEのライセンスを使わない(HSPICE_embedded)

SiliconSmart 2016では,シミュレータとしてHSPICE_embeddedを選択する事ができ,これを使うとSiliconSmartのライセンスだけでHSPICEを用いてキャラクタライズをする事ができる.
(ただしHSPICEは2015.06より新しくないといけない)

configure.tclのシミュレータ選択に以下のように書けばよい.

set simulator hspice_embedded
set simulator_cmd { full-path-to-hspice < input_deck > -o < listing_file >}


これでHSPICEのライセンスをモリモリ消費せずにキャラクタライズを回せる.

2018年3月9日金曜日

HSPICEのAdvanced Server/Clinetモードで標準出力をファイルに書き出す

HSPICEのAdvanced Server/Clinetモードで標準出力をファイルに書き出すには,Serverを起動する時に-o "ファイル名"を指定する.Clientで-oを付けても効果がない.

2018年2月28日水曜日

intel Core-i7 vs AMD Ryzen for HSPICE

intel Core-i7 と AMD Ryzenの速度比較を行った.比較方法は多くの人が身近によく使う Synopsys HSPICEの実行速度で,正確にはSiliconSmart ACEで69種の論理セルを持つセルライブラリのキャラクタライズ速度で比較した.

Core-i7 マシン:
intel Core-i7 4790 Base: 3.6GHz Boost: 4GHz 4-core 4-thread (Haswell)
DDR3-1600 dual-channel 8GB
Cent OS 6.8

Ryzenマシン:
AMD Ryzen Threadripper  Base: 3.4GHz Boost: 4GHz 16-core 16-thread (Summit Ridge)
DDR4-2400 quad-channel 32GB
Cent OS 7.4

CADはライセンス数に限りがあるのでハードウエアマルチスレッディングは共に無効(Core i7についてはONでも実験してみた).キャラクタライズは並列実行するが,終盤はコアが余り出すので並列性は落ちる.
HSPICE は vJ-2014.09-SP1-2 を利用した.なお HSPICE は SSE2 を使うらしい(SSE2が無いと動かない).周波数ブーストはあり.全然 apple-to-apple ではないけれどしゃーなしやな.

結果:
Ryzen: 25:42.99
Core-i7: (4-thread)1:48:04.94,(8-thread) 1:49:25.39
Ryzenの方が4.2倍高速という結果に.Baseのクロック周波数低いのに処理速度が速いということはIPCがよいのね.Summit RidgeはAVXなどが弱いがSSE2しか使わないなら十分戦える,これならEPYCも期待できそう.


2017年3月24日金曜日

Traditional and Variation Block Monte Carlo

HSPICEの新しい版(前からあったと思うが少なくともL-2016.06-SP1-1)では,PDKにも依存するがモンテカルロ(Monte Carlo:MC)解析においてVariation-Block(VB)ベースのMC解析が利用できる.
伝統的なガウス関数(AGAUSS)以外にも,MC解析においてサンプリング手法等を変える事が出来る.

・乱数発生器
HSPICEの乱数発生器を以下のオプションで変えられる.なお2016.06から,デフォルトの乱数発生器が3LCからMCGに変更となった.

.option RANDGEN = [3LC|MOA|UVS|MCG|WH]

各アルゴリズムは以下の通り
3LC: 従来通りの乱数発生器
MOA: Multiply-with-carryタイプ
UVS: 64bit universal 乱数発生器
MCG: (Default) 64bit multiplicative(乗法)-乱数発生器
WH: 他のよりサイクル数の長い乱数発生器

・統計情報の出力
過去のMC解析とは異なり,VBベースのMCでは以下の情報も出力される.
- より詳細な統計情報:*.mpp0
- 各サンプルにおける独立変数の値:*.mc0
- 各ランダム変数の貢献度をSynopsys Custom Designerへ反映するための情報ファイル:*.annotate
-  従来のSRS解析のための部分的な情報:*.mpp0

・サンプリング手法の変更
サンプリング手法を以下のオプションで変更できる.

.option SAMPLING_METHOD = [SRS|LHS|Factoral|OFAT|Sobol|Niederreiter|External]

各サンプリング手法の説明は以下の通り.
SRS: (Default) これまでの伝統的な単純なランダムサンプリング
LHS: Latin Hypercube Sampling:多変数の時に効率的(.option REPLICATESと併用)
Factoral: Factoral サンプリング: 回路の応答から最良値-最悪値のレンジを計算する.多項応答曲面を作る.
OFAT: One-Factor-at-a-Timeサンプリング:低次元応答曲面が利用できるような,感度解析が使える領域でつかう.
Sobol: Sobol SamplingでLow-discrepancy sequence(LDS)の一種.
Niederreiter: LDSの一種.
External: 外部からデータセットを読み込む.

2016年10月14日金曜日

HSPICE で Advanced Server/Clientモードを使う

HSPICEを利用するときにライセンスをチェックアウトする必要があるが,細かいシミュレーションを多数行う場合はチェックアウト/チェックインのオーバーヘッドが大きい.
ライセンスをチェックアウトした後,そのまま保持するためにServer/Clientモードを利用する.今回はAdvanced Server/Clientモードを利用する事でマルチスレッド動作を実現する(後述するが目論見は外れる).

Advanced Server/Clientモードを利用するに,以下の3つの手順を利用する.

(1) Serverの起動
HSPICEを実行するマシンで以下のコマンドを入力
% hspice -CC -mp -port [num]
-CCで Advanced server/clientモードが起動する(すぐにバックグラウンドに移動する).
-mpでマルチプロセッサによるシミュレーションを可能にする.
-portでportを指定する事で,複数のserverに番号をつける事が出来る.
portを指定しない場合は,デフォルトの25000を使う (標準出力に表示される).

(2) Clientの起動
HSPICEのワーカーを以下のコマンドで起動する.
% hspice -CC [input.sp] -port [server_name:num]

(3) Serverの終了
全てのジョブを終えたら,Serverを殺しておく(デフォルトでは1時間後にタイムアウトする).
% hspice -CC -K -port [server_name:num]

マニュアルには「Advanced server/clientモードはマルチスレッド動作(-mp)をサポートする.」とあるが,私の環境ではライセンスを1つしか取ってくれず,かなわなかった.
仕方が無いのでシェル側でマルチスレッドもどきを実装して利用した.

複数のマシンにワーカー割り当てることも可能らしいが,残念ながら試していない.

2014年12月13日土曜日

difference between HSpiceD, HSpiceS, Spectre, SpectreS?

Analog Design Environment(ADE)を利用している際に,
シミュレータの選択肢が複数あるが,これらの違いがわからないので調べた.

まず,Spiceの種類として大きくCadenceのSpecterとSynopsysのHspiceの2種類がある.
そして,HspiceDとHspiceS(Hspice DirectとHspice Socket),SpecterとSpecterS(Specter DirectとSpecter Socket)が存在する.

過去の経緯として,これらのシミュレータは柔軟に変数化可能な構文をサポートしていなかったため,ADEとシミュレータの間にcdsSpiceというマクロ言語をサポートするツールを挟むことで,ADEでの柔軟なシミュレーションを可能にした.一方でcdsSpiceを挟んでしまうため,ユーザーはシミュレータのサポートするすべての構文を利用できない欠点があった.

その後,各シミュレータが実行可能なネットリストを出力するダイレクトモードをADEはサポートし,その結果より効率よいシミュレーションが可能になったそうだ.



内容は,英語の文献を要約しただけである.
Cadence Technology Forums: difference between HSpice,HSpiceS,Spectre,SpectreS?

2014年11月20日木曜日

HSPICEの乱数生成器を指定する(.option randgen)

HSPICEで乱数を生成する場合において,乱数生成器を指定する事ができる.

.option randgen=value

valueはそれぞれ

0: デフォルト. マニュアルには"traditional random generator"を使うとある.これが何なのかは調べてもわからなかったが,古典的擬似乱数生成法のどれかだろうか.
1: キャリー付き乗算(Multiply-with-Carry)を使う.
moa: 1と同じ

より品質の良い乱数が必要であれば,randgen=1を指定すると良いだろう.

広く商用で利用され,それなりに高精度な解析に使われるのでてっきりメルセンヌツイスタでも使っているのかと思っていた.がっかり.

2014年2月20日木曜日

Silicon Smartにおける"no convergence"の一原因

Silicon Smart AceとHSPICEを使ってスタセルのキャラクタライズを行っていたところ,以下の様なエラーをHSPICEが出力しキャラクタライズがとまる事態が発生した.

Error: Simulation initialization__ACQ_1.sif for cell SN51DFFRBQXC1 failed.
Error: Error while running simulation: Error found in simulator log file (deck.lis): **error** no convergence in operating point


キャラクタライズ対象のセルのネットリストが正常に動作する場合,Silicon Smartに入力する論理情報およびキャラクタライズ条件に不備がある可能性がある.今回のセル(非同期リセット付きポジティブエッジDFF)の場合,セルのインスタンスファイル(.inst)のピンの定義および論理情報は適切であったが,オプションのユーザー定義のキャラクタライズ条件(User-specified characterization and modeling configuration options.)に不備があり,Reset時の条件が書かれていなかった.そのため変なSPICE Deckを生成したと思われる.
LPEした回路の不備かと思った.紛らわしいエラーだ.