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