FineSimで波形ファイルのフォーマットを指定するには以下の設定を加える.
.option finesim_output=[fsdb|wdf|psf|tr0|utf|psfascii|none|out]
デフォルトではfsdbになる.noneを設定すると,.probeや.option postに関係する設定を全て無視するそうだ.
2019年3月4日月曜日
2019年3月3日日曜日
FineSimでfsdbのバージョンを指定する
FineSim M-2017.03で波形ファイルを出力するとデフォルトでfsdbのversion 5.5になる.Custom Waveview の2016.06-SP2では,fsdbのバージョンは5.4までしかサポートしておらず波形を読めない.
FineSimの出力するfsdbのバージョンを指定するには以下のオプションを使う.
.option finesim_fsdb_version=[5.4|5.5]
FineSim M-2017.03ではfsdbの5.3以下のバージョンはサポートされないらしい.悲しい.
FineSimの出力するfsdbのバージョンを指定するには以下のオプションを使う.
.option finesim_fsdb_version=[5.4|5.5]
FineSim M-2017.03ではfsdbの5.3以下のバージョンはサポートされないらしい.悲しい.
2019年2月28日木曜日
雇用者から見た雇い止めへの注意点
プロジェクトの予算が無くなって契約期間を満了せずに雇い止めになる可能性がある時は,あらかじめ財源がないから雇い止めになるなど不更新条項などを付け,互いに理解・認識のうえ署名すべき.(近畿コカコールボトリング事件)
各更新において,満期まで更新可能な事を労働者に期待させるような言動をする事はNG.(カンタス航空事件)
予算について実質的なんの権限もない学科長とかが「成績も良いし契約満了までいけるんじゃないか」とか適当に言うのもNG.
各更新において,満期まで更新可能な事を労働者に期待させるような言動をする事はNG.(カンタス航空事件)
予算について実質的なんの権限もない学科長とかが「成績も良いし契約満了までいけるんじゃないか」とか適当に言うのもNG.
2019年1月18日金曜日
DesignCompilerにおける電力を考慮した論理合成
compileコマンドを使うとき
set_max_dynamic_power [val]
set_max_leakage_power [val]
compile -power_effort [none|low|medium|high]
compile_ultraコマンドを使うとき
set_leakage_optimization true
set_dynamic_optimization true
compile_ultra
compile_ultraはデフォルトで-area_high_effort_scriptオプションが
ついてしまい取り消せないので,上記の2つのコマンドの場合,compile -power_effort highの方が電力は減るっぽい(dynamicが2/3ぐらいになった).
set_max_dynamic_power [val]
set_max_leakage_power [val]
compile -power_effort [none|low|medium|high]
compile_ultraコマンドを使うとき
set_leakage_optimization true
set_dynamic_optimization true
compile_ultra
compile_ultraはデフォルトで-area_high_effort_scriptオプションが
ついてしまい取り消せないので,上記の2つのコマンドの場合,compile -power_effort highの方が電力は減るっぽい(dynamicが2/3ぐらいになった).
2019年1月17日木曜日
Design Compilerの論理合成のコスト関数
Design Compilerで論理合成を行うとき,あるコスト関数を仮定してそれを最小化するように論理合成を行う.
コスト関数は以下の順になっており,太字のパラメータはset_cost_priorityコマンドで順番を変えられる.制約は,デザインルールと最適化係数の3種類に分かれている.
仮に最大遅延制約を最優先するには,set_cost_priorityコマンドで以下のように指定する.
set_cost_priority -delay
仮に,最大遅延制約,最小遅延制約の順に制約を優先するには以下のように指定する.
set_cost_priority {max_delay min_delay}
論理合成時にデザインルールを無視した合成を行うには,compileコマンドもしくはcompile_ultraコマンドに-no_design_ruleオプションをつける.論理合成を複数行うときにデザインルールについてのみ修正するには-only_design_ruleオプションを付ける.
コスト関数は以下の順になっており,太字のパラメータはset_cost_priorityコマンドで順番を変えられる.制約は,デザインルールと最適化係数の3種類に分かれている.
優先度(上ほど高い) | 制約の種類 |
connection classes | Design rule cost |
multiple_port_net_cost | Design rule cost |
min_capacitance | Design rule constraint |
max_transition | Design rule constraint |
max_fanout | Design rule constraint |
max_capacitance | Design rule constraint |
cell_degradation | Design rule constraint |
max_delay | Optimization constraint |
min_delay | Optimization constraint |
power | Optimization constraint |
area | Optimization constraint |
cell count |
仮に最大遅延制約を最優先するには,set_cost_priorityコマンドで以下のように指定する.
set_cost_priority -delay
仮に,最大遅延制約,最小遅延制約の順に制約を優先するには以下のように指定する.
set_cost_priority {max_delay min_delay}
論理合成時にデザインルールを無視した合成を行うには,compileコマンドもしくはcompile_ultraコマンドに-no_design_ruleオプションをつける.論理合成を複数行うときにデザインルールについてのみ修正するには-only_design_ruleオプションを付ける.
2019年1月5日土曜日
Virtuoso Dynamic DRC (DRD)を使う.DRDのルールを上書きする(techSetSpacingRule)
Virtuoso Dynamic DRC (DRD)を使うと,レイアウト編集中にオンデマンドにDRCをかけることができる.有効にするには,Layout Editingのアイコンから選ぶか,Options -> DRD EditからInteractive Modeを変える.
モードは3つある.
・DRD Notify:DRDを有効にし,違反がある場合は警告をだす.
・DRD Enforce:DRDを有効にし,違反があるレイアウトを許さない.
・DRD Off:DRDを無効にする.
DRD のルールは Techfile に書かれている( constraintGroup フィールドに書かれている).このルールを変更するには Techfile を書き換える必要があるが,Techfile の書き換えは設計資産の再利用などに問題が発生する可能性がある.またライブラリ生成時に Techfile を Attach するように指示されている場合は Techfile の書き換えができない. SKILL を利用して制約を上書きするには techSetSpacingRule 関数を使う.
techSetSpacingRule(
d_techFileID
t_rule
g_value
ltx_layer1
[ ltx_layer2 ]
)
引数はそれぞれ,
d_techFileID :対象のライブラリID
t_rule:ルール名.指定可能なルールはそれぞれ以下の通り.
minNotch, minSpacing, minWidth, defaultWidth, maxWidth, sameNet
g_value:スペーシングルールの値.整数もしくは小数.
ltx_layer1:適用するレイヤー名
[ ltx_layer2 ] :(Option)適用する2つめのレイヤー名
d_techFileID は techGetTechFile 関数と ddGetObj 関数を使うとよい.
最終的には以下のように組合わせる.
techFileID=techGetTechFile(ddGetObj("libName"))
techSetSpacingRule(techFileID "minSpacing" 0.1 "Metal1")
ある PDK では Techfile のスペーシングルールが DFM ルールの 0.11 um なのだが,
上記コマンドを実行すれば,以下のようにルールを 0.10 um に変えられる.
minSpacing や minWidth などのルールは,Virtuoso Space-Based Router (VSR)で必須のルールなので,VSRを使うには上記関数で設定してあげれば良さそう(未検証).
On-demand-DRCは,本当はCalibre RealTimeを使えればいいのだけれどなー.
モードは3つある.
・DRD Notify:DRDを有効にし,違反がある場合は警告をだす.
・DRD Enforce:DRDを有効にし,違反があるレイアウトを許さない.
・DRD Off:DRDを無効にする.
DRD のルールは Techfile に書かれている( constraintGroup フィールドに書かれている).このルールを変更するには Techfile を書き換える必要があるが,Techfile の書き換えは設計資産の再利用などに問題が発生する可能性がある.またライブラリ生成時に Techfile を Attach するように指示されている場合は Techfile の書き換えができない. SKILL を利用して制約を上書きするには techSetSpacingRule 関数を使う.
techSetSpacingRule(
d_techFileID
t_rule
g_value
ltx_layer1
[ ltx_layer2 ]
)
引数はそれぞれ,
d_techFileID :対象のライブラリID
t_rule:ルール名.指定可能なルールはそれぞれ以下の通り.
minNotch, minSpacing, minWidth, defaultWidth, maxWidth, sameNet
g_value:スペーシングルールの値.整数もしくは小数.
ltx_layer1:適用するレイヤー名
[ ltx_layer2 ] :(Option)適用する2つめのレイヤー名
d_techFileID は techGetTechFile 関数と ddGetObj 関数を使うとよい.
最終的には以下のように組合わせる.
techFileID=techGetTechFile(ddGetObj("libName"))
techSetSpacingRule(techFileID "minSpacing" 0.1 "Metal1")
ある PDK では Techfile のスペーシングルールが DFM ルールの 0.11 um なのだが,
上記コマンドを実行すれば,以下のようにルールを 0.10 um に変えられる.
minSpacing や minWidth などのルールは,Virtuoso Space-Based Router (VSR)で必須のルールなので,VSRを使うには上記関数で設定してあげれば良さそう(未検証).
On-demand-DRCは,本当はCalibre RealTimeを使えればいいのだけれどなー.
2019年1月3日木曜日
Virtuosoの画面サイズをSKILLコマンドで制御する(hiResizeWindow)
windowid=hiGetCurrentWindow()
hiResizeWindow(windowid list(x1:y1 x2:y2))
x1:y1は左下,x2:y2は右上の座標.
x1=0にするとウィンドウマネージャのバナー分だけ上にずれるので,x1=1にしてやるとずれなくなる.(環境依存?)
2019/07/27追記
これを応用すると,WindowsでいうWindowsキー+上下左右カーソルキーに相当するコマンドを実行できます.超便利.
hiResizeWindow(windowid list(x1:y1 x2:y2))
x1:y1は左下,x2:y2は右上の座標.
x1=0にするとウィンドウマネージャのバナー分だけ上にずれるので,x1=1にしてやるとずれなくなる.(環境依存?)
2019/07/27追記
これを応用すると,WindowsでいうWindowsキー+上下左右カーソルキーに相当するコマンドを実行できます.超便利.
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のライセンスをモリモリ消費せずにキャラクタライズを回せる.
(ただしHSPICEは2015.06より新しくないといけない)
configure.tclのシミュレータ選択に以下のように書けばよい.
set simulator hspice_embedded
set simulator_cmd { full-path-to-hspice < input_deck > -o < listing_file >}
これでHSPICEのライセンスをモリモリ消費せずにキャラクタライズを回せる.
2018年12月18日火曜日
FineSimを使ってみる
TAU Workshopで「HSPICE遅すぎるんですけど(><)」って文句を言いまくっていたら,「FineSimいいよ,マルチコア対応だし速いし」と元MagmaからSynopsysに移った人がお勧めしていたので使ってみた.試したのは FineSim M-2017.03-SP2-5,普段使いは HSPICE J-2014.09-SP1-2 .FineSimをSPICE互換モードで利用するには以下のようにする.マルチプロセッサで実行するために-np [numCPU] を付けている(HSPICEの-mtと同じようだ).-autoオプションを付けると,独立したsweepを別プロセッサで実行する(HSPICEの-mpと同じようだ).
% finesim spice.sp -mode=spicemd -np [numCPU] -auto -spice
あるプロセスのDFFのD2Q遅延とセットアップ時間を評価してみた.D2Cを変えながらD2Qの最小値を求める.
D2Q遅延:1.4% の差(FineSimの方が速い)
Setup:同じ(刻みは0.1ps)
ほとんど同等の結果だ.
速度は以下のような感じ.201点スイープです@intel Core i7 4790K 8-thread.
HSPICE (-mp -merge) 37秒
FineSim (-np) 22秒
FineSim (-np -auto) 13秒
めっちゃ速い.FineSimは標準出力へのログの吐き出しが無ければもっと速くなりそう.
気になったところ
・HSPICEの構文解析でOKな記述がFineSimではエラーになったりする.
・.measureに失敗したときに,HSPICEは"failed"と表示するが,FineSimは"error"と表示する.
・FineSim-EmbeddedというのがSiliconSmartに入っていてライセンス無く使えるらしい.
・FineSimは2つの解析エンジンを持っているので,どちらのエンジンで実行すべきか指定する(指定しないと自動選択されるらしい).
(1) FineSim Pro,回路分割を行いマルチCPUで解く.いわゆるFastSPICEでほどよい精度と速度のトレードオフをもつ.オプションは-mode=promd
(2) FineSim SPICE,回路分割を行わなず,単一のマトリックスをマルチCPUで解く.いわゆる普通のSPICEでSPICE精度を保ちマルチコア対応で速い.オプションは-mode=spicemd
% finesim spice.sp -mode=spicemd -np [numCPU] -auto -spice
あるプロセスのDFFのD2Q遅延とセットアップ時間を評価してみた.D2Cを変えながらD2Qの最小値を求める.
D2Q遅延:1.4% の差(FineSimの方が速い)
Setup:同じ(刻みは0.1ps)
ほとんど同等の結果だ.
速度は以下のような感じ.201点スイープです@intel Core i7 4790K 8-thread.
HSPICE (-mp -merge) 37秒
FineSim (-np) 22秒
FineSim (-np -auto) 13秒
めっちゃ速い.FineSimは標準出力へのログの吐き出しが無ければもっと速くなりそう.
気になったところ
・HSPICEの構文解析でOKな記述がFineSimではエラーになったりする.
・.measureに失敗したときに,HSPICEは"failed"と表示するが,FineSimは"error"と表示する.
・FineSim-EmbeddedというのがSiliconSmartに入っていてライセンス無く使えるらしい.
・FineSimは2つの解析エンジンを持っているので,どちらのエンジンで実行すべきか指定する(指定しないと自動選択されるらしい).
(1) FineSim Pro,回路分割を行いマルチCPUで解く.いわゆるFastSPICEでほどよい精度と速度のトレードオフをもつ.オプションは-mode=promd
(2) FineSim SPICE,回路分割を行わなず,単一のマトリックスをマルチCPUで解く.いわゆる普通のSPICEでSPICE精度を保ちマルチコア対応で速い.オプションは-mode=spicemd
2018年12月17日月曜日
SiliconSmart Aceで出力スリューの大きいセルをキャラクタライズする
SiliconSmart Aceで特に出力がRail-to-Railにスイングしにくいセルをキャラクタライズするには以下の設定を追加する.
・configure.tclに対する追加
set total_slew_multiplier [val]
内部パラメータであるtotal_slewの定数倍を指定する.total_slewは遅延やエネルギーを計算するウィンドウを示すパラメータで以下の式で計算される.
total_slew = largest_slew / (logic_high_threshold - logic_low_threshold) * total_slew_multiplier
largest_slewは入力スリューの最大値.
・該当セルの.instに対する追加
set_config_opt -type -timing -to [PIN] -pin [PIN] partial_swing 1
フルスイングしない信号ピンに対し,Rail-to-Rail以外の電圧を評価できるようにする設定.partial_swing を 1 にすると,SiliconSmartの波形解析エンジンではなく,.measureで評価した電圧の絶対値を評価するようになる.ただ,デバッグ用?でNLDMに使えるのかはよくわからない.
・configure.tclに対する追加
set total_slew_multiplier [val]
内部パラメータであるtotal_slewの定数倍を指定する.total_slewは遅延やエネルギーを計算するウィンドウを示すパラメータで以下の式で計算される.
total_slew = largest_slew / (logic_high_threshold - logic_low_threshold) * total_slew_multiplier
largest_slewは入力スリューの最大値.
・該当セルの.instに対する追加
set_config_opt -type -timing -to [PIN] -pin [PIN] partial_swing 1
フルスイングしない信号ピンに対し,Rail-to-Rail以外の電圧を評価できるようにする設定.partial_swing を 1 にすると,SiliconSmartの波形解析エンジンではなく,.measureで評価した電圧の絶対値を評価するようになる.ただ,デバッグ用?でNLDMに使えるのかはよくわからない.
登録:
投稿 (Atom)