首页 > 解决方案 > 在没有名称的verilog中向上引用?

问题描述

本答案中所述, verilog 支持“向上名称引用”。我的问题是是否可以使用模块名称以外的其他内容来执行此分层引用:

  1. 可以使用父级的实例名称(d1d2)吗?
  2. 有内置的$parent或类似的吗?

DUT使用模块名称进行向上引用的示例:

module DUT(input clk);     
   wire a;
   function void hello;
      $display("Hello from %m");
   endfunction

   printer p(clk);
endmodule
    
module printer(input clk);
   always @(posedge clk)
      $display("a is %d", DUT.a);  // Can this "DUT" here be replaced with something else?
   initial DUT.hello;
endmodule

module TB;
   reg clock;
   DUT d1(clock);
   DUT d2(clock);      
endmodule

标签: verilogsystem-verilog

解决方案


是的,您可以使用实例名称。在这种情况下,它将一直上升到 TB 范围并找到d1d2. 所有搜索规则在 IEEE 1800-2017 SystemVerilog LRM 中的第23.8 节向上名称引用中进行解释

基本上,规则首先在本地范围内查找该scope_name的第一部分。然后查看当前模块中的封闭范围,然后查找实例树。一旦找到scope_named1在您的情况下),则d1.a必须存在。它不会继续搜索另一个d1范围。(顺便说一句,这些规则与 Verilog 保持不变)

没有$parent匿名向上参考。SystemVerilog 中有$root一个绝对参考。


推荐阅读