基于参数值的 Verilog 条件硬件

Verilog conditional hardware based on parameter value

是否可以根据参数值在 Verilog 中创建条件硬件?像这样

module test #(
 parameter param = 1
)(
  input wire clk
);

reg[3:0] counter = 0;

always @(posedge clk) begin
  `ifdef (param == 0)          // <-----
    counter <= counter + 1'b1;
    // ... more hardware here
  `else
    counter <= counter - 1'b1;
    // ... a different hardware here
  `endif
end

endmodule // test

编辑:

我想提一下 Serge and Unn 给出的两个答案都为我正在寻找的实现提供了解决方案。有关更多详细信息,请参阅对答案的评论。

是的,您可以根据参数设定条件。只需像使用其他任何条件一样使用它们(尽管如果需要,您也可以在程序块之外使用它们来调节整个实例化):

module test #(parameter param = 1)
  (
  input wire clk
  );

  reg[3:0] counter = 0;

  always @(posedge clk) begin
    if (param == 0) begin
      counter <= counter + 1'b1;
    end
    else begin
      counter <= counter - 1'b1;
    end
  end

endmodule // test

实际上有 generate 个方块是出于这个原因而发明的:

module test 
  #(parameter param = 1)
   (input wire clk);

   reg [3:0]  counter = 0;

   generate
      if (param == 0) 
        always @(posedge clk) begin
           counter <= counter + 1'b1;
           // ... more hardware here
        end
      else
        always @(posedge clk) begin
           counter <= counter - 1'b1;
           // ... a different hardware here
        end
   endgenerate
endmodule // test