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