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