这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » FPGA » FPGA设计中关于时序约束(转)

共2条 1/1 1 跳转至

FPGA设计中关于时序约束(转)

高工
2010-11-30 14:43:33     打赏

FPGA设计中关于时序约束
关于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约束等都需要使用这个格式。




关键词: 设计     关于     时序     约束     定义     用于     时钟     数据         

菜鸟
2010-12-11 20:19:33     打赏
2楼

好东西  学习了  多谢!


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
站长统计