主要内容

Simulink中基于fpga的波束形成:代码生成金宝app

此示例显示了为波束形成算法生成HDL代码的工作流的后半部分,并验证所生成的代码在功能上是正确的。

这个例子的第一部分,Simulink中基于fpga的波束形成算法设计金宝app,展示了如何在Simulink®中开发适合在硬件上实现的算法,例如现场可编程门金宝app阵列(FPGA),以及如何比较定点实现模型的输出与相应的浮点行为模型的输出。

本例使用HDL Coder™从第一部分开发的Simulink模型生成HDL代码,并使用HDL Verifier™验证H金宝appDL代码。HDL验证器用于生成一个协同仿真测试台模型,以验证生成的HDL代码的行为。该测试台使用ModelSim®进行协同仿真,以验证自动生成的HDL代码。

相控阵系统工具箱Simulink在基于帧的浮点数据上进行模型操作,金宝app并提供行为参考模型。该示例使用该行为模型来验证硬件算法的实现结果和生成的HDL代码。

HDL Coder为300多个支持HDL代码生成的Simulink块生成可移植的可合成的Verilog®和VHDL®代码。金宝app金宝app这些Simu金宝applink块使用包含延迟的定点算法对串行数据进行操作,以支持合成工具的流水线操作。

HDL Verifier帮助您测试和验证fpga, asic和soc的Verilog和VHDL设计。这个例子验证了由Simulink模型生成的HDL与运行在Simulink中的测试台架使金宝app用HDL模拟器的联合仿真。

实现模型

本教程假设您有一个Simulink模型,其中包含一个子系统,该子系统的波束形金宝app成算法是使用Simulink块设计的,这些块使用定点算法并支持HDL代码生成。金宝app的Simulink中基于fpga的波束形成算法设计金宝app示例显示如何创建这样的模型。

或者,如果您从一个新的模型开始,您可以运行hdlsetup(高密度脂蛋白编码器)为HDL代码生成配置Simulin金宝appk模型。要配置Simulink模型以创建测金宝app试台架,请打开模型设置,选择试验台HDL代码生成在左侧面板中,并勾选HDL测试台而且Cosimulation模型测试台生成输出属性组。

实施模型与行为模型的结果比较

中创建的模型Simulink中基于fpga的波束形成算法设计金宝app示例显示结果。您可以通过单击Play按钮或从M金宝appATLAB®命令行调用sim命令来运行Simulink模型。使用时间范围块来直观地比较输出帧。

modelname =“金宝appSimulinkBeamformingHDLWorkflowExample”;open_system (modelname);确保模型是可见的,没有被范围阻碍。。集(allchild (0)“可见”“关闭”);sim (modelname);

模型设置

一旦您验证了您的定点实现模型产生了与浮点行为模型相同的结果,您就可以生成HDL代码和测试平台。首先,在Simulink配置参数对话框中设置HDL代码生成参数。金宝app对于本例,在“HDL代码生成”下的“模型设置”中设置以下参数:

  • 目标:Xilinx Vivado合成工具;Virtex7家庭;设备xc7vx485t;包ffg1761,速度-1;目标频率为300mhz。

  • 优化:取消所有优化,除了平衡延迟。

  • 全局设置:设置“复位类型”为“异步”。

  • 试验台:选择HDL测试台和Cosimulation模型。

在这个模型中禁用优化的原因是因为在我们的实现中使用的一些块已经是HDL优化的块,这可能与HDL Coder优化相冲突。

HDL代码生成和测试平台创建

接下来,使用HDL Coder生成的HDL代码高密度脂蛋白算法子系统。有关如何生成HDL代码的示例,请参见从Simulink模型生成HDL代码金宝app(高密度脂蛋白编码器)

使用这些命令生成HDL代码和测试平台。

makehdl ([modelname“/ HDL算法”]);生成HDL代码makehdltb ([modelname“/ HDL算法”]);生成Cosimulation测试台

当你打电话给makehdl命令,MATLAB命令窗口显示在自动代码生成过程中添加的延迟量。在这种情况下,增加了24个延迟,导致额外的延迟24*1ms = 24ms。最终输出预计将延迟这个额外的量,总延迟为79毫秒。

由于在代码生成期间添加了这个额外的延迟,浮点行为模型的输出需要在原始55个延迟的基础上增加24个延迟来平衡延迟。这种延迟使行为模型的输出与实现模型和联合仿真输出保持一致。

生成HDL代码和测试平台的过程在工作文件夹中创建了一个新的Simulink模型,命名为金宝appgm_ < modelname > _mq.该模型包含ModelSim Cosimulation块。

使用这些命令打开测试台架模型。

Modelname = [“gm_”modelname,“_mq”];open_system (modelname);

在这个新模型中,将HDL Latency块中的延迟设置更改为79,以考虑代码生成过程添加的24个延迟。使用79的延迟可以确保行为模型输出与实现输出和联合仿真输出在时间上保持一致。

通过协同仿真验证HDL代码

在打开ModelSim之前,确保启动ModelSim的命令,vsim,位于您的机器路径上。

要运行联合仿真模型,双击Simulink测试模型左上角的蓝色矩形框以启动ModelSim。金宝app

运行Simuli金宝appnk试验台模型以显示仿真结果。您可以通过单击Play按钮或在M金宝appATLAB命令行上调用sim命令来运行Simulink模型。测试台模型包括Time Scope块,用于比较用ModelSim进行的联合仿真的输出与在Simulink中HDL子系统的输出。金宝app

如果路径上有ModelSim,则使用此命令运行测试台架。

sim (modelname);

在启动ModelSim后,运行Simulink测试台架模型将在Simuli金宝appnk中使用HDL模型的波形和时间范围填充Questa Sim。图中显示了Questa Sim和Simulink范围内的结果示例。金宝app

注意:每次要运行Simulink仿真时,必须重新启动Questa Sim。金宝app要重新启动,请调用重新启动在Questa Sim命令行。或者,您可以退出Questa Sim并通过双击Simulink测试台架模型左上角的蓝色框重新启动它。金宝app

Simu金宝applink范围显示,联合仿真和HDL模型(DUT)产生了由行为模型产生的原始信号的79ms延迟版本,正如预期的那样,两种波形之间没有差异。79毫秒的延迟是由于原来的55毫秒延迟添加到高密度脂蛋白算法子系统,以支持合成工具的流水线和额外的24毫秒延迟,由于延迟平衡增加了HDL代码生成。在代码生成步骤中报告了额外的24个延迟。

对比联合金宝app仿真结果的Simulink范围可以在测试台架模型中找到比较子系统,它位于高密度脂蛋白Algorithm_mq子系统。

使用此命令打开具有作用域的子系统。

open_system ([modelname,“比较/ Assert_beamformingOutHDL”])

总结

本示例是关于如何为定点、基于样本的波束形成算法自动生成HDL代码并在Simulink中验证生成的代码的两部分系列教程的第2部分。金宝app本教程的第一部分,Simulink中基于fpga的波束形成算法设计金宝app,展示了如何在Simulink中开发适合在FPGA上实现的算法。金宝app这个例子展示了如何建立一个模型来生成HDL代码,以及一个用支持HDL代码生成的块创建的Simulink子系统的联合仿真测试平台。金宝app金宝app它展示了如何设置和启动ModelSim以共同模拟HDL代码,并将其输出与HDL实现模型生成的输出进行比较。