Vengineerの妄想(準備期間)

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

OVM : ovm_sequence_itemクラス

Verification Engineerの戯言

VMMにおけるvmm_dataクラスに対して、URMではurm_sequence_itemクラスであることは、ここに書きましたが、
OVMでは、URMのurm_sequence_itemクラスを受け継いだovm_sequence_itemクラスになるようです。
src/methodology/sequence/ovm_sequence_item.svh
    class ovm_sequence_item extends ovm_transaction;
        function new (input string name="ovm_sequence_item",
                      ovm_sequencer_base sequencer=null,
                      ovm_sequence parent_seq=null);
        bit print_sequence_info = 0;
        function void set_sequencer(ovm_sequencer_base sequencer);
        function ovm_sequencer_base get_sequencer();
        function void set_parent_seq(ovm_sequence parent);
        function ovm_sequence get_parent_seq();
        virtual function int is_item();
        function int get_depth();
    endclass
ovm_sequence_itemクラスは、ovm_transactionクラスを継承します。
ovm_transationクラスを継承することで、データの記録ができます。

examples/sequence/simple_item.svにovm_sequence_itemクラスの例題があります。
class simple_item extends ovm_sequence_item;

  rand int unsigned addr;
    constraint c1 { addr < 16'h2000; }
  rand int unsigned data;
    constraint c2 { data < 16'h1000; }

  `ovm_object_utils_begin(simple_item)
    `ovm_field_int(addr, OVM_ALL_ON)
    `ovm_field_int(data, OVM_ALL_ON)
  `ovm_object_utils_end

  // new - constructor
  function new (string name = "simple_item");
    super.new(name);
  endfunction : new

endclass : simple_item
simple_itemクラスは、ovm_sequence_itemクラスを継承します。
メンバとしてint unsignedのaddrとdataを持ち、それぞれ制約(constraints)を持っています。
ここまでは普通のSystemVerilogのクラスですが、その次のovm_object_utils_beginovm_object_utils_endで囲まれた部分がovm_sequence_itemクラスの特徴です。
ovm_object_utils_beginマクロの引数には、クラス名(simple_item)を渡します。
このマクロで囲まれた部分はフィールドのautomation(自動生成)を行うために必要なメンバをovm_field_xxxマクロを使って登録します。
xxxのところは、メンバの型にあったものを使います。上記の例題では、メンバのaddrとdataがint unsignedであるのでovm_object_intマクロを使って登録します。
各型に対応するマクロは、リファレンス・マニュアルのPage.261-262に説明があります。
第2引数のOVM_ALL_ONについては、リファレンス・マニュアルのPage.262のFields MacrosのTable 1-5 Field Macro Flagsに説明があります。
また、マクロ定義部分はsrc/base/ovm_object_globals.svhです。
OVM_ALL_ONマクロを指定すると、OVM_COPYOVM_COMPAREOVM_PRINTOVM_PACKマクロを
指定したことになり、simple_itemクラスでは、COPY、COMPARE、PRINT、PACKに対応する関数が自動的に定義されます。

検証、Verification、SystemVerilog、OVM、Open Verification Methodology