FPGA流水线优化处理实例

“ 流水线设计其实就是将一个任务切分为多个小任务进行分步完成,每级电路只需完成其中一部分功能即可。这使得电路的处理速度大大提升,特别适合数据处理量较大的电路设计。”

01 现实场景中的流水线

微信截图_20190428111440.png

如上图所示为工厂流水线。假设一条产品生产流水线共有n个工位,每个工位完成自己特定的工作的时间都为 t,那么流水线上完成一个产品所需时间就是t(除第一个产品除外,第一个产品所需时间为nt)。若不使用流水线,可想而知,完成一个产品,需要的时间为nt。也正是如此,所以流水线的速度更快。

再具体分析一下,流水线无非就是将一个大的任务,化分成了若干个小任务,交由不同的工位负责。每个工位只需完成一个具体的小任务,然后将其它工作交由下一个工位处理,这使得工作效率提高了。

数字电路的流水线设计就是采用了实际生产线流水线的思想。

02 数字电路当中的流水线设计

这里以一个简单的8位无符号数全加器的设计为实例来进行讲解(实现 a[7:0] + b[7:0] +c_in = data_out [7:0] c_out 为进位位)。

如果有数字电路常识的人都知道,利用一块组合逻辑电路去做8位的加法,其速度肯定比做2位的加法慢。
因此这里可以采用4级流水线设计,每一级只做两位的加法操作,因此时钟频率可以大大的提高。

数字电路里面的流水节拍是由时钟信号来控制的,时钟信号上升沿一来,就将本级的运算结果和需要送给下一级电路处理的数据存入到寄存器并送给下一级电路处理。

第一级:做最低两位与进位位的加法操作,并将运算结果和未做运算的高六位传给下一级。
FPGA流水线优化处理实例.png

第二级:做2,3两位与上一级加法器的进位位的加法操作,并将本级运算结果和未做运算的高4位传给下一级。
微信截图_20190428111505.png

第三级:做4,5两位与进位位的加法操作,并将运算结果和未做运算的高2位传给下一级。
微信截图_20190428113520.png

第四级:做最高两位与上一级加法器输出的进位位的加法操作,并将结果组合输出。
微信截图_20190428111529.png

整体电路如下(可点击放大看):

微信截图_20190428112750.png

仿真结果如下(可点击放大看):
微信截图_20190428112816.png

源码附件pipeline_1.rar

编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2019-04-28 11:39:42 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它