主要内容

生成HDL代码使用SimscapeHDL工作流顾问

通过HDL Coder™许可证和Simscape™HDL Workflow Advisor,您可以从Simscape模型生成HDL代码,以便部署到FPGA平台上。顾问生成一个Simulink金宝app®Simscape的实现,它使用HDL Coder生成HDL代码。

将您的Simscape模型转换为HDL代码允许您:

  • 充分利用Simscape物理系统建模功能。

  • 快速原型模型使用可重构和并行能力的FPGA。

  • 使用硬件在环(HIL)实时模拟HDL实现。

在运行Simscape HDL Workflow Advisor之前,配置您的网络以排除:

  • 事件

  • 模式的图表

  • 延迟

  • 启用运行时参数

  • 周期性的来源

  • 金宝appSimulink-PSPS-金宝appSimulink阻塞执行单元转换

唯一支持的单元为金宝app金宝appSimulink-PS输入和PS-金宝appSimulink1V一个,或继承

生成一个HDL代码Simscape使用SimscapeHDL工作流顾问

这个例子展示了如何使用Simscape HDL工作流顾问和后向欧拉求解器将Simscape模型转换为HDL代码。若要配置Simscape网络和Simulink模型以实现实时仿真和HDL代码生金宝app成,请参见模型制备.要打开已准备好使用Simscape HDL Workflow Advisor的模型版本,请参见使用Simscape HDL Workflow Advisor生成HDL代码

请注意

此示例涉及重新配置模型以替换非线性块,当您想使用后向欧拉求解器时,这是必要的。为了避免重新配置模型,您可以设置解算器类型分区解算器

模型制备

为FPGA部署准备Simscape模型:

  1. 打开ssc_bridge_rectifier模型。在MATLAB中®命令提示符,输入

    baselineModel =“ssc_bridge_rectifier”;load_system (baselineModel) open_system (baselineModel)

  2. 要将基线模拟结果与后续迭代进行比较,请在范围块标记负载电压范围块和捕获信号,输入数据到范围通过在模拟数据检查器中启用数据记录来块。

    1. 打开范围块。点击视图>配置属性.在日志记录选项卡,明确最后限制数据点

    2. 控件的连接范围块和选择记录选定信号.日志标识出现在信号上方。

    全波桥式整流器的基线模型。

  3. 模拟模型并在模拟数据检查器中查看结果。

    模拟基线模型sim (baselineModel)获取模拟数据检查器的运行idrunIDs = 金宝appSimulink.sdi.getAllRunIDs;runID = runIDs(end);run = 金宝appSimulink.sdi.getRun(runID);signal1 = run.getSignalByIndex(1);% run.signalCountsignal1。选中= true;金宝appSimulink.sdi.view

    根据需要,按键盘上的空格键以使模拟数据检查器图适合查看。

    来自基线模型的仿真数据检查器结果。

    基线模拟返回全波桥式整流负载电压的预期结果。

  4. 在运行建议器之前,识别并替换导致网络非线性的块。要识别块,请使用simscape.findNonlearBlocks函数。

    simscape.findNonlinearBlocks (baselineModel)
    在以下块中发现包含非线性方程的网络:'ssc_bridge_rectifier/AC Voltage Source'模型中线性或切换线性网络的数量为0。模型中的非线性网络数为1。ans = 1×1单元阵列{' ssc_bridge_整流器/交流电压源'}

    该模型包含一个交流电压源块,一个产生非线性方程的周期源。

  5. 可以将周期源替换为可控电压源块在Simscape网络中使用正弦波在网络外阻塞。

    1. 删除交流电压源块。

    2. 添加一个正弦波金宝app>来源图书馆。

    3. 添加一个金宝appSimulink-PS转换器Simscape>公用事业公司图书馆。

    4. 添加一个可控电压源Simscape基础库电力来源图书馆。

    5. 连接正弦波块到金宝appSimulink-PS转换器Block和金宝appSimulink-PS转换器块到可控电压源块。

    修改后的模型。在基线模型中,控制电压源块和正弦波块取代了交流电压源块。

  6. 配置正弦波控件的参数进行匹配交流电压源你移除的方块。

    1. 设置振幅参数√2 * 120

    2. 设置频率(rad /秒)参数60 * 2 *π

    3. 设置样品时间参数1 e-5.然后点击三点图标带有三个垂直点的图标旁边是样品时间框,并选择创建变量.为变量命名Ts并点击创建.您现在可以在工作区中查看和编辑这个变量。

  7. 确保没有导致网络非线性的阻塞。

    %模拟sim (baselineModel)检查非线性块simscape.findNonlinearBlocks (baselineModel)
    模型中线性或切换线性网络的个数为1。Ans = 0×0空单元格数组

    该模型只包含产生线性或切换线性方程的块。现在模型已经为后向欧拉求解器做好了准备。

  8. 模拟模型,并将结果与模拟数据检查器中的基线结果进行比较。

    获取模拟数据检查程序运行idrunIDs = 金宝appSimulink.sdi.getAllRunIDs;runBaseline = runIDs(end - 1);runSwitchedLinear = runIDs(end);打开模拟数据检查器金宝appSimulink.sdi.view compBaseline1 = Simulink.sdi.compareRuns(runBaseline,...runSwitchedLinear);

    将Run 2修改后的模型与基线进行比较的仿真数据检查器输出。检查员将新图叠加在旧图上,并在下面显示出它们之间的差异。

    结果与基线结果相似。

  9. 要为Simscape HDL Workflow Advisor执行未来的进度检查,请添加并连接数字时钟金宝app>来源图书馆及显示金宝app库,如图所示。为数字时钟,设置样品时间参数Ts

    与HDL兼容的模型包括数字时钟和显示模块

  10. 该模型仍然设置为使用可变步长求解器。对于实时模拟,必须使用固定步长求解器。使用示例时间颜色和注释来帮助您确定您的模型是否包含任何连续设置。要打开采样时间颜色和注释,请在调试选项卡上,单击信息覆盖,而在样品时间组,选择颜色而且文本

    模型图更新,计时图例窗格显示出来。

  11. 配置模型进行实时仿真。

    1. 为固定步长、固定成本的仿真配金宝app置Simulink模型。在“配置参数”窗口中,单击解算器并设置:

      • 类型固定步

      • 解算器离散(无连续状态)

    2. 为固定步骤、固定成本的模拟配置Simscape网络。为解算器配置布洛克:

      • 选择使用局部求解器

      • 解算器类型向后欧拉

      • 指定Ts样品时间

    请注意

    你可以

  12. 模拟模型,并将结果与模拟数据检查器中的基线结果进行比较。

    %模拟sim (baselineModel)获取模拟数据检查程序运行idrunIDs = 金宝appSimulink.sdi.getAllRunIDs;runBaseline = runIDs(end - 2);runRealTime = runIDs(end);打开模拟数据检查器金宝appSimulink.sdi.view compBaseline1 = Simulink.sdi.compareRuns(runBaseline,...runRealTime);

    将Run 3修改后的模型与基线进行比较的仿真数据检查器输出。检查员将新图叠加在旧图上,并在下面显示出它们之间的差异。

    结果与基线结果相似。

生成HDL代码使用SimscapeHDL工作流顾问

中所准备的Simscape模型上运行Simscape HDL Workflow Advisor来生成HDL代码模型制备部分或通过打开ssc_bridge_rectifier_hdl模型,它为代码生成做好了准备。

  1. 重命名模型。

    • 如果您在模型准备部分准备了模型,请重命名模型ssc_model

    • 要打开并使用已经为HDL代码生成准备好的模型,请在MATLAB命令提示符下输入

      open_system (“ssc_bridge_rectifier_hdl”

      将模型保存到本地目录为ssc_model

    HDL-ready桥式整流模型。标签、Simulink块和连接金宝app现在是红色的。

  2. 运行Simscape HDL Workflow Advisor。

    sschdladvisor (“ssc_model”

    Simscape HDL Workflow Advisor将打开。

  3. 运行代码生成兼容性检查。

    1. 选择代码生成兼容性>检查解算器配置,然后按运行此任务

    2. 选择检查模型兼容性,然后按运行此任务

    当模型通过这些检查时,顾问报告。

  4. 提取状态空间系数。选择状态转换并点击运行所有.转换可能需要一些时间。

    运行任务后,建议器显示状态空间表示的摘要和参数表。

    • 状态数:5

    • 输入数量:1

    • 输出个数:1

    • 模式数量:7

    • 微分变量数:1

    • 离散采样时间:1e-05

    参数 参数的大小
    一个 5 x 5 x 7
    B 5 x 1 x 7
    F0 5 x 1 x 7
    C 1 × 5 × 1
    D 1 × 1 × 1
    Y0 1 × 1 × 1

    状态、模式和参数数据的大小可以帮助您估计部署模型需要多少FPGA资源。该值越高,需要的FPGA资源越多。输入和输出数据指示实时部署和可视化所需的I/O连接的数量和类型。

    请注意

    如果使用分区求解器执行此步骤,则该表将具有不同的值。

  5. 生成模型的HDL实现。选择实现模型的生成>生成实现模型并点击运行此任务

    当Simscape HDL Workflow Advisor生成实现模型时,该顾问报告任务已传递,并显示到生成的实现模型的链接gmStateSpaceHDL_ssc_model

  6. 通过单击打开生成的实现模型gmStateSpaceHDL_ssc_model

    HDL实现模型。前面模型金宝app中的Simulink块连接到包含HDL子系统块的接口系统。

    该模型包含来自原始模型的块以及支持HDL Workflow Advisor的新块:金宝app

    • 数字时钟显示正弦波,负载电压-你原来模型的残留物

    • 速率转换1 -处理以不同速率运行的块之间的数据传输。

    • 数据类型转换1,数据类型转换2 -在双精度和单精度数据类型之间转换。HDL代码生成需要单精度数据

    • HDL子系统——包含与Simscape网络的HDL代码生成兼容的版本。

    • 负载电压-范围块,显示负载电压。

  7. 准备实现模型,以便与基线结果进行模拟比较:

    1. 您可以对自动生成的模型进行调整,并根据需要删除残留块,以提高模型的清洁度。的Digial时钟Block和显示块是不必要的,但不会抑制模拟结果。

    2. 右键单击Scope块的输入信号并单击日志选择信号

    显示块中显示所运行的模拟时间。

    在您完成运行后,模型颜色会发生变化。

  8. 为了确保HDL子系统与原始Simscape模型相对应,模拟模型并将结果与基线模拟结果进行比较。

    %模拟sim卡(“gmStateSpaceHDL_ssc_model”获取模拟数据检查程序运行idrunIDs = 金宝appSimulink.sdi.getAllRunIDs;runBaseline = runIDs(end - 3);runhdimplementation = runIDs(end);打开模拟数据检查器金宝appSimulink.sdi.view compBaseline1 = Simulink.sdi.compareRuns(runBaseline,...runHDLImplementation);

    将Run 4修改后的模型与基线进行比较的仿真数据检查器输出。检查员将新图叠加在旧图上,并在下面显示出它们之间的差异。

    结果与基线结果相似。Simscape模型与HDL代码生成兼容。

  9. 从实现中生成HDL代码:

    1. 从HDL实现模型访问Configuration Parameters窗口。扩大HDL代码生成并选择报告.的复选框生成可追溯性报告而且生成资源利用报告选项。

    2. 运行hdlsetup函数。

      hdlsetup (“gmStateSpaceHDL_ssc_model”
    3. 保存模型和子系统参数设置。

      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', 'on');hdlset_param('gmStateSpaceHDL_ssc_model', '过采样',49);%设置子系统HDL参数hdlset_param('gmStateSpaceHDL_ssc_model/HDL子系统','扁层结构','on');hdlset_param('gmStateSpaceHDL_ssc_model/HDL子系统/HDL算法/模式选择/生成模式向量','架构','MATLAB数据路径');%设置子系统HDL参数hdlset_param('gmStateSpaceHDL_ssc_model/HDL子系统/HDL算法/状态更新/倍增状态','SharingFactor', 1);
    4. 保存验证模型生成设置。

      HDLmodelname =“gmStateSpaceHDL_ssc_model”;hdlset_param (HDLmodelname“GenerateValidationModel”“上”);
    5. 生成HDL代码。

      makehdl (“gmStateSpaceHDL_ssc_model / HDL子系统”
      为“gmStateSpaceHDL_ssc_model/HDL子系统”生成HDL。使用模型gmStateSpaceHDL_ssc_model的配置集作为HDL代码生成参数。在“gmStateSpaceHDL_ssc_model”模型上运行HDL检查。开始编译模型“gmStateSpaceHDL_ssc_model”…应用HDL优化模型'gmStateSpaceHDL_ssc_model'…您所选择的代码生成和优化选项引入了额外的管道延迟。延迟平衡功能自动插入匹配的延迟进行补偿。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 Workflow Advisor。

另请参阅

Simscape块

功能

相关的例子

更多关于