XILINX 时序约束使用指南中文翻译.docx
《XILINX 时序约束使用指南中文翻译.docx》由会员分享,可在线阅读,更多相关《XILINX 时序约束使用指南中文翻译.docx(16页珍藏版)》请在冰豆网上搜索。
XILINX时序约束使用指南中文翻译
XILINX时序约束使用指南笔记
(UG612)
第一章时序约束介绍
第二章时序约束方法
第三章时序约束原则
第四章在XST中指定时序约束
第五章在Synplify中指定时序约束方法
第六章时序约束分析
第一章时序约束介绍
基本的时序约束包括:
“PERIODConstraints”
“OFFSETConstraints”
“FROM:
TO(Multi-Cycle)约束”
第二章时序约束方法
1,简介:
2,基本的约束方法
根据覆盖的路径不同,时序要求变成一些不同的全局约束。
最普通的路径类型包括:
1,输入路径
2,同步元件到同步元件路径
3,指定路径
4,输出路径
XILINX的时序约束与每一种全局约束类型都有关。
最有效的方法就是一开始就指定全局约束然后再加上指定路径的约束。
在很多案例中,只要全局约束就可满足需求。
FPGA器件执行工具都是由指定的时序要求驱动的。
如果时序约束过头的话,就会导致内存使用增加,工具运行时间增加。
更重要的是,过约束还会导致性能下降。
因此,推荐使用实际设计要求的约束值。
3,输入时序约束
输入时序约束包括2种
“系统同步输入”
“源同步输入”
输入时钟约束覆盖了输入数据的FPGA外部引脚到获取此数据的寄存器之间的路径。
输入时钟约束经常用”OFFSETIN”约束。
指定输入时钟要求的最好方法,取决于接口的类型(源/系统同步)和接口是SDR还是DDR。
OFFSETIN定义了数据和在FPGA引脚抓取此数据的时钟沿之间的关系。
在分析OFFSETIN约束时,时序分析工具自动将影响时钟和数据延迟的因素考虑进去。
这些因素包括:
时钟的频率和相位转换
时钟的不确定
数据延迟调整
除了自动调整,还可以在与接口时钟相关的”PERIOD”约束中另外增加时钟不确定。
关于增加”INPUT_JITTER”的更多信息,参见第三章的”PERIODConstraints”。
“OFFSETIN”与单输入时钟有关,默认情况下,OFFSETIN约束覆盖了从输入pad到内部同步元件之间的所有路径。
用于抓取那些从pad输入的数据的同步元件由指定的OFFSETIN时钟触发。
应用OFFSETIN约束被称为”global”方法。
这是指定输入时序的最有效的方法。
系统同步输入
在体统同步接口中,发送和抓取数据共用一个系统时钟。
板上的布线延迟和时钟倾斜限制了接口的工作频率。
更低的频率也会导致系统同步输入接口典型的采用SDR应用。
系统同步SDR应用例子,见图2-1。
系统同步SDR应用中,在时钟上升沿从源器件发送数据,下一个时钟上升沿在FPGA中抓取数据。
全局”OFFSETIN”约束是对一个系统同步接口指定输入时序的最有效的方法。
用这种方法,对每一个系统同步输入接口时钟都定义了一个”OFFSETIN”约束。
这种单个约束覆盖了所有被同步元件抓取到的输入数据位的路径,这些同步元件由指定输入时钟触发。
指定输入时序:
1,定义接口相关的输入时钟的时钟”PERIOD”约束;
2,定义接口的全局”OFFSETIN”约束;
例子
理想的系统同步SDR接口的时序图见图2-2。
全局”OFFSETIN”约束是:
OFFSET=INVALIDBEFOREclock;
在”OFFSETIN”约束中,IN决定了数据一开始有效的起始时间到抓取数据的时钟沿之间的时间。
在这个系统同步例子中,数据在抓取数据的时钟沿之前5ns有效。
VALID决定了数据有效时间。
在这个例子中,数据有效时间为5ns。
对这个例子,完整的”OFFSETIN”约束和相关的PERIOD约束如下:
NET”SysClk”TNM_NET=“Sysclk”;
TIMESPEC“TS_Sysclk”=PERIOD”SysClk”5nsHIGH50%;
OFFSET=IN5nsVALID5nsBEFORE“SysClk”;
源同步输入
在源同步输入接口中,会重新产生时钟,重新生成的时钟和数据从源器件从相似的路径一起被传送出去。
这个时钟然后会被用来在FPGA中抓取数据。
电路板上的线路延时和板上的时钟倾斜都不会再限制接口的运行频率了。
更高的频率会导致源同步输入接口典型的被应用为双数据速率(DDR)的应用。
典型的源同步DDR应用见图2-3。
在时钟上升沿和下降沿都会从源器件发送数据。
全局”OFFSETIN”约束是对源同步接口指定输入时序的最有效的方法。
在DDR接口,为每一个输入接口时钟的沿都会定义OFFSETIN约束。
这些约束覆盖了输入数据位的路径,这些数据由指定输入时钟沿的触发的寄存器来抓取。
要指定输入时序必须:
1,为接口相关的输入时钟,定义时钟PERIOD约束;
2,为接口上升沿定义全局OFFSETIN约束;
3,为接口下降沿定义全局OFFSETIN约束;
例
源同步DDR接口的时序图见图2-4,接口时钟是周期为5ns占空比为50%的时钟。
数据的每一位在半个周期内都有效。
对DDR全局OFFSETIN的约束如下:
OFFSET=INVALIDBEFOREclockRISING;
OFFSET=INVALIDBEFOREclockFALLING;
在OFFSETIN约束中,OFFSET=IN决定了从抓取时钟的时钟沿到数据开始有效的时间点之间的时间段。
以此源同步输入为例,上升沿传送的数据在时钟上升沿之前1.25ns有效。
同样下降沿传送的数据在时钟下降沿之前1.25ns有效。
在OFFSETIN约束中,VALID决定了数据的有效时间。
在这个例子中,上升沿和下降沿的数据都保持了2.5ns。
此例中,OFFSETIN和与之相关的PERIOD约束如下:
NET“SysCLK”TNM_NET=“SysCLK”;
TIMESPEC“TS_SysClk”=PERIOD“SysClk”5nsHIGH50%;
OFFSET=IN1.25nsVALID2.5nsBEFORE“SysClk”RISING;
OFFSET=IN1.25nsVALID2.5nsBEFORE”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”PeriodValueHIGHHighValue%;
在PERIOD约束中,”PeriodValue”定义了时钟周期的有效时间。
在本例中,DCM的输入时钟周期为5ns。
”HighValue”表示时钟波形为“HIGH”在一个时钟周期中所占的百分比。
本例的语法如下:
NET“ClkIn”TNM_NET=“ClkIn”;
TIMESPEC“TS_ClkIn”=PERIOD“ClkIn”5nsHIGH50%;
基于以上给出的输入时钟PERIOD约束,DCM自动:
1,为DCM输出创造2个时钟约束
2,在2个时钟域之间分析性能
手动相关同步时钟域
在某些情况下,同步时钟域之间关系不能由工具自动指定。
例如,当相关的时钟从两个独立的引脚进入FPGA时,碰到这种情况,XILINX推荐你用下面的步骤:
1,为每一个输入时钟定义PERIOD约束;
2,手动定义时钟之间关系;
一旦你定义了手动关系,两个同步域之间的所有路径都会被自动分析。
分析将会把所有的,频率,相位和不确定信息考虑进去。
XILINX约束系统允许使用包含时钟频率和相位传送的PERIOD约束来定义时钟域之间complexmanualrelationship。
如果要使用PERIOD约束来定义时钟域之间的complexmanualrelationship,需要:
1,为主时钟定义PERIOD约束;
2,以第一个PERIOD约束作为参考,为相关时钟定义PERIOD约束;
两个相关的时钟从2个独立的引脚进入FPGA,见图2-6
1,clk1x是主时钟
2,clk2x180是相关时钟
本例的PERIOD约束语法如下:
NET”PrimaryClock”TNM_NET=“TNM_Primary”;
NET”RelatedClock”TNM_NET=“TNM_Related”;
TIMESPEC“TS_primary”=PERIOD“TNM_Primary”PeriodValueHIGHHighValue%;
TIMESPEC”TS_related”=PERIOD“TNM_Related”TS_Primary_relationPHASEvalue;
在relatedPERIOD定义中,PERIOD值被定义为与主时钟的一个时间单元(period)关系。
这种关系以主时钟TIMESPEC的形式表达。
在本例中,CLK2X180的频率是CLK1X的2倍,这就导致PERIOD是其一半。
在relatedPERIOD定义中,相位值定义了源时钟和相关时钟在上升时钟沿的时间差异。
在本例中,因为CLK2X180时钟是180度相移,所以上升沿比主时钟的上升沿晚1.25ns。
本例的约束语法如下:
NET”Clk1X”TNM_NET=“Clk1X”;
NET“Clk2X180”TNM_NET=“Clk2X180”;
TIMESPEC“TS_Clk1X”=PERIOD“Clk1X”5ns;
TIMESPEC“TS_Clk2X180”=PERIOD”Clk2X180”TS_Clk1X/2PHASE+1.25ns;
异步时钟域
异步时钟域是指那些源和目的时钟频率或者相位关系不同的时钟域。
因为时钟不相关,所以无法决定setup和hold时钟分析的最终关系。
鉴于此,XILINX推荐使用合适的异步设计技术来确保能够成功抓取数据。
合适的异步设计技术的例子是用FIFO来抓取异步时钟域之间的传输数据。
如果没有特别要求,可以不用考虑时钟路径评论或相位关系,而在封闭的区域中约束最大数据路径延迟。
XILINX约束系统允许不用考虑源和目的时钟的频率和相位关系来约束最大数据路径延迟。
这个要求用带”DATAPATHONLY”关键词的FROM-TO约束来指定。
不用考虑源和目的时钟频率和相位关系的最大路径延时约束如下:
1,为源同步元件定义时钟组;
2,为目的同步元件定义时钟组;
3,用带”DATAPATHONLY”关键词的FROM-TO在两个时钟组之间定义最大数据路径延时;
例子
两个不相关的时钟从外部2根独立的管脚进入FPGA如下图
1,CLKA是源时钟
2,CLKB是目的时钟
这个例子的语法如下:
NET“CLKA”TNM_NET=FFS“GRP_A”;
NET”CLKB”TNM_NET=FFS”GRP_B”;
TIMESPECTS_Example=FROM“GRP_A”TO”GRP_B”5nsDATAPATHONLY;
5,输出时序约束
输出时序覆盖了,从FPGA内部寄存器到FPGA外部管脚之间的数据路径。
OFFSETOUT约束指定了输出时序。
指定输出时序要求的最好方式取决于type(源/系统同步)和接口的SDR/DDR。
OFFSETOUT定义了从FPGA发送的数据的最大允许时间。
输出延时路径从FPGA的输入时钟管脚开始,通过输出寄存器到FPGA的数据管脚。
见图2-8。
当分析OFFSETOUT约束时,时序工具自动将影响时钟延迟和数据路径的内部因素考虑进去。
这些因素包括:
1,时钟的频率和相位变化
2,时钟的不确定性
3,数据路径延迟调整
系统同步输出
系统同步输出接口中,一个共同的系统时钟既用来传输也用来抓取数据。
因为这个接口使用一个共同的系统时钟,FPGA只发送数据。
如果必须约束这些路径,全局OFFSETOUT约束是指定系统同步接口输出时序的最有效的方式。
这个单约束覆盖了所有从寄存器输出的数据的路径,这些寄存器是由指定的输入时钟触发的。
要指定这些输出时序需:
1,为输出时钟定义时钟名称(TNM)来创建个时钟组,这个组包含了所有由输入时钟触发的输出寄存器。
2,定义接口的全局OFFSETOUT约束。
例
系统同步SDR输出接口的时序图见图2-10。
此例中的数据必须在输入时钟沿最长5ns之后有效。
系统同步接口的全局OFFSETOUT语法如下:
OFFSET=OUTvalueAFTERclock;
OFFSETOUT约束中,OFFSET=OUT决定了从FPGA输入端口时钟上升沿到FPGA输出端口数据开始有效的最大时间。
在此系统同步例子中,输出数据最多在输入时钟边沿的5ns之后有效。
本例,完整的OFFSETOUT约束如下:
NET”ClkIn”TNM_NET=“ClkIn”;
OFFSET=OUT5nsAFTER“ClkIn”;
源同步输出
源同步输出接口内会重新生成时钟,新生成的时钟和数据一起从FPGA送出。
接口的性能主要由系统噪声和新生成的时钟和数据位之间的倾斜限制。
在本接口中,从输入时钟边沿到输出数据有效开始,这段时间没有输出数据位之间的倾斜重要,在大部分的例子中,可以不约束它。
全局OFFSETOUT约束是对源同步接口指定输出时序的最有效的方法。
在DDR接口,输出接口时钟的每一个沿都指定了OFFSETOUT约束。
这些约束覆盖了所有又触发器传输的数据位的所有路径,这些触发器由指定输出时钟沿触发。
欲指定输入时序需:
1,为输出时钟定义个时钟名(TNM)来创建一个时钟组,这个组包含了所有由输出时钟触发的寄存器;
2,为接口时钟上升沿定义全局OFFSETOUT约束;
3,为接口时钟下降沿定义全局OFFSETOUT约束;
例子
理想的源同步DDR接口时序图见图2-12。
在OFFSETOUT约束中,OFFSET=OUT决定了从输入时钟端口的上升沿到FPGA输出端口数据开始有效之间的最大时间。
当从OFFSETOUT约束忽略掉的时候,报告输出总线倾斜的约束变成了report-onlyspecification。
关键词REFERENCE_PIN定义重新生成的输出时钟作为参考点,而输出数据管脚倾斜的报告就是根据这个参考点生成的。
对于本例,时钟上升沿和下降沿的完整的OFFSETOUT约束如下:
NET“CLKIn”TNM_NET=“ClkIn”;
OFFSET=OUTAFTER“ClkIn”REFERENCE_PIN“ClkOut”RISING;
OFFSET=OUTAFTER“ClkIn”REFERENCE_PIN“ClkOut”FALLING;
6,时序异常
用输入,寄存器-寄存器,和输出时序的全局约束,或许可以约束大部分的路径。
在特定的例子中,全局约束规则不适合某些特定的少数路径。
异常的最普遍的形式是:
“FalsePaths”
“Multi-CyclePaths”
FalsePaths
在某些情况下,如果你确定某些路径不会影响时序性能,那么你就会想将这些路径从时序约束中移除出去。
最常用的方法是用带有timingignore(TIG)关键词的FROM-TO约束。
这允许你去:
1,在一个源时钟组中指定一组寄存器
2,在一个目的时钟组中指定一组寄存器
3,自动将这些时钟组之间的所有路径从分析中移除掉
要用这种方法来指定timingignore(TIG)约束,定义:
1,源时钟组的一组寄存器
2,目的时钟组的一组寄存器
3,带有TIG关键词的FROM-TO约束移除两个时钟组之间的路径
例子
假设两个寄存器之间的路径并不影响设计的时序,希望将这条路径移除掉。
见图2-13
两个时钟组之间定义一个TIG的通用语法如下:
TIMESPEC“TSid”=FROM“SRC_GRP”TO”DST_GRP”TIG;
在FROM-TOTIG例子中,SRC_GRP定义了一组源寄存器,这组寄存器是这条时序路径的起点。
DST_GRP定义了一组目的寄存器,这组寄存器是这条时序路径的终点。
所有从SRC_GRP开始到DST_GRP结束的路径都被忽略了。
本例的语法如下:
NET“CLK1”TNM_NET=FFS“GRP_1”;
NET“CLK2”TNM_NET=FFS”GRP_2”;
TIMESPECTS_Example=FROM“GRP_1”TO“GRP_2”TIG;
多周期路径
在多周期路径中,数据以低于PERIOD定义的时钟频率从源同步元件传输到目的同步元件。
当同步元件用一个共同的时钟使能信号作为门控时,上面这种情况最常见。
通过定义一个多周期路径,这些同步元件的时序约束将比默认的PERIOD约束宽松。
多周期路径约束可以考虑PERIOD约束标识符(TS_clk125)×时钟周期的数量(TS_clk125*3)。
执行工具然后就能够合理的分配执行这些路径的优先级。
指定一组多周期路径的共同方法是用时钟使能信号定义一个时钟组。
这允许你:
1,用一个公用的时钟使能信号定义一个包含了源和目的同步元件的时钟组。
2,自动将多周期约束应用到这些同步元件之间的所有路径
如果要用这种方法指定FROM:
TO(多周期)约束,需要定义:
1,公用时钟域的PERIOD约束;
2,基于公用时钟使能信号的一组寄存器;
3,描述新的时钟需求的FROM:
TO(多周期)约束
例子
图2-14显示了一种假想的情况。
在这种情况下两个寄存器共用一个时钟使能信号。
在本例中,时钟使能信号的切换频率是参考时钟频率的一半。
在不同时钟组之间定义多周期路径的通用语法如下:
TIMESPEC“TSid”=FROM“MC_GRP”TO“MC_GRP”;
在FROM:
TO(多周期)的例子中,MC_GRP定义了一组由公用时钟驱动的寄存器。
所有从MC_GRP开始到MC_GRP结束的路径,可以应用多周期时序要求。
进出MC_GRP的路径可以用合适的PERIOD约束来分析。
本例约束的语法如下:
NET”CLK1”TNM_NET=“CLK1”;
TIMESPEC“TS_CLK1”=PERIOD“CLK1”5nsHIGH50%;
NET”Enable”TNM_NET=FFS“MC_GRP”;
TIMESPECTS_Example=FROM“MC_GRP”TO“MC_GRP”TS_CLK1*2;
第三章时序约束原则
本章讨论了时序约束的根本,包括:
“PERIODConstraints”
“OFFSETConstraints”
“FROM:
TO(Multi-Cycle)Constraints”
为了更好的理解约束系统子系统,讨论了组元件的能力。
这一章包括:
“约束系统“
“约束优先级“
“时序约束“
“时序约束语法“
“建立时序约束“
约束系统
这部分讨论了约束系统,包含以下内容:
“约束系统简介“
“DLL/DCM/PLL/BUFR/PMCD元件“
“用TNM/TNM_NET创建时序组“
“组约束“
约束系统简介
约束系统是解析和理解设计的物理和时序约束的执行工具(NGDBUILD)部分。
约束系统有如下特性:
1,从NCF,XCF,EDN,EDF,EDIF,NGC,NGO等文件中解析出约束信息并将这些信息送到其它执行工具。
2,验证设计的约束是否正确
3,将必要的特性应用到相应的元件上
4,为不正确的约束生成错误和告警信息
DLL/DCM/PLL/BUFR/PMCD元件
本节讨论了DLL/DCM/PLL/BUFR/PMCD元件,包含以下方面内容:
1,“DLL/DCM/PLL/BUFR/PMCD元件简介”
2,“转变条件”
3,“DCM输出的新的PERIOD约束”
4,“同步元件”
5,“用NETPERIOD分析”
6,“PHASE关键词”
7,“用PHASE控制DLL/DCM/PLL”
DLL/DCM/PLL/BUFR/PMCD元件简介
如果对输入时钟网络指定TIMESPECPERIOD约束,那么输出时钟要用新PERIOD约束。
为了产生目的元件时序组,在转换时候,每一个时钟修改模块的时钟输出脚被给定:
1,一个新的TIMESPECPERIOD约束
2,一个相应的TNM_NET约束
新的TIMESPECPERIOD约束是基于时钟修改模块的基础上修改的。
转变:
1,考虑到时钟输出的相位关系因素;
2,为PERIOD要求的值设置合适的乘数或除数
转换条件
当时钟修改模块的CLKIN管脚有TIMESPECPERIOD约束且满足下面条件时候,会产生转换:
1,当与PERIOD约束相关的组刚好被用在一个PERIOD中
2,与PERIOD约束相关的组没有被用在其它的时序约束中,包括FROM:
TO(多周期)或者OFFSET约束。
3,与PERIOD约束相关的组与其它的用户组定义无关
DCM输出的新PERIOD约束
如果“转换条件“满足了,TIMESPEC“TS_clk20”=PERIOD“clk20_ep”20nsHIGH50%;约束翻译成了下面的约束,下面的约束是基于图3-1的时钟结构的。