核心概念:锁存点(Latch Point)与引脚测量点
理解负值 Setup/Hold 的关键在于区分 触发器的外部引脚 和其内部的 实际锁存点。
-
理想触发器模型: 我们通常想象数据(D)在时钟(CLK)上升沿 瞬间 被捕获。Setup 要求数据在 CLK 上升沿 之前 稳定一段时间(Tsu > 0),Hold 要求数据在 CLK 上升沿 之后 保持稳定一段时间(Th > 0)。
-
现实触发器结构: 实际的触发器内部由门电路(通常是传输门和反相器)构成。数据信号需要经过一些内部路径才能到达真正决定其值的主锁存器或从锁存器节点。同样,时钟信号也需要经过缓冲、反相才能驱动这些锁存器节点。
-
锁存点(Latch Point): 这是触发器内部决定数据值被捕获的 实际物理节点(例如,主锁存器的关键节点)。时钟信号到达这个点并满足其阈值时,数据值即被锁定。
-
路径延迟差异: 数据信号从 D 引脚到达锁存点的路径延迟(
Td_d2latch
)和时钟信号从 CLK 引脚到达锁存点的路径延迟(Td_clk2latch
)通常是 不同 的。这种差异是导致 Setup/Hold 时间为负的根本原因。 -
负值的含义:
-
负保持时间 (Th < 0): 表示时钟信号从 CLK 引脚传播到内部锁存点所花费的时间 (
Td_clk2latch
) 大于 数据信号从 D 引脚传播到锁存点所花费的时间 (Td_d2latch
)。这意味着,即使数据在 D 引脚上的变化发生在 CLK 引脚上的时钟沿 之后(违反了正 Hold 时间的直观要求),只要这个“之后”的程度小于|Th|
,数据在内部锁存点 相对于内部时钟到达点 仍然是稳定的,从而满足实际的保持要求。 可以理解为时钟“走得太慢”,需要数据“等一等”它。 -
负建立时间 (Tsu < 0): 表示数据信号从 D 引脚传播到锁存点所花费的时间 (
Td_d2latch
) 大于 时钟信号从 CLK 引脚传播到锁存点所花费的时间 (Td_clk2latch
)。这意味着,即使数据在 D 引脚上的变化发生在 CLK 引脚上的时钟沿 之后(违反了正 Setup 时间的直观要求),只要这个“之后”的程度小于|Tsu|
,数据在内部锁存点 相对于内部时钟到达点 仍然有足够的时间稳定下来,从而满足实际的建立要求。 可以理解为数据“走得太慢”,时钟需要“等一等”它。
-
总结:负的 Setup/Hold 时间本质上是触发器内部路径延迟差异在外部引脚测量点上的一种体现。它告诉我们,在外部引脚上观察到的数据变化和时钟变化的相对时序要求可以放宽(甚至允许数据在时钟之后变化),但这只是为了补偿内部路径延迟的不对称,确保在内部的 实际锁存点,时序要求(数据在时钟有效前稳定 Tsu_effective / 在时钟有效后稳定 Th_effective)仍然得到满足。 内部的 Tsu_effective
和 Th_effective
总是正数。
示例分析 (时钟周期 = 5ns)
示例 1:负保持时间 (Th = -0.4ns)
-
触发器参数:
-
Td_clk2latch
= 0.8ns (时钟从 CLK 引脚到锁存点的延迟 - 较长) -
Td_d2latch
= 0.4ns (数据从 D 引脚到锁存点的延迟 - 较短) -
Th_effective
= 0.2ns (锁存点实际需要的保持时间) -
计算外部引脚保持时间:
Th = Th_effective + Td_d2latch - Td_clk2latch = 0.2 + 0.4 - 0.8 = -0.2ns
。实际中可能有更复杂的建模,假设我们最终
-