通常,我们的 UVM 模拟会因签名而失败,我们最终会调试到未连接的分析端口。
有没有办法预先检查分析端口是否在之前连接run_phase
?
连接分析端口不是 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
我认为这应该是不必要的,因为这个检查已经在 uvm_port_base::resolve_bindings 中了。但是,我相信那里有一个错误。错误是对于 imp size() 不报告绑定到 imp 的端口数。因此,如果 3 个端口绑定到 imp,那么即使端口列表的大小正确为 3,大小也会报告 1。
感谢维克多的例子。我不知道你给出的逻辑。Victor 给出的示例中存在一个小问题,即uvm_analysis_imp
声明。多个分析实现应该使用uvm_analysis_imp_decl
宏。请参阅以下链接以获取更正的示例。
http://www.edaplayground.com/x/3qx
注意:发布为答案,因为我无法发表评论:(