2011年6月19日日曜日

CAN IPのDEBUG 2

・・・という訳でtest benchが出来上がった。
directory構造は下のようになっている。
simulation環境はsim以下だ。



ref_model にOpenCoresのCAN IPのRTL、
tbench下はtest bench関係、vect下にはtest vectorが収容される。
test vectorはverilogで記述する。これはsimulation時にtest benchに
include される。


こうすることで、共通のframeworkを使いながら最大の自由度が得られる。
・・・んじゃないかなと思う。

標準的なtest vectorは以下のような感じで記述するが、verilogでtest benchの一部として
記述するので基本的には何でも有りだ。
冒頭で start_tb を待っているが、このstart_tbはresetやReference Modelの初期化終了後に
1になる信号だ。 また、最後のsim_endはsimulation終了を通知するeventだ。



simulationの実行はsim_exec下でdo_simというshell scriptで行う。
do_simのusageは以下の通りだ。



今回のIPのsimulationはassertion向きな気がしているので、
Coveredによるcoverage計測もできるようにしている。
使用するverilog simulatorはIcarus VerilogとGPL Cverの何れかを指定可能で、
環境変数SIMULATORにiverilogまたはcverを設定する。
環境変数が設定されていない場合はiverilogが使用される。
波形はvcd形式とfst形式の何方かを指定できる。何方かを指定しないと生成されない。
fstはGTKWaveがsupportしているfile formatで、vcdに比べfile sizeが小さくなる。
cverは元々fst形式のdump機能を持っていないが、GTKWaveの作者が機能拡張した版を
公開している。
http://gtkwave.sourceforge.net/gplcver-2.12a_fst.src.tar.gz

-cln はsim_exec下をdo_simのみを残して全て削除する。
何もかもを消して全てを忘れたい時に実行する・・・じゃ無くて、simulationを続けていると
sim_exec下にlogやら波形fileやらcoverage fileやらが溜まっていくのでこれらを消して、
初期状態に戻したいときに実行する。



このtest benchはReference ModelのNodeを1つと自作IPのNode 3つで構成している。

この環境でsimulationを実行して得た波形を表示したのが以下だ。

また、coverage計測を実行して得られた結果をcoveredで表示している様子が以下だ。

0 件のコメント:

コメントを投稿

自作CPUで遊ぶ 25

まだ制御ソフトが完成していないので今まではスピンドルを移動するために一々簡単なプログラムを書いて移動させていたのだが、非常に面倒なのでCNCペンダント的なものを作ることにした。 右側の縦に2つ並んでいるスイッチ...