Vivado中的自定义属性支持、在XDC文件中使用合成属性

Vivado中的自定义属性支持

Vivado合成支持在RTL中使用自定义属性。自定义的行为合成属性未知。通常,自定义属性用于下游的其他工具来自合成过程。

小心!当Vivado合成遇到未知属性时,它会尝试将它们转发到综合输出网表,但您需要了解风险。自定义属性不会停止合成这意味着如果合成可以优化具有自定义属性的项目,它这样做,并且属性丢失。如果需要自定义属性进行合成,则必须使用DONT_TOUCH或KEEP_HIERARCHY属性以防止合成优化需要属性。有两种类型的对象可以具有自定义属性:层次结构和信号。

在层次结构上使用自定义属性时,必须将-plane_hierarchy开关设置为none或放置在该级别上的KEEP_HIERARCHY,因为默认情况下合成会使设计,优化设计,重建设计。首次展开设计后,层次结构上的自定义属性将丢失。

Example with Custom Attribute on Hierarchy
(Verilog)
(* my_att = "my_value", DONT_TOUCH = "yes" *) module test(....
Example with Custom Attribute on Hierarchy (VHDL)
attribute my_att : string;
attribute my_att of beh : architecture is "my_value"
attribute DONT_TOUCH : string;
attribute DONT_TOUCH of beh : architecture is "yes";

在信号上使用自定义属性时也要小心。当在上看到自定义属性时信号,合成工具尝试将该属性放在项目上;但是,此项目可以是转换为寄存器或网络,这取决于工具如何评估RTL代码。此外,与层次结构,因为信号具有自定义属性,所以该工具可以优化该信号,并且属性丢失。若要在具有自定义属性的信号上保留自定义属性,必须放置DONT_TOUCH或KEEP属性。最后,因为RTL中的信号可以描述寄存器和从注册时,合成工具会检查具有自定义属性和DONT_TOUCH的任何项目属性如果有问题的网络是由寄存器驱动的,则合成会将该自定义属性复制到寄存器和网络,因为有多种方法可以使用自定义属性。有时寄存器需要该属性,有时网络也需要该属性。

Example with Custom Attribute on a Signal (Verilog)
(* my_att = "my_value", DONT_TOUCH = "yes" *) reg my_signal;
Example with Custom Attribute on a Signal (VHDL)
attribute my_att : string;
attribute my_att of my_signal : signal is "my_value";
attribute DONT_TOUCH : string;
attribute DONT_TOUCH of my_signal : signal is "yes";

在XDC文件中使用合成属性

还可以从XDC文件以及原始RTL文件设置一些合成属性。在里面概述了在合成的最后阶段使用的属性,并描述了如何在XDC文件中允许合成创建的逻辑。的开头使用的属性XDC中不允许合成和影响编译器。例如,在XDC中不允许使用KEEP和DONT_TOUCH属性。这是因为,在从XDC文件读取属性时,具有KEEP或DONT_TOUCH属性可能已经优化,因此不会在读取属性时存在。因此,必须始终在RTL代码。有关在何处设置特定属性的详细信息,请参见单个属性本章中的描述。

注意:在读取XDC文件时,多位信号在Synthesis中作为单个节点存在。因此,将属性放在矢量信号的各个比特上将该属性放在信号的所有比特上。要在XDC中指定合成属性,请在Tcl控制台中键入以下内容:

set_property
For example:
set_property MAX_FANOUT 15 [get_cells in1_int_reg]

此外,您可以在详细设计中设置这些属性,如下所示:

1.打开详细设计,如下图所示,然后选择要在其上显示的项目使用以下任一方法放置属性:

•单击示意图中的项目。

•在RTL网表视图中选择项目,如下图所示。

Vivado中的自定义属性支持、在XDC文件中使用合成属性_第1张图片

2.在“单元属性”窗口中,单击“属性”选项卡,然后执行以下操作之一:

•修改属性。

•如果属性不存在,右键单击,选择“添加属性”,然后选择该属性从出现的窗口中,或单击+号。这会将属性保存到当前约束文件中,或者创建一个新的约束文件(如果有)不存在。

注意:如果在XDC和RTL中的同一对象上都放置了相同的属性,但属性不同,XDC属性被接受,RTL属性被忽略。合成属性传播规则读取每个单独的属性,以了解是否应将其放置在层次结构或信号。通常,当属性放置在层次上时,它只影响该边界,而不影响该层次结构中的项。例如,将DONT_TOUCH放置在特定级别会影响仅限电平,而不包括该电平内的信号。

这条规则也有一些例外。这些是DSP_ FLODING、RAM_STYLE、ROM_STYLE,SHREG_EXTRACT和USE_DSP。当这些属性放置在层次结构上时,它们影响层次结构内部的信号。

注意:对于在块注释中具有属性的Verilog语法,/*attr=value*/,此属性附加到注释后的下一个词条。如果注释在自己的行上,则中的下一项RTL,无论向下多远,都会获得该属性。如果在文件末尾指定了属性,则属性附加到模块。

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