target "ターゲット名";
出力波形を用いるシミュレータを指定します.現在のところ, spice, hspice (finesimでもシミュレーション可能), verilog, hp83000, hilevel, MU300em (em300), sdc, EVA100 (eva100)を正式にサポートしています.
target "spice";
target名は, -tオプションにより,実行時に上書きすることができます.
pin "ピン名","ピンの種類",["オプション"];
ピン名とその方向を指定します.ピン名は, []を使うことにより,多ビットのバスとすることができます. [10:0]で, MSB(最上位ビット)が10でLSB(最下位ビット)が0の11ビットのバスとなります.必ず, MSB>LSBとし, MSB-LSB<32として下さい.
ピンの種類は,入力input,出力output,入出力inout,クロックclockとなります.
pin "adr[11:0]","input"; pin "write","input"; pin "ck","clock"; pin "din[23:0]","input"; pin "dout[23:0]","output"; pin "io","inout";
defval=
svectorサブルーチンの際のピンのデフォルト値を設定します.ピンの種類がinoutの場合は,コンマで区切って, defval="入力値,出力値"のように指定します.
vil= #入力ピンのロー電位 vol= #出力ピンのロー電位 vih= #入力ピンのハイ電位 voh= #出力ピンのハイ電位
入出力のピンの電位を個別に設定します.指定がない場合は, levelコマンドで指定した値が有効になります.
loc=
チップのピン番号を指定します.バスの場合は,空白もしくは,コンマで区切って, MSBからLSBの順にピンの番号(チップもしくはパッケージのピン番号)を列挙します. :により,連続したピン番号を指定することもできます.例えば,
"loc=35:30,22,21,18,17"
は, MSBから順に, 35,34,33,32,31,30,22,21,18,17となります.
ピン番号からテスタチャネル番号への変換規則の指定は, channelfileサブルーチン, packagefileサブルーチンにより行います.
cont=
ターゲットv2stにおいて,双方向ピンのコントロール端子を指定します. v2stにより出力されたVerilog記述を埋め込んで,シミュレーションを行うことで既存のテストベンチから簡単にST用のテストベクタ列を得ることができます.詳細は節[既存のVerilog moduleからのSTテンプレートの生成]を見てください.
シミュレーション時には双方向ピンが現在入力状態にあるのか,出力状態にあるのかがわかりません.双方向ピンにはかならずその入出力状態を変化させるための制御入力が存在します.ここでは,この入力ピンの名前と,入力時の論理値を指定します.例えば,
"cont=en,0"
と指定した場合は, enが制御ピンで, 0の時に入力状態となるという指定になります.
pin "equal","input","defval=0","loc=8"; pin "in[7:0]","input","defval=0","loc=30:28,26:22";
とすると, equalピンはデフォルトの入力値は10となり,ピンの番号は8となります. inは, 8ビットの入力ピンとなり,ピン番号はMSBよりそれぞれ30, 29, 28, 26, 25, 24, 23, 22となります.
shortname=
長いピン名を受け付けないシミュレータ,テスタ用に短縮名を指定します. hilevelテスタはベクタ指定のサフィックスまであわせて10文字までしかピン名を認識しません.
シミュレーション時の周期や最小時間単位を記述します.
timing 最小時間単位,シミュレーション周期,タイミング分割数;
最小時間単位は, spiceの
.tran 1ns 500ns
というサブルーチンに現れる最初の時間1nsに対応します.
timing 1e-9,50e-9,10;
これで,最小時間単位1ns,周期50ns,分割数10を指定します.
waveform "ピン方向",["波形タイプ"],"波形","ピン名0","ピン名1",....;
1周期中の入力波形,出力を比較するポイントを指定します.ピンの方向は, inputか, outputのどちらかを指定します.双方向ピンの場合は, inputとoutputの双方に記述します.
波形タイプは,
のいずれかを指定します.それぞれの意味は, intype.htmlとouttype.htmlを参照してください.
指定値 | 意味 |
dnrz | 1周期内で立ち上がり,もしくはたち下がりのみを起こす波形 |
rz,r0 | 1周期内で0から1に立ち上がり,再び0に戻る波形 |
r1 | 1周期内で1から0にたち下がり,再び1に戻る波形 |
指定値 | 意味 |
edge | 指定した時間でのみ比較を行う. |
window | 指定した時間範囲で比較を行う. |
波形タイプを省略すると,入力ピンはdnrz,出力ピンは, edgeになる.波形は,波形が変化するところを%で,ないところを.で指定する.出力のwindowはLSIテスタのみサポートし,シミュレータではedgeと同じく,指定時間の最初で比較を行う.
timing 1e-09,1e-07,10; waveform "input","dnrz",".%........","in1";
の場合は, in1の入力に対して, 100nsの周期において, 10nsで立ち上がったり,たち下がったりする波形を生成する.
連続する4周期において1011をin1に与えたときの入力波形は図9.1.4.1.1[dnrz]のようになる.
timing 1e-09,1e-07,10; waveform "input","rz","%%%%%.....","in2"
の場合は, 100nsの周期のうち, 0nsで立ち上がり, 50nsでたち下がる波形を生成する.
連続する4周期において1011をin2に与えたときの入力波形は図9.1.4.1.2[rz]のようになる.
timing 1e-09,1e-7,10; waveform "input","r1","%%%%%.....","in3"
の場合は, 100nsの周期のうち, 0nsで立ち下がり, 50nsでたち上がる波形を生成する.
連続する4周期において1011をin3に与えたときの入力波形は図9.1.4.1.3[r1]のようになる.
timing 1e-09,1e-07,10; waveform "output",".........%","out";
の場合は, 100nsの周期のうちの90nsで出力値と期待値の比較を行う.
timing 1e-09,1e-07,10; waveform "output","window",".........%","out";
の場合は, 100nsの周期のうちの90nsから100nsの間に,出力値と期待値の比較を行う.なお,この指定は現在のところhp83000でのみ有効である.それ以外のシミュレータ/テスタの場合はedgeと全く同じ意味になる.
timing 1e-09,1e-07,10; waveform "output","..........%","out";
の場合は, 100nsの周期のうちの100nsで出力値と期待値の比較を行う. inputピンの場合,波形内の.と%の合計はtimingの最後の引数を超えることはできない. outputピンの場合は,期待値との比較を次サイクルに持っていくために, 1サイクルを超えて期待値比較ポイントを設定することができる.ただし,期待値比較ポイントを設定できるのは, 2サイクル以内である.
クロックの波形を記述する
clock "クロック信号名","波形";
波形は, timingサブルーチンの分割数分, 0と1を並べることにより記述する.複数のクロックが存在するときは,複数のclock文を使用する.
timing 1e-9,50e-9,10; clock "ck","1111100000";
この例では, 50nsの最初の25nsが1で,後半の25nsが0のクロック波形を生成する.この時のクロック波形を図9.1.5.1[clock波形]に示す.
pinorder "ピン名1", "ピン名2", "ピン名3",......;
vectorサブルーチンでの波形を記述する順序を指定する.この文がなければ, pinサブルーチンで定義した順番に,波形を記述することになる.クロック信号はこの文に含めてはならない.
channel ピン番号,チャネル番号;
ピンに対応したテスタのチャネル番号を指定する. VDEC標準のピン配置にしたがった場合は,次のchannelfileサブルーチンを使用する.
channel 1,"10101"; channel 2,"10103";
packagefile "ファイル名";
後述のchannelfileが,チップとテスタチャネル間ではなく,パッケージとテスタチャネル間の関係を与えており,かつ, pinのloc=オプションで,チップのピン番号を指定している場合に,チップのピン番号とパッケージのピン番号との関係を記載したをcsvファイルを, packagefileにて指定する.必ず, channelfileよりも前に記載すること.
packagefile "mot23-pkg-chip.csv";
channelfile "ファイル名";
VDEC標準のピン配置に対応したピンとテスタチャネル番号の対応を記したcsvファイルから,ピンとテスタチャネルの対応を読み込む.このファイルは, VDEC標準DUTボードの使い方から取得する.
channelfile "mot23-chip-dut.csv";
pinサブルーチンのlocオプションで指定したピン番号が,チップのピン番号である場合は, *-chip-dut.csvを,パッケージのピン番号である場合は, *-pkg-dut.csvを用いる.
beginvector;
これまでに述べたピン,波形設定サブルーチンの終了を意味し,このあとに,入力ベクタ期待値記述サブルーチンを記述していく.
vector 1,0,0,5;
1周期毎に,すべてのピンの入力値,期待値を記述する場合に使用する.テストベクタをpinorderサブルーチンで指定した順序で,記述する. Perlでサポートしている任意の数値形式が使えるが,整数しか使えないので注意する.出力値が不定の場合は, "X"を指定する.双方向(inout)ピンの場合は,ドライブ(入力)時とレシーブ(出力)時の二つのベクタを記述する. Z,1で,入力をハイインピーダンスにして,出力に1を期待する. 1,Xで,入力を1にする.入力側をハイインピーダンスにしないと期待値との比較は行われないので, 1,5は, 1,"X"と同じ意味になる.
svector "ピン名=ベクタ",....;
引数で与えた入出力ピンのみ値を変化させる.それ以外はpinサブルーチンのdefvalで与えたデフォルト値となる.双方向ピンの場合は, "pin=Z,1"のように,入力値と出力値をコンマで区切って指定する.
stimulus "ピン名=ベクタ",....;
変化するところだけ,ベクタを指定する. svectorと異なり,指定後にデフォルト値に戻らない. Verilogで波形を記述する場合と全く同じである.
endvector;
一番最後に挿入する.
同じベクタ群をサブルーチン化して何回も呼び出したいときに使用する.ただし,ループ内では変数の評価は行なわれないので注意する.アドレスを「1づつ増やしてメモリにアクセスする」といったことには利用できない.現在loopをサポートしているのは, Verilog, HP83000, EVA100のみであるが,それ以外では,ループを自動的に展開する. EVA100では,ループ回数は2の16乗(16,777,216)回までで,ループ内のベクタ数は255まででなければならない.また,一つのベクタ内でloopコマンドを256回以上実行することはできない.loop内のベクタが一つの場合は9回以上実行することはできない.
loop ループ回数, サブルーチン名
サブルーチンは, perlのサブルーチンとして定義する.サブルーチン内は, vector, svectorなどの波形生成コマンドのみを挿入する.
なお,サブルーチンは, loopコマンドで呼び出される度に展開される.
例: beginvector; loop(10,"loopvec"); endvector; sub loopvec{ vector(0,1,1); vector(1,1,0); vector(0,1,1); }
slope 立ち上がり(下がり)時間, 立ち下がり時間
spice, finesimにおける波形の立ち上がり,立ち下がり時間を指定します.ただし, finesimでは,最初の引数が,立ち上がり,立ち下がり両方に使用されます.
slope 1e-9,0.5e-9
立ち上がり時間1ns,たち下がり時間0.5nsを指定しています.このサブルーチンで指定のない場合のデフォルト値は立ち下がり,立ち上がり両方で1nsとなります.
level 入力ローレベル電圧,入力ハイレベル電圧,出力ローレベル電圧,出力ハイレベル電圧;
または,
level 入力ローレベル電圧,入力ハイレベル電圧;
入出力の電圧レベルを設定する.これを設定しなかった場合,
がデフォルトで設定される.この指定は, spice, finesimの回路シミュレータやテスタに有効である. verilogではこの指定は当然無視される.
source "電源名",[オプション];
電圧源を指定する. spice,EVA100のみで有効である.電源名で指定した名前のノードが電源ノードとなる.
channel=で電源のテスタの電源番号を指定する.
例: source "vdd"; source "vdd2","channel=11";
電源番号はそれぞれのテスタにより異なる.複数個のLSIを同時測定し,かつ電源が独立している場合は,channelに複数の電源を指定する.EVA100テスタのchannel番号電源位置の関係はテスタ上のDUTボードに記載されている.複数個の電源と1個の電源をLSIの個数により切り替える場合は,ST実行時の-mオプションにLSIの個数を記載する.これにより,STスクリプト内で$ST::_multiple変数が-mオプションの数になるため,下記の通り,条件分岐することができる.下記の例では4個同時測定の場合と1個の場合を切り替えている.channelfileによりピン配置も切り替えている.なお電源が同じ場合は同じ番号を記載すればよい.
if($ST::_multiple==4){ source "VCC1","channel=1,3,5,7","vh=$voltage","io"; #すべてのチップで電源が共通の場合は下記の通り # source "VCC1","channel=1,1,1,1","vh=$voltage","io"; channelfile "SN74HC161N.csv"; }else{ source "VCC1","channel=1","vh=$voltage","io"; channelfile "../eva100_test.csv"; }
hilevelテスタでDUTボード上の電源を利用する場合は,loc=でDUTボード上の電源位置を指定する. DUTボードの切り欠きを右下としたとき, 101ブロックは右上に来る. 101ブロック近傍の電源を101と定義する.
例: source "vdd"; source "vdd2","loc=101";
電源番号への変換は自動的に行なわれる.ハイレベル社のテスタでは,ボード毎のDPS(BDPS)を, (10117, 10118), (10317, 10318), (10517, 10518), (10717, 10718), (10917, 10918), (11117, 11118), (11317, 11318), (11517, 11518)に配している.これらを指定する場合は, loc=B101と指定する.
vh=で電源の電圧レベルを指定する.
例: source "vdd2","vh=2.5";
この指定をしない場合は, vhは, levelコマンドの入力ハイレベル電圧に設定される.
source_vdec;
このサブルーチンで, VDEC標準のピン配置にしたがい, VDEC標準DUTボードを使用した場合の電源の指定を自動的に行う.例えば, HP83000の場合は以下のコマンドを指定したのと全く同じ効果がある.
source "VDD","channel=12"; source "VDDO","channel=11";
probe ["ノード名","ノード名",...];
HSPICEでの波形出力を指定する.ピン名を省略すると,すべてのノードが出力される.ピン名を指定すると指定されたノードのみが出力される.
module "モジュール名";
verilog, hp82000, hp83000での回路モジュール名を指定する. verilogでは,指定したモジュール名のtestfixtureを作成する. hp82000, hp83000では,指定したモジュール名のディレクトリ下にテスタの設定ファイルが作成される.
verilog_logfile "ログファイル名"
期待値比較を行なった結果を出力するファイル名を指定する.デフォルトは"モジュール名.st.log"となる.期待値比較を行いたくない場合はログファイル名を空にする.シミュレーション実行時にSTLOGFILEをdefineするとそのファイルに期待値比較のログを出力する.与える場合には,ファイル名となるため,下記の通り”を'で囲む.
+define+STLOGFILE='"ログファイル名"'
vcd "出力VCDファイル名",出力レベル,[出力モジュール名1, 出力モジュール名2];
verilogのtestfixtureでの,出力波形ファイル名を,出力VCDファイル名で指定する.出力レベルは
なお,トップモジュールとは, moduleサブルーチンで指定したモジュールのことである.レベルが0,1の場合は,第3引数以降で,波形を出力させたいモジュールを複数指定することができる.波形を出力させたいモジュールは,トップモジュール以下の階層名で指定する.
vcd "calc.vcd",2;
calc.vcdに,トップモジュールの入出力ピンの波形のみを出力させる.
vcd "calc.vcd",0;
calc.vcdに,全波形を出力させる.
vcd "calc.vcd",1,"I0","I1";
トップモジュールの, I0とI1内の波形のみを出力する.
shm "出力shmファイル名" [,波形出力オプション];
"出力shmファイル名.shm"に,SHM形式の波形ファイルを出力する. SHM形式は, Cadence社が提供しているsimvisionで直接読める形式の波形ファイルである.ただし, Cadence社のシミュレータ以外はサポートしていない.デフォルトで設計階層に含まれるすべての信号を出力対象とする.シミュレーション時にSTSHMFILEをdefineすることにより出力波形ファイルを変更できる.この時,波形ファイル名には,.shmがつかないので注意せよ.
与える場合には,ファイル名となるため,下記の通り”の前にバックスラッシュを置く.
+define+STSHMFILE=\"SHMファイル名\"
波形を出力する階層を制限したいときは,階層名と上記のオプションを組み合わせて指定する.下記の通り指定すると, test.i1とtest.i2の信号のみが出力される.階層名はテスト対象となるトップモジュールより下位のものを指定する.
shm "出力shmファイル名" , "test.i1","A","test.i2","A";
なお, "A", "S"などの信号の出力対象を指定するものと同じ階層名を使用することはできない.
shm "test"
test.shmに波形を出力します.
sdf "SDFファイル名","インスタンス名";
Verilogシミュレーション時に,指定したSDF(Standard Delay Format)を読み込む.シミュレーションのトップモジュールに対してSDFを読み込む場合は,インスタンス名は省略可能.階層下のモジュールのインスタンスに対するSDFを読み込む場合は,トップモジュールを除いた階層インスタンス名を指定する.例えば, multiというトップモジュールのSDFファイル(multi.sdf)とその中のI0というモジュールのSDF(inst.sdf)を読み込みたい場合は下記の通り指定する.複数のsdfコマンドを実行して,複数のSDFファイルを読み込むことができる.
sdf "multi.sdf"; sdf "hier.sdf","I0";
シミュレーションの際は, SDFをdefineすることにより, SDFファイルが読み込まれる.
% verilog +define+SDF *****
comment "コメント";
出力ファイルにコメントを挿入する.いまのところ, spiceとverilogのみサポートしている.
simprintf "シミュレータ名","制御文";
特定のシミュレータ用の制御文を挿入する.
SPICE用のテストベンチを作成するときに,多ビットの入出力ピン(バス)をどのように展開するかを指定する.この指定がないときには,バスはVerilogと同じく,ピン名[%d]というフォーマットで出力される.例えば,ピン名%dというフォーマットにしたければ,
spice_vector_format "%d" ;
ピン名(%d)というフォーマットなら,
spice_vector_format "(%d)";
とすればよい.
hspice_wave_format "ascii|binary";
hspiceより出力される波形ファイルの形式を選択する.設定可能な値は,
VDECで試作した(する)LSIのシミュレーション測定用に一括設定用のコマンドを用意した.
vdec_chip "プロセス","チップサイズ","パッケージ","IOバッファ種類";
シミュレーション,テスト時の電源電圧,入力レベルを自動的に設定する.また,テスト時の電源の設定も自動的に行なう. level, source, channelfileコマンドが不要となる.
各引数の組合せは下記の通りである. hit018以外は,パッケージ, IOバッファの指定は不要である.
プロセス | チップサイズ | パッケージ | IOバッファ |
---|---|---|---|
onsemi | 23 | ||
onsemi | 48 | ||
onsemi | 73 | ||
rohm035 | 23 | ||
rohm035 | 49 | ||
rohm035 | 98 | ||
hit018 | 28 | ||
hit018 | 59 | pga | hitachi |
hit018 | 59 | bga | hitachi |
hit018 | 59 | pga | vdec |
hit018 | 59 | bga | vdec |
複数チップを同時に測定するマルチサイトテストを行うときにに指定する.マルチサイトテストとは,一つのDUTボードに複数の同じLSIを載せて測定することを意味する.想定しているのは,次のような構造のDUTボードである.
multiple(4);で4チップ同時測定となる.また,コマンドラインオプション-mでも,指定することができる. -mで指定した値は,変数$ST::_multipleに格納される. STのスクリプト上で, $ST::_multipleにて,動作の制御を行うことができる.この機能をサポートしているのは現在, hilevel社Griffin(ターゲット名hilevel)とAdvantest社のEVA100(ターゲット名EVA100)のみである.
マルチサイトテストを行うには, STのpinサブルーチンにて指定している"loc=ピン番号"の,ピン番号をテスタのチャネル番号に変換するcsvファイルを準備するだけで良い.たとえば,下記の例は, 1個のLSIを測定するさいに, X1.csv, 4個のLSIをマルチサイトで測定するさいにX4.csvを用いる.
if($ST::_multiple==1){ printf(STDERR "# of measurement chips is 1\n"); channelfile "X1.csv"; }elsif($ST::_multiple==4){ printf(STDERR "# of measurement chips is %d\n",$ST::_multiple); channelfile "X4.csv"; }
STでのピンの指定が次の通りであるとする.
pin "PLL_CLK","input","defval=0","loc=147"; pin "PLL_S","input","defval=0","loc=154"; pin "F_SHIFT_OUT","output","defval=X","loc=34","shortname=F_S_OUT";
PLL_CLKは, 147番ピン, PLL_Sは154番ピン, F_SHIT_OUTは34番ピンとなる. X1.csvでは次の通り, 147番ピンをテスタの260チャネル, 154番ピンを238チャネル, 34番ピンを130チャネルにそれぞれ割り当てている.
147,260 154,238 34,130
全4重化ボード用のX4.csvでは,次の通り, LSIの147ピンに対して,テスタの76, 241, 242, 77番のチャネルを割り当てている.これにより, PLL_CLKの入力波形は,テスタの76, 241, 242, 77番チャネルを通じて, 4つのLSIに供給される.他の入出力ピンについても同様である.
147,76,241,242,77 154,311,183,184,312 34,102,99,100,97
DUTボード上に搭載された4つのLSIのうち, 2個のLSIの入力を共有した半4重化DUTボードの場合は, X4.csvを次の通り修正する. LSIの147番ピンは,4つのLSIに供給されているが, 1つ目と4つ目のLSIは76チャネル, 2つ目と3つ目のLSIは241チャネルより信号が供給されることを意味する.出力ピンを共有することはできないため, F_SHIFT_OUTが接続されている34番ピンは4つの別々のチャネルに接続されている.
147,76,241,241,76 154,311,183,183,311 34,102,99,100,97
上記のように,全n重化と半n重化を切り替えるのは単に, channelfileで与えるcsvファイルの中身を書き換えるだけとなる.
mmsboardname "ボード名";
ターゲットをalteraにした際のFPGAボード名を記載する.現在対応しているのは,MU500と,MU200ECである.