基于参数值的Verilog条件硬件

问题描述 投票:0回答:2

是否可以根据参数的值在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

编辑:

我想提一下SergeUnn给出的答案给出了我正在寻找的实现的解决方案。有关更多详细信息,请参阅答案的注释。

verilog conditional-compilation
2个回答
0
投票

实际上有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

1
投票

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

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
© www.soinside.com 2019 - 2024. All rights reserved.