从Simscape生成优化的HDL实现模型
这个示例展示了如何通过使用资源共享和RAM映射等优化来为Simscape™维也纳整流器模型生成优化的HDL实现模型。
为什么要优化HDL实现模型
对于具有许多切换元素的Simscape模型,状态空间表示包含大量配置。Simscape HDL Workflow Advisor模拟Simscape模型来计算相关配置的数量。某些Simscape模型可以有大量相关的配置。为这样一个大型设计生成的HDL实现模型可能会消耗大量的资源。合成生成的代码会导致设计占用FPGA设备上的大量资源。在某些情况下,设计可能不适合目标FPGA设备。为了节省资源并使设计适合FPGA, Simscape HDL Workflow Advisor使用HDL Coder™优化,例如时钟速率管道、资源共享和RAM映射。
维也纳整流模型
要打开模型,在MATLAB®命令提示符下输入:
open_system (“sschdlexViennaRectifierExample”)
将此模型保存为ViennaRectifier_HDL以运行工作流。
open_system (“ViennaRectifier_HDL”) set_param (“ViennaRectifier_HDL”,“SimulationCommand”,“更新”)
的控制
子系统实现了闭环控制策略维也纳整流器
子系统采用空间矢量调制。在模拟时0.1秒
时,维也纳整流接通。有时0.4秒
而且0.6秒
时,直流侧负载上升。
的维也纳整流器
子系统由三相支路组成。每条腿有一个电源开关和六个电源二极管。看到维也纳整流控制(Simscape电气).
open_system (“ViennaRectifier_HDL /维也纳整流器”)
模拟模型。控件中的Scope块,以查看模拟结果作用域
子系统。
sim卡(“ViennaRectifier_HDL”) open_system (“ViennaRectifier_HDL /范围/范围”)
生成HDL实现模型并验证HDL算法
要生成HDL实现模型,请使用Simscape HDL Workflow Advisor。您可以为实现模型生成HDL代码。使用实例打开Advisor。
sschdladvisor (“ViennaRectifier_HDL”)
要生成HDL实现模型,请在实现模型的生成子文件夹,右键单击生成实现模型任务和选择运行到选定任务.任务通过后,您将看到到HDL实现模型的链接。要查看配置的数量,请选择提取方程下任务状态转换子文件夹。当您单击任务时,您将看到模拟模型达到397
模式。如此多的模式会增加FPGA设计的资源消耗。
要打开HDL实现模型,输入以下命令:
open_system (“gmStateSpaceHDL_ViennaRectifier_HDL”) set_param (“gmStateSpaceHDL_ViennaRectifier_HDL”,“SimulationCommand”,“更新”)
该子系统的端口使用与原始Simscape模型中的Simulink-PS Converter和PS-Simulink Converter块相同的名称。如果您在这个子系统中导航,您会看到几个延迟、加法器和矩阵乘法块,它们为状态空间方程建模。
open_system (' gmstatespacehdl_维也纳整流器_hdl /HDL子系统/HDL算法')
要验证HDL算法,请在生成实现模型任务时,选择为实现模型生成验证逻辑中的复选框。验证设置,设置验证逻辑公差来0.001
,并重新运行该任务。该任务生成一个状态空间验证模型,用于比较实现模型和原始Simscape模型。
open_system (“gmStateSpaceHDL_ViennaRectifier_HDL_vnl”) set_param (“gmStateSpaceHDL_ViennaRectifier_HDL_vnl”,“SimulationCommand”,“更新”)
模拟模型不显示断言,这表明HDL算法与原始模型匹配。
sim卡(“gmStateSpaceHDL_ViennaRectifier_HDL_vnl”)
将实现模型中的状态空间参数映射到RAM
HDL实现模型使用单
数据类型,并包含在反馈循环中的大延迟块高密度脂蛋白算法
子系统。为了适应较大的延迟,并使设计在目标FPGA上以更快的时钟速率运行,该模型使用时钟速率流水线,并结合较大的值过采样因子.
hdlsaveparams (“gmStateSpaceHDL_ViennaRectifier_HDL”)
有关更多信息,请参见:
在生成实现模型任务时,将状态空间参数映射到ram的默认值汽车
.当模式数量超过阈值时,此设置将HDL实现模型中的大状态空间参数映射到ram200
.由于维也纳整流模型使用了大量的模式,状态空间参数被映射到ram。通过映射到ram,可以节省FPGA上的查找表资源。要启用RAM映射,可以使用UseRAM参数在执行状态更新和计算输出的屏蔽子系统块上启用。
如果不考虑阈值,将参数映射到ram,请设置将状态空间参数映射到ram来在
.
为了了解RAM映射对维也纳整流模型的影响:
1.验证UseRAM参数设置hdlget_param
函数在把输入
而且用状态
块。
Multiplysubsys1 =' gmstatespacehdl_维也纳整流器_hdl /HDL子系统/HDL算法/状态更新';Multiplysubsys2 =' gmstatespacehdl_维也纳整流器_hdl /HDL子系统/HDL算法/输出';UseRAM1 = hdlget_param([Multiplysubsys1 ./把输入的),“UseRAM”) UseRAM2 = hdlget_param([Multiplysubsys1 .“/繁殖状态”),“UseRAM”)
UseRAM1 = 'on' UseRAM2 = 'on'
2.启用资源利用率报告的生成。
hdlset_param (“gmStateSpaceHDL_ViennaRectifier_HDL”,“ResourceReport”,“上”)
3.为实现模型生成HDL代码。
makehdl (“gmStateSpaceHDL_ViennaRectifier_HDL / HDL子系统”);
当您生成代码时,HDL Coder将打开一个代码生成报告。的高级别资源报告显示136
公羊利用。
状态更新和输出计算块的资源共享
在为HDL子系统生成HDL代码之前,可以使用HDL Coder中的资源共享优化来优化算法。资源共享是一种区域优化,它可以识别多个功能等效的资源,并将它们替换为单个等效的资源。数据在共享资源上进行时间复用,以执行相同的操作。看到资源共享.
在HDL实现模型中,您可以共享执行状态更新和计算输出的屏蔽子系统块。
为维也纳整流器共享这些子系统并生成HDL代码:
1.指定一个SharingFactor2的乘法输入和乘法状态子系统。
hdlset_param ([Multiplysubsys1/把输入的),“SharingFactor”, 2) hdlset_param([Multiplysubsys1 .“/繁殖状态”),“SharingFactor”, 2) hdlset_param([Multiplysubsys2 ./把输入的),“SharingFactor”, 2) hdlset_param([Multiplysubsys2 .“/繁殖状态”),“SharingFactor”, 2)
2.启用优化报告的生成
hdlset_param (“gmStateSpaceHDL_ViennaRectifier_HDL”,“OptimizationReport”,“上”)
3.为实现模型中的HDL子系统块生成HDL代码。
makehdl (“gmStateSpaceHDL_ViennaRectifier_HDL / HDL子系统”);
当您生成代码时,HDL Coder将打开一个代码生成报告。要查看资源共享优化的状态,请单击流媒体和共享报告的一部分。这个共享组显示了优化共享的点积。2022世界杯八强谁会赢?当你点击高级别资源报告,您可以看到加法器、乘法器和寄存器的消耗都减少了。