生成HDL代码Simscape模型SimscapeFPGA边境工作流
有了HDL Coder™许可证和Simscape™HDL工作流顾问,您可以从Simscape模型生成HDL代码并部署到FPGA平台上。advisor将Simscape模型转换为Simulink®HDL Coder用来生成HDL代码的实现模型。
将Simscape模型转换为HDL代码允许您:
利用Simscape物理系统建模功能。
利用FPGA的可重构性和并行性,快速建立原型模型。
使用硬件在环(HIL)实时模拟HDL实现。
在运行Simscape HDL Workflow Advisor之前,请配置网络以排除延迟和启用的运行时参数。要了解更多关于HDL Coder中Simscape模型的功能和限制,请访问开始使用Simscape硬件在环工作流(高密度脂蛋白编码器).
生成一个HDL代码Simscape模型使用Simscape高密度脂蛋白工作流顾问
这个例子展示了如何使用Simscape HDL工作流顾问和后向欧拉求解器将您的Simscape模型转换为HDL代码。要配置您的Simscape网络和Simulink模型以进行实时仿真和HDL代码生成,请参见模型制备.要打开已经准备好使用Simscape HDL Workflow Advisor的模型版本,请参见使用Simscape HDL工作流顾问生成HDL代码.
请注意
这个例子涉及到重新配置模型以替换非线性块,当您想使用向后欧拉求解器时,这是必要的。为了避免重新配置模型,您可以设置解算器类型来分区解算器
.
模型制备
为FPGA部署准备Simscape模型:
打开
ssc_bridge_rectifier
模型。在MATLAB®命令提示符,输入baselineModel =“ssc_bridge_rectifier”;load_system (baselineModel) open_system (baselineModel)
要将基线模拟结果与后续迭代进行比较,请删除数据点限制范围块标记负载电压范围块和捕获信号,输入数据到范围通过在模拟数据检查器中启用数据日志记录。
打开范围块。点击视图>配置属性.在日志记录选项卡,明确将数据点限制在最后.
控件的连接右键单击范围块,并选择
日志选择信号
.日志徽章出现在信号上方。
模拟模型并在仿真数据检查器中查看结果。
模拟基线模型sim (baselineModel)获取的模拟数据检查器运行idrunIDs = Simulink.sdi.getAllRunIDs;runID = runIDs(结束);运行= Simulink.sdi.getRun (runID);signal1 = run.getSignalByIndex (1);% run.signalCountsignal1。检查= true;Simulink.sdi.view
根据需要,按键盘上的空格键以适合要查看的模拟数据检查器图。
基线模拟返回了全波桥式整流器负载电压的预期结果。
在运行advisor之前,识别并替换导致网络非线性的块。要识别块,请使用
simscape.findNonlearBlocks
函数。simscape.findNonlinearBlocks (baselineModel)
' ssc_bridge_整流器/AC电压源'模型中线性或交换线性网络的数量为0。模型中的非线性网络数为1。ans = 1×1 cell array {' ssc_bridge_整流器/交流电压源'}
该模型包含一个交流电压源块,一个产生非线性方程的周期源。
你可以用a替换周期源控制电压源在Simscape网络中使用正弦波在网络外阻塞。
删除交流电压源块。
添加一个正弦波块的动态仿真模块>来源图书馆。
添加一个Simulink-PS转换器块的Simscape>公用事业公司图书馆。
添加一个控制电压源块的Simscape基础库电电力来源图书馆。
连接正弦波块的Simulink-PS转换器块和Simulink-PS转换器块的控制电压源块。
配置正弦波的参数进行匹配交流电压源你删除的块。
设置振幅参数
√2 * 120
.设置频率(rad /秒)参数
60 * 2 *π
.设置样品时间参数
1 e-5
.然后点击三点图标旁边的样品时间框,并选择创建变量.变量的名字Ts
并点击创建.现在可以在工作区中查看和编辑此变量。
确保没有导致网络非线性的块。
%模拟sim (baselineModel)检查非线性块simscape.findNonlinearBlocks (baselineModel)
模型中线性或交换线性网络的个数为1。Ans = 0×0空单元格数组
该模型只包含产生线性或切换线性方程的块。现在,模型已经为后向欧拉求解做好了准备。
模拟模型,并在仿真数据检查器中将结果与基线结果进行比较。
获取模拟数据检查器运行idrunIDs = Simulink.sdi.getAllRunIDs;runBaseline = runid (end - 1);runSwitchedLinear = runIDs(结束);打开模拟数据检查器Simulink.sdi.view compBaseline1 = Simulink.sdi.compareRuns(runBaseline,...runSwitchedLinear);
结果与基线结果相似。
要为Simscape HDL Workflow Advisor执行未来的进度检查,请添加并连接一个数字时钟块的动态仿真模块>来源图书馆和显示块的动态仿真模块汇库,如图所示。为数字时钟,设置样品时间参数
Ts
.模型仍然设置为使用变步长求解器。对于实时模拟,必须使用固定步长求解器。使用示例时间颜色和注释来帮助您确定模型是否包含任何连续设置。要打开示例时间颜色和注释,请在调试选项卡上,单击信息覆盖,而在样品时间组,选择颜色而且文本.
模型图更新,并显示Timing Legend窗格。
配置实时仿真模型。
配置Simulink模型进行固定步长、固定成本的仿真。在“配置参数”窗口中,单击解算器并设置:
类型来
固定步
解算器来
离散(无连续状态)
为固定步骤、固定成本的模拟配置Simscape网络。为解算器配置布洛克:
选择使用本地解算器.
集解算器类型来
向后欧拉
.指定
Ts
为样品时间.
模拟模型,并在仿真数据检查器中将结果与基线结果进行比较。
%模拟sim (baselineModel)获取模拟数据检查器运行idrunIDs = Simulink.sdi.getAllRunIDs;runBaseline = runid (end - 2);runRealTime = runIDs(结束);打开模拟数据检查器Simulink.sdi.view compBaseline1 = Simulink.sdi.compareRuns(runBaseline,...runRealTime);
结果与基线结果相似。
生成HDL代码使用Simscape高密度脂蛋白工作流顾问
的Simscape模型上运行Simscape HDL工作流Advisor生成HDL代码模型制备节或通过打开ssc_bridge_rectifier_hdl
模型,该模型为代码生成而准备。
重命名模型。
如果您在模型准备部分准备了模型,请重命名模型
ssc_model
.要打开并使用已经为HDL代码生成准备好的模型,在MATLAB命令提示符处输入
open_system (“ssc_bridge_rectifier_hdl”)
将模型保存到本地目录为
ssc_model
.
运行Simscape HDL工作流顾问。
sschdladvisor (“ssc_model”)
Simscape HDL工作流顾问打开。
运行代码生成兼容性检查。
选择代码生成的兼容性>检查解算器配置,然后单击运行这个任务.
选择检查模型的兼容性,然后单击运行这个任务.
当模型通过这些检查时,顾问报告。
提取状态空间系数。选择状态转换并点击运行所有.转换可能需要一些时间。
运行任务之后,advisor将显示状态空间表示的摘要和参数表。
状态数:5
输入数量:1
输出数量:1
模式数量:7
微分变量数:1
离散采样时间:1e-05
参数 参数的大小 一个 5乘5乘7 B 5 × 1 × 7 F0 5 × 1 × 7 C 1 × 5 × 1 D 1 × 1 × 1 Y0 1 × 1 × 1 状态、模式和参数数据的大小可以帮助您估计部署模型需要多少FPGA资源。数值越高,需要的FPGA资源越多。输入和输出数据表示实时部署和可视化所需的I/O连接的数量和类型。
请注意
如果使用分区求解器执行此步骤,则该表将具有不同的值。
生成模型的HDL实现。选择实现模型的一代>生成实现模型并点击运行这个任务.
当Simscape HDL Workflow Advisor生成实现模型时,该Advisor报告传递的任务,并显示到生成的实现模型的链接,该链接被命名
gmStateSpaceHDL_ssc_model
.通过单击打开生成的实现模型gmStateSpaceHDL_ssc_model.
该模型包含来自原始模型的块以及支持HDL Workflow Advisor的新块:
数字时钟,显示,正弦波,负载电压-原始模型的残留物
速率转换1——处理以不同速率运行的块之间的数据传输。
数据类型Conversion1,数据类型Conversion2 -在双精度数据类型和单精度数据类型之间转换。HDL代码生成需要单精度数据
HDL子系统——包含Simscape网络的HDL代码生成兼容版本。
负载电压,范围显示负载电压的块。
准备实现模型,以便与基线结果进行模拟比较:
您可以根据需要调整自动生成的模型并删除残留块,以提高模型的清洁度。的Digial时钟块和显示块是不必要的,但不会抑制仿真结果。
右键单击Scope块的输入信号并单击日志选择信号.
如果您的模型过于僵硬,您可能会遇到验证不匹配。要了解如何检查模型刚度,请访问Simscape刚度影响分析.
的显示块显示运行的模拟时间。
为了确保HDL子系统与原始Simscape模型相对应,请模拟该模型并将结果与基线模拟结果进行比较。
%模拟sim卡(“gmStateSpaceHDL_ssc_model”)获取模拟数据检查器运行idrunIDs = Simulink.sdi.getAllRunIDs;runBaseline = runid (end - 3);runHDLImplementation = runIDs(结束);打开模拟数据检查器Simulink.sdi.view compBaseline1 = Simulink.sdi.compareRuns(runBaseline,...runHDLImplementation);
结果与基线结果相似。Simscape模型与HDL代码生成兼容。
从实现中生成HDL代码:
从HDL实现模型访问Configuration Parameters窗口。扩大HDL代码生成并选择报告.的复选框生成可跟踪性报告而且生成资源利用率报告选项。
运行
hdlsetup
函数。hdlsetup (“gmStateSpaceHDL_ssc_model”)
保存模型和子系统参数设置。
hdlsaveparams (“gmStateSpaceHDL_ssc_model”);
设置模型'gmStateSpaceHDL_ssc_model' HDL参数hdlset_param('gmStateSpaceHDL_ssc_model', 'FloatingPointTargetConfiguration', hdlcoder。createFloatingPointTargetConfig(“NativeFloatingPoint”……, 'LatencyStrategy', 'MIN')…);hdlset_param('gmStateSpaceHDL_ssc_model', 'HDLSubsystem', 'gmStateSpaceHDL_ssc_model/HDL Subsystem');hdlset_param (' gmStateSpaceHDL_ssc_model ', ' MaskParameterAsGeneric ', '对');hdlset_param(“gmStateSpaceHDL_ssc_model”、“过采样”,49);设置子系统HDL参数hdlset_param('gmStateSpaceHDL_ssc_model/HDL子系统',' flathierarchy ', 'on');hdlset_param('gmStateSpaceHDL_ssc_model/HDL子系统/HDL算法/模式选择/生成模式向量','架构','MATLAB数据路径');设置子系统HDL参数hdlset_param('gmStateSpaceHDL_ssc_model/HDL子系统/HDL算法/状态更新/倍增状态','SharingFactor', 1);
保存验证模型生成设置。
HDLmodelname =“gmStateSpaceHDL_ssc_model”;hdlset_param (HDLmodelname“GenerateValidationModel”,“上”);
生成HDL代码。
makehdl (“gmStateSpaceHDL_ssc_model / HDL子系统”)
为“gmStateSpaceHDL_ssc_model/HDL子系统”生成HDL。使用模型gmStateSpaceHDL_ssc_model的配置集作为HDL代码生成参数。在模型'gmStateSpaceHDL_ssc_model'上运行HDL检查。开始编译“gmStateSpaceHDL_ssc_model”模型…在模型'gmStateSpaceHDL_ssc_model'上应用HDL优化…您所选择的代码生成和优化选项引入了额外的管道延迟。延迟平衡功能自动插入匹配的延迟进行补偿。DUT需要一个初始的管道设置延迟。每个输出端口都会经历这些额外的延迟。输出端口1:1个循环。 ### Begin model generation. ### Model generation complete. ### Clock-rate pipelining results can be diagnosed by running this script: hdlsrc\gmStateSpaceHDL_ssc_model\... highlightClockRatePipelining.m ### To clear highlighting, click the following MATLAB script: hdlsrc\gmStateSpaceHDL_ssc_model\clearhighlighting.m ### Generating new validation model: gm_gmStateSpaceHDL_ssc_model_vnl. ### Validation model generation complete. ### Begin VHDL Code Generation for 'gmStateSpaceHDL_ssc_model'. ### MESSAGE: The design requires 49 times faster clock with respect to the base rate = 3.33333e-06. ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/HDL Algorithm/Mode Iteration Manager/Compare To Constant as hdlsrc\... gmStateSpaceHDL_ssc_model\Compare_To_Constant.vhd. ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/nfp_mul_single as hdlsrc\gmStateSpaceHDL_ssc_model\nfp_mul_single.vhd. ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/nfp_add_single as hdlsrc\gmStateSpaceHDL_ssc_model\nfp_add_single.vhd. ### Working on dot_product_2 as hdlsrc\gmStateSpaceHDL_ssc_model\dot_product_2.vhd. ### Working on dot_product_1 as hdlsrc\gmStateSpaceHDL_ssc_model\dot_product_1.vhd. ### Working on dot_product_1 as hdlsrc\gmStateSpaceHDL_ssc_model\dot_product_1_block.vhd. ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/nfp_relop_single as hdlsrc\gmStateSpaceHDL_ssc_model\nfp_relop_single.vhd. ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem/nfp_uminus_single as hdlsrc\gmStateSpaceHDL_ssc_model\nfp_uminus_single.vhd. ### Working on HDL Subsystem_tc as hdlsrc\gmStateSpaceHDL_ssc_model\HDL_Subsystem_tc.vhd. ### Working on gmStateSpaceHDL_ssc_model/HDL Subsystem as hdlsrc\gmStateSpaceHDL_ssc_model\HDL_Subsystem.vhd. ### Generating package file hdlsrc\gmStateSpaceHDL_ssc_model\HDL_Subsystem_pkg.vhd. ### Code Generation for 'gmStateSpaceHDL_ssc_model' completed. ### Creating HDL Code Generation Check Report HDL_Subsystem_report.html ### HDL check for 'gmStateSpaceHDL_ssc_model' complete with 0 errors, 2 warnings, and 2 messages. ### HDL code generation complete.
打开HDL代码生成报告,其中包括所有生成的错误或警告。该报告包含一个资源利用报告的链接,该报告描述了FPGA部署的资源需求。
生成的HDL代码和验证模型保存在
hdlsrc \ gmStateSpaceHDL_ssc_model \ html
目录中。生成的代码保存为HDL_Subsystem_tc.vhd
.要生成用于部署到指定目标的HDL代码,请使用HDL工作流顾问。
另请参阅
块
Simscape块
功能
hdladvisor
(高密度脂蛋白编码器)|hdlsaveparams
(高密度脂蛋白编码器)|hdlset_param
(高密度脂蛋白编码器)|hdlsetup
(高密度脂蛋白编码器)|makehdl
(高密度脂蛋白编码器)|simscape.findNonlinearBlocks
|sschdladvisor
(高密度脂蛋白编码器)