Verification Engineerの戯言
VMMにおけるvmm_dataクラスに対して、URMではurm_sequence_itemクラスであることは、ここに書きましたが、
OVMでは、URMのurm_sequence_itemクラスを受け継いだovm_sequence_itemクラスになるようです。
src/methodology/sequence/ovm_sequence_item.svh
ovm_transationクラスを継承することで、データの記録ができます。
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(); endclassovm_sequence_itemクラスは、ovm_transactionクラスを継承します。
ovm_transationクラスを継承することで、データの記録ができます。
examples/sequence/simple_item.svにovm_sequence_itemクラスの例題があります。
メンバとしてint unsignedのaddrとdataを持ち、それぞれ制約(constraints)を持っています。
ここまでは普通のSystemVerilogのクラスですが、その次のovm_object_utils_beginとovm_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_COPY、OVM_COMPARE、OVM_PRINT、OVM_PACKマクロを
指定したことになり、simple_itemクラスでは、COPY、COMPARE、PRINT、PACKに対応する関数が自動的に定義されます。
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_itemsimple_itemクラスは、ovm_sequence_itemクラスを継承します。
メンバとしてint unsignedのaddrとdataを持ち、それぞれ制約(constraints)を持っています。
ここまでは普通のSystemVerilogのクラスですが、その次のovm_object_utils_beginとovm_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_COPY、OVM_COMPARE、OVM_PRINT、OVM_PACKマクロを
指定したことになり、simple_itemクラスでは、COPY、COMPARE、PRINT、PACKに対応する関数が自動的に定義されます。
検証、Verification、SystemVerilog、OVM、Open Verification Methodology