这个示例演示了如何将Simscape™buck转换器模型部署到Speedgoat IO334 Simulink®可编程I/O模块,然后以1微秒小的样本步长实时运行模型。金宝app该示例使用DCDC转换器拓扑来展示如何为Speedgoat实时目标机器上的环路硬件(HIL)仿真准备电力电子转换器模型。
要使用此工作流:
使用Simscape HDL Workflow Advisor将您的模型转换为一个与HDL兼容的实现模型
使用HDL Workflow Advisor生成IO334模块的HDL代码和FPGA位流。
利用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编码器集成包.
要查看降压转换器的模型,运行以下命令:
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 /巴克转换器”)
仿真输入是一个占空比阶跃波0.2
来0.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代码生成兼容性,您可以运行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_frame
,PCIe_V_diode_frame
和PCIe_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中的图形。