Vengineerの妄想(準備期間)

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

OVM : ovm_voidとovm_object

Verification Engineerの戯言

OVMのクラス関係を探っていきます。
まずは、すべての親になるクラスovm_objectクラスです。
メンバーは、持ちません。
リファレンス・マニュアルでは仮想クラスですが、ソースコードでは仮想クラスになっていません。
どちらが正しいのか? たぶんリファレンス・マニュアルの方なのだろうな!
(MentorのTomさんによると、ソースコードの方が正しいようで、実装コードを優先するようです。1/15)

src/ovm_misc.svh
    virtual class ovm_void;
    endclass

ovm_voidクラスを継承するのは、ovm_objectクラスでOVMのすべてのデータおよび階層クラスの親クラスです。
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);
endclass
do_xxx関数に対応するxxx関数の違いは、do_xxx関数は自分自身に対して実行しますが、
xxx関数は下位階層に対してdo_xxx関数を実行するもののようです。

このxxx関数は、[ ovm_sequence_itemクラス]で説明したOVM_ALL_ONマクロで説明した
PRINT、COPY、COMPARE、PACK等に関連しています。

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