主要内容

HDL块属性:一般

概述

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

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

库块的HDL块属性

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

假设一个库包含一个子系统块,将HDL架构设置为模块.当您在模型中实例化此块时,块实例使用模块作为HDL架构。的HDL架构子系统Block in the library to黑箱,现有的例子子系统块在你的模型中仍然使用模块作为HDL架构。的实例子系统块,新的块实例将获得当前HDL块属性的副本,并因此使用黑箱作为HDL架构。如果你想要的HDL架构子系统块与模型中的实例同步,创建一个具有您想要的HDL体系结构的包装器子系统子系统

AdaptivePipelining

AdaptivePipelining子系统参数允许您在模型中的子系统上设置自适应管道。

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

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

“上”

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

“关闭”

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

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

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

设置子系统的自适应管道

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

  1. 右键单击子系统并选择HDL代码>高密度脂蛋白块属性

  2. AdaptivePipelining中,选择继承

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

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

BalanceDelays

BalanceDelays子系统参数允许您在模型内的子系统上设置延迟均衡。

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

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

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

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

要学习如何设置模型级延迟平衡,请参见余额延迟

设置子系统延迟均衡

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

  1. 右键单击该子系统。

  2. 选择HDL代码>高密度脂蛋白块属性

  3. BalanceDelays中,选择继承

要从命令行设置子系统的延迟平衡,请使用hdlset_参数.例如,要关闭子系统的延迟平衡,my_dut

hdlset_param (“my_dut”“平衡延迟”“关闭”
另请参阅hdlset_参数

ClockRatePipelining

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

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

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

“上”

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

“关闭”

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

若要禁用模型中某个子系统的时钟速率流水线,请设置时钟速率流水线参数,ClockRatePipelining,“关闭”子系统。

要学习如何设置模型级时钟速率流水线,请参阅时钟频率流水线

设置子系统的时钟速率流水线

使用HDL块属性对话框设置子系统的时钟速率流水线:

  1. 右键单击该子系统。

  2. 选择HDL代码>高密度脂蛋白块属性

  3. ClockRatePipelining中,选择继承

要从命令行设置子系统的时钟速率管道,请使用hdlset_参数.例如,要关闭子系统的时钟速率流水线,my_dut

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

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语句多端口切换块。

设置CodingStyle多端口切换

将CodingStyle设置为多端口切换使用HDL块属性对话框:

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

  2. 选择HDL代码>高密度脂蛋白块属性

  3. CodingStyle中,选择ifelse_stmtcase_stmt

去看CodingStyle从命令行指定一个子系统,使用hdlget_param.例如,要查看为多端口切换块在子系统中,my_dut

hdlget_param (“my_dut /多端口切换”“CodingStyle”
ans = ' case_stmt '
另请参阅hdlset_参数

ConstMultiplierOptimization

ConstMultiplierOptimization实现参数允许您指定规范有符号数字(CSD)或因子CSD优化的使用,以处理生成代码中的系数乘法器操作。

下表显示了ConstMultiplierOptimization参数值。

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

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

ConstMultiplierOptimization参数可用于以下块:

  • 获得

  • 状态流®图表

  • 真值表

  • MATLAB函数

  • MATLAB系统

约束输出管道

使用约束输出管道参数指定要放置在块输出上的非负寄存器数。

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

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

如何指定约束的输出管道

使用GUI为块指定受约束的输出管道:

  1. 在块上单击鼠标右键,然后选择HDL代码>高密度脂蛋白块属性

  2. 约束输出管道,输入在输出端口需要的寄存器数量。

要指定受约束的输出管道,请在命令行输入:

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

另请参阅

DistributedPipelining

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

下表显示了该方法的效果DistributedPipeliningOutputPipeline参数。

DistributedPipelining 输出管道,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必须设置为完全平行的当你使用本机浮点模式。

“完全平行Scalarized”

将矩阵乘法运算扩展为乘法器和加法器。例如,如果您将两个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编码器传播DSPStyle设置为父子系统。

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

在生成代码中合成属性

为合成属性生成的代码取决于:

  • 目标语言

  • DSPStyle价值

  • SynthesisTool价值

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

DSPStyle价值 开发价值 SynthesisTool价值
“阿尔特拉第四的二世” “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" *) wire signed [32:0] m4_out1;

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

硬件描述语言(VHDL)的

属性multistyle:字符串;

m4_out1属性multistyle: signal is "dsp";

属性使用:字符串;

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

“关闭” “Verilog”

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

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

硬件描述语言(VHDL)的

属性multistyle:字符串;

m4_out1的multistyle属性:信号是“逻辑”;

属性使用:字符串;

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

合成属性规范的需求

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

如何指定合成属性

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

  1. 右键单击该块。

  2. 选择HDL代码>高密度脂蛋白块属性

  3. DSPStyle中,选择没有一个

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

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

合成属性规范的限制

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

  • 乘法器组件的输入不能使用数据类型。

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

FlattenHierarchy

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

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

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

如何扁平化层次结构

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

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

  • 右键单击子系统并选择HDL代码>高密度脂蛋白块属性.为FlattenHierarchy中,选择继承

要从命令行设置层次展开,请使用hdlset_参数.例如,要打开一个子系统的层次扁平化,my_dut

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

层次扁平化的局限性

如果一个子系统是:

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

  • 模型参考实现。

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

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

    • 公共汽车。

    • 枚举数据类型。

    • 查找表:一维查找表二维查找表余弦HDL优化直接可查找(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),结束;

请注意

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

当为管道寄存器生成代码时,HDL Coder会将后缀字符串附加到输入或输出管道寄存器的名称中。默认后缀字符串为_pipe.要自定义后缀字符串,请使用管道后缀选项全局设置/常规窗格中HDL代码生成对话框中的。或者,您可以将所需的后缀作为字符向量传递到makehdl财产PipelinePostfix.例如,请参见管道后缀

实例化函数

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

实例化函数未来的选择MATLAB函数块的列表见下表。

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

为内联函数生成代码。

“上”

生成一个硬件描述语言(VHDL)实体或Verilog模块,并保存每个函数模块实体在一个单独的文件中。

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

设置实例化函数参数使用HDL块属性对话框:

  1. 右键单击MATLAB函数块。

  2. 选择HDL代码>高密度脂蛋白块属性

  3. 实例化函数中,选择

设置实例化函数参数,使用hdlset_参数.例如,为函数生成可实例化代码MATLAB函数块,myMatlabFcn,在DUT子系统中,myDUT,输入:

hdlset_param(“my_DUT / my_MATLABFcnBlk”、“InstantiateFunctions”,“上”)

为特定函数生成内联代码

如果您想为某些函数生成可实例化的代码,而不是其他函数,请启用为函数生成可实例化代码的选项,并使用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函数块For循环

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

  1. 右键单击MATLAB函数块。

  2. 选择HDL代码>高密度脂蛋白块属性

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

要从命令行中选择循环优化,请使用hdlset_参数.例如,打开循环流MATLAB函数块,my_mlfn

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

限制MATLAB函数块循环优化

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

  • 循环索引倒数。每次迭代时,循环索引必须增加1。

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

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

当持久化变量为:

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

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

LUTRegisterResetType

使用LUTRegisterResetType块参数来控制将LUT合成到FPGA上的ROM结构。

LUTRegisterResetType价值 描述
默认的

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

没有一个

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

您可以指定LUTRegisterResetType适用于以下类别:

  • 伽马校正

  • 查找表

NCO-HDL优化块忽略此参数。

MapPersistentVarsToRAM

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

MapPersistentVarsToRAM设置 映射的行为

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

持久数组变量映射到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(我,2);If (temp > 0) a = r1(u);Else r1(i) = u;结束

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

    例如,在下面的代码中,大数组不映射到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(问);temp = bigarray (idx + 1);Cnt (:) = Cnt + fi(1,1,16,0,hdlfimath) + temp;bigarray (idx + 1) = idx;

  • RAMSize是否大于或等于RAMMappingThreshold价值。RAMSize是产品NumElements * WordLength * Complexity

    • NumElements是数组中元素的个数。

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

    • 复杂性为2表示具有复杂基类型的数组;否则1。

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

RAMMappingThreshold

的默认值RAMMappingThreshold是256。若要更改阈值,请使用hdlset_参数.例如,使用下面的命令修改映射阈值sfir_fixed模型到128位:

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

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

例子

下面的示例演示了如何将持久化数组变量映射到RAMMATLAB函数块,看RAM映射与MATLAB函数块

MapToRAM

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

模拟内存延迟启用。,MapToRAM属性被禁用余弦HDL优化正弦HDL优化块。

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

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

块查找表(lut)被映射到FPGA上的逻辑片。

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

OutputPipeline

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

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

sblocks = find_system(gcb, 'BlockType', 'Sum'); / /指定块类型for ii=1:length(sblocks),hdlset_param(sblocks{ii},'OutputPipeline', 2),结束;

请注意

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

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

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

RAMDirective

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

综合工具 RAM样式属性 RAMDirective值
夸脱 拉姆斯泰尔

逻辑| M9K | M10K | M20K | M144K | MLAB

锡林克斯 ram_style

Block | distributed| register| ultra

Microsemi® syn_ramstyle

Block_ram |寄存器| lsram| uram

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

当您没有为该设置指定任何值时,HDL Coder不会生成拉姆斯泰尔属性。合成工具确定用于映射模型中的RAM块的推断RAM的类型。

为RAM块设置RAMDirective

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

设置RAMDirective在“HDL块属性”对话框中查看RAM块:

  1. 右键单击RAM块。

  2. 选择HDL代码>高密度脂蛋白块属性

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

您也可以设置RAMDirective通过使用hdlset_参数函数。

RAMDirective的hdlset_param (< ram_block_name >, < attribute_value >);

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

hRam =高密度脂蛋白。内存(‘RAMType’, ‘Single Port RAM’, ‘RAMDirective’, ‘ultra’);

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

将您的RAM块映射到块内存

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

  • 输入RAMDirective值为为您的Simuli金宝appnk RAM块在HDL块属性。

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

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

属性ram_样式:字符串;ram的属性ram_样式:信号为“块”;

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

(* ram_style = "block" *)

依赖

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

ResetType

使用ResetType用于抑制复位逻辑生成的块参数。

ResetType价值 描述
默认的

生成复位逻辑。

没有一个

不生成重置逻辑。

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

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

您可以指定ResetType适用于以下类别:

  • 图表

  • 卷积Deinterleaver

  • 卷积的分界

  • 延迟

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

  • 一般多路复用Deinterleaver

  • 一般多路分界

  • MATLAB函数

  • MATLAB系统

  • 内存

  • 利用延迟

  • 真值表

  • 单位延迟启用

  • 单位延迟

MATLAB函数块中的优化逻辑复位

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

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

如何抑制复位逻辑生成

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

  1. 在块上单击鼠标右键,然后选择HDL代码>高密度脂蛋白块属性

  2. ResetType中,选择没有一个

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

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

例如,要抑制“单位延迟”块的复位逻辑生成,UnitDelay1,在一个子系统内,mySubsys,在命令行中输入:

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

指定同步或异步重置

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

SerialPartition

在最小/最大块上使用此参数为串行级联架构指定分区。默认设置使用最小的分区数。

产生这
架构……
设置SerialPartition……
使用显式指定的分区进行串行级联 (p1 p2 p3…pN):的向量N整数,N是串行分区的数目。向量的每个元素指定相应分区的长度。向量元素的总和必须等于输入数据向量的长度。向量元素的值必须按降序排列,但最后两个元素可以相等。例如,对于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设置为“关闭”,将为一个单元延迟可重置布洛克:

始终@(posedge clk或posedge reset)开始:如果(reset==1'b1)开始单元延迟可重置零延迟<=1'b1,则单元延迟可重置处理;装置延时可复位开关延时<=2'b00;如果(enb)开始单元延迟可重置零延迟小于等于1'b0,则结束else开始;如果(UDR\U reset==1'b1)开始装置延迟\U reset TABLE\U开关延迟<=2'b00;end else begin Unit_Delay_RESETABLE_开关_Delay<=In1;结束-结束-分配单元_延迟_重置|单元_延迟_重置|单元_重置_零延迟?1'b1:1'b0);分配out0=(单位延迟可重置单位1==1'b1?2'b00:单位延迟可重置单位开关延迟);

SoftReset设置为“上”,将为一个单元延迟可重置布洛克:

always @(posedge clk或posedge reset) 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;

StreamingFactor

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

UsePipelines

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

当你使用ShiftAdd架构上,可以使用UsePipelines实现参数,指定是使用非恢复除法的流水线实现还是非流水线实现。

UsePipelines设置 映射的行为

(默认)

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

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

为分块和互惠块设置UsePipelines

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

  1. 右键单击该子系统。

  2. 选择HDL代码>高密度脂蛋白块属性

  3. UsePipelines中,选择

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

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

乌瑟拉姆

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

用户AM设置 映射的行为

延迟映射到生成的HDL代码中的移位寄存器,除了一种情况。有关详细信息,请参见流和分布式管道的影响

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

  • 延迟的初始值为零。

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

  • 延迟长度> 4。

  • Delay具有下列数字和数据类型属性之一:

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

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

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

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

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

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

    • ComplexLength对于复杂信号为2;1否则。

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

此实现参数可用于延迟块的Simulink离散库金宝app和延迟(DSP系统工具箱)块在DSP系统工具箱信号操作库中。

映射多个延迟到RAM

HDL编码器还可以将多个等长的延迟合并为一个延迟,然后将合并的延迟映射到单个RAM。这种优化提供了以下好处:

  • 增加单个RAM的占用率

  • 共享地址生成逻辑,使相同的HDL代码的重复最小化

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

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

  • 延迟必须:

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

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

    • 乌瑟拉姆设置为,或由流媒体或资源共享生成。

    • 有相同的ResetType设置,不能为没有一个

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

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

    • DelayLength为总延迟次数。

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

    • VectorLength是向量延迟中的元素数。VectorLength是1对于标量延迟。

    • ComplexLength为2表示复杂延迟;否则1。

映射到块RAM的多个延迟示例

RAMMappingThreshold下面的模型是100位。

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

  • 两种延迟块:

    • 都在层次结构的同一层。

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

    • 乌瑟拉姆设置为在HDL块属性对话框中。

    • 有相同的ResetType设置默认的

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

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

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

流和分布式管道的影响

乌瑟拉姆对于延迟块,HDL编码器默认将延迟映射到移位寄存器。然而,编码器改变了乌瑟拉姆设置为并尝试在以下条件下将延迟映射到RAM:

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

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

假设分布式管道是启用对于子系统延迟块。

  • 乌瑟拉姆,延迟块参与重定时。

  • 乌瑟拉姆,延迟块不参与重定时。HDL编码器不会中断标记为RAM映射的延迟。

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

    乌瑟拉姆对于右边的Delay块,该延迟不参与重定时。

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

乌瑟拉姆延迟块的设置 使用延迟块为子系统启用的优化
仅分布式流水线 仅流媒体 分布式管道和流
是的 是的 是的
没有 是的,因为映射到RAM而不是移位寄存器可以提供一个区域高效的设计。 没有

VariablesToPipeline

警告

VariablesToPipeline不推荐。使用coder.hdl.pipeline代替。

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

另请参阅管道MATLAB表达式