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

2024年7月18日木曜日

IC Compiler/ IC Compiler II でマクロの配線長を報告する

IC Compiler/IC Compiler II ではマクロ中の配線長を報告する事が出来る.報告の方法もいくつか段階がある.

(1) マクロ内の総配線長を知りたい場合 (統計値)
IC Compiler    : report_qor
IC Compiler II : report_qor

(2) マクロ内の各配線層ごとの配線長を知りたい場合(統計値)
IC Compiler      : report_design -physical
IC Compiler II  : report_design -routing

(3) 特定の配線の配線長を知りたい場合
IC Compiler    : report_net_physical [net_name]
IC Compiler II : report_nets -physical [net_name]

なんだか微妙にコマンドやオプションが変わっているけれど,報告内容そのものは同じのよう.

2024年1月15日月曜日

Milkyway でセルが正常に更新されなくて困っていた

オチ:Virtuoso の StreamOut のログとMilkywayのログをちゃんと確認すること.

ASAP7 ではセルを 4x して配置配線するので,1x ライブラリをコピー→ XScale を使って 4x → StreamOut → Milkyway DB → IC Compiler で配置配線をしていたのだが,一部のセルのサイズが変わらなくて困っていた.オチはは OA ライブラリ中に同名の別セルが存在していたことが原因だった (具体的には,4x ライブラリのセルが 1x ライブラリの INVx2_ASAP7_75t_SL をインスタンスとして読んでしまっていた).

StreamOut はちゃんと警告していて,ダブった方を "INVx2_ASAP7_75t_SL_0" とリネーム("_0")している.リネームされたのが 1x セルならよかったのだが,4x セルがリネームされてしまったのであった.

...
WARNING (XSTRM-145): The structure name 'INVx2_ASAP7_75t_SL' has been changed to 'INVx2_ASAP7_75t_SL_0' by the translator. This could be because multiple cells with the same cell name exist in different libraries, the same cell name has been mapped to multiple cell names, or the cell name length is greater than the '32' that was specified using the '-respectGDSIINameLimit' or '-gdsCellNameLength' option.
...

Milkyway の setPRBdry のログを確認すると正しく電源が抽出されているように見えたのだが,

...
Cell [INVx2_ASAP7_75t_SL_0.FRAM] has 2 horizontal p/g rails on MET1.
         the 1 rail's net type is gnd
         the 2 rail's net type is power
Extracting P/G track for cell INVx2_ASAP7_75t_SL_0.FRAM
power/ground track (low, high): (-144, 144) (4176, 4464)
...

これはリネームされた 4x セルで,本来の名前のままの 1x セルは処理中には異なる位置の電源が抽出されており,ちゃんと「電源おかしいで」と警告されていたのであった.

...
Cell [INVx2_ASAP7_75t_SL.FRAM] has 2 horizontal p/g rails on MET1.
         the 1 rail's net type is gnd
         the 2 rail's net type is power
Extracting P/G track for cell INVx2_ASAP7_75t_SL.FRAM
power/ground track (low, high): (-36, 36) (1044, 1116)
WARNING: cell AOI321xp33_ASAP7_75t_SL.FRAM and NAND2x1p5_ASAP7_75t_SL.FRAM have different PG rail extension.
...

余談だけれど,スタセルの外形情報は Milkyway のログから抽出してもいいかもしれない.Virtuoso をゴリゴリスクリプトで動かすのは結構遅いので.

2023年9月9日土曜日

IC Compiler でダイナミック電力とスタティック電力を見積もる (report_power)

report_power コマンドを用いる事で,STA ベースのダイナミック電力及びスタティック電力の見積もりが可能.正確な電力の見積もりにはユーザーの指定するスイッチング確率がアノテートされている必要がある.ここでは IC Compiler の report_power のオプションについてまとめる.

icc_shell> 
[-net]
[-cell]
[-only cell_or_net_list]
[-hierarchy]
[-levels level_value]
[-verbose]
[-flat]
[-exclude_boundary_nets]
[-include_input_nets]
[-analysis_effort low | medium | high]
[-nworst number]
[-sort_mode mode]
[-histogram [-exclude_leq le_val
| -exclude_geq ge_val]]
[-nosplit]
[-scenarios scenario_list]
[-groups group_list]

-net
配線による電力見積もり値を報告する.デフォルトで有効.

-cell
セルによる電力見積もり値を報告する.階層モジュールにおいて physical-only cell が含まれている場合,physical-only cell と non-physical-only cell の電力量は分けて報告される.本オプション利用時にいくつかのnon-physical-only cell は電力を報告しないことがあり,その場合N/Aと表記される.デフォルトで有効.

-only cell_or_net_list
-net もしくは -cell オプションを利用時に報告対象とするcellおよびnetを指定する.cell_or_net_list に挙げられた cell もしくは net のみが電力の報告対象となる.-net -cell を同時に指定する場合少なくとも一つの -net -cell が指定されなくてはならない.
-cell に physical-only-cell が指定されない限り電力報告対象とはならない.

-hierarchy
階層的なフォーマットとして,ブロック単位の電力を報告する.-levels オプションを利用する事で報告対象の階層数を指定する.-sort および -nworst オプションは無視される.

-levels level_value
報告対象の階層数を指定する.level_value は正の整数.-hierarchy オプションを使用しない場合本オプションは無視される.

-verbose
-net もしくは -cell オプションが指定された場合,cell または net のより詳細な情報を表示する.本オプション利用時は power group summary にグループ内のセル数が表示される.

-flat
階層を除去し全階層のオブジェクトに対して電力を報告する.デフォルトでは現在の階層のオブジェクトに対して電力を報告する.

-exclude_boundary_nets
現在は無効.

-include_input_nets
Primary input のスイッチング電力も報告する.デフォルトでは無効.本オプションを利用する事で net の電力が報告されるようになり,総消費電力にも影響する.cell の内部電力及びリーク電力には影響しない.

-analysis_effort low | medium | high
電力解析の精度と速度のトレードオフを取る,デフォルトはlow.本オプションはスイッチング確率の計算に影響するため,解析対象のスイッチング確率がアノテートされている場合に影響する.

-nworst number
報告をフィルタし消費電力の多い上位 number 個のみを表示する.-net もしくは -cell オプションが指定されたときのみ有効.

-sort_mode mode
-nworst オプションを利用したときのソーティング方法を指定する.-net もしくは -cell オプションが指定されたときのみ有効.

-histogram -exclude_leq le_val | -exclude_geq ge_val
電力解析結果をヒストグラムとして表示.-exclude_leq-exclude_geq は電力のうち指定値 le_val より大きいか指定値 ge_val 小さいものを除去する.-net もしくは -cell オプションが指定されたときのみ有効.

-nosplit
ラインスプリッティングをしない.

-scenarios scenario_list
Multicorner-multimodeでのシナリオを指定する.各シナリオは個別に報告される.無効なシナリオは無視する.本オプションを指定しない場合は現在のシナリオを解析対象とする.

-groups group_list
特定のグループの電力を報告する.デフォルトではすべてのインスタンスはどれかのグループにのみ属するため,グループの電力の総和が総電力と一致する.有効なグループは以下の通り:io_pad, memory, black_box, clock_network, register, sequential, combinational.

2023年2月3日金曜日

ICC の配線を早めに諦めさせる (set_route_opt_strategy)

IC Compiler で配置配線を行うと IC Compiler は設計が収束するまでブロック分割などの配線ストラテジを変えながら配線を何度もトライするが,設計初期の見積もりなどでは試行錯誤の回数を減らして CPU 占有時間を減らしたい.配線 (route_opt) の戦略を変えるには,set_route_opt_strategy コマンドがあり,うち2つのオプションにて配線の試行回数を制御できる.

set_route_opt_strategy --route_drc_threshold [NUM1] --search_repair_loops [NUM2]

--search_repair_loops オプションは,配線時に Violation が出たときに,配線戦略(ブロック分割など) を変えて再度配線を行う試行回数の数を制御する.NUM2 は0から500の整数で,その初期値は classic router では15,zroute では10.

--route_drc_threshold オプションは,詳細配線時にどれだけ Violation が出たら配線そのものを諦めるかという閾値.初期値は3000.-1を指定すると,IC Compiler は(DRC Thresholdを?)チェックせず無制限に詳細配線の再実行を行う.

ちなみに(?),Synopsys IC Compiler は命令するとそれが理不尽でも延々と頑張る(そしてえらく時間がかかってようやく諦める)印象で,Cadence SoC Encounter はいくら命令しても一向に言うことを聞かない印象である.Innovusは知りません.

2022年1月16日日曜日

IC Compiler で配置が正しく行われているか調べる(check_legality)

IC Compiler で配置が正しく行われているか,check_legality コマンドで調べる事が出来る.

check_legality

実行すると,行 (Row) に載っていないセルの数,重なっているセルの数などが報告される.また legalize できなかったのでエラーコード PSYN-215 が報告される.
これを利用して,IC Compiler で配置が正しくできなかった場合に終了するプロシージャを以下に示す.


使い方

2022年1月15日土曜日

IC Compiler で DRC Error の一覧を出力する(get_drc_errors)

DRC Error をリスト形式で得るために get_drc_errors を利用する.

get_drc_errors
-error_view mw_error_view : 対象の Milkyway view (デフォルトで現在の view)
-error_id error_idserror_idと一致するオブジェクトのみ出力
-type error_typeerror_type に一致する違反を出力
-bbox {lx ly ux uy}:検索範囲
-quit:マッチしないときのメッセージを表示しない
-regexp | -exact-regexp では正規表現を有効に,-exact はワイルドカードを有効に
-nocaseerror_id および -filter オプションで大文字小文字を区別しない
-filter expressionfilter_collection コマンドで指定可能な形式でフィルタする

例えばショートが1000以上ある場合に ICC を止めるプロシージャを以下のように書ける.

2023/02/28 嘘を書いていたことが判明.get_drc_errors は collection を出力するので, get_object_name で list に変換しないといけません.

2022年1月14日金曜日

IC Compiler で配置配線可能な最小面積を調べる

Shell スクリプトで IC Compilerの create_floorplan のパラメータを変更していき設計が最後まで到達できたか調べれば良いのだが,面積制約を満たさない場合は DRC 違反が大量に出る中 ICC は(100%設計完了できないにもかかわらず)延々と頑張って設計改良をするので時間がかかる.一方で一度面積制約を満たしたら処理は終了したい.
そこで
(0) Shell スクリプトで tcl ファイルの create_floorplan のパラメータを変える
(1) 処理の要素要素で Utilization を調べて既定値以下なら終了する
(2) 一度最後まで到達したらフラグを出力し for ループをブレイクする

(0) はこんなコード

 
このコードをさらに外部のsedコマンドで%%START%%,%%END%%,%%INC%%,%%ROW%%を置換する.

(1) 以下のようなプロシージャを定義して


メインのtclファイル中で要所要所で呼び出す.


(2) メインのtclファイルの末尾に完遂した場合のフラグファイルの出力と,冒頭にフラグファイルがある場合にquitするようにする.


フラグファイルがある場合は(0)のシェルスクリプトでもbreakするようにしているので,tcl 中の if 文は無駄ではあるが念のため.

2021年7月1日木曜日

ICCで利用する配線層をピン接続のみに制約する

IC Compiler では set_net_routing_layer_constraints コマンドを用いて利用する配線層を制約する.このとき,標準では制約外の配線層はなるべく使わない(not discouraged)が,禁止ではない(disallowed).
この制約を変更させるためには set_route_zrt_common_options -net_min_layer_mode (もしくは -net_max_layer_mode ) を用いる

set_route_zrt_common_options -net_min_layer_mode option
optionは3つある.
soft (default):制約外の配線層はなるべく使わない(discouraged)が,禁止ではない(not disallowed).
allow_pin_connection:ピンへ接続するときのみ制約外の配線層を利用する.ピンにつながない配線や,ピンにつなぐが長すぎる配線(10配線トラックほど)はDRC違反として報告される.
hard:制約外の配線層は利用しない.

-net_min_layer_mode では下層配線へ制約でき,-net_max_layer_mode では上層配線へ制約できる.

2021年3月11日木曜日

Milkywayでセルの配線可能性を確認する.(check_library)

Milkywayでライブラリの検証を行う事ができる.最初に set_check_library コマンドで検証対象を設定し,check_library コマンドで検証を実行する.

set_check_library
-routeability:配線可能性を確認し,オフトラックのポートの数と名前をレポートする
-drc:FRAMに対してDRCをかける
-view_comparison:CELとFRAMの整合性を確認する
-antenna:アンテナ検証を行う
-signal_em:エレクトロマイグレーションルールの無い配線層を確認する
-same_name_cell:異なるリファレンスライブラリで同じ名前のセルが無いか確認する
-rectilinear_cell:セルが矩形の境界内に収まっているか確認する
-phys_property place:セルの配置制約を確認する.配置配線の境界条件,セルの高さ,UnitCell,タイルパターンなど.
-phys_property place:セルの配線制約を確認する.ポートへの配線層,配線可能性など.
-physical_only_cell:タップやダミーなどタイミング情報の無いセルを確認する.
-rail view_data:セルの電源情報を確認する.PrimeRailで作成するCONN Viewが必要.
-tech_consistency:複数のライブラリ間のテクノロジファイルの整合性を確認する
-tech:ライブラリのテクノロジーデータを確認する.
-cell {list cell1 cell2...} :チェック対象のセルを列挙する.列挙しない場合は全てチェックする.
-all:全て確認する.

実行してみるとこんな感じ
Milkyway> set_check_library -routeability
1
Milkyway> check_library

#BEGIN_CHECK_LIBRARY

   Main library name: /home/****
   Check date and time: Mon Mar  1 19:00:50 2021

#BEGIN_CHECK_PHYSICALPROPERTY

Information: List of routing properties  (LIBCHK-122)
Unit tile : unitTile
  -----------------------------------------------------------------------
              Preferred      Track
   Layer      direction    direction   Offset    Pitch     Remarks
  -----------------------------------------------------------------------
   M1             V            V       0         0.072     OK
   M2             H            H       0         0.072     OK
   M3             V            V       0         0.144     OK
   M4             H            H       0         0.192     OK
   M5             V            V       0         0.192     OK
   M6             H            H       0         0.256     OK
   M7             V            V       0         0.256     OK
   M8             H            H       0         0.32      OK
   M9             V            V       0         0.32      OK
   Pad            H            H       0         0.32      OK
  -----------------------------------------------------------------------

#END_CHECK_PHYSICALPROPERTY

#BEGIN_CHECK_ROUTABILITY


   Total number of pins without on-track routeability: 0 (out of 0)

#END_CHECK_ROUTABILITY

#END_CHECK_LIBRARY

1
Milkyway> 

ちなみに,IC Compiler のマニュアル(Library Data Preparation for IC Compiler, 2011)に「Milkyway の tcl モードでこのような検証ができます」と紹介されていたのだが,マニュアルでは set_check_library_options とされていた (ICCで実行する時は set_check_library_options なのかもしれないが,実行すると「LibraryCompilerがインストールされてないぞ!」と怒られた).一方でMilkywayのマニュアルを調べたところ,調べられた最古の Version 2007 から PDF は「将来リリースするよ」というダミー PDF しか入っていなかった.ダメじゃん.(いろいろ打ち込んでコマンド違いに気がついた)

2021年3月4日木曜日

IC Compilerでcreate_floorplanするとprefferd directionが上書きされる

タイトル通り.解決方法がわからなくて困ってる.
icc_shell> source tcl/direction.tcl # Preffered_directionを設定する.
1
icc_shell> report_preferred_routing_direction # 確認する
 
****************************************
Report : Layers
Design : riscv_core
Version: Q-2019.12-SP2
Date   : Mon Mar  1 19:30:55 2021
****************************************

Layer Name                   Library             Design              Tool understands
M1                           Horizontal          Not Set             Horizontal
M2                           Vertical            Not Set             Vertical
M3                           Not Set             Not Set             Not Set
M4                           Not Set             Horizontal          Horizontal
M5                           Not Set             Vertical            Vertical
M6                           Not Set             Horizontal          Horizontal
M7                           Not Set             Vertical            Vertical
M8                           Not Set             Horizontal          Horizontal
M9                           Not Set             Vertical            Vertical
Pad                          Not Set             Not Set             Not Set

Warning: Consecutive metal layers have the same preferred routing direction. (PSYN-882)
1
M4がHorizontalになってる.

icc_shell> create_floorplan \
? -control_type width_and_height \
? -flip_first_row \
? -bottom_io2core 0.54 \
? -top_io2core    0.54 \
? -left_io2core  0.144 \
? -right_io2core 0.144 \
? -core_height $height \
? -core_width $corew 
308 pads are constrained in TDF table
There are 0 IO pads 0 corner pads in total
Core aspect ratio adjusted to 1.449
Core Utilization adjusted to 0.312
Start to create wire tracks ...
Warning: Revise physical constraint layer of terminal DATA_ADDR_O[28] to M2 -- M3 is not a preferred layer of the edge it resides on. (FPHSM-1626) 
内部でPreferred Directionが変わってしまい,設定とPreferred Directionが異なるから入れ替えるよ!と全ポートに対して警告される
(略)
Number of terminals created: 310.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Name         Original Ports
riscv_core              310
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Completed pin assignment.
Elapsed =    0:00:00, CPU =    0:00:00
Planner Summary:
This floorplan is created by using tile name (unit).
Row Direction = HORIZONTAL
Control Parameter =  Width & Height
Core Utilization = 0.312
Number Of Rows = 507
Core Width = 378
Core Height = 547.56
Aspect Ratio = 1.449
Double Back ON
Flip First Row = YES
Start From First Row = NO
Planner run through successfully.
1
icc_shell> report_preferred_routing_direction 
 
****************************************
Report : Layers
Design : riscv_core
Version: Q-2019.12-SP2
Date   : Mon Mar  1 19:31:04 2021
****************************************

Layer Name                   Library             Design              Tool understands
M1                           Horizontal          Horizontal          Horizontal
M2                           Vertical            Vertical            Vertical
M3                           Not Set             Horizontal          Horizontal
M4                           Not Set             Vertical            Vertical
M5                           Not Set             Horizontal          Horizontal
M6                           Not Set             Vertical            Vertical
M7                           Not Set             Horizontal          Horizontal
M8                           Not Set             Vertical            Vertical
M9                           Not Set             Horizontal          Horizontal
Pad                          Not Set             Vertical            Vertical

変わってしまった.M4 は横だったのが縦になっている.そもそも Library で M1 がHorizontal になっているのも解せない.リファレンスライブラリの Milkyway では Vertical になってるのだけどな.
もしかしたら,M1 で Horizontal に電源レールを引くのでそれにつられて全て Preferred Direction が変更されているのかもしれない.うーん.

2021年2月18日木曜日

IC Compilerにて配置配線に失敗する(alo_initial_cluster)

結論:計算機の割り当てられた IP アドレスと /etc/hosts の IP アドレスに不一致がある事を修正する.

IC Compiler にて自動配置 (place_opt) が以下の様に失敗するようになった.
icc_shell> place_opt
(略)
Information: Running stand-alone coarse placer in a separate process using temp directory '/tmp'. (PSYN-605)
Severe Error: Fatal error: Placer did not complete. (PSYN-375)
Error: psynopt has abnormally terminated.  (OPT-100)
Error: place_opt results invalid due to placer failure.
Error: A Severe error has occurred. To ensure that the script does not continue, the value of sh_continue_on_error has been overridden to be false. Your script is being interrupted. To see the Tcl call stack for the part of your script which generated the Severe error use the error_info command.   (CMD-103)
Error: Severe error encountered
Use error_info for more info. (CMD-013)

error_info を確認してみると
icc_shell> error_info
Extended error info:
can't unset "alo_initial_cluster": no such variable
    while executing
"unset alo_initial_cluster"
    invoked from within
"place_opt"
 -- End Extended Error Info

unset alo_initial_cluster を実行できないと言われている.計算機の DHCP 割り当てを変更したばかりだったので,/etc/hosts の修正をしてみたら解決した.おそらく,PCクラスタで実行するためにホスト情報の取得に失敗しているのだろうと推測される.

既視感あるなーって思ったら,過去に SiliconSmart でやらかしていた.まるで成長していない….
 

2020年11月6日金曜日

IC Compilerにて配線方向を指定する(set_preferred_routing_direction)

 IC Compilerにて配線の方向を設定するには,set_preferred_routing_direction オプションを使う.

set_preferred_routing_direction -layers {Mx My} -direction [vertical|horizontal]

テクノロジーファイルなどに,あらかじめ配線方向が規定されている場合もある.この設定を消すためには remove_preferred_routing_direction を使う.

remove_preferred_routing_direction -layers {Mx My}

フロアプランを決めてしまうと配線方向は変えられないので,create_floorplan コマンドの前に実行すること.

2020年8月23日日曜日

IC Compilerの配線長に制約を設定する (set_max_length)

IC Compile rでは通常使用する配線長に制約はない.意図的に制約を設けたいときは,
set_max_length オプションを使用することができる.
> set_max_length integer design
このオプションは設計者がトップレベルで配線バッファを挿入することを想定しているので,バッファ挿入コマンド create_buffer_tree と併用することが想定されている.
> set_max_length integer design
> create_buffer_tree -on_route
create_buffer_tree コマンドを実行するとバッファの挿入と配線がされてしまうので,配線を後でしたい場合は -skip_detail_route オプションをつけるとよい.

2019年11月29日金曜日

IC Compiler で preferrd direction 以外の配線を禁止する

IC Compiler は一般に設定された preferred direction に沿った配線トラックに従って配線を行うが,配線接続性を向上させるために許容される範囲で配線トラックからずれた配線(オフトラック配線)を行う事がある.
一方で,プロセスによっては特にリソグラフィの都合もあり,オフトラック配線や,特定の配線幅以外全くを許容しない場合がある(SADPの場合など).

IC Compiler にて preferred direction 以外の配線を禁止するためには,Astro (IC Compiler)のテクノロジファイルに nonPreferredRouteMode を有効する.
また,オフトラック配線,つまり配線の一部を太らせる事を禁止するためには, hasRectangleOnly を有効にする.

Layer "M1" {
...
   hasRectangleOnly=1
   nonPreferredRouteMode=1
}

これはレイヤーごとに設定できる.

2019年11月28日木曜日

IC Compiler で Preferred Direction を設定する

IC Compiler で配線の preferred Direction を設定するためには,set_preferred_routing_direction コマンドを使う

icc_shell>  set_preferred_routing_direction -layers {M3 M5 M7} -direction vertical

現在の preferred direction を調べるには report_preferred_direction を使う

icc_shell> report_preferred_direction

Milkyway で axgDefineWireTracks コマンドを使うことで preferred direction を設定するが,どうも Unit Cell 上の配線トラックの定義をしているらしく配置配線には反映されなかった.マクロレベルの配線トラックの定義は IC Compiler で行う必要があるらしい.

2019年11月19日火曜日

IC Compiler でマルチハイトセルを使う

IC Compiler でマルチハイトセルを使うメモ.ちゃんとしたセルを使わないと罠にはまるので注意.

(1) マルチハイトのセルを作成する.
このとき,最も下の行(横列)の電源の構造が,シングルハイトセルと同じにならなければいけない制約がある.つまり,普通のセルの電源レールが上から VDD/VSS の場合,マルチハイトセルは VSS/VDD/VSS となるべきで VDD/VSS/VDD ではいけない.

(2) マルチハイトの Unit Tile をテクノロジファイルに定義する.
一般に配置配線ツールはスタンダードセルの最小単位(Unit Tile)を定義し,そのグリッドにスタンダードセルを配置する.Astro (ICC)のテクノロジファイルにマルチハイトの Unit Tile の大きさを定義する.

/*シングルハイト*/
Tile "unit" {
width = 0.2
height = 1.8
}
/*マルチハイト*/
Tile "unit_2" {
width = 0.2
height = 3.6
}

(3) マルチハイトセルを認識させる
Set PR Boundaryを実行する.実行すると,セルの高さを認識し電源レールの順番を報告してくれる.

この後,Set Multiple Height PR Boundary (cmSetMultiHeightProperty)を実行する.
このとき以下のフィールドに以下のように記入する.
Library Name : ライブラリの名前
Cell Name : マルチハイトセルの名前,アスタリスクも使える.

LEF IN の時だけ必要で GDS IN の時は不要という説もあるらしい.また,マルチハイトセルでは複数の電源を持つこともできる.パワーゲーティング用だろうか.

(4) 配線トラックの定義
Unit Tile の配線トラックを定義する.Define Wire Tracks (axgDefineWireTracks) を使ってシングルハイトセル用のトラックを定義しているはずなので,それをマルチハイトセルにも実行する.この際,テクノロジファイルで定義した Unit Tile の名前をつけること.

;; シングルハイトセル
geOpenLib
setFormField "Open Library" "Library Name" "myLib"
formOK "Open Library"
axgDefineWireTracks
setFormField "Define Wire Track" "m1Dir" "horizontal"
setFormField "Define Wire Track" "m2Dir" "vertical"
...
formOK "Define Wire Track"
;; マルチハイトセル
geOpenLib
setFormField "Open Library" "Library Name" "myLib"
formOK "Open Library"
axgDefineWireTracks
setFormField "Define Wire Track" "Apply To" "specified"
setFormField "Define Wire Track" "User TileName" "unit_2"
setFormField "Define Wire Track" "m1Dir" "horizontal"
setFormField "Define Wire Track" "m2Dir" "vertical"
...
formOK "Define Wire Track"

(1) にはまった,というか,普通VDD/VSSで作ったらマルチハイトセルはVSS/VDD/VSSで作るのが直感的だと思うが,そうでない作り方をされてしまった.自由な発想だ.よい子のみんなは自然な設計をしようね.

2019年8月23日金曜日

IC Compilerの実行時間を一時的に早くする (set_fast_mode)

設計初期段階などで IC Compiler の実行速度を高速化したい場合は,set_fast_mode オプションを有効にする.

set_fast_mode true

本設定を有効にすると,以下のオプションをつけることと等価になる.
place_opt コマンドは -effort low 相当になり,ユーザーの指定する -effort オプションは無効化される.
さらに実行時間を削減したければ,-no_congestion オプションをつける.
clock_opt コマンドは無効化される.
route_opt コマンドは -effort low 相当になり,ユーザーの指定する -effort オプションは無効化される.

マニュアルによると,30%から50%ほど実行時間を短縮できるらしい.当たり前だが回路の品質はかなり悪化するので,フローが完成したら set_fast_mode オプションは削除したらよいだろう.

2019年8月3日土曜日

IC Compilerで矩形以外のフロアプランを使う(initialize_rectilinear_block)

IC Compiler でフロアプランを作成するとき,create_floorplan コマンドを使うが,これは長方形のフロアプランしか作成できない.長方形以外のフロアプランを作るときは initialize_rectilinear_block コマンドを使う.

initialize_rectilinear_block
[-bottom_io2core distance]
[-control_type ratio | length]
[-core_side_dim { side_a side_b side_c side_d [side_e side_f]}]
[-core_utilization ratio_val]
[-flip_first_row]
[-keep_io_place]
[-keep_macro_place]
[-keep_std_cell_place]
[-left_io2core distance]
[-no_double_back]
[-orientation N | W | S | E ]
[-right_io2core distance]
[-row_core_ratio ratio_val]
[-shape L | T | U | X]
[-start_first_row]
[-top_io2core distance]
[-use_current_boundary]
[-use_vertical_row]

例えばL字型のフロアプランであれば,以下のようにする.

initialize_rectilinear_block
-control_type length
-core_side_dim { side_a side_b side_c side_d }
-shape L
length オプションにした場合, side_a side_b side_c side_d は長さ(um)を指定する.ratio オプションにした場合,side_a side_b side_c side_d は4辺の比率となり -core_utilization で指定した Utilization を満たす様にサイズを自動的に調節する.
形は,-shape オプションでL字,T字,U字,X字が選択できる.頂点の数は形に寄って変わる.


T字,U字,X字の場合は以下のように指定する.
-core_side_dim { side_a side_b side_c side_d  side_e side_f}

回転角は -orientation オプションで N (0°),W(90°), S(180°),E(270°)と選択できる.

H型などさらに複雑なフロアプランは,create_boundary コマンドで生成できる.

詳細はマニュアル(IC Compiler Design Planning User Guide)…と思いきや,マニュアルには「詳細は ICC で man を開くように」と書いてある.


2019年7月27日土曜日

IC Compilerにおけるderive_pg_connectionの順番

IC Compiler で電源を定義し回路(スタセル,マクロ)の電源ポートと接続するために
 derive_pg_connection コマンドを利用する.多電源回路では複数回コマンドを呼び出す必要があるが,スタセルの電源に接続したい電源名を最初に宣言する必要がある.

例えばVDDCとVDDMがあり,スタセルのVDDにVDDC配線を接続する場合は,
derive_pg_connection -power_net {VDDC} -power_pin {VDD} -ground_net {VSS} -ground_pin {VSS}
derive_pg_connection -power_net {VDDM}
とする.
もし
derive_pg_connection -power_net {VDDC}
derive_pg_connection -power_net {VDDM} -power_pin {VDD} -ground_net {VSS} -ground_pin {VSS}
と逆にすると,preroute_standard_cells コマンドでスタセルの電源レールを引いた時にVDDMとVSSのレールができてしまう.

preroute_standard_cells-net オプションをつけずに実行すると,デフォルトで電源とグラウンドのネットを使うとあるので,どうも一番最初に宣言した -power_net を回路の電源と認識するようだ.preroute_standard_cells コマンドで電源ネットを明示的に指定するためには以下のようにすれば良さそうだが未検証
preroute_standard_cells -net {VDDC VSS}

2019年7月23日火曜日

IC Compilerでホールド違反を回避できない時に気をつける事

(1) ホールド違反を回避しながら再配線する
set_fix_hold [all_clocks]
route_opt -incremental -only_hold_time

(2) focal_optを実行する
focal_opt -hold_endpoints all -register_to_register

focal_optはトポロジベースのポストルート最適化コマンドで,セットアップ違反,ホールド違反,DRC 違反などを回避可能だそうだ.ポストルート最適化なので route_opt のあとに実行する.

(3) コア面積の余裕を確認する
コア面積に十分余裕がないとホールド違反回避バッファを入れられないので,いくら
route_opt -incremental -only_hold_time
を実行してもホールド違反を回避できない.

create_floorplan で Utilization が 0.8 だから大丈夫?そんなことはなくて,TAP セル,Endcap セル,Tie セルなどがどんどん入るので余裕はない.さらにTiming Driven P&R では駆動力が足りない場合はより大きなセルに入れ替えたりパスを分割(path-spliting)して駆動力を確保するのでますます余裕はなくなる.

ある回路では,初期の Utilization が54.8%だったのに,配置配線後の実際のUtilizationは87.1%になっていた.

Utilizationは以下のコマンドで評価できる.
report_placement_utilization