我有两个名为(inst_1和inst_2)的实例,我想用相同的代码对两个实例进行操作,而不必为每个实例重复执行该代码。
那么我该怎么做(用于循环或条件)或做任何事情呢? 下一张照片中的instance_1被标记为黄色。 我想将其更改为instance_2而不重复代码。
答案 0 :(得分:1)
您不能在Verilog / SystemVerilog中遍历标识符名称。如果您使用generate-for
循环实例化了两个实例,那么您可能已经可以在此代码中使用类似的generate-for
。
我能想到的最好的选择是将您的代码变成一个巨大的宏,然后为每个实例调用该宏。
有多种方法可以使用PLI / VPI C接口通过字符串查找来访问标识符,但是这种方法太复杂了,无法在这里找到。
答案 1 :(得分:1)
有几种方法可以实现您的期望,尽管它们都不是一件好事。 Verilog并非旨在做到这一点。
1)使用dave_59的建议:制作一个巨大的宏并将实例名称作为参数传递。它将起作用,但是调试此怪物时会遇到问题。
`define MONSTER(INST_NAME) ... tb.INST_NAME.....\
...tb.INST_NAME...\
...
module top1;
`MONSTER(inst_1)
endmodule
module top2;
`MONSTER(inst_2)
endmodule
2)定义在include语句中使用这段代码,将实例名称定义为宏:
module top1;
`define INSTANCE inst_1
`include "monster_piece.v"
endmodule
module top2;
`define INSTANCE inst_2
`include "monster_piece.v"
endmodule
其中monster_piece.v包含您的代码,其中带有`INSTANCE'。此方法存在维护问题,某些工具可能存在调试问题。
3)最好的方法是对测试台进行不同的组织: