2018年2月28日水曜日

intel Core-i7 vs AMD Ryzen for HSPICE

intel Core-i7 と AMD Ryzenの速度比較を行った.比較方法は多くの人が身近によく使う Synopsys HSPICEの実行速度で,正確にはSiliconSmart ACEで69種の論理セルを持つセルライブラリのキャラクタライズ速度で比較した.

Core-i7 マシン:
intel Core-i7 4790 Base: 3.6GHz Boost: 4GHz 4-core 4-thread (Haswell)
DDR3-1600 dual-channel 8GB
Cent OS 6.8

Ryzenマシン:
AMD Ryzen Threadripper  Base: 3.4GHz Boost: 4GHz 16-core 16-thread (Summit Ridge)
DDR4-2400 quad-channel 32GB
Cent OS 7.4

CADはライセンス数に限りがあるのでハードウエアマルチスレッディングは共に無効(Core i7についてはONでも実験してみた).キャラクタライズは並列実行するが,終盤はコアが余り出すので並列性は落ちる.
HSPICE は vJ-2014.09-SP1-2 を利用した.なお HSPICE は SSE2 を使うらしい(SSE2が無いと動かない).周波数ブーストはあり.全然 apple-to-apple ではないけれどしゃーなしやな.

結果:
Ryzen: 25:42.99
Core-i7: (4-thread)1:48:04.94,(8-thread) 1:49:25.39
Ryzenの方が4.2倍高速という結果に.Baseのクロック周波数低いのに処理速度が速いということはIPCがよいのね.Summit RidgeはAVXなどが弱いがSSE2しか使わないなら十分戦える,これならEPYCも期待できそう.


異なるテクノロジファイルのセルを同じOAライブラリに混ぜてしまった時の対策法

AnalogArtist において,異なるテクノロジファイルのセルを同じ OA ライブラリに混ぜてしまうと,一方のテクノロジファイルに上書きされてしまい既存のセルライブラリのレイヤーが表示されなかったり,または表示はまともだが StreamOut 時にあべこべのレイヤーになってしまい DRC などが正常にかからなくなる.

この場合,以下のように修正する.
1. 誤って混ぜてしまったセルを取り除く.
2. 壊れてしまった OA ライブラリが本来持っていたテクノロジファイルと同じテクノロジファイルを持つOAライブラリからセルをコピーする
3. この時,data.dm を上書きするか聞いてくるので,上書きする

どうも data.dm がコンパイル済みのテクノロジファイルのようで,これを本来の物に置き換えてやると直るらしい.
data.dm を shell から上書きするだけでも解決できるかもしれない.

IC Compilerで論理関数が足りず配置配線ができない原因など

自作ライブラリではまったのでめも.自作ライブラリを使ってICCを使って配置配線を試みたところ,

Either a NOR, or an AND and an OR gate (two-input) is required for mapping. (OPT-102)

と出て,自動配置,CTS,配線などが実行できなくなった.この表示だけを読むと論理関数が足りないのかとセルの種類の問題やタイミングライブラリに問題があるのかと思ってしまうが,そうではなかった.

ケース1:set link_library をしていない
OPT-102が表示されるまでのメッセージをたどっていくと,

Error: No valid link library specified, please check library setup. (PSYN-958)
Loading db file '/ibrary/SVT_CTS_0p5.db'
Loading db file '/library/SVT_ILIM_0p5.db'
Warning: The 'CLKINV_01X_NS' cell in the 'SVT_CTS_0p5' technology library is being 
        marked as "dont_use". (PSYN-039)
Warning: The 'CLKINV_01X_NS' cell in the 'SVT_CTS_0p5' technology library does not 
        have corresponding physical cell description. (PSYN-024)

と出ている.set target_library だけ指定して,set link_libraryをしなかったために,セルが全てdont_useになってしまい結果として自動配置配線ができなくなったようだ.この場合は link_library が不要でも target_library と同じ .db を指定するべきのようだ.

ケース2:異なる techfile で作成したMilkywayを混在した場合
複数のMilkywayを作成する時に同じテクノロジファイルを指定しない場合,テクノロジファイルが異なり同一性が保てないと表示され片方のMilkywayライブラリにdont_use属性がついてしまい自動配置配線ができなくなる.すべてのMilkywayのテクノロジファイルが等しいか確認する.

2018年2月25日日曜日

AnalogArtistでレイアウトにピンをSKILLを使って貼る(dbCreateLabel)

AnalogArtistでレイアウトにピンをSKILLを使って貼るにはdbCreatelabelを使う.

dbCreateLabel(cellViewID list("layer" "purpose") x:y "label" "pinLocation" "orientation" "font" size) 

例えばバス形式の配線を大量に貼りたい時は以下のようなSKILLを書けばよい.

cellViewID = dbOpenCellViewByType("library" "cellView" "layout")
dbCreateLabel(cellViewID list("M2" "pin") 0:0.2 "word_1" "centerCenter" "R0" "roman" 0.2) 
dbCreateLabel(cellViewID list("M2" "pin") 0:0.6 "word_2" "centerCenter" "R0" "roman" 0.2) 
dbCreateLabel(cellViewID list("M2" "pin") 0:1 "word_3" "centerCenter" "R0" "roman" 0.2) 
dbCreateLabel(cellViewID list("M2" "pin") 0:1.4 "word_4" "centerCenter" "R0" "roman" 0.2) 
dbCreateLabel(cellViewID list("M2" "pin") 0:1.8 "word_5" "centerCenter" "R0" "roman" 0.2) 
dbCreateLabel(cellViewID list("M2" "pin") 0:2.2 "word_6" "centerCenter" "R0" "roman" 0.2) 
dbCreateLabel(cellViewID list("M2" "pin") 0:2.6 "word_7" "centerCenter" "R0" "roman" 0.2) 
dbCreateLabel(cellViewID list("M2" "pin") 0:3 "word_8" "centerCenter" "R0" "roman" 0.2) 
dbCreateLabel(cellViewID list("M2" "pin") 0:3.4 "word_19" "centerCenter" "R0" "roman" 0.2) 
dbCreateLabel(cellViewID list("M2" "pin") 0:3.8 "word_10" "centerCenter" "R0" "roman" 0.2) 
dbSave(cellViewID)

ここで,M2はLSWのレイヤーの名前,pinはpurposeである.purposeを指定しないときは,デフォルトでdrawingになる.
dbCreateLabel(cellViewID "M2" 0:3.8 "word_10" "centerCenter" "R0" "roman" 0.2) 

2018年2月23日金曜日

Calibre LVSでスタンダードセルの論理を認識させる

Calibre LVSにおいてセルの論理を認識させる事ができる.

LVS RECOGNIZE GATES ALL

例えばNAND2セルにおいて,Layoutでは入力AがVDD,Schematicでは入力BがVDDである時,論理等価性を認識させてLVSをパスさせることができる.

なお,オプションを付けなくても低階層では論理を自動認識してLVSをパスできるが,階層が深くなると論理等価性を認識しなくなるので注意.

SiliconSmartAce で利用するCPU数を設定する

SiliconSmartAceはキャラクタライズ時に使うCPUの数が増えるとそれだけ並列にSPICEシミュレーションを回すので処理が高速になる.
CPUの数は,

config/configure.tcl

のグローバル構成情報を記述する項目

define_parameters default{

中の,

set run_list_maxsize {NUMCPU}

の{NUMCPU}の数字を変える.16CPUなら16とする.

2018年2月19日月曜日

IC Compilerにおける Filler Cell Insertion の実行タイミング

IC Compiler で大きな回路を作成する時,CTS 前に Filler Insertion を行うとクロックツリーバッファが入らなくなる (Fillerを適度に抜いてバッファを入れてくれればよいのにそうしてくれない).セル上部に少しでも配線があると -cell_with_metal の Filler が入らないため,あまりに遅いタイミング(自動配線後)に Filler を入れると -cell_without_metal の Filler しか入らず密度違反になる可能性がある.

結論から言うと CTS 後に一度入れ,配線後に再度入れると良いことがわかった.
具体的には以下のように入れる.
# スタセル配置
place_opt
# セル電源接続
derive_pg_connection -power_net {VDD} -power_pin {VDD} -ground_net {VSS} -ground_pin {VSS}
... # 電源レール作成,電源メッシュ,配線ルールなど略
# CTS
set_fix_hold_options -default
set_fix_hold [all_clocks]
clock_opt -no_clock_route # 配線はさせない
clock_opt -no_clock_route -fix_hold_all_clock -only_hold_time # 配線はさせない
# First filler insertion
insert_stdcell_filler -cell_with_metal  {cell_with_metal}
insert_stdcell_filler -cell_without_metal  {cell_without_metal}
derive_pg_connection # 電源を論理的につなぐ
# route
route_opt
# Final filler insertion
remove_zrt_filler_with_violation # 配線と干渉するFillerを削除
insert_stdcell_filler -cell_with_metal  {cell_with_metal}
insert_stdcell_filler -cell_without_metal  {cell_without_metal}
derive_pg_connection # 電源を論理的につなぐ

remove_zrt_filler_with_violation 
を使うと,Zroute が配線と干渉する Filler (=-cell_metal_with) を見つけてくれるので,その後 -cell_without_metal を入れてやるのがマニュアルの手法らしい.

誤ってCTS 時に配線をしてしまうと -cell_with_metal が入らなくなるので注意.

挙動としては,Utilizationが100%を超えるとIC Compilerの動作がおかしくなる.セルが重なったり配置グリッドに載らなくなったときは,
report_placement_utilization
を実行してUtilizationが100%を超えていないか確認する.Std cell utilization (Non-fixed only)が100%を超えているときはおかしいことをしている.

2018年2月17日土曜日

IC Compilerにおけるピンの配置制約

set_pin_physical_constraint -side [数字]
数字で四辺を指定する.

0:指定無し
1:左辺
2:上辺
3:右辺
4:下辺

2017年12月2日土曜日

Synopsysのツール名とできる事の対応表

よくわからなくなったのでまとめた.

・回路合成
Design Compiler (synthesis/syn/dc):論理合成ツール.
DC Explorer:設計初期段階の不完全なRTLから遅延や消費エネルギーを見積もるツール.
Design Vision:Design CompilerのGUI
HDL Compiler for VHDL/Verilog/System Verilog:DesignCompilerが利用する論理合成エンジン.
Power Compiler:DesignCompilerが利用する消費電力の解析,または消費電力削減を行う回路テクニックを行うエンジン.
Synphony C Compiler (SCC):高位合成ツール.C言語からRTLを生成する.Design Compilerを用いる事でゲートレベル,Synplifyを用いる事でFPGAのコンフィグレーションファイルを生成できる.
Synplify Pro/Premier:FPGA向け論理合成ツール

・ライブラリ生成
SiliconSmart:キャラクタライザ.タイミングライブラリを作成する.(旧Magmaのツール)
Liberty NCX (Liberty):Synopsysのキャラクタライザ.SiliconSmartが使えるようになって即オフサポートになった.
Library Compiler (Library):キャラクタライズ結果(.lib)を論理合成に用いるデータベース(.db)へ変換する.
Milkyway:GDSからフィジカルライブラリを作成する.

・配置配線
IC Compiler(ICC):自動配置配線ツール
IC Compiler Ⅱ(ICC2):自動配置配線ツール.ICCとの違いはよくわからない.
Talus:自動配置配線.RTLからフロアプランまでのTalus Deisgnと,フロアプランからGDS生成までのTalus Vortexに分かれる(旧Magmaのツール)
PrimeRail:チップ内部の電源ドロップを解析する.IC Compilerと組み合わせて使うらしい.

・検証
ESP:等価性検証ツール.Verilogの動作モデルとSPICEレベル(トランジスタレベル)の等価性を検証する.
Formality:等価性検証ツール.RTL(Verilog,VHDL,SystemVerilog)とゲートレベルの等価性の検証,ゲートレベルとSPICE(トランジスタレベル)の等価性を検証する.
Hercules:DRC/LVSツール
IC Varidator(ICV):DRC/LVS/ERCツール.DRCの結果からFillを生成する事もできる.

・ゲートレベルシミュレーション
VCS:RTL/ゲートレベルのHDLシミュレータ.Verilog Compiler Simulatorの略とも.
PrimeTime:ゲートレベルHDLのSTAツール
PrimeTime PX:ゲートレベルHDLの消費電力解析ツール
PrimeTime VX (SSTA) は無くなっちゃったの??

・トランジスタレベルシミュレーション
HSPICE:SPICEシミュレータ
CustomSim:高速SPICEシミュレータ(FastSPICE).プレスリリースによると,NanoSim,HSIM,XAを統合したFastSPICEらしい.
NanoSim:一般回路向けのFastSPICE
HSIM:規則構造回路向けのFastSPICE
XA:NanoSim,HSIMの高速化オプション
FineSim:旧MagmaのSPICEシミュレータ.精度に応じてSPICEとFastSPICEのエンジンを切り替えられる.マルチコア対応でとにかく速いらしい(とMagmaからSynopsysに移った人が推していた)
Nanotime(旧PathMill):トランジスタレベルの静的遅延解析(STA)ツール.大規模回路のSPICEネットリストにレイアウトのRCをバックアノテーションしながらデジタル回路の遅延解析を行う.標準的なデジタル回路で無い場合は正確な解析ができないらしい.

・デバイスシミュレーション
Sentaurus:デバイスシミュレータ
Raphael:配線シミュレーション(RC抽出)

・波形ビューア
CosmosScope:波形ビューア
CustomWaveview:波形ビューア

・寄生成分抽出
QuickCap:寄生容量抽出ツール.GDSを読み取り回路中の寄生容量を計算する(旧Magmaのツール).
Star-RC:寄生素子抽出ツール.回路中の寄生素子(抵抗,容量,インダクタンス)をテーブルベースで計算する.

・テスト
DFTMAX:テスト合成ツール.RTLを論理合成する時にテスト可能なゲートレベル回路を生成する.
TetraMax ATPG:テストパターン生成ツール.DFTMAXで生成した回路に対しスキャンテストを行うためのテストパターンを生成する.

・デバッグ
Verdi:RTLのデバッグ解析ツール.結線ミスとか見つけられるらしい.(旧Novas Softwareのツール)

・Cadabra
セルレイアウトジェネレータ. おじさんが一人で開発していたとの噂.今はオフサポート.

他は使わないのでわからない…….

2017年11月30日木曜日

Star-RC で抽出したトランジスタの座標を表示する

Star-RCで抽出したトランジスタの座標(x,y,角度)を表示するには以下のオプションを利用する.

NETLIST_DEVICE_LOCATION_ORIENTATION: YES | NO | COMMENT

YES: トランジスタのx,y,角度の情報を抽出しインスタンス定義に表示する
NO:  トランジスタのx,y,角度の情報を抽出しない(デフォルト)
YES: トランジスタのx,y,角度の情報を抽出しインスタンス定義に表示する($を付けコメント扱い)

YESを付けると以下の様に抽出される.
MM1 D G S B pfet l=xx w=xx x=1.5 y=0.4 angle=0

NOを付けると以下の様に抽出される(座標情報無し).
MM1 D G S B pfet l=xx w=xx

COMMENTを付けるとコメントとして抽出される.
MM1 D G S B pfet l=xx w=xx $x=1.5 $y=0.4 $angle=0