上一章介绍了时钟产生的几种方式以及每种方式对应的应用场景。今天讲一下产生的时钟是怎样传递出去到每个应用这些时钟信号的器件,你可以把这个过程看作是人体的脉搏。我们分几种场景来看:
 
多数的逻辑功能都依赖时钟的边沿对数据进行判决
 
 
我们先说一下器件内部时钟的使用:
比如 MCU - 在器件内部直接产生或者配合外接的振荡电路产生,就地使用,你不需要关心这些时钟信号在内部是如何使用的,那是 IC 设计工程师的事情,他们做的事情就类似 FPGA 逻辑编程一样,不过对于使用这些器件的工程师 - 软件工程师、系统工程师,不需要关心这些细节。你只需要编写程序,让自己要实现的功能通过一条条的指令去执行就可以了。
 
MCU 接上振荡电路动起来,你只需要专注于编程就可以了
 
比如 FPGA - 几乎内部所有的功能都需要不同频率、不同相位时钟的参与,而这些时钟可能都来自于同一个时钟源,因此时序(Timing)可以说是 FPGA 工程师最头疼的问题 - 无论是最基本的时序逻辑还是状态机,Debug 的工作重心其实就是查找时序上出现的问题。在 FPGA 使用时钟过程中你可能需要应对以下的几个问题:
 
通过内部的逻辑产生你所需要的不同频率、不同相位的时钟信号
 
通过 PLL 生成高速的时钟,毕竟外接或者自身振荡产生的时钟信号频率不会太高,而 FPGA 内部的逻辑需要更高速地运行,因此目前主流的 FPGA 都会自带几个 PLL 甚至 DLL
 
通过 PLL 进行相位的调整。内部的逻辑门一定会有传输延迟,在你需要相位精确要求的逻辑电路可以使用 PLL 来获取你所需要的相位时钟
 
 
通过 PLL 做精确的相位调整
 
通过 PLL 也可以进行时钟占空比的调整
 
通过 PLL 也可以消除参考时钟上的噪声和抖动(jitter)
 
时钟信号的相位和周期抖动示意

 

 
基于一个时钟输入源进行时钟分配,增加每个时钟输出的驱动能力,最小化多个输出之间的输出偏差,有的情况需要 PLL,有的情况则不需要
 
基于锁相环 PLL 的消除输出偏差
 
 
我们再说一下器件和器件之间的时钟信号传输
 
 
最常用到的处理器(8051...ARM 等等)和外设之间的数据通信,无论是并行数据访问和串行数据访问,时钟线(clock、clk、sclk、sck 不同的应用不同的叫法)都是最值得重视的一根,它的质量好坏 - 幅度上的电平大小、噪声,边沿上的抖动、过冲都影响了系统的性能。
 
并行总线访问的典型连接方式
 
ADC/DAC 的时钟信号更是关键,因为这些器件都是在时钟的边沿处对模拟信号进行量化,时钟沿的抖动将会给量化的结果带来噪声,尤其是要求高精度的 ADC 和 DAC,不仅需要 ADC/DAC 的位数要高,更需要其采样时钟边沿抖动要尽可能小,噪声尽可能低。因此高速 ADC/DAC 的时钟信号一般都会采用正弦波时钟,因为方波信号会有更高频的信号成分,容易影响到被采集的模拟信号。如果大家留心的话,很多高速的 ADC/DAC 都采用差分的方式进行数据和时钟的传输。有图有真相 - www.analog.com 上你通过选型发现越是高速、高分辨率的 ADC 其接口都变成了差分的方式。
 
Analog Device 的高速 / 高分辨率 ADC 都采用了串行且差分的传输方式
 
差分信号传输的优势就是通过成对的差分线传输一个信号,只要它们一直亲密无间、步调一致,在接收端就能够消除掉沿途中遇到的任何干扰,原理参见下面的图示。
 
差分时钟传输降低噪声

 

 
在 PCB 板上走线避不开的就是因阻抗失配导致的信号反射,时钟源的输出阻抗一般为低阻,比如为 25Ω,PCB 板子上走线的阻抗设定为 50Ω(为什么是 50Ω,而不是 80Ω?我们将来专门讲一下),而接收端的阻抗一般为高阻,就如土豪送女儿出嫁一样,原本送出来漂亮、标致的方波时钟出门就被绊了一脚,路不平啊!好不容易曲曲弯弯的走半天,有时还要绕地下通道(过孔)到了接收端的婆婆家门口,又撞上了南墙,脑袋一下就肿了起来,被折腾成下图的模样了:
 
阻抗失配导致的时钟信号变差
 
是不是很丑?那倒是其次,更严重的是边沿变乱掉了,严重的会导致功能失调。怎么办?- 你得给她铺好路,要一帆风顺才行,不能有任何的颠簸、阻挡,所以阻抗匹配那是必须的!如何匹配?自己通过我下面的图示续写一下沿途的故事脑补一下,我们后面文章还要再讲述。
 
阻抗匹配的方式框图
 
电子产品系统越来越复杂,板上的数字器件越来越多,而这些器件的时钟无论需要复用以降低成本,还是需要时序同步以满足系统的时序要求,都要求整个系统上的时钟之间产生的关联越来越紧密,就像一个大家族之间一样,每个个人都可以独立行事,但总体上都要听从大家长的号令。这些系统时钟之间的关系就构成了一个“时钟树” - 英文为 Clock Tree,目前有不少公司在做相应的时钟树器件,有简单的也有非常复杂的,价格也不同,如下图。
 
时钟树根据实际的需要有多钟不同选择
 
时钟树的选用可以根据自己板子上的器件的需求 - 每个器件需要的时钟的频率,器件之间的频率关系以及需要的驱动能力。