假设在我的测试台上,我有以下信号
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个模块
谢谢!
case
声明会稍微不那么难看。由于您的设计选择使用唯一名称而不是实例数组来实例化模块,因此无法迭代它们。
某些工具允许您使用字符串名称查找信号的值。然后,您可以使用索引值格式化字符串。您需要阅读工具手册。
如果这是testbench代码(不可合成),如果模块0和模块1是同一模块的实例,则可以将接口绑定到它。绑定语句将导致在模块的所有实例中实例化此接口。然后,您可以在此接口中放置一些帮助程序代码,以便使用配置类“注册”。在UVM中,这可能是配置数据库,但在SystemVerilog中,您可以使用静态或单例类。
示例:https://www.edaplayground.com/x/5ZUG
这使用了一些您可能需要阅读的概念(abstract-concrete polymorphic interfaces)。但希望这个例子足够清楚。