嵌入式学习小组
直播中

樊周依

7年用户 180经验值
私信 关注

如何利用Altera FPGA中的锁相环及Logiclock实现高速时钟恢复电路?

本文利用时钟切换的方法,在低端AlteraEP2C5T144C6上实现了204.8MHZ的时钟数据恢复电路,并通过了硬件验证。

回帖(1)

周梦斌

2021-4-30 15:17:20
  时钟数据恢复电路是高速收发器的核心模块,而高速收发器是通信系统中的关键部分。随着光纤在通信中的应用,信道可以承载的通信速率已经可以达到GHz,从而使得接收端的接收速率成为限制通信速率的主要瓶颈。因此高速时钟数据恢复电路的研究是目前通信领域的研究热点。目前时钟数据恢复电路主要是模拟IC和数字IC,其频率已经可以达到几十GHz。而由于FPGA器件的可编程性、低成本、短的设计周期以及越来越大的容量和速度,在数字领域的应用逐渐有替代数字IC的趋势,已经广泛作为数字系统的控制核心。但利用中低端FPGA还没有可以达到100MHz以上的时钟数据恢复电路。由于上面的原因,许多利用FPGA实现的高速通信系统中必须使用额外的专用时钟数据恢复IC,这样不仅增加了成本,而且裸露在外的高速PCB布线使还会带来串扰、信号完整性等非常严重的问题。如果可以在中低端FPGA上实现高速时钟数据恢复电路,则可降低成本且提高整个电路系统的性能。
  目前利用FPGA实现时钟恢复电路的方法,基本都是首先利用FPGA内部的锁相环产生N*f的高频时钟,然后再根据输入信号控制对高速时钟的分频,从而产生与输入信号同步的时钟信号[1~3],其中N决定了恢复时钟信号的相位精度,通常N等于8。因此如果输入信号的频率为100MHz,则系统的工作频率就必须达到800MHz,对于中低端FPGA,如此高的工作频率显然无法承受。虽然高端FPGA可以达到GHz的工作频率,但其高昂的价格不适合用于普通用户。而其它基于中低端FPGA实现高速时钟恢复电路的方法,要么需要外部VCO模块[4],要么只能恢复数据而无法得到同步的时钟信号[5]。针对这种情况,本文提出了一种利用Altera FPGA中的锁相环及Logiclock等技术,实现高速时钟恢复电路的方法。电路是在Altera的EP2C5T144C6芯片上实现的,用于数字光端机的接收端从100路2.048MHz压缩视频码流合成的串行码流中正确提取100路视频码流,其工作频率为204.8MHz,通过硬件验证电路可以正确工作。
  1 时钟恢复电路原理及环路结构
  时钟恢复电路的目的是从输入的数据流中,提取出与其同步的时钟信号。时钟信号不可能凭空产生,因此该电路本身必须有一个时钟信号产生机制,除此之外还必须有一个判断控制机制一能够判断并且调整该时钟信号与输入数据之间的相位关系,使其同步。
  传统的基于FPGA的时钟恢复电路的结构如图1所示。如前所述,这种结构的电路用中低端FPGA,工作频率不可能达到100MHz以上。本文采用的方法是利用锁相环产生不同相位的时钟信号,然后再根据控制信号控制输出时钟在这些时钟之间进行切换,从而使时钟与输入数据同步。具体结构如图2所示。下面详细介绍各个模块的工作原理及电路实现。
  
  2 模块电路设计
  电路由三个模块构成,鉴相器模块和计数器模块通过判断时钟信号和输入信号的相位关系,产生相位调整的控制信号,时钟调整模块根据送来的控制信号对输出时钟进行相位调整。
  2.1 超前滞后鉴相器
  鉴相器使用可以识别输入信号连0和连1的超前滞后鉴相器,具体电路如图3所示。利用四个D触发器对输入信号Din采样产生s1、s2、s3三个信号,如果s2=s3≠s1,则表示时钟超前,up-down为高电平;如果s1=s2≠s3,则表示时钟滞后,up-down为低电平;当输入信号连0或连1时s1=s2=s3,valid为低电平,此时up-down无效。这两个信号都必须用时钟信号进行同步产生,否则电路可能由于s1、s2、s3的延迟差而进入一种死锁状态。这种鉴相器只有超前或滞后两种状态,如果直接将其输出用作控制时钟相位的调整,则时钟切换会过于频繁,而且输入信号中的毛刺会引起误操作。所以将其输出信号送给up-down计数模块,进行一段时间的积累后,再产生用于控制时钟相位的信号。
  
  2.2 up-down计数器模块
  计数器模块的功能是在鉴相器送来的信号控制下进行计数,产生相位调整的控制信号。计数器的初始值为M,当输入信号valid为高电平时,判断up-down信号。如果该信号为1,则计数器加计数,否则减计数。当计数器的值为2M时,early产生高电平脉冲;当为0时,later产生高电平脉冲。
  2.3 时钟产生调整模块
  2.3.1 电路结构
  时钟产生调整模块的主要功能是产生和输入信号频率相同的时钟信号,并根据相位判断模块发送过来的控制信号,不断地调整输出时钟相位,使得输出时钟的上升沿维持在输入信号中间位置,其结构如图4所示。不同相位的同频时钟是利用EP2C5T144C6 中的锁相环产生的,由于课题项目的需要,1个片子内部必须含有2个时钟恢复电路,受到全局时钟数目的限制,采用6个时钟信号进行切换。在该模块电路设计设置6个状态,每一状态对应某一相位的时钟信号。当检测到early信号为高电平时,状态就跳变到比当前时钟信号相位提前1个相位的状态上(若相位超前则再继续超前),而当later信号为高电平时跳变到比当前时钟信号滞后1个相位的状态上去(相位滞后则继续滞后),然后再根据当前的状态选择相应的时钟信号,作为当前工作时钟即输出时钟信号Rclk。
  
  2.3.2 时钟切换
  采用时钟切换实现该相位调整,首要问题就是必须消除时钟切换时产生的毛刺,因此所有子电路都采用恢复出来的时钟信号作为其工作时钟,这样所有的时钟切换情况都可用图5表示。假定此时的工作时钟为clk_l,只要能够保证时钟切换避开上面的阴影区域,而是处在上图中的红色区域,则无论是时钟向前还是向后切换,都不会出现毛刺。以工作频率为200MHz计算,每段红色区域大约为1.6ns,而Altera中的LE单元延迟大约为0.23ns,所以采用buffer弥补延迟完全可以使时钟切换发生在合适的位置。
  2.3.3 时钟相位偏移的补偿
  该电路结构的另一关键是必须保证不同相位时钟信号经过时钟判断调整模块后,它们之间的相位关系不会因延迟的不同而失效而必须仍然成立,否则就会导致相位调整过大或过小,电路会因此变得不稳定。电路延迟由门延迟和连线延迟组成。对于连线延迟在AlteraCyclone II中只要两个LE之间的连线类型相同,延迟也就相同,而每个LAB中有16个LE也有16个LOCAL LINE布线资源,因此同一个LAB 中LE之间的互连线延迟都是相同的。对于门延迟,在Cyclone II中每个LE有A、B、C、D四个输入端,各端口延迟不同。首先通过在某些路径上插入buffer,使得所有时钟信号经过的LE的数目相同。然后再在3个时钟信号中各插入一个buffer,再根据最终的布线情况,调整这3个buffer的端口连接,就可以使得各时钟信号经过的门延迟基本相同。除了上述两种方法,在应用中使用了Quartus II的logiclock功能,按照设计的需要将同一功能模块的逻辑放在相同的LAB中,这样可以使连线延迟对电路的影响降到最小。同时利用该功能也可以直接将调整好的时钟恢复电路应用于整个通信系统中,使得其他电路的布局布线不会对该电路产生影响。
  2.4 数据恢复
  由于时钟数据恢复电路的目的就是得到能够正确采样输入数据的时钟信号。为了保证恢复出的时钟和输入数据的相位关系在整个芯片内都能够成立,在系统应用中输入信号也走全局时钟网络。经过这样处理后,只要在需要恢复数据的地方加一个D触发器即可得到正确的数据信号。
  
  3 环路仿真结果及讨论
  采用EP2C5T144C6器件的环路的仿真结果如图6所示,其中工作频率为204.8MHz。由于整个电路用的是经过全局时钟控制模块后的时钟和输入数据,所以在图6中给出的是这两个信号时序关系:ORDA~clkctrl和R_clk~clkctrl。由图(a)及局部放大图(b)可以看出,电路稳定时钟信号在输入数据的中间位置左右摆动,可以正确采样输入数据。
  
  
  本文提出的电路结构不需要高频时钟信号,因此只要相位调整过程中时钟信号的脉冲宽度大于器件要求的最小值,且满足整个电路满足建立保持时间就可以正常工作。因此最小的时钟周期T=max(3*Tmin,Tper),其中Tmin是所用器件时钟信号脉冲宽度的最小值,Tper是满足建立保持时间的最小时钟周期。例如EP2C35F672C6芯片工作时钟高电平脉冲最小值为1ns,采用该芯片电路的工作频率可以达到300MHz,这个工作频率已经通过了Altera DE2板的硬件验证。如果采用更快的器件如Cyclone III EP3C10T144C7,时钟脉冲宽度最小值0.625ns,经过仿真验证其工作频率可以达到400MHz。在时钟调整模块后加一个简单的二分频电路,就可以实现12个时钟相位的调整精度,根据不同器件的性能很容易进行扩展,达到所需要的设计要求。
  4 结论
  本文利用时钟切换的方法,在低端AlteraEP2C5T144C6上实现了204.8MHZ的时钟数据恢复电路,并通过了硬件验证。通过理论分析给出了决定该电路工作频率的主要因素,同时对该电路稍加改动就可以实现更高精度的时钟数据恢复电路,具有很好的扩展性,为利用中低端FPGA实现高速通信系统提供了一种可参考的解决方案。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分