在 Verilog 中对 256 个 20 位字求和的加法器进行流水线处理?

Pipelining an adder that sum 256, 20-bit words in Verilog?

我想这与其说是一个 Verilog 问题,不如说是一个逻辑问题。我需要加起来 256 个 20 位字。这就是我为更少的单词实现它的方式,并且它起作用了。字数多,就会出现时序错误。

module sum(clk, input_vect, out_sum);
input clk;
input [256*20-1 : 0] input_vect;
reg [25 : 0] out_sum_inter;
output reg [25 : 0] out_sum;
integer i;

always @ * 
begin
    out_sum_inter = 0;
    for(i = 0; i < 256; i = i + 1)
        out_sum_inter = out_sum_inter + input_vect[20*i - 1 -: 20];
end

always @ (posedge clk)
out_sum <= out_sum_inter;

endmodule

所以,如果不是很明显,我将组合部分从连续部分中分离出来。我的目标是 out_sum 只有在我确定 out_sum_inter 的值被正确确定后才会更新。

非常感谢。我想我可能需要对这个加法器进行流水线处理,但我不确定如何处理。

您的合成器可能会进行自动流水线操作。如果是这样,您需要在加法器的输出端添加足够的触发器,合成器将根据需要将它们移回。

多少个就够了? 足够关闭计时了。做一些实验。

为什么合成器不能添加正确数量的触发器?因为合成器永远不会通过您的设计改变延迟:它们只能移动触发器相对于直接连接到它们的组合逻辑。