apb_rw.svファイル内のapb_rwクラスで、次のようになっています。
シーケンサに対するデータではないので、uvm_sequence_itemではなく、uvm_transactionの
方がいいと思う!(examples/simple/tlm2/basic_blockingと同じです)
examples/simple/tlm2/basic_blockingのapb_pkg.svに対して、package/endpackageで囲んでいます。
方がいいと思う!(examples/simple/tlm2/basic_blockingと同じです)
examples/simple/tlm2/basic_blockingのapb_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.questaのVLOGマクロに
下記のように、uvm_pkg.svの中で、"uvm_macros.svh"をインクルードしているからです。
$(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のソースコードは読み込まないので、ユーザーコードには、
上記のuvm_pkg.svのソースコードは読み込まないので、ユーザーコードには、
`include "uvm_macros.svh"が必要になります。
次の例題は、examples/simple/sequence/basic_read_write_sequence です。
検証、Verification、SystemVerilog、UVM、Unified Verification Methodology