我想这不是逻辑问题,而是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
。
非常感谢。我想可能需要对这个加法器进行管道传输,但是不确定如何。
答案 0 :(得分:3)
您的合成器可能会执行自动流水线操作。如果是这样,则需要在加法器的输出端添加足够的触发器,合成器将根据需要将它们移回原位。
多少钱够了?足以结束计时了。做一些实验。
为什么合成器不能只添加正确数量的触发器?因为合成器从不通过您的设计来改变延迟:它们只能相对于组合逻辑来回移动触发器立即连接到他们。