System verilog 如何检查UVM分析端口是否已连接?

System verilog 如何检查UVM分析端口是否已连接?,system-verilog,uvm,System Verilog,Uvm,通常,我们的UVM模拟失败,我们最终调试到未连接的分析端口 是否有办法在运行阶段之前预先检查分析端口是否已连接?UVM不要求连接分析端口。但是,某些UVM组件在其分析端口未连接时无法正常工作 对于这些情况,我建议在细化阶段的结束阶段检查分析导入连接: `CHECK_PORT_CONNECTION(my_analysis_imp) 其中,上述宏的定义如下: `define CHECK_PORT_CONNECTION(PORT) \ begin \ uvm_port_list list

通常,我们的UVM模拟失败,我们最终调试到未连接的分析端口


是否有办法在
运行阶段之前预先检查分析端口是否已连接?

UVM不要求连接分析端口。但是,某些UVM组件在其分析端口未连接时无法正常工作

对于这些情况,我建议在细化阶段的结束阶段检查分析导入连接:

`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

完成一个已连接端口和一个未连接端口的工作示例:

感谢Victor提供的示例。我不知道你的逻辑。 维克托给出的例子中有一个小问题,w.r.t
uvm\u analysis\u imp
声明。多个分析实现应使用
uvm\u analysis\u imp\u decl
宏。 请参阅下面的链接以了解更正的示例。


注意:由于我无法发表评论,因此作为答案发布:(

我认为这应该是不必要的,因为此检查已在uvm_端口_base::resolve_绑定中。但是,我认为存在一个错误。该错误是针对imp大小()的不报告绑定到imp的端口数。因此,如果有3个端口绑定到imp,那么即使端口列表的大小正确为3,大小也会报告1。

是的,应该使用
uvm\u analysis\u impl\u decl
是正确的:)我最初有它们,但后来为了简化示例而删除了它们。我会把它们加进去的。