技术长文
完整讲稿
以下为本期批准稿。数字保留其各自口径,厂商公开声明与教学推导分别表述。
速率等级不是协议
欢迎收听这一期科技播客。今天,我们从一个采购会上很容易出现的问题讲起:如果一根有源光缆,标称支持一百一十二 G 的高速接口,那么,把原来走铜线的 PCI Express 信号送进去,是不是就能直接变成一条更长的 PCIe 连接?
答案是:不能仅凭这个数字下结论。这里混在一起的,至少有四件事:每条通道跑多快,信号怎么表示,双方使用什么协议,以及中间这根线究竟保证什么。今天我们把这四件事拆开,再重新拼起来。目的不是让管理者记住所有缩写,而是让下一次产品评审,能够问到真正决定成败的问题。
先说最基础的区别。SerDes 是串行器和解串器,把并行数据变成高速串行信号,再在另一端还原。一百一十二 G SerDes,通常描述一个速率等级的电接口能力,不是一种完整的通信协议。它没有单独回答包长多少、怎样训练链路、发现错误怎么办,甚至没有保证它支持所有比这个数字低的速率。
可以把它想成道路的设计能力。道路宽度和限速当然重要,但车能不能上路,还取决于交通规则、入口设施和车辆本身。以太网、PCIe,以及其他芯片互连接口,不会因为使用相近速度的收发器,就自动说同一种语言。OIF 的电接口规范也明确区分电气要求与数据协议。
接着区分比特率和符号率。NRZ 每个符号通常表达一比特,PAM4 有四个幅度等级,每个符号表达两比特。因此,一条每秒一百零六点二五吉比特的 PAM4 通道,对应每秒五十三点一二五吉符号。这里还没有扣掉编码、纠错和控制信息。销售材料里写一百 G、一百一十二 G,或者两百 G,可能分别在说业务速率、收发器能力等级,或者物理线路速率。比较方案之前,先把这些数字放回同一个口径。
PCIe 还有自己的代际。第三代每条通道是八 GT 每秒,第四代十六,第五代三十二,这几代采用 NRZ。第六代进入六十四 GT 每秒,采用 PAM4,符号率是三十二吉波特。这里的 GT 是 PCIe 的传输速率口径,不应该再因为 PAM4 每符号两比特,就把六十四重复乘二。最终应用吞吐,还要扣掉协议开销,也受事务大小和往返延迟影响。
EIC 与 PIC 的数据路径
现在来看一根有源光缆内部可能发生什么。它的英文缩写是 AOC,两端有电子和光电器件,中间用光纤传输。主机送来的电信号,先经过接收和处理,再驱动发光或者调制器件;另一端检测光信号,再恢复成主机能够接收的电信号。
大家常见到两个方框:EIC 和 PIC。EIC 是电子集成电路,可能负责驱动器、跨阻放大器、均衡、时钟恢复,也可能加入数字信号处理、齿轮箱和纠错。PIC 是光子集成电路,典型功能包括光调制、波导、耦合、探测,某些方案还有波长复用。激光器可能在旁边,也可能通过不同集成方式放到一起。
关键是,“可能”两个字。EIC 和 PIC 是一种器件划分,不是一道全行业固定的功能分界线。不能看到 EIC 就认定里面有 FEC,也不能看到 PIC 就认定它完全没有电接口相关功能。硅光、直接调制激光阵列,以及电子和光子单片集成方案,边界都可能不同。产品评审应该要求一张实际的数据路径图,沿着信号逐段确认谁恢复时钟、谁做纠错、谁改变数据组织。
反向齿轮箱与容量预算
这就来到 reverse gearbox,反向齿轮箱。名字听起来复杂,核心只是把少数高速通道,映射到更多低速通道,另一端再拼回去。举一个理想化例子:一路一百一十二吉比特每秒,拆成四路二十八吉比特每秒。四条慢一点的路加起来,才接得住原来那一条路的数据。
这里最容易犯的错,是只数通道,不算总容量。假如入口已经持续送满,而出口总速率只和入口相等,那么中间凭空增加一层 FEC,就没有地方放额外校验位。解决办法可能是提高内部线路速率,增加通道,利用已有的编码预算,或者终止原来的编码再换一种编码。每一种办法都有代价,也有不同的透明范围。
请特别注意另一个直觉陷阱:齿轮箱不一定理解以太网帧,也不一定理解 PCIe 事务。它可以仅仅重排比特。但如果它需要识别某个协议的码块、删除空闲、终止纠错或者重建训练序列,它就已经依赖那个协议的规则。功能名字叫 gearbox,并不能告诉我们,它到底停留在哪一层。
还有一种更隐蔽的误会:把单向带宽和双向总带宽放在一起比较。如果一条连接每个方向各有八百吉比特每秒,厂商可能称它为一点六太比特双向带宽。但这不代表某一个方向可以持续塞进一点六太比特。计算齿轮箱和纠错预算时,要逐方向、逐独立端口地计算,不能拿另一方向闲着的容量,补这一方向装不下的数据。
我们可以用三个问题检查容量。入口的数字,是否已经包含 FEC?出口的数字,是否也是含开销的物理速率?新增的对齐、标记和修复信息,放在哪里?这三个问题问清楚,很多看起来完美对齐的宣传数字,就能被还原成真实工程预算。
转发时钟与持续频差
再来看 forwarded clock,也就是转发时钟。高速串行接收器经常需要从数据跳变中恢复时钟,叫 CDR。接收端相当于一边听内容,一边从说话节奏中判断什么时候采样。转发时钟则是发送端把节拍一起送过去,让接收端根据这个节拍采样。它常见于较宽、较短的芯片间连接。
但转发时钟不等于没有时钟电路。接收端仍然要处理时钟与数据的相位关系、通道间偏斜,以及进入自己内部时钟域的问题。BoW 的公开规范就把源同步、相位对齐和跨时钟域处理分开讨论。省掉某一段复杂的时钟恢复,并不意味着整个系统从此不需要同步设计。
为什么这对高端口数量的光模块特别重要?想象八个独立客户,每个人的表都稍微快一点或慢一点。PPM 就是描述这种微小频率偏差的常用单位。短时间看,差异不大;持续传输时,快的一端不断多送,慢的一端不断少收,缓冲区就会逐渐积满。
一个有限大小的缓冲区,只能吸收暂时的差异,不能永久解决持续频率偏差。最终必须让时钟跟随,或者进行协议允许的速率补偿,例如插入、删除特定空闲信息,或者使用明确设计的封装机制。随便删掉业务比特当然不行。把八条独立链接聚到一个公共时钟域,也必须说明如何分别处理这八份偏差。
用一个纯粹的教学算例看得更清楚。假设一个入口的名义速率是一百吉比特每秒,但它比出口快一百 PPM,也就是万分之一。每秒就会多积累一千万比特。听起来很大的缓冲区,也可能很快被填满。这个例子没有指定任何真实产品的容限,只是说明:频率偏差再小,只要持续存在,就是一个长期流量问题,不能靠“缓冲应该够大”来解释。
所以,多组转发时钟的价值,不只是多几根时钟线,而是可以保留更细的独立时钟边界。它是否更合适,要看端口组织和数据路径。不能把某个单时钟示例扩大成“这个标准永远只能支持一种时钟架构”,也不能把多时钟结构直接等同于任何协议都能透明传输。
FEC、CRC 与重传
接下来谈 FEC,前向纠错。发送端加入冗余,接收端利用这些冗余修复一定范围内的错误。把它理解成给运输箱加上可用于重建内容的信息,会比把它理解成“让线路永远不出错”更准确。纠错能力是有限的,而且不仅与平均误码率有关,还与错误是否成串、是否集中在同一个码字有关。
FEC 和 CRC 也不是一回事。CRC 主要用来检查有没有错误,并不负责把任意错误自动改正。如果协议支持重传,检测到错误之后,还可以要求对端再发一遍。于是,可靠性常常来自物理链路、纠错、检错、重传几层机制共同作用,而不是由某一个模块独自承诺绝对零错误。
PCIe 第六代就是一个很好的例子。它把数据组织成固定长度的 FLIT,结合轻量 FEC、较强的 CRC 和链路层重放。它不是简单把以太网常用的纠错方案搬进来。以太网里常见的某些 RS-FEC,和 PCIe 第六代的纠错机制,在码字、保护范围、处理流程以及延迟目标上都不同。
因此,一颗标明支持某种以太网 FEC 的芯片,不能据此承诺它也会正确处理 PCIe 第六代的 FLIT。反过来,如果中间设备完全不解析主机协议,只是把含有原始纠错信息的比特可靠地搬过去,那么主机原来的 FEC 可以继续由原来的接收端处理。是否还要增加光链路自己的纠错,是另外一道架构选择题。
协议透明的三个层级
这就引出今天的核心:协议透明,究竟对谁透明?我们可以把它拆成三个观察位置。
第一个是比特流层面。在明确的速率、编码和工作条件内,入口的数据顺序在出口被还原,允许固定或者受控的延迟。内部可以拆成更多通道,也可以有自己的封装。但如果改动了原有码字或控制序列,就不能不加说明地称为原始比特逐位透明。
第二个是协议层面。设备可能理解训练、空闲和纠错,也可能重新生成某些底层信息,但对外仍满足协议规定。一个协议感知的 retimer,可以让上层继续正常工作,却并不是一根对所有物理行为毫无处理的理想导线。
第三个是软件和事务层面。操作系统仍然看到预期的设备,应用读写结果正常。这样的透明很有价值,但中间可能已经有交换机、桥接或专门的隧道。软件无需修改,不等于物理层没有发生转换;产品写“透明桥接”,也不能直接翻译成“任意协议比特透明”。
也可以反过来看以太网。一根针对某种以太网物理接口设计的 AOC,可以把帧内容交给两端主机处理,同时依赖特定的线路编码和主机纠错配置。客户通常不需要知道内部光通道如何映射,但仍然需要让两端的模式匹配。一个能够识别以太网码块的模块,接收到不具备这些码块结构的其他协议,可能连正常的对齐和状态判断都做不了。所谓“速率一样,所以应该能用”,就在这里失效。
PCIe 连接的完整生命周期
我们沿着一条 PCIe 连接的生命过程走一遍,就会发现只验证业务数据远远不够。开机之后,首先要确认接收端存在。铜线中的接收端检测,涉及电气端接,不能把它当成一串普通数据比特原封不动送过光纤。光方案需要在本地正确呈现状态,并有办法与远端真实状态协调。
然后是链路训练。双方交换训练信息,协商速率和宽度,并在适用速率下进行均衡。负责这些阶段的状态机,通常叫 LTSSM。只在固定高速模式下通过伪随机码测试的光引擎,未必支持起步时的低速训练,也未必能在速率切换时保持正确行为。
运行中还会遇到电气空闲。电气空闲不是数据里的零,也不是“一直发相同的比特”。它是一种物理状态。如果光链路把没有电信号误当成连续数据,或者恢复时序不对,就可能破坏低功耗进入和退出,甚至造成重新训练。
此外还有复位、参考时钟,以及具体系统需要的边带信号。有些设计通过另外的通道传输,有些在本地代理,有些根本不支持。不是每种连接器都带相同的边带,也不是每个系统都要求同一组信号。但供应商必须把支持范围和主板配合要求写明白,不能让客户靠插上之后试运气。
参考时钟尤其值得单独问。PCIe 可以有公共参考时钟,也可以采用分别提供参考时钟的架构;是否使用扩频,又会影响频率差异和补偿要求。扩频常用来分散电磁干扰的频谱能量。两端独立扩频时,处理难度与共享同一时钟并不一样。支持其中一种模式,不代表另外几种自动成立。
还有长度。光纤能把信号送得很远,但信息不会瞬间到达。常见光纤里的传播时间,可以按每米大约五纳秒做初步估算。一百米就是单程大约五百纳秒,来回约一微秒,还没有算两端器件、缓冲和处理。它会进入重放、超时、缓冲容量以及应用性能的整体预算。
标准也在继续演进。PCI-SIG 的公开目录已经列出光感知重定时器相关的规范变更。因此,这里强调时延预算,并不是说 PCIe 不能走光,而是提醒选型时确认采用哪一版规范、哪一种架构,以及实际平台支持到了哪里。不能用旧的经验替代新的设计依据,也不能只看到新规范名称,就认定所有现有设备已经兼容。
对连续大块传输而言,链路可能仍然接近满带宽;对于需要一问一答的小事务,往返延迟却可能明显影响效率。所以“可以传一百米”和“一百米上所有工作负载性能不变”,是两项完全不同的承诺。
读懂厂商承诺
这些要求并不是纸上谈兵。看几个公开产品案例,就能理解成熟规格书通常怎么表达边界。以下说的是厂商公开披露,不能当成我们独立完成的认证测试。
Samtec 的 PCIe over fiber 产品页面,会明确写出 PCIe 第三代和第四代、支持的通道宽度、最长距离,以及误码率指标。它没有只给一个收发器峰值数字,让客户自己推断兼容性。另一个很有启发的例子是 Dolphin:其部分第四代 PCIe 光缆页面,明确标注不支持 CMI,也就是一种线缆管理接口。数据通路的支持范围和边带管理能力,可以是两回事。
再看 Eliyan 在二零二六年十月十四日公布的 NuLight。公告介绍的 Nexus 与 Oscar 组合,是完整重定时的 slow and wide 方案,并提到纠错监测、终止与再生成。公告另外把未来 Oscar 直接通过芯片间接口连接主机,作为后续方向。当前产品结构与未来路线,必须分开理解。
这里的启发不是哪家一定优于哪家,而是阅读架构图时,要盯住动词。是转发,还是终止?是恢复,还是重新生成?是当前已经送样的组合,还是未来设计目标?如果一处说 direct drive,另一处说 fully retimed,先检查是不是不同产品、不同阶段或不同连接位置,不要替厂商把两张图拼成一个不存在的方案。
AOC 产品验收与系统测试
那么,一家准备开发 AOC 的公司,到底应该保证什么?我们把视角放到客户验收,而不是从内部选用了哪颗芯片出发。
首先,客户接口必须可识别。不能只写一百一十二 G,要写协议、版本、通道数、各档速率和电气接口,说明连接器与时钟模式。若只提供通用物理传输能力,就明确支持的编码、连续性、时钟和电气条件,把上层协议验证的责任边界写清楚。
其次,要说明透明发生在哪一层。原始码流是否保留,FEC 在哪里终止,有没有重新编码,训练与空闲由谁处理,复位与边带怎样到达远端。这些答案决定它是一根协议专用的线缆、一段可复用的物理通道,还是一个包含桥接功能的连接系统。三者都可以有市场,前提是名字与承诺一致。
第三,性能要有条件。标称距离是在什么光功率预算、温度、老化和连接条件下成立?延迟是单端还是端到端,是否包含光纤飞行时间?误码率是在纠错前还是纠错后?除了平均误码,还能否看到不可纠正事件、链路重训和突发错误?没有测量位置的漂亮数字,很难变成可执行的验收标准。
第四,要把异常情况纳入产品。正常运行时像一根线还不够,远端断电、光路中断、某条通道退化、温度上升、复位发生时,主机看到什么?能不能及时报警,能不能恢复,是否需要人工重新上电?客户真正采购的是长期运行能力,而不是实验室里某一次成功连接。
第五,验证要从单个器件走到系统。电气测试证明发送器和接收器的某些指标合格,协议测试验证训练与状态机,互操作测试证明它能和选定的平台一起工作。通过一种测试,不能代替其他测试。宣称符合某个标准,也应区分厂商设计目标、实测结果,以及正式认证或合规清单中的状态。
想象研发团队交来两份报告。第一份说,所有通道连续跑伪随机码,没有观察到误码。第二份说,在指定主板和设备上,经过多次冷启动、热复位、速率切换、低功耗进入退出,以及断光后恢复,业务持续正确。这两份报告回答的问题不同。前者非常适合定位物理信道质量,后者才逐步接近客户真实使用场景。好的验收计划会让两者相互补充,并记录软件版本、固件配置和测试温度,避免下次换个平台就无法复现。
最后再补一个关于零误码的小常识。在有限时间里没有测到错误,不等于真实误码率等于零。工程上通常规定目标误码率、观测比特数和置信水平。在常用的统计假设下,要用零错误测试支持某个误码率上限,达到大约百分之九十五的置信水平,往往需要观测约三除以目标误码率那么多比特。测试条件和错误是否集中成串,也必须一并考虑。
因此,不应承诺光纤没有损耗,也不应把 FEC 宣传成无限保险。更有价值的承诺,是在明确条件下达到可测的可靠性,并且一旦越界,系统能够检测、报告和恢复。
回到开头那场采购会。有人问:我们有一百一十二 G 光通道,能不能做 PCIe AOC?现在,一个更专业的回答可以是:物理带宽只是起点。请先确定 PCIe 代际和时钟架构,再看训练、空闲、检测、复位、纠错和时延是否都能闭环。如果这些都有明确设计与测试证据,就有资格讨论产品承诺;如果只有峰值速率,就还只是一个部件能力。
今天可以记住三句话。第一,速率等级不是协议。第二,协议透明必须说清观察层级和工作条件。第三,AOC 的价值不只是把电变成光,而是在客户系统里,把完整的连接行为可靠地交付出来。
理解这三点,EIC、PIC、FEC、转发时钟和反向齿轮箱,就不再是五个互相竞争的名词。它们是同一条数据路径上,不同位置的工程选择。真正决定产品能否落地的,是这些选择组合起来之后,能否兑现一份清楚、可测、可复现的接口承诺。