我正在尝试编写一些verilog代码,我希望这些代码可以重用于具有不同数量输入的大量添加的应用程序。 假设我有一个模块:
module parameterizable_adder #(
parameter WIDTH = 16,
parameter NUM_INPUTS = 16)(
input [NUM_INPUTS*WIDTH-1:0] in_data, output [NUM_INPUTS+WIDTH-1:0] out_data
);
//treat this block as psuedo code
integer i;
for (i = 0; i < NUM_INPUTS; i = i + 1) begin
out_data = out_data + in_data[i*WIDTH+WIDTH-1:i*WIDTH];
end
endmodule
这或多或少是我想做的。 verilog 有没有办法做到这一点并使其可综合?理想情况下,for 循环将展开并优化,因此它不会尝试在 NUM_INPUTS-1 阶段中进行加法。这是否更适合生成语句?
谢谢
最佳答案
您不需要为此生成 block
integer i;
reg [NUM_INPUTS+WIDTH:0] temp_data;
always @* begin
temp_data = 0;
for (i = 0; i < NUM_INPUTS; i = i + 1)
temp_data = temp_data + in_data[i*WIDTH +: WIDTH];
out_data = temp_data;
end
关于for-loop - Verilog:有没有办法制作广义加法器(可变宽度/输入数量)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41148329/