1. 拿到PLL指标清单,先别急着开原理图
锁相环这个课题,几乎每个做模拟或混合信号的人都会碰到。但我见过太多这样的情况:需求文档往桌上一放,一群人立刻打开原理图编辑器,把鉴频鉴相器、电荷泵、环路滤波器、压控振荡器、分频器一个个摆上去,然后开始调管子尺寸。两周之后发现环路根本不收敛,或者锁是锁住了但抖动大了一倍,于是回头大改,前面的版图工作全部推倒重来。PLL设计的正确打开方式恰恰相反——系统级的那几张纸没算清楚之前,动一笔电路都是浪费。这篇文章想聊的就是这条从系统到模块的路径:先怎么把频率、抖动、杂散、锁定时间这些终端指标翻译成环路带宽、阻尼因子、电荷泵电流、KVCO 这一组中间参数,再把这些中间参数拆到每一个模块身上,最后落到版图和实测里那些行为级仿真永远看不见的坑。
我个人的习惯是,接到任何一个锁相环任务,第一天绝不开电路仿真器,只做三件事:把所有指标列成一张表、确认哪些指标之间是硬冲突、用最简单的二阶模型手算出一组环路参数。这三件事做完,后面模块设计的每一个取舍才有依据。跳过这一步,你调任何一个管子都是在赌。
1.1 一张指标清单里藏着三组互相打架的诉求
先看指标本身。一个典型的锁相环需求大概长这样:输出频率范围、参考频率、积分抖动或者某个频偏处的相位噪声、参考杂散、小数杂散、锁定时间、功耗、面积、电源电压、工艺角覆盖范围。新手会觉得这些是并列的、逐个满足就行,实际上它们至少分成三组,组内互相拉扯,组间也在抢资源。
第一组是 噪声组 :积分抖动、带内相位噪声、带外相位噪声。第二组是 动态组 :环路带宽、锁定时间、稳定性相位裕度。第三组是 资源组 :功耗、面积、调谐范围、KVCO。
组内的冲突很直接。噪声组里,带内噪声主要来自参考路径、鉴频鉴相器和电荷泵,带外噪声主要来自压控振荡器。降低带内噪声最有效的手段是提高电荷泵电流、降低分频比,代价是功耗上升、参考杂散变差。降低带外噪声要靠压控振荡器本身的品质,而压控振荡器的噪声和它的功耗几乎是线性关系——想把相位噪声改善 6 dB,功耗大致要翻倍。
组间的冲突更隐蔽。动态组要求环路带宽足够宽,锁定才快;噪声组要求带宽窄,才能把参考路径的噪声压下去。这两个要求直接对撞,你只能在中间找一个折中位置。资源组里的面积和噪声也在打架:片上环路滤波器的电容值直接由环路带宽和电荷泵电流决定,带宽压得越低、电容越大,面积就越难看。
所以第一步不是"满足所有指标",而是 排优先级 。哪些指标是硬的、哪些可以牺牲 3 dB 换别的好处,这个必须和系统那边确认清楚,落到纸面上。我见过一个项目,抖动指标写得很死,但锁定时间其实只是"上电后能锁上就行",结果前期为了压锁定时间把带宽做到 3 MHz,抖动差了将近一倍,返工时把整个环路滤波器重新设计。
下面这张表是我自己常用的权衡速查,做方案讨论时直接摆出来,比空口争论效率高得多。
| 想改善的目标 | 最直接的手段 | 主要代价 | 需要同步检查 |
|---|---|---|---|
| 带内相位噪声 | 提高电荷泵电流、降低分频比 | 功耗、参考杂散幅度 | 环路滤波器电容是否撑得住 |
| 带外相位噪声 | 提高压控振荡器电流、换高 Q 电感 | 功耗、面积 | 调谐范围是否被压缩 |
| 锁定时间 | 提高环路带宽 | 带内噪声恶化、稳定性余量变薄 | 相位裕度是否还大于 50 度 |
| 参考杂散 | 降低环路带宽、加滤波、改善电荷泵匹配 | 锁定变慢 | 抖动是否因此变差 |
| 面积 | 降低电荷泵电流、提高参考频率 | 带内噪声变差 | 分频比与带宽比例是否还合理 |
| 调谐范围 | 提高 KVCO、加粗调谐 | 噪声变差、环路增益漂移 | 环路稳定性在全程是否一致 |
1.2 系统级建模要建到什么颗粒度才算够
确定优先级之后,就该建模型了。这里有个很常见的误区:要么不建,直接凭经验拍参数;要么一上来就搭一个包含几十个状态变量的晶体管级行为模型,建了两周还没跑出第一版结果。我的经验是分两级,第一级用一晚上必须出结果,第二级在第一级收敛后再补。
第一级是 理想元件的行为模型 。鉴频鉴相器用理想相位比较,电荷泵用理想电流源加一个通断开关,环路滤波器就是 R、C 的传递函数,压控振荡器是理想积分器加一个噪声源,分频器是理想除法。这个模型里唯一需要认真对待的是各个模块的噪声谱形状和环路本身的稳定性。它的价值在于:能在几个小时内告诉你环路参数大致落在哪个区间、相位裕度够不够、各个噪声源对总抖动的贡献比例是多少。
第二级是 带非理想效应的模型 。这一级要加进去的东西包括:电荷泵的电流失配与开关时序、鉴频鉴相器的死区、压控振荡器的调谐非线性与电源敏感性、分频器的占空比失真、环路滤波器的电阻热噪声和电容泄漏。这些非理想项不是每一个都会显著影响结果,但你不加进去就永远不知道哪个是真问题。
我通常用 Python 写第一级,因为扫参数方便,几百组参数跑几分钟就出来了。第二级会转到支持行为级描述语言的仿真环境里做,因为它要处理时序和事件驱动的细节。两级模型的参数一定要能对上,做第二级之前先把第一级的结果存成一份基准数据,后面每改一次电路都拿回来比,偏差超过预期就去查原因,这个习惯能省下大量返工。
提醒一句:第一级模型里的噪声源一定要标清楚是单边谱还是双边谱、是 dBc/Hz 还是线性功率密度。我见过不止一次因为单位混用导致噪声预算差 3 dB,最后所有模块都被迫重新优化。
2. 二阶环那几条公式,决定了下游所有模块的尺寸
从系统走到模块,中间那座桥就是环路参数到电路参数的映射关系。这一节把公式过一遍,不是为了推导,而是为了让你在调任何一个参数的时候,脑子里能立刻反应出它会牵动哪几个模块。
2.1 开环增益、自然频率、阻尼因子这三件套
对最常见的电荷泵型锁相环,开环传递函数可以写成环路增益除以 s 再乘上滤波器传递函数的形式。把环路滤波器取成最基础的比例积分形式,整个环路等效为一个二阶系统,只有两个独立参数:自然频率和阻尼因子。
自然频率决定了环路的响应速度,表达式里同时出现了电荷泵电流、压控振荡器增益、分频比和主电容。阻尼因子在自然频率的基础上多了一个零点电阻,它决定了环路响应的过冲程度。
这两个参数之外还有第三个关键量:相位裕度。理想二阶环在阻尼因子取 0.707 的时候相位裕度大约 65 度,这是教科书上的经典解。但实际设计里环路滤波器一定是三阶的,因为要额外加一个电容去压参考杂散,这个电容带来的高频极点会把相位裕度往下拉十几度。所以实际取阻尼因子的时候,我通常不取 0.707,而是取到 0.8 到 1.0 之间,把余量留给第三极点。
这里有个容易被忽略的点: 相位裕度不是越高越好 。裕度做到 80 度以上,环路响应会非常平缓,锁定过程拖得很长,而且对工艺偏差的敏感度反而上升。我一般把目标定在 55 到 65 度之间,这个区间既有足够稳定性,阶跃响应又不至于太慢。
关于自然频率和环路带宽的关系,二阶系统的闭环带宽约等于自然频率乘以一个和阻尼相关的系数。阻尼取 0.8 时这个系数大约是 1.5,也就是说你想要 1 MHz 的环路带宽,自然频率大概放在 0.66 MHz 的位置。这个换算关系在手工估算里非常有用,比直接解闭环方程快得多。
2.2 手算一组:100 MHz 参考、3.2 GHz 输出、1 MHz 带宽
光说公式没感觉,直接算一组。假设参考 100 MHz,分频比 32,输出 3.2 GHz,电荷泵电流 100 微安,压控振荡器增益换算成角频率是每伏 2π×200 兆弧度每秒,目标环路带宽 1 MHz,阻尼因子取 0.8。
先算自然频率:带宽的角频率是 2π×10^6,除以阻尼相关系数 1.51,得到约 4.16×10^6 弧度每秒。接着算主电容,公式是电荷泵电流乘压控增益除以分频比再除以自然频率的平方,代进去得到大约 227 皮法。然后是零点电阻,等于两倍阻尼除以自然频率乘主电容,算出来 1.7 千欧左右。第二个电容取主电容的十分之一,约 23 皮法。
这几个数字一出来,很多后面的问题就已经浮现了。227 皮法的电容在片上不算小,如果工艺里单位面积电容是每平方微米 1 飞法左右,光这一个电容就要占两万三千平方微米,也就是差不多 150 微米见方,这还没算第二电容和电阻的版图面积。如果面积预算紧张,唯一的路子是降电荷泵电流或者降低环路带宽,两个都会让噪声变差。
我把这段计算写成了一个可以直接跑的脚本,改几个输入就能出结果,做初期方案对比很方便。
import numpy as np
fref = 100e6 # 参考频率
N = 32 # 分频比
Icp = 100e-6 # 电荷泵电流
Kvco = 2*np.pi*200e6 # 压控增益, rad/s/V
fc = 1e6 # 目标环路带宽
zeta = 0.8 # 阻尼因子
wc = 2*np.pi*fc
wn = wc / np.sqrt(2*zeta**2 + 1) # 自然频率
C1 = Icp*Kvco / (N*wn**2) # 主电容
R1 = 2*zeta / (wn*C1) # 零点电阻
C2 = C1 / 10.0 # 第三极点电容
wz = 1.0/(R1*C1) # 零点
wp3 = (C1+C2)/(R1*C1*C2) # 第三极点
pm = np.degrees(np.arctan(wc/wz) - np.arctan(wc/wp3))
print(f"自然频率 {wn/2/np.pi/1e6:.3f} MHz")
print(f"C1 = {C1*1e12:.1f} pF, R1 = {R1:.0f} ohm, C2 = {C2*1e12:.1f} pF")
print(f"零点 {wz/2/np.pi/1e6:.3f} MHz, 第三极点 {wp3/2/np.pi/1e6:.3f} MHz")
print(f"相位裕度约 {pm:.1f} 度")
跑出来相位裕度大概 54 度,偏低。按我前面说的,手算只是起点,下一步就是扫参数。把零点电阻从 1.7 千欧提到 2.2 千欧,零点往低频挪,相位裕度能拉到 60 度出头,代价是阻尼变大手感发钝。这个来回调整的过程就是环路滤波器设计的日常,通常扫十几组就能找到满意的点。
2.3 环路带宽的位置为什么总被压在参考频率的十分之一到二十分之一
这条经验规则几乎人人都在用,但真正说得清来由的人不多。三个原因叠在一起。
第一个是 采样效应 。电荷泵型锁相环本质上是一个离散时间系统,鉴频鉴相器每个参考周期才比较一次相位。当成环带宽接近参考频率的时候,连续时间近似失效,环路会表现出离散系统特有的稳定性问题,严重的时候直接振荡。把带宽压到参考频率的十分之一以下,连续近似才够用。
第二个是 参考杂散 。参考频率的杂散主要来自电荷泵开关瞬间注入的电荷,这个扰动经过环路滤波器的衰减到达压控振荡器。衰减量和带宽与参考频率的比值强相关,带宽压得越低,杂散抑制越好。
第三个是 噪声整形 。参考路径的噪声在环路里呈低通特性,压控振荡器的噪声呈高通特性。两条曲线的交叉点大约就在环路带宽附近。带宽选得宽,参考路径噪声漏进来的多;选得窄,压控振荡器在带内被抑制得不够。参考频率越高,你就有更大的空间去选一个兼顾两者的带宽位置,这也是为什么现在很多设计尽量用高参考频率。
所以当你看到某个方案用 100 MHz 参考却把带宽做到 8 MHz 的时候,要警惕。除非它用了额外的纹波抑制手段,否则参考杂散和稳定性都会很麻烦。
3. 噪声传递函数画出来,模块预算就不用猜了
环路参数定下来之后,接下来最重要的动作是把噪声传递函数画出来。这一步的价值在于,它把"总抖动要小于多少"这样一个笼统的指标,变成"每个模块在哪个频段允许有多少噪声"的具体约束。没有这一步,模块设计就是各做各的,最后拼起来总抖动超标,谁也不知道该找谁。
3.1 四条噪声路径:两条低通、两条高通
任何电荷泵型锁相环的噪声来源,按传递特性可以归成两类四路。
低通类包括参考时钟、鉴频鉴相器加电荷泵、以及分频器。这三者的噪声从输入端注入,经过环路传递到输出时被低通滤波,带内基本按分频比放大。参考时钟的相位噪声乘以分频比,用分贝表示就是加上 20 倍分频比的对数。分频比 32 的话,恶化 30 dB。这个数字很吓人,也解释了为什么参考时钟本身的品质必须过硬——你不可能靠环路把参考的带内噪声压下去,环路在带内对它是全通的。
高通类主要是压控振荡器。它的噪声在环路带宽以内被反馈抑制,抑制量随频偏减小而增大,在环路带宽处抑制量约为 0,在带宽之外完全不受影响。所以压控振荡器在带内的噪声可以被压低,但带外噪声原样输出。
还有一路容易被忽略:环路滤波器里电阻的热噪声。它从滤波器节点注入,传递特性介于两者之间,在环路带宽附近有一个峰值。电阻值越大,噪声贡献越大。这就是为什么零点电阻不能为了相位裕度无限制往上加。
把这四路画在同一张图上,你会看到一条经典的"浴缸曲线":低频段被参考路径主导,高频段被压控振荡器主导,中间交叉点大约在环路带宽附近。这条曲线的形状直接告诉你,优化哪个模块能带来多少收益。
3.2 从输出抖动倒推每个模块的相位噪声模板
假设终端指标是积分抖动 300 飞秒,输出 3.2 GHz。先把抖动换算成相位噪声的积分功率,再分配到各个模块。
一个粗略但够用的做法是:给参考路径和电荷泵路径各分一半的积分预算,压控振荡器分走剩下的。这样每一条路径允许的积分噪声功率是总额的四分之一到一半,留出余量给工艺偏差和建模误差。
具体到数值上,输出 3.2 GHz 时,300 飞秒对应大约 6 毫弧度的均方根相位误差。如果带内噪声平台是负 113 dBc/Hz,覆盖 1 MHz 的带宽,粗略积分得到大约 0.16 皮秒,压控振荡器在 1 MHz 处负 110 dBc/Hz 按负 20 dB 每十倍频下降,积分贡献约 0.22 皮秒。两者均方根合成约 0.27 皮秒,还有余量留给工艺角和建模误差。这个量级是合理的。
反推模块约束的时候,我习惯做一张表,把每个模块的噪声目标明确写出来,和电路设计的人一起过一遍,确认每个数字是可实现的。
| 噪声来源 | 折算到输出的位置 | 目标值(示例) | 主要提升手段 |
|---|---|---|---|
| 参考时钟 | 带内,乘分频比放大 | 负 118 dBc/Hz | 换更低抖动的源、提高参考频率 |
| 鉴频鉴相器与电荷泵 | 带内,乘分频比放大 | 负 115 dBc/Hz | 提高电荷泵电流、改善匹配、降低死区 |
| 分频器 | 带内 | 负 155 dBc/Hz | 通常不是瓶颈,高速级要留意 |
| 环路滤波器电阻 | 带宽附近峰值 | 负 130 dBc/Hz | 降低电阻值、增大电容 |
| 压控振荡器 | 带外,带宽内被抑制 | 1 MHz 处负 110 dBc/Hz | 提高品质因数、增加电流、换架构 |
这张表的价值在于它把模糊的"要好一点"变成了明确的"负 110 到负 112"。电路那边做出来之后一测,直接对标,差距一目了然。
3.3 带宽选偏了,力气就花错地方
我遇到过一个小团队,花了一个多月死磕压控振荡器的相位噪声,从负 105 优化到负 112 dBc/Hz,结果总抖动几乎没变。原因很简单:他们的环路带宽设得很窄,只有 200 kHz,压控振荡器在 1 MHz 之外的噪声虽然改善了,但带内那部分被环路抑制了,改善的频段根本不是贡献抖动的主力。真正拖后腿的是参考路径在低频段的噪声。
评估一个噪声改善值不值,正确的做法是算 积分贡献 ,不是看某一个频点的数字。具体操作是把噪声谱按照抖动积分公式从环路带宽之外积分到测量上限,得到每一路的贡献占比,然后专攻占比最大的那一项。这个分析在系统模型里做一次只要十分钟,能省掉一个月的无效优化。
还有一个常见的误判:看到带内噪声平台很高,第一反应是电荷泵做得不好。实际上很多时候是参考时钟本身就差,或者分频比定得太高。分频比每降一半,带内噪声改善 6 dB,这个收益比优化电荷泵快得多,但前提是输出频率和参考频率的组合允许你降分频比。
4. 电荷泵与环路滤波器:系统级误差最先在这里现形
系统级参数落到电路上,第一站就是电荷泵和环路滤波器。这两个模块的电路结构简单到只有几个管子加几个无源器件,但它们是整个环路里最容易出问题的地方。系统级的很多假设——电流完全匹配、开关瞬间没有电荷注入、滤波器电容没有泄漏——在真实电路里一条都不成立。
4.1 电流失配、死区、电荷注入这三件事
电荷泵的上升电流和下降电流不可能完全相等,工艺偏差下差个百分之几很正常。这个失配直接导致一个问题:锁定之后,鉴频鉴相器为了维持压控振荡器的控制电压,两个电流源必须交替导通,而失配会让控制电压在每个参考周期里产生一个周期性纹波。纹波的频率就是参考频率,幅度正比于失配量除以环路滤波器的等效阻抗。这就是参考杂散的主要来源之一。
改善失配的手段有几个方向。一是用共源共栅结构提高输出阻抗,让两个电流源的电流比更稳定;二是加一个反馈环路做电流匹配校准,代价是增加复杂度和功耗;三是减小失配带来的净电荷,比如让开关的导通时间严格相等。我一般先看杂散指标要求,要求不严就直接用共源共栅加版图匹配,要求严再考虑校准。
第二件事是死区。鉴频鉴相器的两个输出在相位误差接近零时会同时出现窄脉冲,这个区域叫死区。落在死区里,鉴频鉴相器对微小相位误差没有响应,环路增益下降,等效于在环路里加了一个非线性环节,表现出来就是输出频谱在载波附近出现低频噪声抬升,锁定点附近抖动变大。解决办法是给鉴频鉴相器的复位路径加延迟,让两个输出保证有最小脉宽,代价是引入一个固定的相位偏移和更高的参考杂散。
第三件事是电荷注入和时钟馈通。开关管在导通和关断的瞬间,沟道电荷会通过寄生电容耦合到滤波器节点上。这个电荷量很小,一般是飞库仑量级,但滤波器电容只有几百皮法,几飞库仑就能在控制电压上产生几毫伏的跳变,折算到输出的频率误差不小。缓解手段包括用互补开关抵消、用哑开关做电荷平衡、以及增加滤波器的高频旁路。
实际操作里有个顺序很重要:先把环路滤波器的第二电容加上,再评估电荷注入的影响。第二电容会把电荷注入产生的高频跳变旁路掉一大半,如果你先调电荷泵开关再发现是滤波器结构的问题,前面的工作就白做了。
4.2 片上几百皮法电容的现实做法
前面算出来的 227 皮法主电容是片上设计的核心痛点。提高单位面积电容密度是最直接的路子,但金属-绝缘层-金属电容的密度提升有限,而且工艺上通常只有两种密度可选。剩下能动的只有两个方面。
一是 降低环路带宽 。电容值和带宽的平方成反比,带宽从 1 MHz 降到 500 kHz,电容能做小四倍。代价是锁定时间翻倍,如果这个指标有硬约束就走不通。
二是 降低电荷泵电流 。电容值和电流成正比,电流减半电容减半。代价是带内噪声上升 3 dB,而且失配的相对精度会变差。
这两个手段之外,还有一些工程技巧。比如把环路滤波器做成部分片外,主电容放到片外,只把零点电阻和第二电容集成进来。这个方案的问题是引入了额外的引脚和封装寄生,寄生电感可能和片内电容形成谐振,必须在版图上做好隔离设计。另一种做法是用有源滤波器,利用米勒效应等效放大电容,但会引入运放的噪声和失调,需要仔细评估。
环路的稳定性体现在整个工艺角范围内的一致性。电阻的工艺偏差可能到正负百分之二十,电容偏差更大,这会让零点和极点的位置整体漂移,相位裕度跟着变。设计的时候必须在工艺角文件里把所有组合都扫一遍,确认最差角的相位裕度还在 50 度以上。单看典型角是没意义的,这是我在项目里反复强调的一点。
5. 压控振荡器与分频链:噪声大头和速度瓶颈
到了模块级,压控振荡器和分频链是两个需要最多设计决策的地方。前者决定了带外噪声的底线,后者决定了你能不能跑在目标频率上。
5.1 电感电容结构还是环形结构,先看抖动预算再谈架构
这两种架构的选择其实没有太多纠结空间,抖动指标基本能一刀切。
电感电容型振荡器的品质因数高,在同样的功耗下相位噪声能比环形结构好在二三十个分贝,主要用在几吉赫兹以上、抖动要求在几百飞秒以内、并且面积允许放一个大电感的场合。它的缺点是调谐范围窄,通常只能覆盖百分之十几的相对带宽,分几个子带来做,每个子带用一组电容器切换。子带数量增加会带来频率覆盖的连续性问题和子带切换的算法复杂度。
环形振荡器的优势正好相反:面积小、调谐范围宽、可以做到多相位输出、能覆盖很宽的频率范围。缺点是相位噪声差,功耗不低,而且对电源噪声极其敏感。适合用在抖动要求宽松、或者对面积非常敏感的数字系统时钟生成场合。
有一个中间选项是注入锁定型的振荡器,用参考信号直接锁定一个环形振荡器,噪声能有明显改善,但频率范围受限,抖动性能也还是不如电感电容结构。我在需要覆盖很宽频率范围同时又要中等抖动水平的场合见过这种方案。
选型的判断标准可以简单化成一句话:如果 1 MHz 频偏处的要求好于负 105 dBc/Hz,基本只能上电感电容结构;如果要求松到负 90 dBc/Hz 以下,环形结构完全够用。中间地带要结合面积和功耗一起算。
5.2 压控增益、调谐范围与电源抑制之间的三角关系
压控振荡器的调谐增益是个很微妙的量。从环路的角度看,增益越大,环路的等效增益越大,同样的电荷泵电流能换来更宽的带宽,而且加工艺偏差之后环路增益的变化也更敏感。从噪声的角度看,增益越大,控制线上的任何噪声都被放大得越多,电源和地的噪声耦合到控制线上就会变成相位噪声。
所以设计上倾向于用小增益。但小增益意味着要覆盖同样的频率范围需要更多的调谐位,子带数量上升,切换算法变复杂,频率分辨率的要求也更高。
一个实用的做法是把调谐范围粗调、细调分开。粗调靠切换电容器组,细调靠连续的变容管。粗调只负责把频率大致拉到目标附近,细调负责在环路闭合后跟踪。这样细调的范围可以做得比较窄,增益自然就小。这要求启动逻辑能快速找到正确的子带,搜索算法要够快,否则锁定时间会超标。常见的做法是二分搜索或者逐次逼近,一般几个参考周期内就能定位。
电源抑制这一块,电感电容型振荡器的偏置电流源是整个结构里最脆弱的部分。电源上的低频波动直接调制偏置电流,进而调制振荡频率。用低噪声的稳压器单独供电、加共源共栅提高输出阻抗、以及在偏置路径上加大的旁路电容,都是常规手段。版图上把振荡器和数字电路彻底分开供电、分开接地,这个原则怎么强调都不为过。
5.3 预分频器与双模分频的取舍
分频链在低频段通常是比较成熟的电路,问题主要出在最高速的第一级。输出 3.2 GHz 的话,第一级分频器要在这频率下工作,如果用标准单元里的逻辑门,功耗和速度都会很紧张,通常要用定制的电流模逻辑结构或者源极耦合结构。
双模分频的经典做法是用一个同步的二分频加上异步的可编程分频,前级的二分频工作频率最高,后面的级数越多速度要求越低。这种结构的好处是控制逻辑简单,坏处是分频比只能是偶数倍。如果分频比需要是奇数,就得用吞脉冲结构,多一级相位选择逻辑,那部分时序要求很紧。
有一个容易忽略的问题是分频器的相位噪声贡献。表面上看分频器不产生噪声,只是把相位误差按比例分频。但实际电路里分频器的电源和地会影响它的翻转时刻,尤其是第一级的翻转阈值抖动会直接传递到输出。所以第一级分频器的供电必须仔细处理,不能和后面的低速逻辑共用一条线。
分频器的相位噪声折算到输出时是乘分频比的关系,但因为它的噪声在低频段才显著,而低频段的噪声在环路里被低通滤波,所以实际贡献往往不大。唯一要特别小心的是分频器在饱和状态下工作,或者电源抑制不足导致参考频率的谐波从电源路径耦合回来。
5.4 小数分频时多出来的那些杂散
如果分频比不是整数,整个设计会多出一整套问题。小数分频的核心是一个可编程的分频比控制,通过在每个参考周期切换分频比,让平均值等于目标值。控制方法最常用的是数字调制器,但数字调制器本身会引入量化噪声,这个噪声是有形状的——低频段被整形掉,高频段被抬高。
这些被抬高的高频量化噪声会在环路里被低通滤波,所以带内的量化噪声影响不大。但如果环路带宽较宽,量化噪声的转折点就会落进环路带内,导致带内噪声整体抬升。这时候需要的是减小环路带宽,或者用额外的补偿电路去抵消量化噪声。
另一个麻烦是小数杂散。分频比的周期性变化会在载波附近产生一系列离散的杂散,频率间隔是参考频率除以调制周期。数字调制器阶数越高,杂散越分散、越接近噪声态,但阶数高了稳定性也难保证。实际工程里常见的做法是二阶或三阶数字调制器配合一个低通滤波器。
还有一个更隐蔽的问题:小数分频对参考频率的依赖。因为调制器的时钟就是参考时钟,参考时钟的任何抖动都会以额外的倍数放大到输出。这要求参考路径的噪声必须比整数分频方案做得更好,否则小数模式的抖动会明显劣于整数模式。
6. 版图与后仿:行为级仿真里永远看不到的那部分
行为级仿真里,所有的器件都是理想的,连线是零阻抗的,电源是干净的。一到版图和后仿,这些假设全部崩塌。这一节说几个最常见、也最容易被忽略的偏差来源。
6.1 电源与地的划分
锁相环是一个模拟和数字混合的系统,里面有高频开关的电荷泵、高速翻转的分频器、大电流的振荡器、还有相对安静的环路滤波器。这几部分共用一条电源或者一条地线,基本就是灾难。
具体表现是:分频器每个参考周期的翻转会在电源上产生毛刺,这个毛刺通过共用的地线串到压控振荡器的偏置上,调制振荡频率,最终在输出频谱上以参考频率及其谐波的形式出现。这就是所谓的杂散,很多看起来像电荷泵失配导致的杂散,实际根源是在地上。
正确的做法是分域设计。振荡器单独一个电源域,分频器和数字逻辑一个域,电荷泵和环路滤波器一个域,三者之间至少做到在地平面上的单点连接,或者在封装上分别引出独立的引脚。片上的去耦电容要就近放置,不能指望远处的电源线能提供高频旁路。每个域的去耦电容取值要覆盖它自己的工作频段,高频用小容值的密集阵列,低频用大容值的。
还有一个细节是 衬底耦合 。低频的模拟电路对衬底噪声的敏感度高于高频电路,因为衬底的噪声以电阻耦合的方式传播,低频的隔离效果差。在振荡器周围加保护环、用深阱隔离、甚至把整个模拟区域放在单独的隔离岛里,这些手段在预算允许的情况下都值得做。
6.2 寄生把环路带宽拉偏之后怎么补
环路滤波器节点的寄生电容是后仿里最常见的偏差来源。电荷泵的输出接到滤波器的电容上,这条连线在版图上有几十到上百飞法的寄生电容,它直接并联在主电容上,等效于主电容变大,环路带宽降低。
如果仿真的时候没把这个寄生算进去,实际做出来带宽可能低百分之十到二十,阻尼因子也跟着变,相位裕度可能变好也可能变差,取决于寄生落在什么位置。锁定时间相应变长,如果在系统那边锁定时间是按最大带宽算的,这时候就会超标。
补救的思路有三个。一是把寄生提出来,反算一下实际带宽需要多大的片上电容,把设计值往下调,用设计余量吃掉寄生。二是在电路结构上让寄生变成可预期的一部分,比如把主电容设计成可编程的电容阵列,后仿提取到寄生之后直接把阵列的码字调低。三是留一版可调的电阻,通过改掩膜或者用熔丝调整。
我自己一般用的是第二种加第三种组合:主电容做成几个并联单元,每个单元有独立的开关,后仿根据提取结果决定打开几个;零点电阻做成可切换的几档。这样能覆盖正负百分之二十的工艺加寄生偏差。代价是增加了一些版图面积和数字控制逻辑,但比返工做第二次掩膜划算得多。
后仿的流程也值得注意。不要只跑典型角,至少跑快慢两个工艺角加温度上下限,再看寄生提取的极端情况。有的设计在典型角完美,在慢角下相位裕度掉到 40 度,环路开始振铃,这种问题只有在多角仿真里才会暴露。
7. 上电不锁的时候,我的排查顺序
这一节讲的是最实用的部分:流片回来,板子上电,波形不对,你从哪儿下手。我按照遇到的频率从高到低整理了一个排查顺序,基本上能覆盖八成的现场问题。
7.1 先分清是不锁、锁错还是锁得慢
这三类现象的处理路径完全不同,一上来就乱调参数是最浪费时间的。
完全不锁 ,表现是控制电压卡在某个轨上不动,或者来回缓慢摆动。第一步看控制电压本身,如果它贴在电源或者地附近,说明环路在往一个方向使劲推,判断方向的是相位比较的结果。用示波器同时看参考时钟和分频后的反馈时钟,判断两者的相位关系是否持续超过一个周期。如果鉴定结果一直是某一个方向,那就是极性搞反了或者分频器的反馈路径接错了,这类问题在流片前用行为仿真验证过的话出现的概率很低,但一旦出现就是硬错误。
锁错频率 ,表现是锁住了,但频率不对。绝大多数情况是分频比配置错了,或者是双模分频的控制时序有问题。做法是把分频器的配置寄存器读回来,逐位对照目标值;再测分频输出的实际频率,和期望值比对。还有一种可能是压控振荡器的调谐子带选错了,粗调和细调的对应关系搞反了,环路虽然稳定但锁到相邻的子带上去了。
锁得慢 ,表现是能锁上但锁定时间超过预期。这种问题通常是带宽不对。检查环路滤波器的实际电容值和设计值的偏差,如果定义了外部电容,量一下板上元件的实际值,注意陶瓷电容的容值和它的偏置电压有关系,标称 220 皮法的电容在加上控制电压之后可能只剩 150 皮法,这种偏差足以让带宽偏出百分之三十。用低偏压系数的电容类型,或者把控制电压的摆幅压小一点。
下面这张表是我现场排查的顺序,按这个走基本不会漏。
| 步骤 | 观察点 | 可能的故障 | 下一步 |
|---|---|---|---|
| 1 | 各电源电压是否到位 | 供电缺失、稳压器限流 | 断开负载测空载电压 |
| 2 | 参考时钟是否有信号 | 输入路径开路、匹配不良 | 探头直连参考输入端 |
| 3 | 控制电压是否在动 | 环路开路、滤波器短路 | 断开环路注入电压扫频 |
| 4 | 压控振荡器自由振荡频率 | 子带选错、电容阵列故障 | 单独测振荡器的调谐曲线 |
| 5 | 分频输出频率 | 分频比配置错、控制时序错 | 读回寄存器逐位核对 |
| 6 | 参考与反馈的相位关系 | 极性接反、反馈路径错 | 调整极性重新验证 |
| 7 | 锁定后的控制电压纹波 | 电荷泵失配、地弹 | 测参考频率处的纹波幅度 |
7.2 杂散和抖动超标的定位路径
锁上了之后,指标不达标是更常见的情况,而且更难定位。我的顺序是先看频谱上的离散杂散,再看积分的抖动。
离散杂散看位置。如果杂散正好落在参考频率的整数倍上,来源基本是电荷泵的失配或者电源上的参考频率串扰。区分方法是把环路带宽临时改小,如果杂散幅度跟着降低,说明走的是电荷泵路径;如果不变,说明是电源或者衬底直接耦合,跟环路无关,需要去改版图和供电。如果杂散落在偏离载波更远的位置,而且间隔和参考频率不成整数关系,就要怀疑小数分频的调制器或者环路内部的不稳定振荡。
积分抖动看频段。把相位噪声仪或者频谱仪测出来的单边带相位噪声按频段积分,看哪一段贡献最大。带内平台高,说明参考路径或者电荷泵的问题,前面说过,优先检查参考源的本身抖动和分频比设置。带外斜率不对,说明压控振荡器的实际噪声比预期差,检查偏置电流、电源质量、以及电感的实际品质因数。
有一个经常被忽略的因素是 测试板本身 。探测点引入的电容、参考时钟走线的阻抗失配、电源上的开关纹波,都会污染测量结果。遇到指标差得离谱的时候,我会先把测试环境换一遍:换一个干净的参考源、把探头换成低电容的、板子上的其他电路全部断电,确认问题确实出在芯片上再继续查。这一步看起来笨,但省下的时间比不停调芯片多得多。
还有一个经验:任何时候只要测出来的噪声谱上出现了宽度不正常的台阶、或者某个特定频段有规律地出现尖峰,先怀疑环路本身在振荡或者进入了某种非线性状态,而不是先去算某个模块的噪声。这类问题往往和相位裕度有关,在工艺角或者温度变化的时候才会暴露出来,室温典型条件下测不出来。
8. 最后说几句实操里的体会
从系统走到模块,最难的部分其实不是公式,也不是电路结构,而是 保持参数的一致性 。系统模型里用的电荷泵电流,要和电路设计里的实际电流一致;电路里提取出来的寄生电容,要能反馈回系统模型重新算带宽;后仿得到的相位裕度,要和前仿的预期对得上。这条链条上任何一环断了,你后面所有的优化都是盲目的。
我现在的习惯是维护一张"参数总表",从系统设计的第一个单元格一直填到版图完成,每一列是一个参数,每一行是一个阶段:系统目标值、电路设计值、前仿实际值、后仿实际值、硅上实测值。每一版迭代都填一遍,出现偏差立刻能看出是哪一步引入的。这个表看起来笨,但在三四个项目并行的时候,它是唯一能让我记住每个设计现在处于什么状态的东西。
另外一条是尽量不要在单个模块上追求极限性能。锁相环是一个系统,任何模块做到极致都会消耗不成比例的功耗和面积,而系统级的收益往往不明显。真正决定成败的是那几个交叉点:环路带宽与噪声贡献的交叉、相位裕度与锁定时间的交叉、调谐范围与噪声的交叉。把这些交叉点找对位置,比把某一个模块从负 108 硬推到负 115 要值钱得多。
本文系统阐述锁相环(PLL)从系统指标到模块实现的完整设计链路,涵盖环路带宽、阻尼因子、自然频率等关键参数的手算与权衡,噪声传递函数建模与模块级相位噪声预算分配,电荷泵失配、VCO架构选择、小数分频杂散抑制等核心非理想效应分析,并强调版图寄生、电源隔离、后仿偏差补偿等工程落地要点,突出系统级建模、参数一致性与交叉点优化在实际流片中的决定性作用。
251

被折叠的 条评论
为什么被折叠?



