技术文章及通讯

对于FPGA或ASIC部署,您并不总是需要转换为定点

作者:Jack Erickson, Kiran Kintali, Jonathan Young, MathWorks


MATLAB®和仿真软金宝app件®采用基于浮点的建模方法,保证算法仿真计算精度高。转换为固定点会降低数学精度,并且在转换期间在数据类型字长和数学精度之间取得适当的平衡可能具有挑战性。对于需要高动态范围或高精度的计算(例如,具有反馈循环的设计),定点转换可能会消耗数周或数月的工程时间,并可能导致较大的定点字长。

从R2016b版本开始,您可以使用HDL Coder™直接从Simulink中的单精度浮点数据生成用于FPGA或ASIC实现的HDL代码金宝app本机浮点数图书馆。

在本文中,我们将使用部署到FPGA上的IIR过滤器作为示例,介绍本机浮点工作流。然后,我们将回顾使用定点的挑战,并比较使用单精度浮点或定点的面积和频率权衡。我们还将展示浮点和定点的组合如何为您提供更高的精度,同时减少实际设计中的转换和实现时间。您将看到浮点数如何在具有高动态范围要求的实际设计中显著减少面积并提高速度。

原生浮点实现:底层

HDL Coder通过模拟FPGA或ASIC资源上的底层数学来实现单精度算术(图1)。生成的逻辑将输入浮点信号解包为符号、指数和尾数整数,分别为1、8和23位宽。生成的VHDL®或Verilog®逻辑然后执行浮点计算——在图1所示的情况下,是乘法运算——通过计算输入符号位产生的符号位、幅度乘法、指数相加以及计算结果所需的相应归一化。逻辑的最后一个阶段将符号、指数和尾数打包回浮点数据类型。

图1。HDL Coder如何将单精度浮点乘法映射到定点硬件资源。

图1。HDL Coder如何将单精度浮点乘法映射到定点硬件资源。

当您在HDL Workflow Advisor中选择“本机浮点库”代码生成选项时,HDL Coder为您的单精度操作自动完成所有这些操作。您还可以设置选项,以提供对如何在硬件中实现浮点操作的更多控制,例如针对特定的延迟,针对FPGA上的特定DSP逻辑。HDLCoder还提供了选项,以清除非常态为零,并有效地处理inf和nan。

用定点转换解决动态范围问题

一个简单的表达1 a / 1 +,如果需要高动态范围实现,则可以使用单精度自然翻译(图2)。

图2。单精度实现(1-a)/(1+a)。

图2。单精度实现(1-a)/(1+a)。

然而,在不动点上实现相同的方程需要许多步骤和数值考虑(图3)。例如,您必须将除法分解为乘法和倒数,使用牛顿-拉弗森或LUT等近似方法进行非线性倒数运算,使用不同的数据类型仔细控制位增长,选择适当的分子和分母类型,并使用特定的输出类型和累加器类型作为加和减法。

图3。(1-a)/(1+a)的定点实现。

图3。(1-a)/(1+a)的定点实现。

探索IIR实施方案

让我们看一个无限脉冲响应(IIR)滤波器的例子。一个IIR滤波器需要高动态范围计算与反馈回路,使得它很难收敛到一个定点量化。图4a显示了一个测试环境,比较了三个版本的带噪声正弦波输入的相同IIR滤波器。正弦波的振幅为1,添加的噪声使振幅略有增加。第一个版本的滤波器是双精度的(图4b)。第二个版本是单精度。第三个版本是一个定点实现(图4c)。这种实现导致数据类型的字长最多为22位,其中1位分配给符号,21位分配给分数。这种特定的数据类型留下0位来表示整数值,这是有意义的,因为对于给定的刺激,它的值范围总是在-1到1之间。如果设计必须处理不同的输入值,则在定点量化过程中需要考虑到这一点。

图4。a.带噪声正弦波输入的IIR滤波器的三种实现。

图4。a.带噪声正弦波输入的IIR滤波器的三种实现。

图4 b。带噪声正弦波输入的IIR滤波器。b. IIR_filter设计,显示为双精度数据类型。

图4 b。IIR_filter实现,用双精度数据类型显示。

图4 c。IIR_filter_fixpt实现,它使用带符号的定点数据类型,18位字长,其中16位为分数长度。

图4 c。IIR_filter_fixpt实现,它使用带符号的定点数据类型,18位字长,其中16位为分数长度。

建立测试环境,将单精度和定点滤波器的结果与双精度滤波器的结果进行比较,认为双精度滤波器是黄金参考。在这两种情况下,精度的损失都会产生一定的误差。问题是该错误是否在应用程序可接受的容忍范围内。

当我们运行定点设计器™来执行转换时,我们指定了1%的容错。图5显示了比较的结果。单精度版本的误差为10数量级8,而定点数据类型的数量级为105.这在我们指定的容错范围内。如果应用程序需要更高的精度,则可能需要增加定点单词长度。

图5。仿真结果比较了双精度IIR滤波结果与单精度和定点版本。

图5。对比双精度IIR滤波结果与单精度结果(上)和定点结果(下)的仿真结果。

这种量化需要硬件设计的经验,对可能的系统输入的全面理解,明确的精度要求,以及来自定点设计师的一些帮助。如果可以帮助您缩小算法以适应生产部署,那么这种努力是值得的。但是,如果您需要简单地部署到原型硬件,或者精度要求使其难以减少物理足迹,那么该如何处理呢?

在这些情况下的解决方案是使用单精度本机浮点数。

使用本地浮点数简化过程

使用本地浮点数有两个好处:

  • 您不必花费时间试图分析为各种各样的输入数据保持足够的精度所需的最小位数。
  • 单精度浮点运算的动态范围在32位的固定开销下可以更有效地扩展。

现在设计过程简单多了,您知道使用符号、指数和尾数可以表示广泛的动态范围的数字。图6中的表格使用图5中所示的数据类型选择比较了IIR过滤器的浮点和定点实现的资源利用率。

图6。IIR过滤器的定点实现和浮点实现之间的资源使用比较。

图6。IIR过滤器的定点实现和浮点实现之间的资源使用比较。

当您比较从浮点和定点实现获得的结果时,请记住,浮点计算比简单的定点算术需要更多的操作。当部署到FPGA或ASIC时,使用单一精度将导致更高的物理资源占用。如果电路面积是一个问题,那么您将需要在更高的精度和资源使用之间进行权衡。您还可以使用浮点和定点的组合来减少面积,同时保留单个精度,从而在数值密集的计算孤岛中实现高动态范围。

使用本地浮点数管理资源使用

本机浮点是一种为高动态范围应用程序生成代码以编程FPGA或部署到ASIC的简单方法。但是如果本地浮点数超出了你的资源预算,有几种方法可以减少资源使用:

  • 使用HDL编码器优化。资源共享和其他算法级优化支持原生浮点代码生成。金宝app例如,这些优化可以通过共享消耗大量面积的复杂数学操作来减少面积,例如经验值量化通过分时多路复用和其他共享和流技术。
  • 在适当的地方使用定点转换过程。对于没有高动态范围要求或反馈循环的设计,定点转换非常简单,定点设计器有助于自动化这一过程。在某些类型的设计中,在不增加额外比特的情况下实现收敛是很困难的。在这种情况下,选择性地使用本机浮点数应用程序是更好的选择。此方法在大部分设计中使用定点转换,同时允许在数据路径的高动态范围部分中使用浮点。
  • 在设计中创建浮点和定点“岛”。一旦确定了设计中难以实现收敛的部分,就可以通过使用数据类型转换块将它们隔离开来,该块将输入转换为单一精度,然后将操作的输出转换回适当的定点类型。图7显示了电机控制设计的一部分,其中增益操作和sincos操作被隔离为原生浮点区域,输出转换回定点值。
图7。在同一设计中混合了定点和本地浮点。

图7。在同一设计中混合了定点和本地浮点。

下面是在设计中选择浮点或定点的快速指南:

在以下情况下,在整个设计中使用浮点数:

  • 你缺乏定点量化的经验。
  • 你的算法混合了非常大和非常小的数字。
  • 您的设计广泛使用大于32位的定点类型。
  • 您的设计包括非线性操作,例如国防部快速眼动日志经验值,:,这很难转化为定点。
  • 您可以灵活地使用更大的区域和延迟(例如,在低带宽应用程序中,如电机控制或音频处理)。

如果出现以下情况,请在整个设计中使用定点:

  • 你在定点量化方面很有经验。
  • 将你的算法转换成定点是很简单的。
  • 你有严格的面积和延迟要求。

在以下情况下,将浮点和定点混合使用:

  • 您的设计混合了具有大动态范围的控制逻辑和数据路径。
  • 只有一部分设计是具有挑战性的量化到固定点。
  • 对于有限地使用浮点运算,您的面积要求有足够的裕度。

一个使用本地浮点数的真实例子

如图8所示,如果您正在处理动态范围问题并朝着更长的字长方向发展,那么您的定点实现会比浮点版本消耗更多的资源。

图8。根号函数资源利用率。

图8。根号函数资源利用率。在更大的字长时,sqrt比具有固定成本的单精度实现消耗更多的FPGA资源。

要了解原生浮点是如何在这种情况下发挥作用的,请考虑电动汽车模型的示例(图9)。这是一个包含许多组件的复杂模型,包括电池模型、逆变器、PMSM和车辆模型。

图9。电动汽车模型。

图9。电动汽车模型。

图10显示了用于实现这些组件的数学方程。

图10。电动汽车模型中使用的数学方程。

图10。电动汽车模型中使用的数学方程。

将这种模型定位到具有定点的硬件上可能具有挑战性,因为组件之间存在所有的反馈循环。在PMSM和逆变器之间有复杂反馈回路的组件系统中,如何减少量化误差可能需要几个月的时间。为了减少错误,你必须使用非常大的字长。然而,使用浮点支持,您可以直接在硬件上瞄金宝app准这个模型,而无需将其转换为定点。

如图11所示,浮点是具有反馈循环的算法的正确数据类型选择——浮点实现使用的面积更少,性能更好,因为同一算法的定点版本需要较大的字长。

图11。电动汽车模型的定点和浮点实现的比较。

图11。电动汽车模型的定点和浮点实现的比较。

结论

定点量化历来是将算法适应目标FPGA或ASIC硬件的最具挑战性的任务之一。本机浮点HDL代码生成允许您在硬件中生成用于浮点实现的VHDL或Verilog,而不需要进行定点转换。如果您正在创建一个FPGA实现,这种方法可以节省大量时间,而且它是一种将算法定位到Xilinx的更快方法®Zynq®SoC或者英特尔®SoC FPGA。

对于需要两者兼得的设计——定点的控制逻辑和浮点的高动态范围数据路径——您可以轻松地将两者结合起来。

2018年出版的