经常有朋友问我,做高速数字接口验证,为什么总要把眼图往芯片里面搬?高速SerDes、DDR、PCIe这类接口跑起来之后,信号速率上去了,芯片引脚和封装带来的反射、损耗在同一条链路里纠缠成一片“毛刺”,外部示波器探头根本够不着最佳测量点,这时候片上眼图技术就成了既能看波形、又不破坏信号完整性的关键手段。从EOM(Eye Opening Monitor,眼图张开度监测)到2-D Eye Scan,这条演进路线解决的其实是从“能不能通”到“还剩多少裕量”的判断问题。这篇文章我就把片上眼图从原理到实现,一层层拆开来讲。
我不会堆一堆“行业趋势”的空话,尽量按实际做项目的思路来。内容主要面向高速接口设计、信号完整性验证、芯片测试相关岗位的工程师,也适合刚接触SerDes物理层、想理解内建眼图测量到底是怎么一回事的同学。下面直接进入正题。
1. 为什么高速接口非得把眼图“搬进”芯片里
1.1 外部示波器的三个硬边界
要先理解片上眼图为什么出现,得先看清楚外部示波器在高速链路上能做的和不能做的。
第一是带宽。实时示波器要看几十GHz的信号,本身价格就夸张,探头、电缆、连接器每一样都在损耗边缘上挣扎。就算你舍得买一台带宽够的示波器,探头一上去,寄生电容和电感立刻改变了被测节点的阻抗,你看到的“真实信号”里面已经混入了人为扰动。对低速电路这不算什么,但到了56Gbps甚至112Gbps的PAM4信号上,一点点探针负载都可能把眼图张开关小。
第二是接入。现代高速接口封装越来越紧凑,引脚间距越来越小,球栅阵列封装的芯片内核信号直接走微凸点,再往上是HDMI、USB-C这种物理层和数据链路层高度整合的PHY。很多节点根本上就没有物理探测点,你连示波器探头的落点都找不到。很多芯片测试策略里,关键的高速链路只能通过环回模式验证,但环回只能证明“收发路径大体工作”,并不能给出眼看张开程度这种量化裕量数据。
第三是测量时长。外部示波器要统计出低误码率眼图的张开轮廓,需要大量采样。示波器虽说可以做到一次触发采集几百万个UI,但实际长期抖动、串扰、电源纹波这些低频效应,往往需要几十秒甚至几分钟的连续数据才能体现出来。示波器不可能一直挂在那儿跑生产测试,这在量产筛片上毫无优势。
这三个边界决定了:要获得可靠、可重复、又不需要外部设备辅助的眼图信息,就必须把测量通路做在芯片内部,让收发器电路自己充当“采样示波器”。片上眼图技术解决的就是这个“自测”问题。
1.2 片上测量的价值主张
做芯片量产测试的人都清楚一个道理:能不用外部仪表,就不用外部仪表。片上眼图最大的价值不是让你看得更“准”,而是让你在无法外接设备或者外接成本极高的环境下,依然能获得可比较、可追踪的测量结果。
比如芯片老化测试时,不可能给每颗DUT都插上昂贵的示波器和差分探头。片上眼图功能被系统控制软件调用,几千颗芯片在老化板上同时跑眼图扫测,哪个通道眼高下降了多少,哪个通道眼宽收窄了多少,数据统一回传,自动比对。这种场景下,精度不需要达到实验室示波器的水平,但必须有统一标准、可重复、全温度范围一致。
片上眼图的另一个价值在于量产分bin。以前高速接口芯片分配bin只有“良”和“不良”,但拥有了2-D Eye Scan之后,可以根据眼高、眼宽、眼张面积做更细的分级,高速接口性能优异的批次可以做更高级别产品,性能一般的批次流向消费级。这件事我们在PCIe Switch芯片项目里实际做过,效果非常直接。
2. EOM(眼图张开度监测)是怎么工作的:一维判断的核心闭环
2.1 EOM的核心流程:数据采样、电压扫描与误码统计
EOM可以说是片上眼图的“入门形态”,它并不画出完整的二维眼图,而是在特定时间位置(通常是眼图水平中心附近)对信号进行电压方向上的扫描,用误比特率来判定当前电压阈值下的接收裕量。
整个工作流程大致是这样:
- 接收器锁定在正常数据路径上,CDR(时钟数据恢复)已经把采样时钟对齐到最佳相位;
- EOM逻辑在原有的数据采样器旁边,通过一个可调的电压参考源建立第二个“判决采样器”;
- 这个参考电压从信号幅度的低端开始,逐步向上扫描;
- 在每个电压台阶上,EOM采样器与正常数据路径的采样结果进行逐比特比对,统计不一致的次数,即为该电压位置上的误码数;
- 当参考电压逐渐进入眼图中央,双采样器判决结果基本一致,误码数为零;当参考电压移到眼图边缘以上或以下,误码率急剧攀升。
在这个过程中,最关键的是如何把“误码为零”这个结论转换成眼高。我们一般设定一个目标误码率阈值,常见的有1e-9、1e-12等等。EOM控制逻辑通过二分查找算法,快速逼近满足该误码率阈值的最高和最低电压点,两者之差就是统计意义上的眼高。
这里用一个简单的伪码描述二分查找逻辑:
function eom_voltage_search(initial_voltage, direction): low = min_voltage high = max_voltage for step in range(N): mid = (low + high) / 2 ber = measure_ber(mid) if ber > TARGET_BER: if direction == UP: high = mid else: low = mid else: if direction == UP: low = mid else: high = mid return (low + high) / 2很多人误以为EOM测的是某个时刻的瞬时电压,其实不是。EOM本质上是统计采样,它通过大量比特的对比判断某个电压阈值的出错概率,跟示波器的余辉其实是同一种思路,只是把采样点从二维网格退化到了单个时间位置上的一维电压扫描。正因为它只扫电压不扫时间,EOM通常被做成快速判定功能,一条通道的完整眼高扫描只需要几十毫秒。
2.2 从BIST到片上示波器:EOM采样结构的可靠性考量
EOM本身是一种BIST(内建自测试)结构,但它在真实应用中对硬件设计有一些特殊要求。
最主要的坑是参考电压的产生。EOM的电压扫描精度直接取决于DAC的单调性和噪声。很多芯片用电阻串DAC,看起来很简单,但电阻串的分压节点在大量比特切换时会有突冲电流,电压台阶跳变瞬间的毛刺会造成误码统计偏差。项目里我们用过两种方案,一种是加输出缓存放大器,但带宽做不高;另一种是分段电阻树加高速开关,每次切换后等待稳定再开始采样。实测下来,后者的重复性更好。
另一个问题是第二采样器的输入电容与主数据采样器不一致,导致参考采样点与实际数据采样点在时间上不完全重合。EOM测出的“眼中心”有可能是偏移了几皮秒的眼中心,这在高数据率下无法忽略。所以靠谱的EOM设计都会把第二采样器的版图布局做得与主采样器完全对称,并且在前级加独立的输入缓冲,让两个采样路径的延迟尽量一致。
我在实际调测中还遇到过更隐蔽的问题:EOM的参考电压扫描范围是相对电源轨的,但电源存在纹波,EOM测出来的眼高里其实混入了电源噪声的影响。这在某些场景下是特性,有些场景下是误差。比如你要测量的是“芯片在标称电源纹波下的实际眼高”,那没问题;但如果你要评估的是收发器自身的性能极限,就得给EOM的电压参考源加额外的滤波或采用差分参考架构,让它对电源纹波不敏感。
3. 从EOM升级为2-D Eye Scan:两种典型的实现路线
3.1 基于PRBS统计点扫描的构架
EOM只测量眼图中心位置随电压变化的裕量,不涉及时间偏移,所以它无法反映眼图的水平宽度。2-D Eye Scan就要在电压扫描的同时增加时间维度,得到真正二维分布的眼图轮廓。
最常见的实现方式是用PRBS测试码型激励待测通道,接收端的扫描采样器在内部产生一个可调时间偏移和可调电压偏移的二维扫描网格,并在每个网格点上统计误码率。这与EOM的二分查找完全不同,扫描采样器必须能够在多个时间位置上对码流进行采样,并判断该情况下是否出错。
系统的扫描流程大致如下:
- 初始化:把扫描采样器的相位偏移设为0,电压偏移设为中心;
- 按预定的网格步长,循环调整电压阈值和时间相位;
- 在每一个二维坐标上,让扫描采样器工作一段时间,采集N个比特,统计误码数;
- 误码数超过预置阈值,判定该点“不开放”,否则判定为“开放”;
- 最终把所有网格点的判定结果绘制成二维眼图。
这个方案的优点是逻辑简单、面积开销小,复用EOM的大部分硬件;缺点则是测量时间长。假设眼图范围是2V乘以2UI,量化步长为5mV和0.02UI,那就是400x100=40000个网格点,每个点统计10万个比特,总比特数就是40亿个。在28Gbps的数据率下,大概需要14秒以上。对于实验室调试可能无所谓,但对于生产测试来说,这是不可接受的。
所以工程上对这个架构做了很多优化。常见做法是先粗扫后细扫,先用大步进快速找到“危险区域”的边界,再在边界附近用小步进加密扫描,形成分层网格。还有一种做法是分析眼图的统计规律,只扫描等边界的轮廓线,也就是用类似等高线搜索的方法,找到各个目标BER对应的眼图轮廓,这样网格点数量可以减少一到两个数量级。
3.2 基于并行采样阵列的二维眼图
如果单纯追求单次测量速度,可以采用并行采样架构,即让多个采样器同时工作,分别对应不同的相位偏移和电压阈值。这样一次码流通过就能同时采集多个眼图位置的信息。
这种结构的硬件开销很大。每个并行采样器相当于一个独立的小判决电路,还要有各自独立的相位插值器。在28Gbps的SerDes接收端,一个DLL或PLL驱动的移相网络可能只能稳定输出8到16个相位,再多相位的skew会失控。所以并行采样阵列通常限制在中等分辨率,例如16个相位点乘以8个电压点,共128个采样器。
并行架构在PCIe Gen5/Gen6的链路均衡训练中有实际应用场景。因为在训练过程中,链路需要快速评估发送端均衡参数调整是否有效,如果没有并行眼图扫描,每轮参数调整都跑一遍PRBS统计,训练时间会拖得非常长。有了并行采样,一次突发数据就能拿到足够的信息来判断均衡方向。
从我的经验看,选择哪种2-D Eye Scan架构,核心权衡在于下面这张表:
| 对比项 | 统计点扫描架构 | 并行采样阵列架构 |
|---|---|---|
| 硬件面积开销 | 低 | 高 |
| 单次扫描耗时 | 长(秒级) | 短(毫秒级) |
| 分辨率可变性 | 灵活,软件可控 | 受硬件数量限制 |
| 适用场景 | 实验室调试、深度诊断 | 生产测试、快速链路训练 |
| 对时序收敛的要求 | 低 | 高,多相位偏斜是难点 |
实际项目中我见过不少两者结合的方案:芯片启动阶段用并行粗扫加快训练,进入运行模式后用统计点扫描做细粒度的健康监测。这种混合方案不是最优解,但确实是工程可落地性最强的。
4. 影响片上眼图精度的那些“坑”:抖动分配、偏置与校准
4.1 EOM摆放位置与寄生通路
片上眼图采样器放在哪个位置,直接影响它能“看到”什么信号。很多初做片上一体化测试的同仁会忽略这个问题,以为采样器只要能接到RX输入缓冲的输出端就行。实际上,RX输入路径上有很多关键节点:焊盘输入点、ESD保护管后、均衡器输入端、均衡器输出端、判决器输入端。不同位置的眼图形态差异非常大。
焊盘输入点看到的是反射最严重、背景噪声最强的信号,眼基本是闭合的;均衡器输出端看到的是已经经过CTLE和DFE补偿的信号,眼图明显张开,但这时候的形态已经不再反映链路的原始质量。你要回答的问题决定了采样的位置:如果想知道链路上通道本身有多差,采样点要尽量靠近焊盘;如果想评估最终误码率,采样点应该尽可能靠近判决器。
EOM和2-D Eye Scan本身存在一个天然的限制:它看到的是经过接收前端之后、尚未经过最终判决的信号。这个节点之前的均衡器、自动增益控制、偏移校正电路,它们带来的噪声和串扰也会被眼图记录下来。也就是说,片上眼图是从采样点往发射端方向“看回去”的链路质量,不是纯粹的信道特性,也不是完全意义上的接收裕量。理解到这层,你才能正确解读眼图扫描结果。
4.2 校准回路与两点“自校准”
影响片上眼图精度的第二大问题不出在信号通路上,而是出在参考量上。EOM和2-D Eye Scan都要依赖内部的时间基准(延迟线或相位插值器)和电压基准(参考DAC),这两个基准自身都可能漂移。
时间基准方面,相位插值器通常需要配合校准码才能保证输出相位的线性度。如果某个电压点的相位插值器本身有0.5 LSB的DNL误差,扫描得到的“眼宽”就会系统性偏差几个百分点。很多芯片会在开机或每次扫描前,把相位插值器的延迟-编码关系做一次自校准,利用延迟锁定环产生的均匀相位间隔作为参考,逐级测量相邻相位的实际延迟差,再反向修正控制码。
电压基准的校准更隐蔽。参考DAC的满量程电压由带隙基准或者电阻分压决定,温度漂移和老化都会让它偏离设计值。实现里的做法是给DAC增加两点校准结构:一个是零值校准,把参考电压强制接到地电位,调整失调消除码;一个是满量程校准,把参考电压接到一个内部精密基准源上,调整增益误差消除码。在量产测试插入式测试模式里,这两步校准会在每颗芯片出厂前做一次,校准表烧录到非易失存储区;正常工作时直接加载校准表,避免每次扫描都重复校准。
这里还要提一个非常容易被忽略的问题:EOM扫描期间,主数据路径的DFE抽头系数是不是保持不变?如果DFE自适应还在跑,抽头系数会随着输入码型不断调整,那么EOM看到的眼图会跟着抽头系数浮动,扫描结果出现“呼吸效应”。做2-D Eye Scan时,规范的流程是先把DFE系数钉住,再做扫描。我在第一个做EOM的项目里没注意这个问题,重复性始终达不到要求,最后把DFE adaptive free-running改为frozen之后,问题立刻消失。这个经验我建议其他工程师提前记住。
5. 实测数据长什么样,以及如何解读
5.1 二维眼扫描的典型图表:从色阶图到限界轮廓
2-D Eye Scan的结果通常保存为二维矩阵,横轴是采样时间偏移(以UI为单位),纵轴是采样电压偏移(以mV为单位),每个坐标点的值表示该位置统计到的误码率。
呈现方式有两种主流形式。第一种是色阶图,把误码率按对数尺度映射到颜色深度,深蓝色表示无误码区域,红色表示高误码率区域。这种方法信息量大,可以直观看出眼图内部哪些区域出现了“意外的高误码率”,往往对应码间干扰、串扰峰值或者其他非理想效应。第二种是限界轮廓图,把某个目标误码率对应的边界画成等高线,例如1e-6、1e-9、1e-12三条轮廓线,就像地图上的等高线一样,能明显看到眼图的“高原”和“陡坡”。
实际读取结果时,我有几个固定习惯。第一,先看眼图轮廓的对称性:如果上下眼宽不对称,通常存在占空比失真;左右眼高不对称,大概率是上升沿和下降沿响应不一致,或者发送端存在非对称的预加重。第二,看眼图中心是否存在“小岛”或“空洞”,这种局部异常往往指向DFE抽头过冲或反射驻波。第三,看高误码率区域的轮廓是否平滑:如果轮廓边界呈锯齿状,可能是扫描网格步长太大,也可能存在周期性抖动源,需要结合抖动分解进一步确认。
有一次我们调试一款56G PAM4 SerDes接收芯片,发射端均衡已经反复调整,外部示波器看到的双通道眼图都“看起来完美”,但系统误码率就是压不下去。接上2-D Eye Scan后才发现,G下面那层眼的右上角区域有一块局部误码率异常升高的“暗斑”,范围大概只有0.1UI乘20mV。后来定位到是某个电源域上数字逻辑翻转时产生的固定频率噪声,与数据边沿形成了周期性的相位调制。要是没有二维眼图,单靠误码仪和示波器,这个问题估计得排查好几天。
5.2 从功耗、应力来挑选2D眼扫描设计的工程实践
做片上眼图功能规划时,功耗和设计复杂度往往被低估。EOM只需要一个额外的采样器和一组DAC,功耗增加极小。但2-D Eye Scan整体扫描时,相位插值器在短时间内会反复切换路径,数字控制逻辑高速翻转,这部分功耗可能会达到几十毫瓦级别,对于某些对功耗敏感的移动芯片,不可忽略。
所以在芯片设计阶段就要确定眼图测量的工作模式:是只支持低频偶发扫描,还是支持连续的实时监测?前者可以把眼图扫描模块做成完全独立电源域,通过电源开关控制,平时完全关断,只在测试时开启;后者则必须把眼图扫描模块与其他模拟前端一起放在常开电源域里,前提是功耗预算允许。
另外,从测试时间成本来看,2-D Eye Scan的全扫描数据量很大。一个常见的误码率矩阵原始数据就有几MB,如果要通过慢速的串行调试接口传到上位机,传输时间甚至会比扫描时间还长。工程上做法是压缩结果,只把误码率超过若干档位阈值的位置记录下来,例如只输出1e-9和1e-12两个阈值的限界坐标,这样一张眼图只有几百个点,传输毫无压力。
还有一点想重点强调:片上眼图测量结果与外部示波器测量结果之间通常存在系统性差异,你不能指望两者完全一致。差异的来源在于片上测量点的带宽、负载、噪声基底与示波器不同。在做设计验证时,应该先建立两种测量方式的对应关系,例如在同一个EVB上同时量片上眼图和示波器眼图,找出两者之间的偏差规律,之后在生产测试中,用片上眼图的绝对数值与历史数据做比对,而不是与外部示波器数值直接比较。这样才不会因为“数值对不上”而浪费大量排查时间。
我在实际使用中发现,判断一套片上眼图功能做得好不好,有一个非常粗糙但有效的标准:把同一颗芯片放在相同温度和电压条件下,连续做20次2-D Eye Scan,如果每次扫描出的等高线轮廓面积偏差在5%以内,说明这套系统的重复性达标了。如果连这个都做不到,后面所有数据分析都建立在沙子上。
眼图扫描技术这几年还在往更精细的方向走,从二维眼图再到峰值失真分析、甚至内建误码率和抖动分解,链路越来越复杂,但是“怎么测得更准、更快”这个核心问题一直没有变。理解清楚EOM的实现逻辑,理清2-D模糊扫描的两种路径,把控好校准和解读的细节,这套技术用起来就会非常实在。