わからないのでまとめた.ただし半導体集積回路設計で使うものだけです.
・シミュレーション
0-in:機能検証
Analog FastSPICE Platform (AFS):FastSPICE
Questa Advance MS (ADMS/AMS):デジタル・アナログ・RF回路向けシミュレーションツール.Eldo (Eldo-classic, Eldo-RF)が入っている.
Modelsim:RTLシミュレーション,波形ビューア.
QuestaSim:Modelsimに機能検証を加えたもの,とあるが,古い情報かもしれない.今はもう無い?
・カスタムIC設計
Pyxis Layout:カスタム設計CAD
・PCB設計
BoardStation:PCB設計CAD
Xpedition:PCB設計CAD
PADS:PCB設計CAD
・検証
Calibre:物理検証ツール.以下のツール群が入っている.他にも機能があると思われるが把握していない.
Calibre DRC:デザインルールチェッカ
Calibre LVS:Layout Versus Schematic
Calibre xRC:ルールベースレイアウト抽出
Calibre xACT:電磁界解析ベースレイアウト抽出
Calibre RVE:DRCなどの結果を設計レイアウトルールへ反映させるインターフェース.ネットリストを視覚化する事もできるので,ネットリストビューアとしても便利.
Calibre DESIGNrev:GDSビューア,エディタ.各種物理検証ツールを呼び出す事もできる.
Calibre WORKbench:GDSビューア,エディタ.OPCや光学シミュレーションなどができる.
・高位合成
Catapult HLS:高位合成ツール
DK Design Suite:Hendel-Cによる高位合成ツール.Celoxicaを買収して手に入れた?
・論理合成
LeonardSpectrum:ASIC,FPGA向け論理合成ツール
Calibre,Modelsim以外は使ったことがないので大いに間違っているかもしれない.Wikipediaの方が正確かも.
https://ja.wikipedia.org/wiki/メンター・グラフィックス
Mentor Graphics というと,「Bjarne Stroustrup インタビュー (?)」を思い出してしまう (ネツゾウとの噂ですが).
2019年8月20日火曜日
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 でいいんじゃないかな.
・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.
どういった場面で使うのだろうか??
.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 に関連するので
使われなかった乱数変数の事だろうか(未調査).
モンテカルロシミュレーションで出力する変数を制御するには,.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年8月14日水曜日
StarRCでカップリングキャパシタを報告する
Calibre xRCでできたので,StarRCでできるのか調べた.以下のコマンドでできる.
COUPLING_REPORT_FILE: file
fileで指定したファイルに出力される.レポートは,キャパシタの総容量(Ct)に対するカップリングキャパシタの容量(Cc)の比,カップリングキャパシタの容量の絶対値(Cc),Victim Net,Aggressor Netの順で表示される.
COUPLING_REPORT_FILE: file
fileで指定したファイルに出力される.レポートは,キャパシタの総容量(Ct)に対するカップリングキャパシタの容量(Cc)の比,カップリングキャパシタの容量の絶対値(Cc),Victim Net,Aggressor Netの順で表示される.
2019年8月13日火曜日
Calibre xRCでカップリングキャパシタを報告する
Calibre xRCでカップリングキャパシタを報告するには以下の命令を使う.
PEX REPORT COUPLING CAPACITANCE filename
[NUMBER count]
[SPLIT_NET]
[THRESHOLD value]
[LAYOUT | SOURCE]
filename に指定するファイルにカップリングキャパシタの情報を出力できる.
以下はオプション
NUMBER count:カップリングキャパシタの数を指定する.デフォルトは1000
SPLIT_NET:出力を制御できる.宣言時Net Bへのレポートが別の行に出力される.
THRESHOLD value:value以下の容量を出力する.
LAYOUT | SOURCE:配線名をLayoutから選択する,もしくはソースネットから選択する
PEX REPORT COUPLING CAPACITANCE filename
[NUMBER count]
[SPLIT_NET]
[THRESHOLD value]
[LAYOUT | SOURCE]
filename に指定するファイルにカップリングキャパシタの情報を出力できる.
以下はオプション
NUMBER count:カップリングキャパシタの数を指定する.デフォルトは1000
SPLIT_NET:出力を制御できる.宣言時Net Bへのレポートが別の行に出力される.
THRESHOLD value:value以下の容量を出力する.
LAYOUT | SOURCE:配線名をLayoutから選択する,もしくはソースネットから選択する
2019年8月6日火曜日
Calibre xACT 3Dを使ってRC抽出を行う
Calibre には RC 抽出の方法が2つあり,モデルベースである xRC と,フィールドソルバである xACT 3Dがある.後者を使ってRC抽出をやってみる.Calibreのルールファイルは xRC と同一でよく,以下のようにコマンドを実行すればよい.
% calibre -lvs -hier -spice svdb/circuit.sp -nowait circuit.svrf > circuit.log
% calibre -xact -3d -pdb -rcc circuit.cal >> circuit.log
% calibre -xact -fmt circuit.cal >> circuit.log
マニュアルには
% calibre -xact -3d -rcc circuit.cal
と書いてあったが,-pdb オプションをつけないとPhysical Database (pdb) が生成されず3行目のコマンド実行に失敗する.xRC と xACT 3Dは違うのかというと,xACT 3Dは特に細かいカップリングキャパシタが報告されるようになった.
% calibre -lvs -hier -spice svdb/circuit.sp -nowait circuit.svrf > circuit.log
% calibre -xact -3d -pdb -rcc circuit.cal >> circuit.log
% calibre -xact -fmt circuit.cal >> circuit.log
マニュアルには
% calibre -xact -3d -rcc circuit.cal
と書いてあったが,-pdb オプションをつけないとPhysical Database (pdb) が生成されず3行目のコマンド実行に失敗する.xRC と xACT 3Dは違うのかというと,xACT 3Dは特に細かいカップリングキャパシタが報告されるようになった.
2019年8月5日月曜日
Calibre xRC でRCの縮約を行う
Calibre xRC で RC 縮約を行うには以下のオプションを使う
・Analog回路向け
PEX REDUCE ANALOG {NO | YES [DELAY_ERROR delay] [NOISE_ERROR noise]}
NO (default): 縮約を行わない
YES:RC 縮約を行う.以下のオプションがある
DELAY error:時間遅延の閾値.単位はs.デフォルトは0.5ps
NOISE_ERROR noise:エラーの閾値.単位は比.デフォルトは0.01(1%)
PEX REDUCE ANALOG YES を宣言すると,PEX REDUCE TICER と PEX REDUCE CC が有効になる.
PEX REDUCE TICER は指定するシミュレーション速度で差が出ないように縮約する命令(PEX REDUCE DISTRIBUTED と同じ),
PEX REDUCE CC はカップリングキャパシタの縮約する命令.
PEX REDUCE ANALOG と後述の PEX REDUCE DIGITAL は同時に宣言できない.
・Digital回路向け
PEX REDUCE DIGITAL {NO | YES [DELAY_ERROR delay] [NOISE_ERROR noise]}
NO (default): 縮約を行わない
YES:RC 縮約を行う.以下のオプションがある
DELAY error:時間遅延の閾値.単位はs.デフォルトは0.5ps
NOISE_ERROR noise:エラーの閾値.単位は比.デフォルトは0.01(1%)
・Analog回路向け
PEX REDUCE ANALOG {NO | YES [DELAY_ERROR delay] [NOISE_ERROR noise]}
NO (default): 縮約を行わない
YES:RC 縮約を行う.以下のオプションがある
DELAY error:時間遅延の閾値.単位はs.デフォルトは0.5ps
NOISE_ERROR noise:エラーの閾値.単位は比.デフォルトは0.01(1%)
PEX REDUCE ANALOG YES を宣言すると,PEX REDUCE TICER と PEX REDUCE CC が有効になる.
PEX REDUCE TICER は指定するシミュレーション速度で差が出ないように縮約する命令(PEX REDUCE DISTRIBUTED と同じ),
PEX REDUCE CC はカップリングキャパシタの縮約する命令.
PEX REDUCE ANALOG と後述の PEX REDUCE DIGITAL は同時に宣言できない.
・Digital回路向け
PEX REDUCE DIGITAL {NO | YES [DELAY_ERROR delay] [NOISE_ERROR noise]}
NO (default): 縮約を行わない
YES:RC 縮約を行う.以下のオプションがある
DELAY error:時間遅延の閾値.単位はs.デフォルトは0.5ps
NOISE_ERROR noise:エラーの閾値.単位は比.デフォルトは0.01(1%)
2019年8月3日土曜日
IC Compilerで矩形以外のフロアプランを使う(initialize_rectilinear_block)
IC Compiler でフロアプランを作成するとき,create_floorplan コマンドを使うが,これは長方形のフロアプランしか作成できない.長方形以外のフロアプランを作るときは initialize_rectilinear_block コマンドを使う.
initialize_rectilinear_block
[-bottom_io2core distance]
[-control_type ratio | length]
[-core_side_dim { side_a side_b side_c side_d [side_e side_f]}]
[-core_utilization ratio_val]
[-flip_first_row]
[-keep_io_place]
[-keep_macro_place]
[-keep_std_cell_place]
[-left_io2core distance]
[-no_double_back]
[-orientation N | W | S | E ]
[-right_io2core distance]
[-row_core_ratio ratio_val]
[-shape L | T | U | X]
[-start_first_row]
[-top_io2core distance]
[-use_current_boundary]
[-use_vertical_row]
例えばL字型のフロアプランであれば,以下のようにする.
initialize_rectilinear_block
-control_type length
-core_side_dim { side_a side_b side_c side_d }
-shape L
length オプションにした場合, side_a side_b side_c side_d は長さ(um)を指定する.ratio オプションにした場合,side_a side_b side_c side_d は4辺の比率となり -core_utilization で指定した Utilization を満たす様にサイズを自動的に調節する.
形は,-shape オプションでL字,T字,U字,X字が選択できる.頂点の数は形に寄って変わる.
T字,U字,X字の場合は以下のように指定する.
-core_side_dim { side_a side_b side_c side_d side_e side_f}
回転角は -orientation オプションで N (0°),W(90°), S(180°),E(270°)と選択できる.
H型などさらに複雑なフロアプランは,create_boundary コマンドで生成できる.
詳細はマニュアル(IC Compiler Design Planning User Guide)…と思いきや,マニュアルには「詳細は ICC で man を開くように」と書いてある.
initialize_rectilinear_block
[-bottom_io2core distance]
[-control_type ratio | length]
[-core_side_dim { side_a side_b side_c side_d [side_e side_f]}]
[-core_utilization ratio_val]
[-flip_first_row]
[-keep_io_place]
[-keep_macro_place]
[-keep_std_cell_place]
[-left_io2core distance]
[-no_double_back]
[-orientation N | W | S | E ]
[-right_io2core distance]
[-row_core_ratio ratio_val]
[-shape L | T | U | X]
[-start_first_row]
[-top_io2core distance]
[-use_current_boundary]
[-use_vertical_row]
例えばL字型のフロアプランであれば,以下のようにする.
initialize_rectilinear_block
-control_type length
-core_side_dim { side_a side_b side_c side_d }
-shape L
length オプションにした場合, side_a side_b side_c side_d は長さ(um)を指定する.ratio オプションにした場合,side_a side_b side_c side_d は4辺の比率となり -core_utilization で指定した Utilization を満たす様にサイズを自動的に調節する.
形は,-shape オプションでL字,T字,U字,X字が選択できる.頂点の数は形に寄って変わる.
T字,U字,X字の場合は以下のように指定する.
-core_side_dim { side_a side_b side_c side_d side_e side_f}
回転角は -orientation オプションで N (0°),W(90°), S(180°),E(270°)と選択できる.
H型などさらに複雑なフロアプランは,create_boundary コマンドで生成できる.
詳細はマニュアル(IC Compiler Design Planning User Guide)…と思いきや,マニュアルには「詳細は ICC で man を開くように」と書いてある.
2019年8月1日木曜日
ゲートレベルシミュレーションにおけるFFのリセット
リセットのない FF のゲートレベルシミュレーションを行うと,初期値がないので X が伝搬してしまう.Verilog HDL では force / release を使い値の強制設定と解除が可能であるが,うまく force / release しないと X の伝搬を防ぐ事ができない.特に実負荷シミュレーションではクロックスキューもあるので,release のタイミングと実際にクロックが入るタイミングがずれる問題もある.
普通に force / release してもうまくいかない時の対策
・複数サイクルにかけて force を入れる
・FF のデータ入力だけでなく出力端子にも force を入れる
以下のようなPerlスクリプトを書いて,DATA端子とQ端子を探し force / release していました.
force / release の使い方はこちら. http://kawaiihaseigi.blogspot.com/2017/07/verilog-force.html
普通に force / release してもうまくいかない時の対策
・複数サイクルにかけて force を入れる
・FF のデータ入力だけでなく出力端子にも force を入れる
以下のようなPerlスクリプトを書いて,DATA端子とQ端子を探し force / release していました.
force / release の使い方はこちら. http://kawaiihaseigi.blogspot.com/2017/07/verilog-force.html
登録:
投稿 (Atom)