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 ぐらい対応しておいてほしい.