浮点FPGA的效率和性能一直受到长延迟和布线拥塞的限制。此外,传统的FPGA设计流程基于使用Verilog或VHDL编写寄存器级硬件描述,并不适用于实现复杂的浮点算法。.
Altera 开发了一种全新的浮点设计流程,旨在简化 Altera FPGA 上浮点数字信号处理算法的实现,从而使这些设计能够达到迄今为止最高的性能和效率水平。与构建由基本浮点运算符(例如,乘法、加法、平方)组成的数据通路不同,浮点编译器生成的数据通路将基本运算符组合成一个单一的函数或数据通路。这消除了传统浮点 FPGA 设计中存在的冗余。此外,Altera 的设计流程是一种基于模型的高级设计流程,它利用了 Altera 的 DSP Builder Advanced Blockset 以及 MATLAB 和 MathWorks Simulink。Altera 预计,这种高级方法将使 FPGA 设计人员能够比使用传统的基于 HDL 的设计更快地实现和验证复杂的浮点算法。.
BDTI 对 Altera 的浮点 DSP 设计流程进行了独立分析。BDTI 的目标是了解 Altera FPGA 在高级浮点 DSP 应用中可达到的性能,并评估 Altera 浮点 DSP 设计流程的易用性。本文将介绍 BDTI 的研究成果,以及背景信息和所用方法的详细说明。.
1. 引言
浮点设计示例
数字芯片的进步使得以往仅限于研究领域的复杂算法得以应用于常见的嵌入式计算应用中。例如,线性代数(特别是求解包含大量线性方程组的系统)多年来主要用于研究领域,因为研究领域拥有大规模的计算资源,且通常不需要实时计算。求解大型系统需要矩阵求逆或某种类型的矩阵分解。除了对计算能力的要求外,如果动态范围不足,这些技术还可能出现数值不稳定。因此,只有在浮点器件上才能高效、精确地实现这些算法。Altera 最近
在其 DSP Builder 高级模块集工具包中引入了浮点计算功能,旨在简化 Altera FPGA 上浮点 DSP 算法的实现,并提高浮点设计相对于传统 FPGA 设计技术的性能和效率。在之前的文章 [1] 中,BDTI 分析并评估了 Altera 的 Quartus II v11.0 软件工具包在单通道浮点 Cholesky 求解器示例实现上的性能和效率,该求解器是为 40 nm Stratix IV 和 Arria IV FPGA 综合的。
本文使用 Quartus II 软件工具的最新版本 12.0 评估了 Altera 提出的解决方案的有效性,并探讨了 Altera 28 nm Stratix V 和 Arria V FPGA 的性能。为了进行这项评估,BDTI 着重使用两种分解方法求解大量线性方程组:多通道 Cholesky 矩阵分解和基于 Gram-Schmidt 过程的 QR 分解。这些分解方法,结合前向和后向代入,可以求解形如 Ax = B 的线性方程组中的向量 x。.
矩阵分解广泛应用于军事雷达领域,例如空时自适应处理(STAP),以及数字通信中的各种估计问题。QR分解通常用于任意m×n矩阵A,而Cholesky分解由于其计算效率高,是方阵、对称正定矩阵最常用的算法。这两种分解方法都采用了计算密集型算法,需要高精度的数据,因此必须使用浮点运算。此外,本文讨论的两个示例在算法中使用了标量积和嵌套循环,这些运算在与线性代数和有限脉冲响应(FIR)滤波器相关的各种数字信号处理应用中十分常见。.
本文中的示例使用两种方法求解复杂数据的线性方程组,并展示了结果。如第 4 节所述,使用 QR 求解器,Altera Stratix V FPGA 能够以 203 MHz 的速度每秒执行 315 次 400x400 矩阵分解,达到每秒 162×10⁹ 次浮点运算 (GFLOPS)。
本文评估的两个设计示例包含在 DSP Builder v12.0 软件工具中,也可从 [此处缺少来源] 订购
浮点设计流程:
FPGA 通常并非高级浮点应用的首选平台。尽管 FPGA 厂商提供了浮点原语库,但 FPGA 在浮点应用中的性能却受到严重限制。传统浮点 FPFA 设计的低效部分原因在于浮点运算符的高度分段性和算术结构,这会导致数据路径延迟高和布线拥塞。反过来,这些延迟又会在数据相关的设计中造成难以管理的问题。最终结果往往是设计的工作频率较低。Altera
的 DSP Builder 高级模块集工具流程在架构和系统设计层面都解决了这些难题。Altera 的浮点编译器将数据路径的大部分合并成一个浮点函数,而不是通过组合基本浮点运算符来生成它们。这是通过分析数据路径中的位增长并选择最佳输入归一化方式来实现的,从而在数据路径上分配足够的精度,以尽可能减少归一化和反归一化步骤,如图 1 所示。IEEE 754 格式仅用于数据路径边界;数据路径本身使用更大的尾数宽度,以增加动态范围并减少连续运算符之间所需的归一化和反归一化步骤。归一化和反归一化函数使用宽度高达 48 位的快速桶形移位器来处理单精度浮点数。这会消耗大量的逻辑和布线资源,也是基于 FPGA 的浮点实现效率低下的主要原因。组合数据路径方法可以显著减少快速桶形移位器的数量。更高精度的尾数乘法在 Stratix V 和 Arria V 器件上利用了 Altera 的 27 位 x 27 位乘法器模式。图 1(b) 对比了包含两个加法器的简单字符串的组合数据通路方法与图 1(a) 所示的传统实现方式。图 1(b) 中的组合数据通路通过抑制第一个加法器输出的非归一化和第二个加法器输入的归一化,消除了运算符间的冗余。由于省去了额外的逻辑和布线,并使用了硬件乘法器,使得复杂数据通路的时序和延迟可预测。单精度和双精度 IEEE 754 浮点算法的实现所需的逻辑资源更少,性能更高。Altera 声称,与使用基本运算符实现的等效数据通路相比,组合数据通路可将逻辑资源和延迟降低 50% [2]。此外,由于内部数据的表示方式更加广泛,其数据精度通常高于使用基本 IEEE 754 浮点运算符的库所能达到的精度。
Altera 的浮点 DSP 设计工作流程整合了 Altera 的 DSP Builder 高级模块集和 Quartus II 软件工具,以及 MATLAB 和 MathWorks Simulink。Simulink 环境允许设计人员在算法行为层面进行工作,从而描述、调试和验证复杂的系统。Simulink 的数据类型传播和向量数据处理等功能已集成到 DSP Builder 高级模块集中,使设计人员能够快速探索算法设计空间。.

为了评估 Altera 浮点设计流程的效率和性能,BDTI 使用 DSP Builder 高级模块集工具验证了两个示例,这两个示例都涉及使用单精度浮点表示的复杂数据类型求解一组联立线性方程组。其中一个解是通过 Cholesky 分解获得的,而另一个解是通过 Gram-Schmidt 正交化过程的 QR 分解获得的。本文第 2 节描述了这两个浮点示例的实现。第 3 节解释了 BDTI 使用该设计流程和工具包的经验。第 4 节展示了使用两款 Altera FPGA 实现的性能:高端中型 Stratix V 5SGSMD5K2F40C2n 和中端 Arria V 5AGTFD7K3F40I3N。最后,第 5 节总结了 BDTI 的结论。.
2. 实现
背景信息
许多应用都涉及形如 Ax = b 的线性方程组。无论是涉及线性最小二乘法的优化问题、用于预测问题的卡尔曼滤波器,还是 MIMO 通信信道中的估计问题,其本质都是找到形如 Ax = b 的线性方程组的数值解。对于一般的 m×n 矩阵(其中 m 为矩阵的高度,n 为矩阵的宽度),可以使用 QR 分解来求解向量 x。该算法将矩阵 A 分解为一个 m×n 的标准正交矩阵 Q 和一个 n×n 的上三角矩阵 R。由于 Q 是标准正交矩阵,因此 QTQ = I 且 Rx = QTb。由于 R 是上三角矩阵,因此可以通过回代轻松求解 x,甚至无需对原始矩阵 A 求逆。在本文的 QR 分解示例中,我们处理的是超定矩阵,其中 m ≠ n。
当矩阵 A 为对称正定矩阵时(例如许多问题中出现的协方差矩阵),通常使用 Cholesky 分解及其求解器。该算法求矩阵 A 的逆矩阵,从而求解向量 x,即 x = A⁻¹b。Cholesky 分解的效率至少是 QR 分解的两倍,具体效率取决于所使用的分解算法。由于这些分解算法本质上是递归的,并且包含除法运算,因此随着矩阵规模的增大,需要更大的数值动态范围。在大多数情况下,即使对于像 4x4 这样小的矩阵(例如在 MIMO 信道估计中),也需要进行浮点运算。对于需要更高性能的大型系统(例如军事应用),浮点运算速度对于嵌入式系统而言往往过高。设计人员经常会放弃该算法,转而寻求次优方案,或者采用高性能浮点处理器,但这会导致成本和设计工作量的增加。.
作者:
由伯克利设计技术公司团队撰写。2012年10月
(二月续)

