关于时序约束
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
FPGA设计中关于时序约束
2008/09/22 20:23 [FPGA/CPLD ] 关于FPGA设计中,时序约束的定义的总结说明
1.全局时序约束
1.1 PERIOD约束
用于约束同一时间域中同步逻辑单元之间的时序关系,PERIOD约束会自动处理寄存器时钟端的反相问题,即,如果相邻同步元件时钟相位取反,那么它们之间的延时将被默认PERIOD约束值的一半。
NET “net_name” PERIOD = period {HIGH|LOW} [high_or_low_time];
最小时钟周期的计算:Tclk =Tcko +Tnet +Tlogic +Tsetup -Tclk_skew; 其中,Tcko为从时钟输入到DFF输出端的时钟输出时间,Tnet为网线延时,Tlogic为同步元件之间的组合逻辑延时,Tsetup为同步元件的建立时间。
1.2 OFFSET约束
用于约束数据的建立时间和保持时间,主要是输入PAD到同步单元和同步单元到输出PAD 的时序关系
OFFSET_IN_BEFORE用于定义输入数据比有效时钟沿提前多长时间准备好,其芯片内部与输入引脚相连的组合逻辑的延时不能大于该时间,否则,输入的数据就达不到要求的建立时间。
OFFSET_IN_AFTER用于定义输入数据在有效时钟沿后多长时间到达芯片的输入引脚,其作用和BEFORE是一样的,不过BEFORE的时钟沿是AFTER的下一个沿,如果一起定义的话。
上述约束用于设定在数据输入时,保证有效时钟沿到来时,数据已经达到稳定。
OFFSET_OUT_AFTER用于定义了输出数据在有效时钟沿之后多长时间之内保持稳定,其实是定义了输出的最大的数据保持时间,芯片内部的输出延时必须小于这个值。
OFFSET_OUT_BEFORE用于定义在下一个时钟信号到来之前的某个时间,必须输出数据,以供下一级器件使用。
这些约束用于对设计输出端的数据输出进行约束,以满足下一级器件的建立时间的要求,保证下一级的采样数据是稳定可靠的。
2.特定约束
2.1 FROM_TO约束
用于定义两个逻辑组之间的时序约束,以及对两者之间的逻辑和布线延时进行控制,这两个逻辑组的定义可以是预定义也可以是用户自己定义。
通常用于约束多周期路径(Multi-Cycle),时钟无关的数据路径,False路径等。
对于组合逻辑和慢速信号逻辑的约束经常使用。
所谓多周期路径:主要的形式为,寄存器采用同一个时钟驱动,但是有些寄存器需要用使能信号来进行控制,由于使能信号的频率较低,所以,在这个路径的传输过程中,存在着多个时钟周期进行传输的情况。
对于这种情况,约束要比全局约束松,可以先进行时钟周期约束,再对这个路径进行松绑约束,用FROM-TO。
所谓多时钟域:主要的形式是寄存器的两个时钟完全独立的,可以先对每个时钟所驱动的寄存器或分组进行周期约束,然后在对两个寄存器(分组)进行FROM-TO约束。
2.2 最大延时约束MAXDELAY
用于定义特定网络上的最大延时,只能定义到网络上。
2.3 最大偏移约束MAXSKEW
SKEW用于定义同一点驱动的时钟信号经过路径传播之后,到达两个或多个终点的时间差,这个约束用于定义特定的网线上的偏移不大于某个时间。
2.4 TIG/False路径约束
用于对不需要约束的路径(即与约束无关的路径)进行说明。
推荐用这个约束来减少设计中受约束路径的数量。
对于静态时序分析中无法达到要求的情况,即slack为负值的情况,找到关键路径,主要的原因可能是,关键路径本身是一条TIG路径或是多周期路径,应该通过修改约束来改进这个问题。
如果不是这样,当延迟值在目标延迟的20%的范围内,使用synplify 的-improve 命令来重新综合优化设计,当超出20%,则需要重新修改设计,比如流水线,FSM或资源共享等方法。
2.5 SYSTEM_JITTER系统时钟抖动约束
用于定义设计中的系统时钟抖动的最大值。
3. 分组约束
3.1 TNM和TNM_NET约束
TNM和TNMNET约束都是用于用户定义新的时序约束分组。
两者的不同是TNM进行分组不可以穿越IBUF和BUFG,而TNM_NET则可以,也就是说,如果用TNM定义一个PADS 分组,只能对这个PAD进行约束,而如果使用TNM_NET约束,则会把IBUFG后面的连接网络都加入到这个约束中来。
TNM_NET约束只能用于网线上,否则被忽略。
{NET|INST|PIN} "object_name(signals_name)" TNM/TNM_NET = predefined_group or "identifier(net_name)";
3.2 TIMEGRP约束
用于使已有的分组合并,构成新的分组,或用排除的方法构成新的分组。
已有的分组包括预定义的分组和用户自己定义产生的分组。
TIMEGRP "newgrp_name" = "grp_name1" "grp_name2";
TIMEGRP "newgrp_name" = "grp_name1" EXCEPT "grp_name2";
定义受时钟沿控制的触发器分组,如RISING或FALLING沿触发的分组。
TIMEGRP "newgrp_name" = RISING/FALLING "grp_name1";
定义受门控信号控制的锁存器分组,如TRANSLO或TRANSHI的电平控制的分组TIMEGRP "newgrp_name" = TRANSLO/TRANSHI "grp_name1";
3.3 TPTHRU约束
用于定义一个或一组中间点,以便在其它时序约束定义中来进行标识,我认为有点象电路图中的网络命名。
如下
INST FF1 TNM = "start";
INST FF2 TNM = "endpt";
NET “mynet”TPTHRU=“ABC”;
TIMESPEC “TS_path" = FROM "start" THRU "ABC" TO "endpt" 30;
4.TIMESPEC
TIMESPEC是关于时序约束定义的一个基本时序相关约束,它在时序规范中作为标识符,表示本约束为时序规范。
TIMESPEC ”TSidentifier“=XXXXX XXXXX XXXXXXX
TSidentifier作为时序规范,成为TS属性定义。
PERIOD约束,FROM-TO约束等都需要使用这个格式。
标签:timequest 时序分析约束SDRAM
时序分析总结(以SDRAM 时序约束为例)
1。
时序分析就是分析前级的数据是否在后一个时钟沿的数据有效窗口里面,就是说在整个窗口内部,数据都应该保持有效,如果不满足时间窗的前端,就是setup 违例,如果不满足时间窗的后端,那么就是hold 违例;
2. 分析的基本情况是针对reg2reg 这种情况,至于pin-2-reg,给出pin 端的时间窗,来约束FPGA的su 和hd 时间,对于reg-2-pin,给出外部的时间窗,来约束FPGA 内部的tco 等参数,要约束的始终是FPGA 内部,要假定外部提要求,FPGA 内部通过一定的布局来满足;
3. 关于input min / max,output min /max 这些参数都是为了给出有效时间窗口的范围,所以切记,这些值都是以clock 为基准的,记住这个,算的时候就很容易了;
4. 基本的时序约束有:时钟约束,IO 约束,例外说明,这些都是可以通过timequest 来设置的。
所谓同步时序,寄存器在同一个时钟沿动作,所谓异步时序,寄存器不是一个时钟沿动作,还有源同步时序,就是原始clk 是一致的,但是使用的时候可能同频不同相。
可以看到,这是设计电路的固有属性,跟约束无关,现在我们要通过上面的3中约束来正确的分析这3中电路结构。
5. 明确一下,基本的分析模型,对于reg 2 reg,对于setup的分析是,source clk 和destination clk 中寻找有效沿靠得最近的两个来分析,同时满足:source clk 在前destination 在后,这样,前面的为lauch edge,后面的是latch edge,这就是setup relations 分析,注意,找这两个有效沿的时候,时钟走线延迟是不计算在内的(不然,各个寄存器离clk有远有近,这个延时都不相同,就不好找了)。
同时,如果两个沿的时间差为0,也是忽略的。
6. 平时,都是按照默认的模型来分析的,即,对于同步时序,前一个clock lauch,后一个clock latch,这是绝大多数情况。
对于其他不同频同相得时钟,都要找2个相近的沿来分析。
有时候,找到的2个沿就不是我们实际使用的latch ~ lauch 沿,这个时候就需要例外设置了。
7. 一旦setup relation的2个沿确定了,hold 的2个沿也就确定了,对于同频的时钟来讲,如果不同频,还需要找hold relation 的2个沿,在handbook 上有讲怎么找。
8.. 对于SDRAM 时序的来讲,分析好相移,最后确定了我们实际用的setup relation 和hold relation 关系如下:
也就是SDRAM clk 需要phase shift 2 ns 左右,根据
/ilove314/955999/message.aspx 所述。
以从左到右记这四个rising edge,1,2,3,4;
对于读:SDRAM clock 2 launch --> Controller clock 3 latch, 按照默认模型分析,setup relation 就是对的;
对于写:Controller clock 1 launch -> SDRAM clock 4 latch, 这时,默认的setup relation 关系是:Controller clock 1 launch -> SDRAM clock 2 latch, 这个显然是不满足的,通过多周期的例外设置来调整setup relation 如我们想要的来分析;
上面分析的是setup relation ,对于同频的clk 来讲,setup 的关系对了,hold 的关系自然也对了。
9。
上例中,sdram 的data 是根据sdram clk 来确定output max/min 的,因为在write 的时候,我们要给出的外部sdram 中reg 的time window。