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