XILINX时序约束使用指南笔记第一章 时序约束介绍第二章 时序约束方法第三章 时序约束原则第四章 在XST中指定时序约束第五章 在Synplify中指定时序约束方法第六章 时序约束分析第一章 时序约束介绍 基本的时序约束包括:“PERIOD Constraints”“OFFSET Constraints”“FROM:TO(Multi‐Cycle)约束”第二章 时序约束方法1,简介:2,基本的约束方法根据覆盖的路径不同,时序要求变成一些不同的全局约束。
最普通的路径类型包括:1,输入路径2,同步元件到同步元件路径3,指定路径4,输出路径XILINX的时序约束与每一种全局约束类型都有关。
最有效的方法就是一开始就指定全局约束然后再加上指定路径的约束。
在很多案例中,只要全局约束就可满足需求。
FPGA器件执行工具都是由指定的时序要求驱动的。
如果时序约束过头的话,就会导致内存使用增加,工具运行时间增加。
更重要的是,过约束还会导致性能下降。
因此,推荐使用实际设计要求的约束值。
3,输入时序约束输入时序约束包括2种“系统同步输入”“源同步输入”输入时钟约束覆盖了输入数据的FPGA外部引脚到获取此数据的寄存器之间的路径。
输入时钟约束经常用”OFFSET IN”约束。
指定输入时钟要求的最好方法,取决于接口的类型(源/系统同步)和接口是SDR还是DDR。
OFFSET IN定义了数据和在FPGA引脚抓取此数据的时钟沿之间的关系。
在分析OFFSET IN 约束时,时序分析工具自动将影响时钟和数据延迟的因素考虑进去。
这些因素包括: 时钟的频率和相位转换时钟的不确定数据延迟调整除了自动调整,还可以在与接口时钟相关的”PERIOD”约束中另外增加时钟不确定。
关于增加”INPUT_JITTER”的更多信息,参见第三章的”PERIOD Constraints”。
“OFFSET IN”与单输入时钟有关,默认情况下,OFFSET IN约束覆盖了从输入pad到内部同步元件之间的所有路径。
用于抓取那些从pad输入的数据的同步元件由指定的OFFSET IN 时钟触发。
应用OFFSET IN约束被称为”global”方法。
这是指定输入时序的最有效的方法。
系统同步输入在体统同步接口中,发送和抓取数据共用一个系统时钟。
板上的布线延迟和时钟倾斜限制了接口的工作频率。
更低的频率也会导致系统同步输入接口典型的采用SDR应用。
系统同步SDR应用例子,见图2‐1。
系统同步SDR应用中,在时钟上升沿从源器件发送数据,下一个时钟上升沿在FPGA中抓取数据。
全局”OFFSET IN”约束是对一个系统同步接口指定输入时序的最有效的方法。
用这种方法,对每一个系统同步输入接口时钟都定义了一个”OFFSET IN”约束。
这种单个约束覆盖了所有被同步元件抓取到的输入数据位的路径,这些同步元件由指定输入时钟触发。
指定输入时序:1,定义接口相关的输入时钟的时钟”PERIOD”约束;2,定义接口的全局”OFFSET IN”约束;例子理想的系统同步SDR接口的时序图见图2‐2。
全局”OFFSET IN”约束是:OFFSET = IN <value> VALID <value> BEFORE clock;在”OFFSET IN”约束中,IN <value>决定了数据一开始有效的起始时间到抓取数据的时钟沿之间的时间。
在这个系统同步例子中,数据在抓取数据的时钟沿之前5ns有效。
VALID<value> 决定了数据有效时间。
在这个例子中,数据有效时间为5ns。
对这个例子,完整的”OFFSET IN”约束和相关的PERIOD约束如下:NET”SysClk”TNM_NET = “Sysclk”;TIMESPEC “TS_Sysclk” = PERIOD”SysClk” 5ns HIGH 50%;OFFSET = IN 5ns VALID 5ns BEFORE “SysClk”;源同步输入在源同步输入接口中,会重新产生时钟,重新生成的时钟和数据从源器件从相似的路径一起被传送出去。
这个时钟然后会被用来在FPGA中抓取数据。
电路板上的线路延时和板上的时钟倾斜都不会再限制接口的运行频率了。
更高的频率会导致源同步输入接口典型的被应用为双数据速率(DDR)的应用。
典型的源同步DDR应用见图2‐3。
在时钟上升沿和下降沿都会从源器件发送数据。
全局”OFFSET IN”约束是对源同步接口指定输入时序的最有效的方法。
在DDR接口,为每一个输入接口时钟的沿都会定义OFFSET IN约束。
这些约束覆盖了输入数据位的路径,这些数据由指定输入时钟沿的触发的寄存器来抓取。
要指定输入时序必须:1,为接口相关的输入时钟,定义时钟PERIOD约束;2,为接口上升沿定义全局OFFSET IN约束;3,为接口下降沿定义全局OFFSET IN约束;例源同步DDR接口的时序图见图2‐4,接口时钟是周期为5ns占空比为50%的时钟。
数据的每一位在半个周期内都有效。
对DDR全局OFFSET IN的约束如下:OFFSET = IN<value> VALID<value>BEFORE clock RISING;OFFSET = IN<value>VALID<value>BEFORE clock FALLING;在OFFSET IN约束中,OFFSET = IN<value>决定了从抓取时钟的时钟沿到数据开始有效的时间点之间的时间段。
以此源同步输入为例,上升沿传送的数据在时钟上升沿之前 1.25ns有效。
同样下降沿传送的数据在时钟下降沿之前 1.25ns有效。
在OFFSET IN约束中,VALID<value>决定了数据的有效时间。
在这个例子中,上升沿和下降沿的数据都保持了2.5ns。
此例中,OFFSET IN和与之相关的PERIOD约束如下:NET “SysCLK” TNM_NET = “SysCLK”;TIMESPEC “TS_SysClk” = PERIOD “SysClk” 5ns HIGH 50%;OFFSET = IN 1.25ns VALID 2.5ns BEFORE “SysClk” RISING;OFFSET = IN 1.25ns VALID 2.5ns BEFORE”SysClk”FALLING;4,寄存器到寄存器时序约束寄存器到寄存器或者“同步元件到同步元件”的路径约束覆盖了内部寄存器之间的同步数据路径。
PERIOD约束包含以下方面:1,定义了时钟域的时序要求;2,分析单时钟域里的路径;3,分析相关时钟域里的所有路径4,考虑不同时钟域中所有的频率,相位和时钟不确定性的不同点。
约束同步时钟域的应用和方法有以下几种,这些策略包括:1,“自动相关同步DCM/PLL时钟域”2,“手动相关同步时钟域”3,“异步时钟域”通过允许工具自动创造DLL/DCM/PLL和输出时钟之间的关系,和手动定义外部相关时钟之间关系,所有同步跨时钟域路径都有合适的约束覆盖,和合理的分析。
使用这些方法进行PERIOD约束就免去了额外的跨时钟域约束的必要。
自动相关同步DCM/PLL时钟域时钟电路最普通的形式是下面之一:1,输入时钟连接DLL/DCM/PLL;2,输出用来作为期间内部同步路径的时钟在这个例子中,推荐对连接到DLL/DCM/PLL的输入时钟做PERIOD约束。
通过对输入时钟进行PERIOD约束,XILINX工具自动:1,自动给每一个DLL/DCM/PLL的输出时钟派生出一个新的PERIOD约束;2,决定了输出时钟域之间的时钟关系,自动分析这些时钟域自己的任何路径例输入时钟驱动DCM的电路如图2‐5;本例的PERIOD约束语法如下:NET”ClockName” TNM_NET = “TNM_NET_Name”;TIMESPEC “TS_name” = PERIOD”TNM_NET_Name” PeriodValue HIGH HighValue%;在PERIOD约束中,”PeriodValue”定义了时钟周期的有效时间。
在本例中,DCM的输入时钟周期为5ns。
”HighValue”表示时钟波形为“HIGH”在一个时钟周期中所占的百分比。
本例的语法如下:NET “ClkIn” TNM_NET = “ClkIn”;TIMESPEC “TS_ClkIn” = PERIOD “ClkIn” 5 ns HIGH 50%;基于以上给出的输入时钟PERIOD约束,DCM自动:1,为DCM输出创造2个时钟约束2,在2个时钟域之间分析性能手动相关同步时钟域在某些情况下,同步时钟域之间关系不能由工具自动指定。
例如,当相关的时钟从两个独立的引脚进入FPGA时,碰到这种情况,XILINX推荐你用下面的步骤:1,为每一个输入时钟定义PERIOD约束;2,手动定义时钟之间关系;一旦你定义了手动关系,两个同步域之间的所有路径都会被自动分析。
分析将会把所有的,频率,相位和不确定信息考虑进去。
XILINX约束系统允许使用包含时钟频率和相位传送的PERIOD约束来定义时钟域之间complex manual relationship。
如果要使用PERIOD约束来定义时钟域之间的complex manual relationship,需要:1,为主时钟定义PERIOD约束;2,以第一个PERIOD约束作为参考,为相关时钟定义PERIOD约束;两个相关的时钟从2个独立的引脚进入FPGA,见图2‐61,clk1x是主时钟2,clk2x180是相关时钟本例的PERIOD约束语法如下:NET”PrimaryClock” TNM_NET = “TNM_Primary”;NET”RelatedClock” TNM_NET = “TNM_Related”;TIMESPEC “TS_primary” = PERIOD “TNM_Primary” PeriodValue HIGH HighValue%;TIMESPEC”TS_related” = PERIOD “TNM_Related” TS_Primary_relation PHASE value;在related PERIOD定义中,PERIOD值被定义为与主时钟的一个时间单元(period)关系。
这种关系以主时钟TIMESPEC的形式表达。
在本例中,CLK2X180的频率是CLK1X的2倍,这就导致PERIOD是其一半。
在related PERIOD定义中,相位值定义了源时钟和相关时钟在上升时钟沿的时间差异。
在本例中,因为CLK2X180时钟是180度相移,所以上升沿比主时钟的上升沿晚1.25ns。