SerDes 与 8b/10b:一条高速线怎么自己带时钟
更新时间:2026-09-12。本文是「集成电路大类 · 芯片设计」**进阶层(intermediate)**数字逻辑第四十二篇。前面的接口多是并行总线 + 握手,而 PCIe、SATA、万兆光口这些高速链路只有一两对差分线,时钟是「藏」在数据里的。这一篇讲 SerDes 和让它能工作的 8b/10b 编码。
本文要回答的问题
- 为什么高速片间通信从并行总线转向一条串行链路?并行偏斜是什么问题?
- 没有单独的随路时钟,接收端靠什么知道在哪一刻采样(CDR)?
- 为什么长串 0/1 会害了 CDR 和交流耦合?8b/10b 怎么保证「跳变足够多」?
- running disparity(运行不一致)如何保证直流平衡?comma/K 字符怎么对齐字节?
- 8b/10b 的 20% 开销值不值,64b/66b 又省在哪?
一、并转串:少线、高速、避开偏斜
并行总线(如 8/16 位数据线 + 时钟)在低速时直观,但速率一高就遇到两个硬伤:
- 偏斜(skew):多位线长短不等,同一拍发出的 bit 到达时刻错开,速率高到相邻拍间隔比偏斜还小时无法正确采样;
- 引脚/功耗/成本:宽总线占大量管脚和布线。
SerDes(SERializer/DESerializer) 在发送端把宽并行字并入串出(就是移位寄存器 PISO的高速版),用远高于并行的波特率在一对差分线上逐 bit 送出,接收端 SIPO 还原。线少、每对线独立、可跑到几~几十 Gbps。
二、CDR:从数据跳变里恢复时钟
串行链路不单独传时钟(随路时钟和数据之间同样有偏斜)。接收端用 CDR(Clock and Data Recovery,时钟数据恢复):用 PLL/DLL 产生一个本地采样时钟的若干相位,观察数据的 0→1/1→0 跳变沿,不断微调本地时钟相位去对准眼图中央采样。
这立刻带来一个前提:数据流里必须持续有跳变。若发出 0000_0000 这种长串,线上长期无沿,CDR 失去校准依据,频率漂移就会导致采样点漂出比特中心。此外高速口常交流耦合(隔直),长期 0/1 不均会让基线电压漂移。于是需要线路编码同时满足:①跳变足够密集(CDR 有沿可跟);②长期 0/1 数量平衡(直流平衡);③能区分控制字符并做字节边界对齐。8b/10b 就是为此设计。
三、8b/10b:多打 2 位买到三件事
每 8 bit 数据编成 10 bit 传输(效率 80%,20% 开销)。编码内部记成 5b/6b + 3b/4b 两段,核心机制有两个:
- Running Disparity(运行不一致,RD):统计链路上 1 与 0 的累计差。每个 10 bit 符号都准备「正/负」两种等 0/1 或近平衡的版本,发送时根据当前 RD 选相反极性的那个,使长期 0/1 严格平衡——这保证直流平衡,交流耦合不漂移、电磁频谱更干净。
- 控制字符与 comma:除数据字符(D.x.y)外定义少量控制字符(K.x.y,如 K28.5)。其中 comma 串(如
0011111或其反)是正常数据序列里不会在字符边界出现的独特比特模式,接收端在比特流里滑动找到它就锁定了字节边界(SerDes 解串后哪 10 位算一个字)。K 字符还承载空闲、帧起始/结束等带外控制。
同时,编码保证最长连 0/连 1 不超过 5 bit,给 CDR 提供充足跳变。三件事——DC 平衡、字节对齐、控制/数据分离——用 20% 的带宽一次买到。
四、64b/66b:更省的现代选择
更高速的链路(PCIe 3.0+、10GbE、SAS3)改用 64b/66b:66 bit 里只有 2 bit 同步头,开销降到约 3%。它不追求逐字直流平衡,而用**自同步扰码器(scrambler,本质是 LFSR)**把数据与一个伪随机序列异或,统计上打散长连 0/1、摊平频谱;同步头(01/10)提供周期性可识别模式做块锁定。代价是直流平衡是统计而非严格保证,需电路耦合方式配合。两代编码体现同一工程权衡:速率越高,越不舍得为编码付出开销。
五、物理层直觉:眼图、抖动与差分
- 眼图:把无数比特跳变叠加显示,张开的「眼睛」水平方向反映可用采样窗口、垂直方向反映判决噪声容限;噪声容限、抖动(jitter)、损耗都会让眼睛闭上。
- 抖动:边沿实际时刻相对理想位置的偏差,来自随机(RJ)和确定性(Duty cycle、ISI 码间串扰)成分,是速率天花板。
- 差分对(如 LVDS/CML):用两根互补线传信号,抗共模噪声、翻转电流闭环降低 EMI,是 SerDes 的物理载体。
- 协议栈分工:SerDes/PMA(并串、CDR、驱动)、PMA 上的线路编解码(8b/10b/64b/66b)、再往上才是事务/链路层(PCIe 包、流控),对应片上 AMBA 在片外的高速亲戚。
与现有篇目的衔接
- 前置:移位寄存器/串并转换、脉冲同步
- 编码相关:CRC 与 LFSR(扰码器)、码制转换器
- 电气/协议:逻辑门电气特性、AMBA 总线、IO 与 PAD
总结
一句话总结:SerDes 在发送端 PISO 把宽并行字高速串行到差分线、接收端 SIPO 还原,用少而独立的线避开了宽并行总线的位间偏斜和引脚瓶颈;因为没有随路时钟,接收端用 CDR 跟踪数据跳变沿恢复采样时钟,这就要求码流既有密集跳变又长期 0/1 平衡;8b/10b 以 20% 开销同时满足三点——用运行不一致 RD 在每个符号选极性相反版本保证严格直流平衡、用特殊 comma/K 字符在比特流中锁定字节边界并区分控制与数据、把连 0/连 1 限制在 5 bit 内喂饱 CDR;更高速的 64b/66b 只用 2 bit 同步头、把开销降到约 3%,改用 LFSR 扰码统计打散长连、摊平频谱;物理层用眼图张度和抖动衡量采样窗口,差分对提供抗噪和低 EMI,SerDes+编解码+事务层共同构成 PCIe/SATA/万兆光口这类片外高速链路。