プロジェクトの予算が無くなって契約期間を満了せずに雇い止めになる可能性がある時は,あらかじめ財源がないから雇い止めになるなど不更新条項などを付け,互いに理解・認識のうえ署名すべき.(近畿コカコールボトリング事件)
各更新において,満期まで更新可能な事を労働者に期待させるような言動をする事はNG.(カンタス航空事件)
予算について実質的なんの権限もない学科長とかが「成績も良いし契約満了までいけるんじゃないか」とか適当に言うのもNG.
2019年2月28日木曜日
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に使えるのかはよくわからない.
2018年11月29日木曜日
Preparing missing pieces for IC Compiler in ASAP 7nm PDK
Arizona State University collaborated with ARM provides predictive 7nm process PDK for education[1].
http://asap.asu.edu/asap/
They provide LEF for Cadence Innovus for P&R, however, they did not provide technology file for Synopsys IC Compiler.
(in ICCAD 2017[2], the tech file for ICC is announced as under construction).
To use IC Compiler in ASAP 7nm PDK, following files are required.
(1) Technology file for IC Compiler(Astro, .tech/.tf)
Defines layer stack properties, design rules, VIA macros, display settings for IC Compiler. Techfile is converted from the LEF file using Milkyway.
(2) GDS2A
Layer conversion table from GDS to Astro(Milkyway).
(3) A2GDS
Layer conversion table from Astro(Milkyway) to GDS.
(4) Interconnect Technology File (ITF)
Defines layer stack specifications. For ASAP 7nm, layer stack specifications are described in [3].
(5) TLUplus (Table Lookup plus?)
Defines layer stack specifications for IC Compiler. TLUplus is converted from the ITF using StarRC.
(6) Milkyway physical library
With (1) ~ (5), Milkyway library is converted from a GDS.
(7) Timing library (Synopsys database, .db)
Timing library (.db) is converted from Liberty (.lib), using LibraryCompiler.
Since TLUplus is used to estimate RC parasitic in inter-cell routing, ITF design is important.
[1] L. T. Clark, V. Vashishtha, L. Shifren, A. Gujja, S. Sinha, B. Cline, C. Ramamurthy, and G. Yeric, “ASAP7: A 7-nm finFET predictive process design kit,” Microelectronics J., vol. 53, pp. 105–115, 2016.
[2] V. Vashishtha, M. Vangala, and L. T. Clark, “ASAP7 predictive design kit development and cell design technology co-optimization: Invited paper,” in ICCAD, pp. 992–998. 2017.
[3] V. Vashishtha, A. Dosi, L. Masand, and L. T. Clark, “Design technology co-optimization of back end of line design rules for a 7 nm predictive process design kit,” in ISQED , pp. 149–154, 2017.
http://asap.asu.edu/asap/
They provide LEF for Cadence Innovus for P&R, however, they did not provide technology file for Synopsys IC Compiler.
(in ICCAD 2017[2], the tech file for ICC is announced as under construction).
To use IC Compiler in ASAP 7nm PDK, following files are required.
(1) Technology file for IC Compiler(Astro, .tech/.tf)
Defines layer stack properties, design rules, VIA macros, display settings for IC Compiler. Techfile is converted from the LEF file using Milkyway.
(2) GDS2A
Layer conversion table from GDS to Astro(Milkyway).
(3) A2GDS
Layer conversion table from Astro(Milkyway) to GDS.
(4) Interconnect Technology File (ITF)
Defines layer stack specifications. For ASAP 7nm, layer stack specifications are described in [3].
(5) TLUplus (Table Lookup plus?)
Defines layer stack specifications for IC Compiler. TLUplus is converted from the ITF using StarRC.
(6) Milkyway physical library
With (1) ~ (5), Milkyway library is converted from a GDS.
(7) Timing library (Synopsys database, .db)
Timing library (.db) is converted from Liberty (.lib), using LibraryCompiler.
Since TLUplus is used to estimate RC parasitic in inter-cell routing, ITF design is important.
[1] L. T. Clark, V. Vashishtha, L. Shifren, A. Gujja, S. Sinha, B. Cline, C. Ramamurthy, and G. Yeric, “ASAP7: A 7-nm finFET predictive process design kit,” Microelectronics J., vol. 53, pp. 105–115, 2016.
[2] V. Vashishtha, M. Vangala, and L. T. Clark, “ASAP7 predictive design kit development and cell design technology co-optimization: Invited paper,” in ICCAD, pp. 992–998. 2017.
[3] V. Vashishtha, A. Dosi, L. Masand, and L. T. Clark, “Design technology co-optimization of back end of line design rules for a 7 nm predictive process design kit,” in ISQED , pp. 149–154, 2017.
2018年11月11日日曜日
レイアウトを画像に変換する
大量のセルレイアウトを画像にしたくなったので調べたら,Cadence Community ForumにQ&Aがあった.
https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/21784/export-image
dd=ddGetObj( "libname" "cellname" "layout" "*")
viewType=ddMapGetFileViewType(dd)
wid = hiCreateWindow( list(0:0 800:800) "none" "Export Window")
wid->neverCurrentWindow = t
deOpenCellView( "libname" "cellname" "layout" viewType wid "r")
sprintf(imageFile "%s.png" "cellname")
hiExportImage(
?fileName strcat("pic" "/" imageFile)
?exportRegion 'entireDesign
?bgType 'transparent
?window wid
)
hiCloseWindow(wid)
hiExportImage ではstrcatを使って,保存ディレクトリ,"/",ファイル名を結合して特定のディレクトリにファイルを保存しているようだ.
Andrewさんいつも的確に答えていて素敵すぎる.
https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/21784/export-image
dd=ddGetObj( "libname" "cellname" "layout" "*")
viewType=ddMapGetFileViewType(dd)
wid = hiCreateWindow( list(0:0 800:800) "none" "Export Window")
wid->neverCurrentWindow = t
deOpenCellView( "libname" "cellname" "layout" viewType wid "r")
sprintf(imageFile "%s.png" "cellname")
hiExportImage(
?fileName strcat("pic" "/" imageFile)
?exportRegion 'entireDesign
?bgType 'transparent
?window wid
)
hiCloseWindow(wid)
hiExportImage ではstrcatを使って,保存ディレクトリ,"/",ファイル名を結合して特定のディレクトリにファイルを保存しているようだ.
Andrewさんいつも的確に答えていて素敵すぎる.
登録:
投稿 (Atom)