块实现参数使您能够控制为特定块实现生成的代码的细节。看到设置和查看HDL模型和块参数学习如何在GUI或命令行中选择块实现和参数。
属性名指定为字符向量。属性值的数据类型特定于属性。本节描述每个块实现参数的语法以及参数如何影响生成的代码。
库块的HDL块属性处理类似于掩码参数。当您在模型中实例化库块时,该库块的当前HDL块属性将复制到模型中该库块的实例。这些实例的HDL块属性与库块的HDL块属性不同步。也就是说,如果您更改了库块的HDL块属性,则更改不会传播到已经添加到Simulink中的库块实例万博1manbetx®模型。如果您希望库块的HDL块属性与模型中的实例同步,请创建一个子系统然后把这个方块放在那个里面子系统.驻留在库块内部的块的HDL块属性与模型中相应的实例同步。
假设一个库包含一个子系统将HDL架构设置为模块
.当您在模型中实例化此块时,块实例使用模块
作为HDL架构。如果你改变了HDL的架构子系统块在库中黑箱
,已有的例子子系统块在你的模型中仍然使用模块
作为HDL架构。的实例子系统块,新的块实例获得当前HDL块属性的副本,因此使用黑箱
作为HDL架构。如果你想要HDL的架构子系统块与模型中的实例同步,创建一个包装器子系统,其中包含您想要的HDL体系结构子系统.
的AdaptivePipelining
子系统参数使您能够在模型中的子系统上设置自适应流水线。
自适应管道设置 | 描述 |
---|---|
“继承” (默认) |
使用父子系统的自适应流水线设置。如果这个子系统是最高级别的子系统,则使用模型的自适应流水线设置。 |
“上” |
为这个子系统插入自适应管道。 |
“关闭” |
不要为这个子系统插入自适应管道,即使父子系统启用了自适应管道。 |
要禁用模型中子系统的自适应管道,请设置自适应管道参数,AdaptivePipelining
,“关闭”
对于那个子系统。
要了解如何设置模型级别的自适应流水,请参见自适应流水线.
在HDL块属性对话框中为一个子系统设置自适应流水线:
右键单击子系统并选择HDL代码>HDL块属性.
为AdaptivePipelining中,选择继承,在,或从.
要从命令行为子系统设置自适应流水线,请使用hdlset_param
.例如,要关闭子系统的自适应流水线,my_dut
:
hdlset_param (“my_dut”,“AdaptivePipelining”,“关闭”)
hdlset_param
.
的BalanceDelays
子系统参数使您能够在模型中的子系统上设置延迟平衡。
BalanceDelays设置 | 描述 |
---|---|
“继承” (默认) |
使用父子系统的延迟均衡设置。如果该子系统是最高级别的子系统,则使用模型的延迟平衡设置。 |
“上” |
该子系统的平衡延迟。 |
“关闭” |
不要为这个子系统平衡延迟,即使父子系统启用了延迟平衡。 |
要禁用模型中任何子系统的延迟平衡,您必须设置模型级延迟平衡参数,BalanceDelays
,“关闭”
.当在模型上启用延迟平衡时,在各个子系统上的延迟平衡设置将被忽略。
要了解如何设置模型级延迟平衡,请参见平衡延迟.
使用HDL块属性对话框为子系统设置延迟平衡:
右键单击子系统。
选择HDL代码>HDL块属性.
为BalanceDelays中,选择继承,在,或从.
要从命令行为子系统设置延迟平衡,可以使用hdlset_param
.例如,要关闭一个子系统的延迟平衡,my_dut
:
hdlset_param (“my_dut”,“BalanceDelays”,“关闭”)
hdlset_param
.
的ClockRatePipelining
子系统参数使您能够在模型中的子系统上设置时钟速率流水线。
时钟速率管道设置 | 描述 |
---|---|
“继承” (默认) |
使用父子系统的时钟速率流水线设置。如果这个子系统是最高级别的子系统,则使用模型的时钟速率管道设置。 |
“上” |
为这个子系统插入时钟速率管道。 |
“关闭” |
不要为这个子系统插入时钟速率管道,即使父子系统启用了时钟速率管道。 |
要禁用模型中子系统的时钟速率管道,请设置时钟速率管道参数,ClockRatePipelining
,“关闭”
对于那个子系统。
要了解如何设置模型级时钟速率流水线,请参见时钟频率流水线.
使用HDL块属性对话框为子系统设置时钟速率管道:
右键单击子系统。
选择HDL代码>HDL块属性.
为ClockRatePipelining中,选择继承,在,或从.
要从命令行为子系统设置时钟速率管道,请使用hdlset_param
.例如,要关闭子系统的时钟速率流水线,my_dut
:
hdlset_param (“my_dut”,“ClockRatePipelining”,“关闭”)
hdlset_param
.
当你使用多端口切换块,使用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块属性对话框:
右键单击多端口切换块。
选择HDL代码>HDL块属性.
为CodingStyle中,选择ifelse_stmt
或case_stmt
.
要看CodingStyle
从命令行为子系统指定的usehdlget_param
.例如,要查看指定的设置多端口切换块内部,my_dut
:
hdlget_param (“my_dut /多端口切换”,“CodingStyle”)
Ans = 'case_stmt'
hdlset_param
.
的ConstMultiplierOptimization
实现参数允许您指定使用规范符号数字(CSD)或分解CSD优化来处理生成代码中的系数乘法器操作。
下表显示了ConstMultiplierOptimization
参数值。
ConstMultiplierOptimization设置 | 描述 |
---|---|
“没有” (默认的) |
默认情况下,HDL Coder不执行CSD或FCSD优化。为Gain块生成的代码保留乘数操作。 |
“CSD” |
当您指定此选项时,生成的代码将减少模型使用的区域,同时使用规范有符号数字(CSD)技术保持或增加时钟速度。CSD用加减运算代替乘数运算。CSD通过用最少的非零位数表示二进制数,最大限度地减少常量乘法所需的加法操作的数量。 |
“FCSD” |
该选项使用因式CSD (FCSD)技术,该技术将乘数操作替换为对操作数的某些因式进行移位和加减操作。这些因子通常是素数,但也可能是接近2的幂的数字,这有利于面积的缩小。此选项允许您实现比CSD更大的面积减少,但代价是降低时钟速度。 |
“汽车” |
当指定此选项时,HDL Coder将在CSD或FCSD优化之间进行选择。编码器根据所需的加器数量选择产生最有效的区域实现的优化。当你指定 |
的ConstMultiplierOptimization
参数可用于以下块:
获得
Stateflow®图表
真值表
MATLAB函数
MATLAB系统
使用ConstrainedOutputPipeline
参数指定要放置在块输出处的非负数寄存器。
HDL Coder在您的设计中移动现有的延迟,以尝试满足您的约束。没有添加新的寄存器。如果寄存器的数量少于编码器满足约束所需的数量,编码器将报告期望输出寄存器数量与实际输出寄存器数量之间的差异。您可以使用输入或输出流水在设计中添加延迟。
分布式流水不会重新分发使用受限输出流水指定的寄存器。
使用GUI为一个块指定受约束的输出流水线:
右键单击该块并选择HDL代码>HDL块属性.
为ConstrainedOutputPipeline,在输出端口输入所需的寄存器数量。
要指定受约束的输出流水线,在命令行输入:
hdlset_param (path_to_block“ConstrainedOutputPipeline”number_of_output_registers)
中高
,在你的模型中,mymodel
,输入:hdlset_param (“mymodel /中高辊”,“ConstrainedOutputPipeline”6)
的DistributedPipelining
参数启用管道寄存器分布,这是一种速度优化,使您能够通过减少关键路径来提高时钟速度。
下表显示了DistributedPipelining
而且OutputPipeline
参数。
DistributedPipelining | OutputPipeline, nStages | 结果 |
---|---|---|
“关闭” (默认) |
未指定的(nStages 默认为0) |
HDL Coder不插入管道寄存器。 |
nStages > 0 |
编码器插入nStages 输出寄存器位于子系统的输出端,MATLAB函数块或状态流图。 |
|
“上” |
未指定的(nStages 默认为0) |
编码器不插入管道寄存器。DistributedPipelining 没有效果。 |
nStages > 0 |
编码器分发nStages 寄存器在子系统中,MATLAB函数块或状态流图,基于关键路径分析。 |
若要进一步优化由分布式流水线生成的代码,请在RTL合成期间执行重计时(如果可能的话)。
提示
如果插入管道寄存器,输出数据最初可能处于无效状态。为了避免初始无效样本导致的测试台架错误,禁用这些样本的输出检查。有关更多信息,请参见忽略输出数据检查(样本数量).
如果您使用产品块用于设计中的矩阵乘法,请使用Dots manbetx 845ProductStrategy
来指定如何实现矩阵乘法。
的Dots manbetx 845ProductStrategy
选项列在下表中。
Dots manbetx 845ProductStrategy价值 | 描述 |
---|---|
完全平行的 (默认) |
将矩阵乘法运算扩展为乘法器和加法器。例如,如果将两个2x2矩阵相乘,则实现使用四个乘法器和两个加法器来计算结果。 请注意 的Dots manbetx 845ProductStrategy必须设置为 |
"完全平行标量化" |
将矩阵乘法运算扩展为乘法器和加法器。例如,如果将两个2x2矩阵相乘,则实现使用8个乘法器和4个加法器来计算结果。对于较小的矩阵,当您希望同时启用乘法器和加法器上的共享时,请使用此选项。 |
“连环Multiply-Accumulate” |
使用串行的架构Multiply-Accumulate块来实现矩阵乘法。 在此体系结构中,时钟速率必须比指定的时钟速率快平行体系结构。您可以在代码生成报告的时钟摘要信息中看到时钟速率。 |
“平行Multiply-Accumulate” |
使用平行的架构Multiply-Accumulate块来实现矩阵乘法。 |
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” |
|
|
硬件描述语言(VHDL)的 |
|
|
|
“上” |
“Verilog” |
|
|
硬件描述语言(VHDL)的 |
|
|
|
“关闭” |
“Verilog” |
|
|
硬件描述语言(VHDL)的 |
|
|
方法指定合成工具SynthesisTool
财产。
使用HDL块属性对话框指定一个合成属性:
右键单击该块。
选择HDL代码>HDL块属性.
为DSPStyle中,选择在,从,或没有一个.
要从命令行指定合成属性,请使用hdlset_param
.例如,假设你有一个模型,my_model
,有一个DUT子系统,my_dut
,其中包含。获得块,my_multiplier
.向映射插入合成属性my_multiplier
对于一个DSP,输入:
hdlset_param (“my_model / my_dut / my_multiplier”,“DSPStyle”,“上”)
hdlset_param
.
当指定非默认值时DSPStyle
块属性,则ConstMultiplierOptimization
属性必须设置为“没有”
.
乘数元件的输入不能使用双
数据类型。
获得常数不能是2的幂。
FlattenHierarchy
使您能够从设计生成的HDL代码中删除子系统层次结构。
FlattenHierarchy设置 | 描述 |
---|---|
“继承” (默认) |
使用父子系统的层次结构扁平化设置。如果这个子系统是最高级别的子系统,不要压平。 |
“上” |
压平这个子系统。 |
“关闭” |
不要压平这个子系统,即使父子系统被压平了。 |
要平复等级制度,你还必须有MaskParameterAsGeneric
全球物业设置为“关闭”
.有关更多信息,请参见从掩码子系统生成参数化HDL代码.
使用HDL块属性对话框设置层次结构扁平化:
在应用程序选项卡上,选择高密度脂蛋白编码器.的HDL代码选项卡出现了。选择子系统然后点击HDL块属性.为FlattenHierarchy中,选择在,从,或继承.
右键单击子系统并选择HDL代码>HDL块属性.为FlattenHierarchy中,选择在,从,或继承.
要从命令行设置层次结构扁平化,请使用hdlset_param
.例如,要打开子系统的层次扁平化,my_dut
:
hdlset_param (“my_dut”,“FlattenHierarchy”,“上”)
hdlset_param
.
如果子系统是:
一个同步子系统或使用国家控制块在同步
模式。
一个模型参考实现。
当触发子系统时使用触发信号作为时钟启用。
一个被屏蔽的子系统,它包含以下任何一个:
公共汽车。
枚举数据类型。
查找表块:一维查找表,二维查找表,cos HDL优化,直接查找表(n-D),Prelookup,正弦HDL优化,n-D查找表.
MATLAB系统块。
Stateflow块:图表,状态转换表,顺序查看器.
块的传递或无操作实现。看到直通、无HDL和级联实现.
请注意
该选项在生成代码之前删除子系统边界。它不一定生成具有完全平面层次结构的HDL代码。
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
.示例请参见管道后缀.
对于MATLAB函数块,您可以使用InstantiateFunctions参数来生成VHDL®实体
或Verilog®模块
对于每个函数。HDL Coder为每一个生成代码实体
或模块
在一个单独的文件中。
的InstantiateFunctions的选项MATLAB函数块在下表中列出。
InstantiateFunctions设置 | 描述 |
---|---|
“关闭” (默认) |
内联生成函数代码。 |
“上” |
生成VHDL |
设置InstantiateFunctions参数使用HDL块属性对话框:
右键单击MATLAB函数块。
选择HDL代码>HDL块属性.
为InstantiateFunctions中,选择在.
设置InstantiateFunctions参数,使用hdlset_param
.例如,为类中的函数生成可实例化代码MATLAB函数块,myMatlabFcn
,在你的DUT子系统中,myDUT
,输入:
hdlset_param('my_DUT/my_MATLABFcnBlk', 'InstantiateFunctions', 'on')
如果希望为某些函数生成可实例化代码,而不为其他函数生成可实例化代码,请启用为函数生成可实例化代码的选项,并使用coder.inline
.看到coder.inline
获取详细信息。
该软件生成代码内联时:
函数调用在条件代码或为
循环。
任何函数都用非常数来调用结构体
输入。
函数具有状态,如持久变量,并被多次调用。
在设计函数的任何地方都有枚举。
对于一个级联
架构,您可以使用InstantiateStages参数来生成VHDL实体
或Verilog模块
对于每个计算阶段。HDL Coder为每一个生成代码实体
或模块
在一个单独的文件中。
InstantiateStages设置 | 描述 |
---|---|
“关闭” (默认) |
在单个VHDL中生成级联阶段 |
“上” |
生成VHDL |
LoopOptimization
对象生成的代码中的循环流或展开MATLAB函数块。循环流优化面积;循环展开优化速度。
请注意
如果指定MATLAB Datapath公司
的架构MATLAB函数块,你只能展开循环。要流循环,可以通过指定流优化StreamingFactor.看到利用MATLAB数据路径体系结构跨MATLAB函数块边界的HDL优化.
LoopOptimization设置 | 描述 |
---|---|
“没有” (默认) |
不要优化循环。 |
“展开” |
展开循环。 |
“流” |
流循环。 |
使用HDL块属性对话框选择循环优化:
右键单击MATLAB函数块。
选择HDL代码>HDL块属性.
为LoopOptimization中,选择没有一个
,展开
,或流媒体
.
若要从命令行选择循环优化,请使用hdlset_param
.例如,打开循环流MATLAB函数块,my_mlfn
:
hdlset_param (“my_mlfn”,“LoopOptimization”,“流”)
hdlset_param
.
如果出现以下情况,HDL Coder不能流化循环:
循环索引开始倒数。循环索引必须在每次迭代中增加1。
在另一个循环中,同一层次结构级别上有2个或更多的嵌套循环。
任何特定的持久变量都在循环内部和外部更新。
HDL Coder可以在持久变量为:
在循环内部更新,并在循环外部读取。
在循环内读取并在循环外更新。
使用LUTRegisterResetType
块参数来控制在FPGA上将LUT合成为ROM结构。
LUTRegisterResetType价值 | 描述 |
---|---|
默认的 |
LUT输出寄存器具有默认的重置逻辑。生成HDL时,LUT将被合成为寄存器。 |
没有一个 |
LUT输出寄存器没有复位逻辑。当您生成HDL时,LUT将被合成为ROM。 |
你可以指定LUTRegisterResetType
对于以下区块:
伽马校正
查找表
的NCO HDL优化Block忽略此参数。
与MapPersistentVarsToRAM
实现参数时,可以为的持久数组使用基于ram的映射MATLAB函数块,而不是映射到寄存器。
MapPersistentVarsToRAM设置 | 映射的行为 |
---|---|
|
持久数组映射到生成的HDL代码中的寄存器。 |
|
持久数组变量映射到RAM。有关限制,请参见RAM映射限制. |
当您启用RAM映射时,当以下所有条件都为真时,一个持久数组或用户定义的系统对象™私有属性映射到块RAM:
每个读或写访问只针对单个元素。例如,子矩阵访问和数组副本是不允许的。
地址计算逻辑不依赖于读取。例如,不允许使用从数组读取的数据计算读或写地址。
如果持久变量或用户定义的系统对象私有属性具有循环依赖,则初始化为0。例如,如果您有两个持久变量A和B,那么如果A依赖于B, B依赖于A,那么就有一个循环依赖关系。
如果访问在条件语句中,条件语句只使用简单的逻辑表达式(& &
,||
,~
)或关系操作符。例如,在下面的代码中,r1
不映射到RAM:
If (mod(i,2) > 0) a = r1(u);否则r1(i) = u;结束
重写复杂的条件,例如调用函数的条件,将它们赋值给临时变量,并在条件语句中使用临时变量。例如,映射r1
将前面的代码改写如下:
Temp = mod(i,2);If (temp > 0) a = r1(u);否则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(0 (1024,1));End 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
是256。要更改阈值,请使用hdlset_param
.例如,以下命令更改映射阈值sfir_fixed
模型到128位:
hdlset_param (“sfir_fixed”,“RAMMappingThreshold”, 128);
您也可以在“配置参数”对话框中修改RAM映射阈值。有关更多信息,请参见RAM映射阈值(位)部分RAM映射参数.
中如何将持久数组变量映射到RAM的示例MATLAB函数块,看RAM映射与MATLAB函数块.
使用MapToRAM
将查找表(LUT)映射到RAM。
当模拟RAM延迟启用。,MapToRAM
属性禁用cos HDL优化而且正弦HDL优化块。
MapToRAM设置 | 映射的行为 |
“继承” (默认) |
使用父子系统的自适应流水线设置。如果这个子系统是最高级别的子系统,则使用模型的自适应流水线设置。 |
|
lut (block lookup table)在FPGA上被映射为逻辑片。 |
|
块查找表(lut)映射到RAM。 |
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,您可以指定是否要将Simulink模型中的随机访问内存(RAM)块映射到FPGA RAM内存块。万博1manbetx您可以映射大的内存块,例如超
来自Xilinx家族和来自Quartus的M144k®家庭。在基于合成工具的设计中为RAM块指定这些RAMDirective值。
合成工具 | RAM样式属性 | RAMDirective值 |
第四的 | ramstyle |
|
赛灵思公司 | ram_style |
|
Microsemi® | syn_ramstyle |
|
当您为这个设置指定一个值时,HDL Coder会生成一个ramstyle
属性。此属性指定在设计中推断RAM块时希望合成工具使用的RAM内存单元的类型。
当您没有为该设置指定任何值时,HDL Coder不会生成ramstyle
属性。合成工具确定用于映射模型中的RAM块的推断RAM的类型。
在高密度脂蛋白公羊图书馆,除了双速率双端口RAM,您可以指定RAMDirective
属性用于所有其他RAM块。
设置RAMDirective
对于在HDL块属性对话框中的RAM块:
右键单击RAM块。
选择HDL代码>HDL块属性.
在RAMDirective属性,指定表中列出的值。
您还可以设置RAMDirective通过使用hdlset_param
函数。
hdlset_param(, ' RAMDirective ', );
在MATLAB中指定这些属性®HDL工作流程,使用RAMDirective
参数值pair高密度脂蛋白。内存
实例化。使用以下命令设置此属性:
hRam = hdl。内存(‘RAMType’, ‘Single Port RAM’, ‘RAMDirective’, ‘ultra’);
例如,生成一个HDL属性,用于将模型中的RAM块映射到块内存
.一个块内存
是FPGA上的专用存储单元。块闸板的尺寸可以是4 kb
,8 kb
,16 kb
,32 kb
.
将你的RAM块映射到块内存
:
指定合成工具。您必须以包含的Xilinx设备为目标块内存
资源。如果目标设备不包含块RAM,合成工具会忽略此属性,并可能推断RAM为分布式RAM或查找表(Lookup Table, LUT)片。
输入RAMDirective的值as块
为您的Simuli万博1manbetxnk RAM块在HDL块属性。
为您的模型生成HDL代码。
生成的VHDL代码显示ram_style
属性设置为块
:
属性ram_style: string;ram的ram_style属性:信号为“block”;
生成的Verilog代码显示ram_style
属性设置为块
:
(* ram_style = "block" *)
当使用RAMDirective属性,请确保为您的设计选择了合成工具。
使用ResetType
块参数抑制重置逻辑生成。
ResetType价值 | 描述 |
---|---|
默认的 |
生成重置逻辑。 |
没有一个 |
不生成重置逻辑。 重置不会应用于生成的寄存器。因此,在初始阶段,当寄存器没有完全加载时,Simulink和万博1manbetx生成的代码之间会发生一些样本之间的不匹配。 为了避免在初始阶段的试验台错误,确定完全加载寄存器所需的样品数量。然后,设置忽略输出数据检查(样本数量)相应的选项。另请参阅忽略输出数据检查(样本数量)在试验台刺激和输出参数. |
你可以指定ResetType
对于以下区块:
图表
卷积Deinterleaver
卷积的分界
延迟
延迟(DSP系统工具箱™)
通用多路复用去交织器
通用多路复用交织器
MATLAB函数
MATLAB系统
内存
利用延迟
真值表
启用单元延迟
单位延迟
当你设置ResetType来没有一个
对于一个MATLAB函数块,HDL Coder不会为MATLAB代码中的持久变量生成重置逻辑。
但是,如果您为块指定了其他优化,编码器可能会插入使用重置逻辑的寄存器。编码器不抑制这些寄存器的重置逻辑生成。因此,如果你设置ResetType来没有一个
除了其他块优化之外,生成的代码可能在顶层有一个重置端口。
使用UI抑制块的重置逻辑生成:
右键单击该块并选择HDL代码>HDL块属性.
为ResetType中,选择没有一个
.
要抑制重置逻辑生成,在命令行上输入:
hdlset_param (path_to_block“ResetType”,“没有一个”)
例如,要抑制单元延迟块的重置逻辑生成,UnitDelay1
,在一个子系统内,mySubsys
,在命令行中输入:
hdlset_param(‘mySubsys / UnitDelay1’、‘ResetType’,‘没有’);
要指定同步或异步重置,请使用ResetType
模型级参数。详情请参见重置类型在重置设置和参数.
在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
指定要映射到单个共享资源的功能等效资源的数量。默认值为0。看到资源共享.
使用SoftReset
块参数指定是生成硬件友好的同步复位逻辑,还是生成与Simulink仿真行为匹配的本地复位逻辑。万博1manbetx对象可使用此属性单位延迟可重置块或Unit Delay Enabled可重置块。
SoftReset价值 | 描述 |
---|---|
从 (默认) |
生成与Simulink仿真行为匹配的本地重置逻辑。万博1manbetx |
在 |
为块生成同步重置逻辑。此选项生成的代码对合成来说更有效,但与Simulink模拟行为不匹配。万博1manbetx |
当SoftReset
设置为“关闭”
,将生成以下代码单位延迟可重置布洛克:
always @(posedge clk or 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;end else begin if (enb) begin Unit_Delay_Resettable_zero_delay <= 1'b0;if (UDR_reset == 1'b1) begin Unit_Delay_Resettable_switch_delay <= 2'b00;end else begin Unit_Delay_Resettable_switch_delay <= In1;end end end assign 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
设置为“上”
,将生成以下代码单位延迟可重置布洛克:
begin: Unit_Delay_Resettable_process if (reset == 1'b1) begin Unit_Delay_Resettable_reg <= 2'b00;end else begin if (enb) begin if (UDR_reset != 1'b0) begin Unit_Delay_Resettable_reg <= 2'b00;end else begin Unit_Delay_Resettable_reg <= In1;分配out0 = Unit_Delay_Resettable_reg;
通过时序复用串行数据路径和共享硬件资源,将并行数据路径或向量转换为串行、标量数据路径的数量。默认值是0,它实现了完全并行的数据路径。另请参阅流媒体.
您可以使用此模式产品块分而且互惠模式。当您将块的HDL架构设置为时,此属性就可用了ShiftAdd
.该体系结构使用了一种非还原除法算法,该算法执行多次移位和加法操作来计算商。的ShiftAdd
与Newton-Raphson近似方法相比,该结构提供了更高的精度。
当您使用ShiftAdd
架构,您可以使用UsePipelines
参数指定是使用非恢复除法的管道实现还是非管道实现。
UsePipelines设置 | 映射的行为 |
---|---|
|
使用管道实现的非还原移位和添加操作分而且互惠块。此设置在设计中增加了更多延迟,但在目标FPGA设备上实现了更高的最大时钟频率。插入的管道数量与算法计算商或倒数所需的迭代次数相匹配。 |
|
使用非管道实现的非还原移位和添加操作分而且互惠块。此设置不会给您的设计增加延迟。由于除法和倒数是资源密集型操作,要实现更高的时钟频率在目标FPGA上,设置UsePipelines来 |
设置UsePipelines
对于一个子系统,从HDL块属性对话框:
右键单击子系统。
选择HDL代码>HDL块属性.
为UsePipelines中,选择在或从.
设置UsePipelines
对于来自命令行的块,使用hdlset_param
.例如,关闭UsePipelines
对于一个分块内部,my_dut
:
hdlset_param (“my_dut /鸿沟”,“UsePipelines”,“关闭”);
hdlset_param
.
的UseRAM
实现参数允许对块使用基于ram的映射,而不是映射到移位寄存器。
UseRAM设置 | 映射的行为 |
---|---|
|
延迟映射到生成的HDL代码中的移位寄存器,只有一种情况例外。详情请参见流和分布式流水的效果. |
|
当满足以下条件时,该延迟映射到双端口RAM块:
如果任何条件为假,则延迟映射到HDL代码中的移位寄存器,除非它与其他延迟合并映射到单个RAM。有关更多信息,请参见将多个延迟映射到RAM. |
方法可使用此实现参数延迟在Simulink离散库中万博1manbetx的延迟(DSP系统工具箱)在DSP系统工具箱信号操作库中。
HDL Coder还可以将几个长度相等的延迟合并为一个延迟,然后将合并后的延迟映射到单个RAM。该优化带来了以下好处:
增加了单个RAM的占用率
共享地址生成逻辑,最大限度地减少相同HDL代码的重复
的延迟映射到RAM个人延迟不满足阈值
以下规则控制多个延迟是否可以合并为一个延迟:
延误必须:
处于子系统层次结构的同一级别。
使用相同的编译样例时间。
有UseRAM
设置为在
,或通过流媒体或资源共享生成。
有相同的ResetType
设置,不可能没有一个
.
合并时延的总字长不能超过128位。
的RAMSize
的值大于或等于RAMMappingThreshold
价值。RAMSize
是产品DelayLength * WordLength * VectorLength * ComplexLength
.
DelayLength
是延迟的总次数。
字
表示合并延迟的数据类型的位数。
VectorLength
是延迟向量中的元素个数。VectorLength
为1表示标量延迟。
ComplexLength
为2表示复杂延迟;否则1。
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
是从
,延迟块参与重计时。
当UseRAM
是在
,延迟块不参与重计时。HDL Coder不会分解标记为RAM映射的延迟。
考虑一个有两个子系统的子系统延迟三块,常数街区,三个产品块:
当UseRAM
是在
对于右侧的Delay块,该Delay不参与重计时。
下面的摘要描述了HDL Coder是否尝试将延迟映射到RAM而不是移位寄存器。
UseRAM 延迟块设置 |
为具有延迟块的子系统启用的优化 | ||
---|---|---|---|
仅分布式流水线 | 只流 | 分布式流水和流 | |
在 | 是的 | 是的 | 是的 |
从 | 没有 | 是的,因为映射到RAM而不是移位寄存器可以提供有效的区域设计。 | 没有 |
警告
VariablesToPipeline
不推荐。使用coder.hdl.pipeline
代替。
VariablesToPipeline参数使您能够在一个或多个MATLAB变量的输出处插入一个管道寄存器。指定变量列表作为字符向量,用空格分隔变量。
另请参阅管道MATLAB表达式.