ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

SerDes高速串行接口知识地图:器件、协议与集成

SerDes高速串行接口知识地图:器件、协议与集成

简介:由IBM多位资深工程师撰写、Springer出版的高速SerDes英文教材,面向芯片与硬件接口设计人员、通信及微电子专业学生,以及需要补齐高速串行链路知识的中高级读者。内容从并行转串行、串行转并行的基本架构讲起,系统梳理8B/10B与64B/66B编码、时钟恢复与PLL/CDR、差分信号与阻抗匹配、前向纠错等关键环节,并结合信号完整性中的反射、串扰、损耗问题讨论高速链路的设计取舍,还涉及功耗管理与多标准兼容性等工程挑战。压缩包内为1个PDF文件,约10.89MB,便于在电脑或平板上检索查阅。已有918人学习,可作为SerDes入门到进阶的案头参考,也可对照IBM高速SerDes器件的应用案例理解理论落地方式。

1. 从并行总线到串行链路:SerDes 知识地图的五层结构

芯片之间搬数据,最直觉的做法是拉一根 n 位宽的并行总线、两边同源时钟。卡点不在逻辑而在封装:片上电路按摩尔定律翻倍,引脚密度没跟上,高集成度芯片的输入输出于是几乎都交给了高速 SerDes。放到硬件接口协议这条线上,它不是一个协议,而是所有高速协议的公共底座。

一张知识地图大约五层:器件层是发送切片、接收切片与 PLL;协议逻辑层管编码、加扰、对齐与多链路去偏斜;标准层是 SONET/SDH、以太网、光纤通道、PCIe;约束层是参考时钟、信号完整性与功耗;落地层是测试诊断与芯片集成。数字逻辑出身的人最容易把 HSS 当成复杂 IO cell,漏掉的恰恰是后两层。这份教材按十章铺开这五层,适合做集成、也适合复习接口协议时当主线。

2. HSS 核内三块拼图:发送切片、接收切片与 PLL 的分工

一个高速 SerDes 核看着复杂,拆开只有三块:发送切片把并行数据推成差分串行流,接收切片从串行流里把时钟和数据一起捞出来,PLL 切片给两边提供干净的时钟。教材拿一个 10 Gbps 的教学核当例子,把这三块的引脚、寄存器、特性一条条列出来,再往下讲架构实现。复习时建议顺序反过来:先看每块对外暴露什么可编程项,再看这些项为什么会存在,最后才回到电路细节。这样遇到没见过的新器件,也能靠“可编程项清单”快速对上号。

2.1 发送切片:并行数据怎么变成差分串行流

发送侧的数据通路很短:并行数据先进接口寄存器,再经并串转换(serializer)移出,被前馈均衡(FFE)改形,最后由差分驱动器推上线。真正需要设计者操心的不是通路,而是通路上的四五个可编程旋钮。FFE 的本质是预加重:信道是低通,高频分量掉得快,发送端就故意把跳变沿做陡、把长连 0/长连 1 的幅度压低,让信号到达接收端时眼图重新张开。抽头分前游标与后游标,改抽头等于改“补偿哪一段记忆”,抽头给多了会自己制造过冲,给少了高频补偿不够,眼高上不去。

驱动器侧还有幅度与共模的取舍:摆幅加大能换眼高,但功耗和电磁辐射一起涨;摆幅压小省电,接收端 CDR 又难锁。速率模式是另一个容易被低估的旋钮——全速率、半速率、四分之一速率、八分之一速率,对应切片内部时钟与线速率的不同比例关系,切模式不是改一个寄存器就完事,它会连带影响 FFE 的适配参数和复位流程。

# 由目标线速率反推切片速率模式与内部时钟,教学核上限按 10 Gbps 记 SLICE_MAX_GBPS = 10.0 def pick_rate_mode(line_gbps): ratio = line_gbps / SLICE_MAX_GBPS if ratio > 0.5: return "full", line_gbps # 全速率:内部时钟等于线速率,功耗最高 if ratio > 0.25: return "half", line_gbps / 2 # 半速率:内部时钟减半,是高速切片的主流架构 if ratio > 0.125: return "quarter", line_gbps / 4 # 四分之一速率:低速复用老 IP 时常见 return "eighth", line_gbps / 8 mode, clk = pick_rate_mode(6.25) print(mode, clk) # half 3.125

这段代码的逻辑是把“线速率”翻译成“切片内部时钟”,判断依据是相对切片上限的比例,而不是绝对速率。参数改动时要注意两点:一是分频比一变,PLL 分频器、串行时钟相位、FFE 的抽头单位(以 UI 计)都要跟着重算;二是模式切换必须走完整复位与重同步,热切换几乎必然翻车。发送侧还挂着一批诊断特性:PRBS 图案发生、内部与外部环回、JTAG 旁路、带外信令模式,以及与 PCIe 低功耗状态配合的若干控制位。它们平时不参与业务,却是上板调试时唯一能握在手里的东西。

可编程项主要影响什么时候必须重新调
FFE 抽头与极性眼高、过冲、抖动放大换信道、换板层、换线缆长度
输出摆幅与共模眼高、功耗、辐射换接收端耦合方式(AC/DC)
速率模式内部时钟、功耗、时序余量目标线速率变化
环回与 PRBS 使能诊断通路量产配置必须关闭

2.2 接收切片:CDR、DFE 与眼质量监视

接收侧的第一件事是恢复时钟。参考时钟只给出一个“大概正确”的频率,真正的采样相位要靠 CDR 里的相位旋转器一点点找:它在一段相位区间内滑动,比较不同相位下的采样质量,最终停在眼图张开最大的位置。这条环路同时承担跟踪任务——扩频时钟带来的频偏、温度漂移带来的相移,都得靠它慢慢跟。跟得太快会被数据图案带偏,跟得太慢会跟不上频偏,这两个方向的失配是链路误码的常见根因。

判决反馈均衡(DFE)放在采样器之后:它用已经判决出的历史比特去修正当前采样点的门限,优点是几乎不放大噪声,缺点是一旦判错就会连续错一段,且对突发错误敏感。非 DFE 模式则依赖发送端 FFE 和线性均衡把眼图撑开。两者不是谁更先进的问题,而是配合关系:发送端预加重给多了,接收端 DFE 反而可能被过冲干扰。

维度DFE 模式非 DFE 模式
噪声放大小,反馈在判决后大,线性均衡同时抬噪声
错误传播存在,连错风险无明显连错
适配场景损耗大、反射重的背板短距、线缆、损耗平坦的信道
参数敏感点反馈抽头与判决门限发送端 FFE 与接收端均衡强度

除了均衡,接收切片还有一组“看状态”的能力:信号检测判断线上有没有有效幅度,眼质量监视给出当前眼高眼宽的粗略量化,相位旋转器可以读回当前相位用于比对,部分核还能输出与 SONET 相关的时钟。这些观测点在做链路裕量测试时非常关键——误码率只是个结果,眼质量才是可以优化的输入。终端与耦合方式也要在这里确认:AC 耦合要保证共模由接收端自己建立,DC 耦合则要求两端共模匹配,配错会让信号检测一直判无信号。

2.3 PLL 切片与复位重配:上电顺序是最像黑匣子的部分

PLL 切片管的是参考时钟进来之后的一切:分频器把参考时钟分到各切片需要的频率,压控振荡器(VCO)要经过粗校准才能落在可锁定的频段,锁定检测给出“时钟可用”的结论,复位序列器负责把这些动作排成有先后的顺序。教材里专门用一节讲复位与重配序列,还拆成“改发送配置”和“改接收配置”两条路径,原因很实际:发送侧改速率会改变输出时钟,接收侧必须重新同步;接收侧改均衡参数则可以先保持链路不断、只让 CDR 重新收敛。

上电流程里最容易被跳过的是重同步。PLL 锁定只说明时钟频率对了,不说明数据通道里的字对齐、相位关系是对的;改过分频比或速率模式之后,必须显式触发一次重同步,让并串与解串两侧的边界重新对齐。PCIe 那类带电源状态管理的场景更麻烦:低功耗状态退出时,PLL 可能被关过,恢复顺序错了就会表现为“链路训练反复失败”,而寄存器里所有状态位看起来都正常。

提示:调 PLL 之前先把参考时钟的摆率、占空比、频偏量三件事量一遍。锁定失败里相当一部分根因在参考时钟,而不在 PLL 本身。

3. 协议逻辑与标准族:编码、对齐与去偏斜撑起的接口协议

器件层只管把比特推上线,比特怎么组织、多个通道怎么对齐、错了怎么发现,是协议逻辑层的事。这一层的价值在联调时体现得最明显:电气指标全过、PRBS 测试全通,链路却起不来,问题通常落在对齐和去偏斜上。教材把这层单独拆成两章,一章讲功能模块,一章讲具体标准,复习时可以对着“功能—标准”两列做映射。

3.1 分层先分清:物理层管电气,逻辑层管边界

协议分层的基本划分是:物理层负责电气与定时,逻辑层负责帧边界、位序、字节序、条带化与错误处理。串行数据规格里定义的东西听起来很琐碎——先发高位还是低位、多通道之间怎么交织、空闲时发什么——但每一条都会变成 RTL 里的一个状态机分支。位序和字节序搞反是最经典的一类错误:数据能通,内容全错,而且因为校验和重算之后依然“自洽”,很容易被误判成上层软件问题。

条带化与交织解决的是多通道并行传输时的数据分配:把一条逻辑流按字节或按块轮转分到 N 个物理通道上,接收端再按同样规则拼回去。规则本身不复杂,难点在于通道数变化、通道故障降级、以及和去偏斜的配合。

3.2 编码、加扰与错误检测:开销与鲁棒性的取舍

编码要解决三个问题:保证足够的跳变让 CDR 有边沿可跟,保持直流平衡让 AC 耦合不漂,提供可识别的控制字符用于对齐。8B/10B 用 25% 的带宽换来了丰富的控制码和良好的直流特性;64B/66B 把开销压到 3% 左右,代价是必须靠加扰保证跳变密度,并且块同步的逻辑更绕。选哪个不是审美问题,是链路预算问题。

def coding_overhead(encoded_bits, payload_bits): return encoded_bits / payload_bits - 1 for name, enc, pay in [("8B/10B", 10, 8), ("64B/66B", 66, 64)]: print(f"{name} 开销 {coding_overhead(enc, pay):.2%}") # 8B/10B 开销 25.00% # 64B/66B 开销 3.13%

两个参数分别是有编码后的比特数和其中的有效载荷比特数,差额就是纯开销。落到工程上,10 Gbps 的线速率在 8B/10B 下只剩 8 Gbps 可用,在 64B/66B 下能到 9.69 Gbps 左右——这就是为什么高速标准一代代往低开销编码迁移。但换算完别急着选低开销:加扰器种子、块同步状态机、以及出错后的重新同步时间,都是 64B/66B 额外带来的复杂度。错误检测与纠正在这一层是可选项,前向纠错能换来链路裕量,代价是延迟和额外开销,放在物理层边界还是链路层边界,取决于标准怎么定义。

3.3 位对齐与多链路去偏斜:多 lane 系统的真正难点

单通道系统的对齐靠控制字符或同步头:接收端在比特流里搜一个不会在数据中出现的图案,找到就认为字边界对齐了。多通道系统的麻烦在于每条通道的延迟不同——走线长度差、封装内路径差、甚至连接器插损差都会造成通道间偏斜(skew)。去偏斜的做法是给每条通道配一个弹性缓冲,先到的等一等,等最慢的那条到齐再一起读出。

这里有两个隐藏参数:缓冲深度决定了能容忍多大偏斜,读出时机决定了延迟。缓冲开小了,偏斜超标就丢数据;开大了,延迟增加且需要更长的对齐序列来填满。另外通道顺序反转、极性反转这两项自动纠正能力,很多器件默认关闭,板子画反了就只能靠改配置救。教材把“位对齐”和“多链路去偏斜”分成两节讲,正是因为它们是两套独立机制,一套管通道内,一套管通道间,出问题时先定位在哪一层,能省掉大量盲调。

3.4 标准族速览:四类协议各关心什么

标准族结构特点SerDes 承担的角色复习时优先记住
SONET/SDH固定帧结构、严格时钟分层长距、电信级时钟与抖动指标帧格式与时钟分布
以太网分层清晰、速率族多从 MAC 到 PMD 的多级子层XGXS/XFI 与背板以太网
光纤通道面向存储区域网络、帧与信令分离10 Gbps 级别的存储互联帧/信令与物理接口分层
PCIe分层协议、带电源状态管理芯片间与板级高速互联物理层逻辑与低功耗状态

四类标准对 SerDes 的诉求差别很大:SONET 在意长期时钟稳定与抖动上限,以太网在意子层划分与互通的电气规范,光纤通道在意帧级流控与丢失恢复,PCIe 在意链路训练与电源状态切换。复习时不必把每套规范全文啃完,把“这一层解决什么问题、指标卡在哪”记住,遇到具体协议再回查细节即可。

4. 参考时钟、抖动与功耗:三条看不见的约束线

器件能配、协议能对,链路还是可能不稳,剩下的问题基本都落在这三条线上。它们共同的特点是“不在数据通路上”,因此最容易被放到最后才查,而一旦出问题又最难定位。

4.1 参考时钟网络:单端还是差分,抖动从哪来

参考时钟是整个 SerDes 的频率基准,它的质量直接决定输出抖动的下限。单端时钟省引脚,但抗干扰差、回流路径敏感;差分时钟共模抑制好,代价是占两只引脚和一对走线。时钟源的选择同样要权衡:晶振抖动低但频点固定,时钟芯片灵活但会引入额外抖动,从别处借来的时钟则可能带着上游的扩频和噪声。

时钟树的布局要在 floorplan 阶段就定下来:分支点尽量靠近,走线等长,避免跨越分割平面,差分对严格等长并保持间距。教材里把时钟分布网络单列一章讲,还专门提到占空比失真和差分时钟的分析方法,原因是占空比偏差会直接吃掉眼图的水平余量,而它往往不是由时钟源产生,是由走线不对称和缓冲器失配引入的。

注意:参考时钟的测试要求里通常包含“特殊测试模式”,例如临时旁路 PLL 直接由外部灌时钟。这类模式在量产配置里必须关掉,忘了关的后果是现场偶发失锁。

4.2 抖动的分解:RJ、DJ、TJ 与预算

抖动按可预测性分两类:随机抖动(RJ)服从高斯分布,理论上无界;确定性抖动(DJ)有明确来源,比如占空比失真、周期性电源噪声、码间干扰,幅度有界。两者合成总抖动(TJ)时不能直接相加峰值,要按目标误码率折算——这就是双狄拉克模型存在的意义:把 RJ 的高斯尾巴在给定 BER 处截断,再与 DJ 线性相加。

Q_1E12 = 7.034 # BER=1e-12 对应的 Q 值,双狄拉克模型的标准折算系数 def total_jitter_ui(dj_ui, rj_sigma_ui, q=Q_1E12): """DJ 用 UI 表示,RJ 用单边 sigma(UI) 表示,返回峰峰值 TJ(UI)""" return dj_ui + 2 * q * rj_sigma_ui tj = total_jitter_ui(dj_ui=0.15, rj_sigma_ui=0.010) print(f"TJ = {tj:.3f} UI, 剩余眼高约 {1 - tj:.3f} UI") # TJ = 0.291 UI, 剩余眼高约 0.709 UI

参数说明:DJ 是峰峰值,RJ 用单边标准差表示,系数 2Q 把高斯分布的尾部折算成峰峰值;Q 值随目标 BER 变化,BER 越严 Q 越大,TJ 也越大。做预算时把 TJ 从 1 UI 里扣掉,剩下的才是可用的眼宽。容易漏的是抖动容限这一侧:接收端能容忍多少抖动是标准规定的,而发送端输出抖动加上信道引入的抖动必须留在这条线以内,两边要分别核算。

抖动分量来源统计特性处理手段
随机抖动 RJ热噪声、参考时钟相位噪声高斯、无界降低带宽、优化时钟源
占空比失真时钟链路不对称有界、与图案相关差分对称布线、校准
码间干扰信道损耗与反射有界、图案相关FFE/DFE、缩短信道
周期性抖动电源噪声、串扰有界、窄带电源滤波、隔离布局

4.3 统计方法与模型:眼图是怎么“算”出来的

传统 SPICE 时域仿真能给出精确波形,但要把 10⁻¹² 量级的误码跑出来,仿真时间不可接受。工程上的做法是统计法:先用少量仿真提取信道的脉冲响应,再把抖动、噪声的概率密度函数与响应卷积,直接算出眼图与浴盆曲线。教材讲了两类概率密度函数(高斯与双狄拉克)、抖动分解模型、以及传统 SPICE 模型与混合行为级模型的差别——行为级模型把复杂的均衡器和 CDR 抽象成数学描述,速度快几个数量级,代价是只能在已验证的范围内可信。

仿真的组织方式也有讲究:不是把所有组合都跑一遍,而是按矩阵挑选角落工况(最快/最慢工艺角、最高/最低温度、最长/最短信道、最大/最小摆幅),在这些角落里做统计分析。这样做的理由是抖动与损耗在这些边界上最恶劣,中间工况几乎不会更差。复习这块要记住的是流程和假设,而不是具体某个工具的操作。

4.4 功耗账本:HSS 功耗方程与降功耗的取舍

功耗要分三块算:数字逻辑的动态功耗(与翻转率、负载电容、电压平方成正比)、数字逻辑的漏电(与工艺、温度强相关)、以及 SerDes 自身的功耗。SerDes 那部分不能简单套数字公式,因为它含大量模拟电路,静态偏置电流占大头,教材为此单独给了功耗方程并拆成多个电源域——发送驱动、接收前端、PLL 通常各自供电,噪声隔离和功耗管理都靠这个划分。

模式相关功耗是最容易在预算里漏掉的一项:链路空闲、低功耗状态、通道降级运行时,功耗与全速运行差别很大,按满载估会高估,按空闲估会低估。降功耗的手段也有取舍:降摆幅省电但损失裕量,关通道省电但影响可用带宽,降低速率模式省电但要重走复位流程。核设计侧能做的优化(架构、偏置)和芯片设计侧能做的优化(供电划分、时钟门控、布局)是两件事,别混在一起谈。

5. 易漏点专章:测试、旁路与集成阶段最容易翻车的五处

前四章讲的是“应该怎么设计”,这一章讲“实际会怎么错”。下面五条按出现频率排序,每条都给出漏掉的原因和补救动作。

5.1 五条高频易漏点

① 诊断与旁路模式忘了退出

  • 为什么会漏:调试阶段为了看内部节点,把环回、PRBS、JTAG 旁路一路打开,功能验证全部通过;转量产配置时只改了主数据通路,诊断位留在原位。
  • 怎么补:把“诊断位清单”做成配置表的一节,每次出配置前逐条核对;在仿真模型里对诊断使能位加断言,一旦与非测试模式同时有效就报错。

② 改了速率或分频比,没触发重同步

  • 为什么会漏:PLL 锁定位变高就认为“时钟好了”,而字对齐和相位关系是另一套状态机,它不会因为 PLL 锁定自动复位。
  • 怎么补:把“任何改变串行时钟比例的操作”都归到一个配置函数里,函数内部强制走复位—锁定—重同步三步,不允许单独写分频寄存器。

③ 耦合方式与终端配置不匹配

  • 为什么会漏:AC 耦合与 DC 耦合在原理图上只是一个电容的有无,容易被当成纯硬件问题,而接收端的共模建立与终端使能是寄存器控制的。
  • 怎么补:在板级调试清单里加一条“上电后先读信号检测与共模状态”,无信号时先查耦合与终端,再去怀疑均衡参数。

④ 参考时钟只验频率,不验抖动与摆率

  • 为什么会漏:频率用示波器一眼就能看,抖动和摆率要专门夹具和相位噪声分析,调试紧张时就被跳过。
  • 怎么补:把参考时钟的相位噪声、占空比、摆率列为上电前置检查项;系统级抖动预算里给参考时钟留固定份额,超了就不往下调。

⑤ 多通道去偏斜与弹性缓冲在仿真里被理想化

  • 为什么会漏:仿真模型里通道延迟常被设成相同值,缓冲深度默认足够,X 态被复位捷径掩盖,真实板子上偏斜一超标就丢数据。
  • 怎么补:仿真时人为注入通道间偏斜(正负都要),把缓冲深度调到接近溢出的边界跑一遍;模型里未建模的行为要在验证计划里显式列出,而不是当作不存在。

把第 ② 条写成代码,大致是这样一个最小自检序列:

def bring_up(dev, timeout_ms=20): dev.wr("PLL_RESET", 1) dev.wr("PLL_RESET", 0) # 脉冲复位,让 VCO 重走粗校准 if not dev.poll("PLL_LOCK", timeout_ms): return "PLL 未锁定:先查参考时钟摆率与频偏,别急着调发送端" dev.wr("TX_RESYNC", 1) # 改过速率或分频比后必须重同步 dev.wr("TX_RESYNC", 0) dev.wr("RX_CDR_HOLD", 0) # 放开 CDR,让相位旋转器开始跟踪 return "OK" if dev.poll("RX_SIGDET", timeout_ms) else "无信号:查耦合、终端、极性"

这段序列的重点不在寄存器名,而在顺序与超时:先复位再等锁定,锁定之后才允许重同步,重同步之后才放开 CDR,每一步都给超时并返回可读的失败原因。实际调试时最怕的是无限轮询——链路起不来,脚本卡死,连“卡在哪一步”都不知道。

5.2 测试与诊断:每种手段能证明什么,不能证明什么

测试手段多了容易误用,关键在于分清覆盖范围。边界扫描(1149.1)查的是引脚连通性,差分引脚的 AC 耦合场景要靠 1149.6 那套扩展;PRBS 加环回查的是串行通路的误码,用的是伪随机图案与多项式比对,它能证明“通路干净”,不能证明协议逻辑正确;内建自测试(LBIST)查的是数字逻辑的制造缺陷,和高速通路无关。制造测试分芯片级与宏级两层,宏级测试专门针对 SerDes 这种模拟成分重的模块,通常要配合专用的测试接入方式。表征与认证测试则是另一回事:发送端测眼图、抖动、摆幅,接收端测抖动容限、灵敏度,通用项测功耗与温漂,这一层是给器件定指标,不是给板子做检验。

手段能证明不能证明
边界扫描 1149.1/1149.6引脚连接、开短路高速信号质量
PRBS + 环回串行通路误码水平协议逻辑与对齐
LBIST数字逻辑制造缺陷模拟通路性能
宏级制造测试切片功能与参数是否在规格内系统级链路裕量
表征测试器件指标边界具体单板的可用性

5.3 集成阶段:仿真模型、静态时序与封装

芯片集成是把前面所有东西装进一颗芯片并让它能跑,这一阶段的三类坑很集中。第一类是仿真模型:复位与初始化为了加快仿真常走“捷径”,跳过了真实的校准与锁定时间,导致仿真通过而硅片上电慢;模型里的 X 态如果被默认值掩盖,未建模的行为就不会暴露。第二类是静态时序:SerDes 相关的时序约束不止串行数据本身,还包括参考时钟路径、接收侧并行数据输出、寄存器接口、发送侧同步信号,以及跨时钟域之间的偏斜管理;反标注没做全,时序报告就是假的。第三类是物理设计:封装选型决定了能引出多少高速对、回流路径怎么走,芯片 floorplan 决定了时钟树和高速对能走多直,两者要在早期一起定,后期再改代价极高。

6. 复习清单:把十章压成一张可自检的表

复习最怕的是“看完了但不知道自己哪儿不会”。下面这张表按十章的主干拆成自检项,每项只问一个问题,答不上来就回到对应章节,答得上来就往下走。建议按器件层、协议层、约束层、落地层的顺序过一遍,因为后一层的问题往往要靠前一层的结论来解释。

模块自检问题没答上来时回看
并行与源同步引脚数、时钟前传、高速源同步各自的天花板在哪并行总线与源同步接口
发送切片FFE 抽头调大调小分别会发生什么发送均衡与驱动
接收切片DFE 与非 DFE 的噪声与连错差异接收均衡与 CDR
PLL 与复位改速率后为什么必须重同步复位与重配序列
协议逻辑8B/10B 与 64B/66B 的开销与控制字符差别编码与加扰
多通道弹性缓冲深度由什么决定位对齐与去偏斜
标准族四类标准各自最在意哪项指标协议标准概览
参考时钟单端与差分的取舍点时钟分布网络

本文还有配套的精品资源,点击获取

返回列表