为什么会有保持时间,是因为实际的触发器不是理想的触发器,在时钟的上升沿时刻,把输入打入触发器,使输出等于输入。而是要延时一段时间之后,输出才会等于输入,因为触发器也是由基本门电路构成,而门电路本身是有延时的。所以在这一段时间之内,输入数据是不能变的,否则会使输出的值发生错误,产生亚稳态问题。
以下图为例:
Data1在clk1时刻打入触发器1,通过触发器1的本身延时Tcell,在加上后面的组合逻辑延时Tlogic,成为数据data2.在clk2时刻,data2打入触发器2,但是data2数据要保持Thold的时间,才会使触发器2的输出正确。而在clk2时刻,新的data1数据又打入了触发器1,然后通过Tcell和Tlogic时间成为新的data2,这时候,就要保证在新的data2数据产生的时候,旧的data2数据已经传输了,即旧的data2数据要满足保持时间。所以保持时间不大于Tcell和Tlogic的时间。
所以有下面的公式:
Thold <= Tlogic(shortest) + Tcell
这里组合逻辑要用最短的延时,上次分析建立时间说过,组合逻辑的时间不是固定的,会由输入的不同而延时不同。但是逻辑延时会介于最长延时和最短延时之间。这里用最短的延时,是因为最短的延时,对于保持时间是最坏的情况。我们分析时序的时候,都是要分析电路在最坏的情况下的时序分析。用最短的延时,就保证了data1数据跑到data2的最短时间大于保持时间。
同样,用什么参数来衡量保持时间是否满足了。这里就用建立时间裕度来衡量。公式就是:
为正的话,就说明建立时间是满足的,否则就说明建立时间违背了。
以上,是认为时钟是没有偏移的,就到达触发器1和触发器2的时钟是同时到达的,但是实际中,两个是不会同时到达的,会有一个latency的时间延迟。触发器2的时钟要比触发器1的时钟晚latency时间到达。
如下图:
不存在latency的时候,clk2时刻,data2保持Thold时间即可。存在latency,也就是clk2延迟了latency时间,那么相当于data2数据就要保持住Thold+Tlatency的时间。而新的data1数据成为新的data2数据的时间依然为Tcell+Tlogic(shortest)。
所以就有下面的公式:
可以看出,有了时钟延时,对保持时间是有削弱影响的,因为减小了Tlatency的时间。
这时候,建立时间裕度就为:
为正表示符合建立时间。
上面分析的是触发器2的时钟比触发器1的时钟是晚到达,但是也有可能触发器2的时钟比触发器1的时钟早到达的情况。
在这种情况下,就用uncertainty来表示时钟2相对于时钟1的延时。当然这里uncertain可正可负。
不过在分析的时候,uncertainty认为是正的,因为这种情况是最坏情况。因为如果uncertainty是负的,即时钟2比时钟1要先到达,那么data1数据成为新的data2数据时,旧的data2数据早就已经传出去了,这样就不会出现建立时间的违背了。
可看出,此时建立时间公式和建立时间裕度和上面的情况是一样的。
有时候,寄存器是直接通过输入的,不是通过其他寄存器的输出进入输入的。
如下图:
输入数据为data1,通过输入延时Tinput_delay和组合逻辑延迟Tlogic到达数据data2.
和之前分析的原理是一样的,不过只是将Tinput_delay替换之前的Tcell。
所以就有上面的两个公式:
这样,就把保持时间也给搞定了,下一步,就要开始进行时序约束了。。。