Vengineerの妄想(準備期間)

人生は短いけど、長いです。人生を楽しみましょう!

UVM 1.0 : examples/simple/tlm2/temporal_decoupling (その5)


apb_rw.svファイル内のapb_rwクラスで、次のようになっています。

シーケンサに対するデータではないので、uvm_sequence_itemではなく、uvm_transaction
方がいいと思う!(examples/simple/tlm2/basic_blockingと同じです)
examples/simple/tlm2/basic_blockingapb_pkg.svに対して、package/endpackageで囲んでいます。
  package apb_pkg;                          // apb_pkgパッケージにする

    import uvm_pkg::*;                      // UVMパッケージを読み込む

    class apb_rw extends uvm_sequence_item; // uvm_sequence_itemを継承する


      typedef enum {READ, WRITE} kind_e;    // typedef enumでkind_eを定義 
      rand bit   [31:0] addr;               // randを指定し、ランダム生成できるように
      rand logic [31:0] data;
      rand kind_e kind;  

      `uvm_object_utils_begin(apb_rw)   // set_config_xxx/get_config_xxxのためのおまじない
        `uvm_field_int(addr,         UVM_ALL_ON | UVM_NOPACK);
        `uvm_field_int(data,         UVM_ALL_ON | UVM_NOPACK);
        `uvm_field_enum(kind_e,kind, UVM_ALL_ON | UVM_NOPACK);
      `uvm_object_utils_end

      function new (string name = "apb_rw");
        super.new(name);
      endfunction

      function string convert2string(); // print()を実行呼ばれたときに、実行される関数を定義
        return $sformatf("kind=%s addr=%0h data=%0h",kind,addr,data);
      endfunction

    endclass: apb_rw
  endpackage


examples/simple/tlm2/basic_blockingと違う点がもう一つあります。
    `include "uvm_macros.svh"
がありません。

通常なら`uvm_xxxマクロを使っているので、このインクルード文は必要です。
では、なぜ無いのでしょうか?

それは、examples/Makefile.questaVLOGマクロに
       $(UVM_HOME)/src/uvm.sv
があります。このファイル(uvm.sv)の内容は、
`include "uvm_pkg.sv"
です。
下記のように、uvm_pkg.svの中で、"uvm_macros.svh"をインクルードしているからです。
  `ifndef UVM_PKG_SV
  `define UVM_PKG_SV

  `include "uvm_macros.svh"

  package uvm_pkg;

    `include "dpi/uvm_dpi.svh"
    `include "base/base.svh"
    `include "tlm1/uvm_tlm.svh"
    `include "comps/comps.svh"
    `include "seq/seq.svh"
    `include "tlm2/tlm2.svh"
    `include "reg/uvm_reg_model.svh"

  endpackage

  `endif

MentorのQuestaでは、ソースコードコンパイルされているので、
上記のuvm_pkg.svのソースコードは読み込まないので、ユーザーコードには、
  `include "uvm_macros.svh"
が必要になります。

次の例題は、examples/simple/sequence/basic_read_write_sequence です。

検証、Verification、SystemVerilog、UVM、Unified Verification Methodology