主要内容

使用HDL工作流脚本将Simscape Buck转换器模型部署到Speedgoat IO模块中

这个示例演示了如何将Simscape™buck转换器模型部署到Speedgoat IO334 Simulink®可编程I/O模块,然后以1微秒小的样本步长实时运行模型。金宝app该示例使用DCDC转换器拓扑来展示如何为Speedgoat实时目标机器上的环路硬件(HIL)仿真准备电力电子转换器模型。

要使用此工作流:

  1. 使用Simscape HDL Workflow Advisor将您的模型转换为一个与HDL兼容的实现模型

  2. 使用HDL Workflow Advisor生成IO334模块的HDL代码和FPGA位流。

  3. 利用Simulink real-time将实时模型部署到Speedgoat实时塔塔机上。金宝app

模型的运行时间为1us,直到HDL代码生成,然后在CPU上以50us实时运行。为了生成HDL代码和FPGA位流,该示例展示了如何从命令行运行HDL工作流脚本。有关如何使用Workflow Advisor用户界面运行此工作流的示例,请参见Simscape模型在Speedgoat FPGA I/O模块上的硬件在环实现

设置和配置

在将算法部署到Speedgoat IO模块之前:

1.安装Xilinx®Vivado®的最新版本HDL语言支持和支持的第三金宝app方工具和硬件

然后,将工具路径设置为已安装的Xilinx Vivado可执行文件hdlsetuptoolpath函数。

hdlsetuptoolpath (“ToolName”“Xilinx Vivado”“路径”“C: \ Xilinx \ Vivado \ 2019.2 \ bin \ vivado.bat '

2.对于实时仿真,设置开发环境和目标计算机设置。看到开始使用Simulink实时金宝app(金宝app实时仿真软件)

3.安装Speedgoat库和Speedgoat HDL编码器集成包。看到安装Speedgoat HDL编码器集成包

Buck变换器模型

要查看降压转换器的模型,运行以下命令:

open_system (“sschdlexBuckConverterExample”

这个模型被修改为实时部署,并保存为sschdlex_IO334_BuckConverter.模型已被划分为在FPGA上运行的部件和在CPU上运行的部件。绿色里面的部分FPGA子系统在FPGA上运行。这个子系统之外的部分在CPU上实时运行。

open_system (“sschdlex_IO334_BuckConverter”) set_param (“sschdlex_IO334_BuckConverter”“SimulationCommand”“更新”

您为绿色FPGA子系统中包含PWM发生器和降压转换器的块生成VHDL代码。然后将代码部署到IO334模块上的FPGA上。子系统的输出被映射到DAC接口。Buck变换器子系统的输出信号在a内缩放10 v范围和转换使用uint16数据类型。50样本被打包到一帧,以记录CPU上的输出信号。

open_system (“sschdlex_IO334_BuckConverter / FPGA”

要查看降压转换器模型,双击降压转换器子系统。降压变换器是一种功率变换器模型,它降低了输出端的输入电压。输出电压随占空比(d)而降低。输出电压,计算为文/ D

open_system (“sschdlex_IO334_BuckConverter / FPGA /巴克转换器”

运行Simscape模型的桌面仿真

仿真输入是一个占空比阶跃波0.20.8.输入信号包括直流输入电压、PWM频率和占空比在模型的顶层产生。Simscape模型的示例时间被设置为1我们.信号日志记录在模型的顶层启用。

sim卡(“sschdlex_IO334_BuckConverter”在SDI中显示降压转换器输出信号金宝appSimulink.sdi.clearAllSubPlots Simulink.sdi.setSubPlotLayout (3,1);allIDs2 = 金宝appSimulink.sdi.getAllRunIDs;runID2 = allIDs2(结束);run2 = 金宝appSimulink.sdi.getRun (runID2);run2.name =“Simscape桌面模拟”;run2.getAllSignals;plotOnSubPlot (run2.getSignalsByName (输出电压的), 1, 1,真实);plotOnSubPlot (run2.getSignalsByName (“Iinductor”)、2、1,真实);plotOnSubPlot (run2.getSignalsByName (“Vdiode”)、3、1、真实);金宝appSimulink.sdi.view;

生成HDL实现模型

为了实现HDL代码生成兼容性,您可以运行Simscape HDL Workflow Advisor来生成一个HDL实现模型。

Simscape求解器被设置为在每个示例步骤中运行两次迭代。Simscape HDL Workflow Advisor在下一个步骤中使用求解器设置来确定实时行为。

set_param (“sschdlex_IO334_BuckConverter / FPGA /巴克转换器/解算器配置的“DoFixedCost”“上”) set_param (“sschdlex_IO334_BuckConverter / FPGA /巴克转换器/解算器配置的“MaxNonlinIter”' 2 '

要打开Advisor,运行sschdladvisor函数为您的模型:

sschdladvisor (“sschdlex_IO334_BuckConverter”
###运行Simscape HDL Workflow Advisor for 运行所有按钮。页面中有一个模型链接生成实现模型的任务。这个型号与您的原始型号有相同的名称和前缀gmStateSpaceHDL_

为HDL代码生成准备实现模型

要打开实现模型,请单击生成实现模型的任务。

open_system (“gmStateSpaceHDL_sschdlex_IO334_BuckConverte”);set_param (“gmStateSpaceHDL_sschdlex_IO334_BuckConverte”“SimulationCommand”“更新”

该模型包含一个开关线性Simulink替代原来的降压转换器模型。金宝app您可以看到Simscape模型被替换了。

open_system (“gmStateSpaceHDL_sschdlex_IO334_BuckConverte / FPGA /巴克转换器”);

实现模型用执行状态空间计算的hdl兼容算法替换Simscape子系统。当您在这个子系统中导航时,您会看到几个建模状态空间方程的延迟、加法器和Matrix Multiply块。这个子系统中的From和Goto块提供了与原始模型相同的输入高密度脂蛋白子系统

open_system (' gmstatespacehdl_sschdlex_io334_buckconverter /FPGA/Buck Converter/HDL子系统/HDL算法'

buck转换器输出信号的数据类型设置为单精度浮点,用于HDL代码生成。

set_param (“gmStateSpaceHDL_sschdlex_IO334_BuckConverte / FPGA /信号规范”“OutDataTypeStr”“单一”);set_param (“Specification1 gmStateSpaceHDL_sschdlex_IO334_BuckConverte / FPGA /信号”“OutDataTypeStr”“单一”);set_param (“Specification2 gmStateSpaceHDL_sschdlex_IO334_BuckConverte / FPGA /信号”“OutDataTypeStr”“单一”);set_param (“Specification3 gmStateSpaceHDL_sschdlex_IO334_BuckConverte / FPGA /信号”“OutDataTypeStr”“单一”);set_param (“Specification4 gmStateSpaceHDL_sschdlex_IO334_BuckConverte / FPGA /信号”“OutDataTypeStr”“单一”);

对HDL实现模型进行桌面仿真,验证HDL算法

可以在Simulink中模拟降压转换器的切换线性状态空间模型,并在Simulation Data Inspector中显示信号。金宝app运行的比较表明,数值结果是匹配的。

模拟HDL实现模型。

sim卡(“gmStateSpaceHDL_sschdlex_IO334_BuckConverte”%在仿真中显示降压转换器Simscape模型的输出信号%数据检查员。金宝appSimulink.sdi.clearAllSubPlots Simulink.sdi.setSubPlotLayout (3,1);allIDs2 = 金宝appSimulink.sdi.getAllRunIDs;runID2 = allIDs2(结束);run2 = 金宝appSimulink.sdi.getRun (runID2);run2.name =“HDL桌面模拟”;run2.getAllSignals;plotOnSubPlot (run2.getSignalsByName (输出电压的), 1, 1,真实);plotOnSubPlot (run2.getSignalsByName (“Iinductor”)、2、1,真实);plotOnSubPlot (run2.getSignalsByName (“Vdiode”)、3、1、真实);金宝appSimulink.sdi.view;

要验证HDL实现模型是否与原始Simscape模型匹配,请生成一个状态空间验证模型。在生成实现模型任务,选择为实现模型生成验证逻辑复选框,然后运行此任务。模拟模型不显示断言,这表明数值结果匹配。看到验证Simscape算法的HDL实现模型

高密度脂蛋白工作流顾问

HDL Workflow Advisor指导您完成HDL代码生成和FPGA设计过程。使用顾问:

  • 检查模型的HDL代码生成兼容性,并修复不兼容的设置。

  • 生成HDL代码、测试平台和脚本,以构建和运行代码和测试平台。

  • 执行合成、定时分析,并在soc、fpga和Speedgoat I/O模块上部署生成的代码。

您可以在模型中运行用于FPGA子系统的Advisor。要为模型中的子系统打开HDL Workflow Advisor,请使用hdladvisor函数。例如:

hdladvisor (“gmStateSpaceHDL_sschdlex_IO334_BuckConverte / FPGA”

要了解Advisor中的任务,右键单击该任务并选择这是什么?.看到开始使用HDL工作流顾问

运行工作流脚本生成Simulink实时接口模型金宝app

对于快速原型,将HDL Workflow Advisor设置导出到脚本中。脚本是一个MATLAB®文件,您从命令行运行。您可以修改和运行脚本,或者将设置导入到HDL Workflow Advisor用户界面。看到使用脚本运行HDL工作流

这个例子展示了如何运行HDL工作流脚本。为了生成Simulink实时金宝app接口模型,打开并运行这个MATLAB脚本。

编辑(“hdlworkflow_buck_IO334”
%% ------------------------------------------------------------------------%该脚本包含模型、目标设置、接口映射和%用于为HDL生成HDL代码的Workflow Configuration设置为降压转换器模型生成的实现模型,并为%将代码部署到Speedgoat IO334-325K模块上的FPGA上。%% -----------------------------------------------------------------------%%设置HDL代码生成参数模型HDL参数% -------------------------------------------------------------------------hdlset_param (“gmStateSpaceHDL_sschdlex_IO334_BuckConverte”“FloatingPointTargetConfiguration”hdlcoder.createFloatingPointTargetConfig (“NativeFloatingPoint”“LatencyStrategy”“最小值”));hdlset_param (“gmStateSpaceHDL_sschdlex_IO334_BuckConverte”“HDLSubsystem”“gmStateSpaceHDL_sschdlex_IO334_BuckConverte / FPGA”);hdlset_param (“gmStateSpaceHDL_sschdlex_IO334_BuckConverte”过采样的, 100);hdlset_param (“gmStateSpaceHDL_sschdlex_IO334_BuckConverte”“ScalarizePorts”“DUTLevel”);hdlset_param (“gmStateSpaceHDL_sschdlex_IO334_BuckConverte”“TargetFrequency”, 200);hdlset_param (“gmStateSpaceHDL_sschdlex_IO334_BuckConverte”“工作流程”S金宝appimulink实时FPGA I/O);hdlset_param (“gmStateSpaceHDL_sschdlex_IO334_BuckConverte”“TargetPlatform”“Speedgoat io334 - 325 k”);hdlset_param (“gmStateSpaceHDL_sschdlex_IO334_BuckConverte”“AdaptivePipelining”“关闭”);%%将DUT端口映射到目标接口%输入端口映射% -------------------------------------------------------------------------%“FPGA”子系统的所有输入信号都映射到PCIe上%的接口。即,这些信号将从CPU的%实时目标机通过PCIe总线到IO334 FPGA。hdlset_param (“gmStateSpaceHDL_sschdlex_IO334_BuckConverte / FPGA / PWM周期”“IOInterface”“作为PCIe接口”);hdlset_param (“gmStateSpaceHDL_sschdlex_IO334_BuckConverte / FPGA /责任周期”“IOInterface”“作为PCIe接口”);hdlset_param (gmStateSpaceHDL_sschdlex_IO334_BuckConverte / FPGA /直流输入电压的“IOInterface”“作为PCIe接口”);输出端口映射% -------------------------------------------------------------------------%转换器按比例放大的输出信号映射到模拟信号%输出接口的IO334。hdlset_param (“gmStateSpaceHDL_sschdlex_IO334_BuckConverte / FPGA / DAC V”“IOInterface”'IO334 AO Data [0:15]');hdlset_param (“gmStateSpaceHDL_sschdlex_IO334_BuckConverte / FPGA / DAC V”“IOInterfaceMapping”“01频道”);hdlset_param (“gmStateSpaceHDL_sschdlex_IO334_BuckConverte / FPGA / DAC V二极管”“IOInterface”'IO334 AO Data [0:15]');hdlset_param (“gmStateSpaceHDL_sschdlex_IO334_BuckConverte / FPGA / DAC V二极管”“IOInterfaceMapping”“频道02”);hdlset_param (“我gmStateSpaceHDL_sschdlex_IO334_BuckConverte / FPGA / DAC电感器”“IOInterface”'IO334 AO Data [0:15]');hdlset_param (“我gmStateSpaceHDL_sschdlex_IO334_BuckConverte / FPGA / DAC电感器”“IOInterfaceMapping”“频道03”);hdlset_param (“gmStateSpaceHDL_sschdlex_IO334_BuckConverte / FPGA / DAC触发”“IOInterface”'IO334 AO Trigger [0:1]');hdlset_param (“gmStateSpaceHDL_sschdlex_IO334_BuckConverte / FPGA / DAC触发”“IOInterfaceMapping”“01至08频道”);%信号帧映射到PCIe寄存器。它们被CPU读取以记录数据。hdlset_param (“作为PCIe出gmStateSpaceHDL_sschdlex_IO334_BuckConverte / FPGA /”“IOInterface”“作为PCIe接口”);%%工作流配置设置使用以下设置打开% HDL Workflow Advisor。中国= hdlcoder。WorkflowConfig (“SynthesisTool”“Xilinx Vivado”“TargetWorkflow”S金宝appimulink实时FPGA I/O);%指定顶级项目目录。中国。ProjectFolder =“hdl_prj”;中国。ReferenceDesignToolVersion =“2019.2”%设置要运行的工作流任务。中国。RunTaskGenerateRTLCodeAndIPCore = true;中国。RunTaskCreateProject = true;中国。RunTaskBuildFPGABitstream = true;中国。RunTaskGenerate金宝appSimulinkRealTimeInterface = true;%%运行工作流hdlcoder.runWorkflow (“gmStateSpaceHDL_sschdlex_IO334_BuckConverte / FPGA”、中国);

编写Simuli金宝appnk实时接口模型进行实时仿真

运行工作流脚本生成RTL代码和IP核,创建Vivado项目,构建FPGA位流,然后生成Simulink Real-Time Interface模型。金宝app

在将模型部署到Speedgoat实时目标机器之前:

1.将Speedgoat实时目标机器CPU上运行的所有块的示例时间设置为50us(包括FPGA的驱动块)。

generated_model = gcs;Ts = 50 e-6;set_param ([generated_model,' / FPGA '],“t”“t”);

2.设置模拟数据检查器设置输入处理作为通道的列(基于框架)的信号PCIe_V_out_framePCIe_V_diode_framePCIe_I_inductor_frame.在面具里面文件日志块,右键单击日志符号并导航到Instrumentation Properties对话框。要使日志信号出现,您可能必须更新模型。

set_param (generated_model“SimulationCommand”“更新”);

或者,您可以使用这些命令将信号日志设置为基于帧的模式。

金宝appSimulink.sdi.setSignalInputProcessingMode ([generated_model,' /文件日志/多路分配器'), 1“帧”);金宝appSimulink.sdi.setSignalInputProcessingMode ([generated_model,的日志1 /多路分配器/文件), 1“帧”);金宝appSimulink.sdi.setSignalInputProcessingMode ([generated_model,/文件日志2 /多路分配器的), 1“帧”);

连接到目标机并运行实时仿真

该模型现在可以部署到Speedgoat的实时目标机器上。降压转换器模型自动加载到IO334上的FPGA。

连接到Speedgoat实时目标机。

tg = slrealtime;tg.connect;

构建并下载模型到目标机器。

rtwbuild (generated_model);tg.load (generated_model);

启动模型执行。

tg.start;暂停(10);

文件日志记录块将信号存储在目标机器的SSD上。一旦模型停止,数据就会自动上传到主机。数据在仿真数据检查器中可视化。您可以验证实时仿真的结果是否与原始Simscape模型相匹配。

金宝appSimulink.sdi.setSubPlotLayout (3,1);
allIDs = 金宝appSimulink.sdi.getAllRunIDs;runID = allIDs(结束);运行= Si金宝appmulink.sdi.getRun (runID);run.name =“IO334上的实时仿真”
运行。getAllSignals plotOnSubPlot (run.getSignalsByName (“PCIe_V_out_frame”), 1, 1,真实);plotOnSubPlot (run.getSignalsByName (“PCIe_I_inductor_frame”)、2、1,真实);plotOnSubPlot (run.getSignalsByName (“PCIe_V_diode_frame”)、3、1、真实);
金宝appSimulink.sdi.view

或者,您可以测量在模拟输出的IO334信号。这张图显示了信号在MATLAB中的图形。

另请参阅

功能

相关的话题