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を付けても効果がない.