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を使えればいいのだけれどなー.

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キー+上下左右カーソルキーに相当するコマンドを実行できます.超便利.

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年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

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に使えるのかはよくわからない.

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.

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さんいつも的確に答えていて素敵すぎる.

2018年10月16日火曜日

SiliconSmart がキャラクタライズに失敗するときの対策

SiliconSmart を用いてキャラクタライズをしているとき,あまりにも遅いセルを使っていると

Info:    Failed tasks:
Info:      INV_01X_1:
Info:          delay__A__lh__YB__hl__ACQ_1

とキャラクタライズに失敗する.セルが最大入力スリュー時間制約(=シミュレーション時間制約)や最大出力スリュー制約を満たさない時,このようにキャラクタライズに失敗する.この場合,時間制約を延ばすと出力が反転しシミュレーションに成功する可能性がある.これらスリューの制約は以下の設定で変えられる.

largest_slew float:最大入力スリュー時間
max_tout float:最大出力スリュー制約

長くするとそれだけシミュレーション時間が長くなる.

2018年10月10日水曜日

論理合成で回路の活性化率を指定する

入力ピンの活性化率によって,回路の動的電流とリーク電流の割合が変化する.
これを論理合成時に考慮させるには,以下のオプションを使う.

set_switching_activity -toggle_rate trate -clock clk -static_probability staticp -select inputs
staticp は0.0から1.0の値で,入力が1となる割合.
trate は0.0から1.0の値で,入力の遷移確率.

2018年10月9日火曜日

レイアウトを拡大縮小する(XScale)

レイアウトを拡大縮小する(Zoomするのではなく,物理的に拡大縮小する)方法として,Virtuoso についているXScaleを使う手法がある.

% XScale -mag [倍数] -lib [OAlib name] -view layout (-cell [cell name])

-mag にはズーム比を入れる.4であれば,縦横4倍の16倍の大きさとなる.0.5など小数も受け付ける.