Verification Engineerの戯言 : SystemVerilogの世界へようこそ
オブザーバークラスが複数のvmm_tlm_analysis_exportクラスのインスタンスを持つことはできません。
なぜなら、write関数が複数ポートに対応できないためです。
そこで登場するのは、vmm_tlm_analysis_exportマクロです。クラスではありません。
なぜなら、write関数が複数ポートに対応できないためです。
そこで登場するのは、vmm_tlm_analysis_exportマクロです。クラスではありません。
class tlm_scoreboard2 extends vmm_group;
`vmm_tlm_analysis_export(_1)
`vmm_tlm_analysis_export(_2)
vmm_tlm_analysis_export_1#(tlm_scoreboard2,my_trans) scb1;
vmm_tlm_analysis_export_2#(tlm_scoreboard2,my_trans) scb2;
function write_1 (int id=-1,my_trans trans);
`vmm_note(log, $psprintf("Received %s from %0d", Trans.psdisplay(""), id);
endfunction
function write_2 (int id=-1,my_trans trans);
`vmm_note(log, $psprintf("Received %s from %0d", Trans.psdisplay(""), id);
endfunction
endclass
vmm_tlm_analysis_exportマクロを使って、2つのExportを定義します。定義したExportのクラス名は、vmm_tlm_analysis_export_1とvmm_tlm_analysis_export_2になります。
vmm_tlm_analysis_exportマクロの引数として指定した"_1"と"_2"がvmm_tlm_analysis_portの後に追加されたことになります。
この2つのクラスに対して、scb1とscb2というポートをインスタンス化します。
(ここでは、new関数でインスタンス化する部分はありませんが)
各ポートに対応するwrite関数であるwrite_1とwrite_2も定義します。
"_1"と"_2"になるのは、vmm_tlm_analysis_exportマクロの引数として"_1"と"_2"を指定しているからです。
"_1"と"_2"になるのは、vmm_tlm_analysis_exportマクロの引数として"_1"と"_2"を指定しているからです。
検証、Verification、SystemVerilog、VMM、Verification Methodology Manual