FPGA高速串行收发器,GTP,GTX 下载本文

为2Gb/s,可以满足1.8GHz的数据需求,其额外的容量还可用于所需开销。

10.3.3 Rocket I/O硬核模块的体系结构

Xilinx公司不同的系列芯片中集成的Rocket IO是不同的,本节以经过大量应用的Virtex-2 Pro系列为例进行介绍。

1.Rocket IO架构

Virtex-2 Pro系列FPGA最多可包含16个Rocket IO模块,基本上分布于FPGA的上下两端,如图10-5所示。每通道可提供622Mbps~3.125Gbps的传输能力,且不需要在发送端配置串行数据速率,这是因为接收端的工作时钟是从接收数据中提取出来的。

图10-5 Rocket IO在Virtex-2 Pro芯片中分布示意图

Rocket IO包括PMA(Physical Media Attachment,物理媒介适配层)和PCS(PhysicalCoding Sublayer,物理编码子层)两个子层,其内部结构如图10-6所示。其中PMA子层主要用于串行化和解串,PCS主要包括线路编码和CRC校验编码。

图10-6 Rocket I/O收发器的内部结构示意图

PMA子层中集成了SERDES,发送和接收缓冲,时钟发生器及时钟恢复电路。SERDES是一个串并转换器,负责FPGA中本地的32位并行数据(也可以是16位或8位)与Rocket IO接口的串行数据之间的转换。采用串行数据收发,可以在高频条件下很好地避免数据间的串扰。时钟发生器及时钟恢复电路用于将时钟与数据绑定发送,以及将时钟从接收到的数据流中恢复出来,从而避免了在高速传输条件下时钟与数据分开传输所带来的时钟抖动等问题。

PCS子层负责8B/10B编码解码和CRC校验,并集成了负责channel绑定和时钟修正的弹性缓冲。8B/10B编码可以避免数据流中出现连0连1的情况,便于时钟的恢复。channel绑定通过在发送数据流中加入P字符来将几个RocketIO通道绑定成一个一致的并行通道,从而来提高数据的吞吐率。最多支持24个通道的绑定。弹性缓冲可以解决恢复时钟与本地时钟的不一致问题,并进行数据率的匹配,从而使得channel绑定成为可能。对Rocket IO模块的配置,可以通过下面两种方式进行:静态特性可以通过HDL代码设置;动态特性可以通过Rocket IO的原语端口进行配置。

2.Rocket IO硬核模块说明

Rocket IO硬核模块可通过原语和Core Generator调用,其模块结构如图10-7所示。可以看出,该硬核分为时钟合成器、时钟和数据恢复器、发送器、接收器、环回器、缓冲器、CRC校验模块、配置模块以及复位模块等九个主要组成部分。

1)时钟合成器

在实际设计中,高性能的通信质量要求有高稳定性和高精度的时钟源,而抖动和频偏是衡量时钟源的两个重要指标。RocketI/O内部的工作时钟需要将输入时钟经过数十倍的倍频,但其可容忍的时钟偏差为40ps,因此建议选择高精度的差分时钟。Xilinx公司推荐选用Epson EG22121CA 2.5V(LVPECL Outputs)或者Pletronics LV1145B(LVDS Outputs)晶振。当Rocket I/O在2.5G波特以上时,参考时钟应采用差分输入方式(如LVDS、LVPECL),由专用差分时钟引脚输入,然后引到相同或相邻通道中RocketI/O的参考时钟输入端;当RocketI/O在2.5G波特以下时,不要使用FPGA内部的DCM模块来产生参考时钟,因为经过DCM倍频的时钟会引入较大的抖动,使RocketI/O的接收锁相环无法稳定地锁定发送时钟。

Rocket IO采集数据的同步时钟则是通过时钟/数据恢复电路来提取的,该电路由一个单片的PLL集成块实现,不需要任何外部组件。恢复电路从接收的数据流中提取出时钟的频率和相位,并通过20倍分频后送到输出管脚RXRECCLK上。

图10-7 Virtex-2 Pro系列Rocket IO模块说明

当高精度输入到FPGA中后,吉比特发送器对参考时钟输入管脚REFCLK的信号完成20倍倍频操作后,来作为自己的工作时钟。同样,该倍频器已集成在芯片中,不需要额外的组件。RXRECCLK和REFCLK二者之间没有固定的相位关系,且都为专用时钟信号,不能连接到其他管脚上作为他用。当使用4字节或1字节数据接收路径时,RXUSRCLK和RXUSRCLK2具有不同的频率,但是频率低的时钟下降沿要和频率高的时钟下降沿对齐。同样的关系也适用于TXUSRCLK和TXUSRCLK2信号。

例如,在Virtex-2 Pro系列FPGA中,由于Rocket IO模块内部将输入参考时钟20倍频,而Rocket IO模块可容忍的输入参考时钟抖动公差仅为40ps,可见参考时钟的抖动对其性能有直接影响。

典型的时钟输入如图10-8所示,外部时钟由差分或单端引脚馈入后,只经过一级全局时钟缓冲(BUFG)布设到时钟树上,再连接到Rocket I/O的参考时钟上,可最大幅度地减小抖动。

图10-8 Rocket I/O的时钟、复位连接示意图

2) 时钟和数据恢复器

如果没有数据存在,时钟/数据恢复器(CDR)电路会自动锁相到参考时钟上。为了使操作达到最佳性能,参考时钟的精度必须在100ppm之内。同时要满足供电系统的低噪声。如果有数据,则恢复电路会自动同步锁相到输入数据上。

3)发送器

发送器模块包括发送接口、8B/10B编码器、不均匀控制、发送FIFO、串行器、发送终端以及预加重电路。

(1)FPGA发送接口

发送接口可发送1、2或4个数据字符到发送器,每个字符都是8比特或10比特位宽。当选择8比特位宽时,多出的两比特就变成8B/10B编码器的控制信号。如果同时将8B/10B编码旁路后,10比特字符的顺序如图10-9所示。

图10-9 旁路掉8B/10B编码后的字符顺序

(2)8B/10B编码器

8B/10B编码器是一个可选的硬件组件,意味着它可以被旁路掉。在吉比特以太网、光纤信道以及infiniBand应用中,编码器都是用256个字数据符和12个控制字符。编码器在K-字符(单比特)后读入8个数据比特,由这9个比特数据生成10比特编码输出。当K-字符为高时,数据将被编码成8B/10B码中可用的12个K-字符组合中的1个;当K-字符为低时,8比特数据将被标准编码。

线路编码将8个数据位转换为不连续五个以上的―1‖或―0‖的10位比特码,以获取更好的直流平衡性,能提高数据传输速率、平衡码流中―0‖、―1‖概率,并且可以减小码流中长连―0‖和长连―1‖串。

8b/10b编码是属于基于块编码的mbnb线路码中的一种,很多串行标准Infiniband、光纤通道千兆以太网ATM ESCON和DVB-ASI都针对原始数据流采用8B/10B编码和解码。其编码过程是将8个比特分成5B/6B与3B/4B两部分分别编码,如图10-10所示。

图10-10 8B/10B线路编码原理

8b/10b编码集合中包括数据字串和控制字串两部分数据字串,包括256个可能数值。其中,包括可作为控制字串K23.7 K28.0~K28.7 K27.7 K29.7 K30.7的码字。当传送的字串作为控制字串时,由Rocket IO模块相应的控制字标志输入引脚,如TX_CHARISK指定该字为控制字串。尽管8B/10B编码后,数据的传输效率只有80%,但还是在各类应用中获得广泛应用,其原因在于下面几个方面:

① 转换密度:其目的是保证在发送数据流中有足够的信号转换,以保证PLL正常工作。如果没有8B/10B 编码方法,数据中的一串1或0有可能引起接收时钟漂移或同步丢失,从而引起数据丢失。

② DC 补偿:8B/10B还保证对信号进行DC补偿,这意味着链路中不会随着时间推移而出现DC偏移,8B/10B编码将用户数据按字节8位块变换成多个10位的输出值,用这些值进行DC补偿。

③ 纠错:8B/10B编码遵循特定规则,根据这些规则,很多信号传输错误都可立即检测出来。

④ 特殊字符:8B/10B编码采用10位字符,其数量是8位字符空间中字符数的4倍,这样可以将特殊字符编码放入数据流中,它们不会被解码成数据字符,这些特殊字符可用作分隔符或其他命令。

8B/10B模块在设计中可以旁路掉,也可以用其余的线路编码方式代替,如64B/66B编码等。将发送器的TXBYPASS8B10B[n]控制信号设置成1,则可将发送端的线路编码模块旁路;在接收器中将RX_DECODE_USE设置为FALSE,就可把接收端的解码模块旁路。

在实际设计中,依据互连双方接口的电气标准的不同,有两种耦合方式:直流耦合和交流耦合。在直流耦合方式下,并不一定要求采用8b/10b编码,可以选择其它的线路码型或不用线路编码。但在较高的传输速率条件下,如2.5Gbaud以上,为了达到良好的抗干扰性能和低的误码率,应该考虑采用8b/10b编码。而在交流耦合方式下必须要选择8b/10b编码,否则接收端的漂移会使接收器无法正常工作。