Vengineerの妄想(準備期間)

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

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


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

シーケンサに対するデータではないので、uvm_sequence_itemではなく、
uvm_transactionの方がいいと思う!

    `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