1、 时间:2015-05-17 文档: 目录 第一章 介绍 3 一、UCF向XDC的迁移 3 二、关于XDC约束 3 三、添加(Entering)XDC约束 4 第二章 约束方法论 4 一、管理(Organizing)约束文件 4 二、约束命令排序(Ordering Your Constraints) 6 三、添加约束(Entering Constraints) 10 四、创建综合约束 12 第一章 介绍 一、UCF向XDC的迁移 XDC(Xilinx Design Constraints)约束不同于UCF(User Co
2、nstraints File)约束,XDC约束是基于SDC(Synopsys Design Constraints)约束格式的。SDC已经被使用并演进(evolving)20多年了,这使得它是一种流行的、经过验证的、用于描述设计约束的方法。如果你熟悉UCF,且刚刚开始接触xdc的话,请学习“Differences Between XDC and UCF Constraints”部分(UG911)。为了正确地约束设计,必须要正确理解XDC与UCF的不同之处。通过UCF到XDC格式转换的方法实现XDC的创建,是不能代替对XDC语法以及创建XDC约束的理解的,所以需要理解XDC的原理。 二、关于X
3、DC约束 XDC约束由以下部分组成: 1、 工业标准的Synopsys Design Constraint(SDC),和 2、 Xilinx公司所有的物理约束(physical constraint); XDC约束具有如下特性: 1、 XDC约束不是简单的字符(strings),而是遵循Tcl语法规则的命令; 2、 XDC约束可以像任何Tcl命令一样被Vivado Tcl解析器解析; 3、 XDC约束像其他Tcl命令一样被顺序的读入和解析; 三、添加(Entering)XDC约束 在设计的不同节点,有三种方法添加XDC约束: 1、 将约束保存成可以加入到工程约束集(proj
4、ect constraints set)的一个或者多个文件(GUI方式); 2、 使用read_xdc命令读取约束文件(批处理方式); 3、 打开工程的时候(即将设计导入内存),在Tcl控制台中直接调用约束命令(命令行方式); 第二章 约束方法论 这一章将讨论推荐地添加约束的流程(Constraints Entry Flow)。 设计约束定义了编译流程(the Compilation Flow)中必须满足的设计需求,以使设计上板测试时功能能够正确。在编译流程中,每个步骤使用不同的约束,例如物理约束会在实现(Implementation)步骤中使用,实现步骤包括Placer(布局
5、)和Router(布线)。 因为Vivado IDE(Vivado Integrated Design Environment)综合(Synthesis)与实现(Implementation)算法是时序驱动的(Timing-driven),所以需要创建适宜的(proper)时序约束。过紧约束(Over-constraining)与过松约束(Under-constraining)会使设计的时序逼近变得困难。所以,设计者必须使用切合设计应用需求的约束。 一、管理(Organizing)约束文件 Vivado IDE允许使用一个或者多个约束文件。对设计项目来说,在整个编译过程中仅使用一个约束
6、文件似乎是方便的,但是随着设计复杂度的提升,会越来越难以掌控约束。Xilinx建议将时序约束(timing constraints)与物理约束(physical constraint)分开保存为独立的文件。 1、 工程流程(Project Flow) 在创建新工程的过程中,可以将约束文件XDC添加文件到约束集(Constraints Set),建好工程后添加也可。 Figure 2-1,显示一个工程中添加两个文件: 1) 第一个约束集包含2个XDC文件; 2) 第二个约束集包含了一个带有所有约束的文件; Figure 2-1 Single or Multi XDC 2
7、 Non-Project Flows 在no-project流程中,执行编译命令之前读取每个约束文件也可以取得Project Flow的相同效果。 Example Script read_verilog [glob src/*.v] read_xdc wave_gen_timing.xdc read_xdc wave_gen_pins.xdc synth_design –top wave_gen opt_design place_design route_design 3、 约束文件的综合与实现属性 默认情况下,添加到工程的约束文件带有综合和实现两种属性。通过
8、如下方法改变约束文件的属性: 1) 在Source window中选择约束文件; 2) 勾选实现属性,不勾选综合属性; 3) 点击应用; Figure 2-2: Source File Properties Window 等效的Tcl命令是: set_property used_in_synthesis false [get_files wave_gen_pins.xdc] set_property used_in_implementation true [get_files wave_gen_pins.xdc] 二、约束命令排序(Ordering Your Constra
9、ints) 因为XDC约束是按顺寻应用的,且根据之前的顺序规则进行优化,所以要仔细检查约束的顺序。推荐的约束顺序如下,无论使用一个还是多个约束文件,都应该按照下面的顺序安排约束。 1、 推荐的约束命令顺序 ## Timing Assertions Section # Primary clocks # Virtual clocks # Generated clocks # Clock Groups # Input and output delay constraints ## Timing Exceptions Section # False Paths # Max De
10、lay / Min Delay # Multicycle Paths # Case Analysis # Disable Timing ## Physical Constraints Section # located anywhere in the file, preferably before or after the timing constraints # or stored in a separate XDC file 当使用多个约束文件时,彼此的约束定义最好不要相关,如果相关的话,就要合理安排XDC文件的顺序。约束文件是按文件的顺序读入的。 2、 新编辑的约束命令
11、的顺序 Vivado IDE约束管理器(manager)将被重新编辑的约束命令保存到它位于XDC文件的原始位置。任何新添加的约束文件将被保存到带有target属性的约束文件结尾处。在大多数情况下,当约束集带有多个约束文件时,带有target属性的约束文件通常不是最后(last)一个文件,即当打开工程时该约束文件不是最后导入的。因此,保存在硬盘中的约束可能与之前内存中的约束不通(Vivado软件打开工程时,会将约束导入内存。此时添加新约束时,该新约束被写入内存中,且是位于最后顺序的。而将约束保存到文件后,会将该约束保存到带有target属性的文件中,当下次打开工程时,约束的顺序就与之前不同了
12、)。 3、 约束文件的顺序 在没有任何IP的工程中,所有的约束文件都位于一个约束集(Constraints Set)之中。默认情况下,Vivado IDE所显示的XDC文件的顺序,就定义了工具将综合设计导入内存时读取约束文件的顺序。约束集中约束列表的最顶端约束被最先读到内存,最下边的约束被最后读入内存。该约束的顺序可以通过设置改变。 例如,下图中约束文件顺序的改变。 Changing XDC File Order in the Vivado IDE Example 等效的Tcl命令是: reorder_files -fileset constrs_1 -before [ge
13、t_files \(“\”不是Tcl命令的符号,仅表示衔接的意思,实际使用时不需要添加在Tcl命令中。) wave_gen_timing.xdc] [get_files wave_gen_pins.xdc] 许多IP核也带有一个或多个XDC文件。当工程中例化了带有XDC文件的IP核时,这些XDC文件也将在编译的过程被用到。 XDC files in the IP Sources 默认情况下,设计者的XDC文件会先于IP的约束文件被读入到内存。对于一些定义了Primary Clock的IP来说,有些特别(Execption)之处,例如Clocking Wizard。这种情况下,
14、IP XDC文件默认会被最先读入到内存中。可以通过PROCESSING_ORDER属性来控制约束文件的顺序。 l EARLY:文件会被最先读入; l NORMAL:(Default); l LATE:文件会被最后读入; 带有上述相同属性的约束文件将由Vivado IDE软件中的先后顺序决定读入的顺序。先创建的带有XDC的IP,与后创建的带有相同属性XDC的IP,先创建IP的XDC将优先读入,且不可更改顺序。 l User Constraints marked as EARLY; l IP Constraints marked as EARLY; l User Constrai
15、nts marked as NORMAL; l IP Constraints marked as NORMAL; l IP Constraints marked as LATE; l User Constraints marked as LATE; Setting the XDC File PROCESSING_ORDER Example 4、 更改约束文件的顺序 1. Select the XDC file you want to move. 2. Drag and drop the XDC file to the desired place in the list. 三
16、添加约束(Entering Constraints) Vivado IDE提供了几种方法来添加约束文件,如果没有通过文本编辑器直接编写的话,那么必须要打开一个设计数据库(即一个project)来访问constraints 窗口。 1、 将内存里的约束进行保存 在编辑约束的时候,需要打开一个设计来验证约束的正确性。当使用Vivado IDE软件GUI方式来编辑约束的时候(除了Timing Constraint Editor之外),会在TCL控制台中产生等效的XDC命令,目的是为了将约束应用到内存中。 在进行综合和实现之前,需要将内存中的约束保存到XDC文件。手动保存约束: 1、
17、click Save,或者 2、 slecet File 〉Save Constraint 2、 添加约束方法(Flow)的选择 1) User Interface Option(UI) 这种方法是指Vivado IDE Editors,例如Device、Physical、Timing或者其他方法,如Tcl Console。 在Vivado IDE管理约束的时候,不能同时编辑XDC文件。当Vivado IDE 保存内存中的内容时: A. 被修改的约束会代替原约束文件中的约束; B. 新产生的约束会被附加到target文件中; C. XDC文件中的所有手动修改内容会被覆盖;
18、a) PIN Assignment 1. Select the I/O Planning pre-configured layout. 2. Open the windows shown in the following table. b) Clock Resources Assignment 1. Select the Clock Planning pre-configured layout. 2. Open the windows shown in the following table. c) Floorplanning 1. Select the Floorplannin
19、g pre-configured layout. 2. Open the windows shown in the following table 2) Hand Edit Option 手动编辑的时候,可能需要在Tcl控制台中验证约束的语法,当关闭或者重新导入设计时,必须忽略内存中的修改。 当保存约束发生冲突时,可以选择: A. 忽略内存中的改变,或者 B. 另存新文件,或者 C. 覆盖XDC文件 Figure 2-4 :Constraints Editing Flow 3、 Timing Constraints 时序约束窗口只有在综合与实现之后才会有效。 M
20、ultiple Methods for Opening the Timing Constraints Window 约束编辑器显示内存中的时序约束,该约束要么: 1. 与约束文件中的约束相同顺序,要么 2. 与Tcl平台输入的约束命令相同顺序; 约束编辑器可以创建多种约束,但是仅仅是把约束应用到内存中。所以,需要将约束保存后,才可以记录到XDC文件中。 四、创建综合约束 1、 综合约束有三种: • RTL Attributes • Timing Constraints • Physical and Configuration Constraints RTL Attribut
21、es: 该约束必须写在RTL代码中(查看Ug901)。被应用在XDC中的RTL属性约束仅有DONT_TOUCH。 set_property DONT_TOUCH true [get_cells fsm_reg] Timing Constraints: • create_clock • create_generated_clock • set_input_delay • set_output_delay • set_clock_groups • set_false_path • set_max_delay • set_multicycle_path Physical an
22、d Configuration Constraints: 综合过程忽略该约束。 2、 RTL-Based XDC迭代 推荐:在设计第一个版本的约束文件时,可以使用简单的约束来描述顶层设计(high-level design)的需求。 在设计的该阶段,线网延时的模型仍然是不精确的。该阶段添加约束的主要目的,是在布局布线开始之前获得满足初步时序要求或者带有少量Timing-failled的网表。多数情况下,获得时序满足可能需要进行多次XDC和RTL的迭代。下图是XDC迭代的过程示意图。 编写综合约束时,下列实体是可以安全使用的: l 顶层端口(Top Level ports);
23、 l 手动例化的原语(Primitives); 在复杂设计的创建过程中,一些RTL名字丢失或者被修改了。例如: l Single-Bit寄存器的名字; l Multi-Bit寄存器的名字; l 被吸收的(absorbed)寄存器和线网(Nets); l 层级(Hierarchical)名字; a) Single-Bit寄存器的名字 默认情况下,会在原来名字上添加_reg后缀。 例如: reg wbDataForInputReg;//Vreilog Exeample wbDataForInputReg//生成的名字。 b) Multi-Bit寄存器
24、的名字 reg [13:0] validForEgressFifo;//Verilog Example validForEgressFifo_reg//生成的名字。 可以约束单比特或者全部寄存器: l validForEgressFifo_reg[0] l validForEgressFifo_reg[*] c) 被吸收的(absorbed)寄存器和线网(Nets) 如果某些寄存器或者Net因为某些原因而在网表中找不见的话,可以使用其他变量代替。 d) 层级(Hierarchical)名字 如果不强制Vivado软件保留设计的层级,那么设计文件的一些层级将会被打平(Flattened)。所以Xilinx推荐使用不带有-hierarchical的get_*命令。 % get_cells inst_A/inst_B/*_reg % get_cells inst_*/inst_B/control_reg






