FPGA设计之时序约束


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 约束等都需要使用这个格式。


相关文档

FPGA设计中关于时序约束
FPGA设计中的约束时序
如何在FPGA设计环境中加时序约束
在FPGA设计环境中加时序约束
FPGA设计之时序约束总结
FPGA基础之时序设计
FPGA的时序约束
在FPGA设计环境中加时序约束的技巧
FPGA时序约束
FPGA时序约束的几种方法
电脑版