主要内容

HDL块属性:一般

概述

块实现参数使您能够控制为特定块实现生成的代码的细节。看到设置和查看HDL模型和块参数学习如何在GUI或命令行中选择块实现和参数。

属性名被指定为字符向量。属性值的数据类型特定于属性。本节描述每个块实现参数的语法,以及参数如何影响生成的代码。

库块的HDL块属性

库块的HDL块属性处理类似于掩码参数。在模型中实例化库块时,该库块的当前HDL块属性将复制到模型中该库块的实例。这些实例的HDL块属性与库块的HDL块属性不同步。也就是说,如果更改库块的HDL块属性,则更改不会传播到已添加到Simulink的库块实例金宝app®模型。如果希望库块的HDL块属性与其在模型中的实例同步,请创建子系统然后把这个方块放在那个里面子系统.驻留在库块中的块的HDL块属性与模型中的相应实例同步。

假设一个库包含子系统块与HDL架构设置为模块.当您在模型中实例化此块时,块实例使用模块作为HDL架构。的HDL结构子系统块在库中黑箱例如,已有的实例子系统块在您的模型中仍然使用模块作为HDL架构。的实例子系统块从你的模型中的库,新的块实例获得当前HDL块属性的副本,因此使用黑箱作为HDL架构。的HDL结构子系统块在库中与它的实例在模型中同步,创建一个包装子系统与HDL体系结构,你想在其中子系统

AdaptivePipelining

AdaptivePipelining子系统参数使您能够在模型中的子系统上设置自适应流水线。

自适应管道设置 描述
“继承”(默认)

使用父子系统的自适应管道设置。如果该子系统是最高级别的子系统,则使用模型的自适应管道设置。

“上”

为这个子系统插入自适应管道。

“关闭”

不要为这个子系统插入自适应管道,即使父子系统启用了自适应管道。

若要禁用模型中子系统的自适应管道,请设置自适应管道参数,AdaptivePipelining,“关闭”对于那个子系统。

要了解如何设置模型级自适应管道,请参见自适应流水线

为子系统设置自适应管道

从HDL块属性对话框中为子系统设置自适应管道:

  1. 右键单击子系统并选择HDL代码>HDL块属性

  2. AdaptivePipelining中,选择继承,或

若要从命令行为子系统设置自适应管道,请使用hdlset_param.例如,要关闭子系统的自适应管道,my_dut

hdlset_param (“my_dut”“AdaptivePipelining”“关闭”
另请参阅hdlset_param

BalanceDelays

BalanceDelays子系统参数用于设置模型中子系统的延迟均衡。

BalanceDelays设置 描述
“继承”(默认)

使用父子系统的延迟平衡设置。如果该子系统是最高级的子系统,则使用模型的延迟平衡设置。

“上” 平衡这个子系统的延迟。
“关闭” 不要平衡这个子系统的延迟,即使父子系统启用了延迟平衡。

要禁用模型中任何子系统的延迟平衡,必须设置模型级延迟平衡参数,BalanceDelays,“关闭”.当在模型上启用延迟均衡时,各个子系统上的延迟均衡设置将被忽略。

要了解如何设置模型级延迟平衡,请参见平衡延迟

为子系统设置时延均衡

使用HDL块属性对话框设置一个子系统的延迟平衡:

  1. 右键单击子系统。

  2. 选择HDL代码>HDL块属性

  3. BalanceDelays中,选择继承,或

要从命令行为子系统设置延迟平衡,请使用hdlset_param.例如,要关闭一个子系统的延迟平衡,my_dut

hdlset_param (“my_dut”“BalanceDelays”“关闭”
另请参阅hdlset_param

ClockRatePipelining

ClockRatePipelining子系统参数使您能够在模型中的子系统上设置时钟速率管道。

时钟速率管道设置 描述
“继承”(默认)

使用父子系统的时钟速率管道设置。如果这个子系统是最高级的子系统,则使用模型的时钟速率管道设置。

“上”

为这个子系统插入时钟速率管道。

“关闭”

不要为这个子系统插入时钟速率管道,即使父子系统启用了时钟速率管道。

要禁用模型中的子系统的时钟速率管道,请设置时钟速率管道参数,ClockRatePipelining,“关闭”对于那个子系统。

要了解如何设置模型级时钟速率管道,请参见时钟频率流水线

为子系统设置时钟速率管道

使用HDL块属性对话框为子系统设置时钟速率管道:

  1. 右键单击子系统。

  2. 选择HDL代码>HDL块属性

  3. ClockRatePipelining中,选择继承,或

要从命令行为子系统设置时钟速率管道,请使用hdlset_param.例如,要关闭子系统的时钟速率管道,my_dut

hdlset_param (“my_dut”“ClockRatePipelining”“关闭”
另请参阅hdlset_param

CodingStyle

当你使用多端口切换块,使用CodingStyle参数指定您是想使用if-else语句还是case语句生成HDL代码。默认情况下,HDL Coder™生成if-else语句。如果你有几个多端口切换块在您的模型中,您可以选择指定不同的CodingStyle对于每个块。

CodingStyle设置 描述
“ifelse_stmt”默认的 在Verilog代码中生成if-else语句,或在VHDL代码中生成when-else语句多端口切换块。
“case_stmt” 在Verilog代码中生成case语句或在VHDL代码中生成case-when语句多端口切换块。

为设置编码风格多端口切换

属性的编码风格多端口切换使用HDL块属性对话框:

  1. 右键单击多端口切换块。

  2. 选择HDL代码>HDL块属性

  3. CodingStyle中,选择ifelse_stmtcase_stmt

去看CodingStyle从命令行为子系统指定,使用hdlget_param.项指定的设置多端口切换块在子系统内,my_dut

hdlget_param (“my_dut /多端口切换”“CodingStyle”
Ans = 'case_stmt'
另请参阅hdlset_param

ConstMultiplierOptimization

ConstMultiplierOptimization实现参数允许您在生成的代码中指定使用标准有符号数字(CSD)或因式CSD优化来处理系数乘法器操作。

下表显示了ConstMultiplierOptimization参数值。

ConstMultiplierOptimization设置 描述
“没有”
默认的
默认情况下,HDL Coder不执行CSD或FCSD优化。为Gain块生成的代码保留乘数操作。
“CSD” 当您指定此选项时,生成的代码将减少模型使用的区域,同时使用标准有符号数字(CSD)技术保持或增加时钟速度。CSD将乘数运算替换为加减法运算。CSD通过用最少的非零数字表示二进制数来最小化常量乘法所需的加法运算次数。
“FCSD” 该选项使用因式CSD (FCSD)技术,该技术将乘数操作替换为对操作数的某些因式的移位和加/减操作。这些因素通常是质数,但也可以是接近2的幂的数字,这有利于减少面积。这个选项让您以降低时钟速度为代价,实现比CSD更大的面积缩减。
“汽车”

指定此选项时,HDL Coder将在CSD或FCSD优化之间进行选择。编码器根据所需的加器数量选择产生最有效的区域实现的优化。当你指定“汽车”,编码器不使用乘数,除非条件是这样的CSD或FCSD优化是不可能的(例如,如果设计使用浮点算术)。

ConstMultiplierOptimization参数可用于以下块:

  • 获得

  • Stateflow®图表

  • 真值表

  • MATLAB函数

  • MATLAB系统

ConstrainedOutputPipeline

使用ConstrainedOutputPipeline参数指定要放置在块输出处的非负数寄存器数。

HDL Coder在您的设计中移动现有的延迟,以尝试满足您的约束。不会添加新的寄存器。如果寄存器数量少于编码器满足约束所需的数量,编码器将报告期望输出寄存器数量与实际输出寄存器数量之间的差值。您可以使用输入或输出管道在设计中添加延迟。

分布式管道不会重新分发使用受限输出管道指定的寄存器。

如何指定约束输出管道

使用GUI为一个块指定约束输出流水线:

  1. 右键单击块并选择HDL代码>HDL块属性

  2. ConstrainedOutputPipeline,输入输出端口上需要的寄存器数。

要指定有约束的输出流水线,在命令行输入:

hdlset_param (path_to_block“ConstrainedOutputPipeline”number_of_output_registers)
例如,要在子系统的输出端口上约束6个寄存器,中高,在你的模型中,mymodel,输入:
hdlset_param (“mymodel /中高辊”“ConstrainedOutputPipeline”6)

另请参阅

DistributedPipelining

DistributedPipelining参数启用管道寄存器分布,这种速度优化使您能够通过减少关键路径来提高时钟速度。

命令的效果如下表所示DistributedPipelining而且OutputPipeline参数。

DistributedPipelining OutputPipeline, nStages 结果
“关闭”(默认) 未指定的(nStages默认为0) HDL编码器不插入管道寄存器。
nStages> 0 编码器插入nStages输出寄存器位于子系统的输出,MATLAB函数块,或状态流程图。
“上” 未指定的(nStages默认为0) 编码器不插入管道寄存器。
DistributedPipelining没有效果。
nStages> 0 编码器分发nStages子系统内部的寄存器,MATLAB函数块,或状态流图,基于关键路径分析。

为了进一步优化使用分布式流水线生成的代码,如果可能的话,在RTL合成期间执行重计时。

提示

如果插入管道寄存器,输出数据最初可能处于无效状态。为避免初始无效样本导致的测试台架错误,请禁用这些样本的输出检查。有关更多信息,请参见忽略输出数据检查(样本数量)

另请参阅

Dot下载188bet金宝搏ProductStrategy

如果你使用产品块用于设计中的矩阵乘法,请使用Dot下载188bet金宝搏ProductStrategy指定要如何实现矩阵乘法。

Dot下载188bet金宝搏ProductStrategy选项如下表所示。

Dot下载188bet金宝搏ProductStrategy价值 描述
完全平行的(默认)

将矩阵乘法运算扩展为乘法器和加法器。例如,如果您将两个2x2矩阵相乘,则实现将使用四个乘数和两个加法器来计算结果。

请注意

Dot下载188bet金宝搏ProductStrategy必须设置为完全平行的当你使用本机浮点数模式。

“完全平行标量化”

将矩阵乘法运算扩展为乘法器和加法器。例如,如果您将两个2x2矩阵相乘,则实现将使用8个乘数和4个加法器来计算结果。对于较小的矩阵,以及当您希望在乘法器和加法器上启用共享时,请使用此选项。

“连环Multiply-Accumulate”

使用串行建筑Multiply-Accumulate块来实现矩阵乘法。

在此体系结构中,时钟速率必须快于您指定的时钟速率平行体系结构。您可以在“代码生成”报告的“时钟摘要”信息中看到时钟速率。

“平行Multiply-Accumulate”

使用平行建筑Multiply-Accumulate块来实现矩阵乘法。

DSPStyle

DSPStyle使您能够生成包含设计中乘数映射的综合属性的代码。您可以选择是否将特定块的乘法器映射到dsp或硬件中的逻辑。

在Xilinx®目标时,生成的代码使用use_dsp属性。为阿尔特拉®目标时,生成的代码使用multstyle属性。

DSPStyle选项如下表所示。

DSPStyle价值 描述
“没有”(默认)

不要插入DSP映射合成属性。

“上”

插入合成属性,该属性指示合成工具映射到硬件中的dsp。

“关闭”

插入合成属性,该属性指示合成工具映射到硬件中的逻辑。

DSPStyle参数可用于以下块:

  • 获得

  • 产品

  • 元素乘积将架构设置为树

  • 子系统

  • 原子子系统

  • 不同的子系统

  • 启用子系统

  • 触发子系统

  • 模型将体系结构设置为ModelReference

层次扁平化行为

如果您为同样具有非默认值的子系统指定层次结构扁平化DSPStyle设置,HDL Coder传播DSPStyle设置到父子系统。

如果扁平子系统包含获得产品,或元素乘积块,编码器保持它们的非默认值DSPStyle设置,并替换默认DSPStyle使用扁平子系统进行设置DSPStyle设置。

生成代码中的综合属性

合成属性的生成代码依赖于:

  • 目标语言

  • DSPStyle价值

  • SynthesisTool价值

下表显示了生成代码中合成属性的示例。

DSPStyle价值 开发价值 SynthesisTool价值
Altera Quartus II “Xilinx ISE”
“Xilinx Vivado”
“没有” “Verilog”

Wire signed [32:0] m4_out1;

Wire signed [32:0] m4_out1;

硬件描述语言(VHDL)的

M4_out1:信号;

M4_out1:信号;

“上” “Verilog”

(* multistyle = "dsp" *) line signed [32:0] m4_out1;

(* use_dsp = "yes" *) line signed [32:0] m4_out1;

硬件描述语言(VHDL)的

属性多样式:字符串;

m4_out1的属性多风格:信号为“dsp”;

属性use_dsp:字符串;

m4_out1的use_dsp属性:信号为“yes”;

“关闭” “Verilog”

(* multistyle = "logic" *) line signed [32:0] m4_out1;

(* use_dsp = "no" *) line signed [32:0] m4_out1;

硬件描述语言(VHDL)的

属性多样式:字符串;

属性m4_out1的多风格:信号是“逻辑”;

属性use_dsp:字符串;

m4_out1的use_dsp属性:signal is no;

综合属性规范的要求

方法指定合成工具SynthesisTool财产。

如何指定一个合成属性

使用HDL块属性对话框指定一个合成属性:

  1. 右键单击块。

  2. 选择HDL代码>HDL块属性

  3. DSPStyle中,选择,或没有一个

若要从命令行指定综合属性,请使用hdlset_param.例如,假设你有一个模型,my_model,带有DUT子系统,my_dut,其中包含a。获得块,my_multiplier.将合成属性插入到映射my_multiplier对DSP输入:

hdlset_param (“my_model / my_dut / my_multiplier”“DSPStyle”“上”
另请参阅hdlset_param

综合属性规范的限制

  • 当您指定非默认值时DSPStyle块属性,则ConstMultiplierOptimization属性必须设置为“没有”

  • 乘数元件的输入不能使用数据类型。

  • 获得常数不能是2的幂。

FlattenHierarchy

FlattenHierarchy使您可以从设计生成的HDL代码中删除子系统层次结构。

FlattenHierarchy设置 描述
“继承”(默认) 使用父子系统的层次结构扁平化设置。如果这个子系统是最高级别的子系统,不要扁平化。
“上” 压平这个子系统。
“关闭” 不要扁平化这个子系统,即使父子系统已经扁平化。

要平抑等级,你还必须有MaskParameterAsGeneric全局属性设置为“关闭”.有关更多信息,请参见从屏蔽子系统生成参数化HDL代码

如何扁平化等级制度

使用HDL块属性对话框设置层次结构扁平化:

  • 应用程序选项卡上,选择高密度脂蛋白编码器.的HDL代码选项卡出现了。选择子系统然后点击HDL块属性.为FlattenHierarchy中,选择,或继承

  • 右键单击子系统并选择HDL代码>HDL块属性.为FlattenHierarchy中,选择,或继承

若要从命令行设置层次结构扁平化,请使用hdlset_param.例如,要打开子系统的层次结构扁平化,my_dut

hdlset_param (“my_dut”“FlattenHierarchy”“上”
另请参阅hdlset_param

层次扁平化的限制

一个子系统不能被平面化,如果该子系统是:

  • 一个同步子系统或者使用国家控制块在同步模式。

  • 模型参考实现。

  • 触发子系统:使用触发信号作为时钟启用。

  • 包含以下任何一个的屏蔽子系统:

    • 公共汽车。

    • 枚举数据类型。

    • 查找表块:一维查找表二维查找表coshdl优化直接查找表(n-D)Prelookup正弦HDL优化n-D查找表

    • MATLAB系统块。

    • Stateflow块:图表状态转换表顺序查看器

    • 具有传递或无操作实现的块。看到直通、无HDL和级联实现

请注意

该选项在代码生成之前删除子系统边界。它不一定生成具有完全扁平层次结构的HDL代码。

InputPipeline

InputPipeline允许您为选定的块指定带有输入流水线的实现。参数值指定生成代码中输入管道阶段的数量(管道深度)。

下面的代码为模型中的每个Sum块指定了两个阶段的输入管道深度:

sblocks = find_system(gcb, 'BlockType', 'Sum');for ii=1:length(sblocks),hdlset_param(sblocks{ii},'InputPipeline', 2), end;

请注意

InputPipeline设置对没有输入端口的块没有任何影响。

当为管道寄存器生成代码时,HDL Coder将一个后缀字符串附加到输入或输出管道寄存器的名称后。默认后缀字符串为_pipe.要自定义后缀字符串,请使用管道后缀选项中的全局设置/常规窗格中的HDL代码生成窗格中的“配置参数”对话框。属性中的字符向量传递所需的后缀makehdl财产PipelinePostfix.有关示例,请参见管道后缀

InstantiateFunctions

对于MATLAB函数块,您可以使用InstantiateFunctions参数来生成VHDL®实体或Verilog®模块对于每个函数。HDL编码器为每个生成代码实体模块在一个单独的文件中。

InstantiateFunctions的选项MATLAB函数块在下表中列出。

InstantiateFunctions设置 描述
“关闭”(默认)

为函数生成内联代码。

“上”

生成VHDL实体或Verilog模块,并保存每个函数模块实体在一个单独的文件中。

如何为函数生成可实例化代码

设置InstantiateFunctions参数使用HDL块属性对话框:

  1. 右键单击MATLAB函数块。

  2. 选择HDL代码>HDL块属性

  3. InstantiateFunctions中,选择

设置InstantiateFunctions参数,使用hdlset_param.类中的函数生成可实例化的代码MATLAB函数块,myMatlabFcn,在您的DUT子系统,myDUT,输入:

hdlset_param('my_DUT/my_MATLABFcnBlk', 'InstantiateFunctions', 'on')

为特定函数生成内联代码

如果希望为某些函数生成可实例化代码,而不希望为其他函数生成可实例化代码,请启用为函数生成可实例化代码的选项,并使用coder.inline.看到coder.inline获取详细信息。

函数可实例化代码生成的限制

该软件生成代码内联时:

  • 函数调用在条件代码或循环。

  • 任何函数都是用非常数来调用的结构体输入。

  • 该函数具有状态,例如持久变量,并被多次调用。

  • 在设计函数的任何地方都有一个枚举。

InstantiateStages

对于一个级联架构,您可以使用InstantiateStages参数来生成VHDL实体或Verilog模块对于每个计算阶段。HDL编码器为每个生成代码实体模块在一个单独的文件中。

InstantiateStages设置 描述
“关闭”(默认)

在单个VHDL中生成级联阶段实体或Verilog模块

“上”

生成VHDL实体或Verilog模块对于每个级联阶段,并保存每个阶段模块实体在一个单独的文件中。

LoopOptimization

LoopOptimization类生成的代码中的流化或展开循环MATLAB函数块。循环流优化区域;循环展开优化速度。

请注意

如果您指定MATLAB Datapath公司建筑MATLAB函数块,你只能展开循环。要流化循环,可以通过指定StreamingFactor.看到使用MATLAB数据路径架构跨MATLAB函数块边界的HDL优化

LoopOptimization设置 描述
“没有”(默认) 不要优化循环。
“展开” 展开循环。
“流” 流循环。

如何优化MATLAB函数Block For循环

要使用HDL块属性对话框选择循环优化:

  1. 右键单击MATLAB函数块。

  2. 选择HDL代码>HDL块属性

  3. LoopOptimization中,选择没有一个展开,或流媒体

若要从命令行选择循环优化,请使用hdlset_param.类的循环流MATLAB函数块,my_mlfn

hdlset_param (“my_mlfn”“LoopOptimization”“流”
另请参阅hdlset_param

限制MATLAB函数块循环优化

HDL编码器不能流循环如果:

  • 循环索引向下计数。循环索引必须在每次迭代中增加1。

  • 在另一个循环中,在同一层次结构级别上有2个或多个嵌套循环。

  • 任何特定的持久变量都在循环内部和外部更新。

HDL Coder可以流循环时,持久变量是:

  • 在循环内部更新,在循环外部读取。

  • 在循环内读取,在循环外更新。

LUTRegisterResetType

使用LUTRegisterResetType在FPGA上控制LUT合成为ROM结构的块参数。

LUTRegisterResetType价值 描述
默认的

LUT输出寄存器有默认的重置逻辑。生成HDL时,LUT将被合成为寄存器。

没有一个

LUT输出寄存器没有复位逻辑。当生成HDL时,LUT将被合成为ROM。

你可以指定LUTRegisterResetType对于以下区块:

  • 伽马校正

  • 查找表

NCO HDL优化Block忽略此参数。

MapPersistentVarsToRAM

MapPersistentVarsToRAM的持久数组,则可以使用基于ram的映射MATLAB函数块,而不是映射到寄存器。

MapPersistentVarsToRAM设置 映射的行为

持久数组映射到生成的HDL代码中的寄存器。

持久数组变量映射到RAM。有关限制,请参见RAM映射限制

RAM映射限制

当您启用RAM映射时,当以下所有条件都为真时,持久数组或用户定义的System对象™私有属性将映射到块RAM:

  • 每个读或写访问只针对单个元素。例如,子矩阵访问和数组拷贝是不允许的。

  • 地址计算逻辑不依赖于读取。例如,不允许使用从数组中读取的数据计算读或写地址。

  • 如果持久变量或用户定义的System对象私有属性具有循环依赖关系,则初始化为0。例如,如果你有两个持久变量A和B,如果A依赖于B, B依赖于A,你就有一个循环依赖关系。

  • 如果访问在条件语句中,则条件语句只使用简单的逻辑表达式(& &||)或关系运算符。例如,在下面的代码中,r1不映射到RAM:

    If (mod(i,2) > 0) a = r1(u);Else r1(i) = u;结束

    重写复杂的条件,例如调用函数的条件,方法是将它们分配给临时变量,并在条件语句中使用临时变量。例如,映射r1到RAM,重写之前的代码如下所示:

    Temp = mod(i,2);If (temp > 0) a = r1(u);Else r1(i) = u;结束

  • 持久数组或用户定义的System对象私有属性值取决于外部输入。

    例如,在下面的代码中,bigarray不映射到RAM,因为它不依赖于u

    函数z = foo(u) persistent CNT bigarray if isempty(CNT) CNT = fi(0,1,16,10,hdlfimath);Bigarray = uint8(零(1024,1));z = u + cnt;Idx = uint8(cnt);Temp = bigarray(idx+1);Cnt (:) = Cnt + fi(1,1,16,0,hdlfimath) + temp;Bigarray (idx+1) = idx;

  • RAMSize大于或等于RAMMappingThreshold价值。RAMSize是产品NumElements * WordLength *复杂度

    • NumElements数组中的元素数。

    • 表示数组数据类型的位数。

    • 复杂性对于具有复杂基类型的数组,为2;否则1。

如果上述条件中的任何一个为假,则持久化数组或用户定义的System对象私有属性映射到HDL代码中的寄存器。

RAMMappingThreshold

的默认值RAMMappingThreshold是256。若要更改阈值,请使用hdlset_param.属性的映射阈值sfir_fixed模型到128位:

hdlset_param (“sfir_fixed”“RAMMappingThreshold”, 128);

您也可以在“配置参数”对话框中修改RAM映射阈值。有关更多信息,请参见RAM映射阈值(位)部分RAM映射参数

例子

实例中如何将持久数组变量映射到RAMMATLAB函数块,看RAM映射与MATLAB函数块

MapToRAM

使用MapToRAM将查找表(LUT)映射到RAM。

模拟RAM延迟启用。,MapToRAM属性已禁用coshdl优化而且正弦HDL优化块。

MapToRAM设置 映射的行为
“继承”(默认)

使用父子系统的自适应管道设置。如果该子系统是最高级别的子系统,则使用模型的自适应管道设置。

lut (block lookup table)被映射到FPGA上的逻辑片。

块查找表(lut)被映射到RAM。

OutputPipeline

OutputPipeline允许您为选定的块指定带有输出流水线的实现。参数值指定生成代码中输出管道阶段的数量(管道深度)。

下面的代码为模型中的每个Sum块指定了两个阶段的输出管道深度:

sblocks = find_system(gcb, 'BlockType', 'Sum');for ii=1:length(sblocks),hdlset_param(sblocks{ii},'OutputPipeline', 2), end;

请注意

OutputPipeline设置对没有输出端口的块没有任何影响。

当为管道寄存器生成代码时,HDL Coder将一个后缀字符串附加到输入或输出管道寄存器的名称后。默认后缀字符串为_pipe.要自定义后缀字符串,请使用管道后缀选项中的“配置参数”对话框,单击HDL代码生成>全局设置>通用选项卡。或者,您可以使用PipelinePostfix财产与makehdl.有关示例,请参见管道后缀

另请参阅分布式管道插入MATLAB函数块

RAMDirective

使用RAMDirective,可以指定是否要将Simulink模型中的随机存取存储器(RAM)块映射到FPGA RAM存储器块。金宝app您可以映射大内存块,例如来自Xilinx家族的M144k来自Quartus®家庭。根据合成工具为您的设计中的RAM块指定这些RAMDirective值。

合成工具 RAM样式属性 RAMDirective值
第四的 ramstyle

logic| M9K| M10K| M20K| M144K| MLAB

赛灵思公司 ram_style

块|分布式|寄存器| ultra

Microsemi® syn_ramstyle

Block_ram |注册| lsram| uram

当您为此设置指定一个值时,HDL Coder将生成一个ramstyle属性在HDL代码。此属性指定在设计中推断RAM块时希望合成工具使用的RAM内存单元类型。

当您没有为此设置指定任何值时,HDL Coder不会生成ramstyle属性在HDL代码。综合工具确定用于映射模型中的RAM块的推断RAM类型。

为RAM Blocks设置RAMDirective

高密度脂蛋白公羊图书馆,除了双速率双端口RAM时,可以指定RAMDirective属性为所有其他RAM块。

设置RAMDirective在HDL块属性对话框中的RAM块:

  1. 右键单击RAM块。

  2. 选择HDL代码>HDL块属性

  3. RAMDirective属性时,指定表中列出的值。

您还可以设置RAMDirective通过使用hdlset_param函数。

hdlset_param(, ' RAMDirective ', );

在MATLAB中指定这些属性®HDL工作流程,使用RAMDirective参数值对高密度脂蛋白。内存实例化。使用以下命令设置此属性:

hRam = hdl。内存(‘RAMType’, ‘Single Port RAM’, ‘RAMDirective’, ‘ultra’);

例如,生成用于将模型中的RAM块映射到的HDL属性块内存.一个块内存是FPGA上的专用内存单元。块ram的大小可以是4 kb8 kb16 kb,32 kb

将你的RAM块映射到块内存

  • 指定合成工具。必须以包含块内存资源。如果目标设备不包含块RAM,合成工具将忽略此属性,并可能将RAM推断为分布式RAM或查找表(LUT)片。

  • 输入RAMDirective值为在HDL块属性中为金宝app您的Simulink RAM块。

  • 为您的模型生成HDL代码。

此生成的VHDL代码显示ram_style属性设置为

属性ram_style:字符串;ram的ram_style属性:信号为“block”;

此生成的Verilog代码显示ram_style属性设置为

(* ram_style = "block" *)

依赖

当使用RAMDirective属性时,请确保为您的设计选择合成工具。

ResetType

使用ResetType块参数抑制重置逻辑的生成。

ResetType价值 描述
默认的

生成重置逻辑。

没有一个

不要生成重置逻辑。

重置不会应用于生成的寄存器。因此,在初始阶段,当寄存器没有完全加载时,Simulink和金宝app生成的代码之间会出现一些样本之间的不匹配。

为了避免在初始阶段的试验台错误,确定完全加载寄存器所需的样本数量。然后,设置忽略输出数据检查(样本数量)相应的选项。另请参阅忽略输出数据检查(样本数量)试验台刺激和输出参数

你可以指定ResetType对于以下区块:

  • 图表

  • 卷积Deinterleaver

  • 卷积的分界

  • 延迟

  • 延迟(DSP系统工具箱™)

  • 通用多路分解器

  • 通用多路交织器

  • MATLAB函数

  • MATLAB系统

  • 内存

  • 利用延迟

  • 真值表

  • 启用单位延迟

  • 单位延迟

在MATLAB函数块中重置优化逻辑

当你设置ResetType没有一个对于一个MATLAB函数块,HDL Coder不生成重置逻辑的持久变量在MATLAB代码。

但是,如果您为块指定了其他优化,编码器可能会插入使用重置逻辑的寄存器。编码器不会抑制这些寄存器的重置逻辑生成。因此,如果你设置ResetType没有一个与其他块优化一起,您生成的代码可能在顶层有一个重置端口。

如何抑制复位逻辑生成

使用UI抑制一个块的重置逻辑生成:

  1. 右键单击块并选择HDL代码>HDL块属性

  2. ResetType中,选择没有一个

要抑制重置逻辑的生成,在命令行中输入:

hdlset_param (path_to_block“ResetType”,“没有一个”)

例如,为了抑制单元延迟块的重置逻辑生成,UnitDelay1,在一个子系统内,mySubsys,在命令行输入:

hdlset_param(‘mySubsys / UnitDelay1’、‘ResetType’,‘没有’);

指定同步或异步复位

要指定同步或异步重置,请使用ResetType模型级参数。详细信息请参见重置类型重置设置和参数

SerialPartition

在Min/Max块上使用此参数为串行级联体系结构指定分区。默认设置使用最小分区数。

生成这个
架构……
设置SerialPartition为…
具有显式指定分区的级联串行 [p1 p2 p3…pN]的向量N整数,N是串行分区的数目。向量的每个元素都指定了相应分区的长度。向量元素的和必须等于输入数据向量的长度。vector元素的值必须按降序排列,但最后两个元素可以相等。例如,对于8个元素的输入,划分3 [5][4 2 2]是合法的,但是分区呢[2 2 2 2][3 2 3]在代码生成时引发错误。
具有自动优化分区的级联串行 0

此属性也用于串行过滤器体系结构。如何配置过滤块,请参见SerialPartition

SharingFactor

使用SharingFactor指定要映射到单个共享资源的功能等效资源的数量。默认值为0。看到资源共享

SoftReset

使用SoftReset块参数指定是生成硬件友好的同步复位逻辑,还是生成与Simulink仿真行为匹配的本地复位逻辑。金宝app属性可用于单位延迟可重置块或单位延迟启用可重置块。

SoftReset价值 描述
(默认)

生成匹配Simulink仿真行为的本地重置逻辑。金宝app

为块生成同步重置逻辑。此选项生成的代码更有效地用于合成,但与Simulink模拟行为不匹配。金宝app

SoftReset设置为“关闭”,则为a生成以下代码单位延迟可重置布洛克:

always @(posedge clk或posedge reset) begin: Unit_Delay_Resettable_process if (reset == 1'b1) begin Unit_Delay_Resettable_zero_delay <= 1'b1;Unit_Delay_Resettable_switch_delay <= 2'b00;if (enb) begin Unit_Delay_Resettable_zero_delay <= 1'b0;if (UDR_reset == 1'b1) begin Unit_Delay_Resettable_switch_delay <= 2'b00;Unit_Delay_Resettable_switch_delay <= In1;Unit_Delay_Resettable_1 = (UDR_reset || Unit_Delay_Resettable_zero_delay ?)1'b1: 1'b0);assign out0 = (Unit_Delay_Resettable_1 == 1'b1 ?2'b00: Unit_Delay_Resettable_switch_delay);

SoftReset设置为“上”,则为a生成以下代码单位延迟可重置布洛克:

always @(posedge clk或posedge reset) begin: Unit_Delay_Resettable_process if (reset == 1'b1) begin Unit_Delay_Resettable_reg <= 2'b00;Unit_Delay_Resettable_reg <= 2'b00;Unit_Delay_Resettable_reg <= In1;分配out0 = Unit_Delay_Resettable_reg;

StreamingFactor

通过对串行数据路径进行时间复用和共享硬件资源,将并行数据路径或向量转换为串行标量数据路径的数量。默认值是0,它实现了完全并行的数据路径。另请参阅流媒体

UsePipelines

您可以使用此模式产品而且互惠模式。当您将块的HDL体系结构设置为时,此属性将可用ShiftAdd.该体系结构使用非还原除法算法,执行多次移位和添加操作来计算商。的ShiftAdd与Newton-Raphson近似方法相比,结构提供了更高的精度。

当你使用ShiftAdd架构,您可以使用UsePipelines参数来指定是使用非恢复分区的管道实现还是非管道实现。

UsePipelines设置 映射的行为

(默认)

使用非恢复移位和添加操作的流水线实现而且互惠块。此设置为您的设计增加了更多延迟,但在目标FPGA设备上实现了更高的最大时钟频率。插入的管道数量与算法计算商或倒数所需的迭代次数相匹配。

使用不可恢复的移位和添加操作的非管道实现而且互惠块。此设置不会对设计增加延迟。由于除法和倒数都是资源密集型操作,为实现更高的时钟频率,在目标FPGA上设置UsePipelines

设置分隔块和倒数块的UsePipelines

设置UsePipelines为一个子系统从HDL块属性对话框:

  1. 右键单击子系统。

  2. 选择HDL代码>HDL块属性

  3. UsePipelines中,选择

设置UsePipelines对于命令行中的块,使用hdlset_param.例如,关闭UsePipelines对于一个块在子系统内,my_dut

hdlset_param (“my_dut /鸿沟”“UsePipelines”“关闭”);
另请参阅hdlset_param

UseRAM

UseRAM实现参数允许对块使用基于ram的映射,而不是映射到移位寄存器。

UseRAM设置 映射的行为

延迟映射到生成的HDL代码中的移位寄存器,只有一种情况例外。详细信息请参见流和分布式管道的效果

当满足以下条件时,延迟映射到双端口RAM块:

  • 延迟的初始值为零。

  • 延迟块没有外部复位或启用端口。

  • 延迟的长度> 4。

  • Delay具有以下一组数值和数据类型属性:

    • (a)具有非浮点数据类型的实标量(如有符号整数、无符号整数、定点或布尔值)

    • (b)使用非浮点数据类型的实部和虚部的复数标量

    • (c)向量,其中每个元素为(a)或(b)

  • RAMSize大于或等于RAMMappingThreshold价值。RAMSize是产品DelayLength * WordLength * ComplexLength

    • DelayLength是延迟块指定的延迟数。

    • 表示延迟数据类型的比特数。

    • ComplexLength为2表示复信号;否则1。

如果任何条件为假,则延迟映射到HDL代码中的移位寄存器,除非它与其他延迟合并以映射到单个RAM。有关更多信息,请参见将多个延迟映射到RAM

方法可以使用此实现参数延迟块和金宝app延迟(DSP系统工具箱)块在DSP系统工具箱信号操作库。

将多个延迟映射到RAM

HDL Coder还可以将几个相同长度的延迟合并为一个延迟,然后将合并的延迟映射到单个RAM。该优化带来的好处如下:

  • 增加单个RAM的占用率

  • 共享地址生成逻辑,最大限度地减少相同HDL代码的重复

  • 映射到RAM的延迟个人延迟不满足阈值

以下规则控制多个延迟是否可以合并为一个延迟:

  • 延误必须:

    • 处于子系统层次结构的同一级别。

    • 使用相同的编译样例时间。

    • UseRAM设置为,或通过流媒体或资源共享生成。

    • 有相同的ResetType设置,这是不可能的没有一个

  • 合并后的延迟总字长不能超过128位。

  • RAMSize的合并延迟大于或等于RAMMappingThreshold价值。RAMSize是产品DelayLength * WordLength * VectorLength * ComplexLength

    • DelayLength是延迟的总数。

    • 表示合并延迟的数据类型的比特数。

    • VectorLength是向量延迟中的元素数。VectorLength为1表示标量延迟。

    • ComplexLength2表示复杂延迟;否则1。

多重延迟映射到块RAM的例子

RAMMappingThreshold下面的模型是100位。

Delay和Delay1块在生成的HDL代码中通过满足以下条件合并并映射到双端口RAM:

  • 两个延迟块:

    • 都在同一层次上。

    • 使用相同的编译样例时间。

    • UseRAM设置为在HDL块属性对话框中。

    • 有相同的ResetType设置默认的

  • 合并延迟的总字长为28位,低于128位的限制。

  • RAMSize其中合并后的延迟为112位(4个延迟* 28位字长),大于100位的映射阈值。

当您为这个模型生成HDL代码时,HDL Coder会生成额外的文件来指定RAM映射。编码器将这些文件存储在与其他生成的HDL文件相同的源位置,例如hdlsrc文件夹中。

流和分布式管道的效果

UseRAM对于延迟块,HDL Coder默认将延迟映射到移位寄存器。但是,编码器更改UseRAM设置为并尝试在以下条件下将延迟映射到RAM:

  • 流媒体是启用的子系统延迟块。

  • 分布式流水线是禁用的子系统延迟块。

假设分布式流水线是启用的子系统延迟块。

  • UseRAM,延迟Block参与重计时。

  • UseRAM,延迟Block不参与重计时。HDL Coder不会分解为RAM映射标记的延迟。

    考虑一个有两个的子系统延迟三块,常数积木,三个产品块:

    UseRAM对于右边的Delay块,该延迟不参与重计时。

下面的摘要描述了HDL Coder是否尝试将延迟映射到RAM而不是移位寄存器。

UseRAM设置延迟块 为具有延迟块的子系统启用优化
仅分布式管道 只流 分布式管道和流
是的 是的 是的
没有 是的,因为映射到RAM而不是移位寄存器可以提供面积有效的设计。 没有

VariablesToPipeline

警告

VariablesToPipeline不建议使用。使用coder.hdl.pipeline代替。

VariablesToPipeline参数使您能够在一个或多个MATLAB变量的输出处插入管道寄存器。将变量列表指定为字符向量,变量之间用空格分隔。

另请参阅管道MATLAB表达式