MATLAB 算法面向 FPGA 的浮点定点转换 (一)

 做者:Tom Hill DSP 工具营销技术营销工程师 赛灵思公司算法

AccelChip 公司(最近已被赛灵思公司收购)最近所作的一次调查显示,53% 的回答者认为浮点定点转换是在 FPGA 上实现算法时最困难的地方(图 1)。架构

AccelChip DSP 设计挑战调查

虽然 MATLAB 是一种强大的运算开发工具,但其许多优势却在浮点定点转换过程当中被下降了。例如,因为定点算术中精度较低,新的数学偏差被引入算法。您必须重写代码,使用可以反映实际硬件宏架构的低级模型来替换高级函数和运算符。而仿真运行时间将可能长达 50 倍之久。基于这些缘由,MATLAB,这一算法开发的优点选择,却常常遭到遗弃,转而使用 C/C++ 进行定点建模。函数

生成定点模型工具

  若是未将高级函数和运算符替换为硬件精确的宏架构,浮点 MATLAB 算法的定点表示将不会真正反映最终硬件的响应(图 2)。性能

 替换内置运算符和函数

图 3 对此进行了突出显示,该图使用一组量化为 8 位有符号二进制补码的随机输入矢量,对 MATLAB 除法运算符与工具硬件 CORDIC 除法算法的定点响应进行了比较。开发工具

MATLAB “/” 与 CORDIC 的定点响应比较

根据数据数值,计算输出之间将存在巨大分歧。
 

  在定点生成过程当中,AccelDSP™ Synthesis 综合工具的 IP Explorer™ 技术将自动使用硬件精确的表达式替换高级 MATLAB 函数和运算符(图 4)。此步骤是透明的,且不须要对 MATLAB 代码进行修改。您可使用综合指示来从新定义初始宏架构和微架构选择。测试

 自动硬件精确 IP 插入

一旦这些运算符替换为硬件精确的宏架构,量化过程就将开始.设计

图形辅助式自动量化ip

  与定点 DSP 处理器不一样, FPGA 结构容许使用可变定点字长。经过解除对变量的固定 16 位或 24 位边界限制,您能够执行须要位数增加的算术计算而不会引发额外的数值偏差。开发

  这对于像雷达、导航和制导系统等要求较高数值精度的应用来讲是一个巨大的优势。

  在大多数状况下,位增加率定律 (bit growth rules) 是简单直接和易于理解的。例如,一次加法的结果增加一位,而一次乘法的结果则增加到等于输入字长度的总长度(图 5)。然而,要在实际设计中肯定变量的这些属性,将是一个高度反复的过程。容许未检查的位数增加现象发生,在硬件中代价是昂贵的,一般也是没必要要的。若是您技术功底深厚,您能够采用各类技巧来尽量地减少字长而同时保持数值精度。

 

肯定变量的初始量化值和随后对该值的细化改进的过程,很是适合自动化。AccelDSP Synthesis 综合工具包括自动化浮点定点转换,该功能将在仿真过程当中对浮点 MATLAB 模型进行分析,以肯定输入数据和常量的动态范围要求。这些值提供了自动量化过程的起点,而后该过程将利用从 6,000 多个设计中得到的大量内置经验,肯定下游变量的最佳字长。

  经过自动量化而得到的初始定点模型提供了一个良好的起点,但通常须要对该模型进行细化改进。

  MATLAB 提供了一种开发算法数学模型的高效环境,这种算法一般只需使用一组较少的仿真矢量就可完成。

  该过程高度反复,且紧密耦合至数据做用 (data effect) 的分析。为了最大程度地缩短这一反复循环时间,AccelDSP Synthesis 综合工具提供了一种加速定点仿真流程。

分析定点数据做用

  MATLAB 提供了一种开发算法数学模型的高效环境,这种算法一般只需使用一组较少的仿真矢量就可完成。可是,当把该算法应用到定点硬件时,您将须要增长数据集,以精确地肯定真实世界的环境响应。MATLAB 是一种解释型仿真器,可能没法为这些较大的、CPU 强度较高的定点仿真提供必需的性能。所以,开发者经常转向 C/C++。

加速定点仿真

  AccelDSP Synthesis 综合工具的 M2C-Accelerator 自动生成一个硬件精确的定点 C++ 模型和测试基准,以加快定点仿真。

  消除手动记录步骤节省了开发时间,大程度地减少了偏差的引入。因为 C++ 是编译式的,所以可提供高达 1000 倍的仿真性能优点(图 6)。这种性能水平一般是那些要求理解定点数据做用的大型矢量集所必需的

FFT 示例仿真运行时间

若是您想继续使用 MATLAB 可视化环境,包括其绘图功能,M2C-Accelerator 还可生成一个可用于原 MATLAB 测试基准脚本文件仿真的定点 C/C++ dll