PCIe 同步时钟和参考时钟
很多人都会问: 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 的同步时钟
其实不是。

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。
《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 在安全区间
《Elastic Buffer Implementations in PCI Express Device》 Joe Winkles
《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)
留下评论