01日目~Hello World
UVMクラスライブラリのコンパイル
- UVMクラスライブラリのpackageをコンパイルします
- vlib work
- set dir = ../uvm-1.1d/src.(ここはUVMクラスライブラリを展開したディレクトリをセットします)
- vlog -sv $dir/uvm_pkg.sv +incdir+$dir +define+UVM_HDL_NO_DPI+UVM_NO_DPI+UVM_CMDLINE_NO_DPI+UVM_REGEX_NO_DPI
- defineは、UVMのDPI動作モードをOFFにするためのものです。modelsim-aseにおいて、DPI単体の動作確認はできていますが、UVMに含まれるDPI周りの機能はうまく有効化できなかったので、 OFFにします。
注:コンパイルすると、Warningが出ます。これは、UVMが使用しているSystemVerilogのrandomizeメソッドをmodelsim-aseがサポートしていないためです。randomizeメソッド周りの動作は使えませんが、使 えなくてもUVMの恩恵はある程度受けられます。
UVMをテストベンチに組み込む
- 次のファイルを作成します。tb_top.sv (名前は異なっても構いません)
`timescale 1ps/1ps
module tb_top;
`include "uvm_macros.svh"
import uvm_pkg::*;
endmodule
- 問題なくコンパイルできることを確認します。
- vlog -sv +incdir+../uvm-1.1d/src tb_top.sv
- 実行すると、以下のようなログが表示されます。
- vsim -c tb_top -do "run -all;quit"
# run -all
# ----------------------------------------------------------------
# UVM-1.1d
# (C) 2007-2013 Mentor Graphics Corporation
# (C) 2007-2013 Cadence Design Systems, Inc.
# (C) 2006-2013 Synopsys, Inc.
# (C) 2011-2013 Cypress Semiconductor Corp.
# ----------------------------------------------------------------
#
# *********** IMPORTANT RELEASE NOTES ************
#
# You are using a version of the UVM library that has been compiled
# with `UVM_NO_DEPRECATED undefined.
# See http://www.eda.org/svdb/view.php?id=3313 for more details.
#
# You are using a version of the UVM library that has been compiled
# with `UVM_OBJECT_MUST_HAVE_CONSTRUCTOR undefined.
# See http://www.eda.org/svdb/view.php?id=3770 for more details.
#
# (Specify +UVM_NO_RELNOTES to turn off this notice)
#
# quit
UVMでHello World
- UVMは、uvm_testというclassを呼び出します。
- module tb_topの「中」に、以下の記述を追加します。
class sample_test extends uvm_test;
`uvm_component_utils(sample_test)
function new (string name="sample_test", uvm_component parent=null);
super.new(name,parent);
endfunction
task run_phase(uvm_phase phase);
uvm_report_info("TEST", "Hello World");
endtask
endclass
- さらに、moduleの中に以下を追記します。
initial begin
run_test("sample_test");
end
- 問題なくコンパイルできることを確認します。
- vlog -sv +incdir+../uvm-1.1d/src tb_top.sv
- 実行すると、ログの中に以下の行が表示されます。
- vsim -c tb_top -do “run -all;quit”
# UVM_INFO @ 0: reporter [RNTST] Running test sample_test...
# UVM_INFO @ 0: uvm_test_top [TEST] Hello World
- run_testは、標準的な使い方では引数を与えないので、initial文を修正します。
initial begin
run_test(); //ここ
end
- 問題なくコンパイルできることを確認します。
- vlog -sv +incdir+../uvm-1.1d/src tb_top.sv
- 実行するときに、uvm_test名を渡します。以下のメッセージが表示されます。
- vsim -c tb_top +UVM_TESTNAME=sample_test -do “run -all;quit”
# UVM_INFO ../uvm-1.1d/src/base/uvm_root.svh(370) @ 0: reporter [NO_DPI_TSTNAME] UVM_NO_DPI defined--getting UVM_TESTNAME directly, without DPI
# UVM_INFO @ 0: reporter [RNTST] Running test sample_test...
# UVM_INFO @ 0: uvm_test_top [TEST] Hello World
- uvm_test名を間違えると、以下のメッセージが表示されます
- vsim -c tb_top +UVM_TESTNAME=sample -do “run -all;quit”
# UVM_WARNING @ 0: reporter [BDTYP] Cannot create a component of type 'sample' because it is not registered with the factory.
# UVM_FATAL @ 0: reporter [INVTST] Requested test from command line +UVM_TESTNAME=sample not found.