Vengineerの妄想(準備期間)

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

OVM-VMM Encapsulation Library(その1)

Verification Engineerの戯言

OVM-VMM Encapsulation Libraryでは、次のようなクラスを提供しています。
    ovm_vmm_data#(T)            -- vmm data wrapper
    ovm_vmm_sequencer#(T,CH)    -- vmm scenario generator wrapper
    ovm_vmm_env#(T)             -- vmm environment wrapper
    vmm_channel_to_tlm_ap#(V,O) -- connect a channel to an analysis port

これらのクラスは、VMMの各クラスをOVMの環境で使うためのクラスです。
各クラスは、sv/ovm_vmm_interop.svhファイルで定義されています
今回は、ovm_vmm_data#(T)クラスを見てみます。
    class ovm_vmm_data #(type T=vmm_data) extends ovm_sequence_item;
        rand T trans;

        function new(string name="", T intrans=null);
            super.new(name);
            //allocate vmm_data object if not provided in construction
            if(intrans == null) 
                intrans = new;
            trans = intrans;
        endfunction

        `ovm_object_registry(ovm_vmm_data#(T),"")
        `ovm_object_create_func(ovm_vmm_data#(T))
        `ovm_get_type_name_func(ovm_vmm_data#(T))

        function void do_copy(ovm_object rhs);
        function bit do_compare(ovm_object rhs, ovm_comparer comparer);
        function void do_print(ovm_printer printer);
    endclass

ovm_vmm_data#(T)クラスは、ovm_sequence_itemクラスを継承します。
このとき、テンプレートとして、type T=vmm_dataを使います。
このテンプレートで指定されたクラスは、ovm_vmm_data#(T)クラスのメンバー変数transの型として使います。

new関数では、名前の他に、T intransを引数に取ることができます。
T intransはデフォルト値として、nullを取ります。
intrasが指定されないときは、new関数内部でtransのインスタンスを生成します。

こうすることでovm_vmm_data#(T)クラスは、ovm_sequencerクラスに渡すことができます。
次は、ovm_vmm_sequencerクラスについてみていきます。

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