假设我在测试台上有以下信号
top.module0.expect
top.module1.expect
是的,我们用相同的模块实例化module0 / 1 现在,在函数 get_expect_sig (int module_idx)(module_idx可以为0或1)中,我想根据 module_idx
获取信号我目前正在做的事情如下:
if (module_idx == 0) return top.module0.expect;
else if (module_idx == 1) return top.module1.expect;
此解决方案非常难看。 是否有任何出色的方法可以帮助我呢?因为我有32个模块,而不是2个模块
谢谢!
答案 0 :(得分:0)
一个case
语句将不那么难看。由于您的设计选择使用唯一的名称而不是实例数组来实例化模块,因此无法对其进行迭代。
某些工具允许您使用字符串名称查找信号的值。然后,您可以使用索引值格式化字符串。您需要阅读工具手册。
答案 1 :(得分:0)
如果这是测试台代码(不可合成),则模块0和模块1是同一模块的实例,则可以将接口绑定到该模块。 bind语句将导致此接口在模块的所有实例中实例化。然后,您可以在该界面中放置一些帮助程序代码以“注册”配置类。在UVM中,这可能是config db,但是在SystemVerilog中,您可以使用静态或单例类。
示例:https://www.edaplayground.com/x/5ZUG
这使用了一些您可能需要阅读的概念(abstract-concrete polymorphic interfaces)。但希望这个例子很清楚。