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