你并不总是需要转换为固定点,FPGA或ASIC部署

作者:杰克·埃里克森,基兰·金塔里,乔纳森·杨,MathWorks出版社

MATLAB®和Sim万博1manbetxulink®使用浮点的建模,以确保算法仿真高精度计算。转换成固定点降低数学精确度,并且它可以是具有挑战性的转换过程中撞击数据类型字长度和数学精确度之间的平衡。对于需要高动态范围或高精度计算中(例如,具有反馈回路的设计),定点转换可以消耗周或工程时间个月,并且可以导致大的定点字长。

与发布R2016b开始,您可以直接从单精度使用HDL编码器生成FPGA或ASIC实现HDL代码在Simulink浮点数据™万博1manbetxnative浮点图书馆。

在这篇文章中,我们将介绍原生浮点的工作流程,使用部署到FPGA作为例证的IIR滤波器。然后,我们将审查使用固定点的挑战,比较使用单精度浮点或固定点的面积和频率的权衡。我们还将展示浮点和定点的组合如何能够给你更高的精度,同时减少在实际设计转换和实施时间。您将看到如何浮点可以显著减少面积,改善在现实世界的设计具有高动态范围要求的速度。

原生浮点工具:发动机罩下的

HDL编码器通过在FPGA或ASIC资源上模拟底层数学实现单精度算术(图1)。生成的逻辑将输入浮点信号解压缩为符号、指数和尾数——分别为1、8和23位宽的单个整数。生成的硬件描述语言(VHDL)®或Verilog®然后,逻辑执行浮点计算(在图1中为乘法),计算出由输入符号位产生的符号位、大小乘法、指数的加法以及计算结果所需的相应的标准化。逻辑的最后阶段将符号、指数和尾数打包成浮点数据类型。

图1.如何HDL编码器映射的单精度浮点乘法到定点硬件资源。

HDL编码器完成所有自动为您的单精度运算,当你选择在HDL流程顾问的“native浮点库”代码生成选项。您还可以设置提供更多的控制权的浮点运算是如何用硬件实现方案,如针对特定的延迟,在FPGA针对特定的DSP逻辑。HDLCoder还提供了一些选项来冲洗非正规为零,并有效地处理的INF和NaN。

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

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

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

然而,实施在固定点相同的方程需要许多步骤和数值考虑(图3)。例如,你必须打破划分为乘法和倒数,使用​​近似的方法,例如牛顿 - 拉夫逊或LUT非线性倒数运算,使用不同的数据类型来仔细控制位成长,选择适当的分子和分母的类型,和使用特定类型的输出和累加器类型的加法器和减法器。

图3.定点执行(1-A)/(1 + A)。

探索IIR实现选项

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

图4.一个。有噪声正弦波输入的IIR滤波器的三个实施方式。

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

图4c。IIR_filter_fixpt实现,它使用已签名,18位字长,与用于分数长度的那些位的16位定点的数据类型。

测试环境被设置为的单精度结果和定点滤波器与双精度滤波器,这被认为是金色的参考进行比较。在两种情况下,精度的损失将产生一定量的错误。现在的问题是,错误是否是我们应用的可接受公差范围内。

当我们跑了定点设计师™来执行转换,我们指定的1%的误差容限。图5示出了比较的结果。对于单精度版本的误差为10的数量级上8,而定点数据类型是10的数量级上5。这在我们指定的误差范围内。如果您的应用程序需要更高的精度,您可能需要增加定点字长。

图5。仿真结果将双精度IIR滤波结果与单精度结果(上)和定点结果(下)进行了比较。

汇聚在这个量化需要的硬件设计,可能的系统输入一个全面的了解,明确的精度要求,并从固定点设计一些援助经验。这方面的努力是值得的,如果它可以帮助你缩小你的算法进行生产部署。但是,在哪里,你需要简单地部署到原型硬件什么的情况下,或精度要求,难以减少物理足迹?

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

简化了与native浮点过程

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

  • 您不必花时间试图分析,以保持足够的精度为各种输入数据所需要的比特的最小数目。
  • 单精度浮点运算的动态范围以32位的固定成本更有效地扩展。

现在,设计过程要简单得多,而且你知道,有迹象,指数的位,尾数可以表示数字的宽动态范围。在图6中的表比较了浮点和使用图5中所示的数据类型的选择IIR滤波器的定点实现的资源利用率。

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

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

管理资源使用与native浮点

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

  • 使用HDL编码器的优化。资源共享和其他算法级优化支持本地浮点代码生成。万博1manbetx例如,这些优化可以通过共享消耗大量面积的复杂数学操作来减少面积,例如EXPATAN2通过时分复用和其他共享和流媒体技术。
  • 在适当情况下使用定点转换过程。定点转换是直接为不高动态范围的要求或反馈回路设计,以及定点设计工具,帮助自动完成这一过程。在某些类型的设计,实现了收敛,无需添加额外的比特是很困难的。在这种情况下,使用本机浮点的选择性应用是一个更好的选择。此方法使用定点转换为大多数的设计,同时允许您使用在数据路径中的高动态范围部分浮点。
  • 创建浮点和设计定点“孤岛”。一旦确定了设计的,其中将被挑战以实现收敛的部分,则可以通过使用该输入转换成单精度数据类型转换块,然后转换该操作返回到适当的固定点的输出分离它们类型。图7示出的电动机控制设计,其中的增益操作和正余弦操作被分离为天然浮点区域的一部分,与输出转换回定点值。

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

这里是一个快速指南选择浮点或定点在您的设计:

如果你的整个设计使用浮点数:

  • 你缺乏定点量化的经验。
  • 你的算法混合了非常大和非常小的数字。
  • 您的设计广泛使用大于32位的定点类型。
  • 你的设计包括非线性操作,如划分MODREM日志EXP,:,这是很难转换为固定点。
  • 你必须灵活地使用更大的面积和等待时间(例如,在较低的带宽的应用,如电机控制或音频处理)。

使用定点为您的整个设计,如果:

  • 您在定点量化经历。
  • 将您的算法转换为定点非常简单。
  • 您有严格的区域和延迟要求。

混合浮动和固定点,如果:

  • 您的设计混合了控制逻辑和具有大动态范围的数据路径。
  • 只有设计的一部分是具有挑战性的量化为固定点。
  • 在您的区域需求中有足够的余量来限制浮点运算的使用。

一个真实世界的例子使用native浮点

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

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

要查看浮点如何本地发挥作用在这样的情况下,可以考虑电动车模型(图9)的这个例子。这是结合许多组件,包括电池模型,逆变器,PMSM和车辆模型的复杂模型。

图9.电动车辆模型。

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

图10.数学方程在电气车辆模型中使用。

针对这样的模型硬件与固定点很可能是因为组件之间的所有反馈回路来挑战。这可能需要几个月的时间来弄清楚如何减少与永磁同步电机和变频器之间复杂的反馈回路组件的系统的量化误差。为了减少错误,你必须用很大的字长度。随着浮点支持,然而,你可以直接针对硬件这万博1manbetx个模型没有将其转换为固定点。

如图11所示,浮点是数据类型的用于与反馈回路-浮点实现使用较小的面积,并执行更好的算法,因为相同的算法的固定点版本需要大的字长的正确选择。

定点和电动车辆模型的浮点实施方案的图11的比较。

结论

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

对于需要同时满足这两个条件的设计—定点的控制逻辑和浮点的高动态范围数据路径—您可以很容易地将两者结合起来。

发布时间2018