此示例显示如何在Simulink®模型中使用MATLAB功能块内的各种优化以及MATLAB功能块边界。金宝app该示例还示出了使用MATLAB功能块的不同HDL架构设置时的区域和时序的差异。
MATLAB功能块的HDL代码生成支持两种HDL体系结构:金宝appMATLAB功能
和MATLAB数据通路
。指定HDL体系结构在“HDL块属性”对话框中MATLAB功能堵塞。
使用MATLAB数据通路
建筑;
在MATLAB功能块内对复杂的定点和浮点MATLAB算法进行建模,并将此算法与模型中的其他Simulink块进行接口。金宝app
显著由MATLAB功能块内,跨在你的模型中的其他Simulink模块的MATLAB功能块边界的算法优化提升区和设计的时间。金宝app
这种架构与浮点类型MATLAB功能块的默认设置。通过启用MATLAB数据通路
架构定点操作,您可以使用各种优化,包括:
层次扁平化
资源共享和流媒体
时钟速率流水线
自适应管道
分布式流水线和分层分布式流水线
关键路径估计
定点的Simulink模金宝app型使用MATLAB功能
默认架构。某些HDL优化,例如资源共享和分布式流水线,你这个架构优化周边MATLAB功能块和MATLAB功能块内的算法块启用。看MATLAB函数块内的优化的效果,检查所述块的所述生成的HDL代码。这种架构不与其他Simulink模块适用于整个MATLAB功能块边界的优化。金宝app
浮点Simulink模型使用金宝appMATLAB数据通路
建筑学即使您指定MATLAB功能
作为块的架构设置。使用浮点类型时,请指定本机浮点模式。使用此架构,代码生成器像常规子系统块一样对待块。HDL编码器将MATLAB函数块内的MATLAB代码的控制流程算法转换为使用SIMULINK块的数据流表示。金宝app这MATLAB数据通路
由于此转换,架构展开您的代码中的循环。如果要流循环,请使用循环流优化MATLAB功能
结构或者使用与流优化MATLAB数据通路
作为HDL架构。
通过使用MATLAB数据通路
架构,您可以更有效地执行各种HDL编码器™ 使用MATLAB功能块进行优化,否则将使用子系统块执行MATLAB数据通路
建筑应用优化设置您在MATLAB功能块内,跨在你的Simulink模型的其他块的MATLAB功能块边界的算法指定。金宝app
例如,使用包含产品块和MATLAB功能块组成的DUT子系统来考虑此模型。
开放式系统('hdlcoder_MLFB_simple_datapath')set_param('hdlcoder_MLFB_simple_datapath'那'SimulationCommand'那'更新')open_system('hdlcoder_mlfb_simple_datapath / hdl_dut')
MATLAB功能块实现了两个乘法。
开放式系统('hdlcoder_MLFB_simple_datapath / HDL_DUT / MATLAB功能')
MATLAB功能块的HDL体系结构设置为MATLAB数据通路
。生成HDL代码HDL_DUT
子系统,运行以下命令:
makehdl('hdlcoder_mlfb_simple_datapath / hdl_dut')
生成HDL代码时,代码生成器将用执行乘法的子系统替换MATLAB功能块C * d
和E * F.
。
和MATLAB数据通路
架构,您可以使用其他Simulink块在Matlab函数块中的优化和Matlab功能块中执行优化。金宝app在此示例中,您可以在MATLAB功能块中共享两个乘法器。要优化块,请设置SharingFactor.到2
在MATLAB功能块。
mlsubsys ='hdlcoder_MLFB_simple_datapath / HDL_DUT / MATLAB功能';hdlset_参数(MLSUSYS、,“分享因素”2)
生成HDL代码时,代码生成器将共享MATLAB功能块内的乘法。共享组显示在优化报告中。单击共享组中的链接时,HDL编码器将在生成的模型和原始模型中显示MATLAB功能块内的共享乘法器。
您可以在MATLAB功能块与其他Simulink块之间应用优化。在本例中,您可以在MATLAB功能块外部与MATLAB功能块内部的乘法器共享产品块。要金宝app共享这些资源,请删除SharingFactor.在matlab函数块上,父子系统上,HDL_DUT
使可能Flattenhierarchy.和集合SharingFactor.到3.
。
hdlset_参数(mlsubsys,“分享因素”,0)hdlset_param('hdlcoder_mlfb_simple_datapath / hdl_dut'那......'FlattenHierarchy'那'在'那“分享因素”,3)
注意:不要使用Inlinematlabcode.与MATLAB数据通路
块的结构。用Flattenhierarchy.
反而。
当您生成HDL代码时,代码生成器将在MATLAB功能块内的乘法与外部的产品块共享。您在优化报告中看到三个乘法器的共享组。单击共享组中的链接时,共享乘法器在生成的模型和原始模型中突出显示。
对于说明的示例模型MATLAB数据通路
架构以及它与之不同MATLAB功能
建筑,打开模型hdlcoder_mlfb_share_pipeline.
。该模型使用整数类型。例如,说明如何使用MATLAB数据通路
架构,浮点类型,请参阅生成目标无关的HDL代码与原生浮点。
开放式系统('hdlcoder_MLFB_share_pipeline')set_param('hdlcoder_MLFB_share_pipeline'那'SimulationCommand'那'更新')
该模型包含在顶部二级DUT子系统hdl_dut_sharing.
和HDL_DUT_蒸馏管
。子系统说明了如何在Matlab功能块边界上使用资源共享和分布式流水线优化与其他块。两个子系统都在Matlab功能块内外执行基本添加和乘法。
开放式系统('hdlcoder_mlfb_share_pipeline / hdl_dut_sharing')
开放式系统(“hdlcoder\u MLFB\u共享\u管道/HDL\u DUT\u共享/子系统”)
开放式系统('hdlcoder_MLFB_share_pipeline / HDL_DUT_distpipe')
要查看在模型上保存的HDL参数,请运行hdlsaveparams
功能。
hdlsaveparams('hdlcoder_MLFB_share_pipeline')
%%集模型 'hdlcoder_MLFB_share_pipeline' HDL参数hdlset_param( '上' 'hdlcoder_MLFB_share_pipeline', 'CriticalPathEstimation',);hdlset_param( 'hdlcoder_MLFB_share_pipeline', 'HDLSubsystem', 'hdlcoder_MLFB_share_pipeline / HDL_DUT_sharing');hdlset_param( 'hdlcoder_MLFB_share_pipeline', 'OptimizationReport', '上');hdlset_param( 'hdlcoder_MLFB_share_pipeline', '过采样',40);hdlset_param( 'hdlcoder_MLFB_share_pipeline', 'ResourceReport', '上');hdlset_param( 'hdlcoder_MLFB_share_pipeline' '上', 'ShareAdders',);hdlset_param( 'hdlcoder_MLFB_share_pipeline', 'targetdirectory中', 'hdl_prj \ hdlsrc');hdlset_param( 'hdlcoder_MLFB_share_pipeline', '可追溯性', '上');%设定子系统HDL参数hdlset_param( 'hdlcoder_MLFB_share_pipeline / HDL_DUT_distpipe', '上' 'DistributedPipelining');hdlset_param( 'hdlcoder_MLFB_share_pipeline / HDL_DUT_distpipe', 'FlattenHierarchy', '上'); % Set SubSystem HDL parameters hdlset_param('hdlcoder_MLFB_share_pipeline/HDL_DUT_sharing', 'FlattenHierarchy', 'on'); hdlset_param('hdlcoder_MLFB_share_pipeline/HDL_DUT_sharing', 'SharingFactor', 8);
您可以看到默认值MATLAB功能
HDL架构保存在模型上。
要为共享DUT生成HDL代码,请运行此命令:
makehdl('hdlcoder_mlfb_share_pipeline / hdl_dut_sharing')
当您打开流媒体和共享报告时,该报告将显示四个乘法器和三个添加剂作为共享资源。
单击第二个共享组时,代码生成器将突出显示围绕MATLAB功能块的三个加法器。共享组包括子系统内部的两个加法器和外部的加法器。代码生成器未共享MATLAB功能块内部的乘法器和加法器。
在模型上启用了关键路径估计。在注释关键路径时,MATLAB功能块将作为此优化的障碍。如果关键路径位于MATLAB功能块内,并且如果要突出显示关键路径,请使用MATLAB数据通路
建筑学。
要生成HDL代码HDL_DUT_蒸馏管
,运行此命令:
makehdl('hdlcoder_MLFB_share_pipeline / HDL_DUT_distpipe')
打开分布式管道报告时,您会看到代码生成器在报告中移动了管道HDL_DUT_蒸馏管
子系统但MATLAB功能块内未分配管道。
此图显示了如何分布流水线子系统内移动流水线寄存器。
要提高区域和设计的时间,使用MATLAB数据通路
建筑学。为了hdl_dut_sharing.
子系统,可以将资源共享与时钟速率流水线合并,并使用其他块共享Matlab功能块内的资源,并与其他块一起共享Matlab功能块。
分享资源:
1.启用Flattenhierarchy.并指定SharingFactor.在父子系统hdl_dut_sharing.
。设定SharingFactor.到8.
。
share_subsys =.'hdlcoder_mlfb_share_pipeline / hdl_dut_sharing';hdlset_param(share_subsys,'FlattenHierarchy'那'在'那“分享因素”,8);
2.指定MATLAB数据通路
MATLAB功能块的架构hdl_dut_sharing.
子系统。
共享\u mlfcn1=“hdlcoder\u MLFB\u share\u pipeline/HDL\u DUT\u sharing/MATLAB函数”;share_mlfcn2 =“hdlcoder\u MLFB\u share\u pipeline/HDL\u DUT\u sharing/Subsystem/MATLAB函数”;hdlset参数(共享mlfcn1,'建筑学'那“MATLAB数据通路”);hdlset_param(share_mlfcn2,'建筑学'那“MATLAB数据通路”);
打开“流式处理和共享”报告时,该报告将显示一个共享组,其中包含八个乘法器和两个共享组的加法器。
选择第一个共享组时,您可以看到优化共享Matlab函数中的乘数,其中四个增益块外。第二个共享组由两个MATLAB功能块中的每一个内的添加剂组成。
您可以将分布式管道优化与Distributedpipe_MLFB
子系统。在顶层启用分层分布式流水线和MATLAB功能的HDL架构设置MATLAB数据通路
和分配普利线设置在…上
。
hdlset_参数('hdlcoder_MLFB_share_pipeline'那'hierarchicaldistpipile's'那'在');dist_subsys =.'hdlcoder_mlfb_share_pipeline / hdl_dut_distpipe / matlab函数';hdlset_param(dist_subsys,'建筑学'那“MATLAB数据通路”);hdlset_param(dist_subsys,'分发了普利宁'那'在');
生成HDL代码后,打开生成的模型。代码生成器使用分层分布式管道和分布式管道在块之间和块内部移动管道寄存器MATLAB功能
子系统。
此图显示分布式管道如何在内部移动管道寄存器MATLAB功能
子系统。