3. SerDes物理层(PHY)基础:PMA子层与PCS子层功能划分

做SerDes设计这么多年,我经常被问到的一个问题是:「PHY层到底管什么?」

其实说白了,SerDes的物理层(PHY)并不是一个黑盒子。它内部有明确的分工——PMA和PCS两个子层。这两个家伙各司其职,配合好了,你的高速链路才能跑得稳。

核心观点:PMA负责「硬活儿」,PCS负责「软活儿」。一个管模拟信号,一个管数字逻辑。

SerDes PHY 子层架构 PCS 子层 (数字逻辑层) • 8B/10B 编码 / 解码 • 加扰 / 解扰 • 对齐标记插入 / 提取 • 弹性缓冲 • 链路初始化与训练 • 时钟补偿 数据流 PMA 子层 (模拟混合信号层) • 串行化 / 解串 • 时钟数据恢复 (CDR) • 发送驱动 (TX Driver) • 接收均衡 (RX EQ) • 阻抗校准 • 信号检测 (Signal Detect) 传输介质 差分对 / 光纤 高速通道

3.1 PCS子层——数字世界的「翻译官」

PCS,全称Physical Coding Sublayer。我习惯叫它「编码子层」。它的任务,就是把上层送来的数据,变成适合在高速链路上传输的格式。

你想想看,原始数据里如果有一长串连续的0或1,接收端的CDR(时钟数据恢复)会直接崩溃——因为它找不到跳变沿来恢复时钟。PCS就是来解决这个问题的。

3.1.1 8B/10B编码——经典但不过时

8B/10B编码,说白了就是把8位数据映射成10位码字。多出来的2位,用来保证DC平衡和足够的跳变密度。

我个人的经验:在PCIe Gen3之前的项目中,8B/10B几乎是标配。它的好处是简单、可靠,但代价是20%的开销。如果你做的是25Gbps以上的链路,就得考虑64B/66B或者128B/130B了。

关键点:8B/10B编码保证「游程长度」不超过5个连续的相同位,且「差异度」控制在合理范围内。

3.1.2 加扰与解扰

有些协议不用8B/10B,而是用加扰。比如PCIe Gen3及以上、SATA、USB 3.0等。

加扰的原理很简单:用一个伪随机序列(PRBS)跟数据做异或。接收端用同样的序列再异或一次,就还原了。

小技巧:我曾经在调试一个10Gbps链路时,发现误码率居高不下。查了半天,发现是加扰器的种子没同步。接收端和发送端的PRBS种子必须一致,否则解出来全是乱码。

3.1.3 对齐标记与弹性缓冲

在多通道SerDes中(比如x4、x8),每个通道的数据到达时间可能有微小差异。PCS会在数据流中插入对齐标记(Alignment Marker),接收端根据这些标记做通道对齐。

弹性缓冲呢?它用来处理两个时钟域之间的频率差异。发送端和接收端的参考时钟不可能完全一致,弹性缓冲通过插入或删除「空闲字符」来吸收这个差异。

注意:弹性缓冲的深度不能太大,否则会增加延迟;也不能太小,否则会溢出。我一般建议设置为4-8个字符深度,具体看协议要求。

3.2 PMA子层——模拟信号的「硬汉」

PMA,全称Physical Medium Attachment。如果说PCS是文官,那PMA就是武将。它直接跟物理介质打交道,处理的是模拟信号。

3.2.1 串行化与解串

这是PMA最核心的功能。PCS送来的并行数据(比如10位宽),在PMA里被串行化成高速比特流,送到线路上。接收端再把串行数据转回并行。

举个例子:10Gbps的SerDes,内部并行数据可能是10位@1GHz。PMA把它串行化成1位@10GHz。这个转换过程,对时钟抖动的要求极高。

3.2.2 时钟数据恢复(CDR)

CDR是PMA的「心脏」。它从接收到的数据流中提取时钟,并用这个时钟来采样数据。

我记得有一次:在实验室调试一个28Gbps的链路,眼图总是闭合的。后来发现是CDR的环路带宽设置不对。带宽太宽,噪声太多;带宽太窄,跟不上频率变化。调了三天才找到平衡点。

CDR的关键参数:

  • 环路带宽:通常建议为数据速率的1/1000 ~ 1/500
  • 抖动容限:决定了CDR能跟踪多大的输入抖动
  • 锁定时间:从失锁到重新锁定需要多少比特

3.2.3 发送驱动与接收均衡

发送驱动(TX Driver)负责把数字信号变成模拟信号,驱动到传输线上。它需要提供足够的摆幅和合适的预加重(Pre-emphasis)或去加重(De-emphasis)。

接收均衡(RX EQ)则负责补偿信道损耗。高频信号在传输线上衰减更大,均衡器就是把这个衰减补回来。

常见的均衡技术包括:

  • CTLE(连续时间线性均衡):模拟电路,放大高频分量
  • DFE(判决反馈均衡):数字电路,消除码间干扰
  • FFE(前馈均衡):发送端预补偿

避坑指南:我曾经在一个项目中,接收端的CTLE增益调得太大,结果把噪声也放大了。眼图看起来张开了,但误码率反而更高。均衡不是越强越好,要跟信道特性匹配。

3.3 PMA与PCS的接口

PMA和PCS之间怎么通信?通常通过一个并行接口,比如PMA服务接口(PMI)。

这个接口上传递的数据包括:

  • 并行数据(发送/接收)
  • 控制信号(比如信号检测状态)
  • 时钟信号
接口信号 方向 说明
tx_data[9:0] PCS → PMA 发送并行数据(10位)
rx_data[9:0] PMA → PCS 接收并行数据(10位)
signal_detect PMA → PCS 信号检测指示
rx_clk PMA → PCS 恢复时钟

3.4 实际项目中的分工经验

在实际芯片设计中,PCS和PMA通常由不同的团队负责。PCS团队做数字逻辑,用Verilog/VHDL;PMA团队做模拟电路,用Cadence/Spectre。

我个人的建议:接口定义一定要在项目早期就定死。PMA给PCS的时钟频率、数据对齐方式、握手协议,这些一旦定下来就不要轻易改。否则两边联调的时候,你会发现「数字说模拟给的数据不对,模拟说数字采的时机不对」——这种扯皮我见得太多了。

总结一下:

  • PCS负责编码、加扰、对齐、缓冲——数字逻辑
  • PMA负责串化、CDR、驱动、均衡——模拟混合信号
  • 两者通过并行接口交换数据,配合时钟和状态信号

嗯,PMA和PCS的分工,说白了就是「数字管逻辑,模拟管信号」。理解了这个,你再看任何SerDes的datasheet,都会觉得清晰很多。

可可精品资料库