Vengineerの妄想(準備期間)

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

VMM : vmm_tlm_analysis_exportマクロ

Verification Engineerの戯言 : SystemVerilogの世界へようこそ

オブザーバークラスが複数の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_1vmm_tlm_analysis_export_2になります。
vmm_tlm_analysis_exportマクロの引数として指定した"_1"と"_2"がvmm_tlm_analysis_portの後に追加されたことになります。
この2つのクラスに対して、scb1scb2というポートをインスタンス化します。
(ここでは、new関数でインスタンス化する部分はありませんが)

各ポートに対応するwrite関数であるwrite_1write_2も定義します。
"_1"と"_2"になるのは、vmm_tlm_analysis_exportマクロの引数として"_1"と"_2"を指定しているからです。

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