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年6月4日木曜日
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が底上げされている大学に進学して,一般的な定義の大学院に出願すると,うまくばれなければワンランク上と判断される,かもしれない.
調査結果が以下のPDFで報告されている.
https://gakkai.univcoop.or.jp/pcc/2017/papers/pdf/pcc019.pdf
これでは平等に比較できないと思いきや,一応対策があって日本では文科省の「成績評価係数」の表で吸収しているようだ (それでも,例えば京大定義は実質+5点シフトでちょっとずるいのでは).
とある私立R大学はGPの定義が2~5なので,GPA4です!と言っても実は大したことなかったりする.逆に言うと,GPが底上げされている大学に進学して,一般的な定義の大学院に出願すると,うまくばれなければワンランク上と判断される,かもしれない.
2019年12月18日水曜日
VMware クライアントのカーソルずれをなおす
Windows 10 がホストの VMware でクライアント(Cent OS)のカーソルが 100 ピクセルぐらい右にずれるようになった.VMware は 15.0.4 です.
VMware のショートカットの[互換性]タブの[高DPI設定では画面のスケーリングを無効にする]にチェックを入れたら解決した.
高 DPI ではなく普通の DPI (96dpi) なのになぜおかしくなったのかは謎.
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
}
これはレイヤーごとに設定できる.
一方で,プロセスによっては特にリソグラフィの都合もあり,オフトラック配線や,特定の配線幅以外全くを許容しない場合がある(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 で行う必要があるらしい.
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)
レイアウトの中心座標を変えることができる.
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 でクローズ.
(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を利用するセルの配線可能性を評価し,配線がオフグリッドのものを列挙してくれる.(セル名とピン番号を列挙してくれる)
ライブラリ名を指定し,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 となるべきで 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 と組み合わせると,レイアウトを開いて回転して閉じる事ができる.
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 を指定すると拡大しない事になる.
登録:
投稿 (Atom)