Verilog 使用相同的代码访问两个实例,而不对每个实例重复该代码

Verilog 使用相同的代码访问两个实例,而不对每个实例重复该代码,verilog,system-verilog,Verilog,System Verilog,我有两个名为(inst_1和inst_2)的实例,我希望使用相同的代码对它们进行操作,而不必为每个实例重复代码 那个么,我该如何制作(for循环或if条件)或做任何事情呢? 实例_1在下一张照片中用黄色标记。 我想在不重复代码的情况下将其更改为实例2 这是我的代码的图像 您不能在Verilog/SystemVerilog中迭代标识符名称。如果您使用generatefor循环来实例化这两个实例,那么您可能已经能够使用类似的generatefor来处理此代码 我能想到的最好的选择是将代码转换成一个巨

我有两个名为(inst_1和inst_2)的实例,我希望使用相同的代码对它们进行操作,而不必为每个实例重复代码

那个么,我该如何制作(for循环或if条件)或做任何事情呢? 实例_1在下一张照片中用黄色标记。 我想在不重复代码的情况下将其更改为实例2

这是我的代码的图像

您不能在Verilog/SystemVerilog中迭代标识符名称。如果您使用
generatefor
循环来实例化这两个实例,那么您可能已经能够使用类似的
generatefor
来处理此代码

我能想到的最好的选择是将代码转换成一个巨大的宏,然后为每个实例调用宏


有几种方法可以使用PLI/VPI C接口通过字符串查找来访问标识符,但这太复杂了,无法在这里进行讨论。

您不能在Verilog/SystemVerilog中迭代标识符名称。如果您使用
generatefor
循环来实例化这两个实例,那么您可能已经能够使用类似的
generatefor
来处理此代码

我能想到的最好的选择是将代码转换成一个巨大的宏,然后为每个实例调用宏


有几种方法可以使用PLI/VPI C接口通过字符串查找来访问标识符,但这太复杂了,无法在这里进行讨论。

有几种方法可以实现您的愿望,尽管它们都不好。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) 最好的方法是以不同的方式组织测试台:

  • 使用生成块在tb中实例化实例,然后可以在代码中使用相同的块
  • 您可以重新写入TB以使用虚拟接口 或动态类而不是实例

有几种方法可以实现你的愿望,尽管没有一种是好的。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) 最好的方法是以不同的方式组织测试台:

  • 使用生成块在tb中实例化实例,然后可以在代码中使用相同的块
  • 您可以重新写入TB以使用虚拟接口 或动态类而不是实例

不要将代码的图像放入。把代码本身放进去。不要把代码的图像放进去。把代码本身放进去。