Verification Engineerの戯言
OVMのクラス関係を探っていきます。
まずは、すべての親になるクラスovm_objectクラスです。
メンバーは、持ちません。
リファレンス・マニュアルでは仮想クラスですが、ソースコードでは仮想クラスになっていません。
どちらが正しいのか? たぶんリファレンス・マニュアルの方なのだろうな!
(MentorのTomさんによると、ソースコードの方が正しいようで、実装コードを優先するようです。1/15)
まずは、すべての親になるクラスovm_objectクラスです。
メンバーは、持ちません。
リファレンス・マニュアルでは仮想クラスですが、ソースコードでは仮想クラスになっていません。
どちらが正しいのか? たぶんリファレンス・マニュアルの方なのだろうな!
(MentorのTomさんによると、ソースコードの方が正しいようで、実装コードを優先するようです。1/15)
src/ovm_misc.svh
virtual class ovm_void; endclass
ovm_voidクラスを継承するのは、ovm_objectクラスでOVMのすべてのデータおよび階層クラスの親クラスです。
src/ovm_object.svh
xxx関数は下位階層に対してdo_xxx関数を実行するもののようです。
src/ovm_object.svh
virtual class ovm_object extends ovm_void; function new (string name=""); static bit use_ovm_seeding = 1; function void reseed (); pure virtual function ovm_object create (string name=""); virtual function ovm_object clone (); pure virtual function string get_type_name (); function string get_name (); function string sprint (ovm_printer printer=null); function void record (ovm_recorder recorder=null); function void copy (ovm_object rhs); function bit compare (ovm_object rhs, ovm_comparer comparer=null); function void print (ovm_printer printer=null); function int pack (ref bit ovm_bitstream_t[], input ovm_packer packer=null); function int unpack (ref bit ovm_bitstream_t[], input ovm_packer packer=null); function int pack_bytes (ref byte ovm_bitstream_t[], input ovm_packer packer=null); function int unpack_bytes (ref byte ovm_bitstream_t[], input ovm_packer packer=null); virtual function void do_record (ovm_recorder recorder); virtual function void do_copy (ovm_object rhs); virtual function bit do_compare (ovm_object rhs, ovm_comparer comparer); virtual function void do_print (ovm_printer printer); virtual function void do_pack (ovm_packer packer); virtual function void do_unpack (ovm_packer packer); virtual function void set_name (string name); virtual function string get_full_name (); virtual function void set_int_local (string field_name, ovm_bitstream_t value); virtual function void set_object_local (string field_name, ovm_object value, bit clone=1); virtual function void set_string_local (string field_name, string value); endclassdo_xxx関数に対応するxxx関数の違いは、do_xxx関数は自分自身に対して実行しますが、
xxx関数は下位階層に対してdo_xxx関数を実行するもののようです。
このxxx関数は、[ ovm_sequence_itemクラス]で説明したOVM_ALL_ONマクロで説明した
PRINT、COPY、COMPARE、PACK等に関連しています。
PRINT、COPY、COMPARE、PACK等に関連しています。
検証、Verification、SystemVerilog、OVM、Open Verification Methodology