Xilinx FPGA高级设计及应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.5 基于RocketIO的高速数据传输系统

随着数据传输带宽和远距离高速通信应用需求的不断增加,现有的系统同步和源同步技术在Gbps以上已无力应付。本节借助信道编码调制技术设计一种基于嵌入式时钟的高速串行自同步数据通信方案,突破了现有通信方式的速率上限,进一步简化了串行链路的复杂度,并且能可靠地用于远程有线或无线通信系统中。

3.5.1 自同步通信系统架构

与源同步和系统同步技术不同,自同步技术可保障更高速率的应用,并且不需要为通信传输时钟,因而能够简化链路互连和时钟网络的设计复杂度。它在发信方通过编码调制把串行数据流中电平持续的游程(Run Length)变短,使其包含丰富的翻转信息;收信方以此提取传输时钟,恢复数据。可见,自同步通信接口比其他同步技术复杂,如图3-4所示,其复杂性主要体现在编解码和CDR电路上。

高速串行数据通信中常用的编码方案是8 B/10 B编码,它由IBM公司开发,通过把8位数据扩展重排成10位码字来平衡串行数据流中0 和1 的个数,改善电平游程,提高信号质量。8 B/10 B编码字符构建了串行通信使用的一套基础数据码和控制码,许多独立标准都是以这个公共字符集为基础,定义更高层协议的。总结起来,8 B/10 B编码可以有效解决数据信号的以下问题。

(1)转换密度:编码后的数据流中连0或连1的个数不会超过5,保证接收端锁相环的正常锁定和锁定保持,避免了同步丢失和出错。

(2)直流平衡:8 B/10 B编码拥有直流补偿功能,能够避免高速串行数据链路中差分信号的直流分量随时间推移而产生的偏移。

(3)检错:固定的码字映射和极性偏差(Running Disparity,RD)可检测出数据流中的单比特和多比特错误。

(4)特殊字符:冗余的编码方式使8 B/10 B编码拥有宽敞的映射空间,除了基础数据码,还规定了12个特殊码字作为分隔符或控制字符。

8 B/10 B编码的过程是把8位数据分成3位和5位两部分,分别映射成4位和6位的子码,组成10位的码字,并且每个码字还对应一个反码,如图3-25所示。其中,Dx.y和Kx.y分别表示数据字符和特殊字符。编码中使用正码(RD+)还是反码(RD-)依据当前数据的直流偏差而定,目的是平衡数据流的直流特性。尽管编码给通道带来了20%的额外开销,但并不影响在高速数据通信中的广泛应用。此外,还有64 B/66 B编码和64 B/67 B编码,其原理和作用与8 B/10 B编码一样,但编解码映射逻辑要复杂得多,这里不再介绍。

图3-25 8 B/10 B编码映射

CDR电路的作用是从编码后的串行数据流中依据数据的跳变沿提取传输数据的时钟,并恢复高速串行数据。完整的 CDR 电路包含延迟线相位检测器(Delay-line Phase Detector,DPD)、相位和频率检测器(Phase and Frequency Detector,PFD)、压控振荡器(Voltage Con-troled Oscillator,VCO)、环路滤波器和控制电路等,结构比较复杂,如图3-26所示。PFD将VCO输出频率锁定到数倍于串行数据的参考时钟上,并根据串行数据的跳变沿实时调整VCO输出频率分频时钟的瞬态相位,以修正其瞬时频率,实现与串行数据的匹配,从而恢复时钟。数据的恢复则是在眼图搜索的基础上从多级延迟线中取出信号质量最好的采样点输出,也可以使用过采样器以逻辑的方式实现数据的动态恢复,这里不再详述。

图3-26 CDR电路简化框图

直接逻辑实现CDR和8 B/10 B编解码电路及串化/解串等模块,在高速自同步通信接口设计中并非不可行。然而,这在以数据处理为目标的高速实时系统设计中并不是最好的选择,况且实现的性能也难以达到最优的效果。目前,新型的 FPGA 都已集成了一种称为RocketIO的高速接口,包含自同步应用所需的各种模块及其辅助扩展模块。在FPGA已经成为系统设计主流平台的今天,借助RocketIO实现基于自同步技术的高速串行通信接口,无疑可以缩短开发周期、提高开发效率和设计性能。

3.5.2 RocketIO简介

RocketIO是Xilinx FPGA内嵌的可编程高速串行收发器,在Virtex-5 FPGA中称为GTP或GTX,内建的CDR电路、8 B/10B编解码电路及CML(Current Mode Logic,电流模式逻辑)信号模式使线速率高达10 Gbps以上。RocketIO收发器分为PMA(Physical Media Attach-ment,物理媒介适配)和PCS(Physical Coding Sublayer,物理编码子层)两个子层,以GTP为例,内部结构如图3-27所示。

图3-27 RocketIO GTP 的结构框图

GTP硬件集成各模块,公共锁相环依据参考时钟为整个收发器提供工作时钟,最大倍频系数为20;预加重/均衡电路用于补偿信号的高频损耗,提高信号质量;过采样电路是为将RocketIO GTP应用于低速率(100 ~500 Mbps)数据通信而设计的;PRBS产生和PRBS检测可用来测试串行链路的信号完整性,支持-7、-23 和 -31 三种常用的伪随机序列码。除此之外,为提高通信性能,Xilinx GTP还集成了其他多种功能增强模块。

RocketIO对电路设计具有一定的要求,主要体现在时钟、阻抗匹配和电源上。高性能的通信要求有高质量的时钟源,频偏和抖动是衡量晶振质量的两个重要指标。GTP 要求时钟偏差在40 ps以内,并给出三种时钟供给的建议,性能从高到低依次为专用的外部输入差分源时钟、来自相邻GTP的外输入源时钟和全局时钟。供电方面,RocketIO需要的电源种类比较多,具有低的纹波要求,需要审慎处理。阻抗匹配是高速电路设计必须关注的问题,这里不再赘述。

单个GTP的线速率是100 Mbps~3.75 Gbps,支持通道绑定——一种多通道同步工作的方式,最多可绑定24 个通道,总吞吐率高达90Gbps,每个通道功耗不超过100mW,可方便地用于片间或背板传输。目前,针对 RocketIO 的应用已推出了多种协议标准,如 Aurora、Serial RapidIO、PCI Express、XAUI等。其中 Aurora 协议是 Xilinx 公司为 RocketIO 开发的链路层协议。用户也可以根据实际的应用需求定制自己的协议。下面分别以 Aurora协议和用户自定义协议为模型论述RocketIO在高速数据通信中的应用。

3.5.3 基于标准协议的可靠通信模型

RocketIO支持多种协议的应用,Xilinx的Aurora应用比较广泛。Aurora协议是一种相对简单的点对点的链路层协议,只控制链路层和物理层,设计理念是使其他高层协议,如TCP/IP和以太网等,可以轻易地运行在Aurora 之上。它使用一个或多个高速的串行链路(Lane)构成带宽更高的通道(Channel),如图3-28所示。Aurora是一个开放的标准,用户可自由实现。

图3-28 Aurora链路结构示意图

Aurora协议支持双工和单工的通信模式,可实现点对点的可靠数据通信。它不仅定义了物理接口,还定义了包结构PDU(Protocol Data Unit,协议数据单元)和嵌入其他协议包的推荐程序等。协议规定了通道初始化程序、数据提取和流量控制等内容,但无纠错和重传机制,也没有数据交换功能。传输的数据流包含时钟校正序列、初始化序列、本地流控PDU、用户流控PDU、通道PDU及空闲序列等。时钟校正序列用于补偿收发双方时钟细微的频差,流控PDU用于控制传输流量。有效数据被封装在通道PDU之中,它是由用户PDU经包装演化而来的,演化的过程如图3-29所示。

图3-29 用户PDU到通道PDU的转化

Aurora通道要求传输的数据单元包含偶数个8位数(字节),当用户PDU的字节数N为奇数时,需要填充PAD(0x9C)。链路层封装的过程,就是给数据单元添加通道 PDU 开始(Start of Channel PDUs,SCP)和结束(End of Channel PDUs,ECP)的标志。开始/SCP/(/K28.2/K27.7/)和结束/ECP/(/K29.7/K30.7/)标志字符来源于Aurora规定的一组控制序列,称为控制组(Ordered Sets)。封装好的包作为链路层负载在PCS层上,经8B/10B编码、串化后就可在链路上传输了。

Aurora是基于反馈的有链接通信协议,无论单工还是双工模式,在数据传输前都要进行链路的握手建立和通道的握手建立,故需要将接收端的状态信息实时地反馈到发送端,并且每个链路都要有自己的反馈回路。基于Aurora协议的通信模型如图3-28所示,实际的链路数可根据需要设立,多链路在初始化成功以后同步工作。Aurora协议的初始化流程如图3-30所示。

图3-30 Aurora协议初始化

Aurora的初始化过程蕴含着通道建立的过程,以单工模式为例,通道建立的过程如下。

(1)链路的建立。

① 初始化开始后,TX(发送)端首先向RX(接收)端发送初始化握手信号,直到初始化握手完成,RX lane up信号有效。

② RX端初始化完成后,RX端通过普通I/O将信号RX ALIGNED置高到TX端;TX端接收到该信号后,TX lane up信号有效,lane初始化完成。

(2)通道的建立。

① lane初始化完成后,TX端发送通道建立的初始化握手信号,直到初始化完成,RX channel up信号有效。

② RX端准备好后将信息反馈回TX端,TX端接收到该信号后,TX channel信号有效,通道建立完成,此后TX端就可以发送用户数据了。

通信开始后,系统根据通道PDU 和流控信息进行数据的传输,若此过程中链路出错,RX端收到持续的错误数据会自动复位,并通知TX端停止发数,从而避免数据的大量丢失。复位完成后重新建立链路和通道。图3-31是通信链路建立过程的ChipScope截图,可见通道初始化完成之前,RX端收到的数据是不可靠的,甚至是不正确的。该模型有Xilinx Aurora IP核的支持,数据传输速率为100 Mbps~3.125 Gbps,方便用户配置和相关参数的选择。

图3-31 Aurora协议下通信通道建立的过程

从上面的论述可知,基于Aurora协议的通信模型是在通道建立完成后才开始发送数据的,基于有链接的通信,因此能够最大限度地保证数据不丢失或少丢失。然而,该模型有一个特点就是即使在单工模式下也需要反馈信号线,对于数据单向传输的实时通信系统,无疑是很不方便的。对于远距离通信,这一点更有局限,故它比较适合双工模式下的可靠通信应用。

3.5.4 应用实例——基于自定义协议的即时传输系统

在高速实时信号处理领域要求前端数据能够以尽可能小的延时传给次级处理机,并且传输过程一旦开始就不会中断。这样的系统在启动时丢失一些数据是允许的,如何高效、迅速地传输数据才是设计的关键。这时,基于协议的可靠通信模型就显得不便了,因为链路建立会引入过大的延时,反馈的引入也会增加互连链路数。利用RocketIO的高速性能,自定义传输协议可以很好地满足这一要求。

1. 模型建立

基于自定义协议的实时传输模型,应该尽量简化通信接口的复杂度和链路或通道连接的过程,并满足无反馈地实现数据实时、高效传输的现实需求。针对不间断单向传输的应用特点,模型中只需要一对信号线即可构建一个高速的通信链路,多个链路的绑定可实现更高传输带宽,其模型如图3-32所示。

图3-32 自定义协议的实时传输模型

Xilinx FPGA中可实现多达24个GTP链路的绑定,绑定后的各链路能够同步工作。模型中链路的线速率范围是100 Mbps~ 3.75 Gbps,由用户自由配置,使用起来更方便,并且由于使用8 B/10 B编解码和嵌入式时钟,传输可靠性大大提高,加上合理的用户自定义协议,可实现高效、实时的不间断远距离数据传输。如果传输的线速率低于3.75 Gbps,只需一对差分线或一根光纤即可完成链路的构建。

2. 协议定制

借助RocketIO中8B/10B编码表中的12个K字符,用户可以定制出简洁而高效的通信协议。由于应用于实时通信,数据以流模式传输,可以帧作为协议的基本单元。一个用于单链路传输的最简单的通信协议至少应包括帧的开始(SF)、用户数据、时钟校正序列等,多链路绑定应用时还需要通道校正序列。图3-33是一个最简单的协议帧结构。

图3-33 基本的帧结构

其中,SF(Start of Frame,帧开始)使用RocketIO的Comma字符(某K字符),它除了标志帧开始,还起到传输同步控制的作用,在连续的帧流中,帧结束也由SF标志。用户数据的长度应根据实际的数据率和允许使用的RocketIO的线速率来确定,太长了传输可靠性降低,太短了又会引入较大的协议开销,应折中考虑。实际中,8bit帧头带2048bit的用户数据是没有问题的。

这样,简单的协议就定义完了。至于错误检测、重传和数据交换等机制,暂不考虑。按照上述协议实现的通信连接,最终链路上的码流(8 B/10 B编码前)如图3-34所示。Comma可选用K28.5充当,空闲字符、时钟校正序列可以选择其他合适的K字符。数据传输过程中不断由帧头进行同步校正,可靠性得以保证。

图3-34 自定义简单协议的链路码流

此外,RocketIO对参考时钟的要求比较高,为了应对数据传输过程中参考时钟中断或更换参考时钟等给链接稳定性带来的影响,可在发送端和接收端分别建立时钟监测电路。当检测到时钟中断时,对通信接口模块进行一次软复位,从而恢复可靠的链接。

3. 接口实现

协议的物理层功能借助RocketIO来实现,用户配置好RocketIO的相关属性后,只需要处理用户接口,这里主要涉及通道同步控制、协议帧的封装和解封及空闲字符填充和剔除等。时钟监测电路和错误检测电路可以根据需要引入。简单的FPGA逻辑即可实现协议的内容,其框图如图3-35所示,主要包括缓冲FIFO、帧封装/解封模块和逻辑控制模块。

图3-35 自定义协议的FPGA实现

帧封装过程中,控制逻辑控制帧封装模块先发送帧头SF,然后发送用户数据,并根据TX FIFO的状态(空或数据少于一定的阈值)插入Idle字符,如此重复。其中SF定时插入,形成的用户端帧流送给GTP做后续处理。帧解封过程与此相反,解封模块搜索到帧头,标志新的数据帧接收的开始,帧解封就是把数据写入RX FIFO并丢弃Idle字符和时钟校正序列等非数据字符。帧头SF和非数据字符由GTP的RXCHARISK和RXCHARISKCOMMA信号指示。

工程实践中使用了该模式实现数据的远距离即时传输。GTP的线速率为3.0 Gbps,SF使用K28.5(8′hBC),Idle使用K28.2(8′h5C),单链路应用。在FPGA上实现后进行测试的ChipScope截图和数据眼图分别如图3-36和图3-37所示,其中,在图3-36中为节省篇幅,该图做了中间删除,发送端发送的有效数据是0 ~255 的8 位并行数据。其中,RXCHARISK和RXCHARISKCOMMA同为高时,表示接收到帧头;而仅RXCHARISK为高时,表示对应的接收数据为非数据字符。剔除帧头和非数据字符后就是用户的传输数据了。

图3-36 基于自定义协议的实时传输模型的测试截图

图3-37 基于自定义协议的实时传输模型串行数据眼图

自同步技术具有更高的可靠性,在自同步技术的基础上实现高速的串行通信接口,传输的速率和可靠性也要高很多,因而具有其他同步技术无法比拟的优越性。但自同步传输需要将时钟信息嵌入到串行数据流中,换言之,就是要对数据进行编解码调制。这样一方面会增加接口设计的复杂度,另一方面还会引入信道带宽开销。随着RocketIO技术的成熟和兴起,这些已微不足道。自同步技术的广泛应用,将成为高速数据通信发展的趋势。