参数化逻辑包括模块实例化等

Parameterized logic including module instantiation and so on

我想启用逻辑、模块实例化等。使用这样的模块参数:

module mymodule #(
  parameter FEATURE_ENABLE  = 0
)(
  input   logic          clk,
  ...
);

if (FEATURE_ENABLE==1) begin
 logic feature;
 modulea modulea_instance (
   .clk (clk),
   ...
 );

  for (h=0;h<=20;h=h+1) begin:forloopinstance
    always_comb begin
      if (sys_reset) begin
        ind_type[h] = UNKNOWN;
      end else begin
        ind_type[h] = ZERO;
      end
    end
  end

end

endmodule

好像Modelsim不支持,Xilinx Vivado支持,但不完全支持。

使用参数启用部分逻辑的最佳做法是什么?

您的代码使用 2005 版的 Verilog 标准 - IEEE 1364-2005。 IEEE 1364-2005 取消了使用 generateendgenerate 语句的需要。就个人而言,我真的不认为这样做有什么意义。 generate 构造有点不同寻常,因此值得 generateendgenerate 语句提供的额外宣传。无论如何添加它们怎么样:

module mymodule #(
  parameter FEATURE_ENABLE  = 0
)(
  input   logic          clk
);

  generate
    if (FEATURE_ENABLE==1) begin
      logic feature;
      modulea modulea_instance (
       .clk (clk)
      );
    end
  endgenerate

endmodule

https://www.edaplayground.com/x/4k86

我确定 Modelsim 会支持它,您收到什么错误消息?