01日目~Hello World

UVMクラスライブラリのコンパイル

  • UVMクラスライブラリのpackageをコンパイルします
    1. vlib work
    2. set dir = ../uvm-1.1d/src.(ここはUVMクラスライブラリを展開したディレクトリをセットします)
    3. 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.