这几天经常看到有关数字电路中建立时间(setup time)、保持时间(holdup time)以及延迟时间(delay)的讨论。自己也高不清楚,查了相关的资料,总算了解了一些。
首先:建立时间和保持时间都是器件要求的特性。其中建立时间是器件输入端在时钟信号有效沿到来前,要求输入信号稳定不变的时间。保持时间是器件输入端要求输入信号在时钟信号有效沿到来后保持稳定不变的时间。如果输入信号不满足建立时间和保持时间的要求,就可能导致数据锁存错误。
延迟时间是器件本身或布线的物理特性,其含义是信号从器件或布线经过所需的时间。
这里主要讨论器件的延迟时间。通常器件的延迟时间由两部分组成。一个是触发器输出响应时间(tffpd)。可以理解为触发器输出在clk有效沿到来后的时间内发生变化, 之后稳定,也可以理解输出延迟。另一个触发器输出的变化经过组合逻辑元件所需的附加时间,一般是组合逻辑延迟(tcomb)。
如下图所示:
再来解释两个概念:
建立时间容限和保持时间容限。
所谓建立时间容限是指器件允许的安全的建立时间长度范围。同样保持时间也就是器件允许的安全的保持时间长度范围。一般来说建立时间容限和保持时间容限都大于等于0。
根据这个要求,如上图所示,就有以下约束:
tclk = tffpd + tcomb + 建立时间容限 + tsetup
所以建立时间容限 = tclk - tffpd(max) - tcomb(max) - tsetup >=0
tsetup <= tclk - tffpd (max)- tcomb(max)
再来看保持时间容限
首先对于数据接收端来说,任何时钟沿采样的数据,都是发送端前一时钟周期发送的数据。发送端可能每个时钟周期都要发送数据,那么对于接收端来说,任何一个时钟沿后一段时间,数据线上的数据都会被发送端第二次发送的数据改变,所以保持时间容限其实是由于下一个时钟节拍上的数据引起的。
信号在时钟信号有效沿跳变,但真正到达输入端的的跳变发生在时钟信号有效沿后的tffpd + tcomb时刻。根据器件的保持时间要求,输入必须保持一定时间的稳定,所以tholdup <= tffpd(min+tcomb(min)。保持时间容限则 = tffpd(min) + tcomb(min) - tholdup。
对于器件来说建立时间和保持时间越短越好。