首页 > 解决方案 > 在 Verilog 中流水线化将 256 个 20 位字相加的加法器?

问题描述

我想这与其说是一个 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确定正确确定的值之后才会更新。

非常感谢。我想我可能需要管道这个加法器,但我不确定如何。

标签: verilog

解决方案


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

多少才够?足以关闭时间。做一些实验。

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


推荐阅读