使用不同的子系统类型
学习如何使用不同类型的层级结构子系统在设计和模型算法,使用这些指导方针。每个指南都有严重性级别,表明合规要求的水平。有关更多信息,请参见高密度脂蛋白建模指南严重的水平。
虚拟子系统:作为DUT
指导ID
2.4.1
严重程度
强烈推荐
描述
是一个虚拟的子系统子系统这不是一个conditionally-executed子系统或者一个原子子系统。默认情况下,常规的子系统块,你加到你的模型金宝app®模型是一个虚拟的子系统。非虚拟子系统类型包括原子子系统模型参考,不同的子系统和一个变体模型。
确定一个子系统是虚拟的,可以使用get_param
函数的参数IsSubsystemVirtual
。例如:
get_param (“sfir_fixed / symmetric_fir”,“IsSubsystemVirtual”)
原子和虚拟子系统:生成可重用的HDL文件
指导ID
2.4.2
严重程度
推荐
描述
为相同的实例生成一个高密度脂蛋白文件子系统的使用在较低的水平层次,明白了为子系统生成可重用的代码和代码重用。
使资源共享子系统单元,明白了一般考虑子系统的共享。
你必须关掉信号记录从原子生成可重用的代码和虚拟子系统。一代的可重用代码从原子和虚拟子系统可能不会成功如果你日志子系统内部的信号。
变体子系统:使用变体HDL代码生成子系统
指导ID
2.4.3
严重程度
强制性的
描述
的变体子系统、变体模型变体装配子系统块模板预配置子系统包含两个子系统模块使用变体的选择。在仿真中,控制决定这两个子系统的一个变体是活跃的。因此,您可以使用不同的子系统来创建两个不同的配置或子系统的行为,然后指定活动的配置模型编译阶段或simulation-loop仿真阶段。
你不能使用子系统DUT的一个变体。来生成代码,将变异子系统内部子系统DUT您想使用。生成的代码的文件名和实例名只有积极配置或创建活跃的和不活跃的配置。
你不能分享多个变体子系统模块通过使用变体子系统的优化。
时必须确保验证生成的代码的功能,活跃的变体时,你使用模拟模型是一样的活跃的变种,用于生成HDL代码。
例如,打开模型hdlcoder_variant_subsystem_design.slx
。如果你打开DUT子系统,子系统块,你看到一个变体分
。不同的子系统有两个不同的子系统,互相起作用
和人事处
。如果你打开块参数对话框分
子系统,你看到的变异控制表达式和条件决定哪个子系统,使在模拟。的变体激活时间决定在这阶段的模拟,使子系统。在这种情况下,Rcp
是1
和激活时间更新图
。的互相起作用
在仿真子系统变得活跃。
load_system (“hdlcoder_variant_subsystem_design”)set_param (“hdlcoder_variant_subsystem_design”,“SimulationCommand”,“更新”)open_system (“hdlcoder_variant_subsystem_design / DUT /鸿沟”)
生成的代码
生成HDL代码,运行这个命令:
makehdl (hdlcoder_variant_subsystem_design / DUT的);
一个高密度脂蛋白的文件名称Recip.vhd
是生成的,因为互相起作用
子系统是活跃在代码生成时间,因此生成的代码。
为两个生成HDL代码互相起作用
和人事处
,改变这些参数的设置参数的对话框分
子系统,然后运行makehdl
命令。
1。集变体激活时间来启动
。
set_param (“hdlcoder_variant_subsystem_design / DUT /鸿沟”,“VariantActivationTime”,“启动”)
2。设置变量控制变量Rcp
类型的金宝appSimulink.VariantControl
,正常的MATLAB®变量,或金宝appSimulink.Parameter
并将其值设置为一个整数值。在这个例子中,Rcp
是一个正常的MATLAB变量与一个吗int16
价值。
Rcp = int16 (1);
3所示。集允许控制零活跃的变体来在
。
set_param (“hdlcoder_variant_subsystem_design / DUT /鸿沟”,“AllowZeroVariantControls”,“上”)
4所示。集传播条件子系统之外的变体来从
。
set_param (“hdlcoder_variant_subsystem_design / DUT /鸿沟”,“PropagateVariantConditions”,“关闭”)
注意:确保治疗作为原子单元的互相起作用
和人事处
子系统设置为在
。
set_param (“hdlcoder_variant_subsystem_design / DUT /分/倒数的,“TreatAsAtomicUnit”,“上”)set_param (“hdlcoder_variant_subsystem_design / DUT /分/ Op”,“TreatAsAtomicUnit”,“上”)
使用以下命令生成HDL代码。
makehdl (hdlcoder_variant_subsystem_design / DUT的);
高密度脂蛋白的文件名称Recip.vhd
和Op.vhd
因为生成的代码生成的吗互相起作用
和人事处
子系统。
高密度脂蛋白编码器生成以下子系统硬件描述语言(VHDL)®代码变体分
,其变异控制变量设置为一个可调参数,Rcp
。代码生成器创建一个DUT港口和添加了一个注释表明端口对应一个可调参数。你可以改变的价值Rcp
通过提供价值映射到芯片上的针Rcp
。
实体分配端口(std_logic clk:;重置:std_logic;在std_logic enb:;in_dividend: std_logic_vector(15报纸0);——sfix16_En14 in_divisor: std_logic_vector(15报纸0);——sfix16_En13 Rcp: std_logic_vector(23报纸0);——sfix24_En9可调端口out_rsvd: std_logic_vector(23报纸0)——sfix24_En9);结束分裂;
VariantMerge_For_Outport_out_out1 < = Op_out1_signed当Selected_Index_floor = to_signed(16 # 0001 #, 15)其他Recip_out1_signed当Selected_Index_floor = to_signed GroundForVM_out_out1其他(16 # 0002 #,15);
模型引用:使用较小的分区构建模型设计
指导ID
2.4.4
严重程度
推荐
描述
建模一个大型设计等级会增加代码生成时间。如果您指定代的报告,比如可跟踪性报告,代码生成时间可以进一步显著增加。为了避免这种性能问题,建议您设计分割成较小的分区。使用模型块统一模型,由较小的分区。它还支持增量代码生成。您可以生成父的HDL代码模型或被引用的模型。看到生成的HDL代码,hdlsrc
文件夹中,创建一个文件夹为父模型与一个单独的文件夹被引用的模型。
当生成HDL试验台,如果试验台由块连续采样时间进行操作,你可以把DUT参考模型。这一转换使DUT以固定步运行,离散样本。欲了解更多,请看转换DUT子系统模型参考Testbenches连续块。
例如,打开模型hdlcoder_divide_parentmodel.slx
。当你双击DUT子系统,你看到一个模型块引用模型hdlcoder_divide_referencedmodel
。
load_system (“hdlcoder_divide_parentmodel”)set_param (“hdlcoder_divide_parentmodel”,“SimulationCommand”,“更新”)open_system (“hdlcoder_divide_parentmodel / DUT”)
看到引用的模型中,双击模型块:
open_system (“hdlcoder_divide_parentmodel / DUT /模式”)
生成HDL代码,输入这个命令:
makehdl (“hdlcoder_divide_parentmodel / DUT”)
有关更多信息,请参见模型引用HDL代码生成。
块设置启用并触发子系统
指导ID
2.4.5
严重程度
强制性的
描述
一个触发子系统是一个子系统,接收控制信号通过一个吗触发块。的触发子系统执行一个循环每次触发事件发生时。当你触发子系统生成HDL代码:
不使用触发子系统DUT的块。把触发子系统在另一个子系统块,并使用子系统DUT。
您可以添加单位延迟的输出信号触发子系统外的,触发子系统块。单位延迟阻止HDL编码™插入额外的绕过HDL代码中的寄存器。
确保使用触发信号作为时钟设置时不会导致时间不匹配模拟testbench验证生成的代码。欲了解更多,请看使用触发子系统HDL代码生成。
当配置为其他偏好触发子系统块HDL代码生成,明白了HDL代码生成在触发子系统页面。
一个启用子系统是一个子系统,接收控制信号通过一个吗启用块。的启用子系统在每个仿真步骤执行的控制信号具有积极的价值。当你为一个生成HDL代码启用子系统:
不使用启用子系统DUT的块。把启用子系统在另一个子系统块,并使用子系统DUT。
你可以添加一个国家控制块在
同步
内模式启用子系统生成更高效和hardware-friendly HDL代码。的国家控制块在同步
模式可以防止高密度脂蛋白编码器插入额外的绕过HDL代码中的寄存器。的国家控制块转换启用子系统块一个启用同步子系统块。欲了解更多,请看同步子系统行为与国家控制块。如果你想要一个国家控制块在
经典
模式或不希望添加一个国家控制块,您可以添加单位延迟的输出信号启用子系统外的,启用子系统块,防止高密度脂蛋白编码器插入额外的绕过HDL代码中的寄存器。
当配置为其他偏好启用子系统块HDL代码生成,明白了HDL代码生成在启用子系统页面。