我正在尝试编写一些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阶段进行添加。这更适合生成语句吗?
由于
答案 0 :(得分:2)
您不需要为此
生成块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