本文是半成品,大概率会鸽…………
本文主要目的是系统的总结下时钟的相关知识,分成了几个相对独立又有一定联系的部分,内容源自一些国外的教材、厂商提供的技术资料等等。
一、数字通信系统架构
对于硬件工程师来说,最需要关注的就是单板上或系统内的IC间是如何通信的。不同的应用场合对速率要求不同,对于一些管理或配置,几百K的UART或I2C就能满足要求,而对某些业务数据通常需要PCIE、SAS等高达数Gbps的协议才能满足要求。
这些通信协议最基本的不同点就是时钟架构,通常可以分为下文中的几种。
1. 1 共同时钟系统
共同时钟系统是最基本的同步时钟系统,由同一个时钟源为同时为收发器件提供时钟,通常该时钟源是一个独立的外部器件提供,最典型的应用就是PCI和PCIE协议。
1.2 同步时钟系统
由上图可以看出,时钟源通常与发送器件集成在一起,发送端根据该时钟触发输出数据,同时将该时钟与数据一起输出,传给接收端,接收端根据该时钟采样数据。发送端内通常可以调整时钟的输出延时,以调整数据和时钟之间的相位关系,优化建立保持时间,保证正确采样。同样,可以在接收端内加一个DLL,以调整时钟相位,更加方便设计。
大都数并行数据通信都是采用这种架构,例如以太网的MAC和PHY之间的通信接口GMII,就是这种架构。
以200MHz的工作时钟为例,周期为5ns,那么单边沿采样的话,建立保持时间各分到2.5ns,双边沿采样,建立保持时间各分到1.25ns。这是一个很小的时间,发送数据触发器的输入输出延时已经能影响到建立保持时间了,通常发送端的能调整的Delay是有限制的,且无法知道数据触发器的确切的输入输出延时,那么无法将该延时补偿掉,就限制了通信速率的提升。
1.3 源同步时钟系统
源同步时钟系统最大的特点就是时钟在发送端输出前也要经过一个触发器,这样就可以保证数据和时钟都经过一个触发器,设计上是可以保证这两个触发器基本一致,那触发器的输入输出延时也基本一致,那么两个延时相互抵消,就没有影响了,完美的解决了同步时钟系统的问题,进而提高通信速率。
如果通信速率进步提高,建立保持时间已经是皮秒级了,数据和时钟传输过程中受到噪声、串扰等引入的抖动,已经能影响到建立保持时间了,那么接收端是没有手段调整的。
1.4 前向时钟系统
前向时钟系统与源同步系统的区别就是将发送端内的DLL移到了接收端,这样做的好处就是,接收端的DLL可以抵消传输过程中噪声和串扰
1.5 嵌入时钟系统
当通信速率要求再高的时候,并行通信系统已经无法满足时序要求,首先并行的数据线和时钟线要求等长,对LAYOUT的要求很高,例如DDR的走线,通常需要好几层的走线层。这是串行通信系统的优势就很明显了,走线很少,方便LAYOUT,例如PCI总线向PCIE总线的转变。
串行通信系统通常都是嵌入式时钟系统,接收端利用CDR,从数据恢复出同源时钟,去采样数据,这就可以省掉一组时钟线。
关于CDR如何从串行数据中恢复出时钟,将在下文中介绍。
二、时钟源
2.1 LC振荡电路
关于时钟的产生最简单的就是LC振荡电路。
2.2 晶体与晶振
单板设计时最常用的时钟源就是晶体或晶振。
通常所说的晶体就是石英晶体谐振器,也就是按一定工艺切割并封装的石英晶体,是一个无源器件。晶体需要提供外部振荡电路才能工作,输出时钟。有些芯片支持晶体输入,因为其内部集成了振荡电路,只需要提供外部晶体源就可以。
石英晶体具有压电效应,也就是在机械应力的作用下内部会产生一定的电场,而在电场的作用下就会产出一定的机械应变。我们脑补一下,如果给石英晶体加一个外部电压,晶体产生了机械应变,进而又产生了内部电场,如果与外部电压相抵消,晶体就不承受电场,应变消失,晶体恢复,但外部电压依然在,那么又产生应变,这是一个振荡的过程。如果外部电压与应变产生的电场不抵消,而是相叠加,应变越来越大,晶体就会损坏,这么设计是不合理的。
晶体需要在外部振荡电路才能工作,有些芯片支持晶体输入,因为其内部集成了振荡电路,只需要提供外部晶体源就可以。
比较常用的晶体振荡电路就是皮尔斯振荡电路,如下图所示:
其中负载电容可以对时钟频率进行微调。
把振荡电路和晶体集成在一起,直接提供一个差分的或单端的时钟输出,就是晶振。由于振荡电路需要电源供电,所以晶振需要外部电源供电。
由以上可以看出,适用晶体的好处就是可以对时钟频率进行微调,调成正偏或负偏,灵活性比较好。
2.3 压控振荡器
压控振荡器就是voltage control oscillator,关键器件是变容二极管。二极管就是一个PN结,只要有两个电极的存在,就会有一定的分布电容,也就是结电容,是我们设计时需要考虑的因素,例如选择高速信号用的TVS。变容二极管就是其结电容可以电压的变化而变化,通常电压变化曲线如下:
VCO是PLL的关键部件,在下文中会提到。VCO的电路有很多种,这里不详述了,有兴趣的可以找一本射频电路设计的书去看看
三、时钟同步
3.1 频率同步
同源,也就是保证两个时钟的频率一致。世界上没有完全一样的树叶,也没有振荡频率完全一样的晶体。因此,要保证时钟频率一致,只能利用同一时钟源产生多路时钟。
如果发送时钟和接收时钟不一样,随着时间的累积,接收就会多出数据或者少掉数据。
例如串口,也就是UART协议,UART是典型的非同源系统,发送端没有提供时钟给接收端,但是约定了波特率,最简单的方式就是利用比波特率高两部以上的频率去过采样,恢复出数据。
3.2 时间同步
也就是要保证频率一致的基础上,还需要保证相位一致,时间同步的概念和相位同步的概念如下所示:
上图给出了时间同步与频率同步的区别。如果两个表(Watch A与Watch B)每时每刻的时间都保持一致,这个状态叫时间同步(Phase synchronization);如果两个表的时间不一样,但是保持一个恒定的差,比如6小时,那么这个状态称为频率同步(Frequency synchronization)。
四、锁相环
4.1 PLL的基本原理
图4-3 模拟PLL的内部结构框图
4.2 PLL的相位噪声分析
PLL是一个闭环负反馈结构,PLL稳定的条件就是PFD(Phase Frequency Detector)的两个输入的频率相等,也就是固定不变的相位差,即满足如下条件:
故PLL的输出时钟,满足下式:
因此,只要设置FBDIV、REFDIV和OUTDIV就可以确定PLLCLK的频率。另外,还是要关注时钟的另一个重要参数,即时钟抖动(Jitter)。PLLCLK的抖动可以通过相位噪声分析来获得。
PLLCLK抖动的源头是REFCLK的相位噪声和PLL内部相位噪声(包括VCO noise和Synthesizer noise)。PLL参数设置的影响着相位噪声的传递函数。传递函数可以简化为用PLL的环路带宽来表示,环路带宽受FBCLK的频率和Loop Filter的带宽影响。
对于晶体输入的REFCLK,抖动通常较小,因此PLL的环路带宽要大,因此FBCLK频率要高,即FBDIV的值要小。
另外PLLCLK的PHASE SHIFT允许设置其输出相位,可以调整接口的采样时序,以获得较高的时序裕量。
五、CDR
时钟数据恢复模块,可以从串行数据中恢复出时钟,CDR电路有很多种,下面选取几种作说明,方便大家了解CDR的原理。
5.1 基于PLL的CDR
如果把PLL电路的参考时钟输入换成串行数据输入,那么该PLL就变成了一个CDR,这种架构只有一个环路就是相位锁定环。,这种架构的锁定时钟非常慢。
5.2 双环路单VCO
5.3 双环路双VCO
该设计有两个环路,频率跟踪环需要提供一个本地参考时钟,频率与数据速率一致。通过频率锁定环,可以让相位跟踪环的VCO先稳定工作,可以提高CDR的锁定速度。
5.3 双环路单VCO带REFCLK
5.2中的架构有两个VCO,VCO2的作用只是VCO1更快的锁定,当VCO1与数据锁定时,VCO2就不需要了,所以可以增加一个开关,一开始本地参考时钟让VCO确定工作频率,当与本地时钟锁定,立即切换到数据,VCO根据数据再调整,与数据锁定。
5.4 基于相位插值器的CDR
五、时钟的抖动分析
5.1 时钟抖动(Clock Jitter)的基本概念
任何一个时钟信号不可能是理想的,受到干扰和随机噪声影响,实际周期总会变化,上图给出了一个示意图(仅考虑上升沿的偏差,对于RGMII和DDR这种双边沿采样的系统,下降沿也要考虑)
时钟的总抖动(total jitter)有3种统计方式:
5.1.1 相位抖动(Phase Jitter)
相位抖动是指每一个实际时钟的边沿与理想时钟的边沿之间的偏差(考虑正偏还是负偏)。通常也可以称为时间间隔误差,即TIE Jitter。相位抖动实际上是Period jitter累积的结果。
在高速串行数据通信,一般都是嵌入式时钟系统,即不单独提供时钟信号,接收端通过CDR从数据中恢复出时钟用于采样。发送端发送数据的时候,根据自己的参考时钟的边沿,连续不断的发送数据。接收端恢复出时钟后,利用该时钟采样连续不断的数据,当前时钟边沿与当前数据边沿要满足一定的时序关系。由于恢复时钟的机制,数据发送和采样做不到用同一个时钟边沿,那么时序关系就受每一次的周期偏差的影响,既存在Period jitter的累积,需要关注TIE抖动。
当然TIE会影响CDR和PLL的工作。
5.1.2 周期抖动(Period Jitter)
周期抖动是指每一个实际时钟的周期(也就是上升沿到上升沿)与理想时钟周期之间的偏差。
也就是Period jitter = T1- T2,实际也就是TIE2-TIE1,也就是说,在数学上,Period jitter是TIE jitter的差分。
注意周期抖动(period jitter)与周期性抖动(periodic jitter)概念的区别。
高速并行数据通信系统,通常发送端会在时钟上升沿的时候向发送数据,然后将时钟加一个固定延时后发送给接收端(或接收端内部加延时),接收端在时钟上升沿采样数据。
数据的发送和采样用的是时钟的同一个边沿,是对齐的,每个数据的持续时间就是实际时钟的当前周期,采样的时序关系(建立时间与保持时间)只受实际时钟的当前周期影响。上一次的周期偏差(Period jitter)不会影响到这一次的时序关系,既不会存在Period jitter的累积,即无需关注TIE抖动。
5.1.3 相邻周期抖动(Cycle to Cycle Jitter)
相邻周期间抖动是指连续两个实际时钟周期的周期值的偏差,也就是Cycle to Cycle jitter = T2 -T1,也就是说,在数学上,Cycle to Cycle jitter 是Period jitter的差分。
在扩频通信等需要扩频时钟(spread spectrum clock)的应用,由于频率本身就是变的,那么统计出的Period Jitter就会很大不足已体现稳定性,这时统计Cycle to Cycle Jitter就有意义了
上述3种定义是时钟抖动的3种不同的描述方式,都是描述时钟的总抖动,分别使用与不同的场合。3个抖动本质上等价的,有点像位移、速度、加速度的关系(都是描述物体的运动),知道任意一个就可以推算出其他两个。一般高速示波器测量时钟的时候都会统计3种时钟的总抖动。下面举例说明一下,三种都抖动的应用的场合不太一样。
5.2 串行数据系统的抖动
5.2.1 数据相关抖动
数据相关抖动指数据与时钟的相对抖动,而不是单纯指数据本身或者时钟本身的抖动。与时钟抖动的定义类似,可以定义数据相位抖动,即数据TIE抖动,指实际数据边沿位置与实际时钟边沿位置的偏差。
数据的TIE抖动的直接来源就是发送端参考时钟的抖动,这一点影响非常大。除此之外,信道中的噪声和串扰对TIE抖动也有明显的影响。
如果数据是1010一直变化,与时钟抖动的定义类似,也可以定义数据周期抖动,指实际数据周期与实际时钟周期的偏差;数据相邻周期间抖动,指连续两个实际数据周期的周期值的偏差,但是数据并不是1010一直变化,故上述定义没有实际应用意义。
5.2.1 误码率与TIE抖动的关系
对于串行数据系统,接收端采样需要数据TIE的不能过大,也就是存在一个确定的抖动值,当实际TIE值大于等于这个值时,接收端不能正确采样,即发生误码。那么误码率就等于接收到的信号的TIE大于等于上述抖动值的概率。
5.3 抖动的统计域分析
统计域分析主要是针对数据的TIE抖动,以判断串行数据通信系统是否满足要求。当然,也可以对时钟的TIE抖动、周期抖动和相邻周期抖动进行同样的分析。
无论是数据的TIE抖动,还是时钟的TIE抖动、周期抖动和相邻周期抖动,都成为总抖动,也就是Tj,这个参数是示波器直接测量的,如何测量见前文中的定义。
5.4 抖动的频域分析
频域分析的一个主要内容就是PLL的相位噪声的分析,详见本文第4节内容。除此之外,高速示波器都会将测量的抖动,通过傅里叶变换成频域的数据,这有利于我们定位周期性抖动的来源,例如DCDC的开关噪声等等。