Условное оборудование Verilog на основе значения параметра - PullRequest
0 голосов
/ 28 августа 2018

Возможно ли создать условное оборудование в 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

EDIT:

Я хотел бы упомянуть, что оба ответа Serge и Unn дают решение для реализации, которую я искал. Смотрите комментарии к ответам для более подробной информации.

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

на самом деле есть 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
0 голосов
/ 28 августа 2018

Да, вы можете обусловить параметры. Просто используйте их так, как вы бы применили их к чему-либо еще (хотя вы также можете использовать их вне процедурных блоков, чтобы при необходимости подготовить целые экземпляры):

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
...