(追記:2018/05/04)
GitHubに公開しているツールを修正しました。multi指定を"y"にした場合に出力されるコードも、サンプルを修正することなく実行できるようになりました。以下に書いていた追記は削除しましたので、multiオプションを"y"にして問題が出る方は、最新版のツールをGitHubから持ってきて実行してください。
-----
なんちゃって、UVMモデル生成ヘルパーです。ツールはGitHubに置いてあります。→ 一応GitHubにアップしている最新のコードをページ最後尾にコピペしておきました。表示設定に「小」が追加されて、コードを置くのが便利になりました。
簡単に作れると思ったのですが、どこまでサポートしようかと悩みつつ書いてたら、結構時間がかかり+汚いコードになりました。
以下の手順に沿うと、誰でもなんちゃってUVMモデルを作成して動かすことができますが、それをベースに展開するにはその人のスキルが必要です。なので、あまり実用的ではないかもです。
ベータ版リリースなので、作者の気まぐれでバージョンアップする可能性はあります。
このツールのオススメは、「新規にモデルを作るときに、既存モデルを変更して作るのが面倒」なとき。指定した名前のモデルとモデルの単体検証環境ひな形を生成するので、それを修正する方が早いかも…し れません。
とりあえず動かしてみるときの推奨オプション。ツールは引数なしで実行します。そして
でお願いします。ツール実行後、カレントディレクトリに「uvm-1.1d」を展開していれば、以下の手順で動作させることができます。
これで動きます。上記3つのツールは、このページの最後にコードを貼り付けておきますので、使いたい方はコピーして使ってください。ただし、modelsim用です。Questaでも動くとは思います。
--- create_pkg
#!/usr/bin/tcsh -f
if ( ! ( -d work ) ) vlib work
set dir = ../uvm-1.1d/src
vlog -sv $dir/uvm_pkg.sv +incdir+$dir +define+UVM_HDL_NO_DPI+UVM_NO_DPI+UVM_CMDLINE_NO_DPI+UVM_REGEX_NO_DPI+UVM_NO_DEPRECATED
--- compile
#!/usr/bin/tcsh -f
vlog -sv body/*_if.sv
vlog -sv tb/tb_top.sv +incdir+./body+./tb+./seq+../uvm-1.1d/src
--- run
#!/usr/bin/tcsh -f
set TEST = $1
if ( $1 == "" ) set TEST = sample_test
vsim -c tb_top +UVM_TESTNAME=$TEST -do "run -all;quit"
ーーーーー
以下は、以前書いた追記の保存です(消そうと思いましたが、残しておきます)
(追記:2018/04/15)
ツールのオプションで、"multi?"と聞かれた際に"y"で答えたとき、出力されるコードの間違いがあります。ツールを直せばいいのですが、取り急ぎ出力コードの修正方法を書いておきます。
`set_seq(tb.sample.masters[0].sequencer.run_phase, master_sample_seq)
出力コードは、「master」になっていました。
build_phaseで、sample_envを生成する前に以下の行を追加します(これは間違いではなくて、ツールの都合で入れてなかった)
uvm_config_db#(int)::set(this, "sample", "num_masters*", 1);
for文の定義で、num_masters-1と出力していましたが、"-1"が余計でした。
また、mastersを生成する記述で、最後に"parent"を指定するところ、"this"と入れれば良いのですが、入れ忘れてました…。
修正前
for(i=0; i<num_masters-1; i++)begin
masters[i] = sample_master_agent::type_id::create($sformatf("masters[%0d]", i));
end
修正後
for(i=0; i<num_masters; i++)begin
masters[i] = sample_master_agent::type_id::create($sformatf("masters[%0d]", i),this);
end
以下にもコードを置いておきます。