主要内容

对区域资源共享优化

这个例子展示了如何使用子系统共享优化水平HDL编码器™。

介绍

实现area-efficient硬件,使用资源共享,这是一个子系统级优化支持HDL编码器。金宝app

默认情况下,高密度脂蛋白编码器实现硬件的一对一的映射模型®块硬件模块的实现。金宝app资源共享优化使您共享硬件资源通过启用一个n对映射的N一个硬件模块的功能与仿真软件块。金宝app用户指定N通过使用SharingFactor实现参数。

因为time-multiplexed架构会带来更长的延迟完成区域优化、HDL编码管理时间差异取决于资源共享。假设共享的资源操作底部采样率,然后资源共享是实现为一个本地多重速率的架构,在本例中描述。如果共享资源操作以较慢的比基本采样率采样率,然后HDL编码调用时钟频率流水线合成一个实现使用预算中定义的延迟率差。在这种情况下,资源共享的体系结构是一个速度实现和花多时间完成所有共享的操作步骤。单频资源共享体系结构描述了该实现的细节。

这个例子还说明了当地多重速率的资源共享的体系结构。考虑下面的对称冷杉过滤模型。它包含四个产品模块,在功能上是等同的,映射到四个乘数硬件。所使用的资源利用率报告列出了硬件资源。

bdclose所有;load_system (“sfir_fixed”);open_system (“sfir_fixed / symmetric_fir”);hdlset_param (“sfir_fixed”,“ResourceReport”,“上”);makehdl (“sfir_fixed / symmetric_fir”);
# # #生成“sfir_fixed / symmetric_fir”高密度脂蛋白。使用的配置集模型# # # < a href = " matlab: configset。showParameterGroup (sfir_fixed, {HDL代码生成的})" > sfir_fixed < / > HDL代码生成参数。# # #“sfir_fixed”高密度脂蛋白检查运行模型。# # #开始编译模型的“sfir_fixed”……# # #工作模型“sfir_fixed”……# # #工作……< a href = " matlab: configset.internal.open (‘sfir_fixed’,‘GenerateModel’)”> GenerateModel < / > # # #开始模型生成的gm_sfir_fixed ....# # # .... DUT复制到生成的模型# # #模型生成完成。 ### Begin VHDL Code Generation for 'sfir_fixed'. ### Working on sfir_fixed/symmetric_fir as hdlsrc/sfir_fixed/symmetric_fir.vhd. ### Code Generation for 'sfir_fixed' completed. ### Generating HTML files for code generation report at sfir_fixed_codegen_rpt.html ### Creating HDL Code Generation Check Report file:///tmp/Bdoc23a_2213998_3301472/tp3975630c/hdlcoder-ex96854632/hdlsrc/sfir_fixed/symmetric_fir_report.html ### HDL check for 'sfir_fixed' complete with 0 errors, 0 warnings, and 0 messages. ### HDL code generation complete.

共享资源的n对映射

为了减少区域资源,您可以调用共享优化通过设置SharingFactor一个正整数价值的子系统的参数。该参数指定N在n对硬件映射。在这个例子中,有四个产品,所以产生高密度脂蛋白SharingFactor设置为4生成HDL代码有一个乘数。

代码生成模型反映了共享架构。输入共享块time-multiplexed共享资源的速度(在这种情况下快4倍,红色所示)。然后输出路由到相应的消费者以较慢的速度(绿色)所示。

hdlset_param (“sfir_fixed / symmetric_fir”,“SharingFactor”4);hdlset_param (“sfir_fixed”,“GenerateValidationModel”,“上”);makehdl (“sfir_fixed / symmetric_fir”);open_system (“gm_sfir_fixed / symmetric_fir”);set_param (“gm_sfir_fixed”,“SimulationCommand”,“更新”);
# # #生成“sfir_fixed / symmetric_fir”高密度脂蛋白。使用的配置集模型# # # < a href = " matlab: configset。showParameterGroup (sfir_fixed, {HDL代码生成的})" > sfir_fixed < / > HDL代码生成参数。# # #“sfir_fixed”高密度脂蛋白检查运行模型。# # #开始编译模型的“sfir_fixed”……# # #工作模型“sfir_fixed”……# # # DUT需要一个初始管道设置延迟。每个输出端口的经历这些额外的延迟。# # #输出端口1:1周期。# # #输出端口2:1周期。 ### Working on... GenerateModel ### Begin model generation 'gm_sfir_fixed' .... ### Rendering DUT with optimization related changes (IO, Area, Pipelining)... ### Model generation complete. ### Generating new validation model: gm_sfir_fixed_vnl. ### Validation model generation complete. ### Begin VHDL Code Generation for 'sfir_fixed'. ### MESSAGE: The design requires 4 times faster clock with respect to the base rate = 1. ### Begin VHDL Code Generation for 'symmetric_fir_tc'. ### Working on symmetric_fir_tc as hdlsrc/sfir_fixed/symmetric_fir_tc.vhd. ### Code Generation for 'symmetric_fir_tc' completed. ### Working on sfir_fixed/symmetric_fir as hdlsrc/sfir_fixed/symmetric_fir.vhd. ### Generating package file hdlsrc/sfir_fixed/symmetric_fir_pkg.vhd. ### Code Generation for 'sfir_fixed' completed. ### Generating HTML files for code generation report at sfir_fixed_codegen_rpt.html ### Creating HDL Code Generation Check Report file:///tmp/Bdoc23a_2213998_3301472/tp3975630c/hdlcoder-ex96854632/hdlsrc/sfir_fixed/symmetric_fir_report.html ### HDL check for 'sfir_fixed' complete with 0 errors, 0 warnings, and 1 messages. ### HDL code generation complete.

共享的优化是实现通过使用时分多路复用。金宝app模型需要共享资源的输出在预定义的采样率采样。高密度脂蛋白编码器超频共享资源速度超过数据率。在前面的例子中,共享架构,包括共享资源multiplexer-serializer输入,和demultiplexer-deserializer输出,运行速度的四倍的输入数据,因为Sharingfactor被设置为4

延迟平衡和功能对等

率转换实现time-multiplexing资源共享体系结构中引入额外的延迟。维护功能对等,延迟平衡并行插入匹配延迟合并路径。生成的验证模型使您能够验证功能对等进行比较的操作共享硬件体系结构到原始模型。

sim卡(“gm_sfir_fixed_vnl”);open_system (“gm_sfir_fixed_vnl /比较/ Assert_y_out /比较:y_out”)open_system (“gm_sfir_fixed_vnl /比较/ Assert_delayed_xout /比较:delayed_xout”)

控制通过SharingFactor乘法过采样

的净过采样模块的整体设计相当于SharingFactor在模型上设置值。考虑一下这个例子hdlcoder_uniform_oversampling.slx。它有两个子系统:子系统Share3有三个增益模块,可以共享吗Share4有四个增益模块,可以共享。

saved_warning_state =警告(“关闭”,“hdlcoder: makehdl: DeprecateMaxOverSampling”);警告(“关闭”,“hdlcoder: makehdl: DeprecateMaxComputationLatency”);bdclose (“所有”);load_system (“hdlcoder_uniform_oversampling”);open_system (“hdlcoder_uniform_oversampling /子系统”);set_param (“hdlcoder_uniform_oversampling”,“SimulationCommand”,“更新”);hdlsaveparams (“hdlcoder_uniform_oversampling /子系统”);
% %设置模型的hdlcoder_uniform_oversampling HDL参数hdlset_param (‘hdlcoder_uniform_oversampling’,‘GenerateValidationModel’,‘上’);hdlset_param (' hdlcoder_uniform_oversampling ', ' HDLSubsystem ', ' hdlcoder_uniform_oversampling ');%设置子系统HDL参数hdlset_param (“hdlcoder_uniform_oversampling /子系统/ Share3’,‘SharingFactor’, 3);%设置子系统HDL参数hdlset_param (“hdlcoder_uniform_oversampling /子系统/ Share4’,‘SharingFactor’, 4);

Share3设置它SharingFactor3Share4设置它SharingFactor4。高密度脂蛋白编码器应用当地资源共享子系统和结果,HDL实现需要LCM(3、4) | = 12倍过采样。过采样是在HDL代码生成报告。

makehdl (“hdlcoder_uniform_oversampling /子系统”);
# # #生成hdlcoder_uniform_oversampling /子系统的高密度脂蛋白。使用的配置集模型# # # < a href = " matlab: configset。showParameterGroup (hdlcoder_uniform_oversampling, {HDL代码生成的})" > hdlcoder_uniform_oversampling < / > HDL代码生成参数。# # #“hdlcoder_uniform_oversampling”高密度脂蛋白检查运行模型。# # #开始编译模型的“hdlcoder_uniform_oversampling”……# # #工作模型“hdlcoder_uniform_oversampling”……# # # DUT需要一个初始管道设置延迟。每个输出端口的经历这些额外的延迟。# # #输出端口1:1周期。# # #输出端口2:1周期。 ### Working on... GenerateModel ### Begin model generation 'gm_hdlcoder_uniform_oversampling' .... ### Rendering DUT with optimization related changes (IO, Area, Pipelining)... ### Model generation complete. ### Generating new validation model: gm_hdlcoder_uniform_oversampling_vnl. ### Validation model generation complete. ### Begin VHDL Code Generation for 'hdlcoder_uniform_oversampling'. ### MESSAGE: The design requires 12 times faster clock with respect to the base rate = 0.1. ### Begin VHDL Code Generation for 'Subsystem_tc'. ### Working on Subsystem_tc as hdlsrc/hdlcoder_uniform_oversampling/Subsystem_tc.vhd. ### Code Generation for 'Subsystem_tc' completed. ### Working on hdlcoder_uniform_oversampling/Subsystem/Share3 as hdlsrc/hdlcoder_uniform_oversampling/Share3.vhd. ### Working on hdlcoder_uniform_oversampling/Subsystem/Share4 as hdlsrc/hdlcoder_uniform_oversampling/Share4.vhd. ### Working on hdlcoder_uniform_oversampling/Subsystem as hdlsrc/hdlcoder_uniform_oversampling/Subsystem.vhd. ### Generating package file hdlsrc/hdlcoder_uniform_oversampling/Subsystem_pkg.vhd. ### Code Generation for 'hdlcoder_uniform_oversampling' completed. ### Creating HDL Code Generation Check Report file:///tmp/Bdoc23a_2213998_3301472/tp3975630c/hdlcoder-ex96854632/hdlsrc/hdlcoder_uniform_oversampling/Subsystem_report.html ### HDL check for 'hdlcoder_uniform_oversampling' complete with 0 errors, 0 warnings, and 1 messages. ### HDL code generation complete.

绕过这个乘法效应的过采样的一种方法是设置SharingFactor可用的所有子系统采样过密的预算。在上面的例子中,如果采样过密的预算只有4 x,那么设置SharingFactor设置为4对于这两个Share3Share4。在这种情况下,高密度脂蛋白编码器可以分享更少的资源比SharingFactor并为剩下的周期吃闲饭。

hdlset_param (“hdlcoder_uniform_oversampling /子系统/ Share3”,“SharingFactor”4);makehdl (“hdlcoder_uniform_oversampling /子系统”);
# # #生成hdlcoder_uniform_oversampling /子系统的高密度脂蛋白。使用的配置集模型# # # < a href = " matlab: configset。showParameterGroup (hdlcoder_uniform_oversampling, {HDL代码生成的})" > hdlcoder_uniform_oversampling < / > HDL代码生成参数。# # #“hdlcoder_uniform_oversampling”高密度脂蛋白检查运行模型。# # #开始编译模型的“hdlcoder_uniform_oversampling”……# # #工作模型“hdlcoder_uniform_oversampling”……# # # DUT需要一个初始管道设置延迟。每个输出端口的经历这些额外的延迟。# # #输出端口1:1周期。# # #输出端口2:1周期。 ### Working on... GenerateModel ### Begin model generation 'gm_hdlcoder_uniform_oversampling' .... ### Rendering DUT with optimization related changes (IO, Area, Pipelining)... ### Model generation complete. ### Generating new validation model: gm_hdlcoder_uniform_oversampling_vnl. ### Validation model generation complete. ### Begin VHDL Code Generation for 'hdlcoder_uniform_oversampling'. ### MESSAGE: The design requires 4 times faster clock with respect to the base rate = 0.1. ### Begin VHDL Code Generation for 'Subsystem_tc'. ### Working on Subsystem_tc as hdlsrc/hdlcoder_uniform_oversampling/Subsystem_tc.vhd. ### Code Generation for 'Subsystem_tc' completed. ### Working on hdlcoder_uniform_oversampling/Subsystem/Share3 as hdlsrc/hdlcoder_uniform_oversampling/Share3.vhd. ### Working on hdlcoder_uniform_oversampling/Subsystem/Share4 as hdlsrc/hdlcoder_uniform_oversampling/Share4.vhd. ### Working on hdlcoder_uniform_oversampling/Subsystem as hdlsrc/hdlcoder_uniform_oversampling/Subsystem.vhd. ### Generating package file hdlsrc/hdlcoder_uniform_oversampling/Subsystem_pkg.vhd. ### Code Generation for 'hdlcoder_uniform_oversampling' completed. ### Creating HDL Code Generation Check Report file:///tmp/Bdoc23a_2213998_3301472/tp3975630c/hdlcoder-ex96854632/hdlsrc/hdlcoder_uniform_oversampling/Subsystem_report.html ### HDL check for 'hdlcoder_uniform_oversampling' complete with 0 errors, 0 warnings, and 1 messages. ### HDL code generation complete.

过采样因素现在LCM (4, 4) = 4。这个值是报道在代码生成的值。这是一个最佳实践设置SharingFactor可用的过采样的预算值。如果你的设计包含更少的可共享的资源比SharingFactor您指定值,高密度脂蛋白编码器股票和超频他们可用的共享资源SharingFactor价值。如果你想使用超频的应用资源共享和其他优化,如流,或在多个嵌套应用资源共享子系统,这一般指导方针可能导致更高的过采样因素。

块支持、原子金宝app子系统和扩展

高密度脂蛋白编码器支金宝app持资源共享四块类型:产品,增加,原子子系统,MATLAB函数。MATLAB函数块,使用MATLAB Datapath公司架构与定点类型。这个架构是默认设置为浮点类型。您可以指定高密度脂蛋白架构高密度脂蛋白块属性对话框的MATLAB函数块。

分享功能与产品和获得块意味着乘数的HDL实现共享。两块产品在功能上是等同的,如果:

  • 他们的输入和输出数据类型都是相同的。

  • 他们阻止参数设置是一样的。

  • 他们的高密度脂蛋白块属性是相同的。

获得块,功能对等另外要求恒定值和数据类型也相同。如果增益常数的数据类型都是相同的两个增益模块有不同的常量值,高密度脂蛋白编码器可以共享它们。类似地,如果一个获得块可以作为一个产品来实现屏蔽常数输入,和它有相同的数据类型作为另一种产品模块设计,高密度脂蛋白编码器可以共享它们。

第三块类型、原子子系统,用于共享的功能与逻辑封装内部原子子系统。两个原子可以共享子系统在功能上是等同的,如果:

  • 他们的模型校金宝app验和是相同的。

  • 他们的高密度脂蛋白块属性是相同的。

分享原子子系统

下面的示例演示了一个音频滤波模型,该模型同样适用于过滤左右通道。默认情况下,HDL硬件编码器生成两个滤波器模块。

bdclose所有;load_system (“hdlcoder_audiofiltering”);open_system (“hdlcoder_audiofiltering /音频过滤器”);

两个音频频道上的过滤器可以通过指定一个共享SharingFactor的价值2包括子系统。这生成一个架构,只使用一个过滤器,如下所示。

hdlset_param (“hdlcoder_audiofiltering /音频过滤器”,“SharingFactor”2);makehdl (“hdlcoder_audiofiltering /音频过滤器”);open_system (“gm_hdlcoder_audiofiltering /音频过滤器”);set_param (“gm_hdlcoder_audiofiltering”,“SimulationCommand”,“更新”);
# # #产生高密度脂蛋白“hdlcoder_audiofiltering /音频滤波器”。使用的配置集模型# # # < a href = " matlab: configset。showParameterGroup (hdlcoder_audiofiltering, {HDL代码生成的})" > hdlcoder_audiofiltering < / > HDL代码生成参数。# # #“hdlcoder_audiofiltering”高密度脂蛋白检查运行模型。# # #开始编译模型的“hdlcoder_audiofiltering”……# # #工作模型“hdlcoder_audiofiltering”……# # # DUT需要一个初始管道设置延迟。每个输出端口的经历这些额外的延迟。# # #输出端口1:1周期。# # #输出端口2:1周期。 ### Working on... GenerateModel ### Begin model generation 'gm_hdlcoder_audiofiltering' .... ### Rendering DUT with optimization related changes (IO, Area, Pipelining)... ### Model generation complete. ### Begin VHDL Code Generation for 'hdlcoder_audiofiltering'. ### MESSAGE: The design requires 2 times faster clock with respect to the base rate = 0.00012207. ### Begin VHDL Code Generation for 'Audio_filter_tc'. ### Working on Audio_filter_tc as hdlsrc/hdlcoder_audiofiltering/Audio_filter_tc.vhd. ### Code Generation for 'Audio_filter_tc' completed. ### Working on hdlcoder_audiofiltering/Audio filter/Filter_left as hdlsrc/hdlcoder_audiofiltering/Filter_left.vhd. ### Working on hdlcoder_audiofiltering/Audio filter as hdlsrc/hdlcoder_audiofiltering/Audio_filter.vhd. ### Generating package file hdlsrc/hdlcoder_audiofiltering/Audio_filter_pkg.vhd. ### Code Generation for 'hdlcoder_audiofiltering' completed. ### Creating HDL Code Generation Check Report file:///tmp/Bdoc23a_2213998_3301472/tp3975630c/hdlcoder-ex96854632/hdlsrc/hdlcoder_audiofiltering/Audio_filter_report.html ### HDL check for 'hdlcoder_audiofiltering' complete with 0 errors, 0 warnings, and 1 messages. ### HDL code generation complete.

资源共享的机会在层次结构

因为SharingFactor各级子系统级参数,不同子系统的层次结构可以指定不同的共享价值观。在音频滤波器的例子中,每个通道的过滤器使用三个分别获得块。

open_system (“hdlcoder_audiofiltering /音频过滤器/ Filter_left”);

共享资源在更高层次的层次结构

您可以指定一个SharingFactor的价值2顶级的DUT分享两个渠道上的过滤器。您可以指定一个SharingFactor的价值3在每个滤波器子系统启用共享的三个获得每个通道的街区。当HDL代码生成,左右过滤器已被共享。只有一个过滤器是在层次结构的顶层。

hdlset_param (“hdlcoder_audiofiltering /音频过滤器”,“SharingFactor”2);hdlset_param (“hdlcoder_audiofiltering /音频过滤器/ Filter_left”,“SharingFactor”3);hdlset_param (“hdlcoder_audiofiltering /音频过滤器/ Filter_right”,“SharingFactor”3);makehdl (“hdlcoder_audiofiltering /音频过滤器”);open_system (“gm_hdlcoder_audiofiltering /音频过滤器”);set_param (“gm_hdlcoder_audiofiltering”,“SimulationCommand”,“更新”);
# # #产生高密度脂蛋白“hdlcoder_audiofiltering /音频滤波器”。使用的配置集模型# # # < a href = " matlab: configset。showParameterGroup (hdlcoder_audiofiltering, {HDL代码生成的})" > hdlcoder_audiofiltering < / > HDL代码生成参数。# # #“hdlcoder_audiofiltering”高密度脂蛋白检查运行模型。# # #开始编译模型的“hdlcoder_audiofiltering”……# # #工作模型“hdlcoder_audiofiltering”……# # # DUT需要一个初始管道设置延迟。每个输出端口的经历这些额外的延迟。# # #输出端口1:2周期。# # #输出端口2:2周期。 ### Working on... GenerateModel ### Begin model generation 'gm_hdlcoder_audiofiltering' .... ### Rendering DUT with optimization related changes (IO, Area, Pipelining)... ### Model generation complete. ### Begin VHDL Code Generation for 'hdlcoder_audiofiltering'. ### MESSAGE: The design requires 6 times faster clock with respect to the base rate = 0.00012207. ### Begin VHDL Code Generation for 'Audio_filter_tc'. ### Working on Audio_filter_tc as hdlsrc/hdlcoder_audiofiltering/Audio_filter_tc.vhd. ### Code Generation for 'Audio_filter_tc' completed. ### Working on hdlcoder_audiofiltering/Audio filter/Filter_left as hdlsrc/hdlcoder_audiofiltering/Filter_left.vhd. ### Working on hdlcoder_audiofiltering/Audio filter as hdlsrc/hdlcoder_audiofiltering/Audio_filter.vhd. ### Generating package file hdlsrc/hdlcoder_audiofiltering/Audio_filter_pkg.vhd. ### Code Generation for 'hdlcoder_audiofiltering' completed. ### Creating HDL Code Generation Check Report file:///tmp/Bdoc23a_2213998_3301472/tp3975630c/hdlcoder-ex96854632/hdlsrc/hdlcoder_audiofiltering/Audio_filter_report.html ### HDL check for 'hdlcoder_audiofiltering' complete with 0 errors, 0 warnings, and 1 messages. ### HDL code generation complete.

共享资源在较低的水平层次结构

三个增益模块的低水平层次(过滤子系统内)也被共享。你从六个乘数降低了资源的使用。

open_system (“gm_hdlcoder_audiofiltering /音频过滤器/ Filter_left”);set_param (“gm_hdlcoder_audiofiltering”,“SimulationCommand”,“更新”);

组合优化和共享

资源共享可以与其他的优化组合,如流的优化。

考虑这个模型。它包含一个24-element向量datapath公司和三个矢量增益模块,默认映射到72乘数。流可以scalarize向量datapath公司,同时可以分享分享三个街区。

bdclose所有;load_system (“hdl_areaopt1”);open_system (“hdl_areaopt1 /控制器”);set_param (“hdl_areaopt1”,“SimulationCommand”,“更新”);

流和共享减少设计使用一个乘数

调用这两个优化,集StreamingFactor24SharingFactor3。前减少了乘数的数量从72年到3。后者减少了3标量乘数为1。

hdlset_param (“hdl_areaopt1 /控制器”,“StreamingFactor”、24);hdlset_param (“hdl_areaopt1 /控制器”,“SharingFactor”3);makehdl (“hdl_areaopt1 /控制器”);open_system (“gm_hdl_areaopt1 /控制器”);set_param (“gm_hdl_areaopt1”,“SimulationCommand”,“更新”);
# # #产生高密度脂蛋白的hdl_areaopt1 /控制器。使用的配置集模型# # # < a href = " matlab: configset。showParameterGroup (hdl_areaopt1, {HDL代码生成的})" > hdl_areaopt1 < / > HDL代码生成参数。# # #“hdl_areaopt1”高密度脂蛋白检查运行模型。# # #开始编译模型的“hdl_areaopt1”……# # #工作模型“hdl_areaopt1”……# # # DUT需要一个初始管道设置延迟。每个输出端口的经历这些额外的延迟。# # #输出端口1:2周期。# # #工作…… GenerateModel ### Begin model generation 'gm_hdl_areaopt1' .... ### Rendering DUT with optimization related changes (IO, Area, Pipelining)... ### Model generation complete. ### Begin VHDL Code Generation for 'hdl_areaopt1'. ### MESSAGE: The design requires 72 times faster clock with respect to the base rate = 2. ### Begin VHDL Code Generation for 'Controller_tc'. ### Working on Controller_tc as hdlsrc/hdl_areaopt1/Controller_tc.vhd. ### Code Generation for 'Controller_tc' completed. ### Working on hdl_areaopt1/Controller as hdlsrc/hdl_areaopt1/Controller.vhd. ### Generating package file hdlsrc/hdl_areaopt1/Controller_pkg.vhd. ### Code Generation for 'hdl_areaopt1' completed. ### Generating HTML files for code generation report at hdl_areaopt1_codegen_rpt.html ### Creating HDL Code Generation Check Report file:///tmp/Bdoc23a_2213998_3301472/tp3975630c/hdlcoder-ex96854632/hdlsrc/hdl_areaopt1/Controller_report.html ### HDL check for 'hdl_areaopt1' complete with 0 errors, 0 warnings, and 1 messages. ### HDL code generation complete.