FPGA开发中建立时间和保持时间的深度解析
一、概念定义建立时间(Setup Time):时钟上升沿到来前,数据必须保持稳定的最小时间窗口。确保寄存器在采样时刻能捕获到有效数据,避免因数据未稳定导致采样错误。
保持时间(Hold Time):时钟上升沿到来后,数据必须保持稳定的最小时间窗口。防止数据在采样后立即变化,导致寄存器内部电路状态紊乱(如亚稳态)。图1 建立和保持时间传输的数据必须在时钟上升沿的建立时间和保持时间内保持稳定,数据才会被锁存,时钟沿与建立时间和保持时间之间的关系如图1所示。图2是一个寄存器传输的时序电路,输入数据data1和data2会在时钟的上升沿被分别锁存到reg_2和reg_l的输出端,然后这两个数据分别经过各自的路径到达与门的输入端,它们与运算后信号传送到下一级寄存器reg_3的输入端,对应它们上一次被锁存后的下一个时钟上升沿,reg_3的输入端数据被锁存到输出端。图2 寄存器输入传输时序电路如图3所示,clk表示时钟源clock发出的时钟波形,它要分别到达源寄存器regl、reg2以及目的寄存器reg3, 它们所经过的时间延时是不一样的。因此看到图3中时钟到达reg3的波形clk_r3相对于基准时钟clk的波形会略有一些延时。reg1out和reg2out分别是数据datal 和data2被锁存到reg2和reg1 寄存器的波形,reg3in则是reg1out和reg2out的波形经过走线延时和门延时后到达reg3 输入端的波形,而reg3out则是clk_r3的上升沿采样到reg3in数据后,在寄存器输出端的最终波形。图3 建立时间和保持时间都满足要求的波形在图3的波形中,可以看到clk_r3的每个上升沿前后各有一条虚线,前一条虚线到clk_r3 时钟上升沿的这段时间即建立时间,clk_r3 时钟上升沿到后一条虚线的这段时间即保持时间。在这段时间内数据不能变化,必须保持稳定。在这个波形中,reg3in的数据在建立时间和保持时间内没有任何变化,因此可以稳定地将reg3in的数据锁存到reg3的输出reg3out中。在传输中,我们认为数据的建立时间和保持时间都是满足要求的。如图4所示,同样的信号,但我们发现reg3in 在clk_r3的建立时间内发生变化,导致clk_r3 上升沿锁存到的reg3in数据是不确定的,那么随后的reg3out 值输出也会处于一个不确定状态。比如第一个时钟周期,原本reg3in 应该是稳定的低电平,但是由于整个路径上的延时时间过长,导致reg3in在clk_r3的建立时间内数据还未能稳定下来, 在建立时间内电平正处于从高到低的变化,就是不稳定的状态,导致的后果就是reg3out 的最终输出不是确定的状态,可能出现亚稳态,而不是原本期望的低电平。再来看看保持时间违规的情况,如图5所示,这次是数据传输得太快了,原本应该下一个时钟周期到达clk_r3 的数据竟然在clk_r3的前一个时钟周期的保持时间还未过去就来到了。因此,它导致的最终结果也是后端输出的reg3out 处于不确定状态。前面出现的建立时间或保持时间违规的情况,都会导致数据的误采样,引起功能问题。传输数据在时钟锁存沿的建立时间和保持时间内必须是稳定的,这是时序分析中最基本的结果。图 4 建立时间不满足的波形图5 保持时间不满足的波形二、如何处理建立时间/保持时间不满足情况建立时间不足:数据到达寄存器输入端的时间过晚,在时钟沿前仍处于跳变状态(如信号传输路径过长)。保持时间不足:数据更新过快,在时钟沿后立即变化(如组合逻辑延时过短)。
维度建立时间优化方法保持时间优化方法
逻辑设计拆分长组合逻辑路径(流水线设计)、关键路径打拍插入缓冲器(Buffer)增加路径延时、优化布线
时序约束用 XDC/SDC 指定时钟周期与最大路径延时用set_min_delay强制设置最小路径延时
工具辅助使用 FPGA开发工具(如 Vivado)的时序分析报告定位瓶颈通过时钟树均衡(CTS)减少时钟偏移影响
建立时间约束:
[*]
[*]
set_false_path -from -to # 忽略跨时钟域伪路径set_max_delay -setup 4ns -from -to # 最大路径延时保持时间约束:
[*]
[*]
set_min_delay -hold 1ns -from -to # 最小路径延时set_clock_groups -asynchronous -group -group # 异步时钟分组注释:本文有学习FPGA时序约束与分析相关知识
页:
[1]
