vivado ROM_STYLE、RW_ADDR_COLLISION、SHREG_EXTRACT、SRL_STYLE、TRANSLATE_OFF/TRANSLATE_ON OFF/ON、USE_DSP

ROM_STYLE指示合成工具如何将常量数组推断为内存结构如块RAM。可接受的值为:

•块:指示工具推断RAMB类型组件

•分布式:指示工具推断LUT ROM。指示工具推断常量阵列转换为分布式RAM(LUTRAM)资源。默认情况下,工具选择要读取的ROM基于启发法进行推断,从而为大多数设计提供最佳结果。

•ultra:指示合成使用URAM基元。(仅限AMD Versal™自适应SoC部件)。这可以在RTL和XDC中设置。

ROM_STYLE Verilog Example
(* rom_style = "distributed" *) reg [data_size-1:0] myrom
[2**addr_size-1:0];
ROM_STYLE VHDL Example
attribute rom_style : string;
attribute rom_style of myrom : signal is "distributed";

RW_ADDR_COLLISION属性用于特定类型的RAM。当RAM是一个简单的对偶时端口,并且注册了读取地址,Vivado synthesis推断出块RAM并设置写入模式为WRITE_FIRST以获得最佳定时。此外,如果一个设计写入它正在读取的同一地址从,RAM输出是不可预测的。RW_ADDR_COLLISION覆盖此行为。

RW_ADDR_COLLISION的值为:

•auto:如前所述的默认行为。

•是:这些插入旁路逻辑,这样当从同一时间读取地址时写入时,在输出上可以看到输入的值,使整个数组的行为如下WRITE_FIRST。

•否:这是指用户不关心时间或碰撞可能性的情况。在这种情况下,写入模式被设置为NO_CHANGE从而导致功率节省。RW_ADDR_COLLISION仅在RTL中受支持。

RW_ADDR_COLLISION Verilog Example
(*rw_addr_collision = "yes" *) reg [3:0] my_ram [1023:0];
RW_ADDR_COLLISION VHDL Example
attribute rw_addr_collision : string;
attribute rw_addr_collision of my_ram : signal is "yes";

SHREG_EXTRACT指示合成工具是否推断SRL结构。认可的值为:

•是:该工具推断SRL结构。

•否:不推断SRL,而是创建寄存器。

将SHREG_EXTRACT放在为SRL或具有SRL的模块/实体声明的信号上。它可以可以在RTL或XDC中设置。

SHREG_EXTRACT Verilog Example
(* shreg_extract = "no" *) reg [16:0] my_srl;
SHREG_EXTRACT VHDL Example
attribute shreg_extract : string;
attribute shreg_extract of my_srl : signal is "no";

SRL_STYLE指导合成工具如何推断设计中发现的SRL。认可的值为:

•寄存器:该工具不推断SRL,而是仅使用寄存器。

•srl:该工具推断出srl之前或之后没有任何寄存器。

•srl_reg:该工具推断srl,并在srl之后留下一个寄存器。

•reg_srl:该工具推断srl,并在srl之前留下一个寄存器。

•reg_srl_reg:该工具推断srl,并在srl之前和之后留下一个寄存器。

•块:该工具推断块RAM内的SRL。

将SRL_STYLE放在为SRL声明的信号上。此属性可以在RTL和XDC中设置。这个属性只能用于静态SRL。动态SRL的索引逻辑位于SRL组件本身。因此,无法围绕SRL组件创建逻辑以查找组件外部的地址。

注意:使用SRL_STYLE、SHREG_EXTRACT和-SHREG_min_size的组合时要小心。这个SHREG_EXTRACT属性始终优先于其他属性。如果SHREG_EXTRACT设置为“否”并且SRL_STYLE被设置为“SRL”,则使用寄存器。作为全局变量的-shreg_min_size,总是具有最少的优先级。如果长度为10的SRL被设置并且SRL_ STYLE被设置为“SRL”,并且-shreg_min_size被设置为20时,仍然推断SRL。

注:在以下示例中,SRL都是用总线创建的,其中SRL从一位移位到下一个。如果要使用SRL_STYLE的代码有许多不同名称的信号相互驱动,请将链中最后一个信号的SRL_STYLE属性。这包括如果链中的最后一个寄存器在不同于其他寄存器的层次级别。该属性总是位于链中的最后一个寄存器上。

SRL_STYLE Verilog Example
(* srl_style = "register" *) reg [16:0] my_srl;
SRL_STYLE VHDL Example
attribute srl_style : string;
attribute srl_style of my_srl : signal is "reg_srl_reg";
SRL_STYLE XDC Example
set_property srl_style register [get_cells my_shifter_reg*]

TRANSLATE_OFF和TRANSLATE_ON指示合成工具忽略代码块。这些属性在RTL中的注释中给出。评论可以以其中一个开头以下关键字:

•合成

•尸检

•pragma

•西林

在该工具的较新版本中,使用关键字已成为可选选项。该工具适用于translate_off/on或off/on。TRANSLATE_OFF启动忽略,并以TRANSLATE_ON结束。这些命令不能嵌套。此属性只能在RTL中设置。

TRANSLATE_OFF/TRANSLATE_ON OFF/ON Verilog Example
// synthesis translate_off
Code....
// synthesis translate_on
// synthesis off
Code....
// synthesis on
TRANSLATE_OFF/TRANSLATE_ON OFF/ON VHDL Example
-- synthesis translate_off
Code...
-- synthesis translate_on
-- synthesis on
Code....
-- synthesis off

USE_DSP指示合成工具如何处理合成算术结构。通过默认情况下,除非存在时间问题或阈值限制,否则合成尝试推断mult,将mult-add、mult-sub和mult-accumulate类型的结构转换成DSP块。加法器、减法器和累加器也可以进入这些块,但默认情况下是用逻辑而不是用DSP块来实现。USE_DSP属性覆盖默认行为,并强制这些结构进入DSP块。可接受的值为:“logic”、“simd”、“yes”和“no”:

•“逻辑”值专门用于XOR结构,以进入DSP基元。对于“逻辑”,此属性只能放在模块/体系结构级别上。

•“simd”用于指示工具将simd结构(单指令多数据)放入DSP。有关示例,请参见模板。

•“是”和“否”值指示工具是否将逻辑放入DSP。这些值可以放置在信号、体系结构、组件、实体和模块的RTL中。优先事项是:

1.信号

2.架构和组件

3.模块和实体

如果未指定属性,则Vivado合成的默认行为是确定正确的行为。此属性可以在RTL或XDC中设置。

USE_DSP Verilog Example
(* use_dsp = "yes" *) module test(clk, in1, in2, out1);
USE_DSP VHDL Example
attribute use_dsp : string;
attribute use_dsp of P_reg : signal is "no"

你可能感兴趣的:(fpga开发)