我们的UVM模拟通常会失败并带有签名,我们最终会调试到未连接的分析端口。
有没有办法检查分析端口是否在run_phase
?
答案 0 :(得分:5)
分析端口连接不是UVM要求。但是,当分析端口未连接时,某些UVM组件将无法正常工作。
对于这些情况,我建议在end_of_elaboration_phase
:
`CHECK_PORT_CONNECTION(my_analysis_imp)
上面的宏定义如下:
`define CHECK_PORT_CONNECTION(PORT) \
begin \
uvm_port_list list; \
PORT.get_provided_to(list); \
if (!list.size()) begin \
`uvm_fatal("AP_CONNECT", \
$sformatf("Analysis port %s not connected.", PORT.get_full_name())); \
end \
end
完整的工作示例,其中一个已连接的端口和一个未连接的端口:http://www.edaplayground.com/x/2YG
答案 1 :(得分:1)
感谢Victor的榜样。我不知道你给出的逻辑。
在Victor给出的例子中有一个小问题,w.r.t uvm_analysis_imp
声明。多个分析实现应该使用uvm_analysis_imp_decl
宏。
有关更正后的示例,请参阅以下链接。
http://www.edaplayground.com/x/3qx
注意:由于我无法评论,因此发布了答案:(
答案 2 :(得分:1)
我认为这应该是不必要的,因为此检查已经在uvm_port_base :: resolve_bindings中。但是,我相信那里有一个错误。问题是,对于imp size(),不会报告绑定到imp的端口数。因此,如果3个端口绑定到imp,则即使端口列表的大小正确为3,大小也会报告1。