MATLAB 算法面向 FPGA 的浮点定点转换(2)
- UID
- 1029342
- 性别
- 男
|
MATLAB 算法面向 FPGA 的浮点定点转换(2)
加速定点仿真
AccelDSP Synthesis 综合工具的 M2C-Accelerator 自动生成一个硬件精确的定点 C++ 模型和测试基准,以加快定点仿真。
消除手动记录步骤节省了开发时间,大程度地减小了误差的引入。由于 C++ 是编译式的,因此可提供高达 1000 倍的仿真性能优势(图 6)。这种性能水平通常是那些要求理解定点数据作用的大型矢量集所必需的。
如果您想继续使用 MATLAB 可视化环境,包括其绘图功能,M2C-Accelerator 还可生成一个可用于原 MATLAB 测试基准脚本文件仿真的定点 C/C++ dll。
当您已经获得初始定点结果时,分析和细化改进的过程就可以开始了。AccelDSP Synthesis 综合工具提供了一组图形工具,包括表格化报告、变量探查和绘图等,以便在这一过程中提供辅助。
观测定点位增长
一个设计必须从整体上考虑,以有效地将浮点算法转换为定点模型。
如果从早期开始就一直未对数据路径进行检查,位增长可能会快速增长而产生过度的硬件,而过度约束位增长则可能造成无法接受的数值精度损失。获得对位增长进展情况较好观测性的一种通用技巧是向一个电子表格中输入变量。AccelDSP Synthesis 综合工具通过生成一个表格化、格式化的定点报告(图 7)而提供了此类级别的观测性。
在优化硬件之前,您必须获得一个可以接受的定点响应。如果一个输出的信噪比 (SNR) 不在所需的技术规格之上,则必须对推断的量化值进行调整。这一过程通常由查找因变量上溢出和下溢出导致的重大误差开始。
上溢出和下溢出
关于输入数据动态范围的不良假设可能会引起由于变量的最高有效位 (MSB) 上溢出和最低有效位 (LSB) 下溢出而导致较大的定点误差的问题。您需要在观测和纠正更细微的定点误差之前先解决这些误差。
上溢出和下溢出报告,是 MATLAB 定点数据类型的固有属性,但不是 C/C++ 所固有的,且常常在模型重写过程中被省掉。但是,由 M2C-Accelerator 生成的 C++ 模型中包含了反映在仿真期间发生的所有上溢出和下溢出的量化例程。当这些情况发生时,它们将被汇总在“验证定点报告”中(图 8)。
一旦您解决了任何上溢出和下溢出问题,该定点模型的细化改进将更加依赖于可视化。如果另外的定点数据误差继续存在,那么您必须分析常量的作用。否则,您可以通过减小变量位宽来继续细化改进硬件的过程。在两种情况下,知道因某个特定变量的量化而引起的定点误差,在细化改进过程中都是一个有用的帮助。
| 图 7 – AccelDSP Synthesis 关于一个自适应滤波器的定点报告 | | 图 8 – AccelDSP 验证定点报告 | | 图 9 – Accel 关于一个变量的探查图 |
定点可视化
根据一组给定的数据集确定一个算法的合适定点响应,通常不是一种精确的科学行为。您常常不得不在数值精度方面做出一些折衷,以提高硬件效率。这一过程高度反复,且紧密耦合至绘图中所示定点效应的可视分析。但是,在一个输出信号上观测到不可接受的 SNR,并不总是表示那里错误地指定了一个量化值。对此,必须进行进一步的分析。
为了帮助进行这一过程,AccelDSP Synthesis 综合工具的 AccelProbe 工具以图形方式对一个给定仿真期间的任何变量的浮点和定点值进行了比较(图 9)。如果您使用的是 AccelProbe,您会迅速体会到特定变量的贡献使最终结果的误差累积的过程。您可以通过在 MATLAB 源码中增加语句 “accel_probe(variable_name)”,来“探查”一个变量。
“定点历史”图可以让您感知一个变量在仿真期间可能遇到的频繁程度。如果一个值很少出现,则需要用以在动态范围内的高端或低端存储该值的附加硬件可能具有很小的值。
结论
当创建一个 DSP 算法的数学模型时,MATLAB 是天然之选,且出于硬件考虑,可以无阻碍地使用。将一个算法转换为在 FPGA 上实现的定点模型是一个复杂的、可从 AccelDSP Synthesis 综合工具提供的自动化、加速和可视化功能中大大受益的过程。 |
|
|
|
|
|