先说个具体的窘境。
教材上"环路带宽决定锁定速度和噪声抑制"这句话,很多人背得下来。
但只要动一个参数,我就说不清会发生什么:
C1 加倍,相位裕度是升还是降?
Kvco 从 180 调到 400 MHz/V,是锁得更快,还是直接振铃?
Icp 翻倍,噪声变好还是变差?
这些答案不在文字里,在"参数和曲线的对应关系"里。
静态的教材给不了,视频给不了,MATLAB 能算,但要先会写脚本。
所以我把 PLL 拆成 13 个知识点,每个做成一块可以拖的交互面板:
同一页里,公式、曲线、数字绑在一起,拖一下滑块,三者同时变。
每章都是同一个结构:一句概念 → 一块可拖的面板 → 三条工程结论 → 面试考点 → 一道自测。
01 相位与锁定:PLL 锁的不是频率,是相位。拖初始频差,看相位误差怎么被一步步压到零。
02 五大模块:参考 → PFD → CP → 滤波器 → VCO → 分频器,点开每个看它当前干什么、失效会怎样。
03 鉴相器 PFD:拖相位差和复位延迟,UP/DN 脉冲实时重画;相位差小到被复位延迟吃掉时,那块区域变红——这就是死区。
04 电荷泵 CP:拖上下拉失配和最小脉宽,静态相位误差与参考杂散同时重算。
05 环路滤波器:拖 R1/C1/C2,Bode 实时重画,六项指标跟着变;也能反过来给定 fc 和 PM,让它解元件值。
06 压控振荡器:拖 Kvco 看调谐跨度,拖 Q 看相噪——Q 翻倍降 6.02 dB 这件事,屏幕上直接能看到。
07 分频器与 ΔΣ:切 MASH-1/2/3,看量化噪声斜率 20/40/60 dB/dec,下面还画真实的瞬时分频比序列。
08 环路动态与锁定:给一个初始频差,看相位误差怎么追上去、滑移几次、多久锁住;频差太大时会直接告诉你"锁不住"。
09 相位噪声:参考、PFD/CP、分频器、VCO 四条噪声源 + 总噪声,一眼看谁在主导。
10 抖动:把相噪积分成 rms 抖动,顺便让人明白"抖动不写积分范围等于没说"。
11 应用实战:SerDes / 频率合成 / CDR 三个场景,反推"该定多少带宽、多少抖动"。
12 完整设计流程:四步向导(指标 → 环路 → 元件 → 复核),每一步都标出实际值与目标值的差,不假装一次就中。
13 综合实验室:六滑块 + 七项指标 + Bode 与噪声两图同屏。


拖相位差和复位延迟,你会看到:
UP 的宽度 = 相位差对应的时间 + 复位延迟;
DN 的宽度 = 复位延迟。
这个细节很多人记错。画出来就一目了然。
而当相位差小到被复位延迟吞掉,环路就"看不见"误差了——那块区域会变红。
默认参数下,死区等效窗口是 36°。

三个滑块(R1、C1、C2),上面六项指标实时重算:零点、高频极点、穿越频率、相位裕度、阻尼比、锁定时间。Bode 上下两栏同步重画。
它能回答三个问题:
▪ 为什么 C1 加大,fc 反而降?(积分电容变大,环路增益下降)
▪ 为什么 C2 太小时相位裕度会塌?(高频极点被推得太远,压不住高频增益)
▪ 给定 fc=500 kHz、PM=60°,元件到底取多少?(右下角能反解,还支持 E96 圆整)

默认工况下:
带内 10 kHz 是 −108.3 dBc/Hz(PFD/CP 主导),
315 kHz 附近 VCO 开始接管,
带外 20 MHz 是 −127.9 dBc/Hz。
积分 10 kHz–20 MHz,得到 1644 fs。

六滑块 + 七项指标 + 两张图。给"我想全调一遍看会怎样"的人准备。
全站共享同一套参数,默认值是这样:
参考频率 fref 100 MHz 输出频率 fout 2.4 GHz(N = 24) 电荷泵电流 Icp 1.2 mA VCO 增益 Kvco 180 MHz/V 设计目标 fc = 500 kHz PM = 60° 解出元件 R1 = 337 Ω C1 = 2.14 nF C2 = 107 pF
实测(不是目标值):
fc = 500 kHz,PM = 60.0° 零点 221 kHz 高频极点 4.42 MHz ζ = 0.722 锁定时间(1%)= 3.25 µs 带内噪声 −108.3 dBc/Hz @10 kHz 带外噪声 −127.9 dBc/Hz @20 MHz 积分抖动 1644 fs(10k–20M Hz) 参考杂散 −77.8 dBc (CP 失配 2%,最小脉宽 2 ns) 死区等效窗口 36°
这些数字不是我抄的,是网页内核按公式算出来的,每个都能在页面上追到它的公式。
下面四组都是"只动一个变量",数值同样来自内核。
fc 500 → 480 kHz(几乎没动),
但相位裕度 60.0° → 72.1°,
阻尼比 0.722 → 1.000(完全过阻尼),
锁定时间 3.25 → 5.18 µs。
所以"加大电容更稳"这句话是对的,但它同时把速度卖掉了——教材通常只说前半句。
fc 500 kHz → 1.48 MHz,
锁定 3.25 µs → 394 ns(快了 8 倍),
相位裕度 60.0° → 63.8°,阻尼比 0.722 → 0.897。
注意方向:Icp 加大,阻尼比是上升的,不是下降——这一点常被写反。
代价是带内噪声虽被压低,参考杂散会跟着变大。
fc 上移到 1.09 MHz,锁定缩短到 2.48 µs,看起来是好事。
但同一屏上"控制线敏感度"会提醒你:Kvco 是双刃剑。
按 20·log₁₀(429/180) = 7.54 dB,控制线上的噪声被放大了 7.54 dB。
(每翻一倍是 +6.02 dB,本例是 2.38 倍。)
它不会把相位裕度弄崩(实测 65.3°,反而更好),它做的是把噪声放大。
1 MHz 处相位噪声 −101.6 → −111.2 dBc/Hz,
差 −9.57 dB,正好等于 −20·log₁₀(3.01)。
Q 提三倍换 9.6 dB——这就是为什么振荡器里 Q 值值钱,也是为什么片外电感、高 Q 谐振腔一直被追捧。
很多人说 MASH-1/2/3 的量化噪声"在 f_ref/2 处汇合"。这句话是错的。
三条线的斜率分别是 20/40/60 dB/dec,但在 f_ref/2 处并不相等——每差一阶就要差约 6.02 dB。
"总噪声功率相同、只是分配方式不同"这个说法,只在积分到无穷大时才成立;在 f_ref/2 这个具体频点上不成立。
这也是我做这个网页的原因之一:能拖一遍,就不会再记混。
这是我花时间最多的地方,也是它和"画得好看的示意图"的区别。
同一个穿越频率,用四种方法各算一遍:频域数值解(自己写二分找 |G|=1)、闭环极点(自己写求根,由极点反推 ωn 和 ζ)、解析式、MATLAB 的 margin() 与 pole()。
不只测漂亮参数,专门留了 PM=30° 的低裕度工况、C2=0 的退化二阶、强过阻尼。真值离线生成后写进代码。
同一份断言,终端 npm test 能跑,网页"自检"页也能跑。任何人打开网页都能看到 133 通过 / 0 失败,以及每一项的实测偏差。
关键几条的容差与实测:
穿越频率 fc 容差 0.1% 200 kHz 工况实测偏差 0.66 Hz 相位裕度 PM 容差 0.05° 实测 ~5×10⁻⁵ ° 自然频率 ωn 容差 0.2% 实测 ~10⁻⁶ 阻尼比 ζ 容差 0.5% 实测 ~10⁻⁶ 锁定时间 容差 0.5% 实测 ~10⁻⁵ 环内噪声 N·|H| 容差 0.01 dB 实测 ~10⁻⁹ dB rms 抖动 容差 1% 200 kHz 工况 1741.1 vs 1741.1 fs
不是"作者说它对",而是"你自己点开就能验"。
01 → 02 → 05 → 09。先明白"锁相位",再知道五个模块各干什么,然后亲手拖一次滤波器看 Bode 怎么动,最后看噪声预算。
每章结尾有"面试考点",是那种会当场被追问的问题:
为什么 Type-II 的稳态相差为零?
PM 从 60° 掉到 40°,阶跃过冲增加多少?
为什么分频器噪声进环路会被放大 N 倍?
配合 05、09、10 三章拖一遍,答题时脑子里有画面。
直接去 12 章(向导)或 13 章(实验室),从指标反推元件;05 章能反解并做 E96 圆整。
一个实用的小功能:全站参数会写进 URL。你把环路调到某个状态,链接发给同事,对方打开就是你调好的那一版。
不是晶体管级仿真。 全是行为级/线性模型:没有 PVT,没有器件噪声源,没有电荷泵输出阻抗。
不能替代 Spectre/HSPICE。 定位是"建立直觉 + 快速估算",流片前该跑的仿真一个都少不了。
噪声模型是简化的。 VCO 用 Leeson 简化式,参考/CP/分频按平坦噪声处理,没有 1/f 拐点,也没有杂散抬升。
如果你也在学某个硬核方向,我的建议不是"多读几遍书",而是:
给你的知识建一个能自我验证的最小模型。 一旦它能自己报错,学习速度会完全不同。
网站正在优化中,尽请期待。。。