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 文は無駄ではあるが念のため.

2022年1月5日水曜日

Procedural-continuous assignments

Verilog では以下のように always の中に assign 文を入れることが出来るらしい(@ryos36さんのTwitterから).
always 文の中に assign を入れる構文は Procedural-continuous assignments (手続き文の継続的代入?)と呼ぶらしく,DesignCompiler では「Procedural-continuous assignments は合成できないよ」とエラーが出た.純粋に動作モデルを立てるために使うのだろう.