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)クラスを見てみます。
各クラスは、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の型として使います。
このとき、テンプレートとして、type T=vmm_dataを使います。
このテンプレートで指定されたクラスは、ovm_vmm_data#(T)クラスのメンバー変数transの型として使います。
new関数では、名前の他に、T intransを引数に取ることができます。
T intransはデフォルト値として、nullを取ります。
intrasが指定されないときは、new関数内部でtransのインスタンスを生成します。
T intransはデフォルト値として、nullを取ります。
intrasが指定されないときは、new関数内部でtransのインスタンスを生成します。
こうすることでovm_vmm_data#(T)クラスは、ovm_sequencerクラスに渡すことができます。
次は、ovm_vmm_sequencerクラスについてみていきます。
次は、ovm_vmm_sequencerクラスについてみていきます。
検証、Verification、SystemVerilog、VMM、OVM、Verification Methodology Manual、Open Verification Methodology