verilog - 在 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
确定正确确定的值之后才会更新。
非常感谢。我想我可能需要管道这个加法器,但我不确定如何。
解决方案
您的合成器可能会进行自动流水线处理。如果是这样,您需要在加法器的输出端添加足够多的触发器,合成器将根据需要将它们移回。
多少才够?足以关闭时间。做一些实验。
为什么合成器不能只添加正确数量的触发器?因为合成器永远不会通过您的设计改变延迟:它们只能相对于立即连接到它们的组合逻辑来移动触发器。
推荐阅读
- r - 使用总和和平均值将行条件合并为一行
- git - Branch 在 Github 中没有什么可比的
- r - 在预定义的时间运行 R 代码(纯粹在 R 中,没有任务管理器/cron 作业)
- javascript - 如何缓存 PWA 的主页
- postgresql-12 - 如何在 Postgres 中的 JSON 字段上创建索引
- apache-kafka - 骆驼 - 卡夫卡 - 附加属性问题
- powerbi - Power BI 中的计划刷新不起作用
- git - 如何请求提交到开源 git 存储库的权限?
- windows - 我试图运行 neovim,但无法保存和打开文件
- r - 如何使用参数自动化此 R 代码?