为何及如何在FPGA中采用流水线技术

本文阐述了流水线技术及其对FPGA(现场可编程门阵列),如延迟、吞吐量、工作频率变化和资源利用的重要意义。

 

为FPGA(现场可编程门阵列)编程是对资源进行自定义的过程,目的是实现一个明确的逻辑功能。这包括使用FPGA的基本构件块,如可配置逻辑块(CLB)、专用多路复用器及其它块为程序指令建模,用以满足数字系统的要求。

在设计过程中,系统固有的定时问题是一个需要考虑的重要标准,用户设置的任何限制条件也应纳入考虑范围。流水线技术就是一种可帮助设计者实现此目标的设计机制。

 

什么是流水线技术?

 

流水线技术是一个启动程序指令的并行执行的过程。下图显示了流水线处理器体系结构的视觉图像。

 

 

图1. 流水线处理器体系结构的视觉图像。每个方形对应一个指令。不同颜色的方形表示指令的相互独立性。本图片由Colin M.L. Burnett提供【】CC-BY-SA-3.0】。

 

在FPGA中,以特定方式安排多个数据处理块即可再现流水线处理器体系结构。为此我们首先将整体逻辑电路划分为若干个小部分,然后使用寄存器(触发器)将这些小部分隔开。

 

下面让我们通过一个实例来分析FPGA设计采用的流水线技术模式。

 

实例

 

我们来分析一个基于四个输入阵列,包含三次乘法和一次加法的系统。由此得出outputyi等于(ai × bi × ci) + di。

 

采用非流水线技术的设计

 

要创建这样一个系统,首先想到的设计方案是先用乘法器,再用加法器,如图2a所示。

 

为何及如何在FPGA中采用流水线技术

 

图2a. 采用非流水线技术的FPGA设计的实例。

 

在该方案中,预期的运算顺序是通过乘法器M1执行ai和bi 数据的乘法运算,再通过乘法器M2将得出的结果与ci相乘,最后通过加法器A1将得出的结果与di相加。

 

但当系统设计为同步时,在时钟首次滴答时,仅乘法器M1可生成有效的输出端数据(a1×b1)。因为在此实例中,仅M1的输入引脚具备有效数据(a1和b1),这一点与M2和A1不同。

 

时钟第二次滴答时,M1 和M2的输入引脚将包含有效数据。但我们必须确保仅M2处于运算状态,M1的输出不变。因为在此实例中,如果M1执行运算,则其输出行将变为(a2×b2)而非预期值(a1×b1),如此将导致得出错误的M2 输出值(a2×b2×c1),而非(a1×b1×c1)。

 

时钟第三次滴答时,全部三个组件M1、M2和A1均具备有效输入值。但我们只需要加法器处于运算状态,因为我们期望得出的输入值为y1= (a1 ×b1×c1+d1)。这意味着系统的第一个输出端将在时钟第三次滴答后可用。

 

当时钟第四次滴答时,M1可用于下一组数据的运算:a2¬和b2。但在此实例中,M2和A1将闲置。随后必须激活M2——在时钟第五次滴答时仅M2被激活,再激活A1——当时钟第六次滴答时仅A1被激活。如此可确保我们的下一个输出值y2=(a2 ×b2 ×c2 +d2)。

 

当对组件执行类似的激励模式时,我们可以预计时钟在未来第9、12、15次滴答时的输出值(图2b)。

 

为何及如何在FPGA中采用流水线技术

图2b

 

采用流水线技术的设计

 

现在,假设我们分别在各输入端(R1—R4)、M1 和M2(分别为R5和R8)之间并沿直接输入路径(R6、R7和R9)为本设计添加寄存器,如图3a所示。

 为何及如何在FPGA中采用流水线技术

图3a. 采用流水线技术的FPGA设计的实例。Sneha H.L.创建的图像和表格

 

在此方案中,当时钟第一次滴答时,仅寄存器R1—R4(分别为a1,b1,c1和d1)和乘法器M1(a1和b1)显示有效输入值。结果,仅这些可生成有效的输出值。此外,一旦M1生成其输出值,该值将被发送至寄存器R5并储存在R5中。

 

在时钟第二次滴答时,寄存器中存储的值R5和 R6(a1×b1和c1)将作为M2的输入值显示,允许M2将输出值显示为a1×b1×c1,而R4(d1)的输出值被转移到寄存器R7。与此同时,第二组数据(a2,b2,c2和d2)也会进入系统并在R1至R4的输出值中显示。

 

在此方案中,允许M1以其输入值进行运算,以便其输入行从a1 × b1变为a2 × b2,这点与采用非流水线技术的设计不同。因为,在此方案设计中,M1输出值的任何变更均不会影响M2的输出值。原因是确保M2的正确功能性所需的数据已经在时钟首次滴答时锁定于寄存器R5中(即便在第二次时钟滴答时仍保持不变)。

 

这表明寄存器R5的插入实现了M1和M2在功能上的独立,因此二者可同时使用不同数据组执行运算。

 

下一次,当时钟第三次滴答时,寄存器R8和R9((a1 × b1 × c1)和d1)的输出值作为输入值传送到加法器A1。因此,我们取得了第一个输出值y1 = ((a1 × b1 × c1) + d1)。但在此次时钟滴答时,M1和M2可分别基于(a3,b3)和(a2,b2,c2)自由操作。这种可行性是因为寄存器R5的存在将块M1与M2隔开,R8将乘法器M2与加法器A1隔离。

 

因此,在时钟第三次滴答时,除y1外,我们将分别从M1和M2 中得出(a3 ×b3)和(a2 ×b2 ×c2)。

 

当时钟第四次滴答时,加法器A1使用其输入值进行运算,得出第二个输出值y2= ((a2 × b2 × c2) + d2)。此外,M1的输出值从(a3 ×b3)变为(a4 ×b4),而M2的输出值从(a2 ×b2 ×c2)变为(a3 ×b3 ×c3)。

 

对于后续的同类运算模式,我们可以预计此后每次时钟滴答时均可显示一个输出数据(图3b),在采用非流水线技术的设计中,我们必须等待三个时钟周期才能获得一个单个输出数据(图2b)。

 

为何及如何在FPGA中采用流水线技术

流水线技术的重要意义

 

时延

 

在显示的实例中,采用流水线技术的设计表现为从第三个时钟周期开始,每次时钟滴答均可生成一个输出值。因为每个输出值必须通过三个寄存器(构成流水线深度)且在到达输出端前进行处理。同理,如果我们的流水线深度为n,那么只有从第n次时钟滴答起,每个时钟周期的有效输出值才能显示为1。

 

在第一个有效输出值出现前,与丢失时钟周期数量相关联的延迟被称为时延。流水线操作阶段数越多,与之相关联的时延就越大。

 

工作时钟频率的增加

 

图2a中采用非流水线技术设计显示每三个时钟周期即可生成一个输出值。即,如果时钟周期为1 ns,则需经过3 ns (3 × 1 ns)后对输入值进行处理并作为输出值显示出来。

 

这条最长数据路径将成为关键路径,用于确定设计的最低工作时钟频率。换言之,为确保理想的工作状态,设计完成后的系统的频率不得大于(1/3 ns) = 333.33 MHz。

 

在采用流水线技术的设计中,一旦流水线填充完毕,则每次时钟滴答都会生成一个输出值。因此我们的工作时钟频率与所定义时钟的频率相同(此处时钟频率为1/1ns = 1000 MHz)。

 

这些数字清楚地表明与采用非流水线技术的设计相比,采用流水线技术的设计可显著增加工作频率。

 

数据吞吐量的增加

 

不考虑设计所含的流水线阶段的数量,采用流水线技术的设计会在每个时钟周期生成一个输出值(克服时延后)。因此我们可以通过设计一个采用流水线技术的系统来增加FPGA的吞吐量。

 

逻辑资源利用更佳

 

在流水线技术中,我们使用寄存器来储存各设计阶段的结果。这些组件添加到设计所使用的逻辑资源中,就硬件而言,发挥了巨大作用。

 

结论

 

在设计中采用流水线技术非常消耗资源。用户必须在适当的瞬间将整个系统划分为多个个体阶段,以确保最佳性能。然而设计执行后所带来的优势将与辛苦的付出成正比

 

  • 为何及如何在FPGA中采用流水线技术已关闭评论
    A+
发布日期:2019年03月03日  所属分类:参考设计