2022年2月22日火曜日

Mendeley Desktop で Citation Key が生成されない

タイトル通り,Mendeley Desktop で Citation Key が生成されなくて困っていた.ググると,Tools → Options → Document Detail を開き,当該タイトルの Document type を選択し,Citation Key にチェックを入れるとよい.チェックを入れると Citation Key の項目が開くが,登録されているすべての文献をチェックしに行くのか Mendeley が劇重になるので注意.

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 は合成できないよ」とエラーが出た.純粋に動作モデルを立てるために使うのだろう.

2021年12月18日土曜日

電力とエネルギーと電力解析CADの中身

集積回路CADでは,回路において電気がする仕事量として,エネルギー(電力量,electrical energy)ではなくなぜか電力(power)が使われる. PowerCompiler などのレポートも電力(W)で表示される.
電力とエネルギーは混同されがちだが違うので,本来の仕事量はエネルギーとなるべきである.ではツールはどう取り扱っているのか各種マニュアルを調べてみた.ちなみに,マニュアル中でも電力とエネルギーは割とグチャグチャです(もしくは凄くセンシティブに使い分けているのか)

・キャラクタライズツール側(SilicoonSmart, LibraryCompiler)
キャラクタライズツールは,電力を3要素に分解し,そのうち内部電力(Internal power)とリーク電力の項を.libとして保持する.
(1)リーク電力:静止時の電力
(2)内部電力:セル内部で消費される電力.貫通電流など.
(3)スイッチング電力:外部容量の充放電による電力
電力は本来時間の関数だが,時間の関数として持つ事は難しい.電力はある波形が入ったときに流れた電荷量の積分値に電圧をかけたもの(エネルギー)から,出力容量の充放電エネルギー量,リークによるエネルギー量を引くことで内部電力(正確にはエネルギー)を計算する.

.libの Power Table は,第一軸入力スリュー,第二軸出力容量,そして肝心の第三軸はトグルあたりのエネルギーなっている(Eint/transition, in units of fJouls).
リーク電力は入力論理値それぞれ一意の値となる.

・電力解析側(PowerCompiler)
こちらは一部憶測で,回路の消費電力を以下のように計算すると思われる(トグル確率による平均電力評価の場合).
(1) リーク電力:入力がHighの確率,Lowの確率,それぞれの時のリーク電力からリーク電力の期待値を計算し,全てのセルの総和を取る.
(2) 内部電力:全ての入力から出力へのエネルギー量に,入出力の遷移確率とパスの重みをかけたものの総和を取る※
(3) スイッチング電力:全てのパスの出力容量と対応するトグル確率をかけた物の総和をとり,Vdd^2/2をかける.

動的電力の単位は.lib中の容量単位,電圧単位,時間単位から以下のように計算する.静的電力は単位が.libに書いてある.

power_unit = (capacitive_load_unit * voltage_unit^2)/time_unit

要約すると以下の通り.
・キャラクタライズ側は,きちんとエネルギーを測ってそれをエネルギーとして Power table に登録している.リーク電力はそのまま.
・解析側は,Power tableに書かれたエネルギーとトグル確率から動的エネルギーを計算し,電力に変換.リーク電力は全セルの和をとる.

あたりまえ?かもしれないが,動的電力は回路が動いたときに消費した正味の電力なので,意味合いはエネルギーと等価.電力を周期で割った物ではない.

最初から最後までエネルギーとして取り扱えばこんな問題は起きなかったのに,なんでなんや...

※P_int = Σ_{i=A,B} E_{i→Z} x PathWeight x TggleRateという式がでてくる(A,Bは入力,Zは出力).P_intはエネルギーの総和を評価している.

.lib (Liberty)については Synopsys がその仕様をオープンにしているので参考にした.といっても800ページ近くあるので一部だけしか読めてないですが.

2021年12月7日火曜日

Python で終了する時の呼び出し関数,行番号を報告する

 タイトル通り.inspect モジュールを利用する.

Perl でもできる(さらにエラーメッセージを引数としてもらう).

Perl の方が記述はシンプルなんだよなぁ.

2021年10月9日土曜日

Vivaldi のクリプトトークンを外す

Vivaldi は Version 4.0 から正式にメールサポートしたのだが,それに伴って(?) Vivaldi が Google サービスへのアクセスを要求するようになった.

むやみやたらに権限を許可したくないのだが,許可を求めるポップアップが頻繁に出てくるのが邪魔である.その場合,[設定]→[プライバシー]→[Google拡張機能]→[クリプトトークン]を外すとポップアップが出力されなくなった.

5ch には
https://egg.5ch.net/test/read.cgi/software/1609553989/26
クリプトトークンを外すとGoogleサービスにアクセスできないというコメントがあったが,ローカルユーザーにしているからかそのような不具合には直面していない.

なおクリプトトークンとは FIDOAlliance の仕様で定義されている公開鍵暗号化に依存するユーザー認証に利用するAPI らしい.
https://forum.vivaldi.net/topic/58228/guide-google-extensions-crypto-token-what-it-does

こんな乱暴なことをしなくても,ブラウザに Google アカウントでログインしないだけでいいのだけれどね….
この対応が正しいのかは全くよくわかりません.

2021年10月3日日曜日

AnalogArtist の レイヤー選択を Skill コマンドで実行する (leiMouseSetEntryLayer. leSetEntryLayer)

leiMouseSetEntryLayer コマンドを利用すると AnalogArtist のレイヤー選択を Skill コマンドで実行できる.
x


leiMouseSetEntryLayer ( i_layer )

i_layer は整数で,Layer Select Window (LSW) の最上位の項目から順に0,1,2...である.(テクノロジファイルの techLayerPurposePriorities の順番)

i_layer の選択の Visibility が低いので,番号ではなくレイヤー名を直接指定する場合は leSetEntryLayer コマンドを利用する.

leSetEntryLayer('("s_layer" "s_puopose"))
S_layer はレイヤー名(M1など),s_puopose は Purpose (Drawingなど) である.

2021年9月13日月曜日

AMD interview Questions (Physical Design) を訳してみる

勉強になるかと思って翻訳+自分なりに回答してみた.正直回答の正確性は微妙です.
元は以下のページです.

AMD interview Questions (Physical Design)
https://www.physicaldesign4u.com/2021/03/amd-interview-questions-physical-design.html

Tell me about your experience.
Q:あなたの経験について教えてください.
A:(^p^)

How will you make sure that your power structure is good?
Q: あなたの設計した電源構成が十分である事をどう確認しますか.
A:電源配線抵抗が回路の等価抵抗の5%程度になればよい?Path-millで確認して5%以内であればOK?(正直確認をしたことがない.過去の経験からとしか) 

Tell me about DRC and LVS fixes.
Q: DRC,LVS修正について教えてください.
A: どちらも Calibre RVE の情報を元に修正します.(答えになっているのか)

Why we are following certain guidelines for macros placement and what are those guidelines?
Q: マクロ配置のガイドラインとその理由について教えてください.
A: マクロ配置のガイドラインはDRC回避と信号・電源配線のため.近接しすぎると配線が不可能になったり,マクロ内のレイヤー密度によっては密度違反を引き起こす.

What is the minimum space required in between macros if the channel is there on the non-pin side of macros?
Q: 配線チャネルがマクロのピンのない辺にある場合,マクロ間に必要な最低スペースはいくつですか.
A: ピン数/配線レイヤー数/2.2で割るのは偶数奇数レイヤーで配線方向が違うため.

What is the distance between tap cells in your design?
Q: タップセルの間隔は?
A: プロセス依存だが 60um 程度が一般的かと.

What are the setup and hold edges for a 3-level multi-cycle path?
Q: 3-level multi-cycle pathにおけるセットアップホールドエッジはいくら?
A: T_path > DFF_hold, T_path < 3 x T_clk + DFF_setup

What are the setup and hold edges for the half-cycle path?
Q: half cycle pathにおけるセットアップホールドエッジはいくら?
A: T_path > DFF_hold, T_path < 1/2 x T_clk + DFF_setup

How you will perform cell spreading in placement if congestion is there?
Q: 混雑している場所のセルを拡散させるには?
A: (具体的にどうするか実施したことない.ICCでできるのだろう.)

Tell me about the 2-pass approach in placement.
Q: Placement における2-pass アプローチについて語ってください.
A: Global Placement -> Local Placement 

Why we are not taking care of hold violations at the placement stage?
Q: 配置でホールド違反をケアしない理由は?
A: ホールド違反はCTS後のバッファリングで回避できるため.

Tell me about multi-source CTS.
Q: マルチソースCTSについて語ってください.
A: (やったことないのでわからない)

Tell me about Switching power, internal power, average power, peak power, and IR Drop.
Q: スイッチング電力,内部電力,平均電力,ピーク電力,IR Dropについて語ってください.
A: スイッチング電力は配線の充放電での消費電力,内部電力はゲートや拡散,貫通電力によるセル内部での消費電力,平均電力はクロックサイクル間に消費された電力の平均値,ピーク電力は時変動する消費電力の最大値,IR Dropはこれら消費電力によって流れる電流と配線抵抗の積によって生じる起電力でその分回路内部の電源電圧が低下する.

Tell me about CPPR.
Q: CPPRについて語ってください.
A: CPPR (Common Path Pessimism Removal)とは,OCV (On-chip Variation)を考慮したSTAにおいてパス遅延が同時にFastとSlowになる事を除去する考え方である.パス遅延解析において,Setup解析ではパス遅延最大がWorst条件で,一方Hold解析ではパス遅延最小がWorst条件である.しかし同じパスが同時にFastとSlowになることは考えられない.
そこでCommon Path(例えば2つのFFで共通するクロックバッファ)の遅延を解析対象から除去し,Setup SkewとHold Skewにおける悲観的計算を排除する.

What are the differences between OCV and POCV?
A: OCV と POCV の違いについて
Q: どちらもSTAでチップ内ばらつきを考慮するもの.OCV は データパス,クロックパスなどの遅延解析においてチップ内ばらつき相当の計数を掛けたもの.ばらつきモデルが不要という利点があるが精度が悪い.POCVは,AOCVとは違い,遅延が正規分布に従うと仮定しその μ と σ で自身のばらつきをモデル化する.AOCVより計算効率が高い.
POCVの前にAOCVがあり,AOCVはパスの距離と深さを考慮したモデル.精度は高いがモンテカルロによる統計ライブラリを作成するのが大変.

What are the setup and hold edges for the half-cycle path?
Q: half cycle pathにおけるセットアップホールドエッジはいくら?
A: (既出?)

What are the setup and hold edges for the positive latch to negative flop?
A: (パスします)

Tell me about setup and hold violation fixes which are occurred in the same path.
Q: あるパスにおいてSetup違反とHold違反を同時に解決するにはどうすればいいですか.
A: T_clockを遅らせるようにCTSを行う.

How will you apply to derate?
Q: 駆動力を下げるにはどうしますか.
A: トランジスタを小さくする.

Tell me about DPT.
Q: DPTについて語ってください.
A: DPT (Double Patterning Technology) は露光技術の1つで,2つのマスクを使って
より解像度の高いパターンを形成する技術.LELEとSADPの2種類がある.

Tell me about X-talk delta and X-talk noise.
Q: クロストークデルタおよびクロストークノイズについて語ってください.
A: 2つの隣接する配線は寄生容量で結合しており,片方の配線の充放電によってもう片方の配線の電圧が瞬時に変化し,それがノイズと見えるのがクロストークノイズ.また二つの配線が同時にスイッチすると信号の方向によってはミラー容量のように結合容量が拡大してみる.そのために信号遅延が変化する(遅くなる)のがクロストークデルタ遅延.

What are the different ways to fix setup and hold? Which one is difficult to fix setup? or hold?
Q: SetupとHoldを回避するための異なる手法は何ですか?どちらがFixが難しいですか.
A: Setup違反を回避するためにはパス遅延を小さくするかクロック周期を延ばす.Hold違反を回避するにはパス遅延を大きくする.難しいのはSetupで,パス遅延を小さくするにはパスを構成する回路を小さくするためにRTL設計に差し戻す必要も出てくる.Holdはバッファを入れれば回避できる.(電力と面積は増える)

Which violation you will fix first? Is it set up or hold?
Q: Setup違反とHold違反どちらを先に修正しますか.
A: Setup違反.理由はSetupの方が差し戻し先が遠いから.

Tell me about scan-chain reordering.
Q: Scan-chain Reorderingについて語ってください.
A: RTL段階で設計したスキャンチェイン中のDFFは,配置配線後にチップ中のどこに配置されるかわからず,スキャンの配線が遠くなる可能性がある.スキャンチェインのDFFの順番を入れ替えて配線長を最適化するのがScan-chain reordering.

What are the timing arcs for flipflop when we have scan-chain reordering?
Q: Scan-chain Reorder後のタイミングアークはどうなりますか.
A: スキャンの配線長が変わるため Timing Slack が変化する可能性がある.(答えになってない?)

How will you improve your insertion delay? 
Q: insertion delayをどう改善しますか.
A: Insertion delayとはマクロのクロックピンからDFFのクロック端子までの遅延の事.改善するためにはクロックバッファを大きくするか,Hツリーにしてクロックにおける寄生容量を減らす.

And some other timing-related scenarios w.r.t. setup and hold fixes.
Q: ほかに Setup や Hold を改善するタイミングに関するシナリオについては?
A: (わからない)

Explain sanity checks.
Q: Sanity Checkについて説明して.
A: Sanity check(健全性チェック)は,ソフトウエアやハードウエアの計算結果が正しいことを素早く評価するテストのこと.

What check_design will report?
Q: check_designコマンドは何をリポートするか.
A: 入力されたRTLの健全性を確認し,構文エラーや再帰呼び出しなどコンパイルできないものを報告する.

What is the issue, if inputs are floating?
Q: 入力がフロートの場合何が問題ですか.
A: ゲートの電圧が定まらず,PMOSからNMOSへ貫通電流が発生する.

Is there any issue in the case of outputs floating?
Q: 出力がフロートだと問題が起きますか.
A: 問題ありません.

What check_timing will report?
Q: check_timingコマンドは何をリポートするか.
A: SDCなどで定義されたタイミング属性などをチェックする

What check_library will report?
Q: check_libraryコマンドは何をリポートするか.
A: タイミングライブラリおよび物理ライブラリの整合性を確認する.

On what basis, macros will be keeping inside the design?
Q: マクロはどういう基準で設計内に配置されますか (訳に自信なし)
A: マクロにアクセスする回路とクロック配線に十分近いこと.その上で電源とのアクセスがしやすいこと.(回答になっているのか)

What is the use of keep-out margin around the macros?
Q: マクロ周辺のKeep-out merginをどのように使うか.
A: マクロ内の配線や拡散,特にDeep-NWからスタセルの距離を確保する.

Is it compulsory to keep out margin around macros?
Q: マクロの周辺にKeep-out merginを使うのは義務ですか.
A: DRC満たすなら不要では

Explain the order of keeping preplace cells?
Q: Preplace-cell を配置する順番は?
A: 電源関連のセル(TAP,Switch),次にEndcap.ほかにもある?

Tap cells information will be in which file?
Q: Tapセルの情報はどのファイルにありますか.
A: 普通は Physical Library (LEF,Milkyway,OA).ただリーク電力の情報は Timing Library に格納されている (.lib,.db).

On what basis, the distance between tap cells will be decided?
Q: TAPセルの間隔は何を基準に決めるのか
A: トランジスタのラッチアップルール

Format of keeping tap cells inside the core area.
Q: TAPセルをコアエリアに配置する形式は?
A: 質問の意図がわからない.普通は配置したら自動でdont_touch属性がつくはず.

How many std cells are being accommodated by each tap cell.
Q: タップセルあたりいくつのスタンダードセルを収容できる?
A: ラッチアップルールさえ守れば個数は問題ではないだろう.

What is the use of keeping tap cells in checkerboard format rather than keeping continuous?
Q: TAPセルを連続ではなくチェッカーボードで配置する理由は
A: TAPセルの数を半分にできる.(1つのTAPセルで2行担当できるので)

What is the purpose of endcap cells?
Q: ENDcapセルの目的は
A: セル単体では違反するDRC,特にマクロ周辺で現れる違反をEndcapを設ける事で回避できる.

Why can’t we keep endcaps on the top and bottom of macros?
Q: マクロの上部と下部でEndcapを保持できない理由は?
A: ICCでは配置できるのでそんな理由はない.

What is isolation cell, retentions cell?
Q: Isolation Cell,Retension Cellとは?
A: Isolation Cell は電源シャットダウンされた領域の信号が電源オンの領域に直接入らないようにマスクするセル.
Retention Cell は電源シャットダウンされたブロックで保持値が揮発しないようデータリテンションできるラッチを備えた特殊なDFF.ラッチはシャットダウンされるメインの電源とは別の電源で保持される.

What are the checks after the floorplan?
Q: フロアプラン後にチェックすべき項目は.
A: マクロのピン配置の妥当性とか,CellのUtilizationとか?(よくわからない)

How the tool will place std cells in the design.
Q: ツールはどうやってスタセルを配置しますか.
A: スタセル間の配線距離や信号の分岐数を最小にする目的関数で配置を行う(応えになってる?)

How to fix congestion?
Q: 混雑度をどう回避しますか?
A: 設計レベルで変えられるのはピン配置とマクロ配置ぐらい?Flynetを見て妥当性を検証する.

Prioritize timing DRCs, timing, DRC.
Q: timing と DRCとどちらを優先してFixする?
A: Hold違反 > DRC > Setup違反.Setup違反は最悪クロック落とせば動く.

What is the purpose of IO buffers?
Q: IOバッファの目的は.
A: ESDによるコアトランジスタの故障を防ぐ.チップ内外の長い配線を駆動するための巨大なトランジスタを持つ.ボンディング時の機械強度を保つ.(これはPADの仕事かもしれんが)

Among Max Trans, Max cap, Max fanout.....which one will be fixed first.
Q: 最大スリュー違反,最大容量違反,最大Fanout違反,どれを最初に直す?
A: 最大スリュー違反.なぜなら貫通電流に影響しさらにElectro Migrationに影響するため.最大容量違反と最大Fanout違反は直す必要あるのか正直疑問.

Difference between normal buffers and clock buffers.
Q: 普通のバッファとクロックバッファの違い.
A: クロックバッファは立ち上がりと立ち下がりが同じようにチューニングされている.パルスシュリンクを防ぐため.

Checks after placement.
Q: 配置後の確認事項.
A: Utilizatioinの確認ぐらい?

What are the contents of the clock spec file?
Q: Clock Spec ファイルには何が書かれている?
A: SDCの事?クロックの定義,リセットの定義,入出力遅延の定義,入出力ピンの駆動力の設定 

What is NDR?
Q: NDRとは.
A: Non-Default Ruleとは文字通り通常とは異なるルール.例えばクロックは通常の配線とは異なり配線幅を太く配線とのスペースを多く取るようなルール.

When we will enable NDR.
Q: いつNDRルールを利用しますか.
A: クロックや高速およびノイズに弱い信号の配線幅やスペース,シールディングを実施したいときに使う.

What are the inputs to PT?
Q: PTの入力は?
A: PrimeTimeの入力は,クロックの情報を持つSDC,回路ネットリスト(Verilog),回路の配線遅延情報(SDF),タイミングライブラリ(.db)