如何获得名称相似的等级信号?

时间:2019-03-22 05:54:37

标签: verilog system-verilog

假设我在测试台上有以下信号

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个模块

谢谢!

2 个答案:

答案 0 :(得分:0)

一个case语句将不那么难看。由于您的设计选择使用唯一的名称而不是实例数组来实例化模块,因此无法对其进行迭代。

某些工具允许您使用字符串名称查找信号的值。然后,您可以使用索引值格式化字符串。您需要阅读工具手册。

答案 1 :(得分:0)

如果这是测试台代码(不可合成),则模块0和模块1是同一模块的实例,则可以将接口绑定到该模块。 bind语句将导致此接口在模块的所有实例中实例化。然后,您可以在该界面中放置一些帮助程序代码以“注册”配置类。在UVM中,这可能是config db,但是在SystemVerilog中,您可以使用静态或单例类。

示例:https://www.edaplayground.com/x/5ZUG

这使用了一些您可能需要阅读的概念(abstract-concrete polymorphic interfaces)。但希望这个例子很清楚。