System Verilog 变量模块名称

System Verilog Variable Module Name

是否可以有可变的模块名称,然后可以通过一些参数来选择?我在宏定义中寻找 if...else 的语法。

module test;

  `define NAME(x) if (x == 0) mod_e else mod_w
  generate
    for (genvar i = 0; i < 2; i++) begin
      `NAME(i) inst_name (.a(a),.b(b),...);
    end
  endgenerate

endmodule

一种方法是像下面这样,但是需要连接所有端口2次,这对于数百个模块来说很不方便IOs并且容易出错。

module test;

  generate
    if (SOME_PARAM == 0) begin
      mod_e inst_name (.a(a),.b(b),...);
    end else begin
      mod_w inst_name (.a(a),.b(b),...);
    end
  endgenerate

endmodule

您不能使用宏来进行特定于实例的映射。在解析生成块之前,宏在预处理步骤中得到扩展。

唯一接近此的是 config 块,它允许您从不同的库中为特定实例选择同名模块。但是没有条件运算符。

作为 数百个端口 问题的可能解决方案,假设所有实例都具有相同的端口集,您可以通过定义实例宏以不同方式解决此问题:

`define INST(mod_name) mod_name inst_name(.a(a), .b(b), ...);

if(SOME_PARAM == 0)
   `INST(mod_e)
else
   `INST(mod_w)