2.7 Vivado中XDC文件 |
|
本节将介绍XDC约束相关的语法规则。内容包括XDC和UCF的区别、UCF到XDC映射、约束顺序。
Xilinx Vivado集成开发环境使用Xilinx设计约束(Xilinx Design Constraints,XDC)格式,而不再支持原来的用户约束文件(User Constraints File,UCF)格式。
XDC和UCF之间有很大的区别。XDC约束是基于标准的Synopsys的设计约束(Synopsys DesignConstraints,SDC)格式。SDC已经使用和发展了20多年,使得它变成用于描述设计约束的流行和被验证过的格式。
(1)业界标准的Synopsys设计约束(SDC V1.9);
(2)Xilinx专有的物理约束。
(1)它们不是简单的字符串,而是遵循Tcl语法的命令。
(2)通过VivadoTcl翻译器,就可以像理解其他Tcl命令那样理解它们。
(3)类似于其他Tcl命令那样,可以读取,然后按顺序从语法上分析它们。
(1)将约束保存在一个或者多个XDC文件中。
可以通过下面的方法将XDC加载到存储器中:
① 使用read_xdc命令。
② 将它添加到其中一个设计工程约束集中。
XDC文件只接收下面内建的Tcl命令:set、list和expr。
(2)通过Tcl脚本生成约束。
可以通过下面的方法运行Tcl脚本。
① 运行source命令。
② 将Tcl脚本添加到其中一个设计工程约束集。
XDC与UCF存在很大的区别,主要表现在以下几个方面:
(1)XDC是顺序语言,它带有明确优先级规则。
(2)典型的,UCF应用于网络,而XDC应用到引脚、端口和单元对象。
(3)UCF的PERIOD约束和XDC的create_clock命令不总是等价的,将导致不同的时序结果。
(4)默认的,对于UCF来说,在异步时钟组之间无时序关系;但是,对于XDC来说,所有时钟之间都是有联系的,存在时序关系(除非有其他约束)(set_clock_groups)。
(5)在XDC中,在相同的对象中存在多个时钟。
为了帮助读者理解两者之间的区别,表2.3给出UCF约束到XDC命令之间的映射关系。
表2.3 UCF约束到XDC命令之间的映射关系
默认的,所有的添加到约束集中的XDC文件和Tcl脚本都可以用于综合和实现过程。通过在XDC文件中设置“used_in_synthesis”和“used_in_implementation”属性或者Tcl脚本来修改这种行为,属性值为TURE或者FALSE。
DONT_TOUCH属性不会受到上面属性设置的影响,如果在综合时,使用DONT_TOUCH,则将其传递到实现过程,与“used_in_synthesis”和“used_in_implementation”属性无关。
在Vivado集成开发环境中,可以修改XDC的使用方法:
(1)在源文件窗口中,选择相应的约束文件。
(2)在源文件属性窗口中,选择/不选择Synthesis和Implementation前面的复选框。
这样,设计者就可以控制在综合和实现的过程中,是否使用相应的约束文件。对应的Tcl命令为:
Vivado集成开发环境允许设计者使用一个或者多个约束文件。虽然使用一个约束文件对于一个完整的编译流程来说看似更方便,但是在一些情况下,这会使得问题更加复杂,如一个设计使用了不同的IP核或者由不同团队开发的模块。不管设计者在设计中,使用了一个还是多个XDC文件,Xilinx推荐设计者使用下面的顺序来组织约束,见代码清单2-3。
代码清单2-3XDC文件的约束顺序
Xilinx推荐将时序约束和物理约束分别保存在两个不同的文件中。设计者也可以在一个单独的文件中对某个模块指定约束。
如果在工程中包含了一个IP,这个IP有自己的约束,则在约束集中并不出现相应的约束文件,而它和IP源文件一起出现。
如果在工程中,包含了多个约束文件。一般来说,Vivado工具首先读取列表中最上面的约束文件,而最后读取最下面的约束文件。设计者可以在集成开发环境中将约束文件移动到所期望的位置,用来修改约束文件在整个设计中的处理顺序。等效的Tcl命令格式为:
在非工程模式下,read_xdc的调用顺序决定了xdc文件的评估顺序。
如果存在IP约束文件,则先读取IP约束文件,然后再读取用户约束文件。设计者可以在源文件属性窗口修改读取IP约束文件的顺序。等效的Tcl命令格式为:
表2.4给出了XDC文件中有效的命令。在本书随后的章节中,通过实例对这些命令进行解释。
表2.4 XDC文件中有效的命令