主要内容

基于FPGA的Simulink波束形成:第2部分-代金宝app码生成

本教程是由两部分组成的系列教程的第二部分,该系列教程将指导您完成为波束形成算法生成HDL代码的步骤,并验证生成的代码在功能上是正确的。本教程的第一部分基于FPGA的Simulink波束形成:第1部分-算金宝app法设计演示了如何在Simulink中开发一种适合在硬件上实现的算法,如现场可编程金宝app门阵列(FPGA),以及如何比较定点、实现模型的输出与相应的浮点、行为模型的输出。

本教程使用HDL Coder™从第一部分开发的Simulink®模型生成HDL代码,并使用HDL验证器™验证HDL代码。金宝app我们使用HDL Verifier™生成一个联合仿真测试平台模型,以验证自动生成的HDL代码的行为。测试台使用ModelSim®进行联合仿真,验证自动生成的HDL代码。

相控阵系统工具箱™Simulink模块对框架、浮点数据的模型操作,金宝app并提供行为参考模型。我们使用这个行为模型来验证实现模型的结果,并最终验证自动生成的HDL代码。

HDL Coder™为超过300个支持HDL代码生成的Simulink模块生成可移植的、可合成的Verilog®和VHDL®代码。金宝app金宝app这些Simu金宝applink模块使用具有适当延迟的定点算法对串行数据进行操作,从而实现合成工具的流水线操作。

HDL验证器™让您测试和验证Verilog®和VHDL®设计的fpga, asic和soc。我们将通过使用与HDL模拟器的联合仿真在Simulink®中运行的测试台金宝app验证从我们的Simulink模型生成的RTL。

实现模型

本教程假设您有一个正确设置的Simulink模型,其中包含一个带有波束形成算法的子系统,该子系统使用使用定金宝app点算术和支持HDL代码生成的Simulink块设计。金宝app基于FPGA的Simulink波束形成:第1部分-算金宝app法设计演示如何创建这样的模型。

或者,如果您从一个新的模型开始,您可以运行hdlsetup(高密度脂蛋白编码器)配置Simulink模型以生成HD金宝appL代码。而且,要配置Simulink模型以创建验证所金宝app需的测试台,您必须打开Simulink的模型设置,在左侧面板的HDL代码生成下选择test bench,并在test bench Generation Output属性组中检查HDL测试台和Cosimulation模型。

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

中创建的模型运行基于FPGA的Simulink波束形成:第1部分-算金宝app法设计以显示结果。你可以通过点击Play按钮或者在金宝appMATLAB命令行中调用sim命令来运行Simulink模型,如下所示。使用Time Scope块来直观地比较输出帧。

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

模型设置

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

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

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

  • 全局设置:设置“Reset”类型为“异步”

  • 试验台:选择HDL测试平台和协同仿真模型

我们关闭优化的原因是,在我们的实现中使用的一些块已经是经过hdl优化的块,这可能会发生冲突。

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

一旦你设置了Simulink的模金宝app型设置,你可以使用HDL Coder™生成HDL代码高密度脂蛋白算法子系统。例如,请参见从Simulink模型生成HDL代码金宝app(高密度脂蛋白编码器)

%取消注释这两行以生成HDL代码和测试台。% makehdl([modelname '/HDL Algorithm']);生成HDL代码% makehdltb([modelname '/HDL Algorithm']);%生成联合仿真测试台

注意,当您执行makehdl命令时,信息会显示在MATLAB命令窗口中。在该信息中是在自动代码生成过程中添加的延迟量。在这种情况下,添加24个延迟,导致额外的延迟24*1ms = 24ms。这个延迟将会被注意到,当看到我们的最终结果有一个79ms的总延迟。

此外,由于在浮点数的自动代码生成输出过程中增加了额外的延迟,行为模型需要在原来的55个延迟基础上增加24个延迟来实现延迟平衡。这将使行为模型的输出与实现模型以及联合仿真输出保持一致。

在生成HDL代码和测试平台之后,一个名为gm__mq的新Simulink模型将在金宝app工作目录中创建,其中包含ModelSim®块,如下所示:

%取消注释以下两行以打开测试台模型。% modelname = ['gm_',modelname,'_mq'];% open_system (modelname);

此时,您可能希望将HDL Latency块中的延迟设置更改为79,以考虑代码生成过程添加的24个延迟。使用79的延迟将确保行为模型输出与实现输出和协同仿真输出的时间对齐。

基于协同仿真的HDL代码验证

以下步骤将启动ModelSim;因此,请确保启动ModelSim的命令vsim位于您所在机器的路径上。

要运行协同仿真模型,首先双击Simulink测试模型左上角的蓝色矩形框来启动ModelSim。金宝app

运行Simuli金宝appnk测试台模型以显示仿真结果。你可以通过点击Play按钮或者在金宝appMATLAB命令行中调用sim命令来运行Simulink模型,如下所示。测试平台模型包括Time Scope块,用于比较ModelSim执行的协同仿真输出与Simulink中的HDL子系统的输出。金宝app

%如果安装了ModelSim,取消注释以下行以运行测试台。% sim (modelname);

启动ModelSim后,运行Simulink测试台模型将用Simulink金宝app中的HDL模型的波形和时间范围填充Questa Sim。下面是在Questa Sim和Simulink范围内的结果示例。金宝app

注意:每次运行Simulink模拟时,必须重新启动Questa Sim。金宝app您可以通过在Questa Sim命令行执行“restart”来实现这一点。或者,您可以退出Questa Sim并通过双击Simulink测试台模型左上角的蓝色框重新启动它。金宝app

下面的S金宝appimulink范围显示了联合仿真和HDL模型(DUT)产生的79ms延迟版本的行为模型产生的原始信号,正如预期的那样,两种波形之间没有差异。79ms延迟是由于最初在HDL算法子系统中添加的55ms延迟,以启用合成工具的流水线操作,以及额外的24ms延迟,这是由于在自动HDL代码生成期间进行的延迟平衡。在上面的代码生成步骤中报告了额外添加的24个延迟。

比较协同金宝app仿真结果的Simulink范围可以在Compare子系统内部的测试台模型中找到,该测试台模型位于HDL Algorithm_mq子系统的输出端。

取消注释下面一行以打开具有作用域的子系统。% open_system ([modelname, ' /比较/ Assert_beamformingOutHDL '])

总结

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