ラベル icc の投稿を表示しています。 すべての投稿を表示
ラベル icc の投稿を表示しています。 すべての投稿を表示

2014-08-01

ICC上で特定のネットだけ再配線させる

Synopsys IC Compiler で配線すると, なぜか大きく迂回した配線ができてしまうことがある. このネットがアンテナ違反を起こした...

しかたないので, 以下のように一度その配線を消し, もう一度配線しなおした.

remove_net_shape [ get_net_shapes -of_objects {net1} ]
route_zrt_group -nets {net1}

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 でもサポートされていた.

グローバル配線・ディテイル配線の前に, シールドを付けたい配線だけ先に配線を行なう. 具体的な手順を以下に示す.

  1. 特定の信号だけ先に配線を行う.
    route_zrt_group -nets [get_nets important_net*]
  2. シールドを作成する.
    create_zrt_shield -nets [get_nets important_net*] -with_ground VSS -coaxial_above true -coaxial_below true

シールドの作成だけなら, route_zrt_auto後でも良いのだが, 他の配線が近くにできてしまうと, シールドを作ることができなくなる.

2014-07-10

ICCのサンプルスクリプト

ICCのスクリプトのリポジトリをみつけた. 何かの役にたつかもしれない. icc-par

2014-02-24

set_preroute_advanced_via_rule の設定を解除

set_preroute_advanced_via_rule で電源配線などのビアを設定できるが, 間違えて設定した場合に元に戻す明示的なコマンドはない.

report_preroute_advanced_via_rule が出力する結果を見ながら, どのようにすると元に戻るか調べてみた.

その結果, どうやら -cut_layerオプションだけを付けて実行すると, デフォルトのルールに設定が上書きされるらしいという事がわかった.

  1. 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 default
    
    V6ルールにサイズ・コンタクトコード・回転可否の条件が設定された.
  2. 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  as triple height. (MWLIBP-122)
原因は, 別のセルで Boundary Layer を書き忘れていたことだった.

2013-12-02

ICC による tie ネットの配線

IC Compiler でタイネット (H, L レベルに固定する入力) の配線方法はいろいろある.
  • preroute_standard_cellspreroute_instances-tie オプションをつけて配線する.
    この場合, 電源配線として配線されるので, やや違反を起こしやすいきがする.
  • derive_pg_connection -tie にて電源に接続させ, route_zrt_autoroute_opt で配線する.
    この場合, Classical router, Z-router を使用するので, エレガントに処理してくれる. それでも, 電源レールや電源メッシュの太い配線から細い配線を出すので, DRC違反を起こす可能性がある.
    set_route_zrt_common_options -tie_off_mode rail_only を設定しておくと, 少しはましかもしれない.
  • connect_tie_cells によってタイセルを追加し, 完全に信号線にしてしまう.
    この場合, 電源から配線を伸ばすわけではないので, 違反が起こりにくい.

理想的にはタイネットは無駄なことをしているのだけれど, モジュール間の信号や, S/R入力付DFFのRのみを使う場合に発生してしまうようだ.

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_typeP/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