第6章约束与时延分析本章主要内容约束的基本概念管脚约束时序约束约束的分析方法静态时延分析6.1约束的目的约束的终极目的就是为了设计达到所要实现的功能,主要有如下几个方面的作用。管脚位置锁定及电气标准设定。提高设计的工作频率。获得正确的时序分析报告。6.2管脚约束及电气标准设定管脚约束是CPLD/FPGA的基础之一。管脚约束主要有三种方式:一是采用各家公司的集成开发环境来实现管脚约束二是设计专门的管脚约束文件三是采用注释的方式在代码中自动锁定6.2.1管脚约束文件不同的厂商支持不同的管脚约束文件,如Lattice所采用的管脚约束文件为.lpf文件,Xilinx支持的管脚约束文件为.ucf文件,而Altera所使用的管脚约束文件为.qsf文件。Xilinx公司的管脚约束文件.ucf文件的语法规则:通用规则:.ucf文件对于大小写敏感,也就是是说同一单词的大小写不同表示不同的含义,标识符必须与代码中的名字一致。但是约束中的关键字对大小写不敏感。语句以分号结尾,一个语句可以多行表述。语句之间不分先后次序,不过建议管脚约束顺序与代码中管脚列表顺序一致。采用“#”或者“”的方式来进行注释基本语法例如:通配符在约束语句中可以使用“*”,“?”来作为通配符。“*”代表任何的字符串,而“?”则表示一个字符。这样的表示方法可以用来对一组信号进行约束。如:{NET|INST|PIN}fullnameconstraint;NETI_PAL_32KHZLOC=A8|IOSTANDARD=LVCMOS33|SLEW=FAST;NETDATA_?DRIVE=8;6.2.2代码注释约束不同的厂家有不同的代码注释约束方式,而且代码注释约束的方式只针对于特定的综合工具以Lattice的ispLEVER集成开发环境来具体说明怎样进行代码注释约束。相关的技术文档和网站,如:管脚锁定关键字:LOC当采用Examplar综合工具的时候,它的基本语法如下:当采用Synplicity综合工具进行综合的时候,它的基本语法是://examplarattributePinnameLOC[Pin#]pinTypePinName/*synthesisLOC=[Pin#]*/;pinTypePinName/*synthesisLOC=[Pin#]*/;需要注意的是,采用synplicity综合工具的时候,注释需要写在“;”里面,而且注释和信号声明中不能有其他的注释,否则无效。管脚类型设定关键字:IO_TYPES采用examplar综合工具的时候,它的基本语法如下:采用Synplicity综合工具的时候,它的基本语法如下://examplarattributePinNameIO_TYPESType/*synthesisIO_TYPES=Type*/管脚驱动电流设定关键字:DRIVE采用examplar综合工具的时候,它的基本语法如下:采用Synplicity综合工具的时候,它的基本语法如下:电流驱动强度与管脚类型设定要直接的关系,不同的管脚类型有不同的驱动电流。另外驱动电流只针对于输出而言,对于输入是无所谓驱动电流的。//examplarattributePinNameDRIVEValue/*synthesisDRIVE=Value*/管脚输出斜率设定关键字:SLEWRATE采用examplar综合工具的时候,它的基本语法如下:采用Synplicity综合工具的时候,它的基本语法如下:管脚上拉模式设定关键字:PULLMODE有四种模式,分别为上拉(UP)、下拉(DOWN)、保持(KEEPER)和无(NONE)。采用examplar综合工具的时候,它的基本语法如下://examplarattributePinNameSLEWRATEFAST/SLOW/*synthesisSLEWRATE=FAST/SLOW*///examplarattributePinNamePULLMODETYPE采用Synplicity综合工具的时候,它的基本语法如下:管脚OD设定关键字:OPENDRIVE有两种方式:开启(ON)、关闭(OFF)。采用examplar综合工具的时候,它的基本语法如下:采用Synplicity综合工具的时候,它的基本语法如下:/*synthesisPULLMODE=TYPE*///examplarattributePinNameOPENDRAINON/OFF/*synthesisOPENDRAIN=ON|OFF*/节点预留设定如果两个或者两个以上节点在CPLD/FPGA里面的输入信号相同,并且整个处理过程和方式都一致,那么在综合工具中就会被等效成一个节点而被自动优化,而这样可能与设计的初衷不相符合,因此需要采用节点预留设定的方式,当综合软件解析到这样的注释的时候,就将“忠诚地”按照代码方式处理,而不会将“冗余”的节点优化。采用examplar综合工具的时候,它的基本语法如下:采用Synplicity综合工具的时候,它的基本语法如下://examplarattributeNODENamePRESERVE_SIGNALTRUE//examplarattributeNODENameNOCLIPON//examplarattributeNODENameNOMERGEONwireNodeName/*synthesisSYN_KEEP=1NOCLIP=ONNOMERGE=ON*/6.3时序约束的基本概念时序约束是指路径之间的约束,任何一条路径都有起点和终点,最重要的是,路径是不能穿过触发器的CPLD/FPGA至少有三种不同的基本路径:一是触发器到触发器之间的路径;一是从输入端口到内部触发器之间的路径;一是从内部触发器到输出端口之间的路径。时序约束有几个重要的基本概念:建立时间、保持时间、时钟到输出延时、传播延时等等。图6–1简单的时序模型6.3.1路径Clock-to-setup路径Clock-to-setup路径是我们常见到的时序模型,一般用来描述CPLD/FPGA内触发器之间的延时。图6–2时序模型示意图QQSETCLRDREG1QQSETCLRDREG2逻辑和布线延时clk图6–3时序逻辑波形示意图路径的延时包括:源端触发器的时钟端到输出端的延时、逻辑和布线延时、时钟的布线延时以及建立时间,通过计算可以读出最小的时钟周期和最高的时钟频率。Clock-to-PAD路径我们常见的时序模型之一,可以称之为输出模型。任何一个CPLD/FPGA在系统中都不是单独存在的,而CPLD/FPGA的时序不仅仅只是内部的时序模型,同样它可以驱动下一级芯片,从而产生一个新的时序模型图6–4Clock-to-PAD路径图6–5Clock-to-PAD路径波形图QQSETCLRD逻辑和布线延时clkPADCLKTcoTpdTobufValiddata从系统层面来看,Clock-to-PAD路径是整个系统中路径延时的一部分,要计算整个路径延时和最小的时钟周期还需要考虑信号在PCB上的走线延时、飞行时间以及下一级接收芯片的输入时序模型。从CPLD/FPGA层面上来看,它包括时钟端到触发器输出端延时、逻辑和布局布线延时、输出缓冲延时等等。当对Clock-to-PAD路径进行时序约束时,需要电路设计工程师、CPLD/FPGA工程师和布局布线工程师共同决定信号在Clock-to-PAD路径的延时、信号在PCB板上的延时以及接收端芯片可承受的延时容限各为多少,最后以文档的形式确定时序约束。PAD-to-Setup路径图6-6是另外一种常见的时序模型,也叫做输入模型。图6–6PAD-to-Setup路径QQSETCLRD逻辑和布线延时clkPAD图6–7PAD-to-Setup路径波形图从CPLD/FPGA层面来看输入模型的路径延时包括了输入缓冲延时、逻辑及布局布线延时以及建立时间;从系统角度来看,整条路径的延时还需要包括上一级芯片的输出模型延时以及PCB走线延时和信号的飞行时间,因此要确定对此路径进行时序约束,需要召集电路设计工程师和布局布线工程师一起讨论最后决定此路径的时序约束。CLKValidTibufTpdTsuValidPathsEndingatClockPinofFlip-Flops此路径是指时钟信号从源端到达各个具体触发器的时钟端的路径。在CPLD/FPGA中,设计工程师都推荐采用全局时钟来驱动触发器,但是尽管采用全局时钟,时钟到达触发器之间还是有一段延时时间,这段时间在计算时延的时候必须考虑进去。图6–8PathsEndingatClockPinofFlip-FlopsQQSETCLRD逻辑和布线延时clk图6–9PathsEndingatClockPinofFlip-Flops波形图clkClk_FFPADtoPAD路径图6-10表示为一条纯组合逻辑的路径,从芯片输入的管脚开始,经过任意级的组合逻辑电路,然后从另外一个输出管脚输出。图6–10PADtoPAD路径图6–11PADtoPAD路径波形图逻辑和布线延时TibufTpdTobuf整条路径的延时分为输入延时、输出延时以及中间的逻辑和布局布线延时。如果放在整个系统层面来看,严格来说不能称之为路径,因为这个时延路径的源端和目的端都不在这个芯片里面,而在上一级或者上上级的芯片中和下一级的芯片中。6.3.2时序约束参数建立时间建立时间就是指数据必须在时钟有效沿到来之前稳定的最小时间长度。当建立时间不够的时候,触发器采集不到数据,或者采集到的数据是错误的数据,从而导致整个时序逻辑的错误。任何一个时序逻辑芯片都会存在建立时间这个概念,一般使用Tsu来表示图6–12计算建立时间的时序模型图QQSETCLRDQQSETCLRD数据延时数据延时数据延时clkdata时钟延时MicroTsu保持时间保持时间是指当时钟信号有效沿到来之后,数据必须保持的最小的稳定时间,一般采用Th来表示。当保持时间不够的时候,数据传输将出现紊乱,系统将出现亚稳态的问题。时钟到输出延时当时钟到达一个触发器并成功地采样到数据端的数据的时候,并不会立即就表现在输出端上,这之间会有一段延时时间,叫做时钟到输出延时时间,一般用Tco表示。传播延时数据从寄存器出来以后,到达下一级寄存器之间的逻辑和布线延迟,就叫做传播延时,一般使用Tpd表示。Fmax对于芯片内部而言,它是寄存器到寄存器之间的延时,而对于整个芯片而言,还需要考虑进入芯片的建立保持时间以及输出芯片的Tco。把它取反就是最小时钟周期的概念。图6–13计算Fmax的时序模型示意图QQSETCLRDQQSETCLRDBAQclk源端外部输入延时目的端外部输出延时CE芯片内部的Fmax的计算方法如下:整个系统时钟频率Fmax的计算方法为:max1()cosufBECTTmax1{__,__,__}fMaxcycleinputclkcycleinclkcycleoutputclkSlackSlack用来衡量一个设计是否满足时序——正的slack表示满足时序,而负的slack则表示不满足时序。如果slack为负,数据保持时间不够,主要是由于数据路径延时大于时钟延时而造成的。从建立时间来来考虑,最坏的情况是slack是一个时钟周期减去时钟抖动的最大绝对值;而从保持时间来考虑,最坏的情况是slack一个时钟周期加上时钟抖动的最大绝对值。对于异步电路来说,由于采用不同的时钟信号进行驱动,是指两个不同时钟的有效边沿之差____slackrequiredclockcycleactualclockcycle__()copdsuslackslackclockperiodTTT__slackclockperiod时钟偏斜与抖