我有一个包含两个订阅者的组件。我希望能够实例化该组件并连接其订户而不使用分层引用。
鉴于我有
my_comp.sub1.analysis_export
my_comp.sub2.analysis_export
如何在不进入组件的情况下与组件内的订户建立连接?
我希望能够做到
function void connect_phase(uvm_phase phase);
monitor.ap1.connect(my_comp.sub_1_analysis_export);
monitor.ap2.connect(my_comp.sub_2_analysis_export);
endfunction
答案 0 :(得分:2)
您可以在更高级别的层次结构(my_comp类)中创建分析导出端口,并将其连接到sub_1.analysis导出端口,在其连接阶段。
现在在代理的连接阶段,您可以直接将监控分析端口连接到新的分析导出端口。 (我相信,您已经在代码中编写了代理类的连接阶段,这通常是监视器的正常位置)
您修改的代码可能如下所示:
// In my_comp Class
uvm_analysis_export #([Your Port Transaction Data Type]) new_export_1;
uvm_analysis_export #([Your Port Transaction Data Type]) new_export_2;
function void connect_phase();
new_export_1.connect(sub1.analysis_export);
new_export_2.connect(sub2.analysis_export);
endfunction
// In agent Class
function void connect_phase();
monitor.ap1.connect(my_comp.new_export_1);
monitor.ap2.connect(my_comp.new_export_2);
endfunction
答案 1 :(得分:0)
您始终可以在组件层次结构的更高级别创建端口或导出,并将它们连接到较低级别的端口和导出。然后连接更高级别的组件。通常,监视器是代理的一部分,您可以将监视器的analysys_port作为代理的端口。然后将订户连接到代理。