采用流水线进行FPGA VI吞吐量优化设计

FPGA/ASIC技术

190人已加入

描述

流水线是一种可用于增强FPGA VI吞吐量的技术。在流水线设计中,用户可利用FPGA的并行处理功能提高顺序代码的有效性。如要实现流水线,必须将代码拆分为不同的级并连线每级的输入和输出端至循环中的反馈节点或移位寄存器。

在下列程序框图中,子VI A、B和C在单周期定时循环内顺序执行。因此,单周期定时循环的时钟速率必须设置为满足上述3个运行子VI的运行时间的和值。

FPGA

连线子VI的输入和输出至反馈节点时,如下列程序框图所示。LabVIEW流水线处理子VI。当前子VI在一个单周期内并行执行,且最大时钟速率仅受具有最长组合路径的子VI限制。通过执行流水线设计,可增加单周期定时循环的时钟速率并增强FPGA VI的吞吐量。

FPGA

移位寄存器也可用于实现流水线,如下列程序框图所示。

FPGA

执行流水线时,最后一级的输出比输入滞后,二者间的间隔为流水线的个数。且流水线填满前,时钟周期的输出无效。流水线的级个数称为流水线深度,时钟周期中测量的流水线延时与其深度对应。流水线深度为N时,第N个时钟周期前的输出无效,且每个有效时钟周期的输出比输入端延迟N-1个时钟周期。

在该范例中有3级(子VI A、B和C),因此增强型代码的流水线深度为3。即直至第三个时钟周期输出才有效,且每个有效时钟周期C的输出总是与时钟周期C – (N – 1)对应。如下列程序框图所示。

FPGA

在该范例中,子VI A在时钟周期1处理测量1。此时子VI B和C均在处理移位寄存器的默认值,生成无效的输出。在时钟周期2,子VI A处理测量2,子VI B处理来自子VI A在时钟周期1的输出值,子VI C处理无效的值并生成无效的输出。在时钟周期3,流水线填满且子VI C的输出结果首次有效。子VI A处理测量3,子VI B处理子VI A在时钟周期2中的输出。子VI C处理子VI B在时钟周期2中的输出并生成对应测量1的输出。流水线填满后,所有后续的时钟周期均生成有效的输出,且延迟为常量2个时钟周期。

注: 为避免流水线执行初期产生的无效输出引起未预期的结果,必须谨慎操作。例如,使用条件结构确保控制算法仅在经过N个时钟周期后启用执行器。

使用流水线并在较快的时钟域内编译单周期定时循环可增加吞吐量。例如,下列示意图的上部给出了包含3个子VI的非流水线循环的定时执行。每个子VI均需要12.5 ns的传播延时。子VI A至子VI C的总传播延时为37.5 ns,此延迟对于40 MHz编译时钟来说过长。示意图的中部给出了流水线处理代码将传播延时减少至12.5 ns,从而循环可在40 MHz进行编译。由于流水线循环的传播延时仅为12.5 ns,循环可在高达80 MHz的时钟速率下编译。如示意图底部所示。

FPGA

注: 在时钟周期内测量时,流水线设计的延时高于非流水线设计。但由于流水线能够降低单个时钟周期的时间,因此总的时间延时不会发生显著变化。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分