2. 时序基础概念:建立时间、保持时间、时钟偏斜

做 AUX 通道握手时序分析,绕不开三个老朋友:建立时间、保持时间、时钟偏斜。很多人觉得这是数字电路基础课的事,实际调试时才发现,绝大多数握手失败都跟这三个参数没算对有关系。我当年调第一块 FPGA 板的时候,aux 信号老是随机丢包,查了三天,最后发现是保持时间违规。嗯,从那以后我再也不敢小看这几个概念了。

我们直接看干货。先搞清楚每个参数到底是啥,再看它们怎么配合。

2.1 建立时间(Setup Time)

定义:在时钟有效沿到来之前,数据输入必须保持稳定的最短时间。

讲人话就是:

  • 时钟上升沿来了,你希望触发器能抓到正确的 D 信号。
  • 但 D 信号不能拖到沿来了才稳定,它得提前到。
  • 这个 "提前到" 的最小时间,就是 tsetup。

为什么要有这个要求?触发器内部有个采样窗口,窗口里数据必须稳定,否则输出可能是亚稳态——说白了就是"介于0和1之间"的奇怪值。我在项目中实测过,亚稳态会直接导致 AUX 握手状态机跳错,然后整个链路死掉。

我的习惯:设计里一定会留 20% 的建立时间裕量。比如芯片要求 2ns,我实际让数据提前 2.4ns 到达。这不是浪费,是给温度、电压波动留口饭。

公式表达:

tdata_arrival ≤ tclk + tclk_skew – tsetup

你要是把等号右边算出来,再跟左边实际数据到达时间比较,就知道有没有违规了。

2.2 保持时间(Hold Time)

定义:在时钟有效沿之后,数据输入必须继续保持稳定的最短时间。

这个参数很多人容易忽略。你想想看,时钟沿来了,触发器开始锁存数据,但数据在沿后立马变掉——那锁存的是啥?还是错的。

保持时间违规在高速设计中很常见,尤其是数据路径太短、时钟偏斜又大的时候。

我曾经遇到过一块板子,常温下完全正常,一进高低温箱就随机出错。最后定位到是保持时间在高温下变小了(器件参数漂移),但时钟偏斜却增大了(PCB 温度梯度),两者叠加导致保持时间余量变负。压箱底的教训啊,从那以后我每次做时序分析,保持时间余量一定留足 0.3ns 以上。

注意:保持时间违规不能通过降低频率来解决。降低时钟频率只影响建立时间,不影响保持时间。你跑 1Hz 保持时间该违规还是违规。

公式:

tdata_hold ≥ thold + tclk_skew

这里面 tclk_skew 是关键——我们马上讲。

2.3 时钟偏斜(Clock Skew)

定义:同一时钟信号到达不同触发器的时间差。

实际 PCB 上,时钟从源端到各个触发器的路径长度不可能完全一样,走线长度差、负载差异、温度不均匀都会引入 skew。正 skew(目的时钟晚于源时钟)可以帮你一把,负 skew 则会把你坑惨。

  • 正 skew:目的时钟比源时钟晚到 → 建立时间裕量变大,保持时间裕量变小。
  • 负 skew:目的时钟比源时钟早到 → 建立时间裕量变小,保持时间裕量变大。

我习惯把时钟偏斜类比成排队:正 skew 就像你朋友在队伍后面慢慢走,你多了时间准备;负 skew 就像他插队到你前面,搞得你手忙脚乱。

参数 核心关注点 常见违规原因 我的避坑做法
建立时间 数据必须提前稳定 路径太长、组合逻辑深 流水线切分、降低扇出
保持时间 数据不能变太快 路径太短、时钟偏斜大 加缓冲器、增大数据延迟
时钟偏斜 时钟到达各触发器的时间差 走线不等长、负载不均 等长布线、树结构优化

2.4 三者如何协同?

拿一个标准触发器到触发器路径来说:

  1. 源时钟沿到达源触发器 → 数据从 Q 端出发。
  2. 经过组合逻辑(门延迟 + 走线延迟)→ 到达目的触发器的 D 端。
  3. 目的时钟沿到达目的触发器 → 采样 D 端数据。

这里面,建立时间要求数据在目的时钟沿之前 tsetup 时间到达;保持时间要求数据在目的时钟沿之后 thold 时间之内不变。时钟偏斜则会同时影响这两个约束的裕量。

我一般画一个简化时序图给团队新人解释,下面这个 SVG 图你可以直接收藏。

建立时间、保持时间与时钟偏斜的时序关系 源时钟 沿1 沿2 目的时钟 沿2'(偏斜 Δ) 正 skew 数据 有效数据 下一数据 tsetup thold 建立时间需达标 数据沿必须在采样沿之前 提前 tsetup 稳定 保持时间不允许数据 在沿后快速变化

图中清晰的展示了:源时钟沿1 发射数据,目的时钟沿2' 由于正 skew 向右移了一点,给数据多争取了建立时间。但保持时间窗口变窄了——数据必须在沿2' 之后继续稳定一段 thold 时间。如果 skew 太大或数据路径太短,保持时间违规就来了。

2.5 避坑指南

我把这些年踩过的坑整理成下面几条,你遇到了可以直接对照:

  • 建立时间违规:加寄存器流水线、减少组合逻辑级数、提高驱动能力或降低频率(但治标不治本)。
  • 保持时间违规:在数据路径上插入缓冲器、增加走线长度、调整时钟偏斜(比如让目的时钟更早到,但会影响其他路径)。
  • 时钟偏斜过大:重新做时钟树综合、用 H 树或鱼骨结构、加时钟抖动补偿。

我个人最推荐的检查顺序:拿到时序报告后,先看保持时间,再看建立时间。因为保持时间不能通过降频掩盖,一旦违规,在实验室里很难复现(往往只有特定温度下才出错)。先解决保持时间,整个设计的底线就保住了。

想掌握 AUX 握手时序,你得先把这三个概念刻在脑子里。下一轮动手调试时,一旦发现握手信号不稳定,第一反应就应该是:建立时间够不够?保持时间有没有违例?时钟偏斜是不是超了?这个排查思路能帮你省下至少一半的定位时间。