Verification Engineerの戯言 : SystemVerilogの世界へようこそ
tlm_bindを使うことでExportに複数のPortを接続することができることは、VMM : tlm_bindで説明しました。
同じようなことは、vmm_tlm_b_transport_exportマクロでも可能です。
vmm_tlm_b_transport_exportマクロは、sv/std_lib/vmm_tlm_macros.svで次のように定義されています。
`define vmm_tlm_b_transport_export(SUFFIX) \
class vmm_tlm_b_transport_export``SUFFIX #(type TARGET = vmm_xactor, type DATA = vmm_data) extends vmm_tlm_export_base#(DATA); \
static local vmm_object _obj; \
local TARGET m_parent; \
\
function new(TARGET parent, string name, int max_binds = 1, int min_binds = 0); \
super.new(($cast(_obj, parent)) ? _obj: null , name, max_binds, min_binds,((parent != null) && $cast(_obj,parent)) ? _obj.get_log() : null); \
this.m_parent = parent; \
endfunction: new \
\
virtual task b_transport(int id = -1, DATA trans, ref int delay); \
if(this.child_export == null) \
this.m_parent.b_transport``SUFFIX(id, trans, delay); \
else \
this.child_export.b_transport(id,trans,delay); \
endtask : b_transport \
\
endclass : vmm_tlm_b_transport_export``SUFFIX
vmm_tlm_b_transport_exportマクロでは、vmm_tlm_b_transport_exportSUFFIXという新しいクラスを定義しています。
つまり、各イニシエータ(Port)に対して接続するためのExportのクラスを定義する訳です。
つまり、各イニシエータ(Port)に対して接続するためのExportのクラスを定義する訳です。
class consumer extends vmm_xactor;
`vmm_tlm_b_transport_export(_1)
`vmm_tlm_b_transport_export(_2)
vmm_tlm_b_transport_export_1#(consumer) b_export1 = new(this, "export1");
vmm_tlm_b_transport_export_2#(consumer) b_export2 = new(this,"export2");
task b_transport_1(int id = -1, vmm_data trans, ref int delay );
trans.display("From export1");
endtask
task b_transport_2(int id = -1, vmm_data trans, ref int delay);
trans.display("From export2");
endtask
endclass
class producer extends vmm_xactor;
vmm_tlm_b_transport_port#(producer) b_port;
endclass
class my_env extends vmm_group;
producer p1,p2;
consumer c1;
function void connect_ph();
c1.b_export1.tlm_bind(p1.b_port);
c1.b_export2.tlm_bind(p2.b_port);
endfunction
endclass
vmm_tlm_b_transport_exportマクロを使って、2つのExport(b_export1,b_export2)をそれぞれ
p1とp2にtlm_bindを使って接続しています。
p1とp2にtlm_bindを使って接続しています。
検証、Verification、SystemVerilog、VMM、Verification Methodology Manual