カミは死んだ

Paper Is Dead ... osz

はじめに

諸事情により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環境構築できる気もします。 ということで、次回は、ここからもう少しボトムアップしたベンチを示したいと思っています。