第二讲:物理层基础——PMA与PCS架构、时钟数据恢复(CDR)原理、串行器与解串器
各位同学,欢迎来到第二讲。上一讲我们聊了高速收发器的整体框架,今天咱们深入到底层,看看物理层到底是怎么工作的。
说白了,高速收发器的物理层就是负责把并行数据变成串行比特流,扔到线上去,再从线上把歪歪扭扭的信号捞回来。这中间涉及三个核心模块:PMA、PCS,以及它们的灵魂——CDR和SerDes。
2.1 PMA与PCS:物理层的左右手
收发器的物理层通常分成两大部分:PMA(物理介质适配层)和PCS(物理编码子层)。我个人习惯把它们比作「体力活」和「脑力活」的分工。
2.1.1 PMA——干粗活的
PMA负责最底层的模拟信号处理。它不关心数据是什么含义,只关心电压、电流、时序对不对。
- 发送端PMA:把数字信号转成差分模拟信号,驱动出去。说白了就是个大功率的差分驱动器。
- 接收端PMA:把线上微弱的差分信号放大、均衡,再送给CDR恢复时钟和数据。
我在项目中遇到过一个问题:某次板卡互联,眼图总是张不开。查了半天,发现是PMA的预加重参数没配好。嗯,这里要注意,PMA的均衡器不是越强越好,过犹不及。
2.1.2 PCS——干细活的
PCS负责数字域的编码、解码、对齐、加扰等操作。它处理的是有逻辑含义的数据。
| 功能 | 说明 |
|---|---|
| 8B/10B编码 | 把8位数据扩展成10位,保证直流平衡和足够的跳变沿 |
| 64B/66B编码 | 更高效率的编码方式,用于10G以上速率 |
| 通道绑定 | 把多个低速通道合并成一个高速通道 |
| 加扰/解扰 | 打散数据中的长连0或长连1,避免CDR失锁 |
2.2 时钟数据恢复(CDR)原理
CDR是整个收发器里最精妙的部分。它要从数据信号里把时钟「挤」出来。为什么会这样?因为高速信号没有单独的时钟线,时钟是隐含在数据跳变沿里的。
2.2.1 CDR的基本架构
典型的CDR由三个部分组成:
- 鉴相器(PD):比较数据边沿和本地时钟的相位差
- 环路滤波器(LF):滤除高频噪声,输出控制电压
- 压控振荡器(VCO):根据控制电压调整输出频率
说白了,这就是个锁相环(PLL),只不过参考信号变成了数据流。
2.2.2 CDR的工作模式
CDR有两种工作模式,我当年刚接触时也搞混过:
- 频率捕获模式:上电时,CDR先粗调频率,让它接近数据速率。这个阶段需要参考时钟。
- 相位跟踪模式:频率锁定后,CDR进入精细的相位跟踪,跟随数据边沿的微小抖动。
2.2.3 CDR的关键指标
| 指标 | 含义 | 典型值 |
|---|---|---|
| 抖动容限 | CDR能容忍的输入抖动幅度 | 0.15 UI @ 10Gbps |
| 抖动传递 | 输入抖动有多少传递到输出时钟 | -3dB带宽约1~10MHz |
| 锁定时间 | 从失锁到重新锁定的时间 | 通常< 1μs |
2.3 串行器与解串器(SerDes)
SerDes是Serializer/Deserializer的缩写。说白了,就是把并行数据串行化发送,再把串行数据并行化接收。
2.3.1 串行器的工作原理
串行器内部就是一个高速移位寄存器。并行数据在并行时钟下加载进去,然后在高速串行时钟下一位一位地移出来。
// 伪代码示意:8:1串行器
always @(posedge tx_clk_high) begin
if (load_en)
shift_reg <= parallel_data[7:0]; // 加载8位并行数据
else
shift_reg <= {shift_reg[6:0], 1'b0}; // 右移输出
end
assign serial_out = shift_reg[7]; // 最高位先出
实际FPGA里的串行器比这个复杂得多,但核心思想就是这个。我建议初学者先理解这个简化模型,再去啃厂商的文档。
2.3.2 解串器的工作原理
解串器是串行器的逆过程。它用CDR恢复出来的时钟,把串行数据逐位采样,然后拼成并行数据。
这里有个关键点:位对齐。串行数据没有帧头,解串器怎么知道哪一位是字节的边界?答案是靠PCS层的comma字符对齐。
核心要点:SerDes的速率匹配是通过弹性缓冲(FIFO)实现的。发送端和接收端的时钟频率可能有微小差异,这个差异由FIFO吸收。如果FIFO空了或满了,就会产生错误。
2.3.3 常见的SerDes架构
- 并行SerDes:多路并行数据同时串行化,用于高带宽场景
- 串行SerDes:单路数据串行化,用于点对点连接
- 双向SerDes:同一对差分线同时收发数据(全双工)
我个人在项目中用得最多的是Xilinx的GTH/GTY收发器,它们内部集成了完整的PMA+PCS+SerDes。你只需要配置好参数,剩下的硬件自动完成。但如果你不了解底层原理,出了问题就抓瞎了。
2.4 物理层设计的常见陷阱
最后,我总结几个实际项目中容易踩的坑:
- AC耦合电容选型:电容太小会衰减低频分量,太大则影响建立时间。一般10nF~100nF比较合适。
- 参考时钟的抖动:CDR对参考时钟的抖动很敏感。我建议用专用的时钟芯片,别从FPGA内部PLL分出来。
- PCB走线阻抗:高速差分线的阻抗必须控制在100Ω±10%。我曾经见过一块板子,走线阻抗只有85Ω,结果眼图完全闭合。
- 电源噪声:PMA的模拟电路对电源噪声极其敏感。记得用LDO单独供电,别和数字电路共用开关电源。
好了,这一讲的内容就到这里。物理层是高速收发器的根基,理解PMA、PCS、CDR和SerDes的工作原理,后面学习链路层和协议层就会轻松很多。下一讲我们聊聊链路层的8B/10B编码和通道绑定,到时候见。