在FPGA上建立MATLAB和Simulink算法原型
芯片设计和验证工程师通常要为在硅片上实现的每一行RTL代码写出多达10行测试平台代码。验证任务在设计周期内可能会占用50%或更多的时间。尽管如此辛苦,仍有接近60%的芯片存在功能瑕疵,需要返工。由于HDL仿真不足以发现系统级错误,芯片设计人员正利用FPGA来加速算法创建和原型设计。
利用FPGA处理大型测试数据集可以使工程师快速评估算法和架构并迅速做出权衡。工程师也可以在实际环境下测试设计,避免因使用HDL仿真器耗大量时间。系统级设计和验证工具(如MATLAB和Simulink)通过在FPGA上快速建立算法原型,可以帮助工程师实现这些优势。
本文将介绍使用MATLAB和Simulink创建FPGA原型的最佳方法。这些最佳方法包括:在设计过程初期分析定点量化的效应并优化字长,产生更小、更高效的实现方案;利用自动HDL代码生成功能,更快生成FPGA原型;重用具有HDL协同仿真功能的系统级测试平台,采用系统级指标分析HDL实现方案;通过FPGA在环仿真加速验证(图1)。
为什么在FPGA上建立原型?
在FPGA上建立算法原型可以增强工程师的信心,使他们相信自己的算法在实际环境中的表现能够与预期相符。除了高速运行测试向量和仿真方案,工程师还可以利用FPGA原型试验软件功能以及诸如RF和模拟子系统的相关系统级功能。此外,由于FPGA原型运行速度更快,可以使用大型数据集,暴露出仿真模型未能发现的缺陷。
采用HDL代码生成功能的基于模型的设计可以使工程师有效地建立FPGA原型,如图2所示。该图向我们展示了这样一种现实情况:工程师经常缩短详细设计阶段,试图通过尽快开始硬件开发阶段以符合开发周期的要求。现实中,当工程师发现定点算法达不到系统要求时,就得在HDL创建阶段重新审视详细设计阶段。这样的重叠工作将使HDL创建阶段延长(如紫色长条所示),并可能引发各种设计问题(如胶合逻辑或设计补丁)。
由于自动HDL代码生成流程比手工编码快,工程师得以把节省下来的时间投入到详细设计阶段,生成更优质的定点算法。与手动的工作流程相比,这种方法使工程师能够以更快的速度生成质量更佳的FPGA原型。
数字下变频器案例研究
为了说明采用基于模型的设计建立FPGA原型的最佳方法,可借助数字下变频器(DDC)来进行案例研究。在众多的通信系统中,DDC是一种普通的构建块(图3)。该构建块用于将高速通带输入转换为低速基带输出,以便使用较低采样率时钟进行处理。这样,在硬件实施阶段便可降低功耗、节约资源。DDC的主要部件包括:数控振荡器(NCO)、混频器和数字滤波器链路(图4)。
在设计过程初期分析定点量化的效应
工程师通常使用浮点数据类型来测试新的构想和开发初始算法。然而,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)
- 基于Simulink技术的噪声调幅干扰仿真(03-08)
- PWM整流器在电动汽车充电机上的应用(02-04)
- 一种用于压力传感器的温度控制系统设计(02-10)
- 基于Matlab/Simulink的变频系统仿真(08-23)
- 电力驱动系统逆变器实时仿真(08-16)
- 基于MEMS的无线鼠标设计方案(12-01)