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

时间:2019-12-18 06:38:20

标签: verilog system-verilog

我想使用模块的参数启用逻辑,模块实例化等。

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确实支持,但不完全支持。

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

1 个答案:

答案 0 :(得分:1)

您的代码使用Verilog标准的2005版本-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将支持它,您得到什么错误消息?