主要内容

区域优化资源共享

这个例子展示了如何在HDL Coder™中使用子系统级共享优化。

简介

为了实现区域高效的硬件,使用资源共享,这是HDL Coder支持的子系统级优化。金宝app

默认情况下,HDL Coder实现的硬件是Simulink®块到硬件模块实现的一对一映射。金宝app资源共享优化,实现硬件资源的n对1映射N功能上等价的Simulink块到单个硬件模块。金宝app用户指定N通过使用SharingFactor实现参数。

由于时间多路复用架构在完成区域优化时会产生较长的延迟,HDL Coder根据共享的资源来管理时间差异。假设共享资源以基本采样速率运行,然后将资源共享实现为本地多速率体系结构,本例中对此进行了描述。如果共享资源以比基本采样率更慢的采样率运行,则HDL Coder调用时钟速率管道来合成一个使用在速率差中定义的延迟预算的实现。在这种情况下,资源共享体系结构是一个单速率实现,需要多个时间步骤来完成所有共享操作。单速率资源共享架构描述此实现的详细信息。

本例还说明了资源共享的本地多速率体系结构。考虑以下对称FIR滤波器模型。它包含四个功能等效的产品块,并映射到硬件中的四个乘法器。资源利用率报表中列出了硬件资源的使用情况。

bdclose所有;load_system (“sfir_fixed”);open_system (“sfir_fixed / symmetric_fir”);hdlset_param (“sfir_fixed”“ResourceReport”“上”);makehdl (“sfir_fixed / symmetric_fir”);
###生成HDL 'sfir_fixed/symmetric_fir'。###使用模型的配置集sfir_fixed用于HDL代码生成参数。在模型'sfir_fixed'上运行HDL检查。开始编译模型'sfir_fixed'…###应用HDL优化模型'sfir_fixed'…###正在做…sfir_fixed_codegen_rpt.html ### Creating HDL Code Generation Check Report file:///tmp/Bdoc22b_2134332_2575535/tp85f31a3b/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对1映射时共享资源

为减少区域资源,可以通过设置共享优化SharingFactor参数设置为正整数值。此参数指定Nn对1硬件映射。在本例中,有四个产品块,因此使用SharingFactor设置为4生成具有一个倍增器的HDL代码。

代码生成模型反映了共享体系结构。共享块的输入以更快的速率在共享资源上进行时间多路复用(在本例中,快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”“更新”);
###生成HDL 'sfir_fixed/symmetric_fir'。###使用模型的配置集sfir_fixed用于HDL代码生成参数。在模型'sfir_fixed'上运行HDL检查。开始编译模型'sfir_fixed'…###应用HDL优化模型'sfir_fixed'…DUT需要初始管道设置延迟。每个输出端口都会经历这些额外的延迟。###输出端口1:1个周期。###输出端口2:1个周期。 ### Working on... GenerateModel ### Begin model generation. ### 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/Bdoc22b_2134332_2575535/tp85f31a3b/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.

利用时分复用技术实现了共享优化。金宝appSimulink要求以预定义的采样率对共享资源的输出进行采样。HDL Coder以比数据速率更快的速度超频共享资源。在前面的示例中,共享体系结构(在输入端包括共享资源多路复用器-序列化器,在输出端包括解复用器-反序列化器)以四倍于输入数据的速率运行,因为Sharingfactor设置为4

延迟均衡与功能对等

在资源共享体系结构中实现时间多路复用的速率转换引入了额外的延迟。为了保持功能对等,延迟平衡在并行合并路径中插入匹配的延迟。生成的验证模型使您能够通过将共享硬件体系结构的操作与原始模型进行比较来验证功能等效性。

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控制乘性过采样

整个设计的净过采样相当于所有设计的LCMSharingFactor在模型上设置的值。考虑下面的例子hdlcoder_uniform_oversampling.slx。它有两个子系统子系统Share3有三个增益块可以共享和Share4有四个可以共享的增益块。

Saved_warning_state = warning(“关闭”“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_overampling ' HDL参数hdlset_param(' hdlcoder_uniform_overampling ', 'GenerateValidationModel', 'on');hdlset_param(' hdlcoder_uniform_overampling ', 'HDLSubsystem', ' hdlcoder_uniform_overampling ');%设置子系统HDL参数hdlset_param(' hdlcoder_uniform_overampling / SubSystem /Share3', 'SharingFactor', 3);%设置子系统HDL参数hdlset_param(' hdlcoder_uniform_overampling / SubSystem /Share4', 'SharingFactor', 4);

Share3设置它SharingFactor3.而且Share4设置它SharingFactor4。HDL Coder将本地资源共享应用于每个子系统,因此,HDL实现需要LCM(3,4)| = 12x过采样。这种过采样是在HDL代码生成期间报告的。

makehdl (“hdlcoder_uniform_oversampling /子系统”);
为'hdlcoder_uniform_oversampling/Subsystem'生成HDL。###使用模型的配置集 hdlcoder_uniform_overampling 用于HDL代码生成参数。在模型' hdlcoder_uniform_overampling '上运行HDL检查。###开始编译模型' hdlcoder_uniform_overampling '…###应用HDL优化模型' hdlcoder_uniform_overampling '…DUT需要初始管道设置延迟。每个输出端口都会经历这些额外的延迟。###输出端口1:1个周期。###输出端口2:1个周期。 ### Working on... GenerateModel ### Begin model generation. ### 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/Bdoc22b_2134332_2575535/tp85f31a3b/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倍,则设置SharingFactor设置为4对于这两个Share3而且Share4。在这种情况下,HDL Coder可以共享的资源比SharingFactor并在剩余的周期中保持空闲状态。

hdlset_param (“hdlcoder_uniform_oversampling /子系统/ Share3”“SharingFactor”4);makehdl (“hdlcoder_uniform_oversampling /子系统”);
为'hdlcoder_uniform_oversampling/Subsystem'生成HDL。###使用模型的配置集 hdlcoder_uniform_overampling 用于HDL代码生成参数。在模型' hdlcoder_uniform_overampling '上运行HDL检查。###开始编译模型' hdlcoder_uniform_overampling '…###应用HDL优化模型' hdlcoder_uniform_overampling '…DUT需要初始管道设置延迟。每个输出端口都会经历这些额外的延迟。###输出端口1:1个周期。###输出端口2:1个周期。 ### Working on... GenerateModel ### Begin model generation. ### 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/Bdoc22b_2134332_2575535/tp85f31a3b/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值时,HDL Coder将共享可用的可共享资源,并通过SharingFactor价值。如果您想要应用资源共享和其他使用超频的优化,比如流,或者在多个嵌套子系统中应用资源共享,这个通用指南可能会导致更高的过采样因子。

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

HDL Coder支金宝app持四种块类型的资源共享:产品、增益、原子子系统和MATLAB函数。对于MATLAB函数块,使用MATLAB Datapath公司具有定点类型的体系结构。此体系结构是浮点类型的默认设置。您可以指定高密度脂蛋白架构在MATLAB函数块的HDL块属性对话框中。

共享功能等效的Product和Gain块意味着共享HDL实现中的乘数。如果满足以下条件,两个Product块在功能上是等价的:

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

  • 它们的块参数设置相同。

  • 它们的HDL块属性是相同的。

对于增益块,函数等价还要求常量值和数据类型也相同。如果增益常量数据类型对于两个具有不同增益常量值的增益块是相同的,HDL Coder可以共享它们。类似地,如果一个Gain块可以实现为一个具有常量输入的Product块,并且它与设计中的另一个Product块具有相同的数据类型,HDL Coder可以共享它们。

第三种块类型,原子子系统,对于共享封装在原子子系统中的功能等效逻辑非常有用。两个原子子系统在功能上是等价的,在以下情况下可以共享:

  • 它们的Sim金宝appulink校验和是相同的。

  • 它们的HDL块属性是相同的。

共享原子子系统

下面的示例演示了一个音频过滤模型,该模型在左右通道上应用相同的过滤器。默认情况下,HDL Coder在硬件中生成两个过滤器模块。

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”“更新”);
###生成HDL 'hdlcoder_audiofiltering/音频过滤器'。###使用模型的配置集hdlcoder_audiofiltering用于HDL Code Generation参数。在模型'hdlcoder_audiofiltering'上运行HDL检查。开始编译模型'hdlcoder_audiofiltering'…应用HDL优化模型'hdlcoder_audiofiltering'…DUT需要初始管道设置延迟。每个输出端口都会经历这些额外的延迟。###输出端口1:1个周期。###输出端口2:1个周期。 ### Working on... GenerateModel ### Begin model generation. ### 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/Bdoc22b_2134332_2575535/tp85f31a3b/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”“更新”);
###生成HDL 'hdlcoder_audiofiltering/音频过滤器'。###使用模型的配置集hdlcoder_audiofiltering用于HDL Code Generation参数。在模型'hdlcoder_audiofiltering'上运行HDL检查。开始编译模型'hdlcoder_audiofiltering'…应用HDL优化模型'hdlcoder_audiofiltering'…DUT需要初始管道设置延迟。每个输出端口都会经历这些额外的延迟。###输出端口1:2个周期。###输出端口2:2个周期。 ### Working on... GenerateModel ### Begin model generation. ### 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/Bdoc22b_2134332_2575535/tp85f31a3b/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元素向量数据路径和三个向量增益块,默认情况下映射到72个乘数。流可以缩放矢量数据路径,而共享可以共享三个增益块。

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

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

要调用这两个优化,请设置StreamingFactor24而且SharingFactor3.。前者将乘数从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/Controller'生成HDL。###使用模型的配置集hdl_areaopt1用于HDL代码生成参数。###在模型'hdl_areaopt1'上运行HDL检查。###开始编译模型'hdl_areaopt1'###应用HDL优化模型'hdl_areaopt1'…DUT需要初始管道设置延迟。每个输出端口都会经历这些额外的延迟。###输出端口1:2个周期。###正在做… GenerateModel ### Begin model generation. ### 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/Bdoc22b_2134332_2575535/tp85f31a3b/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.