设置时间和保持时间 - 掌握 VLSI 计时的基本原理

设置时间和保持时间 - 掌握 VLSI 计时的基本原理

设置时间和保持时间是数字电路中两个最重要的时序约束:

  • 设置时间是数据必须在时钟边沿之前可靠到达的时间,
  • 保持时间是数据必须在时钟边沿之后保持的时间。

如果这两个条件不能同时满足,电路可能会进入不稳定状态并发生故障。

개요:通过飞机到达类比理解设置和保持

考虑一下机场的乘客登机系统。飞机准时起飞(时钟边缘)。乘客登机前需要满足两个条件:

  1. 设置时间条件:乘客必须在飞机起飞前 30 分钟(设置时间)到达站台。如果您在飞机起飞前 30 分钟到达,而登机口已经关闭,那么很不幸,您就来不及登机了。 这是违反设置规定的行为。
  2. 停留时间条件:乘客不得在飞机降落后 5 分钟(停留时间)内突然离开飞机。

在 VLSI 设计中也适用完全相同的原则。为了在时钟沿准确捕获触发器的输入数据,必须同时满足这两个时间窗口。

Setup Time:基本概念

设置时间的定义

设置时间 (tsu) 是指触发器的输入数据在时钟沿之前必须保持稳定的最短时间。

例如,考虑一个设置时间为 1.2ns 的触发器。如果时钟上升沿正好发生在 10.0 ns,则输入数据必须在 10.0 ns - 1.2 ns = 8.8 ns 之前到达。

计算设置松弛

在静态定时分析 (STA) 中,设置松弛的计算方法如下:

Setup Slack = Required Time - Arrival Time
= (Clock Time - Setup Time) - Data Arrival Time

  • Required Time:数据应到达的最后时间(时钟边沿 - 设置时间)
  • Arrival Time:数据实际到达的时间
  • 正松弛:松弛可用(安全)
  • 负松弛: 违规

为何会发生设置违规

在以下情况下会发生设置违规:

  • 组合逻辑路径中的延迟过多
  • 时钟周期过短
  • 数据路径中缺乏缓冲器或反相器导致信号延迟过大
  • 工艺、电压和温度 (PVT) 变化导致延迟增加

保持时间:基本概念

保持时间的定义

保持时间 (th) 是触发器的输入数据在时钟边沿 之后必须保持稳定的最短时间。当数据在时钟边沿捕获并存储到内部存储器时,输入必须保持不变。

例如,考虑一个保持时间为 0.8 ns 的触发器。如果时钟上升沿发生在 10.0 ns,则输入数据不应在 10.0 ns + 0.8 ns = 10.8 ns 之间发生变化。

计算保持松弛

保持松弛的计算方法与设置时略有不同:

Hold Slack = 到达时间 - 所需时间
= 数据到达时间 - (时钟时间 + 保持时间)

  • 所需时间:数据可以更改的最短时间(时钟边沿 + 保持时间):上一个时钟周期的数据到达时间
  • 正松弛:松弛(安全)
  • 负松弛:违规

Mechanism of a hold violation

当组合路径的延迟太短时,就会发生违规保持。这听起来有些矛盾,但请考虑以下情况:

如果上一个时钟周期的数据过早到达下一个触发器,那么该触发器的输入将在当前时钟沿后立即发生变化。

具体来说:

  • 前一个 FF 的输出变化很快(组合延迟很短)
  • 当前 FF 的输入在保持时间窗口内发生变化
  • 当前 FF 可以捕获新旧值之间的中间状态
  • 结果:稳定状态→收敛延迟增加→定时问题

Real-world 示例:设置时间分析

  • 所需时间:5.0000ns → 表示时钟周期为 5ns
  • 到达时间:5.3274ns → 数据实际到达时间为 5.3274ns
  • 欠缺:-0.3274ns → 设置违规!

如何修复设置违规

  1. 减少组合逻辑延迟:
    size_cell u3 BUF4X8 # 现有 BUF2X2 → BUF4X8
    insert_buffer -place_buffers -cell BUF4 path_name
  2. 增加时钟周期: 将时钟从 5ns 改为 6ns
  3. 添加流水线: 将组合逻辑分解为多个阶段

如何修复保持违规

  1. 添加延迟缓冲器
  2. 更改驱动单元:将小单元 (BUF1X) 更改为大单元,以限制速度
  3. 重新定位组合逻辑:通过增加物理距离来增加延迟
  4. 增加负载:为路径增加电容负载

Frequently Asked Questions (FAQ)

1.设置时间和保持时间是否会同时被违反:

是的,有可能。例如,由于工艺电压温度 (PVT) 变化或时钟抖动,它们可能同时发生。

2.设置和保持哪个更重要?"

两者同等重要。违反设置规定会导致数据无法正确捕获和存储错误值,而违反保持规定则会导致收敛延迟和因可变状态而产生的不稳定性。这两者都会导致电路故障。"

然而,当芯片问世时,保持时间更为重要。定时违规可以通过增加时钟周期来解决,但保持时间违规却无计可施。

3.缩短时钟周期是否总是只导致设置时间被违反?"

它主要导致设置时间被违反,但在特殊情况下保持时间也会发生变化。时钟偏斜、抖动、时钟树中的传播延迟等都会产生影响,因此需要对两者进行验证。

4.究竟什么是隐态?"

隐态是指触发器的内部状态停留在既非 0 也非 1 的不稳定中间状态的一种现象。当发生设置或保持时间违规时,就会出现隐态,并且可能需要难以预测的时间才能收敛或根本无法收敛。在现代电路中,这是最危险的时序问题。

5.有负保持时间的触发器吗?"

有。现代技术节点中的某些触发器可以具有负保持时间,这对设计人员来说是一个优势。负保持时间意味着在时钟沿之后,数据可以在一定程度上安全地发生变化。但是,设置时间可能更为严格。

고급 개념:时钟偏移和定时

Effects of Clock Skew

在实际芯片设计中,时钟信号不会在完全相同的时间到达所有触发器。这被称为时钟偏移:

  • 正偏移:来自源 FF 的时钟先于目标 FF 到达→设置较差,保持较好
  • 负偏移:来自目标 FF 的时钟先于源 FF 到达→设置较好,保持较差

因此,时钟树设计是设置/保持优化的重要组成部分。

PVT(工艺、电压、温度)变化

现实世界中的芯片制造并不完美:工艺变化会改变晶体管的特性,电压下降会发生,温度变化会改变延迟:

设计应始终在最坏的 PVT 条件下进行验证。PrimeTime 对边角(每个 PVT 组合)的 STA 进行静音,以确保在所有情况下都能满足要求。

Summary

  • Setup Time:数据必须在时钟边沿之前到达的最短时间。松弛 = 所需时间 - 到达时间;必须为 0
  • 保持时间:时钟边沿后数据必须保持稳定的最短时间。松弛时间 = 到达时间 - 所需时间;必须为 0
  • PrimeTime:使用 report_timing、check_timing、report_qor 和分析路径验证设置/保持违规
  • 解决方案:设置会减少延迟,保持会增加延迟。两者都与时钟树设计密切相关
  • Metastable:设置/保持违规的最坏结果。它可能导致芯片完全失常,因此必须删除

Enjoyed this article?

Get deep-dive semiconductor analysis and career insights delivered weekly. Free forever — no paywall, no upsell. Funded by sponsorships with a strict editorial firewall (Editorial Standards).

Work with me

Consulting · Collaboration · Support

Paid 1:1 technical consulting, speaker invitations, collaboration proposals, or just want to say thanks — all welcome.

View options →
VLSI Korea Free forever · No paywall · Weekly semiconductor insights from practicing engineers
Support