拉Sivakumar, MathWorks
工程师使用MATLAB®为信号处理、无线通信和图像视频处理等应用开发算法。为了开发概念验证,工程师需要在FPGA评估板或原型板上实现他们的设计。使用HDL Coder™工作流,发现将MATLAB算法转换为可在fpga上实现的可读和优化的HDL代码所需的关键步骤。
大家好,欢迎来到MathWorks网络研讨会“MATLAB to FPGA in 5 Steps”,这是对HDL编码器工作流程的介绍。
我是Raghu Sivakumar,印度海德拉巴产品营销团队的一员,负责FPGA、ASIC和SoC开发的MathWorks解决方案。金宝搏官方网站
简要概述一下本次网络研讨会的议程,我将介绍本次网络研讨会的动机,然后以MATLAB中的脉冲检测器算法为例,演示本次网络研讨会的设计工作流。
在本次网络研讨会中,我将从MATLAB中的脉冲检测器算法开始,在网络研讨会结束时,我们将有一个定义良好的可读HDL代码,其输入和输出定义,其数据类型定义在固定点。为了得到这段代码,我不需要编写任何HDL。在这个网络研讨会中,我将展示如何一步步地从MATLAB到HDL代码。
这让我很好地回到了这次网络研讨会的动机。我们有许多客户致力于信号处理、无线通信和图像/视频处理等应用程序,他们主要使用MATLAB。他们问我们如何将他们的MATLAB算法应用到FPGA评估板上!他们要么对FPGA编程知之甚少,要么硬件设计工程师太忙。如果这种情况与你有关,我请求你花30分钟的时间观看这个MATLAB到FPGA的5步网络研讨会。
现在让我们以MATLAB中的脉冲检测器算法为例。我之所以选择脉冲检测器,是因为它在很多应用中是一种常用的算法,而且它被广泛的受众所熟悉。关键的结论是步骤而不是算法,算法可以是一个滤波器,一个啁啾信号OFDM等。
脉冲检测算法在MATLAB中,我定义了脉冲,将它插入到发射信号中。对于真实世界的接收信号,我在发送信号中添加了噪声。现在为了找到脉冲,我让它通过一个定义了系数的滤波器然后检测脉冲通过一个max函数。你们可以看到,在MATLAB中,我可以处理整个框架。但是在硬件中,当管理并行路径的时间时,这个帧将是执行操作的传入数据流。金宝appSimulink在这方面很有帮助。我们可以想象平行路径;它具有内置的计时功能,我们可以通过操作可视化数据类型的传播。
MATLAB和Simulink都金宝app可以无缝地工作,你甚至可以在Simulink中包含MATLAB代码。我将在网络研讨会上演示这一点。
我们向客户推荐的设计工作流是利用MATLAB和Simulink的文本编程和可视化建模,并在仿真环境中构建一个基于时间的系统。金宝app
使用MATLAB,我们将创建我们的黄金参考。我们想在硬件上实现的算法部分,这将是我们的第一步。在第2步中,我们将在Simulink中建模一个基于示例的硬件实现。金宝app我们将在步骤3中优化硬件,优化速度和资源使用。在步骤4中,我们将量化数据类型为定点。最后在步骤5中生成HDL代码。在每一步,我们将确保功能和正确性验证MATLAB黄金参考。
在第二步中,我们将在Simulink环境中建模峰值检测器。金宝app
将基于MATLAB框架的黄金算法转换为基于样本的Simulink模型。金宝app
在MATLAB中,我们使用一个滤波器,通过最大函数来检测信号的峰值。在Si金宝appmulink中,我们将设计我们的模型来处理传入的数据流,并通过在最后11个样本上滑动一个窗口来检测峰值。为了检测峰值,我们将使用三个阶段,过滤输入流秒计算最大函数,并检测本地峰值。
让我们看一下演示。
我们将使用Simulink的HDL优化库金宝app,其中包含250多个块来为硬件实现建模
“来自工作空间的信号”块用于创建数据流,然后这个样本数据通过一个离散FIR滤波器块发送。块参数是MATLAB算法中的变量值。我们只是重复使用我们在MATLAB中做的工作。
在Si金宝appmulink中,当数据在模式中移动时,可以可视化数据的结构和流。我们将记录特定的信号,稍后我们将使用MATLAB黄金参考来验证Simulink模型。金宝app
在MATLAB中,我们可以找到整个信号的全局最大值,函数使用平方根等复杂运算。在硬件中,当信号流入时,我们将计算局部最大值。为了节省资源,我们将设计信号的实部和虚部的平方和,而不是使用平方根这样的复杂运算。
接下来,我们计算了最近11个样本的最大值。这在MATLAB中很容易做到,我们将使用MATLAB函数块在模型中包含ML代码。峰值是通过检查中间样本是否比其他样本大并且也大于最小阈值来发现的。
这种方法能够立即检测脉冲,因为这将在流信号到达时进行处理。
峰值由延迟使能块保持,当检测到的信号变高时显示。
为了验证这个Simulink模型是否符合我们的MATL金宝appAB黄金参考,我们将运行Simulink设计的日志信号与黄金参考的比较。在整个过程中,我们将使用MATLAB测试台脚本进行验证。
在MATLAB和Simulink中检测到的峰值位置相同,相关误差在-17 eps范围内。金宝app
通过这一步,我们已经在Simulink中建模了硬件实现,并建立了MATLAB和Simulink环境无缝地工作,因为我们甚至在Si金宝appmulink中包含MATLAB代码。
这一步的结论是
在Simulink中建模我们的硬件实现后,我们将专注于优化我们的架构——使其高效并优化硬件设计金宝app。
我们将首先为HDL代码生成准备我们的模型,然后使用优化技术来控制硬件设计中的速度和面积折衷。此外,我们将在硬件设计中增加一个信号有效性检查。
运行HDLSETUP命令,调用一系列将在后台运行的指令,并配置几个模型参数。这将模型求解器设置为离散固定步长时间求解器,并且每个样本tick将对应FPGA的一个时钟周期——数据被计时的速度和通过并行路径的信号定时。在块上的采样率时间用颜色表示,红色表示最快的采样率。
脉冲检测实现分组在一个子系统,我们将其称为脉冲检测器。这个子系统也称为被测设备(DUT),将在硬件目标上实现(HDL将从Simulink模型的这一部分生成)。金宝app我们现在可以专注于这个脉冲检测器子系统中的单个块来优化硬件。
我们将用离散FIR滤波器HDL硬件优化块替换离散FIR滤波器块。这个块提供了过滤器架构和管道寄存器放置,设计为DSP块资源高效。金宝appSimulink提供了一系列针对硬件设计进行优化的HDL优化块。
离散滤波器块有一个内置的信号有效性检查选项。使用数据有效检查是一种很好的实践,在与非连续数据源接口的硬件设计中也经常使用。在这个演示中,我设置了接收信号为真,作为滤波器的有效信号的输入。
在决定时钟周期/离散时间固定步长在FPGA上有多快的因素中,有多少操作或计算需要在给定的时钟周期中完成。沿着并行路径插入管道寄存器可以提高时钟速度。HDL Coder提供了在代码生成期间插入管道阶段的各种方法,以缩短路径,使您能够以更高的频率运行。它的延时平衡特征是在并行路径上插入匹配的管道阶段。我将在这里通过手动插入它们进行说明,这也使我能够在较高的级别上模拟这种行为。
为了可视化管道的效果,我们将手动将它们插入并行路径并模拟硬件设计模型。并行路径是FIR滤波器块的输入和LOCAL Peak子系统的输出以及有效的滤波信号路径。
我们将确保对Simulink模型所做的更改没有影响其功能,并根据Golden Ref金宝apperence验证记录的信号。运行验证测试,我们可以看到MATLAB和Simulink环境的位置是相同的,相关性误差在-17 eps范围内。金宝app
关键在于第三步
到目前为止,我们已经将基于框架的MATLAB算法转换为基于样本的Simulink模型,演示了MATLAB和Simulink环境如何无缝协作。金宝app我们采用了基于Simulink模型的示例,对其进行金宝app了代码生成的优化,并添加了有效使用硬件资源的细节。
在步骤4中,我们将量化数据类型到定点,并对黄金参考进行验证。
在MATLAB中,数据类型默认为64位双精度浮点,而在数字硬件中,数据类型是用定点表示的,因为它节约资源,还降低了功耗。在MATLAB中,不动点被表示为有符号或无符号,后跟由整数部分和分数部分组成的字长。
因此,在本节中,我们将利用Simulink的能力,通过操作可视化数据类型传播,并使用数据类金宝app型转换块将数据转换为固定点。在本演示中,我预定义了定点数据变量,以确保表示接收信号的整个范围。我们将使用数据类型转换块在模型中输入定点变量。我们将通过操作更新模型来可视化定点数据的字长,以显示Simulink自动传播定点并保持精度。金宝app当我们进行乘法运算时,我们建议将信号转换为18位的字大小,同样,在进行加法运算后将字长度转换为18位。我们这样做的原因是为了将乘法和加法操作映射到FPGA硬件上的单个DSP块。
对于这个演示,可以定义定点变量并转换数据类型,但是对于大型和复杂的模型,我们可以使用定点设计器工具。该工具通过运行模型收集数据范围,然后提出定点数据类型,我们可以应用所建议的值或设置您自己的值。最后,我们可以运行模型,查看量化的效果,然后返回并在必要的地方进行更改。这允许使用多个量化选项重新运行模拟,并提供关于数据溢出、下溢的可视化信息。
随着正在测试的设备现在被量化为定点,我们将验证所做的更改是否按照黄金参考给我们所需的结果。运行验证测试时,量化错误作为警告突出显示。由于数据类型的饱和和扩展,这是预期的行为。量化硬件设计的整体思想是在效率和精度之间找到平衡。虽然在MATLAB和Simulink中得到的峰值位置相同,但由于量化,相关误差增大。金宝app
在步骤4中,我们涵盖了以下主题…
在最后的步骤5中,我们将生成和合成我们的HDL代码。为了演示目的,我们将选择Xilinx Zynq设备,为了在生成HDL代码后进行合成,我们在MATLAB路径上包含Xilinx Vivado合成工具。
在本节中,我们将看到HDL Workflow advisor的功能,并演示跟踪生成的代码和Simulink模型之间的报告。金宝app
首先,我们将使用HDL Code Advisor运行一系列检查。这将检查模型、端口和块设置,以确保代码生成的兼容性。此外,这还使您能够检查与本机浮点数和行业标准检查的兼容性。由于这两个不适用,我们将跳过这些。当运行这些检查时,如果检查中有错误,您可以直接进行模型中推荐的更改,也可以选择“MODIFY SETTINGS”自动进行更改。
检查了我们的模型后,我们将使用HDL Advisor,它将带我们完成一系列任务和设置选择。在这里,我们将输入我们的目标设备、设备包、目标频率和合成工具的详细信息。在HDL Code生成设置中,在优化部分中我们选择了自适应管道,为了获得报告和选择时钟设置,我们将选择必要的选择。
做出选择后,我们现在可以通过运行任务“generate RTL Code and Testbench”来生成HDL代码。当所有的任务都成功完成时,你就生成了结构良好、注释良好且可读的HDL代码。我们选择的报告为我们提供了资源利用率和估计乘数的信息,DSP块利用率。优化报告链接到最终模型中插入额外寄存器的地方,例如在计算电源子系统块中,您可以看到HDL Coder已经自动添加了管道寄存器,以提高整体时钟速度。可跟踪性有两种工作方式,可以使用生成的HDL Code导航到Simulink模型,并从模型中的块跟踪它的HDL Code。金宝app在这个演示中,我选择了乘法块,我将向您展示如何从代码跟踪到模型,并从模型跟踪到代码。
使用生成的HDL代码,您可以使用支持第三方合成工具的HDL Workflow advisor进行合成,或者您可以使用自己选择的合成工具。金宝app使用HDL工作流,该工具创建必要的文件和文件夹,并在后台运行合成,此外还提供关于模型的关键时间路径的报告。这种设计工作流使用户能够在更高的抽象级别上探索设计,并快速找到满足其目标的最佳硬件架构。其中一个客户“OROLIA”公司为国防和空间应用提供定位、导航和定时(PNT)解决方案,必须为他们的第二代信标开发接收器硬件。金宝搏官方网站在此之前,他们使用模拟设计,很少有设计和实现数字接收机的经验。他们利用MATLAB和Simuli金宝appnk设计了一个专门的SDR,并实现了模拟器件射频系统的模块设计。利用HDL编码器生成可合成的HDL。这使得工程师能够专注于智能算法的设计,通过采用这种设计方法,工程师能够将开发时间缩短8个月,并将FPGA实现时间缩短了50%。
使用HDL编码器,我们可以将MATLAB算法和系统设计连接到FPGA原型硬件。使用HDL编码器,您可以从MATLAB函数、Simulink模型和状态流程图生成可合成的VHDL或Verilog。金宝app花点时间在Simulink中构建基于示例的模型,添加硬件架构,转换为固定点,并根据黄金参考验证每个步骤金宝app,使您能够控制资源利用率,并以系统步骤在FPGA上瞄准算法。生成的HDL代码与目标无关且可移植,如果您必须在另一个设备上尝试这些代码,您也可以这样做。
我希望我们今天讨论和演示的内容能引起大家的兴趣。要了解更多信息,请使用以下资源链接,其中提供了关于验证代码、定点转换等主题的信息,我鼓励您尝试在MathWorks文件交换上提供的HDL自导教程。如果您对评估HDL Coder工具感兴趣,并希望开始,请访问我们的入门页面或与您的MathWorks销售联系人联系。
谢谢大家的聆听,我们现在可以用剩下的时间回答有关讨论主题的问题了。
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。