如何在FPGA上建立MATLAB和Simulink算法原型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在FPGA上建立MATLAB和Simulink算法原型相关的知识,希望对你有一定的参考价值。

  工程师通常使用浮点数据类型来测试新的构想和开发初始算法。然而,FPGA和ASIC硬件实现要求转换为定点数据类型,而这往往会造成量化误差。使用
手动工作流程时,通常在HDL编码过程中执行定点量化。在该工作流程中,工程师无法轻易地通过比较定点表示形式和浮点参考值量化定点量化的效应,而分析针
对溢出的HDL实现也同样不易。

  为了明智确定所需的小数位数,在开始HDL编码过程之前,工程师需要某种方法来比较浮点仿真结果与定点仿真结果。增加小数位数可以减小量化误差;不过,这种方法需要增加字长(区域增多、功耗升高)。

  例如,图5展示了DDC滤波器链路中低通滤波器第一阶段浮点与定点仿真结果的差异。这些差异是因定点量化所致。上方图形显示了浮点与定点仿真结果的重叠效果。下方图形显示了图中每一点的量化误差。工程师可能需要根据设计规范来增加小数位数以减小由此引出的量化误差。

  除了选择小数位数之外,工程师还需要优化字长,实现低功耗和区域优化的设计。

  在DDC案例研究中,工程师使用Simulink定点模块组将部分数字滤波器链路的字长减少了8位之多(图6)。

  利用自动HDL代码生成功能更快生成FPGA原型

  在生成FPGA原型时,HDL代码必不可少。工程师手工编写了Verilog或VHDL代码。作为替代选择,使用HDL编码器自动生成HDL代码具有
众多明显优势。工程师可以快速地评估能否在硬件中实施当前算法;迅速评估不同的算法实现,选择最佳方案;并在FPGA上更快地建立算法原型。

  对于DDC案例研究而言,可以在55秒内生成了5780行HDL代码。工程师可以浏览并很快理解代码(图7)。自动代码生成功能允许工程师对系统级模型进行更改,并且,通过重新生成HDL代码,该功能可以在数分钟之内生成更新的HDL实现方案。

  重用具有协同仿真功能的系统级测试平台进行HDL验证

  功能验证:HDL协同仿真使工程师能够重用Simulink模型,将激励驱动至HDL仿真器,并对仿真输出执行交互式系统级分析(图8)。

  HDL仿真仅提供数字波形输出,而HDL协同仿真则提供了显示HDL代码的完整视图,并可以访问Simulink的全套系统级分析工具。当工程师观察到预期结果与HDL仿真结果存在差异时,可借助协同仿真进一步了解该失配所产生的系统级影响。

  例如,在图9中,频谱仪视图可以使工程师做出明智决定,忽略预期结果与HDL仿真结果之间的失配,其原因是该差异位于阻带区。相比之下,数字波形输出
只是将预期结果与HDL仿真结果的失配标记为误差。尽管工程师最终可能得出相同的结论,但这将需要更多的时间完成所需的分析。

  测试覆盖率:工程师可以使用HDL验证工具、Simulink设计验证工具和ModelSim/Questa自动执行代码覆盖率分析。在该工作流程
中,Simulink设计验证工具可针对模型覆盖率生成一套测试用例。HDL验证工具自动使用这一套测试用例运行ModelSim/Questa,收集代
码覆盖率数据,以对生成的代码加以全面分析。

  使用FPGA在环仿真加速验证

  使用系统级仿真和HDL协同仿真验证DDC算法之后,便可以立即在FPGA目标平台上部署DDC算法。对算法执行基于FPGA的验证(也称为FPGA
在环仿真)可以增强对算法在现实环境中有效运行的信心。相比基于主机的HDL仿真,该验证可以使工程师更快地运行测试方案。

  对于DDC算法而言,可以使用Simulink模型驱动FPGA输入激励并分析FPGA的输出(图10)。与HDL协同仿真一样,在Simulink中始终可以利用相关数据进行分析。

  图11对比了HDL协同仿真和FPGA在环仿真这两种用于DDC设计的验证方法。在本案例中,FPGA在环仿真的速度是HDL协同仿真的23倍。这样
的速度提升使工程师能够运行更广泛的测试用例并对其设计进行回归测试。这使他们能够识别出有待进一步分析的潜在问题区域。

  尽管HDL协同仿真速度较慢,但它却提高了HDL代码的可见性。因此,它很适合针对FPGA在环仿真过程中发现的问题区域进行更详细的分析。
参考技术A   在 FPGA上建立算法原型可以增强工程师的信心,使他们相信自己的算法在实际环境中的表现能够与预期相符。除了高速运行测试向量和仿真方案,工程师还可以利用FPGA原型试验软件功能以及诸如RF和模拟子系统的相关系统级功能。此外,由于FPGA原型运行速度更快,可以使用大型数据集,暴露出仿真模型未能发现的缺陷。
  采用HDL代码生成功能的基于模型的设计可以使工程师有效地建立FPGA原型,如图2所示。该图向我们展示了这样一种现实情况:工程师经常缩短详细设计阶段,试图通过尽快开始硬件开发阶段以符合开发周期的要求。现实中,当工程师发现定点算法达不到系统要求时,就得在 HDL创建阶段重新审视详细设计阶段。这样的重叠工作将使HDL创建阶段延长(如紫色长条所示),并可能引发各种设计问题(如胶合逻辑或设计补丁)。本回答被提问者和网友采纳

1.为什么要学习SIMULINK

欢迎订阅《FPGA/MATLAB/SIMULINK系列教程》

       Matlab,Matrix Laboratory的简称,是美国Mathworks公司于1984年推出的数值计算机仿真软件,经过不断的发展和完善,如今已成为覆盖多个学科,是具有超强数值计算能力和仿真分析能力的软件。Matlab应用较为简单,用大家非常熟悉的数学表达式来表达问题和求解方法。它把计算、图示和编程集成到一个环境中,用起来非常方便。同时,Matlab具有很强的开放性和适应性,在保持内核不变的情况下,Matlab推出了适合不同学科的工具箱,如图像处理工具箱,小波分析工具箱、信号处理工具箱、神经网络工具箱等,极大地方便了不同学科的研究工作。Matlab强大的绘图功能,简单的命令形式,使其越来越受到国内外科技人员的青睐,得到越来越广泛的应用。

       在MATLAB中,有一个重要的软件工作,即Simulink。Simulink是一个动态系统建模、仿真和分析的软件包,它是一种基于MATLAB的框图设计环境,支持线性系统和非线性系统,可以用连续采样时间、离散采样时间或两种混合的采样时间进行建模,它也支持多速率系统,也就是系统中的不同部分具有不同的采样速率。为了创建动态系统模型,Simulink提供了一个建立模型方块图的图形用户接口(GUI),这个创建过程只需要单击和拖动鼠标操作就能完成。利用这个接口,用户可以像用笔在草纸上绘制模型一样,只要构建出系统的方块图即可,这与以前的仿真软件包要求解算微分方程和编写算法语言程序不同,它提供的是一种更快捷、更直接明了的方式,而且用户可以立即看到系统的仿真结果。

       Si

以上是关于如何在FPGA上建立MATLAB和Simulink算法原型的主要内容,如果未能解决你的问题,请参考以下文章

FPGA与simulink联合实时环路系列——实验二LED

FPGA与simulink联合实时环路系列——实验一 测试

基于PMSM的FOC控制器simulink仿真和FPGA实现

2.MATLAB/Simulink安装

Simulink教程案例3结合MATLAB对比PID控制器和模糊控制器

[原创]Simulink动态封装子系统(1):如何创建自己的Simulink模块