首页/文章/ 详情

第01篇_PLL是什么

3小时前浏览0

你在做时钟生成或者 SerDes 的时候,大概率已经把 PLL 当成一个黑盒 IP 在用——喂一个 25 MHz 的晶振进去,出来一个 1 GHz 的干净时钟,中间发生了什么你可能没细想过。但一旦面试官问你「环路带宽怎么定」「为什么现代 PLL 都用电荷泵」「锁定时间怎么估算」,黑盒就露馅了。

这篇文章把 PLL 的「锁相」机制从根上讲清楚:它到底在锁什么、负反馈是怎么把两个信号拉同步的、以及为什么工程上最终收敛到「鉴频鉴相器 + 电荷泵」这套结构。理解了这一篇,后面讲传递函数、相位噪声时你才知道每一块为什么会摆在那里。

一、锁的是相位,不是频率

「锁相环」三个字,重点在「相」。很多人以为 PLL 是把输出频率调到跟参考一样,其实它锁的是相位,频率相等只是相位锁定之后自动成立的结果。

因为相位和频率是同一个量的两种视角——频率是相位对时间的导数:

f(t) = (1 / 2π) · dφ(t) / dt

两个信号的相位差只要恒定(被「锁住」),对时间求导为零,频率自然相等。所以「相位差恒定」是比「频率相等」更强的条件:锁相必然锁频,反过来不成立。

这带来一个面试里容易被问的点:为什么不用简单的「频率比较」来锁?因为频率是相位的导数,直接比较频率做反馈,等于只对误差做比例控制,永远有稳态残余频差;而锁相位,等于对误差做积分,能把稳态误差压到零。这就是后面要讲的「型次(type)」的物理来源——环路里每有一个积分器,稳态误差降一阶。

二、负反馈:从相位误差到频率修正的闭环

PLL 的闭环逻辑是一串因果链,理解了它就理解了整个环路:

  1. 比较:把参考信号相位 φref 和反馈信号相位 φdiv 相减,得到相位误差 φe。
  2. 转换:把相位误差变成控制信号(电压或电流)。
  3. 执行:用控制信号改变 VCO 的振荡频率。
  4. 反馈:VCO 输出分频后送回来,构成闭环。

稳态时,环路会把 φe 逼到某个恒定值(理想情况逼到零)。一旦相位差恒定,输出频率 fout 就锁定了。锁定条件写出来就是:

fout = N × fref

这里 N 是分频比。这个式子简单,但它背后是整个负反馈在起作用——不是「电路天生会输出 N 倍频率」,而是环路「发现」只有当输出等于 N×fref 时相位误差才恒定,于是自我修正到这个工作点。

三、型次(Type):积分器数量决定稳态误差

这是 PLL 里最基础也最容易被问的概念。环路型次 = 开环传递函数在原点处的极点个数,也就是环路上有几个「积分器」。

  • Type-I(一个积分器,来自 VCO):VCO 本身就是积分器——它输出的相位是输入控制电压的频率的积分(φout = ∫ 2π·fVCO dt)。一个积分器能对频率阶跃做到零稳态误差,但对频率斜坡(比如参考信号频率缓慢漂移)会有残余误差。
  • Type-II(两个积分器,VCO + 环路滤波器里的积分环节):对频率斜坡也能零稳态误差,这正是现代 PLL 普遍采用二阶环路滤波器的原因。

面试官常问「为什么环路滤波器要有积分环节」,标准答案就在这里:多一个积分器,稳态跟踪能力高一阶。但代价也随之而来——每多一个积分器,相位就多 -90°,环路稳定性更难做。这就是后面要讲的相位裕度和零点补偿的由来。

四、为什么是电荷泵?PFD + CP 的必然性

早期 PLL 用模拟乘法器做鉴相器,但它有两个致命问题:捕获范围窄(初始频差大时拉不动)和锁定后相位差不为零

现代 PLL 几乎清一色用「鉴频鉴相器(PFD)+ 电荷泵(CP)」。PFD 的关键优势在于它同时对频率和相位敏感——只要存在频差,它输出的 UP/DN 脉冲宽度差就会持续把 VCO 往正确方向推,直到频差消失,这就是「鉴频」的能力,让捕获范围大幅扩展。

电荷泵配合 PFD,则让环路在锁定后做到理论上零静态相位误差(Type-II 特性),同时把「相位差 → 电荷量」的转换做得线性、可控。电荷泵上下拉电流失配会直接产生参考杂散,这个坑留到第 4 篇专门讲。

下面是理想 VCO 的 Verilog-A 行为模型:






















// 理想压控振荡器 VCO 行为模型(Verilog-A)// 注意 idt():相位 = 频率对时间的积分,这正是 VCO 是「积分器」的体现`include ”disciplines.vams” module vco (out, vctrl);    input  vctrl;    output out;    electrical out, vctrl;     parameter real fmin  = 800.0e6;   // Vctrl=0 时的最低频率 (Hz)    parameter real kvco  = 200.0e6;   // 增益 (Hz/V)    parameter real v0    = 0.0;       // 中心电压 (V)    parameter real amp   = 1.0;       // 输出幅度 (V)     real freq, phase;    an alog begin        freq  = fmin + kvco * (V(vctrl) - v0);        phase = 2.0 * `M_PI * idt(freq, 0.0);   // 积分 → 相位        V(out<+ amp * sin(phase);    endendmodule

这段代码里 idt(freq, 0.0) 那一行,就是第一节公式 f = (1/2π)·dφ/dt 的逆运算——把频率积分成相位。看懂这一行,你就理解了 VCO 为什么天然是个积分器,以及 Type-I 的那个积分器从哪来。

五、小结与这条线的走向

这一篇解决了「PLL 为什么能锁住」:锁相位(而不是锁频率)→ 负反馈把相位差逼到恒定 → 环路型次决定稳态跟踪能力 → PFD+CP 是现代 PLL 的必然收敛。这几个概念不是孤立名词,它们是一条因果链:因为要锁相位,所以需要积分;因为要积分,所以 VCO 是天然的积分器;因为一个积分器不够,所以要二阶滤波器,于是有了 Type-II 和稳定性问题。

下一篇开始拆第一个模块:鉴相器 PFD 的死区是怎么产生的、复位延迟为什么不能省——这是你做 PLL 时第一个会实际撞上的非理想效应,也是面试高频点。

参考

  1. Behzad Razavi, RF Microelectronics, 2nd ed., 第 8 章(PLL 基础与型次)。
  2. Floyd M. Gardner, Phaselock Techniques, 3rd ed., 第 2~3 章(环路结构与稳态误差)。
  3. Roland E. Best, Phase-Locked Loops, 第 2 章(Type-I/Type-II 环路)。
  4. Verilog-A 语法参考:Cadence Verilog-A Language Reference。

来源:集成电路小刚
电路理论ElectricCadence控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2026-09-23
最近编辑:3小时前
集成电路小刚
硕士 立志成为集成电路领域专家
获赞 4粉丝 65文章 70课程 0
点赞
收藏
作者推荐

干货:手把手教你用Cadence软件设计一个标准的CMOS反相器

Cadence可以实现电路图输入(Schematic Input)、电路仿真(Analog Simulation)、版图设计(Layout Design)、版图验证(Layout Verification)、寄生参数提取(Layout Parasitic Extraction)以及后仿真(Post Simulation)。(图源:西安交通大学国家IC人才培养基地培养资料)现在,开始用Cadence画一个标准的CMOS反相器。一个反相器包括PMOS,NMOS,VDD,GND。01软件常用操作及命令1)Cadence/virtuoso软件常用操作1.启动软件:virtuoso或者virtuoso&amp;:&amp;表示后台运行(shell自带语法)2.常用快捷键:i:添加器件或者电路的symbole:进入symbol的下一层ctrl+e:和e相反q:打开属性编辑窗口F3:打开命令菜单,一般和命令配合使用,相当于对命令的操作进行设置w:连线p:端口引脚u:撤销X:检查和保存l:电路节点命名作为初学者,在设计电路过程中应该要仔细阅读提示区中的信息。注意:①Composer中的多数命令会一直保持,直到你调用其它命令替代它或者按Esc取消,尤其是在执行delete命令时,忽视这一点很可能会误删除,一定要多加小心!Composer的Undo操作默认只能进行一次(可以在CIW窗口的Option-&gt;User Preferences中修改,最多可以是10)。所以每完成一个命令,记着按ESC取消当前命令。②点击工具栏的zoomin和zoomout按钮可以放大缩小电路图。键入快捷键f可以使电路图自动缩放到合适大小。③编辑电路图过程中注意要及时保存,保存方法是菜单栏-&gt;Design-&gt;Save,也可以键入快捷键大写的S(Shift+s)来保存。2)shell常用命令Cadence开发了自己的编程语言skill以及相应的编译器,整个Cadence可以理解为一个搭建在skill语言平台上的可执行文件集。初学者对此可以不用理会,当用户深入后,可以用skill语言对Cadence进行扩展。pwd :显示当前目录cd:改变当前工作目录mkdir:建立目录mkdir/path/to/dir_name:特定路径下的目录,必须保证path/to/已经存在ls:文件显示whoami:查看用户自己当前使用的账号名who:查看当前有哪些用户登录到系统中w:查看哪些用户登录在线,同时显示用户当前的工作clear:清屏命令touch file_name:修改file_name文件时间戳;如果文件不存在生成空文件cat file_name:将文件file_name显示到屏幕上cat file_name1file_name2:显示两个文件cat file_name1file_name2&gt;file_name3:将前两个文件依次组合,并添加到file_name3的末尾(图源:E课网培训视频截图)02创建CMOS反相器原理图步骤1)键入快捷键i点击Browse,弹出库浏览器。选中Show Categories可以分类显示器件,方便我们快速找到所要的器件。依次点击analogLib-&gt;Actives-&gt;pmos4-&gt;symbol,再单击close。刚才的添加器件窗口发生变化。点击Hide隐藏当前窗口,此时鼠标对应有一个PMOS的symbol,此时按r键,可以旋转PMOS。移动PMOS到合适的位置点击鼠标左键将其放下。如果要放置更多的PMOS,继续点击鼠标左键,否则按ESC取消当前的放置器件命令。继续放置NMOS晶体管、电源与地。对应的器件名称为nmos4,vdd,gnd。注意:vdd与gnd仅仅是全局电源与地标识,并不是独立电源器件,vdd并不能提供电源。仿真时必须有gnd,否则仿真不收敛。2)键入快捷键w连线注意区别wire(narrow)与wire(wide),wire(narrow)表示普通连接导线,而wire(wide)表示总线连接。总线连接的快捷键是大写的W。还可以对画好的线进行命名,键入快捷键l,在弹出的对话框中输入线名,比如a,点击Hide,然后将字母a移动到要命名的线附近点击左键放下,如果名字离线较远,则要求再单击所要命名的线。3)设置元件参数先选中器件,再键入快捷键q参数可以是以下三种形式的各种数学组合表达式,①变量,②常量,③skill语言函数。变量作参数会在仿真时用到。单击PMOS选中它,这样PMOS会被一个白色方框包围。然后键入快捷键q,会弹出属性编辑对话框。这里我们需要填上model name,以及PMOS的栅长和栅宽。栅长我们设为常量0.18u(注意u是小写!),而栅宽我们设为函数pPar(“wp”),注意大小写不能错。当然也可以设一个固定的尺寸,但这样就不能利用参数修改晶体管的栅宽了。pPar函数就是把wp作为传递参数,在其它电路图中调用这个电路时对wp赋值,就相当于给这个PMOS的栅宽赋值,这样做的目的是为了方便层次化设计。在后面仿真时大家会更加明白这一点。Composer会根据数值大小自动变换单位。模型名我们填p18,这是因为我们这里采用的Spice模型是由SMIC提供的,对应PMOS的模型有p18和p33两种,18代表电源电压为1.8V。在后边仿真的时候我们还要再设SpiceModel文件的具体路径。同样的方法继续设置NMOS参数,只是模型名为n18,栅长为固定值0.18u,栅宽设为pPar(“wn”)。注意:①设置参数时不要自己输入单位,系统会自动加上。比如0.18uM是错误的写法。如果非要自己写单位,也要和数值之间留一个空格,否则系统会把M识别为变量。②器件的参数也可以在放置时就设置好。4)键入快捷键p放置端口单击菜单栏-&gt;Check and Save或者键入快捷键大写的X,可以对电路进行检查并存储。03创建SymbolComposer窗口菜栏-&gt;Create-&gt;Create CellView-&gt;From Cellview,弹出Cellview from Cellview窗口默认的Symbol是一个比较大的矩形。对于反相器,我们习惯用一个三角形再加小圆圈来表示。选中绿色矩形框,delete之,然后Add-&gt;-Shape&gt;Polygon,在刚才矩形框的位置画一个三角形。鼠标在三个端点点3次即可。注意在三角形右边留出画圆圈的位置。再Add-&gt;Shape-&gt;Circle,先于圆心位置单击左键,再移动鼠标,得到合适的圆的半径后左键确认。再把图中的输入输出端口以及partname和instanceName移动到合适位置。其中,@instance Name代表以后调用此反相器时的编号,@partName代表对应的schematic的名字,一般不用改。最后再把红色框大小修改合适(框住三角形和端口)。画好的Symbol需要检查保存。Design-&gt;check and save,检查结果显示在CIW窗口中。04仿真现在我们用画好的反相器的symbol组成一个缓冲器(buffer)进行仿真,通过对buffer做瞬态分析、DC分析、AC分析,分别得到该buffer的延迟时间、输入输出特性以及小信号频率响应。对电路进行仿真需要加激励信号,而加激励信号有两种方法,一种是在原理图中直接加入信号源元件,另一种是在仿真环境窗口(ADE)中对输入端口加激励。缓冲器是由两个反相器组成,利用前边的方法,新建一个cellview,画出缓冲器原理图。其中反相器我们直接调用了画好的Symbol(注意是在自己的库中)。选中inverter,键入e,再点OK,可以显示和Symbol对应具体的schematic,但是这时只能看,而不能修改。Crtl+e退出该Symbol。设置inverter参数。选中inverter,键入q,就会弹出反相器的属性。这里我们需要分别设wn和wp的值。①独立电源vdc也是在analoglib库中,将其属性中的DC voltage设为1.8。②另一个激励信号是方波源,对应器件名称为vpulse,也位于analoglib库中。方波上升下降时间为0.1n,周期为10n,脉冲宽度为4.9n,voltage1设为0,voltage2设为1.8。因为我们还要做AC分析,交流电压幅值为1(这样测得的输出直接就是小信号增益)。为了得到inverter的输入输出特性,我们把直流电压设为变量vin。这里设置的方波电压、直流电压、交流电压是相互独立的,分别用于瞬态分析、dc分析、ac分析Composer菜单栏-&gt;Tools-&gt;Analog Environment,打开仿真窗口(简称为ADE窗口)。于ADE窗口,Setup-&gt;Model Libraries,打开Model库设置窗口,后再于Model库设置窗口的Section栏填写工艺角,这里我们填tt(即NMOS和PMOS速度均为典型值),然后再点Add按钮,将当前的仿真库文件添加进列表,点击OK退出。仿真环境菜单栏-&gt;Variables-&gt;Edit,或者直接点击右侧的工具栏中的Edit Variables按钮,弹出如图5.10所示窗口。击点按钮“Copy From”,就会列出我们前面在测试电路中添加的变量vin。选中该变量,我们设置一个初始值0.9。之所以是0.9,是因为当反相器的输入为0.9时两个MOS管都会导通,此时反相器实际起的是放大器的作用,而我们做AC分析就是要得到MOS管处于饱和区时它的频率响应。需要强调的是,AC分析是建立在一定的工作点上的,而电路的工作点正是由电路图中所设置的电源DC值以及这里的变量初始值决定的。由于我们要做瞬态分析,dc分析,ac分析,所以我们一次弄好所有设置。①Analyses-&gt;choose,或者点击右侧工具栏的choose analyses按钮。于Analysis栏选择不同的仿真。对于瞬态分析,我们选tran,然后于stop time栏输入仿真时间10n。②再于该窗口中选取dc,窗口会有相应变化。于sweep variable栏选择Design Variable,然后输入变量名vin,并输入变量的扫描范围,从0到1.8。并选择扫描类型为线性,扫描为0.001。这样仿真时就会对vin从0到1.8V以0.001为间隔进行扫描,从而得到输入输出特性。注意选中DC Analysis复选框,这样就可以将AC分析时所采用的的直流工作点保存下来,以便我们后面查看电路的直流工作点。③再于该窗口中选取ac,窗口会有相应变化。默认是频率扫描。我们只需要输入频率扫描范围。这里输入10到1000M(注意是大写)。其它均为默认值。接下来要选择我们需要观察的对象,即我们要看哪个节点的电压,或者要看哪一条支路的电流。于ADE窗口,Output-&gt;To Be Plotted-&gt;Select On Schematic,这样会弹出我们画的电路图。然后分别单击输入和输出两条线IN和OUT,以及第一级反相器的输出v1。注意选择v1时要先选中反相器,再按e进入下一层子电路。并注意一定要单击导线,而不是元件的Pin角。保存当前的仿真设置。Session-&gt;Save State,弹出保存对话框,填好名称,点击OK确定。这样下次再仿真时,可以直接调用该仿真设置,而不用每次都进行同样的设置。我之后修改了器件为tsmc工艺库后的仿真结果05版图设计现在开始根据我们前边的设计尺寸,来画缓冲器的版图。为了显示层次化设计,我们先分别画出两个不同尺寸的反相器版图,再将两个反相器组成缓冲器的版图。通常的版图设计步骤大概如下:①NMOS:画出N有源区-&gt;栅-&gt;做接触孔-&gt;覆盖金属-&gt;N注入区;②PMOS:画出P有源区-&gt;栅-&gt;做接触孔-&gt;覆盖金属-&gt; N注入区;③连接晶体管:放置PMOS和NMOS-&gt;连接输出-&gt;连接输入-&gt;金属连接-&gt;电源线;④PAD。类似新建原理图,CIW窗口菜单栏-&gt;File-&gt;New-&gt;CellView,选择自己的库,然后输入版图名字inverter,注意于tool栏选择Virtuoso,ViewName栏会自动变为layout。点击OK后,会弹出Virtuso主界面,以及LSW窗口。注意:①类似Composer,Virtuso中的多数命令会一直保持,直到你调用其它命令替代它或者按Esc取消,尤其是在执行delete命令时,忽视这一点很可能会误删除!②点击工具栏的zoomin和zoomout按钮可以放大缩小版图。键入快捷键f可以使版图自动缩放到合适大小。③编辑版图过程中注意要及时保存,保存方法是菜单栏-&gt;Design-&gt;Save,也可以键入快捷键S(大写)来保存。版图有非常多的物理规则约束,这是由Foundry的工艺决定的。在后面做设计规则验证(DRC)遇到错误时还要不断地回来查阅该设计手册。06关键掩模层序号层名字含义含义本实验所需要的1AAActive Area有源区√2ARReverse Active Area无源区3KVAlignment mark clear-out对准标记4NWN-WellN阱√5PWP-WellP阱6DGDual Gate(thick oxide)双栅(厚氧)7GTPoly gate多晶硅√8PLHPMOS LDD implant for 3.3V3.3V下PMOS轻掺杂注入9NLHNMOS LDD implant for 3.3V3.3V下NMOS轻掺杂注入10PLLPMOS LDD implant for 1.8V1.8V下PMOS轻掺杂注入11NLLNMOS LDD implant for 1.8V1.8V下NMOS轻掺杂注入12SPP+implantP注入√13SNN+ implantN注入√14ESD1ESD implant for Boron(B)静电放电注入15SABSalicide block area硅化物阻挡区16CTContact有效接触孔√17M1Metal-1第一层金属√18V1VIA-1通孔1√19M2Metal-2第二层金属√20V2VIA-2通孔221M3Metal-3第三层金属22V3VIA-3通孔323M4Metal-4第四层金属24V4VIA-4通孔425M5Metal-5第五层金属26V5VIA-5通孔527M6Metal-6第六层金属28PAPassivation/Pad焊盘29PIPolyimide END作者 | 小刚排版 | 黑小姐 图片 | 网络参考资料 | 西安交通大学国家IC人才培养基地培养资料、E课网视频教程 *著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。来源:集成电路小刚

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈