2021年9月13日月曜日

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 フォーラムにもトピックが立っていたが,解決しなかった.