写这篇分享之前,先交代一句:我习惯保持匿名写作,这样既能把话讲得直白,也方便分享一些项目里踩过的真实细节。技术分享这件事,署名不署名没那么重要,重要的是把原理和坑讲透。
做PLL锁相环的工程师,几乎都被同一个问题折磨过:环路明明锁定了,输出频谱上却冒出一堆不该有的参考杂散,或者抖动指标死活压不下去。你从头到尾检查VCO、检查环路滤波器、检查分频器,都没毛病,最后拿探针去点电荷泵的输出,才发现充放电电流差了那么百分之几。别小看这百分之几——在电荷泵PLL里,电流失配就是那个藏在暗处、一点点啃掉性能的慢性毒药。
这篇文章想把三件事讲清楚:电荷泵电流失配到底怎么影响PLL性能,为什么传统的“尽量匹配”思路在深亚微米工艺下越来越不管用,以及Jae-Shin Lee那篇经典方案是怎么从架构层面把失配问题绕过去的。最后我会结合自己的仿真和流片经验,整理一套可以直接落地的排查与设计流程。无论你是刚开始做PLL的在校学生,还是被杂散问题困扰的芯片工程师,这篇文章都值得读完。
1. 电荷泵电流失配:藏在锁相环里的“慢性毒药”
1.1 从一次抓狂的排查说起
几年前我负责一颗SerDes芯片里的时钟PLL,参考频率100MHz,环路带宽设计在1MHz左右。前仿真一切正常,锁定时间、相位噪声都挺漂亮。等芯片回来一测,输出频谱在100MHz频偏处冒出一个明显的杂散,大概-48dBc,直接把系统的误码率指标打穿了。
排查过程很折磨人。先是怀疑VCO电源上的开关噪声,加了LDO、优化了电源走线,没改善。又怀疑分频器回灌噪声,把分频器电源单独隔离,还是没改善。最后没办法,把片内电荷泵的输出节点引到测试焊盘上,用高阻探针测控制电压纹波,发现Vctrl在参考频率处有一个大约几毫伏的周期性纹波。顺着这个纹波往回查,终于锁定了根因:电荷泵的上拉电流和下拉电流,在输出电压大约0.6V的位置差了2%左右。
这个案例很典型。很多人一说PLL性能差,第一反应就是VCO相位噪声不行,但VCO对控制电压的扰动极其敏感。电荷泵那点电流失配,经过环路滤波器变成Vctrl上的纹波,再经过VCO的增益放大成相位调制,最后体现在输出频谱上就是参考杂散和抖动恶化。整个过程就像温水煮青蛙,平时看不见,等系统指标卡死了才意识到问题的严重性。
1.2 失配带来的三类典型性能问题
电荷泵电流失配的影响,归纳下来主要落在三个维度,每个维度对应一种不同的性能指标恶化。
第一是参考杂散。这是最直观的影响。电荷泵在锁定状态下,每个参考周期都会因为PFD输出的窄脉冲产生一次电荷注入。如果充放电电流完全匹配,理论上注入LPF的净电荷为零。一旦失配,每个周期都会残留下一点点净电荷,在Vctrl上形成与参考频率同步的纹波。这个纹波经过VCO调频,就在输出频谱的参考频率偏移处形成杂散。参考杂散的危害不只是频谱不干净,在收发机系统里还会导致接收频段内的干扰信号混叠,直接影响灵敏度。
第二是稳态相位误差和确定性抖动。失配会让锁定点的PFD输出不再是理想的零相位差,而是存在一个固定的偏置。这个偏置会导致输出时钟的占空比畸变或相位偏差,进而产生数据相关的确定性抖动。对高速SerDes来说,这类抖动无法靠均衡器消除,是上限频率的硬约束之一。而且失配越大,稳态相位误差越大,锁相环跟踪输入参考时的动态表现也会变差。
第三是环路动态行为异常。失配较大时,PFD的死区补偿策略会失效,环路可能出现周期滑步或锁定点游走。某些情况下,失配甚至会让电荷泵在锁定点附近出现“净电流方向不一致”的现象,导致控制电压出现次谐波振荡,表现为锁定后Vctrl上出现严重的低频纹波。
| 性能维度 | 失配影响 | 最直接的观测点 |
|---|---|---|
| 参考杂散 | 参考频率处的输出频谱杂散 | Spectrum测量,Spur大小 |
| 抖动 | 稳态相位误差引入确定性抖动 | 眼图、TJ/DJ分解 |
| 环路稳定性 | 锁定点漂移、次谐波振荡 | Vctrl波形、相位裕度 |
需要特别说明的是,失配的影响和电荷泵电流绝对值、LPF电容大小、参考频率都有关系。同样的1%失配,在低参考频率、大LPF电容的窄带PLL里可能完全不是事,但在宽带PLL里就会直接打爆杂散指标。所以不能只看失配百分比,要结合整个环路的传输函数来评估。
2. 锁定状态下的窄脉冲难题:失配为什么防不胜防
2.1 电荷泵为什么会失配
从电路层面看,电荷泵失配的根源无非两件事:器件本身的工艺偏差,和管子工作点随输出电压的变化。
第一类是系统性的工艺偏差。CMOS工艺里,PMOS和NMOS的阈值电压、迁移率、栅氧化层厚度都有各自独立的波动。PMOS电流源和NMOS电流源想要做到“绝对值相等”,本身就要依赖电流镜的镜像精度和设计者的精心推敲。即便版图做到完美对称,跨工艺角下PMOS和NMOS的电流密度变化趋势也是不一致的。最典型的就是FF corner下NMOS电流暴涨、PMOS电流跟不上,结果充放电电流失配跑到3%以上。
第二类是沟道长度调制效应。这是失配里最容易被忽略、也最难消除的部分。理想电流源的输出电流应该与漏源电压无关,但实际MOS管在饱和区工作时,沟道长度调制效应会让电流随VDS变化。电荷泵输出节点电压就是VCO控制电压,它在锁定过程中会在一定范围内摆动。输出节点电压变了,充电电流源和放电电流源的VDS变化方向是相反的,一个变大一个变小,电流失配自然跟着变。更麻烦的是,Vctrl在工作时受环路控制会持续微调,失配也跟着动态变化,完全不是一个静态值能概括的。
还有一个工程上常被忽视的因素:开关管本身的电荷注入和时钟馈通。每次PFD脉冲到来,开关管栅极电压跳变,沟道中的电荷会通过寄生电容耦合到输出节点。这部分电荷量在充电路径和放电路径上不对称,也会表现为等效的电流失配。尤其在做低功耗设计时,为了省电流把充放电电流压到几十微安,开关管的寄生注入占比就会更加突出。
2.2 死区、失配与参考杂散的三角关系
要理解Jae-Shin Lee方案的精妙之处,必须先搞清楚一个概念:PLL锁定时,电荷泵控制信号的真实波形到底是什么样的。
锁相环进入锁定状态后,PFD的两个输出并不会完全静默,而是会输出一对宽度极窄的脉冲。这对窄脉冲的作用是让电荷泵开关“真正打开”一下,避免因为死区导致环路在锁定点失去调节能力。如果没有这对脉冲,PFD对几百飞秒级别的相位误差完全不敏感,环路等于处于一种“假锁定”状态,相位噪声和长期漂移都会恶化。但有了这对脉冲,电荷泵每个参考周期都要做一次充放电动作,只要充放电电流有一点失配,就会留下净电荷。
死区消除脉冲越宽,电荷泵开关越能充分开启,死区问题越小,但每个周期的净电荷误差也越大。脉冲越窄,失配注入的净电荷越少,但开关来不及完全导通,电流建立时间不足,死区问题又会抬头。所以传统电荷泵设计里,死区补偿宽度、电荷泵电流建立时间、电流失配三者是相互牵制的。你压住了一个,另外两个就冒出来。
这就是Jae-Shin Lee方案最让人拍案叫绝的地方。它没有去跟这三者硬碰硬,而是直接改变电荷泵的工作方式:让电流源管子根本不需要“开启-关闭”的转换过程,而是始终处于导通状态,PFD信号只是切换电流的流向。这样一来,死区消除和电流失配这两个问题就被解耦了,窄脉冲带来的瞬态失配几乎被抹平。
3. Jae-Shin Lee经典方案解剖:从“减小失配”到“消灭失配”
3.1 那篇论文到底解决了什么
Jae-Shin Lee的论文《Charge pump with perfect current matching characteristics in phase-locked loops》在2000年前后发表,虽然时间有点久,但直到今天依然是电荷泵设计绕不开的参考文献。它的核心贡献不是把电流失配做到了多小的百分比,而是提出了一种架构:让充电电流和放电电流在原理上就精确相等,而不是靠版图匹配或者校准电路去“尽量接近”。
在传统电荷泵里,设计目标是让Iup尽量等于Idn。工程师会画匹配版图、加cascode管、加校准DAC,但所有这些手段都是在跟工艺失配和沟道长度调制搏斗,永远只是“逼近”,不是“相等”。Jae-Shin Lee的思路是:既然充放电电流源本身难以做到一致,那我让每一条电流支路的电流都保持恒定,不再依赖PMOS电流源和NMOS电流源在数值上的匹配。电流源管子始终导通,PFD信号只负责决定电流往哪条路走。充放电的差值只取决于开关切换的电荷注入差,而这个注入差可以通过结构对称性大幅抵消。
这种思路相当于把连续域里“两路电流相等”的老大难问题,转化成离散域里“电流方向切换”的对称性问题。后者的匹配难度比前者低一个数量级。这个思想后来的很多高精度电荷泵论文里都有影子,比如采用运放钳位的结构、采用电流导引开关的结构,追根溯源都能看到Jae-Shin Lee的影子。
3.2 双电荷泵与差分开关的核心架构
我按照论文的原始思想和你讲一下这个架构的工作方式。完整的晶体管级原理图建议直接找原论文看,这里重点讲透结构逻辑。
这个方案用了两套电荷泵。主电荷泵负责给环路滤波器充放电,辅助电荷泵的作用是提供一个参考电流通路。关键在于,主电荷泵的充电电流源和放电电流源采用差分开关对,而不是传统的单管开关。每一路电流源都同时接了两个开关管:一个接到输出节点,一个接到辅助节点。PFD送来UP信号时,充电电流源的电流被切向输出节点;送来DOWN信号时,充电电流源切回辅助节点。放电电流源的操作正好相反。
这样设计的效果是:无论PFD怎么切换,充电电流源和放电电流源都处于导通状态,电流大小始终是Icp,不会出现电流源管子开启瞬态的问题。输出节点得到的净电流是充电支路和放电支路的差值,而这个差值不是靠两个电流源“数值相减”得到的,而是靠开关切换“逻辑互斥”实现的。充电通路和放电通路在任意时刻都是二选一,不存在两路同时微弱导通导致失配的情况。
辅助电荷泵还有一个关键作用:它和主电荷泵的电流源通过运放构成反馈环路,强制主电荷泵输出节点的共模电压和辅助节点的电压相等。这样一来,无论Vctrl是接近电源轨还是接近地,充电电流源和放电电流源的VDS都被稳定在相同的偏置条件附近,沟道长度调制效应从根上被压住了。你不需要担心Vctrl变化导致Iup和Idn一个变大一个变小,因为运放把能让它们变得不一致的那个自由度给钳死了。
3.3 为什么敢叫“perfect current matching”
叫“perfect current matching”当然有点夸张,但对理想器件而言,这个结构在数学上确实能做到Iup严格等于Idn。原因有三层。
第一层,开关切换不改变电流源的静态工作点。传统电荷泵,开关管关断时电流源VDS会飘到电源轨或地,重新开启时又要经历一个较长的建立过程。这个建立过程的非线性决定了窄脉冲下的瞬态电流根本不稳定。Jae-Shin Lee方案里电流源始终在线,没有模态切换,自然没有建立过程,瞬态电流就是静态电流。
第二层,充放电电流在原理上由同一个参考电流决定。因为主电荷泵和辅助电荷泵共用同一套偏置,充电支路和放电支路的电流基准是一致的。充放电路径里出现的任何PVT变化,都是对称地出现在两个支路里的,而不是像传统结构里PMOS和NMOS各自独立漂移。
第三层,运放钳位消除了输出电压对电流的扰动。这是对付沟道长度调制效应的杀招。结合两层cascode管子,理论上输出节点电压在接近满摆幅的范围内变化时,电流失配都可以控制在极小范围内。
当然,工程上没有免费的午餐。这个方案的代价是功耗增加、电路复杂度上升、运放本身要消耗额外的电流和面积,而且运放的噪声和偏置电压也会直接耦合到输出电流上。所以它更适合对杂散和抖动要求高的高性能PLL,在超低功耗场景里就显得有点奢侈。
4. 仿真验证与版图设计:让方案落到实处
4.1 三步仿真法:把失配“照”出来
读完论文只是一个开始,真正要把这套方案用到自己的PLL里,靠的是严格的前仿真验证。我总结了一套三步走的仿真流程,每一步都能暴露出不同层面的问题。
第一步,DC扫描看静态失配。搭一个最简单的testbench:电荷泵输出节点接一个理想电压源,从0扫描到VDD,分别在UP和DOWN模式下读取输出电流,画出Iup和Idn对Vout的曲线。两条曲线之间的差值就是静态电流失配。重点关注的是输出电压在你实际工作范围的区间内的失配量,而不是全摆幅的平均值。如果你的方案里有运放钳位结构,这一步会直接反映运放增益够不够。我一般要求Vout在0.2V到VDD-0.2V范围内,失配小于0.1%。
第二步,瞬态仿真看动态失配。在输出节点挂一个电容(建议选和最终LPF电容同数量级的值),给PFD输入一个极小的相位误差信号,让PFD输出一对参考频率的窄脉冲,观察Vctrl在一个周期内的净变化量。这个变化量如果除以电容,就是每个周期的净电荷注入。这一步能捕捉到开关电荷注入、时钟馈通、电流建立时间等动态因素造成的失配。静态很好、动态一塌糊涂的情况非常常见,尤其是开关管尺寸没调好时。
第三步,PLL顶层跑锁定仿真,提取参考杂散。把电荷泵放进完整的PLL环路里,跑瞬态到稳定,然后对Vctrl做FFT,看参考频率处的纹波分量。如果条件允许,把VCO输出也做一次frequency-domain分析,估算参考杂散的幅度。这个结果能直接对应到指标上,方便你决定要不要对电荷泵继续花力气优化。
4.2 版图匹配与隔离的关键细节
再好的电路架构,版图画得随意也是白搭。Jae-Shin Lee方案的匹配优势来自完全对称的结构,版图必须把这个对称性贯彻到底。
电流源管一定要画成交叉指结构的common-centroid布局,让工艺梯度对PMOS和NMOS电流源的影响尽量相等。差分开关管的匹配同样关键,因为开关切换时注入的电荷量如果不一致,就会直接变成输出节点的毛刺。开关管的dummy管务必补齐,特别是对输出节点寄生电容敏感的设计,dummy管能显著降低电荷注入的不对称性。
电源和地线的处理上,主电荷泵和辅助电荷泵的电源走线要尽量短、尽量宽,避免IR drop造成两路电流源的电源电压不一致。运放是比较敏感的模块,它周围要加隔离环,离VCO的控制电压走线远一点,防止运放时钟馈通污染Vctrl。
还有一个容易踩的坑:输出节点到LPF的走线。这条线上任何一点寄生电容都会参与电荷分配,改变有效充电电荷量。走线过长还会引入额外的寄生电阻,和LPF构成额外极点。我一般把LPF的第一级电容尽量靠近电荷泵输出焊盘摆放,走线控制在几十微米以内。
5. 工程经验总结:几个我踩过的坑和一条设计流程
5.1 五个容易翻车的认知误区
做电荷泵设计这几年,我自己踩过不少坑,也看过团队里的年轻工程师反复掉进同样的陷阱。这里列出来,希望你能绕开。
误区一:只盯着静态失配,不关心动态失配。不少人仿真时只做DC扫描,看到Iup和Idn几乎重合就以为万事大吉。实际上,电荷泵在锁定状态工作在一个极窄的脉冲模式下,动态切换造成的失配远比静态失配严重。你必须在接近实际工作条件的脉冲激励下验证净电荷注入。
误区二:死区消除脉冲调得太宽。死区消除脉冲太窄,PFD增益下降、相位噪声恶化;太宽,电荷泵失配的净电荷注入变大、参考杂散变差。这里面有个最优工作点。我以前会把死区脉冲宽度直接取经验值,后来发现必须结合电荷泵电流建立时间和PFD分辨率一起仿真调整。常见范围是几百皮秒到几纳秒,具体以你的参考频率和CP电流而定。
误区三:把电流失配和电荷失配混为一谈。有时候Iup和Idn的静态电流完全一样,但参考杂散还是很大,问题出在开关切换时UP脉冲和DOWN脉冲的有效宽度不一致。PFD输出的上升沿和下降沿传播延迟有差异,导致即使电流相等,充放电时间也不等。这种情况从电流上完全看不出来,要查PFD和CP配合起来的时序匹配。所以我在版图上会让UP和DOWN信号走线长度和负载保持一致,必要时加dummy负担。
误区四:运放钳位结构里运放的带宽不够。Jae-Shin Lee方案的运放如果带宽不足,在开关瞬态时钳位电压来不及恢复,充放电支路的VDS会出现短暂的失配窗口。这个窗口虽然短,但在高速PLL里可能会贡献不可忽略的相位误差。我一般要求运放的单位增益带宽做到参考频率的十倍以上,并且要检查开关瞬态时运放输出是否出现明显的过冲。
误区五:仿真corner选得太宽松。失配在不同工艺角下的表现差异非常大,尤其是FF corner和SS corner。我遇到过实际芯片在FF corner下杂散指标完全失效的情况,而前仿真只在TT corner下验证过。建议每个关键corner都跑一遍DC和瞬态失配,至少覆盖TT、FF、SS三个角,加上-40度到125度的温度范围。
5.2 一套可复用的电荷泵电流失配设计流程
最后分享一个我目前在设计新PLL时都在用的流程,它不是一个教条式的步骤清单,而是一套帮你在架构选择和细节优化上做决策的骨架。
第一步,从系统指标反推电荷泵允许的失配上限。先根据参考杂散或抖动指标,估算Vctrl上允许的最大纹波,再结合LPF电容和参考频率反推每个周期的净电荷注入上限。有了这个上限,再换算成电流失配的百分比,你就知道自己需要做到多小的失配,以及该选传统结构还是选Jae-Shin Lee方案这类高复杂度架构。
第二步,架构选型和晶体管级初步设计。如果失配上限在2%以上,常规cascode电荷泵完全够用;如果在1%到2%之间,可以考虑用运放钳位结构的传统方案;如果要求在0.5%以下,建议直接上Jae-Shin Lee式双电荷泵结构。这个决策点越早做越好,临时换架构的代价非常大。
第三步,前仿真验证,把静态失配、动态失配、顶层杂散三个层次都跑一遍。动态失配和顶层杂散的仿真结果如果能同时通过,再进入版图设计。这一步也是调整死区宽度、开关管尺寸、运放带宽的最佳时机,等版图画完再改设计代价就大了。
第四步,版图设计阶段把匹配和隔离做到位。然后做提取后仿真,重点看寄生导致的不对称性,特别是开关管的寄生电容和时钟馈通。提取后仿真如果失配劣化得厉害,优先回头调整版图,不要先怀疑电路方案。我之前吃过亏,一看到提取后失配变大就去调电路,最后发现只是版图上开关管位置不对称导致的。
第五步,流片后的测试验证。芯片回来后第一时间搭测试环境测量Vctrl纹波和输出频谱参考杂散,把实测数据和前仿真、提取后仿真的结果做对比。如果差异明显,多半是PFD开关时序或者运放带宽的问题,这时候再回过来分析也来得及。
这个流程帮我避开了至少三次“流片回来才发现杂散超标”的灾难。做模拟设计,很多时候拼的不是灵光一现的巧思,而是能不能在一开始就想清楚约束,在设计过程中用系统化的方法把风险逐一消灭在仿真阶段。电荷泵电流失配这件事,恰恰就是检验这套流程是否靠谱的最好试金石。