1 分钟阅读 次阅读

很多人都会问: PCIe 到底有没有时钟?100MHz 是同步时钟吗?既然有 CDR,为什么还要参考时钟?

这篇文章一次性讲清楚:

  • PCIe 的“同步时钟”到底存不存在
  • 100MHz 参考时钟的真实作用
  • CDR、Elastic Buffer、SKP 之间的关系

参考文章

  • https://blog.csdn.net/m0_61208341/article/details/125516906
  • https://zh.wikipedia.org/wiki/PCI_Express

一、从一个误区开始

在传统并行总线(如 PCI / PCI-X)中:

DATA[31:0]
CLK

数据和时钟是并行传输的。 接收端用 CLK 边沿采样 DATA —— 这是典型的外部同步时钟结构

但 PCIe 完全不同。

PCIe 是:

点对点高速差分串行链路

物理层上只有:

TX+/TX-
RX+/RX-

没有“伴随数据的同步时钟线”。

于是问题来了:

没有时钟线,接收端怎么采样?

答案是:CDR(Clock Data Recovery)


二、PCIe 的“同步时钟”:嵌入在数据里

PCIe 使用编码保证数据中存在足够跳变:

  • Gen1/2:8b/10b
  • Gen3+:128b/130b

在链路训练阶段:

  • 发送 TS1 / TS2 训练序列
  • 包含大量 010101… 交替信号
  • 接收端 PLL 锁定数据边沿
  • 完成 bit lock

这就是:

嵌入式时钟(Embedded Clock)

接收端真正采样用的,是:

从数据中恢复出来的时钟(CDR 恢复时钟)


三、那 100MHz 到底是什么?

很多人看到主板上有:

REFCLK+ / REFCLK-
100MHz

就以为:

这就是 PCIe 的同步时钟

其实不是。 alt text

100MHz 是“参考时钟”(Reference Clock)

它的作用是:

给 PCIe Controller / SerDes 内部 PLL 提供频率基准

内部结构大致是:

100MHz REFCLK
      ↓
     PLL
      ↓
8GHz / 16GHz 等高速时钟
      ↓
驱动发送器

所以:

时钟类型 作用
CDR恢复时钟 采样接收数据
100MHz参考时钟 给PLL定频率

它们是两套不同体系。


四、Receiver 内部其实有两个时钟域

在接收端内部,存在两个时钟域:

1️⃣ CDR 时钟域(来自线上的数据)
2️⃣ 本地 PLL 时钟域(来自 100MHz)

数据必须从:

CDR 时钟域 → 本地时钟域

这就是典型的:

Clock Domain Crossing(CDC)


五、Elastic Buffer:解决两个时钟域的频率差

即便两端都使用 100MHz:

  • 晶振存在 ppm 误差
  • PLL 有偏差
  • SSC 会调制频率

发送端速率可能是:

8.000000 GT/s

接收端内部可能是:

8.000003 GT/s

时间一长,就会:

  • 数据堆积(overflow)
  • 数据被掏空(underflow)

为了解决这个问题,PCIe 在 Receiver 内部引入:

Elastic Buffer(弹性缓冲)

本质是一个小 FIFO。 alt text 《Elastic Buffer Implementations in PCI Express Device》 Joe Winkles

buffer左侧数据进入使用CDR恢复的时钟采样的数据,属于恢复时钟域,buffer右侧数据取出则是controller使用100MHz参考时钟进行倍频后的本地时钟,属于本地时钟域。数据从左边进,然后按照进来的顺序再从右边出。入口和出口的差异使用SKP序列进行处理。


六、SKP:用于速率补偿的特殊序列

PCIe 定期在链路中插入:

SKP Ordered Set

它的特点:

  • 不包含有效数据
  • 可以被丢弃或插入
  • 专门用于速率补偿

工作原理:

情况 操作
写入快于读出 丢弃 SKP
读出快于写入 插入 SKP

通过调整 SKP 数量:

保持 Elastic Buffer 在安全区间

alt text 《Elastic Buffer Implementations in PCI Express Device》 Joe Winkles alt text 《Elastic Buffer Implementations in PCI Express Device》 Joe Winkles

注意:

Elastic Buffer 只能补偿微小频率差

如果两边频率差过大:

  • SKP 不够用
  • FIFO 失衡
  • 链路报错

七、完整时钟体系总结

PCIe 的时钟系统可以这样理解:

数据流 ——> CDR ——> 恢复采样相位
100MHz ——> PLL ——> 生成本地高速时钟
Elastic Buffer ——> 连接两个时钟域
SKP ——> 调整平均速率

四者缺一不可。

理解 PCIe 的同步时钟和参考时钟,本质是理解:

相位同步(CDR) 频率同步(PLL) 速率补偿(Elastic Buffer)

留下评论