2019年8月5日月曜日

Calibre xRC でRCの縮約を行う

Calibre xRC で RC 縮約を行うには以下のオプションを使う

・Analog回路向け
PEX REDUCE ANALOG {NO | YES [DELAY_ERROR delay] [NOISE_ERROR noise]}
NO (default): 縮約を行わない
YES:RC 縮約を行う.以下のオプションがある
DELAY error:時間遅延の閾値.単位はs.デフォルトは0.5ps
NOISE_ERROR noise:エラーの閾値.単位は比.デフォルトは0.01(1%)

PEX REDUCE ANALOG YES を宣言すると,PEX REDUCE TICER PEX REDUCE CC が有効になる.
PEX REDUCE TICER は指定するシミュレーション速度で差が出ないように縮約する命令(PEX REDUCE DISTRIBUTED と同じ),
PEX REDUCE CC はカップリングキャパシタの縮約する命令.
PEX REDUCE ANALOG と後述の PEX REDUCE DIGITAL は同時に宣言できない.

・Digital回路向け
PEX REDUCE DIGITAL {NO | YES [DELAY_ERROR delay] [NOISE_ERROR noise]}
NO (default): 縮約を行わない
YES:RC 縮約を行う.以下のオプションがある
DELAY error:時間遅延の閾値.単位はs.デフォルトは0.5ps
NOISE_ERROR noise:エラーの閾値.単位は比.デフォルトは0.01(1%)

2019年8月3日土曜日

IC Compilerで矩形以外のフロアプランを使う(initialize_rectilinear_block)

IC Compiler でフロアプランを作成するとき,create_floorplan コマンドを使うが,これは長方形のフロアプランしか作成できない.長方形以外のフロアプランを作るときは initialize_rectilinear_block コマンドを使う.

initialize_rectilinear_block
[-bottom_io2core distance]
[-control_type ratio | length]
[-core_side_dim { side_a side_b side_c side_d [side_e side_f]}]
[-core_utilization ratio_val]
[-flip_first_row]
[-keep_io_place]
[-keep_macro_place]
[-keep_std_cell_place]
[-left_io2core distance]
[-no_double_back]
[-orientation N | W | S | E ]
[-right_io2core distance]
[-row_core_ratio ratio_val]
[-shape L | T | U | X]
[-start_first_row]
[-top_io2core distance]
[-use_current_boundary]
[-use_vertical_row]

例えばL字型のフロアプランであれば,以下のようにする.

initialize_rectilinear_block
-control_type length
-core_side_dim { side_a side_b side_c side_d }
-shape L
length オプションにした場合, side_a side_b side_c side_d は長さ(um)を指定する.ratio オプションにした場合,side_a side_b side_c side_d は4辺の比率となり -core_utilization で指定した Utilization を満たす様にサイズを自動的に調節する.
形は,-shape オプションでL字,T字,U字,X字が選択できる.頂点の数は形に寄って変わる.


T字,U字,X字の場合は以下のように指定する.
-core_side_dim { side_a side_b side_c side_d  side_e side_f}

回転角は -orientation オプションで N (0°),W(90°), S(180°),E(270°)と選択できる.

H型などさらに複雑なフロアプランは,create_boundary コマンドで生成できる.

詳細はマニュアル(IC Compiler Design Planning User Guide)…と思いきや,マニュアルには「詳細は ICC で man を開くように」と書いてある.


2019年8月1日木曜日

ゲートレベルシミュレーションにおけるFFのリセット

リセットのない FF のゲートレベルシミュレーションを行うと,初期値がないので X が伝搬してしまう.Verilog HDL では force / release を使い値の強制設定と解除が可能であるが,うまく force / release しないと X の伝搬を防ぐ事ができない.特に実負荷シミュレーションではクロックスキューもあるので,release のタイミングと実際にクロックが入るタイミングがずれる問題もある.

普通に force / release してもうまくいかない時の対策
・複数サイクルにかけて force を入れる
・FF のデータ入力だけでなく出力端子にも force を入れる

以下のようなPerlスクリプトを書いて,DATA端子とQ端子を探し force / release していました.

force / release の使い方はこちら. http://kawaiihaseigi.blogspot.com/2017/07/verilog-force.html

2019年7月27日土曜日

IC Compilerにおけるderive_pg_connectionの順番

IC Compiler で電源を定義し回路(スタセル,マクロ)の電源ポートと接続するために
 derive_pg_connection コマンドを利用する.多電源回路では複数回コマンドを呼び出す必要があるが,スタセルの電源に接続したい電源名を最初に宣言する必要がある.

例えばVDDCとVDDMがあり,スタセルのVDDにVDDC配線を接続する場合は,
derive_pg_connection -power_net {VDDC} -power_pin {VDD} -ground_net {VSS} -ground_pin {VSS}
derive_pg_connection -power_net {VDDM}
とする.
もし
derive_pg_connection -power_net {VDDC}
derive_pg_connection -power_net {VDDM} -power_pin {VDD} -ground_net {VSS} -ground_pin {VSS}
と逆にすると,preroute_standard_cells コマンドでスタセルの電源レールを引いた時にVDDMとVSSのレールができてしまう.

preroute_standard_cells-net オプションをつけずに実行すると,デフォルトで電源とグラウンドのネットを使うとあるので,どうも一番最初に宣言した -power_net を回路の電源と認識するようだ.preroute_standard_cells コマンドで電源ネットを明示的に指定するためには以下のようにすれば良さそうだが未検証
preroute_standard_cells -net {VDDC VSS}

2019年7月23日火曜日

IC Compilerでホールド違反を回避できない時に気をつける事

(1) ホールド違反を回避しながら再配線する
set_fix_hold [all_clocks]
route_opt -incremental -only_hold_time

(2) focal_optを実行する
focal_opt -hold_endpoints all -register_to_register

focal_optはトポロジベースのポストルート最適化コマンドで,セットアップ違反,ホールド違反,DRC 違反などを回避可能だそうだ.ポストルート最適化なので route_opt のあとに実行する.

(3) コア面積の余裕を確認する
コア面積に十分余裕がないとホールド違反回避バッファを入れられないので,いくら
route_opt -incremental -only_hold_time
を実行してもホールド違反を回避できない.

create_floorplan で Utilization が 0.8 だから大丈夫?そんなことはなくて,TAP セル,Endcap セル,Tie セルなどがどんどん入るので余裕はない.さらにTiming Driven P&R では駆動力が足りない場合はより大きなセルに入れ替えたりパスを分割(path-spliting)して駆動力を確保するのでますます余裕はなくなる.

ある回路では,初期の Utilization が54.8%だったのに,配置配線後の実際のUtilizationは87.1%になっていた.

Utilizationは以下のコマンドで評価できる.
report_placement_utilization

2019年7月5日金曜日

HSPICEにおける非収束(Non-Convergent)の原因と対策

マニュアルを訳しただけです.

HSPICEでなんで収束しないの?そもそも収束って何?と言う人はSPICEの動作原理について勉強するといいかも.

[原因]
#0 回路構造の確認
回路にフローティングが存在すると,その点の電圧を決定できないために非収束となる.すべてのノードがなんらかしらの素子を経由しながら電源もしくはグラウンドに接続されている事を確認する.

#1 初期値の設定
安定状態が複数ある回路の場合,初期値を自動的に決められない.特にリングオシレータやフリップフロップは初期値を一意に決められない.その場合,.ic コマンド(initial condition)を使い初期値を与える必要がある.

#2 不適切なモデルパラメータの導入
物理モデルパラメータに沿わないパラメータを導入した結果,ソースドレイン電流や容量特製に不連続が発生する事がある.これはinitial timestep too smallエラーを引き起こす.

#3 PN結合の高抵抗
BJTやMOSFETのPN結合は高いオフ抵抗を持つ.このオフ抵抗が非収束の原因となる.HSPICEでは,.option gmindc .option gminを設定する事で,これらの素子に自動的に抵抗を挿入し収束可能性を向上する.

[対策]
#1 すべてのオプションを消して,HSPICEの標準の収束アルゴリズムを動かしてみる.

#2 .nodesetや.icを用いて初期値を適切に与える.

#3 デジタル回路であるなら,シンボリック動作点解析アルゴリズムを利用する.
.option symb=1

#4 ITL1とITL2を200から500の範囲で増やす.
.option ITL1=300 ITL2=300

#5 収束アルゴリズムを変える.HSPICEは標準でDCON=1,2とアルゴリズムを変え,
最終的にconverge=1を選ぶ.これでも収束しない場合設定で変えてやる.また
gmindcの値を小さくする(ただし1e-9より小さくしてはいけない)
.option converge=2 gmindc=1e-11
.option converge=3 gmindc=1e-11

#6 2 DC バイアスポイントによる方法もあるが,よくわからなかった.非収束の原因となるデバイスをオフにしてバイアスポイントを求め,次にこの素子をオンにしてバイアスポイントを求めるのだろうか.

2019年7月1日月曜日

HSPICEの性能を上げる10のtips

SynopsysのBlogを直訳したものです.
10 tips to improve performance using HSPICE

#1 HSPICEの収束性を上げるためにrun levelを適切に設定する.
.option runlvl = 1|2|3|4|5|6

#2 High Performance Parallel(HPP)オプションを使い,マルチスレッドで高速化する.
% hspice [file].sp -mt [numCPU] -hpp

あまりたくさんのCPUを指定しても速くならない.2~4CPU程度

#3 分散コンピューティング(Distributed Computing)オプションを使い,マルチマシンで高速化する
% hspice [file].sp -dp [numCPU]

分散コンピューティングのための事前に設定が必要.

#4 ポストレイアウトシミュレーションの場合, RC 縮約を使う.
.option sim_la

#5 ワイルドカードを使ってすべてのノードの電圧・電流を見るのではなく,見たいノードを指定する.
.probe tran v(xi.*)  i(xi.*)
× .probe tran v(*)  i(*)

#6 ポートの電流の向きを指定する.
.probe tran isub(xinv.vdd) isub(xinv.v*)
×  .probe tran isub(*)

#7 .alterを使っている場合,回路構造の解析を省略する.
.option altcc altchk

#8 回路要素のチェックや回路構造のチェックを飛ばしシミュレーション時間を短くする
.option notop noelck

#9 回路を変更していない場合,過去のシミュレーション結果を再利用する事でシミュレーション時間を短縮する
% hspice -i [file].tr0 -meas [meas file]

[meas file]は,HSPICEの構文のうち.measureなどの測定命令,.paramなどの設定命令のみを抜き出したもの

#10 .measureがすべて終了したらシミュレーションを終了する.
.option autostop

2019年4月18日木曜日

Windows10ホスト上のVMware Workstation 15 PlayerのゲストCentOS7.2とフォルダを共有する

すんなりいかなかったのでメモ.解決策は以下のリンクの通りになった.
Solved: Shared folders not available on Linux guests after upgrading to VMWare Workstation 15


ホスト側:
[管理]→[仮想マシン設定]→[オプションタブ]→[共有フォルダ]から,ホスト側の共有フォルダの場所を指定する.
これは今まで通り

ゲスト側:
yumでopen-vm-toolsをインストール
% yum install open-vm-tools
マウントポイント/mnt/hgfsを作る
% cd /mnt
% mkdir hgfs
手動でマウントしてみる.
% vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other
/mnt/hgfs/[ホストOSで設定した共有フォルダ名]/
にアクセスしてみて,読み書きできればOK

手動でマウントできたら,/ets/fstabに以下の構文を書いてあげると次回以降自動でマウントする.
% echo ".host:/ /mnt/hgfs fuse.vmhgfs-fuse allow_other 0 0" >> /etc/fstab

あとは必要に応じてスタティックリンクを作ればOK
% cd 
% ln -s /mnt/hgfs/[ホストOSで設定した共有フォルダ名]/ SharedFolder

ゲストOSをサスペンド・レジュームするとマウントができなくなると書かれていたが,こちらではそんなことはなさそう.ただしサスペンド前のディレクトリスタックは無効になっているみたい.

起動に時間がかかるようになった.mountしようとして時間かかっているのだろうか.

2019年4月13日土曜日

Gmailで別のGmail(G-suite)のメールを読み書きする

(本当はもっとスマートなやり方がある気がするが)
新しい職場のメール環境がG-Suite(以下Gmail2)で,二段階認証だったりなんなりでメールがめんどくさい.そもそもメーラーを使い分けたくないので,使い慣れたGmail(Gmail1)でGmail2のメールを読み書きしたい.

(1) アプリケーションを使ってGmailで送受信するためのアプリパスワードを作る.

Gmail2のほうは二段階認証なのだがアプリ側にそのような対応はできないので,アプリ専用のパスワードを作る.Gmail2のほうのGoogleアカウントへログインし,[セキュリティ]→[アプリパスワード]を作成する.

(2) 送信側:Gmail2のSMTPサーバーを使ってGmail1を送信する.

Gmail1の歯車マークから[設定]→[アカウントとインポート]→[名前]→[他のメールアドレスを追加]を選ぶ.
最初の画面でメールに記載される名前とGmail2のアドレスを入力する.
Gmail2のアドレスを入力するとそこからサーバーの情報を読み取ってくれるので,適切なSMTPサーバー/ポートになっていることを確認して,アプリパスワードを入力する.
必要に応じてデフォルトを変えたり返信モードを設定すればOK.

(3) 受信側:Gmail2のメールをPOPでGmail1に受信する.

Gmail2の歯車マーク→[メール転送とPOP/IMAP]から,[すべてのメールでPOPを有効にする]にチェックする.
この時,「Gmail2のメールを受信トレイに残す」としておくと,メールは受信トレイにたまり続ける.
Gmail1の歯車マークから[設定]→[アカウントとインポート]→[他のアカウントでメールを確認する]を選ぶ.
Gmail2のアドレスを入力するとそこからサーバーの情報を読み取ってくれるので,POP(しか選べなかった)を選び,適切なPOPサーバー/ポートになっていることを確認してアプリパスワードを入力する.

あとは適当なアドレスと通信を確認して,以下のように通信ができていればOK.
[適当なアドレス]→[Gmail2]→POP→[Gmail1]
[Gmail1上でGmail2として返信]→IMAP→[Gmail2]→[適当なアドレス]


【・・dynabook R63のファンに注油する,CPUクーラーのグリスを塗る

4年使ったdynabookさん,ファンから軸音がガリガリするようになり,3.5インチのHDDでもつんでるんか?ってぐらい異音がする.あまりにもつらいので注油することにした.

ねじを外してPCの底を開ける.左上にCPUファンがあるので,CPUファンを止めている2か所のねじをはずす.CPUファンとヒートパイプは分かれるので,ファンだけ外すのであればヒートパイプは外す必要はない.ヒートパイプを外すには,CPU周辺の2か所のねじをはずす.


CPUファンは小さいねじと小さい爪で固定されているので,ファンの外装を止める小さいねじを外す(上の写真では外してしまっている).


ファンを引き抜くと軸受けがみえるので,オイルを少量添付する.


ファンのシャフトが入る真ん中の黄色い穴に少量だけ添付した.


自転車で使っているワコーのメンテルーブを少量吹き付けた.




CPUグリスもカピカピになっていたので塗りなおした.Arctic Sliver 5という自作PCで使っているやつです.

元の通り組み立てたら終わり.軸音も解消され元の通りになった.最初CPU温度が無負荷で80℃を超えビビったけれど,グリスを塗りなおしヒートパイプのねじを増し閉めしたら45℃ぐらいに改善された.
このPC(R63/PS)は買った時からファンが異様にうるさくてサポートに見てもらったものの「異常なし」で帰ってきたのだが,注油してもファン音は改善されなかった.後継機(RZ63/AS)のファン音はまだまともなんだけれどな.