2019年12月18日水曜日

VMware クライアントのカーソルずれをなおす

Windows 10 がホストの VMware でクライアント(Cent OS)のカーソルが 100 ピクセルぐらい右にずれるようになった.VMware は 15.0.4 です.
VMware のショートカットの[互換性]タブの[高DPI設定では画面のスケーリングを無効にする]にチェックを入れたら解決した.
高 DPI ではなく普通の DPI (96dpi) なのになぜおかしくなったのかは謎.

2019年11月29日金曜日

IC Compiler で preferrd direction 以外の配線を禁止する

IC Compiler は一般に設定された preferred direction に沿った配線トラックに従って配線を行うが,配線接続性を向上させるために許容される範囲で配線トラックからずれた配線(オフトラック配線)を行う事がある.
一方で,プロセスによっては特にリソグラフィの都合もあり,オフトラック配線や,特定の配線幅以外全くを許容しない場合がある(SADPの場合など).

IC Compiler にて preferred direction 以外の配線を禁止するためには,Astro (IC Compiler)のテクノロジファイルに nonPreferredRouteMode を有効する.
また,オフトラック配線,つまり配線の一部を太らせる事を禁止するためには, hasRectangleOnly を有効にする.

Layer "M1" {
...
   hasRectangleOnly=1
   nonPreferredRouteMode=1
}

これはレイヤーごとに設定できる.

2019年11月28日木曜日

IC Compiler で Preferred Direction を設定する

IC Compiler で配線の preferred Direction を設定するためには,set_preferred_routing_direction コマンドを使う

icc_shell>  set_preferred_routing_direction -layers {M3 M5 M7} -direction vertical

現在の preferred direction を調べるには report_preferred_direction を使う

icc_shell> report_preferred_direction

Milkyway で axgDefineWireTracks コマンドを使うことで preferred direction を設定するが,どうも Unit Cell 上の配線トラックの定義をしているらしく配置配線には反映されなかった.マクロレベルの配線トラックの定義は IC Compiler で行う必要があるらしい.

2019年11月24日日曜日

SKILL関数 でレイアウトの中心座標を動かす (leMoveCellViewOrigin)

SKILL関数でレイアウトを動かしたい,leMoveCellViewOriginコマンドを使うと,
レイアウトの中心座標を変えることができる.

leMoveCellViewOrigin(
d_cellViewId
l_point
)
=> t | nil

d_cellViewId は Cell View ID,l_point は次に中心座標としたい今の座標である.
例えば右に10 um,上に5 um動かす場合は以下のようにする.

leMoveCellViewOrigin( cellViewId -10:-5)

2019年11月20日水曜日

SKILL関数でセルを開け(dbOpenCellViewByType),所望の位置にインスタンスを貼る(dbCreateInstByMasterName)

特定のセルにインスタンスを貼る SKILL 関数を紹介する.そのためには(1)セルを開く,(2)インスタンスを貼る,の2つの関数が必要.

(1) セルを開く
dbOpenCellViewByType 関数を使う.

dbOpenCellViewByType(
{ gt_lib | nil }
t_cellName
lt_viewName
[ t_viewTypeName
[ t_mode
[ d_contextCellView ] ] ]
)
=> d_cellView / nil

gt_lib はライブラリ名,t_cellName はセル名,lt_viewName はView名, t_viewTypeName は ViewType,t_mode はセルを開くモードである.d_contextCellView はバージョンによっては必要らしいが不要っぽい.
モードはいくつかある.
r : 読み込み(read)
a : 追記(append)
w : 書き込み(write),すでにファイルがある場合は Virtual Memory に捨てられる.
他にもモードがあるが違いがよくわからない.

dbOpenCellViewByType 関数を実行すると,Cell View IDが帰ってくる.このCell View IDを使って後続の処理を行う.

(2)インスタンスを貼る
dbCreateInstByMasterName 関数を使う.

dbCreateInstByMasterName(
d_cellView
t_libName
t_cellName
t_viewName
t_instName
l_origin
t_orient
[ x_numInst ]
)

d_cellView は貼り付け先のCell View ID,t_libName は貼り付け元のライブラリ,t_cellName は貼り付け元のセル名,t_viewName は貼り付け元のView,t_instName はインスタンス名(不要ならnilに),l_origin は貼り付ける座標,t_orient は回転角度, x_numInst は貼り付け個数である.

例えば,設計後のレイアウトにスクライブラインを貼る SKILL は以下のようになる.

cellview = dbOpenCellViewByType("CHIP_TOP" "CHIP_TOP" "layout" "maskLayout" "a")
dbCreateInstByMasterName(cellview "SCRIBE2_5000x5000" "SCRIBE2_5000_5000" "layout" nil list(0 0) "R0" 1) 
cellview = dbOpenCellViewByType("CHIP_TOP" "CHIP_TOP" "layout")
dbSave(cellview)
dbClose(cellview)

よくわからないけれど,貼り付け後もう一度 dbOpenCellViewByType しないとうまくいかなかった.最後は dbSave でセーブ, dbClose でクローズ.

SKILL プログラムというよりは,API を叩いている感じである.マニュアルは Cadence Design Framework II SKILL Functions Reference です.

2019年11月19日火曜日

Milkywayでセルの配線可能性を評価する

Milkyway でライブラリ中のセルの配線可能性について評価するには,Check Wire Track を実行する.メインウィンドウのWire Tracks -> Check Pin on Track を選ぶ.
ライブラリ名を指定し,Unit Tileを指定すると,そのUnit Tileを利用するセルの配線可能性を評価し,配線がオフグリッドのものを列挙してくれる.(セル名とピン番号を列挙してくれる)

IC Compiler でマルチハイトセルを使う

IC Compiler でマルチハイトセルを使うメモ.ちゃんとしたセルを使わないと罠にはまるので注意.

(1) マルチハイトのセルを作成する.
このとき,最も下の行(横列)の電源の構造が,シングルハイトセルと同じにならなければいけない制約がある.つまり,普通のセルの電源レールが上から VDD/VSS の場合,マルチハイトセルは VSS/VDD/VSS となるべきで VDD/VSS/VDD ではいけない.

(2) マルチハイトの Unit Tile をテクノロジファイルに定義する.
一般に配置配線ツールはスタンダードセルの最小単位(Unit Tile)を定義し,そのグリッドにスタンダードセルを配置する.Astro (ICC)のテクノロジファイルにマルチハイトの Unit Tile の大きさを定義する.

/*シングルハイト*/
Tile "unit" {
width = 0.2
height = 1.8
}
/*マルチハイト*/
Tile "unit_2" {
width = 0.2
height = 3.6
}

(3) マルチハイトセルを認識させる
Set PR Boundaryを実行する.実行すると,セルの高さを認識し電源レールの順番を報告してくれる.

この後,Set Multiple Height PR Boundary (cmSetMultiHeightProperty)を実行する.
このとき以下のフィールドに以下のように記入する.
Library Name : ライブラリの名前
Cell Name : マルチハイトセルの名前,アスタリスクも使える.

LEF IN の時だけ必要で GDS IN の時は不要という説もあるらしい.また,マルチハイトセルでは複数の電源を持つこともできる.パワーゲーティング用だろうか.

(4) 配線トラックの定義
Unit Tile の配線トラックを定義する.Define Wire Tracks (axgDefineWireTracks) を使ってシングルハイトセル用のトラックを定義しているはずなので,それをマルチハイトセルにも実行する.この際,テクノロジファイルで定義した Unit Tile の名前をつけること.

;; シングルハイトセル
geOpenLib
setFormField "Open Library" "Library Name" "myLib"
formOK "Open Library"
axgDefineWireTracks
setFormField "Define Wire Track" "m1Dir" "horizontal"
setFormField "Define Wire Track" "m2Dir" "vertical"
...
formOK "Define Wire Track"
;; マルチハイトセル
geOpenLib
setFormField "Open Library" "Library Name" "myLib"
formOK "Open Library"
axgDefineWireTracks
setFormField "Define Wire Track" "Apply To" "specified"
setFormField "Define Wire Track" "User TileName" "unit_2"
setFormField "Define Wire Track" "m1Dir" "horizontal"
setFormField "Define Wire Track" "m2Dir" "vertical"
...
formOK "Define Wire Track"

(1) にはまった,というか,普通VDD/VSSで作ったらマルチハイトセルはVSS/VDD/VSSで作るのが直感的だと思うが,そうでない作り方をされてしまった.自由な発想だ.よい子のみんなは自然な設計をしようね.

2019年11月18日月曜日

Skill関数でレイアウトを回転する(dbTransformCellView)

SKILL 関数でレイアウトを回転するには dbTransformCellView を使う.レイアウトの拡大縮小もできる.

dbTransformCellView(
d_cellViewId
f_mag
f_angle
)

d_cellViewId は対象の CellViewID,f_mag は拡大縮小倍率,f_angle は回転角度(°)を指定する
dbOpenCellViewByType と組み合わせると,レイアウトを開いて回転して閉じる事ができる.

cellview= dbOpenCellViewByType("library" "cell" "layout" "maskLayout" "a")
dbTransformCellView(cellview 1.0 180.0)
dbSave(cellview)

f_mag に 1.0 を指定すると拡大しない事になる.

2019年11月12日火曜日

イオンカード100万円チャレンジ

イオン銀行の預金金利はイオン銀行およびクレジットカードの利用状況によって変化する.ゴールドカードを持つとスコアが増えるので預金金利が有利になる可能性が上がるが,住宅ローンの利用もしくはイオンカードの使用額が一定値(100万円/年というウワサ)を超えないといけないというウワサでなかなかハードルが高い.

今回,銀行の金利を上げるべくイオンカード100万円チャレンジしたところ,8ヶ月目計86万円の利用が確定した地点でインビテーションがきた.100万円より2割ぐらい低い.

2019年11月10日日曜日

Gnuplot で 3 次元プロットでフィッティングする(誤差項を追加する)

Gnuplot で3次元フィッティングを行おうとしたら,うまくフィッティングできず

Singular matrix in Invert_RtR
error during fit

と怒られてしまう.
3次元フィッティングでは x:y:z だけでなく誤差項 s も必要で,誤差項を与えないとフィッティングができない.誤差の評価をしていない場合は定数を与えればよい.

a=-0.5;b=-0.5;c=90;d=0.008
f(x,y)=a*x+b*y+c+x*y*d+1e-9
fit f(x,y) "hspice.mt0" using ($2*1000):($3*1000):($5*1000):(1) via a,b,c,d
splot "hspice.mt0" using ($2*1000):($3*1000):($5*1000) w p, f(x,y)

昔(3.6.x)は無くてもよかった気がするが,少なくとも3.7.x以降は必要らしい.

gnuplot のページ (Takeno Lab)
http://takeno.iee.niit.ac.jp/~foo/gp-jman/#Q11

2019年10月2日水曜日

SiliconSmartでシミュレーションが走らない時のメモ

SiliconSmart を使ってキャラクタライズさせるときに,タスクは生成されるもののシミュレーションが走らず10時間経って自動で落ちてしまう,CPU が動いている気配もない,とはまったのでメモ.

SiliconSmart の DP Managerを使っていると,runtime/cdpl の中にログが生成される.

runtime/cdpl/worker.W1.[マシン名].[数字].log

ここに個々の Worker の動作ログが格納されるので,動作不良のヒントになる.

今回は,/etc/sysconfig/network-scripts で実際割り当てているIPアドレスと,/etc/hosts で書いた自分自身の IP アドレスに不整合があり,存在しない IP アドレスにジョブを投げようとしておかしな事になっていた.標準出力に出してくれればよかったのだけれど,難しいか.


2019年9月16日月曜日

ASAP 7nm の ゲートピンを抽出する

ASAP 7nm ではゲートに pin (label) を打てるが, 提供ルールでは抽出ができない.LVS のルールに以下の通り追記すると抽出できるようになる.

GATE_PIN の宣言
TEXT LAYER GATE_PIN
PORT LAYER TEXT GATE_PIN

GATE_PIN の定義,数字は適当
LAYER GATE_PIN 70251
LAYER MAP 7 TEXTTYPE == 251 70251

GATE_PIN がどのオブジェクトにつながっているかを定義,ここでは MOS (Gate not GCut) にある text を pin として抽出する
ATTACH GATE_PIN GATE_1

オチ:LVS はこれでいいのだけれど,ルールが暗号化されているのでLPE ができない.だめじゃん.

2019年8月28日水曜日

CentOS7 で MACアドレスを偽装する

事情があって Linux マシンの MAC アドレスを偽装したい.
いろいろ方法があるっぽいが,自分の環境では,ip コマンドで MAC アドレスを偽装する必要があり,それを起動時に反映させるために udev にルールを書く必要があった.さらに,udev のルールと対応する様に network-scripts も書き換える必要があった.

ここでは仮に,接続プロファイル ifcfg_enp0 においてMACアドレスを書き換える.

(1)  /etc/udev/rules.d/70-persistent-ipoib.rules に以下のように追記
ACTION=="add", SUBSYSTEM=="net", ARRR{address}=="偽装するアドレス", ATTR{type}==1, KERNEL="eth*", NAME="ifcfg_enp0"

(2) /etc/sysconfig/network-scripts/ifcfg-enp0 を編集
HWADDR=偽装するアドレス
BOOTPROTO=static
IPADDR=xxx.xxx.xxx.xxx
PREFIX=24
GATEWAY=xxx.xxx.xxx.xxx
DNS1=xxx.xxx.xxx.xxx
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME=enp0
ONBOOT=yes

IPアドレスや設定などは適当に変えてください.

network-scripts だけではだめだったよ.macchanger は一瞬だけ MAC アドレスを変更できるのだがなぜか即戻ってしまって使えなかったよ.

参考:
Arch Wiki:Macアドレス偽装

2019年8月27日火曜日

Calibre LVS でショートを見つける (Layout Short Isolationを活用する)

Calibre LVS で特に電源系のショートを起こすと,ショートした電源すべてがハイライトされてしまいショート箇所を見つけづらい.

ラベルをクリックすると上記画像のように電源すべてがハイライトされてしまう.

RVE の Layout Shorts Isolation を使うと,ラベルから別のラベルまでのショートの経路を教えてくれる.RVE の Layout Shorts のタブを開き,下部の Layout Shorts Isolation のリストを見る.


これは,あるラベルがどの箇所のレイヤーを通じて別のラベルにつながるかという情報を表している.クリックするごとに該当箇所をハイライトしながら表示するので,一番上から一番下まで順番にクリックしていくとラベル間がつながる経路がハイライトされる.


上層の電源メッシュかだスタックドビアを経由してM1におり,再度スタックドビアを経由して上層のグラウンドにつながっている.スタックドビアを不適切な場所に置いたので電源とグラウンドがショートした事がわかる.

https://www.youtube.com/watch?v=VCskP4HhQFw
Mentor Graphics のYoutubeチャネルで紹介されていたよ.みんなでチャンネル登録しよう.

2019年8月26日月曜日

新しい Virtuoso が Cent OS 7で起動しない (lsb_releaseを入れる)

Cent OS 7.6 に Virtuoso (IC06.17) を入れるも起動しない.起動時に lsb_release を使って Linux のディストリビューションとバージョンを確認しようとするも lsb_release が入っていないので起動しないようだ.

% virtuoso &
[1] 129248
/cadence/IC06.17.709/tools.lnx86/bin/.preHostEnvCheck[15]: lsb_release: not found [No such file or directory]
/cadence/IC06.17.709/tools.lnx86/bin/.preHostEnvCheck[16]: lsb_release: not found [No such file or directory]
WARNING: HOST DOES NOT APPEAR TO BE A CADENCE SUPPORTED LINUX CONFIGURATION.
         For More Info,  Please Run '/tools.lnx86/bin/checkSysConf' .

% yum provides lsb_release --disablerepo=epel
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
redhat-lsb-core-4.1-27.el7.centos.1.i686 : LSB Core module support
リポジトリー        : base
一致          :
ファイル名    : /usr/bin/lsb_release

redhat-lsb-core-4.1-27.el7.centos.1.x86_64 : LSB Core module support
リポジトリー        : base
一致          :
ファイル名    : /usr/bin/lsb_release

% sudo yum -y install redhat-lsb-core-4.1-27.el7.centos.1.i686 redhat-lsb-core-4.1-27.el7.centos.1.x86_64

これで解決.

ちなみに,
WARNING: HOST DOES NOT APPEAR TO BE A CADENCE SUPPORTED LINUX CONFIGURATION.
         For More Info,  Please Run '/tools.lnx86/bin/checkSysConf' .
というワーニングは出続けるが,これは lsb_release が CentOS と申告する一方で
.preHostEnvCheck が期待するディストリビューションである RedHat,SUSE LINUX, Ubuntu に該当しないのでワーニングがでるようだ.RedHat Clone の中でメジャーな CentOS と Scientific Linux ぐらい対応しておいてほしい.

2019年8月25日日曜日

オシロスコープの低価格モデルとOEM元

Teledyne LeCroy → Siglent (中国)。2016年ぐらいまでは岩通だったのだけれど決別したそうだ。
Keysight → Rigol (中国)
Tektronix → 不明.自社で作っているとか,中国のメーカーにODMしてもらっているとか
Texio → GW Instek (台湾)

Keysightの X2000,X3000ぐらいまで Rigol が作っていると言う噂ですが,では Rigol のオシロスコープはそのまんま Keysight なのかと言われるとそうでもなくて,よくスペックを見たり触ってみるといろいろ違いはあるっぽい。Rigol はなんで入力インピーダンスが 1MOhm 固定なん?

回路系の人は Tektronix のオシロスコープを、RF などの無線系の人は Keysight のオシロスコープを好む傾向があるらしい。

2019年8月23日金曜日

IC Compilerの実行時間を一時的に早くする (set_fast_mode)

設計初期段階などで IC Compiler の実行速度を高速化したい場合は,set_fast_mode オプションを有効にする.

set_fast_mode true

本設定を有効にすると,以下のオプションをつけることと等価になる.
place_opt コマンドは -effort low 相当になり,ユーザーの指定する -effort オプションは無効化される.
さらに実行時間を削減したければ,-no_congestion オプションをつける.
clock_opt コマンドは無効化される.
route_opt コマンドは -effort low 相当になり,ユーザーの指定する -effort オプションは無効化される.

マニュアルによると,30%から50%ほど実行時間を短縮できるらしい.当たり前だが回路の品質はかなり悪化するので,フローが完成したら set_fast_mode オプションは削除したらよいだろう.

2019年8月22日木曜日

HSPICEのVariation Blockを無効にする (option ignore_variation_block)

Fab提供のPDKにおいてVariation Blockが利用されている場合,これまでの伝統的なばらつき生成(Agaussなど)とは異なるばらつきが生成されてしまう(PDKにもよるが,ローカルばらつきとグローバルばらつきを同時に生成したり,空間相関ばらつきを生成することができる).その場合,Variation Blockを使わないようにするために以下のオプションを定義する事で,これまでの伝統的なばらつきを生成できる.
Variation Blockに対するオプションなので,.variation 関数中に書く.

.variation
option ignore_variation_block=yes
.end_variation

Variation Blockに対する他のオプションも併記しておく.

・ローカルばらつきを生成しない
option ignore_local_variation=yes

・グローバルばらつきを生成しない
option ignore_global_variation=yes

・空間相関ばらつきを生成しない
option ignore_spatial_variation=yes

・配線ばらつきを生成しない
option interconnect_local_variation=yes

Variation Blockが使われた場合,*.mc0ファイルが生成され,その中にどのようなオプションが使われたか記載されているので,このファイルの中を確認する事で現在のオプションを知ることができる.

他にも,特定のインスタンスのみばらつきを与えたり,特定のサブサーキットにはばらつきを与えないなど,柔軟にばらつきを制御できるようだ.

2019年8月20日火曜日

MentorGraphicsのツール名とでできることの対応表

わからないのでまとめた.ただし半導体集積回路設計で使うものだけです.

・シミュレーション
0-in:機能検証
Analog FastSPICE Platform (AFS):FastSPICE
Questa Advance MS (ADMS/AMS):デジタル・アナログ・RF回路向けシミュレーションツール.Eldo (Eldo-classic, Eldo-RF)が入っている.
Modelsim:RTLシミュレーション,波形ビューア.
QuestaSim:Modelsimに機能検証を加えたもの,とあるが,古い情報かもしれない.今はもう無い?

・カスタムIC設計
Pyxis Layout:カスタム設計CAD

・PCB設計
BoardStation:PCB設計CAD
Xpedition:PCB設計CAD
PADS:PCB設計CAD

・検証
Calibre:物理検証ツール.以下のツール群が入っている.他にも機能があると思われるが把握していない.
Calibre DRC:デザインルールチェッカ
Calibre LVS:Layout Versus Schematic
Calibre xRC:ルールベースレイアウト抽出
Calibre xACT:電磁界解析ベースレイアウト抽出
Calibre RVE:DRCなどの結果を設計レイアウトルールへ反映させるインターフェース.ネットリストを視覚化する事もできるので,ネットリストビューアとしても便利.
Calibre DESIGNrev:GDSビューア,エディタ.各種物理検証ツールを呼び出す事もできる.
Calibre WORKbench:GDSビューア,エディタ.OPCや光学シミュレーションなどができる.

・高位合成
Catapult HLS:高位合成ツール
DK Design Suite:Hendel-Cによる高位合成ツール.Celoxicaを買収して手に入れた?

・論理合成
LeonardSpectrum:ASIC,FPGA向け論理合成ツール

Calibre,Modelsim以外は使ったことがないので大いに間違っているかもしれない.Wikipediaの方が正確かも.
https://ja.wikipedia.org/wiki/メンター・グラフィックス

Mentor Graphics というと,「Bjarne Stroustrup インタビュー (?)」を思い出してしまう (ネツゾウとの噂ですが).

2019年8月19日月曜日

HSPICE互換シミュレータ

HSPICE はゴールデンな回路シミュレータですが,みんなが使うのでライセンスがなくなりやすい.パンがなければお菓子を食べれば(ry と言われるけれど,じゃあどんなお菓子(選択肢)があるのか気になります. 代替になりうるシミュレータについて調べてみた.

・FineSim SPICE
旧Magma の SPICE / FastSPICE シミュレータ.HSPICE 向けの記述がほぼそのまま動きます.今は Synopsys が売り出しているから安心?
finesim  spice.sp -mode=spicemd -np [numCPU] -auto -spice

・Eldo
Mentor Graphics の SPICE シミュレータ.HSPICE 互換モードがある(-compat).欧州では結構メジャーらしい.
eldo -compat spice.sp

こちらの環境ではプロセスコーナーオプションの指定に難があり,ライブラリが多段になっていてなかでプロセスコーナーオプションの名前が変わる場合(例えば,最初の.libで"TT"オプションを指定し,呼び出した次の.libでは"tt_core"オプションになる)に追随できないようで,最終的に「そんなトランジスタモデル無いよ」と言われてエラーが出る.
トランジスタモデルが暗号化されているからかもしれない.
そもそもこの PDK の設計がクソという意見もある.

・Spectre
Cadence の SPICE シミュレータ.HSPICE 互換モードがあるのか調べてません.

・SmartSpice
Silvaco の SPICE シミュレータ.某所ではバイナリがなくなってしまったので未調査.ライセンスはまだ発行されているっぽい??

LTspice や Ngspice が商用 PDK で動くかどうかは知りません.計算結果もあまり変わらない Finesim でいいんじゃないかな.

2019年8月18日日曜日

HSPICE で .measure の結果を出力しない (.option measout)

HSPICE で .measure の結果を出力を制御するには .option measout を使う.

.option measout [=1 | 0]

1を指定すると結果を.mt# に出力し,0を指定すると.mt#を生成しない.
デフォルトは1.

どういった場面で使うのだろうか??

2019年8月17日土曜日

HSPICE のモンテカルロシミュレーションの結果の出力を制御する(.option mcbrief)

過去の HSPICE (2012あたり) でモンテカルロシミュレーションをすると,変動させたパラメータ,.measure の結果だけが出力されていた.最近の HSPICE はそれ以外にも大量のパラメータを.mt#に出力するので,.mt#のファイルサイズもとにかく大きくスクリプトでパースするのも大変である.

モンテカルロシミュレーションで出力する変数を制御するには,.option mcbrief オプションを利用する.

mcbrief=0 : .mt#,.lis にすべてのモンテカルロ変数を出力する.
mcbrief=1 : .mt#,.lis には .measure の結果のみ出力し,モンテカルロ変数を出力しない
mcbrief=2 : .mt#には .measure の結果のみ出力し,モンテカルロ変数を出力しない..lis には出力する.
mcbrief=3 : .lis には .measure の結果のみ出力し,モンテカルロ変数を出力しない..mt# には出力する.
mcbrief=4 :
.lis にはモンテカルロの結果を出力しない.
IRVの情報を.mt#に出力しない.
.mc#ファイルを出力する.
mcbrief=5 :
.lis にすべての情報を出力する.
IRV の情報を .mt# に出力する.
.mc# ファイルを出力する.
mcbrief=6 :
.lis にはモンテカルロの結果を出力しない.
IRV の情報を .mt# に出力しない.
.mc#,*.mpp#,*.annotate を出力しない.
ヒストグラム,QQ プロットなどを出力しない.
セルのキャラクタライズで利用することを想定しているらしい.

私は,mcbrief=1 にして .measure の結果だけを出力するように設定し,
agauss などでばらつかせた変量はあえて .measure param 構文を使って出力
する事で,ばらつかせた変量とそれによる回路特性の変動量を .mt# に出力するようにした.

IRVファイルってなんでしょう..option set_missing_value に関連するので
使われなかった乱数変数の事だろうか(未調査).

2019年8月14日水曜日

StarRCでカップリングキャパシタを報告する

Calibre xRCでできたので,StarRCでできるのか調べた.以下のコマンドでできる.

COUPLING_REPORT_FILE: file

fileで指定したファイルに出力される.レポートは,キャパシタの総容量(Ct)に対するカップリングキャパシタの容量(Cc)の比,カップリングキャパシタの容量の絶対値(Cc),Victim Net,Aggressor Netの順で表示される.

2019年8月13日火曜日

Calibre xRCでカップリングキャパシタを報告する

Calibre xRCでカップリングキャパシタを報告するには以下の命令を使う.
PEX REPORT COUPLING CAPACITANCE filename
[NUMBER count]
[SPLIT_NET]
[THRESHOLD value]
[LAYOUT | SOURCE]

filename に指定するファイルにカップリングキャパシタの情報を出力できる.
以下はオプション
NUMBER count:カップリングキャパシタの数を指定する.デフォルトは1000
SPLIT_NET:出力を制御できる.宣言時Net Bへのレポートが別の行に出力される.
THRESHOLD value:value以下の容量を出力する.
LAYOUT | SOURCE:配線名をLayoutから選択する,もしくはソースネットから選択する

2019年8月6日火曜日

Calibre xACT 3Dを使ってRC抽出を行う

Calibre には RC 抽出の方法が2つあり,モデルベースである xRC と,フィールドソルバである xACT 3Dがある.後者を使ってRC抽出をやってみる.Calibreのルールファイルは xRC と同一でよく,以下のようにコマンドを実行すればよい.
% calibre -lvs -hier -spice svdb/circuit.sp -nowait circuit.svrf > circuit.log 
% calibre -xact -3d -pdb -rcc circuit.cal >> circuit.log 
% calibre -xact -fmt circuit.cal >> circuit.log 

マニュアルには
% calibre -xact -3d -rcc circuit.cal
と書いてあったが,-pdb オプションをつけないとPhysical Database (pdb) が生成されず3行目のコマンド実行に失敗する.xRC と xACT 3Dは違うのかというと,xACT 3Dは特に細かいカップリングキャパシタが報告されるようになった.

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)のファン音はまだまともなんだけれどな.

2019年4月12日金曜日

【・・dynabook R63のキーボードを交換する

4年使った【・・dynabook R63のキーボードが摩耗し,ASDFのキーがぐらぐらし,ついにはAのキートップがはがれるようになったのでキーボードモジュールを交換した.昔はYahoo Auctionとかで買っていたけれど,今はAmazonでも売っている.いずれにせよどういうルートでパーツ売られているのかわからないけれど.(横流し品ではないよね?)

R63は2種類キーボードがあり,ただのキーボード(3000円弱)とアキュポイントとバックライト付きキーボード(5000円弱)がある.手持ちのR63は後者が初期装備なので後者を買った.アキュポイント付きキーボードはキーボードのマトリックス信号とアキュポイントの信号が同じフラットケーブルを通っているので,両社の互換性については不明.
(アキュポイントなしのマシンにアキュポイント付きキーボードをつけて動くかわからないし,アキュポイントがないマシンはキーボード下部のマウスクリックボタンもないので使い勝手は悪そうである)



買ったキーボードモジュール.


裏側.左側の細いケーブルがバックライト,真ん中の太いのがキーボードとアキュポイント.キーボードを外すためには,本体の下側のカバーを外し,バッテリーを外し,今ついているキーボードのフラットケーブルをすべて外す.

次に,最近のdynabookはキーボードを両面テープで接着しているので力づくではずす.本体フレームの後ろから押し出してあげるとよい.強力すぎて本体のフレームが壊れるかと思った.取り外したキーボードはバキバキになります.新しいキーボードは市販の両面テープで接着する.


フラットケーブル拡大の図(上下逆さ).写真左の太めの信号がアキュポイントで,この信号が適切にはまらないとアキュポイントが暴走して使い物にならない.何度かさしなおすことを想定し,調節してちゃんと動くことを確認してからカバーをねじ止めするのがおすすめです.私の場合,差し込んで,バッテリーと蓋をねじ止めて,起動したらアキュポイントが暴走していて,再度開封して差し込みなおして,ねじ止めて(以下ループ)を5回以上繰り返した 囧rz


換装後.ちゃんとキーボード打てるようになりました.新品のキーボードはしっとりしていてよい.ただ,Gのキーがちょっと傾いている気がするし,アキュポイントがちょっと暴走気味.やっぱりQCで外れたものを横流(ry
心配なら聖地チチブデンキで買おう!

2019年4月5日金曜日

とある助教の助教公募戦線記録

これまでに出した公募の結果が一段落したのでまとめてみる.検討したけれど出していないものもあげます.

スペック
・男
・集積回路の物理設計よりのCAD屋.回路設計もするよ
・応募時の業績:論文誌4本,レター1本,国際会議10本,その他
・任期5年再任有りが再任無しになっていたので仕方なく公募戦線へ再挑戦することに
(再任については私の勘違いでは?という話もあるとか)

こだわったところ
・集積回路設計に関わりたい
・PIは,私が知っている教員か,外部資金などを取っている教員を希望した.

2018/8 国立大
・任期付き助教(5年,再任無し)
・研究室の指定有り
・分野は少し違う.分野はこちらが合わせる事はできそう
・応募後,8週間ほどでお祈りメール

2018/8 公立大
・任期付き助教(5年,再任有りだったはず)
・研究室の指定有り
・先生の分野と自分の分野は同じ
・悩んだけれど,知らない先生だったのでやめてしまった
・応募者がいなかったらしく,再公募しているようだ

2018/? 公立大
・任期付き助教(5年,再任有りだったはず)
・研究分野の指定有り
・分野は少し違う.研究分野はこちらが合わせる事はできそう
・学会でPIの先生に話をしたら「アナログ回路の人が欲しいんだよね」と言われたので応募を止めた

2018/10 私立大
・任期付き助教(5年,審査後任期無し)
・研究室の指定あり
・分野は近いようで少し違う.研究分野は合わせる事はできそう
・応募後,即連絡が来て即面接,即内定.PIに採用権限があるためらしい

感想
・集積回路系といっても分野が広いので,デジタル回路向けCAD屋さんにフィットする公募は少なく感じた
・IoTとか,デバイスを作る側ではなく使う側の公募は多い?
・もっと多くの国内学会に参加しておくべきだった.知らない先生が意外と多い
・JRecinの過去ログは消えるのでPDFは保存しておくべき
・助教から助教なのは察してください

前回の公募戦線記録はこちら:とある博士学生の助教公募戦線記録

2019年4月4日木曜日

VMware上のCent OS7に固定IPを割り当てる

Windows10をホストOS,Cent OS7をゲストOSとして,ゲストOSに固定IPを割り当てたい.いろいろやり方があって混乱したけれど,結果的には以下の記事の情報が役に立った.

VMWARE PLAYER の NAT ネットワークを極める
http://hetarena.com/archives/2343

ポイントは,Vmware上のNATネットワークでは,
ゲストOSからみて
ホスト:192.168.xxx.1
ゲートウェイ:192.168.xxx.2
になる.固定IPにしたければ,(1)DHCPの範囲外で性的に割り当てるが,ホストOS上で動くDHCPサービスがゲストOSに固定IPを割り当てるようにすればよい.

ゲストのCent OSでは,まず自分のMACアドレスを探す.
% ip a
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
(略)
2: ens33: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:35:e2:ea brd ff:ff:ff:ff:ff:ff
    inet 192.168.xxx.128/24 brd 192.168.xxx.255 scope global noprefixroute dynamic ens33
(略)


この地点ではDHCPで192.168.xxx.128が割り当たっている.xxxはVMwareインストール時に一意に決まるそう.
ens33のlink/etherに続く12文字がMACアドレス.これをホストOSのDHCPサービスの設定に書き込む.

NATではホストOSはVMnet8で通信するのでそこを書き換える.
開くファイル:C:\ProgramData\VMware\vmnetdhcp.conf
host VMnet8 {
     hardware ethernet 00:0c:29:35:e2:ea;
     fixed-address 192.168.xxx.50;
 }
のように書き換える.ここでは固定IPとして 192.168.xxx.50を割り当てる.なお,システムによっては直接編集ができないようなので,私はいったんデスクトップにファイルをコピーしたうえで編集し,C:\ProgramData\VMware\vmnetdhcp.confを上書き保存した.

設定を反映させる.

ホストOSのDHCPサービスを再起動.
[タスクマネージャ]→(必要に応じて詳細設定表示)→[サービス]→[VMnetDHCP]を右クリック→[再起動]

ゲストOSのネットワークを再起動
% systemctl restart network

IPアドレスを確認
% ip a
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
(略)2: ens33: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:35:e2:ea brd ff:ff:ff:ff:ff:ff
    inet 192.168.xxx.50/24 brd 192.168.249.255 scope global noprefixroute dynamic ens33
(略)

これでIPアドレスを固定できた.

ここまで記事を書いて気が付いたが,昔全く同じ記事を書いていた.車輪の再発明をしてしもうたてへぺろ(少しだけ情報多いからそのまま載せます)


2019年3月10日日曜日

SiliconSmart の実況状況をGUI表示する(DP Manager)

SiliconSmartで分散コンピューティングしているときの各Workerの状況をGUIで確認するにはDP Managerを使う事ができる.

~sis_install_dir/cpdl_runtime/bin/dpmanager


緑は処理完了,赤は未了を示す.

2019年3月4日月曜日

FineSimで波形ファイルのフォーマットを指定する

FineSimで波形ファイルのフォーマットを指定するには以下の設定を加える.

.option finesim_output=[fsdb|wdf|psf|tr0|utf|psfascii|none|out]  

デフォルトではfsdbになる.noneを設定すると,.probeや.option postに関係する設定を全て無視するそうだ.

2019年3月3日日曜日

FineSimでfsdbのバージョンを指定する

FineSim M-2017.03で波形ファイルを出力するとデフォルトでfsdbのversion 5.5になる.Custom Waveview の2016.06-SP2では,fsdbのバージョンは5.4までしかサポートしておらず波形を読めない.

FineSimの出力するfsdbのバージョンを指定するには以下のオプションを使う.

.option finesim_fsdb_version=[5.4|5.5] 

FineSim M-2017.03ではfsdbの5.3以下のバージョンはサポートされないらしい.悲しい.

2019年2月28日木曜日

雇用者から見た雇い止めへの注意点

プロジェクトの予算が無くなって契約期間を満了せずに雇い止めになる可能性がある時は,あらかじめ財源がないから雇い止めになるなど不更新条項などを付け,互いに理解・認識のうえ署名すべき.(近畿コカコールボトリング事件)

各更新において,満期まで更新可能な事を労働者に期待させるような言動をする事はNG.(カンタス航空事件)

予算について実質的なんの権限もない学科長とかが「成績も良いし契約満了までいけるんじゃないか」とか適当に言うのもNG.

2019年1月18日金曜日

DesignCompilerにおける電力を考慮した論理合成

compileコマンドを使うとき
set_max_dynamic_power [val]
set_max_leakage_power [val]
compile -power_effort [none|low|medium|high]

compile_ultraコマンドを使うとき
set_leakage_optimization true
set_dynamic_optimization true
compile_ultra

compile_ultraはデフォルトで-area_high_effort_scriptオプションが
ついてしまい取り消せないので,上記の2つのコマンドの場合,compile -power_effort highの方が電力は減るっぽい(dynamicが2/3ぐらいになった).

2019年1月17日木曜日

Design Compilerの論理合成のコスト関数

Design Compilerで論理合成を行うとき,あるコスト関数を仮定してそれを最小化するように論理合成を行う.
コスト関数は以下の順になっており,太字のパラメータはset_cost_priorityコマンドで順番を変えられる.制約は,デザインルールと最適化係数の3種類に分かれている.

優先度(上ほど高い)制約の種類
connection classes Design rule cost
multiple_port_net_cost Design rule cost
min_capacitance Design rule constraint
max_transition Design rule constraint
max_fanout Design rule constraint
max_capacitance Design rule constraint
cell_degradation Design rule constraint
max_delay Optimization constraint
min_delay Optimization constraint
power Optimization constraint
area Optimization constraint
cell count

仮に最大遅延制約を最優先するには,set_cost_priorityコマンドで以下のように指定する.
set_cost_priority -delay
仮に,最大遅延制約,最小遅延制約の順に制約を優先するには以下のように指定する.
set_cost_priority {max_delay min_delay}

論理合成時にデザインルールを無視した合成を行うには,compileコマンドもしくはcompile_ultraコマンドに-no_design_ruleオプションをつける.論理合成を複数行うときにデザインルールについてのみ修正するには-only_design_ruleオプションを付ける.

2019年1月5日土曜日

Virtuoso Dynamic DRC (DRD)を使う.DRDのルールを上書きする(techSetSpacingRule)

Virtuoso Dynamic DRC (DRD)を使うと,レイアウト編集中にオンデマンドにDRCをかけることができる.有効にするには,Layout Editingのアイコンから選ぶか,Options -> DRD EditからInteractive Modeを変える.


モードは3つある.
DRD Notify:DRDを有効にし,違反がある場合は警告をだす.
DRD Enforce:DRDを有効にし,違反があるレイアウトを許さない.
DRD Off:DRDを無効にする.

DRD のルールは Techfile に書かれている( constraintGroup フィールドに書かれている).このルールを変更するには Techfile を書き換える必要があるが,Techfile の書き換えは設計資産の再利用などに問題が発生する可能性がある.またライブラリ生成時に Techfile を Attach するように指示されている場合は Techfile の書き換えができない. SKILL を利用して制約を上書きするには techSetSpacingRule 関数を使う.

techSetSpacingRule(
d_techFileID
t_rule
g_value
ltx_layer1
[ ltx_layer2 ]
)

引数はそれぞれ,
d_techFileID :対象のライブラリID
t_rule:ルール名.指定可能なルールはそれぞれ以下の通り.
minNotch, minSpacing, minWidth, defaultWidth, maxWidth, sameNet
g_value:スペーシングルールの値.整数もしくは小数.
ltx_layer1:適用するレイヤー名
[ ltx_layer2 ] :(Option)適用する2つめのレイヤー名

d_techFileID は techGetTechFile 関数と ddGetObj 関数を使うとよい.

最終的には以下のように組合わせる.

techFileID=techGetTechFile(ddGetObj("libName"))
techSetSpacingRule(techFileID "minSpacing" 0.1 "Metal1")

ある PDK では Techfile のスペーシングルールが DFM ルールの 0.11 um なのだが,


上記コマンドを実行すれば,以下のようにルールを 0.10 um に変えられる.


minSpacing や minWidth などのルールは,Virtuoso Space-Based Router (VSR)で必須のルールなので,VSRを使うには上記関数で設定してあげれば良さそう(未検証).

On-demand-DRCは,本当はCalibre RealTimeを使えればいいのだけれどなー.

2019年1月3日木曜日

Virtuosoの画面サイズをSKILLコマンドで制御する(hiResizeWindow)

windowid=hiGetCurrentWindow()
hiResizeWindow(windowid list(x1:y1 x2:y2))

x1:y1は左下,x2:y2は右上の座標.
x1=0にするとウィンドウマネージャのバナー分だけ上にずれるので,x1=1にしてやるとずれなくなる.(環境依存?)

2019/07/27追記
これを応用すると,WindowsでいうWindowsキー+上下左右カーソルキーに相当するコマンドを実行できます.超便利.