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 endclassvmm_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