IC Compilerで利用する(Astroの)テクノロジファイルには一般に様々な種類のVIAマクロが定義されており,IC Compilerはそれらの中から状況に応じてVIAを使い分ける.IC Compilerが意図通りのVIAを生成しないときは,advanced via ruleを指定する事でユーザーの意図通りのVIAを選択させることができる.
例えば,電源ストラップ生成時のスタックドビアに利用するVIAを指定するには以下のように設定すればよい.
set_preroute_advanced_via_rule -contact_code TECH_VIA1 -size_by_array_dimensions [list 5 1] -move_via_to_center
その後いつものように電源ストラップを生成する.
create_power_straps -direction vertical -start_at 4.5 -num_placement_strap 2 -increment_x_or_y 20 -nets {VDD VSS} -layer M5 -width 1 -step 20 -pitch_within_group 1.75 -extend_low_ends force_to_boundary_and_generate_pins -extend_high_ends force_to_boundary_and_generate_pins -advanced_via_rules
-contact_codeでテクノロジファイル中のVIAを指定する事が可能である.-move_via_to_centerオプションをつけると,電源レールの真ん中にVIAを配置することが可能である(つけないとずれる).
2013年8月6日火曜日
2013年8月1日木曜日
NC-Verilogにおける実負荷シミュレーションのバッドノウハウ
NC Verilogを使ってSDFをアノテートしたシミュレーションをする時,アノテーションの手法は以下の2つがある.
- Verilogテストベンチ中に$sdf_annotate("file", module)を使う
- NC Verilog起動時に+sdf_file+<
file> を引数で与える
これらの手法のうち,(1)で以下のワーニングが発生しうまくアノテーションできずはまった.
ncelab: *W,sdfNET: failed Attempt to annotate to non-existent path...
しかし,同じファイルであっても(2)を試すとうまくいく.よくわからないが,(1)と(2)ではサポートしているSDFの構文が違うのだろうか.利用したのはncverilog 06.20-s004 (IUS62)である.
ncelab: *W,sdfNET: failed Attempt to annotate to non-existent path...
しかし,同じファイルであっても(2)を試すとうまくいく.よくわからないが,(1)と(2)ではサポートしているSDFの構文が違うのだろうか.利用したのはncverilog 06.20-s004 (IUS62)である.
なお,(2)は+sdffile<file > と"+"なしでも正しくアノテーション可能である.
SDFをアノテーションすると当たり前だが各セル,配線遅延を想定したシミュレーションになる.従ってテストベンチのクロック周期を想定する回路のクロック周期に設定しないと当たり前だがタイミング違反になる.
Verilogシミュレーションにおいて,セットアップ違反はホールド違反として報告されることがある.早とちりせずに2つのタイミング違反の可能性について調査する必要がある.
何も考えずにシミュレーションをしていたところ,回路を100GHzでシミュレーションしてしまい結果ホールド違反(と思わせたセットアップ違反)がモリモリでてきて悩んでしまった.情けない.
IC CompilerでHold回避用遅延素子を指定する
IC Compilerによる配置配線においてHold違反を回避するために遅延素子を入れるが,私の環境ではインバータチェーンで構成されてしまい面積/消費電力的に無駄が多い.実際には特定のセル(DELAYセル)をホールド解決用に利用したい,そのためにはset_prefer属性を付加するしたうえでhold違反の修正を行う.以下のようにコマンドを入力すればよいようだ.
set_prefer -min {tech_lib/MY_DELAY_CELL}
set_fix_hold_options -preferred_buffer
set_fix_hold [all_clocks]
あとはroute_opt等の配線時にhold違反を修正するよう設定すればよい.
set_prefer -min {tech_lib/MY_DELAY_CELL}
set_fix_hold_options -preferred_buffer
set_fix_hold [all_clocks]
あとはroute_opt等の配線時にhold違反を修正するよう設定すればよい.
2013年7月31日水曜日
Calibre Interactive WindowをIC Compilerに表示させる
Mentor GraphicsのResource Centerを見ていて知ったのだが,Calibre Interactive WindowをIC Compilerに表示させることが可能らしい.
Calibreのインストール先として環境変数$CALIBRE_HOMEを設定したうえで,以下のコマンドをIC Compilerの設定ファイル($HOME/.synopsys_icc_gui.tcl)もしくはIC Compilerのシェルに書き込めばよい.
icc_shell> source [file join $::env(CALIBRE_HOME) lib icc_calibre.tcl]
今までGDSをCalibreWORKbenchで見る,もしくはAnalogArtistにStreamINしていたけれど,今後そんな面倒なことをしなくても良さそうだ.
参考:
Calibre Interactive User's Manual
Resource Center Mentor Graphics
Calibreのインストール先として環境変数$CALIBRE_HOMEを設定したうえで,以下のコマンドをIC Compilerの設定ファイル($HOME/.synopsys_icc_gui.tcl)もしくはIC Compilerのシェルに書き込めばよい.
icc_shell> source [file join $::env(CALIBRE_HOME) lib icc_calibre.tcl]
今までGDSをCalibreWORKbenchで見る,もしくはAnalogArtistにStreamINしていたけれど,今後そんな面倒なことをしなくても良さそうだ.
参考:
Calibre Interactive User's Manual
Resource Center Mentor Graphics
2013年7月29日月曜日
IC CompilerのZrouteで並列処理をする
IC Compiler(2008年版)までは普通のrouter(Classic router)を使っていたが,現在利用中のIC Compiler 2010年版のZrouteが超快適で研究室で愛用している.しかしtopコマンドを見るとCPUを1つしか使っていない.
Classic routerで並列処理をするときはset_destribute_routeを使ってホストの情報を取得したが,Zrouteの場合はset_host_optionsを使う様だ.
icc_shell> set_host_options -max_cores 12
配線や寄生成分抽出など場面によって使い分けもできるらしいが,複雑に考えない場合は単に-max_coresで利用するコア数を指定すればよいとのこと.1コアでさえ速いZeouteがきちんと12コア使って高速処理してくれるので気持ちが良くなった.
ちなみに,複数のマシンに配線のジョブを流すことも可能らしい.商用の大規模な回路をフラットで設計する時には役に立つのかもしれない(研究室レベルの回路だと牛刀かもしれない).
Classic routerで並列処理をするときはset_destribute_routeを使ってホストの情報を取得したが,Zrouteの場合はset_host_optionsを使う様だ.
icc_shell> set_host_options -max_cores 12
配線や寄生成分抽出など場面によって使い分けもできるらしいが,複雑に考えない場合は単に-max_coresで利用するコア数を指定すればよいとのこと.1コアでさえ速いZeouteがきちんと12コア使って高速処理してくれるので気持ちが良くなった.
ちなみに,複数のマシンに配線のジョブを流すことも可能らしい.商用の大規模な回路をフラットで設計する時には役に立つのかもしれない(研究室レベルの回路だと牛刀かもしれない).
Calibre InteractiveにおけるLVS optionの取り扱い
Mentor Graphics Communities; How to disable the LVS Options in Calibre Interactive GUI?
Calibre Interactiveの場合,LVSのオプションはルールに記載されたものではなく,Calibre Interactiveのデフォルトが使われるらしい.ルールに記載されたオプションを利用するためには,[LOAD]ボタンを押さなければ反映されないらしい.
今まで「なんでルールにオプション記載してもLVSに反映されていないのだろう」と思っていたけれど,こんな事実だったとは….また,Calibre 2010ではパスするマクロがCalibre 2011では抽出されてほしくないFillerが抽出されてLVSがパスしなくなる問題もあったが,これもおそらくフィルターオプションの"AF"が2011版では無効になっているのかもしれない.
Calibre Interactiveの場合,LVSのオプションはルールに記載されたものではなく,Calibre Interactiveのデフォルトが使われるらしい.ルールに記載されたオプションを利用するためには,[LOAD]ボタンを押さなければ反映されないらしい.
今まで「なんでルールにオプション記載してもLVSに反映されていないのだろう」と思っていたけれど,こんな事実だったとは….また,Calibre 2010ではパスするマクロがCalibre 2011では抽出されてほしくないFillerが抽出されてLVSがパスしなくなる問題もあったが,これもおそらくフィルターオプションの"AF"が2011版では無効になっているのかもしれない.
2013年7月16日火曜日
Office 2013のスタート画面を表示させない
Office 2013は起動時に白紙の入力画面ではなく,スタート画面を表示させる仕様になった.例えばExcel 2013であれば以下の画面が表示される.
最近使ったファイルが表示されるのは便利かもしれないが,旧来のユーザーとしては白紙のブックを選択する操作が増えるので面倒である.このようなスタート画面を表示させないようにするために,オプションを変更する.[ファイル]→[オプション]を選択する.
[基本設定]の一番下に[このアプリケーションの起動時にスタート画面を表示する]というオプションが存在するので,チェックボックスを外す.
以降,新規起動時かならず白紙のブックが表示される.
これはWord,PowerPoint等の他のツールでも同様に設定することが可能である.
スタートメニューを表示するというのはMicrosoft以外のツールも採用しているので特別に文句があるわけではないが,(タッチ対応のため)無駄にでかい事と,なぜ2番目の選択肢が「ツアーに参加する」なのか,理解に苦しむ.
最近使ったファイルが表示されるのは便利かもしれないが,旧来のユーザーとしては白紙のブックを選択する操作が増えるので面倒である.このようなスタート画面を表示させないようにするために,オプションを変更する.[ファイル]→[オプション]を選択する.
[基本設定]の一番下に[このアプリケーションの起動時にスタート画面を表示する]というオプションが存在するので,チェックボックスを外す.
これはWord,PowerPoint等の他のツールでも同様に設定することが可能である.
スタートメニューを表示するというのはMicrosoft以外のツールも採用しているので特別に文句があるわけではないが,(タッチ対応のため)無駄にでかい事と,なぜ2番目の選択肢が「ツアーに参加する」なのか,理解に苦しむ.
2013年7月13日土曜日
MilkywayでFRAM Viewが作られないときの対応方法
Milkywayでフィジカルライブラリを作成するときに,
Warning: Skip generating FRAM view for cell (HOGE) because cell
type option is not enable or mis-matched. (RT-116)
といってFRAM Viewが作られない事がある.ワーニングの通り,マクロのcell typeが指定されていない事が原因である.GDSをStream Inする時に,Cell Type Difinition Fileを適切に読み込む事でcell typeを指定する.Cell Type Difinition FIleには,cell typeと対応するマクロの名前を書けばよい.例えばHOGEをスタセルとして認識させるには
gdsStdCell HOGE
とすればよい.GDS中のすべてのセルを指定するのであれば
gdsStdCell *
の様に'*'を使うことも可能である.
MilkywayのコマンドとしてCell Typeを定義することもできる(Schemeモードであれば cmMarkCellType)が,なぜかこのコマンド実行してもTrueを返すわりにcell typeの定義はできていないようで,cmMarkCellTypeを実行してもFRAM Viewは作られない(バグ?).
Warning: Skip generating FRAM view for cell (HOGE) because cell
type option is not enable or mis-matched. (RT-116)
といってFRAM Viewが作られない事がある.ワーニングの通り,マクロのcell typeが指定されていない事が原因である.GDSをStream Inする時に,Cell Type Difinition Fileを適切に読み込む事でcell typeを指定する.Cell Type Difinition FIleには,cell typeと対応するマクロの名前を書けばよい.例えばHOGEをスタセルとして認識させるには
gdsStdCell HOGE
とすればよい.GDS中のすべてのセルを指定するのであれば
gdsStdCell *
の様に'*'を使うことも可能である.
MilkywayのコマンドとしてCell Typeを定義することもできる(Schemeモードであれば cmMarkCellType)が,なぜかこのコマンド実行してもTrueを返すわりにcell typeの定義はできていないようで,cmMarkCellTypeを実行してもFRAM Viewは作られない(バグ?).
2013年7月12日金曜日
HSPICEで自作関数を定義する
HSPICEでは変数の定義と同様に,自作関数を定義することができる.フォーマットは以下の通り.
.param funcname1(arg1[,arg2...]) = expression1
+ funcname2(arg1[,arg2...]) = expression2
関数名(funcname)は組み込み関数と異なる名前である必要があり,また別の関数内で利用する関数はあらかじめ定義されている必要がある.引数(arg)は必ず1つ以上必要であり,複数定義できる.関数は再定義できるが,オーバーロードではなくオーバーライドになる様だ(明確には述べられていないが).
例えば剰余を求める関数は,以下のようになった(SPICEv3にはあるのになぜHSPICEには無いのだろう??).
.param remain(numer, denom)='numer - (int(numer/denom) * denom)'
10進数を2進数に変換してみる.SPICEのカードの一部を示す.
.param remain(numer, denom)='numer - (int(numer/denom) * denom)'
.param COND_DCC_0 = 'remain(TRIAL, 2)'
.param COND_DCC_1 = 'remain(int(TRIAL/2), 2)'
.param COND_DCC_2 = 'remain(int(TRIAL/4), 2)'
.param COND_DCC_3 = 'remain(int(TRIAL/8), 2)'
.param COND_DCC_4 = 'remain(int(TRIAL/16), 2)'
.param COND_DCC_5 = 'remain(int(TRIAL/32), 2)'
.param COND_DCC_7 = 'remain(int(TRIAL/64), 2)'
.param COND_DCC_6 = 'remain(int(TRIAL/128), 2)'
.tran 10p 10n sweep TRIAL 0 256 1
HSPICEでシミュレーションしたところ,ちゃんと2進数に変換できた!
試していないが,おそらくHSIMでもできる
.param funcname1(arg1[,arg2...]) = expression1
+ funcname2(arg1[,arg2...]) = expression2
関数名(funcname)は組み込み関数と異なる名前である必要があり,また別の関数内で利用する関数はあらかじめ定義されている必要がある.引数(arg)は必ず1つ以上必要であり,複数定義できる.関数は再定義できるが,オーバーロードではなくオーバーライドになる様だ(明確には述べられていないが).
例えば剰余を求める関数は,以下のようになった(SPICEv3にはあるのになぜHSPICEには無いのだろう??).
.param remain(numer, denom)='numer - (int(numer/denom) * denom)'
10進数を2進数に変換してみる.SPICEのカードの一部を示す.
.param remain(numer, denom)='numer - (int(numer/denom) * denom)'
.param COND_DCC_0 = 'remain(TRIAL, 2)'
.param COND_DCC_1 = 'remain(int(TRIAL/2), 2)'
.param COND_DCC_2 = 'remain(int(TRIAL/4), 2)'
.param COND_DCC_3 = 'remain(int(TRIAL/8), 2)'
.param COND_DCC_4 = 'remain(int(TRIAL/16), 2)'
.param COND_DCC_5 = 'remain(int(TRIAL/32), 2)'
.param COND_DCC_7 = 'remain(int(TRIAL/64), 2)'
.param COND_DCC_6 = 'remain(int(TRIAL/128), 2)'
.tran 10p 10n sweep TRIAL 0 256 1
HSPICEでシミュレーションしたところ,ちゃんと2進数に変換できた!
試していないが,おそらくHSIMでもできる
2013年7月10日水曜日
ulem.styにemphをアンダーラインにさせない
latexで論文を修正するために修正前の箇所に取消線を引く時,心臓に悪い自体が起きたのでメモ.
latexで取消線を引くには,ulem.styを使う.
ulem.styは取消線以外にもアンダーラインや二重線等もスタイルとして含んでいるのだが,
ulem.styはデフォルトでイタリックをアンダーラインに変えてしまう.つまり\emや\emphが
アンダーラインになってしまう.
ulem.styは取消線以外にもアンダーラインや二重線等もスタイルとして含んでいるのだが,
ulem.styはデフォルトでイタリックをアンダーラインに変えてしまう.つまり\emや\emphが
アンダーラインになってしまう.
\usepackage{ulem}をしたばかりに,引用文献が,アンダーラインになってしまった!
気がつかずに投稿していたらと思うと心臓ばくばくである.
そういうときは,normalemオプションを使う.
\usepackage[normalem]{ulem}を使えばこの通り,元のイタリックに!
論文締め切り直前にこんな事態が起きるなんて,なんて心臓に悪いパッケージなんだ... (UnderLineEMphasizeの名の通りといえばそうなのだが)
以下のドキュメントが詳しい.
http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&ved=0CDkQFjAB&url=http%3A%2F%2Ftexdoc.net%2Ftexmf-dist%2Fdoc%2Fgeneric%2Fulem%2Fulem.pdf&ei=tRMAUcKqHM6QiAeKmoGQAQ&usg=AFQjCNFrSE3qDfkcWl-YWFKHGEK9cw-4vA&sig2=638e6jfyWLXhfMw0N3ZhDA&bvm=bv.41248874,d.aGc
登録:
投稿 (Atom)