这是一种常见的方法,可以通过将断言,覆盖点等放置在单独的模块或接口bind
中并将其附加到设计中来将其与设计分开,例如,
module foo (input a);
wire b = a;
endmodule
interface foo_assertions (input a, b);
initial #1 assert (b == a);
endinterface
bind foo foo_assertions i_foo_assertions(.*);
一个问题是它需要维护中的端口列表foo_assertions
。但是,如果foo
有一个bar
子模块,信号里面bar
可以方便地使用相对于声明文件分层引用访问foo
,例如assert (i_bar.sig == a)
。
有没有办法使用分层路径语法来访问直接在中声明的变量foo
,从而消除了对端口列表的需要foo_assertions
?请注意,foo
该模块不一定是顶层模块,因此$root.b
将无法正常工作。看起来foo.b
可行,但是当foo
顶层存在多个实例时,这是否安全?
Verilog始终使用向上的名称引用,这就是为什么能foo.b
起作用的原因(请参阅IEEE 1800-2017 SystemVerilog LRM中的23.8节)。foo
只要您绑定foo_assertions
到名为的模块中,实例的数量无关紧要foo
。每个向上的引用均适用于其下方的特定实例。
在层次结构路径中引用顶级模块时,您一直在使用向上引用,而不必实现它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句