STでは, Verilog, VHDL, hspice, finesim, eldo, SystemCのシミュレーション時に,期待値比較を行なうことができる. Verilog, VHDL, SystemCでは,言語自体の持つSyntaxを利用して,出力値と期待値の比較を行なうことにより,シミュレーションのみで期待値比較を行なうことができる. hspice, finesim, eldoは,期待値比較の機能を内蔵しているためにその機能を利用している.
Verilogでは,期待値との比較を行うことができる.この比較はVerilogの通常のシンタックスにより行われる. PLIによる拡張ではないので,そのままのVerilogを使用することができる.
比較結果はst.logというファイルに,期待値とシミュレーションとの比較結果が出力される.
期待値とシミュレーションが異なる場合,以下のように出力される.
cycle(time): pin: exp. val != sim. result 2(200): out: 2 !=1 3(300): out: 5 !=6
2が,サイクル数, 200が, timingサブルーチンの最初の引数(最小時間単位)を単位とした,比較した時刻, outがピンの名前, 5が期待値, 3がシミュレーション結果となる.
期待値とシミュレーション結果が異なる場合,
Some simulation mismatches are detected!
が,また全く同じ場合は
No simulation mimatch is detected!
というメッセージがlogファイル(通常はverilog.log)に出力される.
なお, waveformサブルーチンで, windowを指定しても, edgeでの比較となる.
waveform "output","window","........%%","out","overflow","sign";
は,
waveform "output","edge","........%.","out","overflow","sign";
と同じ意味になり, 1サイクルが100nsの場合, 80nsで値の比較が行われる.
HSPICE/finesimは, .dout構文を用いることにより,期待値比較が行なわれる.シミュレーション実行後のHSPICEの出力ファイルに下記の通りのメッセージが表示される. c0はエラー無しであるが,それ以外のC1からc4は, 490nsに期待値との相違が起こっている
*****Output vector error report***** output signal at node[(c0 ]: verified with no error. output signal at node[(c1 ]: **warning**:incorrect logic state at node[(c1 ] time= 0.4900E-06, low \ expected! output signal at node[(c2 ]: **warning**:incorrect logic state at node[(c2 ] time= 0.4900E-06, low \ expected! output signal at node[(c3 ]: **warning**:incorrect logic state at node[(c3 ] time= 0.4900E-06, low \ expected! output signal at node[(c4 ]: verified with no error.
eldoでは,.setbus, .checkbusコマンドにより期待値比較が行える."-t eldo"でベクタを作成したさい,下記の通りの期待値比較記述が出力される.比較される名前は,ピン名がOUTの場合,OUT_busとなる.
.setbus OUT_bus OUT[7] OUT[6] OUT[5] OUT[4] OUT[3] OUT[2] OUT[1] OUT[0] .checkbus OUT_bus VTH=0.4 VTH2=0.6 BASE=HEXA +1.950000e-08 0 +2.450000e-08 1 +2.950000e-08 2 +3.450000e-08 3 +3.950000e-08 4
シミュレーション後のログファイルに,下記の通り,出力されていれば期待値とシミュレーション値が一致している.
CHECKBUS PASS on OUT_BUS
一致しない場合は下記の通り,表示される.
0**** CHECKBUS INFORMATION TEMPERATURE = 27.000 DEG C 0*********************************************************** at time 7.000000e+01 ns bus OUT_BUS is 0A and should be B CHECKBUS FAIL on OUT_BUS Number of checkbus tested : 12 Number of checkbus passed : 11 Number of checkbus warnings : 0 total number of checkbus errors : 1