前言
站在硬件工程师的角度,展开对PLL的认识和理解。长篇概述就是想说时钟确实是太重要了,正确理解并应用这一块儿,不管你是做硬件还是搞IC,都是非常非常有用的!
对于我们系统而言,PLL相关我们的关注点可能是
1. 终端device对于时钟的Spec是什么?
2. 怎么选型可以满足我们的spec?
3. 我们会做哪些验证?
首先,我们要清楚什么是PLL,phase locked loop. 它的作用呢其实就相当于一个跟随器,输入什么性能的时钟,我能给出一样性能的时钟(倍频),就ok。那问题是为啥不晶振直接给终端,而是要通过PLL输出呢。其实我们可以看到,晶振一般输出频率都不会很高,且对于一些终端芯片来说,可能需要的时钟频率啊,时钟域啊都不是单一的,尤其对于组网而言。且有些需求频率很高,要求相噪抖动很严格,晶振没法达到要求,所以PLL就应运而生了。
给一个最基本APLL的框图自行理解一下:
对于自动化专业的同学而言这是个很简单的闭环控制系统,我给你输入,系统会有一个输出跟随输入。这里VCO就相当于控制器,输入与反馈回路的error越大,那么控制力度越大,则输出的频率就会调高或者调低来跟随输入端。至于每一部分是怎么工作的,内部工作原理后面有时间再写写,因为太多的文章写过了。
这时候一定有人注意到了,上面框图是APLL(模拟锁相环),那么问题来了,为什么会有APLL、DPLL的存在呢?意义又是什么呢?好,我的理解是DPLL可以做到环路带宽很小很小,可以小到mHz,但是APLL不可以。但是呢DPLL又不能输出高频率信号,APLL内部的VCO就可以做到这一点,所以像现在来说我们可以看到基本上内部使用都是DPLL级联APLL来使用,APLL还会起来Jitter clean的作用。好啦,如果详细赘述的话,可能每一块儿都是很大的地方,后面有时间会详细展开。
一. 终端device对于时钟的Spec是什么?
你设计的电路板对时钟的需求是什么
比如相噪要求xx fs, jitter要求是xx UI。这个在设计前就要搞清楚,比如你设计的这个电路会不会作为master去驱动slave,这样slave会不会用到你的时钟,怎么实现同步?这些都是需要考虑的。就比如通信系统,BBU和RRU之间就存在这样的关系,往往BBU 设计时钟是要兼顾到RRU的spec。所以通信系统里,会分Ethernet domain, CPRI domain,freerunning clock, 你要说我们怎么划分时钟域,其实我们是根据终端使用的域来决定的。比如说你是要用这个时钟来做CPRI的数据传输,肯定这个时钟域就是CPRI domain。灵活使用的前提是要把需求搞明白,再去选型设计。
拿到spec, 也需要消化一下,比如jitter,有很多很多种,我们一般关注的是哪些?这些jitter是衡量的时钟的哪一块儿性能等等。
二. 怎么选型可以满足我们的spec?
PLL选型的关键其实包括一下几点:
对于reference的支持,如果你设计的电路里可能会有1pps (continue mode/ pulse)做参考输入,那么你就需要选择支持1pps输入;但是需要强调的一点是,你的reference 性能直接决定输出时钟的性能,所以其实reference的选择也很重要且讲究;是支持单端啊差分啊..频率范围啊,是不是支持hybrid mode,比如PTP辅助SYNCE....
RMS jitter能做到多少,因为相噪是时钟性能在频域的表现。PLL内部各部分都会作为一个noise source叠加起来影响输出时钟的相噪,就比如反馈回路的N-divider,有整数和小数之分,小数分频肯定是更灵活能满足我们灵活的需求,但是会引入一些无法filter的noise,就会使输出相噪差一些相对于整数分频器。这个也可以理解为输出时钟的固有底噪,这个是从我们使用PLL的时候就确定的。
内部PLL带宽可以设计成哪些范围,大厂的时钟芯片(TI/IDT/Silab...)一般情况下都可以满足我们的需求,比如我们要遵循的标准是G.8262里的哪个,option1还是option2,或者其他哪个标准
内部有几个PLL可以使用?这么说的原因是,假如我们时钟域有几个,那么首先内部的PLL就得至少有几个,这样才能满足我们得需求,比如说至少3个PLL来满足Ethernet、CPRI、freerunning...
调整DCO得step是多少?比如你得系统要求你一步最小可以调xx个ppb,那么你PLL得做到可以支持一步调这么小。
接口SPI/I2C,可以满足外部master得控制;
支持LVDS/LVPECL/.... swing 在线可调... [都是最基本的electric characteristic]
内部是不是支持TOD(time of day),这个多数在有组网同步需求的系统里会用到,啥作用呢,就是存放时间信息的寄存器,比如说时:分:秒转换成寄存器数值。
时钟输出能支持多少路,这就决定了你是不是需要额外增加clock buffer来满足整板时钟树
内部是不是有可编写的EEPROM,这就决定了我们是不是可以灵活更改我们的时钟树。当然一定要注意的是,有一些寄存器是支持EEPROM更改的,但是有一部分是ROM固化好的,比如DPLL部分其实很少有支持EEPROM更改的,但是很多APLL相关的我们是可以灵活配置的,比如更改CP的电流值啊,LF的内部RC值,分频器的值等等
暂时想到这些,后面想到再补充
三. 我们会做哪些验证?
其实这个话题和第一个话题是一个意思,我们的spec是什么,我们就会去测什么。
像我现在遇到的:
时钟SI,这个是绕不开且最基本的,rise/fall time,over/undershoot,边沿单调性等等的,是不是满足电气特性呀,VIH VIL等。我们通常会用示波器(示波器的带宽一般是由被测频率的上升时间来决定,和频率的高低应该是没有直接关系,比如你测一个25MHz的频率,你是不是觉得500M的小示波器就可以?如果上升时间是几百fs, 那你肯定是不合适的,至少得选个GHz的示波器是吧)差分+单端探头来测试这一系列特性,这里需要强调的是我们要指导我们测试这些性能是因为啥,比如我们通常会测单端时钟的电压值,VPP,Vmax,Vmin,是因为终端device pin脚定义是这样的,它可能只能接受某种电压的信号,超出范围长时间会损坏器件是吧,比如你明明能活80岁,但是你老板天天让你加班超负荷干活,结果你35就噶了,是不是不合适,emmm 开玩笑...
时钟phase noise,啥是相噪呀,为啥我们要研究相噪呀,这又是一个话题,哈哈,感觉哪个地方说多了都是一个小话题(后面挑一个章节share一下相噪以及PLL相噪仿真的东西,感兴趣可以持续关注一下呀)。我们一般关注的是12KHz-20MHz频带范围内,RMS jitter的值。为啥是12K-20M呢,留个悬念,下篇文章share。这个测试也是非常讲究的,为啥这么说呢,因为高频时钟的相噪及其容易收到干扰。这里不只是说你内部设计,还有外部的干扰,比如你周围有一台天线设备,辐射又贼老大,那么基本上你测试的相噪不会很好。再比如说你的供电电源不干净,那么极大概率上你测试的相噪也不会好。再比如你测试相噪的位置周围有一些开关电源,那完蛋。哈哈,是不是很抓狂,it's phase noise。
时钟jitter, 我目前遇到的fpga啊asic芯片对时钟,有cycle-by-cycle jitter,total jitter的要求,但是也很少,大多数都是相噪上的要求居多。像jitter,我们一般用示波器的套件来测,但是通常示波器的底噪会高一些,测出来的jitter会略高于真实值。
同时PLL power supply 也是一个关键点,一般都是需要LDO出来再进PLL,这样能保证ripple不会很高
今天先到这里吧,累了....