第六章-约束设计与时序分析.pdf
- 文档编号:18633090
- 上传时间:2023-08-23
- 格式:PDF
- 页数:47
- 大小:1.01MB
第六章-约束设计与时序分析.pdf
《第六章-约束设计与时序分析.pdf》由会员分享,可在线阅读,更多相关《第六章-约束设计与时序分析.pdf(47页珍藏版)》请在冰点文库上搜索。
第六章约束设计与时序分析第六章约束设计与时序分析61概述61概述对于一些普通的、低速的逻辑设计来说,在经过了ISE6设计工具的综合、优化处理之后,不用再进行时序方面的任何分析和处理基本上就可达到和满足设计要求。
然而对于高速、高性能、高密度以及多时钟信号控制的逻辑设计,仅靠ISE6的优化处理是远远不够的,而需要对设计进行时序方面的控制和处理并进行严格的时序分析,以判定所完成的设计是否达到我们的设计要求。
通常,在进行这些设计时,对时序问题作出判断和处理的越早越好。
Xilinx针对这些高端的逻辑设计,在ISE6设计工具提供了功能完善和强大的时序分析器(TimingAnalyzer),其详细的时序报告功能方便确定高速信号的路径。
通过该工具,设计者可对设计中的时序冲突以及时序约束等进行细致的检查,找到设计中的时序瓶颈,然后通过一些特定的处理方法对时序进行调整。
这些设计和分析方式我们称为时序收敛(迭代)。
ISE6设计工具所提供的主动时序收敛(ProActiveTimingClosure)技术,保证了FPGA器件的高速设计能力,从而降低总体设计成本以及整个设计流程所花费的时间。
作为构成时序收敛技术的一部分,ISE6工具中新的时序约束(TimingConstraints)提供了可编程逻辑设计中最全面的时序约束语言。
这些都进一步简化了高速设计和分析。
通常,对于复杂的设计,需要进行反复的时序分析和约束设计,即多次迭代,以满足设计的要求。
Xilinx推荐的设计流程如图6-1所示。
图6-1完整的Xilinx逻辑设计和时序收敛流程约束设计条件可以在设计文件中直接设置,也可以通过用户约束文件UCF(UserConstraintFile)、网表约束文件NCF(NetlistConstraintFile)、物理约束文件PCF(PhysicalConstraintsFile)等形式进行设置。
在Xilinx的CPLD/FPGA设计中,约束条件主要包括:
CPLD约束(CPLDFitter)-CPLD约束用于指定CPLD设计中的各类约束参数。
该约束专门用于CPLD器件,并不适用于FPGA设计。
DLL/DCM约束(DLL/DCMConstraints)-DLL/DCM约束用于指定DLL/DCM的工作模式和约束参数。
用于对DLL/DCM模块的控制。
分组约束(GroupingConstraints)-分组约束用于划分CPLD/FPGA逻辑设计中具有某种相同属性的分组(Groups)。
分组约束主要包括COMPGRP、TNM、TIMEGRP、TNM_NET、TPSYNC、TPTHRU等约束参数。
初始化约束(InitializationDirectives)-初始化约束用于对存储器ROM、RAM、寄存器、查找表的初始化参数设置。
逻辑和物理约束(Logical&PhysicalConstraints)-该约束用于对映射(mapping)和适配(fitting)流程的控制。
增加逻辑和物理约束可以有助于设计的性能能够适应最坏的情况。
该约束条件可以事先在NCF和UCF文件中设置。
映射约束(MappingDirectives)-映射约束用于指定CPLD/FPGA逻辑设计的映射(mapping)过程中执行特定的操作。
映射约束主要包括FAST、IOB、KEEP、DCI_VALUE、DRIVE、IOSTANDARD、RLOC等多个约束参数。
模块设计约束(ModularDesignConstraints)-模块设计约束用于指定模块设计(ModularDesign)过程中特定的操作。
布局约束(PlacementConstraints)-布局约束用于指定设计中逻辑单元的位置。
其中,逻辑单元主要是指ROMs、RAMs、CLBs、IOBs、BUFTs、触发器、全局缓冲器等。
布局约束主要包括BLKNM、HBLKNM、XBLKNM、LOC、PROHIBIT、RLOC、RLOC_ORIGIN等约束参数。
布线约束(RoutingDirectives)-布线约束用于控制布局布线器在布线过程中执行特定的操作。
布线约束主要包括AREA_GROUP、USELOWSKEWLINES、OPT_EFFORT、LOCK、CONFIG_MODE等约束参数。
综合约束(SynthesisConstraints)-综合约束用于控制综合工具在综合过程中执行特定的操作。
通过综合约束可以实现大部分设计约束。
时序约束(TimingConstraints)-时序约束用于指定逻辑设计中的准确时序关系。
主要包括周期(PERIOD)、偏置(OFFSET)和输入输出INPAD_TO_OUTPAD等约束参数。
本章将详细地介绍时序约束的原理和作用、以及时序约束对设计性能的改善。
我们还将对时序分析器(TimingAnalyzer)的使用和功能进行详细的描述,并通过设计的范例对如何利用分析器所生成的报告,对设计进行进一步的修改,以满足设计的要求进行阐述。
在本章中,对出现的常见时序问题,提供设计建议,以供读者参考。
对位置和区域约束设计,由于已在相关的章节中进行了描述,在此,将不再重述。
62时序约束时序约束(TimingConstraints)随着系统工作速度的不断提高,对逻辑器件的工作频率和处理速度的要求也越来越高。
器件处理速度的提高,意味着逻辑设计时,对时钟信号方面的要求和处理也变得更严格,需要通过附加约束来控制逻辑的综合、映射、布局和布线,以减小逻辑和布线的传输延时,从而提高工作频率。
一般情况下,当时钟频率低于50MHz,而且设计只有一个时钟时,不需要对设计附加约束条件。
这是因为时钟频率比较低时,设计工具经过设计的优化处理之后,都能满足设计的要求,而不需要再附加时序约束。
但是,当设计的时钟频率较高,或者设计中有复杂时序路径(如多周期路径等)时,就需要附加约束条件以确保综合、实现的结果满足用户的时序要求。
时序约束主要用来控制路径端点间的延迟路径。
路径的端点可以是引脚、寄存器、锁存器和存储器。
附加时序约束不可能以任何方式优化你的设计和改变设计网表,只能够改善设计的布局和布线。
一般情况下,一个设计的80%性能是由器件内的逻辑布局而决定的。
改善布局和布线并不意味着能够选择较短的网络延迟,它需要逻辑放置的尽可能紧密,从而减小网络时延。
不同的设计综合工具具有不同的时序约束条件、约束编辑器和布局布线策略,本章仅介绍Xilinx设计工具的时序约束特性。
Xilinx设计工具提供了多种附加时序约束方法,常用的有:
直接编辑UCF(用户约束文件)文件;从ConstraintsEditor(约束编辑器)输入;在HDL的设计源代码或原理图编辑器中附加Attribute(属性);编辑XilinxConstraintsFile(XCF)等。
设计者可以根据熟练程度,选择合适的设计方式。
无论采用何种方式,通常都会生成用户约束文件(UCF)。
一般地,以直接编辑文本格式的UCF文件用得最多,这种方式几乎支持所有的约束条件。
利用ConstraintsEditor实际上也是编辑UCF文件,只是它提供了一个图形化的界面,方便设计者使用。
但有些约束条件在约束编辑器中不能使用,请设计者留意。
时序约束主要包括周期约束(FFs-to-FFs寄存器到寄存器)和偏移约束(IPAD-to-FFs输入脚到寄存器和FFs-to-OPAD寄存器到输出脚)以及路径约束(IPAD-to-OPAD输入到输出)。
如图6-2所示。
除了图中所示的四种约束以外,对于多时钟域的复杂设计,需对时钟域内的同步元件进行分组,然后对这些组进行分组约束。
对一些特定的路径,需要专门的约束。
通过附加约束条件可以使综合布线工具调整映射和布局布线算法,使设计达到时序要求。
在进行时序约束时,一般分为二个步骤:
确定需要约束的路径端点。
定义延迟的长度。
图6-2时序约束示意图621周期约束周期约束(PERIOD约束约束)PERIOD周期约束是一个基本时序和综合约束,它附加在时钟网线上,时序分析工具根据PERIOD约束检查时钟域内所有同步元件的时序是否满足要求。
同时PERIOD约束会自动处理寄存器时钟端的反相问题,即如果相邻同步元件时钟相位相反,那么它们之间的延迟将被默认限制为PERIOD约束值的一半。
周期约束的作用范围如图6-2所示。
通常,逻辑器件内部所能达到的最高运行频率取决于同步元件本身的建立保持时间和以及同步元件之间的逻辑和布线延迟(PERIOD),如图6-3所示。
在PERIOD约束中支持输入时钟抖动INPUT_JITTER的设置。
在进行附加周期(PERIOD)约束之前,首先要对电路的时钟周期有一定的估计,这样才不会附加过紧或过松的约束。
约束过松,性能达不到要求。
约束过紧会增加布局布线的难度和时间,实现的结果也不一定理想,会出现约束过紧性能反而变差的情况。
有时,不合理的时序约束甚至造成实现的流程中断。
图6-3时钟周期的估算时钟的最小周期为:
TCLK=TCKO+TNET+TLogic+Tsetup-TCLK_SKEW其中TCLK_SKEW为时钟的传输偏移:
TCLK_SKEW=TCD2-TCD1在图6-3中,TCKO为时钟输出时间。
TNET为网线延迟。
TLogic为同步元件之间的组合逻辑延迟。
Tsetup为同步元件的建立时间。
周期约束可以通过约束编辑器来设置,也可以利用文本格式的UCF文件来书写。
其语法结构为:
TIMESPEC“TSidentifier”=PERIOD“TNM_reference”periodHIGH|LOWhigh_or_low_time;INPUT_JITTERNET“net_name”PERIOD=periodHIGH|LOWhigh_or_low_time;INPUT_JITTERTIMESPECTSidentifier=PERIODtimegroup_nameTSidentifier*or/factorPHASE+|-phase_valueunits;在上述的表达式中,TIMESPEC是一个基本时序相关约束,它在时序规范(timingspecification)中作为标识符,表示本约束为时序规范。
TSidentifier包括字母TS和一个标识符identifier,它们共同构成一个时序规范,称为TS属性定义。
TNM_reference用来说明周期约束的元件组。
HIGH|LOW关键词指出时钟周期里的第一个脉冲是高电平还是低电平,而high_or_low_time为该脉冲的持续时间,缺省单位为ns。
如果不提供high_orlow_time参数,那么时钟信号的占空比为50。
INPUT_JITTER为输入时钟的抖动值,缺省单位为ps。
在表达式中,用于定义驱动寄存器时钟输入的NET上PERIOD约束。
在表达式中,用于指定源时钟的附加约束。
timegroup_name为时序分组名。
factor指出两者周期的倍数关系,是一个浮点数。
phase_value指出两者之间的相位关系,为浮点数。
例一:
TIMESPEC“TS_master”=PERIOD“master_clk”50HIGH30;INPUT_JITTER50上式中,附加时序约束作用于master_clk网络上。
周期为50ns,高电平为30ns,输入时钟的抖动为50ps。
例二:
(指定源时钟的约束)指定主时钟为clk0,周期为10.0ns。
TIMESPEC“TS01”=PERIODclk010.0ns;定义相移180(超前主时钟)的时钟信号为clk180的周期约束。
TIMESPEC“TS02”=PERIODclk180TS01PHASE+5.0ns;定义相移90(滞后主时钟)的时钟信号为clk90的周期约束。
TIMESPEC“TS03”=PERIODclk90TS01PHASE-2.5ns;定义主时钟的1/2,并相移180(超前主时钟)的时钟信号为clk180的周期约束。
TIMESPEC“TS04”=PERIODclk180TS01/2PHASE+2.5ns;622偏移约束偏移约束(OFFSET约束约束)使用偏移约束可以为综合、实现工具指出输入数据到达的时刻,或者输出数据稳定的时刻。
从而在综合、实现过程中调整布局布线过程。
使正在开发的FPGA/CPLD的输入建立时间以及下一级电路的输入建立时间满足要求。
偏移约束规定了外部时钟和数据输入输出引脚之间的时序关系,只用于与PAD相连的信号,不能作用于内部信号。
如图6-2和图6-4所示。
偏移约束包括OFFSET_IN_BEFORE、OFFSET_IN_AFTER、OFFSET_OUT_AFTER和OFFSET_OUT_AFTER等4种约束,属于基本时序约束。
图6-4偏移约束的作用范围示意图偏移约束的语法结构:
OFFSET=IN|OUT“offset_time”unitsVALIDBEFORE|AFTER“clk_name”TIMEGRP“group_name”;OFFSET=IN|OUT“offset_time”unitsBEFORE|AFTER“clk_name”TIMEGRP“group_name”;其中IN|OUT说明约束的是输入还是输出;“offset_time”为FPGA/CPLD引脚数据变化与有效时钟沿之间的时间差;BEFORE|AFTER说明该时间差出现在有效时钟沿的前面还是后面;“clk_name”为时钟名;TIMEGRP“group_name”定义了约束的触发器组,缺省时约束clk_name驱动的所有触发器。
输入偏移OFFSET_IN_AFTER和OFFSET_IN_BEFORE约束:
OFFSET_IN_AFTER定义输入数据在有效时钟沿之后多长时间到达芯片的输入引脚,这样也可以得到芯片内部延迟的上限,从而对与输入引脚相连的组合逻辑进行约束。
OFFSET_IN_BEFORE定义输入数据比有效时钟沿提前多长时间准备好,于是芯片内部与输入引脚相连的组合逻辑的延迟就不能大于该时间,否则有效时钟沿到来时,数据还没有稳定,采样将发生错误。
输入偏移的时序关系如图6-5所示。
图中TP为时钟周期。
图6-5输入偏移时序关系示意图根据图6-4和图6-5所示,保证可靠输入信号处理的条件,即综合、实现工具需要满足:
TDATA+TSU-TCLKTP-TIN_AFTERTDATA+TSU-TCLKTIN_BEFORE例三:
NET“DATA_IN”OFFSET=IN20.0BEFORE“CLK_SYS”;这个约束表明,DATA_IN信号必须在时钟信号上升沿到达时钟输入脚20ns之前,到达数据输入脚。
例四:
NET“DATA_IN”OFFSET=IN30.0AFTER“CLK_SYS”;这个约束表明,DATA_IN信号不能在时钟信号上升沿到达时钟输入脚30ns之后,到达数据输入脚。
输出偏移OFFSET_OUT_AFTER和OFFSET_OUT_BEFORE约束:
OFFSET_OUT_AFTER规定了输出数据在有效时钟沿之后多长时间之内保持稳定,其芯片内部的输出延迟必须小于这个值。
OFFSET_OUT_BEFORE指出下一个时钟信号到来之前必须输出数据,以供下一级芯片使用。
根据这个数据对设计输出端的逻辑布线进行约束,以满足下一级的建立时间要求,保证下一级采样的数据是稳定的。
输出偏移的时序关系如图6-6所示。
图中TP为时钟周期。
图6-6输出偏移时序关系示意图根据图6-4和图6-6得出,保证信号可靠输出和下一级可以正确地采样数据的条件,即综合、实现工具需要满足如下关系:
TQ+TCO+TCLKTOUT_AFTERTQ+TCO+TCLKTP-TOUT_BEFORE例五:
NET“Q_OUT”OFFSET=OUT15.0BEFORE“CLK_SYS”;这个约束表明,由CLK_SYS钟控的Q_OUT输出信号必须在下一个时钟信号的上升沿到达时钟输入脚15ns之前,离开FPGA芯片。
例六:
NET“Q_OUT”OFFSET=OUT35.0AFTER“CLK_SYS”;这个约束表明,由CLK_SYS钟控的Q_OUT输出信号必须在当前时钟上升沿35ns之后,一直保持在FPGA芯片的输出脚上。
623特定约束特定约束附加约束的一般策略是首先附加整体约束,例如:
全局PERIOD、偏移OFFSET等,然后对局部的电路附加特定的约束,这些特定的约束通常比整体约束松。
通过在可能的地方尽量放松约束可以提高布线通过率,减小布局布线的时间。
当然,也有可能在局部附加比较紧的约束,这也需要通过特定约束来实现。
FROM_TO约束FROM_TO用来定义两个逻辑组之间的时序约束以及对两者之间的逻辑和布线延迟进行控制。
这两个组可以是预定定义的如:
输入输出脚(PADS)、寄存器(FFS)、锁存器(LATCHES)、乘法器(MULTS)、嵌入式处理器(CPUS)、高速IOs(MGT)(HSIOS)、存储器(RAMS),或用户定义的。
用户可以使用TNM_NET、TNM和TIMEGRP定义组。
该约束通常用于约束多周期路径(Multi-cycle)、时钟无关的数据路径、False路径。
UCF文件的语法结构为:
TIMESPEC“TS_name”=FROM“group1”TO“group2”value;其中group1、group2分别为路径的起点和终点,value为延迟时间,缺省值为ns,可以是具体数值或表达式。
图6-7所示为五种使用预定义FROM_TO路径约束。
包括输入脚到寄存器路径约束TS_P2S、同步元件之间的约束TS_C2S、输出寄存器到引脚的约束TS_C2P、输入脚到输出脚之间的约束TS_P2P和存储器到输出脚的约束TS_R2P。
图6-7FROM_TO的五种约束作用范围示意图这五种约束的语法结构分别为:
TIMESPECTS_P2S=FROMPADSTOFFS25;TIMESPECTS_C2S=FROMFFSTOLATCHES30;TIMESPECTS_C2P=FROMLATCHESTOPADS10;TIMESPECTS_P2P=FROMPADSTOPADS23;TIMESPECTS_R2P=FROMRAMSTOPADS25;FROM_TO约束的一个重要应用是对慢速逻辑的约束。
在有些设计中,局部电路的约束可以比全局约束松,这时一般的做法是首先附加全局约束,然后再使用FROM_TO等语句对局部电路附加较松的约束。
多周期(MULTI-Cycle)路径和多时钟域约束多周期路径和多时钟域约束也是一种特定的约束。
通常用于比全局约束松的场合。
多周期路径主要表现形式为:
寄存器采用同一个时钟驱动,但是有些寄存器需要用使能信号来控制,如图6-8所示的粗线部分。
在这个设计中,由于使能信号的频率较低,可以先进行全局的周期约束为20ns,然后在FF2到FF4寄存器之间采用多周期路径约束为40ns来松绑。
多周期路径约束的语法结构与FROM_TO相同。
图6-8多周期路径约束作用范围示意图图6-9所示,为多时钟域的附加约束。
在这种设计中,二个时钟是完全独立的,没有任何联系。
处理方法为:
先对每个时钟所驱动的寄存器或分组进行周期约束,然后再对二个寄存器(或分组)进行FROM_TO约束。
图6-9多时钟域约束示意图最大延迟MAXDELAY约束MAXDELAY约束用来定义特定网线上的最大延时,其语法结构如下:
NET“net_name”MAXDELAY=valueunits;其中value为延迟时间,units为单位,可以是us、ns、ms或ps之一。
最大偏移MAXSKEW约束MAXSKEW是高级时序约束,MAXSKEW约束用于定义某网线上的偏移不大于设置的数值。
Skew(偏移)用于说明同一点驱动的时钟信号经过路径传播后,到达二个或多个终点的时间差。
如图6-10所示。
在该设计中,时钟输入到Block1的延迟为Ta=2ns,输入到Block2的延迟为Tb=4ns,该约束定义时钟信号在网线上的Skew(偏移)为Tb-Ta=2ns。
图6-10最大偏移MAXSKEW约束示意图MAXSKEW约束的语法结构为:
NET“net_name”MAXSKEW=allowable_skewunits;False(虚假)路径约束False(虚假)路径约束也称为TIG(TimingIgnore)约束,用来对不需要约束的路径即无关的路径进行说明。
对需要进行约束的路径指明False(虚假)路径约束后,时序分析时从该网线开始的路径将被忽略。
Xilinx推荐利用该约束来减少设计中受约束路径的数量。
图6-11中,由于三态缓冲器不是路径的端点,在这些总线上不用进行约束,可以用TIG(TimingIgnore)约束来取消三态总线上的所有约束。
图6-11TIG(TimingIgnore)约束对总线结构约束控制示意图TIG(TimingIgnore)约束的语法结构为:
NET“net_name”TIG;系统时钟抖动SYSTEM_JITTER约束Xilinx设计工具支持SYSTEM_JITTER的约束设置。
该约束用来规定设计中的系统时钟抖动SYSTEM_JITTER的最大值。
系统时钟抖动取决于设计的各种条件,例如:
在同一时刻发生信号反转的寄存器和输入输出脚数量等。
该抖动迭加在设计中的时钟上。
在对系统设计进行时序分析时,这是一个比较关键的参数。
其语法结构为:
SYSTEM_JITTER=valuens;624分组约束分组约束一个设计往往包括大量的触发器、寄存器和RAM等元件。
对每个元件、每条路径分别进行约束,显然是不科学和不经济的。
为了方便附加约束需要把它们分成不同的组,然后根据需要对这些组分别附加不同的约束。
这也是最常用的方法。
采用分组约束设计后,将减少约束路径,从而减少设计和软件优化的处理时间。
特别适用于大型设计。
分组约束可以分成预定义分组、用户定义分组。
预定义分组包括:
PADS(所有的输入输出脚)、FFS(所有的寄存器)、LATCHES(所有的锁存器)、RAMS(所有的存储器)、MULTS(所有的乘法器)、CPUS(所有的嵌入式处理器)等。
TNM约束使用TNM(TimingName)约束可以选出构成一个分组的元件,并赋予一个名字,以便给它们附加约束。
这些元件可以是预定义的、也可以是用户定义的。
比如:
FFS、RAMS、LATCHES、PADS、BRAM_PORTA、CPUS等。
关键字RISING(上升沿)和FALLING(下降沿)可用于该约束中。
TNM约束不能穿过IBUF和ClockBUF。
TNM约束可以附加在Net(网络)、Primitive(原型)、Macro(宏)以及Macro/Primitive的PINS(引脚)上。
TNM的语法结构为:
NET|INST|PIN”object_name”TNM=predefined_groupor“identifier”;其中object_name为NET、INST或PIN的名称,predefined_group为预定义分组,identifier为分组的名称。
TNM的语法结构中支持通配符(*)和(?
)。
例如:
TIMESPECTS01=FROM:
FFS(macro?
):
TO:
FFS(data*);TIMESPECTS02=FROM:
FFS(data*):
TO:
PADS(pa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第六 约束 设计 时序 分析