■
はじめに
諸事情によりUVMのコードを載せてみます。今回は最小限のHelloWorldテストなので、何の約にもたたないと思います。
なお、ソースコードはGitHubにあります。
このブログで扱うソースコードはできるだけGitHubにあげていきます。ライセンスなどご確認頂いた上でお好きにお使い下さい。 今回のコードはこちらになります。
GitHub - systemverilog-uvm - uvm_hello_world_test
中身の説明は後ほど...更新しました(2015/11/12)
ファイル構成
- uvm_hello_world_pkg.sv ... テストをインクルードするパッケージです。
- uvm_hello_world_test.sv ... テストです。
- uvm_hello_world_tb.sv ... テストベンチです。
それぞれの説明
uvm_hello_world_pkg.sv
パッケージでテストをインクルードしています。理由は...特に...ありません...osz ですが、テスト構成物が増えてくると、テストベンチが使うものをパッケージ化してインクルードする構成も悪くないと思います。 ⇒ 今回はテストしかインクルードしていないのでもったいない印象ですが...
package uvm_hello_world_pkg; import uvm_pkg::*; `include "uvm_hello_world_test.sv" endpackage : uvm_hello_world_pkg
uvm_hello_world_test.sv
テストファイルです。 uvm_testクラスを継承して、run_phase()でuvm_infoを使って文字列表示しています。 特に何もしていません...すみません...
`include "uvm_macros.svh" import uvm_pkg::*; class uvm_hello_world_test extends uvm_test; `uvm_component_utils(uvm_hello_world_test) function new(string name, uvm_component parent); super.new(name, parent); endfunction task run_phase(uvm_phase phase); phase.raise_objection(this); `uvm_info("TEST", "UVM_HELLO_WORLD !!!", UVM_MEDIUM); phase.drop_objection(this); endtask endclass
uvm_hello_world_tb.sv
テストベンチファイルです。 テストをインクルードするパッケージをインクルードしてrun_test()を呼んでいます。 はいそれだけです。
`include "uvm_macros.svh" `include "uvm_hello_world_pkg.sv" // `include "uvm_hello_world_test.sv" import uvm_pkg::*; import uvm_hello_world_pkg::*; module uvm_hello_world_tb(); initial run_test(); endmodule
run.do
ModelSim用の実行スクリプトです。 シミュレーション実行時にUVM_TESTNAMEでテストファイルのクラス名を与えています。 なお、シミュレーション実行前には各ファイルをコンパイルしておいて下さい(vlib、vlog)
vsim -c uvm_hello_world_tb +UVM_TESTNAME=uvm_hello_world_test
続きはまた後ほど...更新しました(2015/11/13)
実行結果
ModelSim実行時のログを示します。 uvm_infoで表示した [TEST] UVM_HELLO_WORLD !!! が確認できます。
# UVM_INFO verilog_src/questa_uvm_pkg-1.2/src/questa_uvm_pkg.sv(215) @ 0: reporter [Questa UVM] QUESTA_UVM-1.2.2 # UVM_INFO verilog_src/questa_uvm_pkg-1.2/src/questa_uvm_pkg.sv(217) @ 0: reporter [Questa UVM] questa_uvm::init(+struct) # UVM_INFO @ 0: reporter [RNTST] Running test uvm_hello_world_test... # UVM_INFO uvm_hello_world_test.sv(13) @ 0: uvm_test_top [TEST] UVM_HELLO_WORLD !!! # UVM_INFO verilog_src/uvm-1.1d/src/base/uvm_objection.svh(1268) @ 0: reporter [TEST_DONE] 'run' phase is ready to proceed to the 'extract ' phase
今日はここまで
以上全く役に立たないUVMテストでした。ですが今回用意したパッケージにenvやagentやモデル、モニタ、スコアボードなどを追加していくとボトムアップ的にUVM環境構築できる気もします。 ということで、次回は、ここからもう少しボトムアップしたベンチを示したいと思っています。