vivado MAX_FANOUT、PARALLEL_CASE (Verilog Only)、RAM_DECOMP、RAM_STYLE、RETIMING_BACKWARD、RETIMING_FORWA

MAX_FANOUT指示Vivado合成寄存器和信号的扇出限制。你可以在RTL中或将其指定为项目的输入。该值是一个整数。此属性仅适用于寄存器和组合信号。为了实现扇出复制驱动组合信号的寄存器或驱动器。可以设置此属性仅在RTL中。

注:不支持输入、黑匣子、EDIF(EDF)和本地通用电路(NGC)文件。

重要!用于UltraScale设备的Vivado Design Suite不支持NGC格式文件。它是建议您使用本机的Vivado Design Suite IP自定义工具重新生成IP输出产品。或者,您可以使用NGC2EDIF命令将NGC文件迁移到EDIF用于导入的格式。然而,AMD建议使用原生Vivado IP,而不是XST生成的NGC格式化文件。

建议:在全局高扇出信号上使用MAX_FANOUT属性会导致次优合成中的复制。因此,AMD建议仅在层次结构中使用MAX_FANOUT在具有中等到低扇出的本地信号上。

MAX_FANOUT Verilog Example
On Signal
(* max_fanout = 50 *) reg sig1;
MAX_FANOUT VHDL Example
signal sig1 : std_logic;
attribute max_fanout : integer;
attribute max_fanout of sig1 : signal is 50;

PARALLEL_CASE指定CASE语句必须构建为并行结构。逻辑是不是为if-elsif结构创建的。因为此属性会影响编译器和设计的逻辑行为,它只能在RTL中设置。

(* parallel_case *) case select
3'b100 : sig = val1;
3'b010 : sig = val2;
3'b001 : sig = val3;
endcase

RAM_DECOMP属性指示该工具推断太大而无法放入的RTL RAM单块RAM原语,以使用更省电的配置。例如,指定为2Kx36的RAM通常会配置为两个2Kx18块RAM并排排列。这是产生最快设计的配置。通过设置RAM_DECOMP,则RAM将被配置为两个1Kx36块RAM。这是更多电源友好,因为在读取或写入过程中,只有一个使用该地址的RAM忙碌的它是以时间为代价的,因为Vivado合成必须使用地址解码。这个RAM_DECOMP将强制该RAM的第二配置。RAM_DECOMP可接受的值为“功率”。此属性可以在RTL或XDC中设置。将属性放置在RAM实例本身上。

RAM_DECOMP Verilog Example
(* ram_decomp = "power" *) reg [data_size-1:0] myram [2**addr_size-1:0];
RAM_DECOMP VHDL Example
attribute ram_decomp : string;
attribute ram_decomp of myram : signal is "power";
RAM_DECOMP XDC Example
set_property ram_decomp power [get_cells myram]

RAM_STYLE指示Vivado合成工具如何推断内存。可接受的值为:

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

•分布式:指示工具推断LUT RAM。

•寄存器:指示工具推断寄存器而不是RAM。

•ultra:指示该工具使用AMD UltraScale+™URAM原语。

•混合:指示工具推断RAM类型的组合,以最大限度地减少未使用的空间量。

•auto:让合成工具决定如何实现RAM。此值主要用于必须为RAM_STYLE选择一个值的XPM。这与默认行为相同。那个必须为RAM_STYLE选择一个值。默认情况下,该工具根据启发法选择要推断的RAM,这些启发法可以为大多数设计。将此属性放置在为RAM或层次结构级别声明的数组上。

•如果在信号上设置,则该属性会影响该特定信号。

•如果设置在层次级别上,则会影响该层次级别中的所有RAM。的子级别层次结构不受影响。

这可以在RTL或XDC中设置。

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

RETIMING_BACKWARD属性指示工具将寄存器向后移动通过更接近顺序驱动元件的逻辑。与重定时全局设置不同,此属性为不受定时驱动,无论重定时全局设置是否处于活动状态,都能正常工作甚至是时间限制。如果全局重定时设置处于活动状态,则retiming_BACKWARD步骤首先发生,全局重定时可以增强该寄存器,使其进一步向后移动链条但是,它不会干扰属性,并将寄存器移回原始位置。

注意:具有DONT_TOUCH/MARK_DEBUG属性的单元格,具有定时异常的单元格(false_path,multicycle_path),并且用户实例化的单元阻止该属性。RETIMING_BACKWARD属性采用一个整数作为值。此值描述允许寄存器交叉的逻辑量。较大的值允许寄存器交叉更多思维方式0将关闭该属性。

RETIMING_BACKWARD Verilog Example
(*retiming_backward = 1 *) reg my_sig;
RETIMING_BACKWARD VHDL Example
attribute retiming_backward : integer;
attribute retiming_backward of my_sig : signal is 1;
RETIMING_BACKWARD XDC Example
set_property retiming_backward 1 [get_cells my_sig];

RETIMING_FORWARD属性指示工具通过逻辑向前移动寄存器更靠近被驱动的顺序元件。与重定时全局设置不同,此属性不是计时驱动,无论重定时全局设置是否处于活动状态或是否存在甚至时间限制。如果全局重定时设置处于活动状态,则retiming_FORWARD步骤首先发生,全局重定时可以增强寄存器,使其进一步向上移动。但是,它不会干扰属性,并将寄存器移回原来的位置地方

注意:具有DONT_TOUCH/MARK_DEBUG属性的单元格,具有定时异常的单元格(false_path,multicycle_path),并且用户实例化的单元阻止该属性。RETIMING_FORWARD属性采用一个整数作为值。此值描述金额允许寄存器的逻辑交叉。较大的值允许寄存器跨越更多的逻辑。0将关闭该属性。

RETIMING_FORWARD Verilog Example
(* retiming_forward = 1 *) reg my_sig;
RETIMING_FORWARD VHDL Example
attribute retiming_forward : integer;
attribute retiming_forward of my_sig : signal is 1;
RETIMING_FORWARD XDC Example
set_property retiming_forward 1 [get_cells my_sig];

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