前言-高速数字设计最关键的问题就是时钟和阻抗。根据不同的应用通常会采用不同的时钟架构,但是实际使用中经常会有人搞混。所以抽空把时钟分配的种类大概整理了一下,供大家参考。
对于数字电路来说,目前绝大部分的应用都是同步逻辑电路,而同步逻辑电路中必不可少的就是时钟。为了把发送端的时钟信息传递到接收端,数字总线采用的时钟方式大体上可以分为3类,各有各的应用领域。
1、并行时钟<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
传统的并行总线使用一路时钟和多路信号线进行数据传输,如PCI总线、大部分CPU、DSP的local bus等。这些总线工作时有一个系统时钟,数据的发出和接收都是在时钟的有效沿进行。为了保证在有效沿时采集到正确的数据,通常都有建立/保持时间的要求,以避免采到不稳定时刻的数据。同时这些总线对于布线长度的等长都有比较严格的要求,否则可能有些数据线建立/保持时间满足要求而另一些不满足。这种并行总线在使用中最大的挑战是当总线时钟速率超过几百MHz后就很难再提高了,因为其很多根并行线很难满足此时苛刻的走线等长的要求,特别是当总线是点到多点的拓扑结构时。
2、嵌入式时钟
为了解决并行总线数据吞吐率很难提高的这个问题,一些系统和芯片的设计厂商提出了嵌入式时钟的概念。其思路首先是把原来很多根的并行线用一对或多对高速差分线来代替,节省了布线空间;然后把系统的时钟信息通过数据编码的方式嵌在数据流里,省去了专门的时钟走线。信号到了接收端,接收端采用相应的CDR(clock-data recovery)电路把数据流中内嵌的时钟信息提取出来再对数据采样。这种方法由于不需要走单独的时钟线,各对差分线可以采用各自独立的CDR电路,所以对各对线的等长要求不太严格(即使要求严格也很容易实现,因为走线数量大大减少,而且一般都是点对点传输)。为了把时钟信息嵌在数据流里,需要对数据进行编码。通常采用的编码方式如ANSI的8b/10b编码,以及曼彻斯特编码等。目前流行的PCIE、SATA、FC、XAUI、DP等都是采用的ANSI 的8b/10b编码。典型的数据速率在1Gbps~5Gbps。
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
嵌入式时钟结构的关键在于CDR电路,CDR通常是用一个PLL电路实现,可以从数据中提取时钟。为了应对数据疏密的变化,PLL的环路带宽不可能做得太宽,否则很容易失锁。所以受到环路带宽的限制,CDR只能跟踪上数据中的一部分低频抖动,而数据线上的高频抖动会对眼图和抖动测试产生比较大的影响。采用嵌入式时钟的另一个问题在于数据编码需要一些额外开销,降低了总线效率。
3、前向时钟
随着技术的发展,一些对总线吞吐速率和效率要求更高的应用中开始采用另一种时钟分配方式,即前向时钟(Forward Clocking)。前向时钟的实现得益于DLL (delay locked loop)电路的成熟。DLL电路最大的好处是可以很方便地用成熟的CMOS工艺大量集成,而且不会增加抖动。Xilinx公司对于DLL电路的应用做出了很大贡献,目前其Spartan/Virtex系列的FPGA内部都集成了大量的DLL电路。
前向时钟架构中总线仍然有单独的时钟传输通路,而与传统并行总线所不同的是接收端每条数据信号路径上都有一个DLL电路。电路开始工作时可以有一个训练的过程,接收端的DLL在训练过程中可以根据每条链路的时延情况调整时延,从而保证每条数据线都有充分的建立保持时间。
采用前向时钟的总线效率一般都比较高,因为有专门的时钟通路,不需要再对数据进行编解码。还有一个好处是线路噪声和jitter对于时钟和数据线的影响基本是一样的(因为走线通常都在一起),所以对系统的影响可以消除到最小。
嵌入式时钟的电路对于线路上的高频抖动非常敏感,而采用前向时钟的电路对高频抖动的敏感度就相对小得多。前向时钟总线典型的数据速率在500Mbps~6.4Gbps。
在前向时钟的拓扑总线中,时钟速率通常是数据速率的一半,数据在上下边沿都采样,也就是通常所说的DDR方式。使用DDR采样的好处是时钟线和数据线在设计上需要的带宽是一样的,任何设计上的局限性(比如trace的衰减特性)对于时钟和数据线的影响是一样的。
前向时钟在一些关注效率、实时性,同时需要高吞吐量的总线上应用比较广泛,比如FB-DIMM(目前基本死掉了)、Intel的QPI总线以及AMD的HT3总线,还有象DDR/GDDR等总线也是使用相同的概念。
朱玉龙 2009-9-26 16:15
李凯的技术博客 2009-9-25 11:49