Berkeley TestFloat で検証したい

FPU の Verilog モデルを作成中ですが、自作ランダム検証ではなく、Berkeley TestFloat を使った検証を試してみます。これを使うと丸めモードを変更したり、フラグの期待値生成も簡単に出来るし、Intel CPU だと問題のある FMADD の期待値生成のことも考えずに済みます。
testfloat_gen を使って入力と期待値が生成できるようなので、そのフォーマットに合わせてテストベンチを作り直しました。入力データが特殊な時の処理とか、フラグ生成とかいろいろ追加が必要でしたが、これで品質が大きく向上するはずです。実際、FADD でバグ見つかりましたし…
こんな感じで流せます。結構時間かかります。
~/RISC-V/FunctionalUnit$ ../testfloat/berkeley-testfloat-3/build/Linux-x86_64-GCC/testfloat_gen -level 2 -f32_add | ./sim/Vfadd > log
~/RISC-V/FunctionalUnit$ ../testfloat/berkeley-testfloat-3/build/Linux-x86_64-GCC/testfloat_gen -level 2 -f32_mul | ./sim/Vfmul > log
仕様書をちゃんと確認してみると、tininess 検出は丸め後だったみたいです。で、試してみたんだけど、これって softfloat のほうが間違っているよね?結果が最小値なのにアンダーフローしてるし。サブノーマルの仮数が長すぎるまま判定しようと思って間違っているのだと思いますtininess の検出は結果を見て判断することにして、検証を続けようと思います。 [追記 僕の理解が間違っていたみたいなので、SoftFloat を元に戻してモデル記述を修正しました。]
~/RISC-V/testfloat/berkeley-testfloat-3/build/Linux-x86_64-GCC$ ./testfloat_gen -f32_mul|grep "[80]0800000 03$"
00800000 3F7FFFFF 00800000 03
00800000 BF7FFFFF 80800000 03
00FFFFFF 3F000000 00800000 03
00FFFFFF BF000000 80800000 03
3F000000 00FFFFFF 00800000 03
3F000000 80FFFFFF 80800000 03
3F7FFFFF 00800000 00800000 03
3F7FFFFF 80800000 80800000 03
80800000 3F7FFFFF 80800000 03
80800000 BF7FFFFF 00800000 03
80FFFFFF 3F000000 80800000 03
80FFFFFF BF000000 00800000 03
BF000000 00FFFFFF 80800000 03
BF000000 80FFFFFF 00800000 03
BF7FFFFF 00800000 80800000 03
BF7FFFFF 80800000 00800000 03

[PR]
トラックバックURL : http://tom01h.exblog.jp/tb/27486666
トラックバックする(会員専用) [ヘルプ]
※このブログはトラックバック承認制を適用しています。 ブログの持ち主が承認するまでトラックバックは表示されません。
by tom01h | 2017-01-29 00:07 | PCとか | Trackback | Comments(0)