verilog - 在没有名称的verilog中向上引用?
问题描述
如本答案中所述, verilog 支持“向上名称引用”。我的问题是是否可以使用模块名称以外的其他内容来执行此分层引用:
- 可以使用父级的实例名称(
d1
,d2
)吗? - 有内置的
$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
解决方案
是的,您可以使用实例名称。在这种情况下,它将一直上升到 TB 范围并找到d1
和d2
. 所有搜索规则在 IEEE 1800-2017 SystemVerilog LRM 中的第23.8 节向上名称引用中进行了解释。
基本上,规则首先在本地范围内查找该scope_name的第一部分。然后查看当前模块中的封闭范围,然后查找实例树。一旦找到scope_name(d1
在您的情况下),则d1.a
必须存在。它不会继续搜索另一个d1
范围。(顺便说一句,这些规则与 Verilog 保持不变)
没有$parent
匿名向上参考。SystemVerilog 中有$root
一个绝对参考。
推荐阅读
- c# - Request["key"] 在 C# Web 应用程序 (ASP.NET Core) 中不起作用
- android - 在 android 中使用改造的 Hawk 身份验证
- javascript - 如何在 thymeleaf 迭代中使用 JavaScript 循环的索引?
- php - WooCommerce 存档页面产品查询上的多个 orderby 参数
- sql - 如何使用 REGEXP_LIKE 和 LIKE 运算符在 case 语句中编写参数化查询
- git - GIT 每日/每小时提交文件夹中的更改
- c++ - c++ dll无限循环不使用线程
- python - 用于添加两个整数的神经网络
- python - 将数组保存为 cv2 中的图像
- jsp - EL变量不为空时添加前导空格