尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

ADS眼图仿真实战:USB3.0链路从模型到判读的完整指南

ADS眼图仿真实战:USB3.0链路从模型到判读的完整指南 ADS眼图仿真不是玄学USB3.0链路从模型到判读的完整实操记录很多做硬件的人有个习惯SI仿真跑完了S参数曲线很好看插损在5GHz处也就负几dB然后就直接宣布这条链路没问题。但等到板子做回来眼图测试却过不了或者经常出现偶发性的链路训练失败。问题出在哪就出在只看S参数、没做眼图仿真上。S参数告诉你的只是频域的“底子”但USB3.0这种5Gbps甚至10Gbps速率的链路真正决定信号能不能被正确恢复的是时域里码间干扰、抖动、幅度衰减综合作用后的眼图。这篇文章我打算把用ADS做USB3.0眼图仿真的整个流程完整记录下来从模型获取到结果判读每一步都讲透给那些还在S参数阶段打转的工程师一条可以直接上手的路径。这篇内容适合三种人看正在做USB3.0接口设计的硬件工程师、需要给PCB走线做预验证的Layout工程师以及刚入门信号完整性、想在ADS里跑通一次完整眼图仿真的同学。我会尽量把背后“为什么这么设置”的逻辑也讲清楚而不只是给你一套按钮坐标。1. 为什么S参数不够必须补上时域眼图这一刀1.1 S参数只告诉你通道的“平均能力”不告诉你数据能不能过S参数本质上是线性时不变系统在频域的传递函数。它很客观地告诉你某个频点的插损是多少、回损是多少、串扰是多少。但问题在于USB3.0链路上传的不是单频正弦波而是一串包含丰富高频分量的数字码型。信号经过通道后不同频率成分被不同程度地衰减和相移叠加在一起就产生了码间干扰。S参数这种频域描述很难直观回答一个工程问题在5Gbps的码流下接收端采样点的电压余量还有多少。举个例子一条S参数曲线平坦、插损在规范内的通道如果相位响应非线性很严重照样会把眼图“扭”得没法看。反之一条插损稍微超标但相位线性度极好的通道配合均衡之后眼图反而可能还能过。这就是为什么我们必须从频域走向时域用眼图做最终裁决。1.2 眼图到底是什么把所有码型叠在一起看眼图的概念很简单把一串随机数据的波形按比特周期对齐全部叠加在一张图上。叠加的结果会形成类似“眼睛”的形状。眼睛张得越大说明信号在采样点的分辨能力越强眼睛闭合说明码间干扰加噪声已经把信号淹没到无法分辨0和1的程度了。USB3.0是典型的串行差分链路眼图是在差分电压上测的。它能直观反映三类问题幅度上是否还有足够的电压裕量、时间上是否还有足够的采样窗口、抖动和噪声是否在某个最差场景下把眼睛彻底闭上。这三个维度S参数一个都给不了。1.3 USB3.0链路自身的特殊性8b/10b编码和去加重USB3.0物理层的速率为5Gbps采用8b/10b编码。这意味着实际线上的信号翻转密度是受控的最长连续相同位不会超过5个UI这大大限制了低频分量的能量。正因为有这个编码约束仿真时码型的选择就不能乱来后面我会专门讲到。另外USB3.0发射端带有去加重De-emphasis机制具体参数是-3.5dB左右。它在发送时把连续码元的摆幅压低来抵消通道对后续比特的衰减。如果你的仿真模型里没有体现这个机制眼图结果会比实际好很多得出的结论直接失真。2. 开跑之前USB3.0眼图仿真需要的三样东西2.1 芯片模型IBIS-AMI模型怎么获取、怎么检查眼图仿真第一个少不了的是发射端和接收端的芯片行为模型。现在主流高速接口芯片都会提供IBIS-AMI模型它里面既包含模拟的驱动/接收特性也包含发射端去加重、接收端CTLE均衡等行为描述。获取模型的路径很常规一是去芯片厂商官网的“Design Resource”或“Signal Integrity”页面下载二是直接找FAE要。拿到模型之后我习惯先做的不是直接仿真而是打开AMI模型里的参数文件看一眼确认里面有没有包含发射端去加重参数、接收端均衡档位、模型支持的最大速率是多少。很多项目翻车就翻在这里——拿了一个老版本模型里面均衡能力已经过时了仿真结果当然对不上实测。2.2 通道模型PCB走线的S参数和连接器模型通道模型是眼图仿真的核心输入。它由三部分组成PCB上从主控芯片到连接器的走线S参数、连接器本身的S参数、以及如果是线缆场景还要加上USB3.0线缆的S参数。PCB走线的S参数推荐从板级设计工具里提取。常见的做法是在Allegro或HyperLynx里把走线所在的传输线模型导出成Touchstone格式也就是.s4p文件。为什么是s4p因为USB3.0每一对差分通道都是四端口网络差分输入两个端口差分输出两个端口四端口用.s4p封装。如果你的通道里还包含了过孔换层、连接器引脚就需要把这些都级联起来合成一个总的.s4p再丢进ADS。连接器模型的获取渠道相对简单USB3.0连接器厂商比如泰科、莫仕、立讯这些官网基本都提供S参数模型下载。记住一点下载时选择USB3.0 SuperSpeed对应的那对差分针脚的模型别下成USB2.0的D/D-那对了。2.3 ADC环境准备装什么组件、需要哪些LicenseADS本身是重量级软件装起来没什么好说的关键是要确认你的License包含Channel Simulator模块这是做眼图仿真最顺手的工具。如果你用的是老版本拿瞬态仿真硬跑眼图也不是不行但要手动搭激励源、设置扫描效率低很多而且控制抖动注入很麻烦。我的建议是直接用Channel Simulator。此外计算资源的准备容易被忽略。眼图仿真要跑几千上万个比特每个比特还要做多次采样对内存和CPU都有要求。我的经验是8GB内存是最低门槛16GB以上跑起来才舒服。尤其是当你把均衡和抖动算法都打开时仿真时间会成倍增加。3. 在ADS中搭建USB3.0仿真链路从S参数组件到激励源配置3.1 新建工程与仿真环境选择的那些讲究打开ADS后第一步是新建一个Workspace然后创建一个Schematic。在ADS里做眼图仿真有两条路线一条是传统的瞬态仿真加Eye Probe另一条是基于Channel Simulator的专用流程。我强烈推荐后者原因有三个参数设置更集中、自带抖动和均衡模型、结果后处理更专业。在Channel Simulator环境下不需要像瞬态仿真那样手动放置PRBS码型发生器和驱动器而是通过配置Transmitter模块来实现。这就像把“手动挡”换成了“自动挡”少了出错空间。3.2 导入并配置S参数组件别忽视网格和插值选项把建好的.s4p文件拖进原理图你会看到一个四端口S参数组件。双击打开后有两点必须手动检查。第一点是频率范围。USB3.0的基频是2.5GHz5Gbps速率下奈奎斯特频率为2.5GHz但这不是说你只需要关心到2.5GHz就够了。信号的上升沿包含至少5到7次谐波的能量所以S参数数据至少要覆盖到7.5GHz以上工程上建议关注到12.5GHz甚至20GHz。如果模型文件本身只到5GHz跑出来的眼图会明显偏乐观这是必须警惕的。第二点是插值方式。ADS默认的插值方式在不同版本里不同我建议你在S参数组件的属性里把插值类型设为Linear而不是Log或Spline。因为Log插值在低频点分布很密、高频点分布稀疏的Touchstone文件上会在高频段产生不太平滑的响应导致时域结果出现一些虚假的振铃。3.3 配置发射端速率、码型、去加重一个都不能漏发射端模块是Channel Simulator里最核心的配置项。你要设置的第一件事就是数据速率USB3.0直接写5Gbps即可注意单位不要搞错。第二件事是码型通道仿真器里一般会让你选激励类型USB3.0务必要选PRBS9或者如果工具里有专门的USB3.0合规码型模板直接用那个更好。为什么选PRBS9而不是PRBS31前面提到USB3.0使用8b/10b编码最长连续相同位不超过5个UI因此实际报文状态下的码型特性更接近短伪随机序列。如果用PRBS31它会包含比实际信号长得多的连续相同位这些低频分量会造成比真实场景更严重的码间干扰结果会偏保守。反过来如果你用PRBS7长度又太短可能无法覆盖最差的码间干扰场景。PRBS9是一个工程上公认的折中。如果你在做合规性预检可以从USB-IF官方文档里找到回送测试码型把那个码型文件导入ADS才是最贴近实测的做法但日常快速评估用PRBS9足够了。发射端还有一个参数是差分输出摆幅。USB3.0规范允许的发送端差分摆幅范围大概在800mV到1200mV之间典型值为1000mV。如果你的模型是基于实测校准的一般默认值就是对的如果是通用模型建议把摆幅设到1000mV再额外跑一个800mV的边界两个都过才算稳。关于去加重USB3.0规定的去加重幅度大约是3.5dB。在Channel Simulator的发射端模块里去加重通常是一个下拉框或者一个增益参数选成“有”或填3.5dB。我见过不少工程师在这里偷懒不开结果显示眼图很漂亮但实际板子上接收端就是天天报错误码。去加重对打开长走线通道的眼图至关重要千万不能省。3.4 配置接收端与端接均衡在哪里开、阻抗怎么设接收端模块里最关键的是均衡设置。USB3.0接收端通常会有一个连续时间线性均衡器用来提升高频增益、补偿通道损耗。在实际芯片里CTLE的增益档位是可以通过寄存器配置的仿真时你需要选一个代表性档位。我建议的做法是先跑一版不打开均衡的仿真看眼图到底差到什么程度再打开CTLE中等增益档位对比两者差异。这个对比能让你判断链路的余量到底来自哪里——是通道本身很好还是靠均衡硬拉回来的。如果关掉均衡眼图就完全闭合那说明你的走线损耗太大制造误差或温度变化后很容易出问题这时候就要考虑改版或加中继器了。端接阻抗的设置在ADS里同样要仔细。USB3.0规范的差分特征阻抗是85Ω±10%和USB2.0的90Ω标准不一样。这条细节经常被忽略很多人习惯性把差分阻抗填成100Ω那就不是在做USB3.0仿真了而是在做一个“以USB3.0速率跑的非标链路”。在接收端模块里把差分端接阻抗改成85Ω如果工具里没有直接选项就在传输线参数或终端负载里手动指定。4. 仿真参数里的那些旋钮抖动的注入和数据的统计量4.1 抖动注入随机项和确定性项分别怎么加眼图仿真的意义在于预估误码率而误码率的最主要来源之一就是抖动。Channel Simulator里一般会把发射端抖动拆成随机抖动和确定性抖动两部分。随机抖动RJ通常用高斯分布描述单位是ps或UI它的特性是会随着观察时间无限增加因此最终误码率在时间轴上是一条不断收窄的曲线。确定性抖动DJ则来源于码间干扰、电源噪声和串扰它是有界的。工程上做初版评估时我一般会在发射端注入一个总抖动约0.3UI的抖动预算其中RJ部分按典型值30ps左右设置DJ部分根据你系统中是否有严重的串扰源来决定如果有并行总线靠近就把DJ调大一点留出余量。这些数值不是拍脑袋定的而是参考了芯片数据手册里给出的发射端总抖动指标。每家的规格值不同做之前先查资料别嫌麻烦。4.2 仿真bit数数量太少眼图就飘太多又慢得发疯眼图仿真要跑多少个bit才够这是个经验题。bit数少了眼图边缘会出现明显的堆叠不均抖动统计不充分测出来的眼宽眼高都不可信bit数太多仿真时间指数级上升尤其是加了均衡和复杂抖动模型后跑一次可能等一个下午。我的经验值是初跑摸底用2000个bit如果眼图裕量看起来比较富裕就再用5000个bit精跑一次确认。如果发现裕量本来就很紧直接上10000个bit把最差情况看清楚。注意Channel Simulator里有些版本给出的bit数是“每比特采样数”和“总信号点数”的组合你需要换算一下确保总比特数达到要求。总仿真点数除以每比特采样数才是真正的参与统计的bit数。4.3 采样点与时间分辨率的影响每比特采样点数决定了眼图波形的时间分辨率。USB3.0的1个UI是200ps如果每比特采16个点那么时间分辨率就是12.5ps这对于观察几百飞秒级别的抖动影响来说是足够的。如果你发现眼图边缘毛刺很多、轮廓看起来很不光滑试着把每比特采样数增加到32会显著改善显示效果但仿真的内存占用也会相应上升。4.4 S参数频率网格的检查不仅仅是范围网格密度也是坑前面讲了频率范围要覆盖到至少7.5GHz但频率范围内的网格点分布同样重要。USB3.0信号在低频段能量集中包含从几乎DC到基波附近的密集频谱因此S参数在100MHz以下必须有足够密的频点否则插值之后会让低频段响应失真。我之前遇到过一份模型10MHz到1GHz之间只给了不到20个点跑完眼图就看到波形顶部有明显的倾斜一开始还以为是均衡参数设置错了排查了半天最后发现是S参数低频网格太稀导致瞬态仿真时低频分量没有被准确还原。后来重新抽取模型把低频段网格加密到100MHz以下每10MHz至少一个点眼图立马恢复正常。这提醒我每次拿到新的Touchstone文件先画一下S参数的频率响应曲线肉眼扫一遍频点分布再做眼图仿真才能避免这类奇怪的bug。5. 结果判读眼图、掩模与裕量评估的完整方法5.1 眼图参数怎么看眼高、眼宽、抖动与BER仿真跑完ADS会弹出一张眼图并自动计算眼高Eye Height、眼宽Eye Width、眼幅度、确定性抖动、总抖动等参数。对于USB3.0来说先看眼宽和眼高这是最直观的两个健康指标。眼宽的参考值不是固定的它和BER指标直接挂钩。USB3.0系统通常要求误码率低于1e-12在这个指标下单比特的UI是200ps总抖动预算一般控制在0.33UI以内。换算下来你的眼宽至少要有大约134ps的净开度才能算达标。眼高方面接收端均衡后的眼图高度一般要求在100mV以上如果低于这个数芯片在PVT变化条件下就可能误判。5.2 USB3.0的掩模怎么设置从波形模板到自动化判读ADS提供了眼图模板功能直接把USB-IF规范里的接收端掩模坐标点输入进去软件就会自动判断眼图是否触碰掩模。USB3.0接收端掩模的形状是一个六边形不同版本规范略有差异务必以你目标认证年份对应的规范为准。掩模的意义在于眼图可以整体看起来不小但只要任何一个角落压到掩模的边界线就说明有部分bit在采样点附近的信号质量已经不达标。ADS里可以设置“Margin to Mask”参数显示眼图边界到掩模的最小距离用这个做裕量评估非常方便。如果你想快速做多通道对比还可以在ADS的Results Display里创建多个眼图的叠加视图一眼看出版本差异。5.3 浴缸曲线和抖动分解怎样把裕量“量化”除了眼图本身Channel Simulator还会输出浴缸曲线。浴缸曲线的横轴是采样时刻纵轴是对应的误码率。曲线的形状像一个浴缸中间底部的平坦区域就是你可以在不同误码率要求下获得的眼宽裕量。判读浴缸曲线有个技巧先看1e-12处的眼宽是否达标再看曲线的左右两侧是否对称。如果左右不对称说明通道的确定性抖动或占空比失真比较严重可能存在反射或不匹配问题。如果曲线的斜率特别陡说明随机抖动占比高这时需要关注时钟源的质量而不是通道本身。使用双狄拉克模型ADS还能把总抖动分解为确定性抖动和随机抖动。这个分解结果对定位问题非常有用如果总抖动超标但确定性抖动很小那大概率是发射端或时钟源的问题如果确定性抖动占大头老实在通道上找原因。5.4 仿真和实测对不上的时候先检查这三处很多人到我这一步就草草收尾了结果板子回来实测眼图比仿真差得多再回头排查就痛苦了。根据我的经验仿真结果和实测对不上排在前面的是这几个原因。第一是S参数的频率范围或精度不够尤其是PCB模型是基于2D求解器提取的对过孔、连接器焊盘等不连续结构描述不准确。第二是发射端去加重或均衡设置和你的实际芯片配置不一致仿真里用的是理想档位但实际芯片里因为温度或供电原因没达到同样性能。第三是电源噪底带来的额外抖动没有建模进去仿真是在静默环境下跑的实测的供电纹波、瞬时压降都会直接转化为抖动。如果出现仿真通过但实测差很远的情况我建议你不要急着调通道先回头把仿真配置里的抖动增大看看眼图在多差的情况下才会失守这样能反推出实际通道的对应关系。6. 实战里最容易翻车的四个坑与我的排查思路6.1 模型只有5GHz带宽眼图“假大空”有一次我给一条USB3.0转接板做仿真从厂商网站下载的连接器模型带宽只有4GHz。看S参数时觉得还行结果跑出来的眼图非常漂亮眼高、眼宽全线达标。但我越看那个眼图越觉得不正常因为理论上这么长一段链路不可能有这么漂亮的眼睛。一查模型文件频率上限就在那摆着高频分量根本没参与仿真。在那之后我养成一个习惯拿到任何Touchstone文件先看注释段里标的频率范围和路径信息再扫一眼响应曲线在带宽边缘处有没有被“硬切”的痕迹——通常表现为在高频端插损曲线突然竖直掉下去。只要遇到这种硬切要么换带宽更高的模型要么至少在报告里注明这个限制。6.2 忘了开去加重仿真结果偏离实际之前带一个新同事做项目他负责一条直连主控和USB3.0连接器的走线仿真。他跑完很兴奋地告诉我眼图很完美不需要调整了。我过去看了一眼设置Transmitter里De-emphasis是Disabled当时就让他改回来重跑。改完后眼规眼高大概掉了一截但依然有足够裕量这说明我们的走线设计是健康的同时也给了我们一个准确的风险认知。我见过很多理论扎实但缺经验的工程师在这里栽跟头。去加重不是“锦上添花”的功能它就是USB3.0信号的真实形态。你不把它打开仿真的是“假USB3.0信号”结论当然不可靠。6.3 差分阻抗填成100Ω整个仿真基础就偏了USB3.0的差分阻抗要求是85Ω±10%这是规范明确写的。但很多PCB设计工具和仿真模板的默认值都是100Ω特别是那些从PCIe或以太网项目转过来的人一个习惯性动作就把这个值覆盖了。阻抗不匹配的直接后果是回损增大反射变强反映到眼图上就是眼宽变窄、抖动增加。你可能会奇怪明明是按板厂要求做好的85Ω走线眼图还是差。仿真器里面看终端就是个100Ω的负载当然出来的结果不对。所以每次搭新工程我都会先花两分钟把发射端阻抗、接收端端接阻抗、传输线目标阻抗全部检查一遍确保没有遗留默认值。6.4 SI仿真通过但输出错误码问题可能根本不在SI最后分享一个特别容易被忽视的场景你的眼图仿真做得非常规范结果很好但整机测试时USB3.0依然不稳定链路训练时不时失败。这时不要马上怀疑你的SI模型没建对因为问题可能根本不在信号路径上而是电源。USB3.0接收端对供电噪声极其敏感如果电路板上稳压器输出阻抗在某个频率上出现尖峰产生一个几十毫伏的纹波这个纹波会通过驱动器的电源引脚直接调制到输出信号上表现为附加抖动。这类问题在仿真时很难发现因为你手上往往没有完整的电源模型。我的建议是当SI仿真和实测结果差异无法用通道原因解释时做一个PDN的AC阻抗仿真把目标阻抗控制在目标频段内满足要求这样至少能从“电源没有明显谐振”这个维度排除变量。写到最后如果你正在做USB3.0或类似的高速接口设计我的建议是把眼图仿真当成一个常规动作而不是“有问题了才补做”的救火工具。在S参数阶段发现问题能改的是叠层、走线、打孔但这些改动在Layout定稿之后都代价巨大。眼图仿真虽然要多花半天到一天的时间搭建和调试但它在投板之前就能把时域质量问题暴露出来这笔时间永远花得值得。具体到操作上记住几个核心动作模型带宽必须够、去加重必须开、端接阻抗必须核对、码型必须符合USB3.0的编码特征然后带着怀疑的眼光去检查每一张“太漂亮”的眼图。信号完整性这个领域没有理所当然的漂亮结果只有每一步都经得起推敲的可靠数据。
返回列表