apb_rw.svファイル内のapb_rwクラスで、次のようになっています。
`include "uvm_macros.svh" // `uvm_xxxマクロを使うために // 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 // print()を実行呼ばれたときに、実行される関数を定義 function string convert2string(); return $sformatf("kind=%s addr=%0h data=%0h",kind,addr,data); endfunction endclass: apb_rw
2つの例題の解説は、今回で終了です。次回からは、examples/simple/tlm2/temporal_decouplingです。
検証、Verification、SystemVerilog、UVM、Unified Verification Methodology