请问:
a.对于一个D-FF 而言,它的setup-
time 和hold-time 是正值还是负值?为什么?
b.对于一个
电路模块(包括多个组合逻辑子模块及时序逻辑子模块)而言,它的 setup-time 和hold-time 是正值还是负值,为什么?
问题 a:
建立时间:触发器在时钟沿来到前,其数据输入端的数据必须保持不变的时间;保持时间:触发器在时钟沿来到后,其数据输入端的数据必须保持不变的时间。setup-time 和hold-time 可以是正值或负值,为什么可以是负值呢?如下图
因为 Clock 到达时刻并不等同于latch 的传输门A 关闭的时刻,这之间有一个未知的延迟时间。假设Clock 的到达时刻为传输门A 关闭、传输们B 打开的时刻。如果Data 没有在这之前足够早的时刻到达,那么很有可能内部的feedback线路上的电压还没有达到足够使得inv1 翻转的地步(Data 有slope,传输门B 打开后原来的Q 值将通过inv2 迫使feedback 保持原来的值)。
如果这种竞争的情况发生,Q 的旧值将有可能获胜,使Q 不能够寄存住正确的Data 值;当然如果feedback 上的电压已经达到了足够大的程度也有可能在竞争中取胜,使得Q 能够正确输出。和 setup time 的情况不一样,因为Clock 到达时刻并不等同于latch 的传输门A 完全关闭的时刻。
所以如果Data 没有在Clock 到达之后保持足够长的时间,那么很有可能在传输门A完全关闭之前Data 就已经变化了,并且引起了feedback的变化。如果这种变化足够大、时间足够长的话,很有可能将feedback 从原本正确的低电压拉到较高电压的电压。甚至如果这种错误足够剧烈,导致了inv1和 inv2 组成的keeper 发生了翻转,从而彻底改变了Q 的正确值,就会导致输出不正确。当然,如果这种错误电压不是足够大到能够改变keeper 的值,就不会影响到Q 的正确输出。
问题 b:
对于一个电路模块,它的 setup-time 和hold-time 是正值,因为对于建立时间:
Slack=要求时间-到达时间
对于保持时间
Slack=到达时间-要求时间