ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Cadence ADE环境下VCO相位噪声仿真:PSS与Pnoise参数设置详解

Cadence ADE环境下VCO相位噪声仿真:PSS与Pnoise参数设置详解 做模拟射频IC的朋友十有八九都被VCO相位噪声仿真折磨过。刚接触Cadence ADE那会儿我在PSS和Pnoise的设置界面里来回折腾要么仿真到一半直接不收敛要么跑出来的相位噪声曲线在低频端完全不合物理直觉。等把整个流程吃透之后回头看发现大部分问题都出在几个看似不起眼的设置上。这篇内容就围绕Cadence ADE环境把VCO相位噪声仿真从原理到实操完整拆一遍包括PSS参数怎么定、Pnoise的噪声类型怎么选、曲线怎么看、报错怎么排查适合刚开始做VCO设计、或者已经在跑仿真但结果总是不对劲的工程师参考。1. 先把概念理清楚VCO相位噪声到底在仿什么1.1 相位噪声的工程定义相位噪声描述的是振荡器输出信号在频域上的谱线纯度。理想情况下一个正弦振荡器输出应该是一根无限窄的频谱线但实际电路里存在各种噪声源这些噪声会让信号的相位和幅度随机抖动表现在频谱上就是载波两侧出现了“裙边”。工程上通常用单边带相位噪声来表示在偏离载波频率f_offset处取1Hz带宽内的噪声功率与载波总功率之比单位是dBc/Hz。对VCO来说典型关心的是1kHz、100kHz、1MHz甚至10MHz频偏处的相位噪声指标。公式层面大家可能都见过Leeson模型它把相位噪声的频谱大致划分为几个区域近载波处的1/f^3区域闪烁噪声上变频主导、1/f^2区域白噪声源积分而成、以及远偏频处的噪声平台。仿真要做的就是把这条曲线在不同频偏处的具体值算出来。很多初学者会把相位噪声和抖动混淆。抖动是相位噪声在时域的积分表现对某些系统来说更容易测量但设计阶段用相位噪声曲线分析问题更直接。Cadence ADE里的PSSPnoise组合就是专门针对周期性稳态电路的噪声分析工具既给频偏域曲线也可以在后处理里换算成抖动。1.2 为什么不是AC仿真也不是瞬态加FFT有的朋友习惯了LNA、Mixer的AC仿真拿同样的思路来处理振荡器第一次跑AC分析就会碰壁。AC仿真本质是围绕固定直流工作点做线性化小信号分析但VCO工作在大信号周期稳态下器件跨导、电容值都在周期性变化简单线性化没法描述这种“周期时变”系统。振荡器的噪声上变频、Fold-Back等现象根本不在AC分析的建模能力范围内。那直接把瞬态跑出来的波形做FFT行不行确实有人用这个方法估算相位噪声但实际做下来问题很多。FFT频率分辨率受限于仿真总时长你要看10kHz频偏处的噪声就需要极长的瞬态仿真时间和资源成本高到不现实。另外窗函数泄漏会让近载波噪声严重失真测出来的近端相位噪声基本不可信。所以Cadence提供了一个专门的仿真思路先用PSSPeriodic Steady-State找周期稳态工作点再用PnoisePeriodic Noise在这个周期时变工作点上做噪声分析。这套组合能精确计算噪声从低频向载波附近的搬移也能区分AM噪声和PM噪声是VCO相位噪声仿真的标准做法。2. 仿真前的准备电路、模型和ADE环境2.1 选一个合适的VCO测试电路仿真流程要靠电路承载先用一个常见的LC-VCO拓扑作为示例。结构上包含一对交叉耦合MOS管提供负阻一个LC谐振腔决定振荡频率变容管用于频率调谐尾电流源提供偏置。电源电压1.2V目标振荡频率5GHz附近控制电压作为扫描变量。这种拓扑是教科书级的例子仿真收敛性相对友好适合先把流程跑通。器件选择上有两个习惯要养成。第一尽量用工艺库里的真实器件不要什么都用analogLib理想器件顶上。理想电感和理想电容虽然跑得快但会掩盖很多真实效应比如电感的寄生电阻、电容的Q值这些直接决定相位噪声曲线的本底水平。第二确认所有器件的模型库已经正确加载否则后面仿真器会报一堆“Device not defined”的错光排查就得花半小时。这里提一下VCO的起振条件要先在直流工作点上心里有数。交叉耦合管的跨导要能补偿谐振腔在振荡频率处的等效并联损耗也就是gm * Rp 1这个条件不满足的话PSS再怎么调也不会收敛到稳定振荡因为电路压根不起振。2.2 ADE版本选择与初始设置Cadence的模拟设计环境有多个版本传统叫ADE L后来又发展出ADE XL、ADE Explorer等。不同版本的界面布局有差异但核心仿真参数设置逻辑是一致的。以ADE L为例说明如果你用的是ADE XL对应关系很快就能映射过去。进入ADE后第一步是加载模型库。菜单路径在Setup - Model Libraries需要把PDK对应的工艺模型文件加进来同时注意选择正确的Section比如tt、ss、ff对应的工艺角参数。这个步骤被很多人忽略但报错里最常见的“器件未定义”就是从这里来的。第二步是确认Design Variables。把电路里需要扫描或者留作变量的参数添加进去比如vctrl、vdd等名称要和原理图里写的一致。这里很容易出现拼写不一致导致的“Parameter not defined”如果是通过CDF参数引用的变量检查一下大小写。第三步不要急着上PSS先做一次DC工作点和瞬态确认。我的习惯是先跑一个200ns级别的瞬态看看输出端是否起振、振荡频率大致是多少、幅度稳定在什么水平。这一步极其重要它提供了后续PSS设置需要的关键信息比如实际振荡频率、起振时间这些参数会直接决定PSS和Pnoise里的设置值。跳过这一步直接跑PSS遇到不收敛就只能瞎猜参数效率非常低。3. 核心环节PSS分析的参数设置3.1 Beat Frequency到底怎么定PSS分析是相位噪声仿真的第一步它要找到电路在周期稳态下的解。PSS分析要求用户提供一个“Beat Frequency”基波频率也就是电路稳态周期信号的频率。对VCO来说这个频率应该接近实际振荡频率。有一种做法是把beat frequency直接猜成5GHz但如果你估算的频率和实际振荡频率偏差太大PSS可能无法收敛。还有一个更省心的办法在PSS设置里勾选“Oscillator”选项同时给出一个估算频率。选择Oscillator模式后电路上还需要指定一个振荡节点仿真器会在谐波平衡迭代中自动修正频率最终收敛到真实的振荡频率上。这样即使估算频率偏差一点也能得到正确结果。但我要提醒的是即便用Oscillator模式beat frequency也不要随便填一个离谱值。填一个接近实际值的初始猜测能显著提升收敛速度。所以前面说的“先跑瞬态确认振荡频率”这个步骤就更重要了。另外如果你做的是VCO频率调谐特性仿真控制电压每次变化后振荡频率都会变。可以用一个变量表达式把目标频率和控制电压的关系先做个粗略估算再填到beat frequency里。Number of Harmonics谐波次数的设置也要留意。默认10通常足够但如果电路里谐波很丰富比如C类振荡器或者脉冲电流很尖锐宁可设置到12或者15保证PSS计算稳态时能捕捉到足够的谐波成分。谐波次数太高会显著增加仿真时间在LC-VCO这种正弦近似较好的电路里设置5~7一般就够用了。3.2 Tstab、误差准则和其他关键参数Tstab这个参数代表PSS先跳过的一段瞬态时间目的是让电路先“跑入”稳态周期然后再开始谐波平衡迭代。Tstab设置得太短电路尚未稳定PSS无法找到准确的周期解设置得太长白浪费仿真时间因为PSS的瞬态部分不是免费的。经验值是先跑一个瞬态记录振荡幅度从开始到基本稳定的时间然后把tstab设为这个时间的1.5到2倍。比如一个5GHz VCO如果起振后约50ns幅度就稳定了tstab设成100ns左右就比较保险。工程上也可以先设一个很小的tstab跑一次失败再逐步加大但这样多试几次也挺费时。误差条件里有个Errest参数默认一般设在1e-5。如果你发现相位噪声曲线的近载波段不太平滑可以试着提高到1e-6代价是仿真时间明显上升。振荡器仿真对误差并不像其他电路那么敏感但太粗糙的误差设置确实会让近载波相位噪声出现数值噪声。还有一个实际经验如果PSS瞬态过程出现数值振荡或者收敛困难可以把maxstep设成振荡周期的1/20到1/50强迫仿真器走更小的时间步。代价同样是仿真时间变长但在调试阶段这招经常能救回一个本来要放弃的case。4. Pnoise分析与相位噪声曲线读取4.1 Noise Type选Sources还是Time-AveragedPSS跑通之后紧接着要设置Pnoise分析。Pnoise设置里第一个让人犯迷糊的是Noise Type常见选项包括sources和time-averaged。对于VCO这种振荡器必须选sources。选sources的含义是仿真器会在PSS得到的周期时变工作点上把每一个器件噪声源视为周期时变调制源再计算它们对输出端相位噪声的总贡献。这个过程能准确模拟“周期性调制”和“频率搬移”效应比如MOS管的闪烁噪声在振荡器里会通过非线性机制向上搬移形成近载波的1/f^3区域sources类型能把这个效应算出来。time-averaged类型则是把噪声源当作时不变来处理适合一些非振荡器或简化估算的场合。如果用它来分析VCO你会得到一个在物理上基本不合理的相位噪声结果近载波处缺少由器件闪烁噪声上变频带来的低频上翘。所以这个选项要记住VCO相位噪声选sources。后面还有个“Output”设置可以选择single-ended或differential。对单端输出节点观察相位噪声时选single-ended对差分输出端选择differential来评估差分信号质量。为了符合大多数VCO使用场景通常以差分输出为参考进行分析这需要勾选输出正负两个节点。同时把“Input Source”留空因为振荡器的噪声源来自电路内部不需要外部人为注入噪声源。4.2 扫描设置、参考边带和最大边带数Pnoise扫描要选择“Sweeptype relative”也就是相对于载波频率的频偏扫描比如从1kHz扫描到10MHz正好覆盖通信系统关心的range。Relative Harmonic一般设为1表示在基波频率附近观察相位噪声。Maximum sideband这个参数值得特别注意。周期时变系统里噪声会在各次谐波之间搬移形成无穷多个边带。仿真器不可能计算无穷多个所以需要设定一个最大边带数。默认值10能用但如果你的相位噪声曲线在远偏频处出现抖动或者不光滑一个常见原因就是最大边带数不够。对于5GHz以上的高频VCO我通常直接设到20宁肯多花点时间也要让远偏频处的噪声结果稳定。Reference sideband的设置也需要检查。如果设置了不合理的参考边带比如大于最大边带数仿真会直接报错。正常情况下设为0或1即可它是用来定义phase noise的参考边带位置的。实际调试中如果相位噪声曲线在某个频偏处出现周期性尖峰多半就是边带设置出了问题。4.3 如何读取相位噪声曲线和关键指标仿真完成后结果查看路径在Results - Direct Plot - Pnoise选中“Phase Noise”后就能画出dBc/Hz随频偏变化的曲线图。也可以直接把数据导出成CSV方便导入其他工具做后处理或对比。看这条曲线的时候我一般会重点关注三个位置1kHz频偏处的近载波值、100kHz频偏处的中间值、1MHz频偏处的远载波底噪这三个点基本能反映VCO的相位噪声性能全貌。判断曲线形状是否符合物理规律有一个简单标准近载波处斜率大约是-30dB/dec由1/f噪声主导对应f^-3区中间段斜率大约是-20dB/dec白噪声积分区对应f^-2区远载波处逐渐趋于平坦。如果曲线形状和这个规律相差很远比如近载波处是平的或者出现突刺那大概率是仿真设置问题而不是电路的真正性能。这时候别急着改电路先回去检查PSS是否真正收敛、tstab是否足够长、噪声类型是否选对。5. 常见报错和问题排查实录5.1 PSS不收敛怎么办PSS不收敛是VCO仿真里遇见频率最高的问题报错提示五花八门但解决思路是相通的。我按优先级排列一下排查手段。第一步检查起振条件。在跑PSS之前先用瞬态仿真确认电路确实能够振荡。如果瞬态波形在很长一段时间里只有噪声导致的小幅度扰动而没有建立稳定振荡说明负阻可能不够电路的gm*Rp 1PSS当然找不到周期解。解决办法是调整交叉耦合管的尺寸或者偏置电流。第二步检查tstab。很多收敛失败都是因为tstab太短仿真器还没等到幅度稳定就开始尝试谐波平衡。把tstab从默认值加大到起振稳定时间的1.5~2倍收敛概率会显著提升。第三步调整谐波次数。如果电路谐波比较丰富而Number of Harmonics设置太小PSS会严重失真。试着增大谐波次数或者反过来如果电路接近正弦把谐波次数减小有时反而更稳定。这就是一个“给仿真器它容易收敛的条件”的问题。第四步是调整PSS的数值方法。Cadence里有一些进阶选项比如“Robust”或“Accurate”的Harmonic Balance求解器变体。遇到顽固的不收敛可以尝试更换解法器比如使用Robust模式。另外将“Automethod”中某些积分方法禁用例如将Gear Only开启或关闭也偶尔会改善瞬态阶段的数值稳定性。最后还有一个野路子放宽Errest到1e-4甚至3e-4先拿到一个粗糙但已经收敛的稳态解把这个结果作为初始猜测再回到1e-5精度重新跑。这种做法在调试阶段非常节省时间。5.2 相位噪声曲线异常时的排查方向相位噪声曲线异常比完全不收敛更让人抓狂因为它没有直接报错只是看似“差不多”又好像“差很多”。我遇到过几类典型的异常在这里整理成速查表。异常现象可能原因排查步骤近载波处曲线平坦没有-30dB/dec上翘噪声类型选错或者tstab不足确认Noise Type为sources加大tstab曲线出现周期性的尖峰或纹波Maximum Sideband太小或Reference Sideband错误加大Maximum Sideband到20以上核对Reference Sideband远偏频底噪很高整体上抬电路本身Q值低或者仿真精度不够检查LC谐振腔寄生电阻提高Errest精度相位噪声曲线“劈叉”不光滑PSS稳态精度不够提高Errest到1e-6增加PSS Harmonic次数曲线在低频处出现抖动噪声数值噪声tstab过短增大tstab让电路完全稳定后再提取PSS有一类问题我特别想单独拿出来说当近载波端的相位噪声曲线出现异常“凸起”时不一定是仿真器的问题也可能是你观察的节点放错了。相位噪声需要在真正的振荡输出节点上观察如果探针放在了后续缓冲器的输出缓冲器自身的噪声会混进来曲线形状就会发生偏移。处理方法是把pnoise的输出节点改到VCO核的振荡节点或者把缓冲器噪声单独做噪声贡献分析。5.3 器件未定义和参数缺失的快速解决“Device not defined”和“Parameter not found”这两类错误在团队新人里反复出现其实都很好解决。前者是模型库没有加载完整。在Setup - Model Libraries里检查PDK模型文件是否加入是否选中了正确的Section。用后仿网表跑仿真时还要注意把寄生参数对应的模型文件一并加入。后者通常是变量名不一致。比如原理图里调谐电压叫v_tune但Design Variables里写的是vctrl仿真器当然找不到。检查变量名时要仔细核对包括大小写Cadence的变量名是区分大小写的。另外一个容易被忽略的坑是输出节点引用问题。后仿真时很多节点名会带斜杠或冒号在Pnoise设置里指定输出节点时如果用错了格式也会报节点找不到。解决方法是尽量用原理图界面里直接鼠标点击节点而不是手动敲节点名这样能避免大部分拼写问题。6. 我的实操心得最后分享几个我在长期跑VCO相位噪声仿真中沉淀下来的个人经验未必写在官方手册里但实战中很管用。第一个心得是“先快后慢”。在方案探索阶段不要每次都用最高精度、最大扫描范围去跑。可以先跑一个PSStstab很短的快速case用Pnoise扫一个窄频偏范围比如10kHz到1MHz把电路改动的趋势看个大概然后针对有希望的版本用完整精度跑最终指标。这样每天能迭代很多次而不是一晚上只改完一个case。第二个心得是“看波形、读数值、看曲线”三者结合。凡是遇到结果异常先回到瞬态波形确认起振和稳态再回到PSS菜单检查设置最后才去看相位噪声曲线。很多时候问题出在你以为一定没问题的基础参数上比如电源电压写错了、控制电压没赋初值这种低级错误。第三个心得是用对比表记录不同corner下的相位噪声走势。PSSPnoise仿真比较昂贵全corner扫描时间很长。我的做法是先用ss corner跑一遍看最差情况如果ss结果达标再跑tt和ff确认产线范围。如果时间不够就只跑ss和ff两个极端tt作为参考。第四个心得是关于PM噪声和AM噪声的。Pnoise能分别输出AM和PM噪声分量相位噪声指标通常由PM噪声主导。如果发现AM噪声异常大说明你的电路幅度噪声没有被抑制干净这时候先别在仿真设置上纠结回到电路本身去看尾电流源噪声和幅度限制机制的设计。最后想特别说一句相位噪声仿真的本质是帮助设计者理解噪声怎么在振荡器里流动。参数设置不是目的读懂结果背后的物理含义才是。每次改版前先想想电路里的哪些器件是这个频偏段噪声的主要贡献者然后盯着仿真里的噪声贡献列表去验证这个过程比机械地点击仿真按钮有用得多。
返回列表