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)

Qualcomm Interview Question (Physical Design) を訳してみる

勉強になると思って翻訳+自分なりに回答してみた.

元は以下のページです.
Qualcomm Interview Question (Physical Design) 
https://www.physicaldesign4u.com/2021/03/qualcomm-interview-question-physical.html

1. Practical flow of the design?
Q: 設計の典型的なフローは
A: 物理設計であれば,フロアプラン,マクロ配置,タップ挿入,電源レール配置,セル配置,電源配線,CTS,信号配線,フィル,DRC/LVS,GDS出力.

2. How analog macro is placed?
Q: アナログマクロはどう配置する?
A: アナログ入出力の近い位置に座標を指定して配置

3. Explain the power plan structure in your design?
Q: 回路の電源構造について説明せよ.
A: 回路の等価抵抗のざっくり5%となる配線抵抗を見積もりそのような電源配線設計とする.あとはPath-millで確認するとか?

4. What is the routing blockage for analog macro?
Q: アナログマクロにおける routing blockage とは何か
A: 自動配線で配線がアナログマクロの内部に侵入するとクロストークノイズの原因になるので配線侵入を防ぐ.

5. What are the checks after the floorplan?
Q: フロアプラン後の確認事項は.
A: ピンの配置の妥当性と Utilization とか?

6. What are the steps in the placement stage?
Q: Placement における順番は?
A1: Global Placement -> Local Placement -> Legalize
A2: IO -> Macro Block -> TAP -> End-cap -> Std. Cell -> (CTS) -> Filler

7. What is the block size, utilization, target skew, WNS of your design?
Q: Block size, utilization, target skew, WNSとは何か.
A: Block size:今設計しているマクロの大きさ.
Utilization:マクロの大きさに対してスタセルが占めている面積.
Target skew:CTSで許容されるクロックの endpoint skew の値(自信なし).
WNS:Worst Negative Slack は Setup 違反の最大値.

8. What are the corners in your design?
Q: 設計のコーナーとは.
A: トランジスタ特性や使用条件の変動によるPVTばらつきを考慮してた Fast,Typical,Slow があり,すべてのコーナーで回路は仕様を満たす必要がある.

9. What are the corners considered in the placement stage? why?
Q: コーナーを配置時に考慮する必要があるのはなぜか.
A: 回路遅延を考慮した Placement を行っているため.

10. What are the corners considered in the CTS stage? why?
Q: コーナーを配置時に考慮する必要があるのはなぜか.
A: 回路遅延を考慮した CTS (Clock Tree Synthesis) を行っているため.

11. What are the causes for congestion. And how to fix it?
Q: 混雑の原因は何か.どう解消するか.
A: マクロやスタセルの配置とピンの位置に問題がある場合に混雑する.また電源などのスタックドビアが多い場合に配線をブロックしてしまう.これらを確認し適切に設定する.

12. What could be the reason for congestion, if there is neither cell density nor pin density and also, there is no much communication between nearest macro and std cells as well?
Q: セル密度やピン密度およびマクロからの配線も少ない場合に混雑する原因はなにか.
A: マクロの入出力ピンの位置が最短ではなく迂回配線が多い.電源などの固定配線が配線を邪魔している.

13. How to fix setup and hold issues?
Q: Setup違反とHold違反を回避するには.
A: Setup違反の回避は,クロックを下げるか,駆動力の高いライブラリを使うか,レジスタ間の組み合わせ回路の規模を落とす.Hold 違反の回避は Hold バッファを挿入する.

14. Give the order of priority among various setup fixing methods? And reasons for them?
Q: Setupと Hold 違反の回避の優先度は.
A: Setup 違反.理由は Setup の方が差し戻し先が遠いから.

15. How tran Violation will affect the setup?
Q: 遷移遅延違反は Setup はどう影響するか.
A: 入力の遷移遅延が大きいと次段の伝搬遅延も大くなる,そのためパス遅延も大きくなり,DFFのSetup時間も悪化する.

16. In case, there are 10000 setup violations in the placement stage, what could be the issue?
Q: 10000 もの Setup 違反がある場合何が問題か.
A: レジスタ間の回路規模が目標周波数に見合ってない.RTLを見直す.

17. What kind of constraint will lead to so many setup violations in the placement stage?
Q: どのような遅延制約が配置時のSetup違反に影響するか.
A: Placement 時は回路内部の遅延に起因する違反でないとすると,マクロの入出力条件(駆動力,配線付加)の影響が考えられる.

18. How to analyze timing reports. And how the approach will be for fixing slack?
Q: タイミングレポートの解析方法と,Slack を解決するアプローチについて
A: タイミングレポートの Max と Min が制約を満たすか確認する.Max が違反している場合は Setup 違反なので設計を見直す.Min が違反している場合はHold 違反なので Hold バッファが挿入されているか確認する.

19. If there are many shorts at one place in the routing stage, what could be the possible reason?
Q: 配線ショートが配線時に多数発生している場合の原因
A: 配線混雑度が異様に高い.電源の配置配線が不適切.メタル付き Filler セルが挿入されている.

20. What are the checks after CTS?
Q: CTS 後の確認事項
A: Negative Slack がゼロであること.Hold 違反がないこと.DRC 違反がないこと.Utilization が許容範囲であること.

21. Why we check hold after CTS?
Q: CTS 後に Hold 違反を確認する理由
A: CTS 時に Hold バッファを挿入することで Hold 違反を回避しているため

22. What are the checks after routing?
Q: 配線後の確認事項
A: Negative Slackがゼロであること.Hold 違反がないこと.DRC 違反がないこと.Utilization が許容範囲であること.

23. What are the different kinds of DRC checks?
Q: 各種 DRC チェックの違いについて
A: 製造できない形状を確認するいわゆるDRC,設計許容範囲のレイヤー密度であるか確認する密度チェック,アンテナ長が許容範囲であるか確認するアンテナチェック.ほかはかけたことがないのでよくわからない.(応えになってる?)

24. In case there are many shorts, opens, setup, hold violations...what you will address first?
Q: 大量のショート,オープン,セットアップ,ホールド違反がある場合,何を最初に確認しますか.
A: GUI を開いて Utilization を確認する.

25. What are tap cells? How much distance given in your design and why?
Q: TAP セルとは何か.TAP セルの間隔とその設定理由は.
A: TAP セルはトランジスタの基板端子を電源に接続する部品.距離はトランジスタのラッチアップルール以下にする.

26. What is the use of tap cell?
Q: TAP セルの利用目的
A: Q25と同じ

27. If we don’t use tap cells, what error we will get?
Q: TAP セルを利用しないときに現れるエラー
A: DRC にてラッチアップ違反が表示されるはず

28. What are low power techniques?
Q: 電力低減のテクニックについて
A: ABB や DVFS,パワーゲート.

29. Explain isolation cell, retentions cell, power switches, and level shifters.
Q: Isolation Cell,Retention Cell,Power Switch,レベルシフタとは?
A: Isolation Cell :電源シャットダウンされた領域の信号が電源オンの領域に直接入らないようにマスクするセル.
Retention Cell:電源シャットダウンされたブロックで保持値が揮発しないようデータリテンションできるラッチを備えた特殊なDFF.
Power Switch :パワーゲートするために電源を遮断するスイッチトランジスタ.
レベルシフタ:特に低電圧ドメインの信号を高電圧ドメインで受け取れる電圧に変換する回路.

30. How to fix static and dynamic IR issues.
Q: Static IRドロップとDynamic IR ドロップの問題の回避法
A: Static IR ドロップがリーク電流起因であれば,リーク電流の小さいHigh-Vthトランジスタを積極的に使う,ゲート酸化膜圧の大きいトランジスタを使うなど.
Dynamic IR ドロップが動作時電流に起因するのであれば,回路の動作速度を抑える,LWの小さいトランジスタを含むセルを積極的に使うなど.

31. Assume there are 6 timing corners, if the hold is not able to fix in one corner, how to fix it without affecting the other corners. What is the better approach to fix it without affecting others?
Q: 6つのタイミングコーナーがあるとして1つのコーナーで Hold 違反を回避できないときに,他のコーナーの結果に影響を与えずにその Hold 違反を回避するためにはどうするか.
A: Hold 違反が発生するとすると Fast コーナーで,その時の条件は ([Arrival Time] - [Required Time] ) < 0 である.そのため [Arrival Time]を増やす(遅くする)か[Required Time]を小さくする.前者はパスに Hold バッファを追加する.後者はクロックバッファを速くするか段数を減らす.(自信なし)

32. Write few commands from ICC2, INNOVUS?
Q: ICC2 や INNOVUS のコマンドをいくつか書いてみてよ.
A: ICC ユーザーなのでわかりません(>_<)

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年4月23日金曜日

HSPICE の Advanced Server/Client モードでマルチスレッドシミュレーションを行う

以前の記事
HSPICE で Advanced Server/Clientモードを使う
https://kawaiihaseigi.blogspot.com/2016/10/hspice-advanced-serverclient.html
でマルチスレッドもどきを実現したのだけれどその実装を公開してみる.ファイルが連番になっていることが前提です.

4 つライセンスを取得して,計8回シミュレーション実行し,その後ライセンスを解放します.
追記:バグを修正.実際に動く事を確認.

2021年4月2日金曜日

Cent OS 7 で Calibre のライセンスエラーが出る

Calibre を起動しようとすると
$ calibrewb
(略)
//  ERROR: The following products could not be licensed sufficiently:
//  ERROR: - WORKbench

となってライセンスが取れない.

Calibre はライセンスの取得に Flexera Software の lmstat を使っている.で,lmstat(実態は lmutil )でライセンスを確認してみると,
$ lmstat -f calworkbench
  "calworkbench" v2022.010, vendor: mgcld, expiry: 31-jan-2022
  floating license
(略)

という感じでライセンスは正常に見られている.謎な矛盾状態なのだが,/etc/hosts にマシン名と IP アドレスが正しく設定できていなかったのが原因だった.
$ sudo vim /etc/hosts <- 修正する
$ mgls_ok calworkbench
Checking availability of "calworkbench".
License granted through "calworkbench".
$ calibrewb
(略)
//  calworkbench license acquired.
//  WORKbench running on 64 cores

これで計算機兼 NAT なマシンは解決したのだが,プライベートネットワーク内部のPCでライセンスが取れないのが問題.ポートの開放でもすれば解決するのだろうか….

2021年3月14日日曜日

MentorGraphics の特定のライセンスが使えるか調べる(mgls_ok)

MentorGraphics (Semens) の CAD で特定のライセンスが提供されているか調べるためには,mgls_ok を使う.
% mgls_ok feature
ライセンスが取れると "License granted" と表示される.提供されていない場合は
"License server does not support this feature" と表示される.

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月20日土曜日

Calibreのログを出力する

Calibreでは,デバッグ用のログファイルを吐き出すことができる.そのためには,環境変数 MGLS_DEBUG_LOG_DIR にログファイルの出力ディレクトリを指定する.
% export MGLS_DEBUG_LOG_DIR=/log

ライセンス関連のログが詳細に記録されるので便利.ただし遅くなるのでデバッグ時のみ有効にするのがよいそうだ.

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 でやらかしていた.まるで成長していない….
 

2021年2月11日木曜日

Cent OS 7においてJVMのエラーでCalibreをインストールできない


Calibre のインストーラーが Java でできているのだが,解凍したバイナリを実行すると
*** Warning with: ./install
The version of ./JRE/bin/java may not be correct!
...Required: "1.6.0"
...Found: Error: no `server' JVM at `/cad/mentor/CDROM/install.ixl/JRE/lib/i386/server/libjvm.so'.
...Please check that you have correctly installed the Mentor Install program that contains the Java Runtime Environment.
Error: no `server' JVM at `/cad/mentor/CDROM/install.ixl/JRE/lib/i386/server/libjvm.so'.

と表示される.スクリプトを見ると,解凍したバイナリ中で
$ JAVA -version
を実行したときに,バージョン情報では無くて libjvm.so がエラーを吐くようだ.

解決方法は XFS ではなくて他のファイルシステム,例えば ext3 や ext4 を使うとよい.
EBS 12.2 -- problem installing EBS on XFS -- no server JVM at libjvm.so

上記ブログの内容を簡単にまとめると,RHEL7 系ではデフォルトでファイルシステムが XFS で,XFS で 1 TB 以上の容量を取り扱う場合に 64 bit inode を使うのだが,これが 32 bit のJava アプリケーションの実行に問題を発生させるという話.マウント時に 32 bit inode を使うようにしてもよいとのことだ.
自分の環境は Cent OS 7 に 3 TB の SSD を XFS(デフォルト) で作成していたので問題となったようだ.古い 500GB の HDD を ext4 でフォーマット & マウントしたらインストーラーが起動した.

(上記Blogでは Oracle Linux 7 で問題となっていて,自社の OS で自社のインタプリタが動かないってどういうことやねん,という感じ)

Cent OS フォーラムにもトピックが立っていたが,解決しなかった.

2021年2月3日水曜日

Cent OS 7 にtgifを入れる.Gnuplotでtgifを出力する.

 Tgif を入れる
$ wget http://bourbon.usc.edu/tgif/ftp/tgif/tgif-QPL-4.2.5.tar.gz
$ tar zxvf tgif-QPL-4.2.5.tar.gz
$ cd tgif-QPL-4.2.5
$ sudo yum install imake libXmu-devel libidn-devel libXt-devel
$ sudo yum install xorg-x11-fonts-ISO8859-1-100dpi.noarch xorg-x11-fonts-ISO8859-1-75dpi.noarch  xorg-x11-fonts-ISO8859-14-100dpi.noarchxorg-x11-fonts-ISO8859-14-75dpi.noarch xorg-x11-fonts-ISO8859-15-100dpi.noarch xorg-x11-fonts-ISO8859-15-75dpi.noarch xorg-x11-fonts-ISO8859-2-100dpi.noarch xorg-x11-fonts-ISO8859-2-75dpi.noarch  xorg-x11-fonts-ISO8859-9-100dpi.noarchxorg-x11-fonts-ISO8859-9-75dpi.noarch
$ ./configure
$ make
$ sudo make install

Gnuplot を SourceForge からダウンロードして解凍
https://sourceforge.net/projects/gnuplot/files/gnuplot/
$ tar zxvf gnuplot-5.4.1.tar.gz
$ cd gnuplot-5.4.1
$ ./configure -with-tgif
$ make
$ sudo make install
 
Gnuplot 5.4では tgif はレガシーだって,トホホ


2021年1月18日月曜日

DesignCompilerにてパラメータを伝搬しパラメタライズ化したモジュールをつなぐ

RTLが parameter 文などでパラメタライズドされていると各回路はその初期値でインスタンス化される.そのため上層の回路と下層の回路の parameter文の初期値が異なると,回路の接続をうまく見つける事ができない.

例えばプロセッサコアとその下に命令デコーダがある回路を対象に試してみる.
read_file -format sverilog { \
riscv_id_stage.sv \
riscv_core.sv \
}
current_design ${design} 
check_design



左上のLogical Hierarchyを見てもプロセッサコアしか見つからない.

これを解決するには,analyze文を利用して回路の仕様を中間表現としてライブラリに登録し,elaborate文を利用してその中間表現を読み取って回路を接続する.

file mkdir ./work
define_design_lib WORK -path ./work
analyze -format sverilog {riscv_id_stage.sv riscv_core.sv }
elaborate ${design}
check_design




上層の回路のパラメータが下層にきちんと伝搬して,インスタンス化されたモジュールが見つかり接続されたことがわかる.

参考:Link带参数的Verilog模块(Design Compiler)
https://www.cnblogs.com/kathywh/p/8550670.html

2021年1月17日日曜日

卒論前にパソコンが壊れるというジンクス

 卒論前にパソコンが壊れるというジンクス,そういえば自分の場合どうだったか振り返ってみる.

卒論:ノートPCのメイン基板死亡.写真はジャンクPCの基板と入れ替えているところ.


修論:ノートPCのキーボードのパンタグラフ折れ.写真はキーボードユニットを入れ替えているところ.


博論:ノートPCのメイン基板死亡.画像はバグったGPU出力画面.

結論:3/3の確率で何らか壊れるので,バックアップは確実にね.

2021年1月3日日曜日

Chromebook に Windows10をインストール

東芝2と呼ばれるChromebook(CB35-B3340),2015年にAmazon.comで購入して使っていたのだけれどChrome OSのサポートが2021年に切れる事になった.またブラウザがChromeというのが最大の欠点なので,Windows 10をインストールする事にした.

基本は次のサイトの通りである.

https://coolstar.org/chromebook/windows-install.html?device=gandof#!

ちなみに自分は買って速攻Developer Modeに設定していた.


Write Protectを外す

Windowsをブートさせるために有志が作ったUEFIを書き込むのだが,Write Protectが物理的にかかっているので外す必要がある.

次のサイトの説明の通りなのだが,2つの端子を導電性シートでショートしてProtectしているため,シートを除去するためにヒートシンク兼シールドを一度除去する必要がある.残差があってもだめなので,結構しっかりゴシゴシ剥がす.

プロテクトシール


剥がした後

http://www.fascinatingcaptain.com/projects/install-ubuntu-on-the-toshiba-chromebook-2-in-5-steps/

後は最初のサイトの通りに物事を進めていけばよい.各種ドライバも用意されている.

最終的にインストールできたけれど,Celeron N2480 Dual-Core, 4GB Mem, 16GB eMMC(実質14GB)は動作するにはアップアップな感じ.特にeMMCの容量が足りない….結局WindowsアップデートでeMMCの容量を食い尽くしてしまいまともに動かなかったというオチ.(CPUも2.5GHzのブースト状態でもCore 2 Duo 1.4GHzの70%程度の性能らしい)