2020年7月25日土曜日

Perlの二次元配列の走査

よく忘れるのでメモ.

2020年6月26日金曜日

BSIM4 level 72におけるトランジスタ構造オプション

BSIM4 level 72 (BSIM-CMG)モデルは,一つのモデル式で様々な形状のトランジスタを表すことが可能である.近年のデバイス構造の進化によって様々なトランジスタ構造が提案されている.モデル式の中でトランジスタ構造を選択するオプションがあるので紹介する.

BULKMOD: default 1
BULK/SOIセレクターで,1だとBULK.

GEOMOD:default 1
ゲート構造セレクター.0はdouble gate, 1はtripple gate,2はquadruple gate,4はcylindrical gate

2020年6月19日金曜日

SiliconSmart のタイムステップ

SiliconSmart が呼び出すシミュレータのタイムステップは以下のパラメータで制御できる.

time_res_high
クリティカルな解析におけるシミュレーションタイムステップの最大値.高精度な過渡解析で必要となる最小の時間解像度となる.
デフォルト値:1e-12
レンジ:1e-15~1e-3

time_res_low
シミュレーションタイムステップの最大値.荒い時間分解の最大値となる.
デフォルト値:100e-12
レンジ:1e-15~1e-3

ちなみに,time_res_high のデフォルト値は 2016 はマニュアルの記載では 1e-10 なのだが,誤植です.Magma 発行の 2007 のマニュアルには 1e-12 が記載されていた.長年の疑問が解けた..

2020年6月16日火曜日

Libertyモデル(.lib)における,index_1とindex_2のxy軸対応

index_1がy軸,index_2が横軸.

fall_constraint(mpw){
index_1("0.1, 0.2, 0.3");
index_2("0.1, 0.2");
values( "1.10 1.11", \
"1.12 1.13" \
"1.14 1.15");
}

index_x,index_yとすればよかったのにね.開発当時多次元Matrixを想定していなかったのだろう.Liberty のフォーマットは結構レガシーなので,そういう問題が多々あったりする(エネルギーではなくPowerで計算していたり)

参考:Library Compiler User Guide, 2017

2020年6月15日月曜日

SiliconSmart で入力容量を評価するパラメータ:cin_bias_capacitance, set subtract_leakage

SiliconSmart で入力容量を評価する際,あまりに容量が小さいとシミュレーションが不正確になるので,SiliconSmart はドライバの出力に容量をつけてシミュレーションを行う.シミュレーション後入力容量の評価ができた後で,この容量は削除される.
pintype グループの cin_bias_capacitance パラメータで制御することができ,初期値は 10ff である.

set cin_bias_capacitance 10ff

SiliconSmart は入力容量を求めるために,入力ピンの電流を cin_low_threshold  から  cin_high_threshold の間で積分する.IO セルのようにリーク電流が大きいセルをキャラクタライズする場合,pintype パラメータの subtract_leakage 1に設定するとcin_low_threshold および cin_high_threshold のパラメータを無視するようになる.

set subtract_leakage 1

2020年6月9日火曜日

SiliconSmartでキャラクタライズする項目を限定する

SiliconSmartでキャラクタライズする項目を限定するには,characterizeコマンドに-matchオプションをつける.

characterize -match {setup*|hold*|delay*} cells

-match オプションでマッチしたシミュレーションのみが実行される.runtime ディレクトリを見るとどのようなシミュレーションが実施されるかわかる.代表的なのは以下.
Cin:入力容量評価
delay:遅延評価
energy:動的エネルギー評価
hold:ホールド時間評価
initialization:初期状態の各ノードの電圧評価
leakage_power:リーク電力評価
ncmpw:最小パルス幅評価
setup:セットアップ時間評価

2020年6月5日金曜日

Calibre xactview を使う

Calibre xACT で抽出した RC つきネットリストを GUI で解析するには,Calibre xActView を使う.デバイスの構造を示す fs3 ファイルと,fs3 ファイル内のネット番号を実際のレイアウトのネットへ対応させる pdb が必要.いずれもCalibre xACTを実行していれば抽出されているはず.

起動方法
% xactview -fs3 filename.fs3 -pdb filename.pdb

起動するとレイアウトが表示される.



図はASAP7でのインバータである.Finが表示されない理由は不明.

Net and shapes
ネットをハイライトすることができる.Window -> Net and Shapes からNet and shapesを呼び出せる.Net Name からネット名を選んで Add するとハイライトされる.


Device Highlight
抽出されたデバイスがどれであるかハイライトできる.Window -> Devices から Device Highlight を呼び出せる.Device ID からネット名を選んで Add するとハイライトされる.


わかりづらいけれど,インバータを構成するPMOSとNMOSが白くハイライトされている.ただ,表示される Device ID と SPICE ネットリストのインスタンスとの関係がわからない.消えてしまったダミーゲートもリストにあるらしく,いまいち使い方がわからない.

Coupling Capacitanceの表示

カップリング容量を表示できる.そのためにはCalibe xACTで抽出したカップリング容量を読み込む必要がある.
% xactview -fs3 filename.fs3 -pdb filename.pdb -fs3out filename.fs3.out -cfcap filename.cfcap

Window -> Devices から 3 種類の表示方法を選択できる.それぞれカップリング容量も表示してくれる.

Net Coupling
ネット間のカップリング容量と,どの Shape 間にカップリングが生じているかハイライトする.Shape は Virtuoso の Rectangle と同じと思えばよいようだ.



Net Coupling の例(色変えてます)

Shape Coupling
ある Shape と別の Shape 間のカップリング.

Layer Coupling
ある Layer における Shape と別の Shape 間のカップリング.


Calibre で抽出する寄生成分を選択する

正確には,出力時のフォーマットで抽出した結果を選択できる.
% calibre -xrc -fmt {-r|-c|-rc|-rcc|-adms|-all|-simple} rule.cal

オプションはそれぞれ以下の通り.
-r:抵抗のみ抽出
-c:容量のみ抽出
-rc:RCの分布定数回路として抽出.インダクタは抽出しない.容量はグラウンドとのカップリング容量としてみなす.
-rcc:RCの分布定数回路として抽出.インダクタは抽出しない.
-adms:ADMSフローで利用する.
-all:RCの分布定数回路として抽出.
-simple:寄生成分のないシンプルなネットリストを出力する.

StarRCはルールファイルに抽出成分を指定するのだが,Calibreはコマンドラインオプションだった.なお抽出時もオプションを指定できるのだが,抽出は全部抽出してファイル書き出し時に指定した方が楽?

2020年6月4日木曜日

Finesimで回路のタイプを指定し,精度と速度のトレードオフをとる(finesim_mode)

finesim_modeオプションを使い,対象回路のタイプを指定できる.

.option finesim_mode=mode

modeは以下の7つがある.

Mode Target
spicead High precision analog circuits.
spicehd Highly sensitive analog circuits.
spicemd General SPICE mode for all circuit types.
spicexd Mixed signal design/Extracted Post Layout.
prohd Large mixed signal design/leakage/power simulations.
promd Timing simulations.
proxd Functional verifications.


対象回路のタイプを指定すると,タイプに応じてサブオプションが
以下のように変化し,精度と速度と回路規模のトレードオフをとってくれる.
hspiceでいる runlvl に相当するようだ.

model speed spred partition qlevel loadmodel tunit tsc
spicead 4.5 0.5 0 0 2 N/A 0.01p lte2
spicehd 4 0.5 0 0 1 N/A 0.01p lte1
spicemd 4 1 0 0 1 N/A 0.1p lte1
spicexd 3 1 1 0 1 N/A 1p lte1
prohd 3 1 1 1 N/A 4 1p lte1
promd 2 2 2 1 N/A 2 1p lte1
proxd 2 3 3 1 N/A 1 1p lte1

finesim_model はトランジスタモデルの選択,
finesim_speed は計算のタイムステップ,イベント信号,Newton-Raphson法での公差の制御,
finesim_spred はRC縮約の程度,
finesim_partition は回路分割の積極度,
finesim_qlevel は電流計算時の収束強度の設定,
finesim_loadmodel は回路分割時の容量モデルの設定,
finesim_tunit は基本となる時間解像度の設定,
finesim_tsc は過渡解析時の打ち切り誤差の設定,
をそれぞれ設定する

サブサーキットごと,ローカルに指定する事も可能.
.option finesim_mode="pattern:mode"[:subckt | :instance | :node | :device]

例えばインスタンス X1 以下のデバイスを spicemd 設定にできる.
.option finesim_mode="X1.*:spicemd":device
インスタンス名でなく,サブサーキット名で指定することもできる.
.option finesim_mode="INV*:spicemd":device

.opset を使うと,finesim_modeに応じて使うオプションを個別に追加することもできる.
.opset (finesim_mode=mode) option_name[=option_value] ....

spicemd の時だけ,計算法をgearにすることができる.
.opset (finesim_mode=spicemd) finesim_method=gear

2020年5月22日金曜日

GPAの定義は大学によって違う

GPA(Grade Point Average)という成績の評価値があって,日本の大学で最近よく使われている.どの大学でもGPAと呼んでいるが,実は大学ごとに基準がグチャグチャでGPAでは大学間の成績評価できない.一般には1~4で評価するけれど,1~4.3とA+の+相当に0.3あてる大学もあれば,2~5と一般より+1高く評価される大学もある.
調査結果が以下のPDFで報告されている.
https://gakkai.univcoop.or.jp/pcc/2017/papers/pdf/pcc019.pdf

これでは平等に比較できないと思いきや,一応対策があって日本では文科省の「成績評価係数」の表で吸収しているようだ (それでも,例えば京大定義は実質+5点シフトでちょっとずるいのでは).
とある私立R大学はGPの定義が2~5なので,GPA4です!と言っても実は大したことなかったりする.逆に言うと,GPが底上げされている大学に進学して,一般的な定義の大学院に出願すると,うまくばれなければワンランク上と判断される,かもしれない.