2018年12月20日木曜日

SiliconSmartでHSPICEのライセンスを使わない(HSPICE_embedded)

SiliconSmart 2016では,シミュレータとしてHSPICE_embeddedを選択する事ができ,これを使うとSiliconSmartのライセンスだけでHSPICEを用いてキャラクタライズをする事ができる.
(ただしHSPICEは2015.06より新しくないといけない)

configure.tclのシミュレータ選択に以下のように書けばよい.

set simulator hspice_embedded
set simulator_cmd { full-path-to-hspice < input_deck > -o < listing_file >}


これでHSPICEのライセンスをモリモリ消費せずにキャラクタライズを回せる.

2018年12月18日火曜日

FineSimを使ってみる

TAU Workshopで「HSPICE遅すぎるんですけど(><)」って文句を言いまくっていたら,「FineSimいいよ,マルチコア対応だし速いし」と元MagmaからSynopsysに移った人がお勧めしていたので使ってみた.試したのは FineSim M-2017.03-SP2-5,普段使いは HSPICE J-2014.09-SP1-2 .FineSimをSPICE互換モードで利用するには以下のようにする.マルチプロセッサで実行するために-np [numCPU] を付けている(HSPICEの-mtと同じようだ).-autoオプションを付けると,独立したsweepを別プロセッサで実行する(HSPICEの-mpと同じようだ).

% finesim  spice.sp -mode=spicemd -np [numCPU] -auto -spice

あるプロセスのDFFのD2Q遅延とセットアップ時間を評価してみた.D2Cを変えながらD2Qの最小値を求める.

D2Q遅延:1.4% の差(FineSimの方が速い)
Setup:同じ(刻みは0.1ps)

ほとんど同等の結果だ.

速度は以下のような感じ.201点スイープです@intel Core i7 4790K 8-thread.

HSPICE (-mp -merge) 37秒
FineSim (-np) 22秒
FineSim (-np -auto) 13秒

めっちゃ速い.FineSimは標準出力へのログの吐き出しが無ければもっと速くなりそう.

気になったところ
・HSPICEの構文解析でOKな記述がFineSimではエラーになったりする.
・.measureに失敗したときに,HSPICEは"failed"と表示するが,FineSimは"error"と表示する.
・FineSim-EmbeddedというのがSiliconSmartに入っていてライセンス無く使えるらしい.
・FineSimは2つの解析エンジンを持っているので,どちらのエンジンで実行すべきか指定する(指定しないと自動選択されるらしい).
(1) FineSim Pro,回路分割を行いマルチCPUで解く.いわゆるFastSPICEでほどよい精度と速度のトレードオフをもつ.オプションは-mode=promd
(2) FineSim SPICE,回路分割を行わなず,単一のマトリックスをマルチCPUで解く.いわゆる普通のSPICEでSPICE精度を保ちマルチコア対応で速い.オプションは-mode=spicemd

2018年12月17日月曜日

SiliconSmart Aceで出力スリューの大きいセルをキャラクタライズする

SiliconSmart Aceで特に出力がRail-to-Railにスイングしにくいセルをキャラクタライズするには以下の設定を追加する.

・configure.tclに対する追加
set total_slew_multiplier [val]
内部パラメータであるtotal_slewの定数倍を指定する.total_slewは遅延やエネルギーを計算するウィンドウを示すパラメータで以下の式で計算される.
total_slew = largest_slew / (logic_high_threshold - logic_low_threshold) * total_slew_multiplier
largest_slewは入力スリューの最大値.

・該当セルの.instに対する追加
set_config_opt -type -timing -to [PIN] -pin [PIN] partial_swing 1
フルスイングしない信号ピンに対し,Rail-to-Rail以外の電圧を評価できるようにする設定.partial_swing を 1 にすると,SiliconSmartの波形解析エンジンではなく,.measureで評価した電圧の絶対値を評価するようになる.ただ,デバッグ用?でNLDMに使えるのかはよくわからない.

2018年11月29日木曜日

Preparing missing pieces for IC Compiler in ASAP 7nm PDK

Arizona State University collaborated with ARM provides predictive 7nm process PDK for education[1].
http://asap.asu.edu/asap/

They provide LEF for Cadence Innovus for P&R, however, they did not provide technology file for Synopsys IC Compiler.
(in ICCAD 2017[2], the tech file for ICC is announced as under construction).

To use IC Compiler in ASAP 7nm PDK, following files are required.

(1) Technology file for IC Compiler(Astro, .tech/.tf)
Defines layer stack properties, design rules, VIA macros, display settings for IC Compiler. Techfile is converted from the LEF file using Milkyway.
(2) GDS2A
Layer conversion table from GDS to Astro(Milkyway).
(3) A2GDS
Layer conversion table from Astro(Milkyway) to GDS.
(4) Interconnect Technology File (ITF)
Defines layer stack specifications. For ASAP 7nm, layer stack specifications are described in [3].
(5) TLUplus (Table Lookup plus?)
Defines layer stack specifications for IC Compiler. TLUplus is converted from the ITF using StarRC.
(6) Milkyway physical library
With (1) ~ (5), Milkyway library is converted from a GDS.
(7) Timing library (Synopsys database, .db)
Timing library (.db) is converted from Liberty (.lib), using LibraryCompiler.



Since TLUplus is used to estimate RC parasitic in inter-cell routing, ITF design is important.

[1] L. T. Clark, V. Vashishtha, L. Shifren, A. Gujja, S. Sinha, B. Cline, C. Ramamurthy, and G. Yeric, “ASAP7: A 7-nm finFET predictive process design kit,” Microelectronics J., vol. 53, pp. 105–115, 2016.
[2] V. Vashishtha, M. Vangala, and L. T. Clark, “ASAP7 predictive design kit development and cell design technology co-optimization: Invited paper,” in ICCAD, pp. 992–998. 2017.
[3] V. Vashishtha, A. Dosi, L. Masand, and L. T. Clark, “Design technology co-optimization of back end of line design rules for a 7 nm predictive process design kit,” in ISQED , pp. 149–154, 2017.

2018年11月11日日曜日

レイアウトを画像に変換する

大量のセルレイアウトを画像にしたくなったので調べたら,Cadence Community ForumにQ&Aがあった.
https://community.cadence.com/cadence_technology_forums/f/custom-ic-skill/21784/export-image

dd=ddGetObj( "libname" "cellname" "layout" "*")
viewType=ddMapGetFileViewType(dd)

wid = hiCreateWindow( list(0:0 800:800) "none" "Export Window")
wid->neverCurrentWindow = t 
deOpenCellView( "libname" "cellname" "layout" viewType wid "r")

sprintf(imageFile "%s.png" "cellname")
hiExportImage(
  ?fileName strcat("pic" "/" imageFile)
  ?exportRegion 'entireDesign
  ?bgType 'transparent
  ?window wid 
)
hiCloseWindow(wid)

hiExportImage ではstrcatを使って,保存ディレクトリ,"/",ファイル名を結合して特定のディレクトリにファイルを保存しているようだ.

Andrewさんいつも的確に答えていて素敵すぎる.

2018年10月16日火曜日

SiliconSmart がキャラクタライズに失敗するときの対策

SiliconSmart を用いてキャラクタライズをしているとき,あまりにも遅いセルを使っていると

Info:    Failed tasks:
Info:      INV_01X_1:
Info:          delay__A__lh__YB__hl__ACQ_1

とキャラクタライズに失敗する.セルが最大入力スリュー時間制約(=シミュレーション時間制約)や最大出力スリュー制約を満たさない時,このようにキャラクタライズに失敗する.この場合,時間制約を延ばすと出力が反転しシミュレーションに成功する可能性がある.これらスリューの制約は以下の設定で変えられる.

largest_slew float:最大入力スリュー時間
max_tout float:最大出力スリュー制約

長くするとそれだけシミュレーション時間が長くなる.

2018年10月10日水曜日

論理合成で回路の活性化率を指定する

入力ピンの活性化率によって,回路の動的電流とリーク電流の割合が変化する.
これを論理合成時に考慮させるには,以下のオプションを使う.

set_switching_activity -toggle_rate trate -clock clk -static_probability staticp -select inputs
staticp は0.0から1.0の値で,入力が1となる割合.
trate は0.0から1.0の値で,入力の遷移確率.

2018年10月9日火曜日

レイアウトを拡大縮小する(XScale)

レイアウトを拡大縮小する(Zoomするのではなく,物理的に拡大縮小する)方法として,Virtuoso についているXScaleを使う手法がある.

% XScale -mag [倍数] -lib [OAlib name] -view layout (-cell [cell name])

-mag にはズーム比を入れる.4であれば,縦横4倍の16倍の大きさとなる.0.5など小数も受け付ける.

2018年9月26日水曜日

3D Layout GUI (on innovus)

Cadence Innovus の最新版(18.1)では,レイアウトを3Dで表現できるらしい.

(画像はThe Sound of Cadenceへのリンク)
https://www.cadence.com/content/cadence-www/global/ja_JP/home/soc/2018/jul/volume27/issue2.html

自動配置配線(Innovus)よりはカスタムレイアウト(Virtuoso)で欲しかった機能ではある.ここで断面を見たい!と何度思ったこと事やら.
時代がようやく土谷先生に追いついた感じ.(土谷先生のはこちら)
http://www-lab13.kuee.kyoto-u.ac.jp/~tsuchiya/gsu/index.html

2018年9月18日火曜日

VISAとSCPI

VISAとSCPIの違いがよくわからなくなったのでまとめた.

VISA (Virtual instrument software architecture) は計測器接続用のソフトウエアの標準仕様.
「VISAライブラリ」を使う事で,インターフェースの規格(GPIB/シリアル/LAN/USB)を仮想化する事で,インターフェースの規格を気にすることなく測定器を制御できる.

PCがサポート(インストール)されている必要がある.NI-VISAだったり,Pythonならpyvisa を使う.

SCPI (Standard Commands for Programmable Instruments,スキッピ)は,計測器側がサポートしている測定器制御コマンドの事.多くの測定器は制御側(PC)からアスキー文字を受け付けその文字列に従って制御を行う事ができるが,その文字列(コマンド)のフォーマットの一つがSCIP.
Keysight,Tektronixなど大手がサポートしている.

なお,メーカーによっては異なるフォーマットをサポートしている事もある,例えば今評価中のADC(Advantest)ではADコマンドというコマンドらしい.Keysightの前のAgilentの前のHPの測定装置はSCIPとはちょっと異なるコマンドだったりした.

2018年9月14日金曜日

Virtuosoが新しいCent OSで起動しない時の対応法

Virtuosoが古い場合,新しいCent OSでは起動しない問題を解決したい.
具体的には,
IC6.1.4.500.10

Cent OS 7.4.1708
で起動したい(ちなみにCent OS 6.8なマシンでは同じバイナリが起動する)

% virtuoso 
virtuoso:   ERROR: The command /cad/cadence/IC610_lnx86/share/oa/bin/sysname returned an error status:
                            unknown
virtuoso:    INFO: Note that OpenAccess (OA) requires running the Configure phase.
virtuoso:          See the "OpenAccess Installation and Configuration Guide" before
virtuoso:          you complete the configuration step. This manual is included with
virtuoso:          the Cadence product documentation.

とエラーが出る.sysname はシェルスクリプトなのでをテキストエディタで開くと,check_global ルーチンで弾かれていることがわかる.これを避けるためには,
[VirtuosoDir]/share/oa/bin
の中に存在する,登録されている(インストールされている)Linuxのバージョンを環境変数OA_UNSUPPORTED_PLATに指定すればよい.
% export OA_UNSUPPORTED_PLAT=linux_rhel40
これでVirtuosoが起動する.

詳細には,sysname 中の check_linux ルーチンでカーネルのバージョンを調べるのだが,2.4 と 2.6 の分岐しか無く,バージョン 3 以上の時にカーネル情報の取得に失敗してしまい起動できなくなる.2.6系列と大きく変わらないはずなので,linux_rhel40 (2.6)と指定すればよいだろう.

TLU+を作る

IC Compiler で配置配線する際に,配線容量を考慮した配置配線を行う.そのために配線層の寄生容量のモデルが必要であり,IC CompilerではTable Look Up Plus (TLU+)を使う.
TLU+はInterconnect Technology File (ITF)から作る.ITFでは,プロセスの縦構造を定義する,つまり各配線層の幅,ピッチ,厚み,および誘電率を定義できる.誘電率は途中で変える事もできる.フォーマットは以下のBlogに詳しい.
http://vlsi-concept.blogspot.com/2009/01/interconnect-technology-file-itf.html

ITFができたら,TLU+を作る.StarRC付属の grdgenxo で作る事ができる.
% grdgenxo -itf2TLUPlus input.itf -o output.tluplus

StarRCで使う配線の縦構造を表す nxtgrd ファイルを作る事もできる.(めちゃくちゃ時間がかかります)
% grdgenxo input.itf

プロセスの縦構造を画像にする事もできる.
% grdgenxo -profiler input.itf -jpg output.jpg 



暗号化されていない nxtgrd を逆コンパイルして ITF を作る事もできるらしい.

余談,IC Compilerが呼び出すStarRCはTLU+によるルックアップベースの配線容量見積もりをしているので,StarRCによるRC抽出に比べて精度が落ちる.タイミング解析も同じで,簡易型のPrimeTimeによるタイミング解析なので本物に比べてタイミング解析精度が落ちるのが欠点らしい.

2018年9月13日木曜日

InnovusのテクノロジファイルをIC Compilerに変換する

某PDKでは,Innovusのテクノロジファイル(というかLEF)しか提供されておらず,IC Compilerのテクノロジファイルが無い.ICCAD 2017のスライドでは構築中とある.

テクノロジファイルを手で書くのはしんどいので変換できないか調べたら,EDA BoardにMilkywayを使ってLEFからIC Compilerのテクノロジファイルを抽出するやり方が載っていた.

https://www.edaboard.com/showthread.php?156781-Converting-lef-library-to-plib-pdb-without-Physical-Compiler
の3番目の投稿である.

Milkywayを立ち上げ,
read_lib
をコマンドウィンドウに入力する.
適当にライブラリを指定し,Prepare Physical Libraryを選択,Physical Input Format にLEFを指定し,Import LEFを押す.するとREAD LEF画面がでるので,Tech LEF Filesに読み込むLEFを指定し,OKを押す.

次にファイルの書き出し.Mikyway→Tech File→Write To File と指定し,LEFのテクノロジを適用したMikywayライブラリを指定して,ファイル名を指定しOKを押せばよい.

全てのルールが変換されているわけでは無さそうだが,まあ何とか使えるかな??,というクオリティのものができた.

なおTLU+は無いのでこれは自作するしかない.Timing Drivenな配置配線なんてできないわな.(これはInnovusでも同じだけれど)

製造プロセスとIC Compilerのライセンス

16nm FinFET 12nm FinFETなどプロセスが微細化しているが,あまりに微細なプロセスは配置配線に特殊なライセンスが必要なんだとか.IC Compiler の場合,20nm以下のプロセスでは IC Compiler Advanced Geometry のライセンス(Galaxy-AdvRules)が必要.
これはDouble-Patterningを考慮した配置配線のために必要らしい.さらに10nm以下の設計では追加でFuture-Technology のライセンスも必要らしい.

IC Compiler Ⅱは最初からDouble-Patterning-Aware Routingができるみたいなので,こちらなら設計可能なのだろうか.10nm以下はどうなるのかわからない.

ちなみにCadence Innovusも同じように追加ライセンスが必要らしい.

2018年9月11日火曜日

電流の積分時間とスプリアスノイズの関係

電流計(DMM/高精度電源/SMU)によっては積分時間を任意に設定できるものが存在する.積分時間を単に長くするのではなく,想定している交流信号の周波数の整数倍に設定するとノイズ軽減に効果的らしい.例えば関東の商用AC100Vであれば50Hzなので,積分時間は20msの整数倍にするとよいそうだ.

Keysight 34970Aの例だと,積分時間を最短にした例に比べ20msにするとAC100V電源からのスプリアスノイズを60dB減らせるとある.
デバイス測っていると電流が周期的に揺らいで見えるがこれで対策できるのだろうか.

2018年8月13日月曜日

RISCVを動かしてみる(環境設定)

今更ながらRISCVをいじってみる.まずは環境構築.OSはCentOS7です.
% echo /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
ちなみにUbuntuを想定しているらしく,パッケージが古いCentOSでは動かすのは一苦労です...

長いのでオチだけ:
CentOS 7.4の場合,以下のパッケージが必要.
yumで入る:javac(openjdk), dtc,他にもあるかも
ソースをダウンロードしてコンパイル:LOBTOOL(2.6.4),automake(1.1.4),GCC(4.9)

基本は
https://www.aps-web.jp/academy/risc-v/05/
のサイトの通り.

適当に作業ディレクトリを作って,まずはgit clone
% git clone https://github.com/freechipsproject/rocket-chip.git
% cd rocket-chip
% git submodule update --init --recursive

RISCVのツールチェーンのパスを環境変数に入れる.
% export RISCV=~/rocket-chip/
% export PATH=$PATH:$RISCV/bin/
この地点では~/binは無いが,後でgccなどができる.

デフォルト設定でScalaからVerilogへ変換.
% cd vsim
% make CONFIG=DefaultConfig
初回Makeでは
[error] sbt.librarymanagement.ResolveException: unresolved dependency: org.apache.maven#maven-plugin-api;3.3.9: jgit-repo: unable to get resource for org/apache#apache;17: res=http://download.eclipse.org/jgit/maven/org/apache/apache/17/apache-17.jar: java.net.SocketException: Connection reset
とでて止まった.
何故か2回目は最後まで終了した,大丈夫かこれ.

自分の環境では,javacとdtc(device tree compiler)が必要だった.javacはopenjdk-develに入っているようだ.
% sudo yum install openjdk-devel.x86_64 dtc.x86_64

してもう一度Make.Makeはできたが,VCSが走らない.
% make CONFIG=DefaultConfig
  "/home/****/design/riscv/rocket-chip/riscv-tools/lib/libfesvr.so"
  cannot be opened for reading due to 'No such file or directory'.
  Please fix this issue and compile again.

ここで,READMY.mdを読み,riscv-toolsのディレクトリでBuildしていないことに気がつく.こっちを先にしないといけないっぽい.
% cd ..
% cd rocket-chip/riscv-tools
% git submodule update --init --recursive
% export MAKEFLAGS="$MAKEFLAGS -j4"
% ./build.sh
config.status: error: cannot find input file: `Makefile.in'

riscv-openocdのBuildがうまくいかない.
LIBTOOLとautomakeもVersionが古いとうまくいかない.
LIBTOOLは2.6.4,automakeは1.1.4以上にする必要がある.
yumでは入らないのでソースからコンパイル.
/usr/local/share/aclocal/に/usr/share/aclocalのdirlistを作る.
% su
% echo /usr/share/aclocal >> /usr/local/share/aclocal/dirlist
% exit

ねんのためlibtoolizeしてから再度Build
% libtoolize
% ./build.sh
gcc: エラー: オプション ‘-mcmodel=medany’ 内で認識できない引数です
gcc: 備考: ‘-mcmodel=’ への有効な引数は次の通りです: 32 kernel large medium small
gmake: *** [file.o] エラー 1

調べると,GCCのVersionが4.9以上である必要があるっぽい.
% gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

https://qiita.com/yn-misaki/items/601e260bec0b6eaaa74e
を参考に4.9を自分でビルド.

% sudo yum remove gcc libgcc
% curl -O ftp://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-4.9.3/gcc-4.9.3.tar.bz2
% tar xvfj gcc-4.9.3.tar.bz2
% cd gcc-4.9.3
% mkdir build
% cd build
% ../configure --prefix=/usr  --disable-multilib --enable-languages=c,c++
% make -j 4
% sudo make install

と思ってやってみたけれどだめだった.
% ./build.sh
gcc: エラー: オプション ‘-mcmodel=medany’ 内で認識できない引数です
gcc: 備考: ‘-mcmodel=’ への有効な引数は次の通りです: 32 kernel large medium small
gmake: *** [file.o] エラー 1
もっと調べると,そもそもtargetが上手く指定できていないっぽい.

ググると,=medanyオプションが上手く動かないとき,RISCVのコンパイラが作れていない可能性があるらしい.
https://riscv.org/software-tools/

ためしにbinを見てみたら,64bit版しかなかった.32bit版がよかったのだけれど,build.shの編集の仕方がおかしかったらしい.
もう64bit版で良いか,と64を指定し治してコンパイル
% ./build.sh
うごいた.
Hello Worldしてみる.
% cd ..
%  ./bin/riscv64-unknown-elf-gcc -o hello hello.c
%  spike pk hello
Hello world!\n%             


よくみたら32bit版は別のスクリプトがあった.結局関数に与える引数の与え方が
おかしかっただけだった.てへぺろ

%  ./build-rv32ima.sh
うごいた.
Hello Worldしてみる.
%  ./bin/riscv64-unknown-elf-gcc -o hello hello.c
%  spike pk hello
Hello world!\n%

32bit版もうごいたっぽい.
コンパイラとシミュレータが動いたので,RTLシミュレーションに移動する.
Rocketchipでいくか,PULPinoにするか悩みます.

韓国の先生?の資料がだいぶ役に立った.ハングル勉強したいのう.
http://www.e4ds.com/webinar_tech_dn.asp?idx=279

2018年6月19日火曜日

Virtuosoの操作結果を表示する(Log Filter)

Virtuosoの操作結果を同等のSKILLコマンドでログに出す事ができる.

CIW→Options→Log Filterを選択する.上から5つ目の[Accelerated Input]を選択すると,操作結果がCIWに表示されるようになる.



使いたいSKILLコマンドをログとして表示し,それを元にSKILLコマンドで操作を記述できるのでお勧め.

2018年4月23日月曜日

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

わからなくなったので調べた.

・回路合成
Encounter RTL Compiler(EC):論理合成
Genus Synthesis:論理合成.ECの後継
CtoS(CTOS):高位合成ツール
Cynthesizer:高位合成ツール
Stratus:CtoSとCynthesizerの後継となる高位合成ツール

・ライブラリ生成
Encounter Library Characterizer(ELC):タイミングライブラリのキャラクタライザ
Liberate:タイミングライブラリのキャラクタライザ(買収したAltos Design Automationの製品)
Liberate AMS : ミックスドシグナル向けのキャラクタライザ.

・配置配線
SoC Encounter:配置配線ツール.EDIの前.
Encounter Digital Implementation(EDI):配置配線ツール
Innovus:EDIの後継となる配置配線ツール
NanoRoute:Encounter,Innovusで利用されている配線エンジン

・検証
Assura:DRC/LVSを行う.寄生成分抽出にも使う.Virtuosoとバージョンを合わせる必要がある.
Conformal:等価性検証

・カスタムレイアウト
Virtuoso(IC):カスタムレイアウトの統合開発環境.以下のツール群から構成される(よく把握できていない)
-- Analog Design Environment (ADE):回路シミュレーションのインターフェース
-- Composer Schematic:回路図エディタ
-- Virtuoso Layout Editing:レイアウトエディタ
AnalogArtistと呼んだり,ICFB(IC frontend to backend?)と呼んだり.大きくIC51系とIC61系に分かれている.

・ゲートレベルシミュレーション
Incisive:RTLおよびゲートレベルシミュレーション.以下のツール群からなっている(よく把握できていない)
-- ncVerilog:Verilogシミュレータ
-- Verilog:Verilogシミュレータ
Xcellium : RTLおよびゲートレベルシミュレーション.Incisive の後継
SimVision:波形ビューア
Encounter Timing System (ETS):静的遅延解析

・トランジスタレベルシミュレーション
Specter:SPICEシミュレータ.ADEと相性がよい. IC51には入っていた.IC61ではMMSIM(Multi Mode Simulator)パッケージを入れると使えるらしい.

・寄生成分抽出
EXT(QRC):寄生成分抽出

VirtuosoとIncisiveしか使っていないのでよくわからない.あとEDIには苦しめられた記憶しかない.Liberate AMS はチュートリアルの回路は問題無く動作するが,それ以外ではてんでダメという評価を聞いた.

2018年4月10日火曜日

DesignCompilerでDFFが見つからない(Target library contains no replacement for register)

DesignCompilerで論理合成したら以下のようなWarningが出た.

Warning: Target library contains no replacement for register 'PRODUCT_INST_reg[9]' (**FFGEN**). (TRANS-4)

これはライブラリに対応するDFFが存在しない時に出力されるエラー.例えば今回のライブラリは普通のDFFしか存在しないが,RTL記述に非同期リセット付きDFFを必要とする記述を書いてしまうとDCは論理合成ができないのでDCの持つ理想FF(FFGEN)を使って論理合成を行う.理想FFは物理的に存在しないので配置配線はできない.

読み込むLibraryの生成に失敗しているか,Libraryの持たないセルによる挙動なのか切り分ける必要がある(非同期Set-Reset付きDFFやトライステートインバータなど).

Libraryのチェックは以下のコマンドで行える.

check_library -logic_library_name logic_library.db

2018年3月9日金曜日

HSPICEのAdvanced Server/Clinetモードで標準出力をファイルに書き出す

HSPICEのAdvanced Server/Clinetモードで標準出力をファイルに書き出すには,Serverを起動する時に-o "ファイル名"を指定する.Clientで-oを付けても効果がない.

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:下辺