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コマンドで操作を記述できるのでお勧め.