過去の 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年8月17日土曜日
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)