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 から上書きするだけでも解決できるかもしれない.