2、PCIe物理层基础:差分信号与通道模型、Tx/Rx端的基本结构、Preset与系数概念
各位同学,咱们今天聊点实在的。PCIe物理层,说白了就是信号从芯片A跑到芯片B的那条路。这条路好不好走,直接决定了你的链路能不能稳定跑在Gen3、Gen4甚至Gen5上。我当年刚接触PCIe时,总觉得物理层就是些电压电流的破事,后来被一个眼图闭合的问题折腾了整整两周,才明白——物理层才是整个链路调试的根基。
2.1 差分信号:为什么PCIe非它不可?
PCIe用的是差分信号传输。你想想看,一根线传数据,另一根线传它的反相版本。接收端把两个信号一减,噪声就被抵消了。这招在高速场景下特别管用。
我习惯把差分信号比作两个人抬轿子。一个人抬一边,步调一致,轿子就稳。如果一个人乱晃,轿子就翻。差分信号也是这个道理——两条线的走线长度必须严格等长,否则信号到达接收端的时间不一样,那还减什么噪声?
关键参数:
- 差分阻抗:PCIe要求85Ω ± 15%(Gen3及以后)。别小看这个值,我见过一块板子因为阻抗控制不好,眼图直接塌了。
- 对内 skew:两条线之间的时延差。Gen3要求小于5ps。嗯,这个值在layout阶段就得算好。
- 共模电压:两条线的平均电压。PCIe Gen3的共模电压是0V(交流耦合后)。
2.2 通道模型:信号走过的路
通道,就是信号从Tx到Rx经过的所有物理介质。包括PCB走线、过孔、连接器、电缆(如果有的话)。每个环节都会对信号造成损耗。
我给大家画个简单的通道模型图,你们感受一下:
每个环节都会引入损耗。PCB走线的损耗跟频率有关——频率越高,损耗越大。这就是为什么Gen4比Gen3更难跑。我做过一个项目,板子走线长了2英寸,结果Gen4死活训练不过。后来缩短了走线,问题就解决了。说白了,通道损耗是链路均衡要解决的核心问题。
我的经验:在PCB设计阶段,尽量让PCIe走线短而直。如果必须转弯,用45度角或圆弧,别用直角。过孔尽量少,每个过孔都会引入阻抗不连续。我曾经在一个设计中用了6个过孔,结果眼图质量惨不忍睹。
2.3 Tx端的基本结构
发送端(Tx)的任务是把数据变成差分信号送出去。它的基本结构包括:
- Serializer(串化器):把并行数据转成串行比特流。PCIe Gen3的速率是8GT/s,意味着每秒要串化80亿个比特。
- Driver(驱动器):提供足够的电流驱动信号。驱动器的输出阻抗需要匹配通道阻抗(85Ω差分)。
- De-emphasis / Pre-shoot(去加重/预冲):这是Tx均衡的核心。简单说,就是故意把信号的高频分量放大,补偿通道的高频损耗。
我给大家看个Tx端的简化框图:
2.4 Rx端的基本结构
接收端(Rx)的任务是把衰减后的信号恢复出来。它的基本结构包括:
- CTLE(连续时间线性均衡器):一个模拟滤波器,放大高频分量,抑制低频噪声。说白了,就是跟通道的损耗特性对着干。
- DFE(判决反馈均衡器):一个数字均衡器,消除码间干扰(ISI)。DFE会根据前一个比特的值来调整当前比特的判决阈值。
- CDR(时钟数据恢复):从数据流中提取时钟。没有CDR,Rx就不知道什么时候该采样数据。
注意:CTLE和DFE的配置直接影响眼图质量。CTLE增益太大,会放大噪声;DFE抽头太多,会增加功耗和复杂度。我见过一个案例,有人把CTLE增益调到最大,结果眼图反而更差了——因为噪声被放大了。均衡不是越强越好,而是要恰到好处。
2.5 Preset与系数概念
Preset,说白了就是一组预定义的Tx均衡参数。PCIe规范定义了几组Preset,每个Preset对应一组特定的去加重和预冲系数。链路训练时,Tx和Rx会协商使用哪组Preset。
我给大家列个常见的Preset表格:
| Preset编号 | 去加重(dB) | 预冲(dB) | 适用场景 |
|---|---|---|---|
| P0 | -3.5 | 0 | 短通道(<10英寸) |
| P1 | -6.0 | 0 | 中等通道(10-20英寸) |
| P2 | -3.5 | +2.5 | 长通道(>20英寸) |
| P3 | -6.0 | +2.5 | 超长通道(>30英寸) |
| P4 | -4.5 | 0 | 通用场景 |
系数,就是去加重和预冲的具体数值。去加重是降低低频分量(相对高频),预冲是增强第一个比特的幅度。这两个系数配合使用,可以补偿通道的损耗特性。
我举个例子:假设通道在5GHz处的损耗是-6dB。如果Tx使用P1 Preset(去加重-6dB),那么信号的高频分量会被相对放大6dB,正好补偿通道的损耗。这样Rx收到的信号就平坦了。
我的习惯:调试时先试P0,如果眼图不好,再逐步增加去加重。别一上来就用P3,那样可能会过度补偿,反而引入新的问题。我曾经在一个项目中,用P0眼图闭合,用P1眼图打开,用P2眼图又闭合了——因为预冲引入了过冲。均衡参数不是越大越好,而是要找到那个平衡点。
2.6 链路训练中的Preset协商
链路训练时,Tx和Rx会交换各自的均衡能力。Rx会告诉Tx:「我支持CTLE和DFE,你发个P1试试。」Tx收到后,就用P1的参数发送训练序列。Rx收到后,评估眼图质量,如果不行,再请求换一组Preset。
这个过程在PCIe规范里叫「均衡协商」。说白了,就是Tx和Rx在互相试探,找到最优的均衡配置。我见过一个板子,因为Rx的CTLE配置不对,导致它总是请求P3,结果Tx的功耗飙升。后来调整了CTLE的增益,Rx改用P1就搞定了。
关键点总结:
- 差分信号是PCIe的物理基础,抗干扰能力强。
- 通道模型包含PCB走线、过孔、连接器等,每个环节都有损耗。
- Tx端通过去加重/预冲补偿通道损耗。
- Rx端通过CTLE和DFE恢复信号。
- Preset是预定义的均衡参数组合,链路训练时协商使用。
好了,这一章的内容就到这里。物理层的东西比较基础,但非常重要。你想想看,如果物理层都没调好,上层协议跑得再快也没用。下一章咱们聊聊链路训练的具体流程,到时候我会分享一些调试中的实战经验。
公众号:蓝海资料掘金营,微信deep3321