remove_net_shape [ get_net_shapes -of_objects {net1} ]
route_zrt_group -nets {net1}
2014-08-01
ICC上で特定のネットだけ再配線させる
Synopsys IC Compiler で配線すると, なぜか大きく迂回した配線ができてしまうことがある.
このネットがアンテナ違反を起こした...
しかたないので, 以下のように一度その配線を消し, もう一度配線しなおした.
2014-07-30
ICCにて相対配置 (relative placement) を使用する例
Synopsys IC Compiler にて, 複数のセルを並べて配置する場合, relative placement を使用する.
予め, RP-group を作成しておき, それにセルを追加していく.
set rp1 [create_rp_group {rp1} -columns 2]
add_to_rp_group $rp1 -leaf core/cell1 -column 0
add_to_rp_group $rp1 -leaf core/cell2 -column 1
2014-07-29
ICC エラー: could not open script file
Synopsys の IC Compiler は, ディジタル回路の物理レイアウト設計のデファクトスタンダードのツールである.
このシェルで,
source を実行すると, 以下のようにエラーが出ることがある.
icc_shell> source tcl/procs.tcl Error: could not open script file "tcl/procs.tcl" (CMD-015)ソースするときの検索パスは,
search_path という変数に書かれているため, これを変更すると, 見つけることができなくなってしまうことがある.
lappend search_path "." で検索パスに.を追加するか, 以下のように書けば良い.
icc_shell> source ./tcl/procs.tcl
2014-07-17
ICC ZRoute にてシールド付配線を行う
ICC ZRoute では, シールド付の信号配線がサポートされている.
もちろん, Classical Router でもサポートされていた.
グローバル配線・ディテイル配線の前に,
シールドを付けたい配線だけ先に配線を行なう.
具体的な手順を以下に示す.
- 特定の信号だけ先に配線を行う.
route_zrt_group -nets [get_nets important_net*]
- シールドを作成する.
create_zrt_shield -nets [get_nets important_net*] -with_ground VSS -coaxial_above true -coaxial_below true
route_zrt_auto後でも良いのだが,
他の配線が近くにできてしまうと, シールドを作ることができなくなる.
2014-07-10
2014-02-24
set_preroute_advanced_via_rule の設定を解除
set_preroute_advanced_via_rule で電源配線などのビアを設定できるが,
間違えて設定した場合に元に戻す明示的なコマンドはない.
report_preroute_advanced_via_rule が出力する結果を見ながら,
どのようにすると元に戻るか調べてみた.
その結果, どうやら
-cut_layerオプションだけを付けて実行すると, デフォルトのルールに設定が上書きされるらしいという事がわかった.
- V6にルールを設定.
icc_shell> set_preroute_advanced_via_rule -contact_codes ZZZV6HV -move_via_to_center -size_by_array_dimensions {2 1} -rotation_mode off icc_shell> report_preroute_advanced_via_rule Default set: ---------------- Size: an area (x-size X y-size) 0.000 X 0.000 Contact code: to be selected automatically Rotation: Enable ... ---------------- Rule for cut-layer "V6": Size: via-array (nx X ny) 2 X 1 Contact code: "ZZZV6HV" Rotation: Disable ---------------- Rule for cut-layer "V7": Same as defaultV6ルールにサイズ・コンタクトコード・回転可否の条件が設定された. -
icc_shell> set_preroute_advanced_via_rule -cut_layer V6 icc_shell> report_preroute_advanced_via_rule Default set: ---------------- Size: an area (x-size X y-size) 0.000 X 0.000 Contact code: to be selected automatically Rotation: Enable ... ---------------- Rule for cut-layer "V6": Size: an area (x-size X y-size) 0.000 X 0.000 Contact code: to be selected automatically Rotation: Enable ...
V6ルールに Default set の値がコピーされた. これでデフォルトのルールに戻ったようだ.
2014-02-23
ICC: セルの配置時にエラー
ICCが
place_opt, legalize_placement で以下のようなエラーを出した.
Error: Cell xx/xx/xx unplaceable! - cannot satisfy placement constraints. (PSYN-1106)
Error: lib cell 'xxxx' of cell xx/xx/xx is illegal for all sites in the block. (PSYN-061) Error: Could not find a legal placement.このセルは triple height なのだけど, 他の triple height のセルでは問題ない. セルライブラリを Milkyway で作成した時に, 以下のように triple height にしたという警告がでるのだけれど, 他のセルがここに紛れ込んでいた.
Information: Set cell原因は, 別のセルで Boundary Layer を書き忘れていたことだった.as triple height. (MWLIBP-122)
2013-12-02
ICC による tie ネットの配線
IC Compiler でタイネット (H, L レベルに固定する入力) の配線方法はいろいろある.
preroute_standard_cellsやpreroute_instancesで-tieオプションをつけて配線する.
この場合, 電源配線として配線されるので, やや違反を起こしやすいきがする.derive_pg_connection -tieにて電源に接続させ,route_zrt_autoやroute_optで配線する.
この場合, Classical router, Z-router を使用するので, エレガントに処理してくれる. それでも, 電源レールや電源メッシュの太い配線から細い配線を出すので, DRC違反を起こす可能性がある.
set_route_zrt_common_options -tie_off_mode rail_onlyを設定しておくと, 少しはましかもしれない.connect_tie_cellsによってタイセルを追加し, 完全に信号線にしてしまう.
この場合, 電源から配線を伸ばすわけではないので, 違反が起こりにくい.
2013-07-24
ICCompiler オブジェクトの外枠を取得
ICC にて セルやマクロの外枠座標を取得するプロシージャを紹介する.
proc get_bbox {name {offset 0}} {
set bbox [get_attribute ${name} bbox]
set x1 [lindex [lindex $bbox 0] 0]
set y1 [lindex [lindex $bbox 0] 1]
set x2 [lindex [lindex $bbox 1] 0]
set y2 [lindex [lindex $bbox 1] 1]
return [list [list [expr $x1-$offset] [expr $y1-$offset]] [list [expr $x2+$offset] [expr $y2+$offset]]]
}
上記の定義にて,
マクロの外枠を取得でき, offset を指定すれば, そのオフセット分だけ外に広げて return する.
マクロ周囲にブロッケージを生成する場合などに便利である.
使用例を示す.
icc_shell> get_bbox I0
{456.0 921.6} {1651.6 1645.2}
icc_shell> get_bbox I0 16
{440.0 905.6} {1667.6 1661.2}
2013-07-11
ICCでストラップを削除する方法
ICCで引いた電源ストラップを削除するには, 以下のコマンドを使えば良い.
icc_shell> remove_objects [get_net_shapes -filter {route_type=="P/G Strap"}]
icc_shell> remove_objects [get_vias -filter {route_type=="P/G Strap"}]
つまり, route_type が P/G Strap のネットとビアを削除する.
なお, 直前に引いたストラップだけを削除する場合は,
create_power_straps -undo
2013-01-12
ICC route_search_repair が Too many broken nets とエラーを出す
route_search_repair が, 以下のエラーを出して失敗する時は,
route_auto を一度実行すると良いだろう.
There are 1248 open signal nets! Re-connect 1248 open nets! **** ERROR:Too many broken nets. Cannot continue! search & repair fail!このエラーは, オープンネットが多すぎるといっているので,
route_auto にて, オープンネットを接続してやる.
2012-12-20
ICCの配置に関するコマンド
相対的な配置制約
セルとセルとの相対的な位置関係を設定できる.set_fp_relative_location
マクロアレイ
これはどのような機能だろうか?set_fp_macro_array
グループ
セルやモジュールを指定して, 配置位置のグループを設定できる. 2種類のグループを指定できる.hardグループでは, グループに属するセルは必ず指定した位置の中に配置される.
softグループでは, グループに属するセルでも指定した位置の外に配置されることがある.
グループに属さないセルは, 指定した位置の中に配置されることはない.
create_bounds -type hard create_bounds -type soft
電源ドメイン
電源ドメインを設定すると, 配置だけでなく電源配線も分離することができる. 以下に例を示す.create_voltage_area -coordinate {0 0 72 72} -name P1 {I0} -guard_band_x 8 -guard_band_y 8 -cycle_color
レベルシフタやバッファの挿入はどのようにされるのだろうか?
ドメイン内であれば, バッファはうまく挿入されるようである. 電源ドメインをまたぐ場合は, どのように処理されるのだろうか?
座標指定
コマンドset_attribute にて, 属性 (origin, is_placed, is_fixed, orientation) を設定する. 以下に例を示す.
set inst [get_cells I0/C0]
set_attribute $inst origin {72 144}
set_attribute $inst is_placed true
set_attribute $inst is_fixed true
set_attribute $inst orientation N
あるいは, 以下のコマンドでもできるのだろうか?
set_cell_location
登録:
投稿 (Atom)