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

Verilog 参数化逻辑,包括模块实例化等,verilog,system-verilog,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) beg

我想启用逻辑、模块实例化等。。模块的参数如下所示:

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取消了使用generate和endgenerate语句的需要。就我个人而言,我真的不认为这样做有什么意义。generate构造有点与众不同,因此应该得到generate和endgenerate语句提供的额外宣传。添加它们怎么样:

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

我相信Modelsim会支持它,您收到了什么错误消息?

实际上,我的问题来自Modelsim,它为隐式生成块下的所有信号添加了父genblk1。。。但多亏了你,我才发现。非常感谢。我可以在条件块内的for循环中使用always_梳吗?我编辑了问题中的代码。Vivado而不是Riviera/Modelsim识别它。@Alexis\u FR\u JP是的。您可以在generate endgenerate中放置任何可以在模块endmodule之间移动的内容。