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

相位信息,经过20分频后送到RXRECCLK。

接收端不仅可以处理跳变丰富的8B/10B编码流或加扰流,也可以处理没有跳变的连续的75比特数据流。如果使能了comma检测器,收发器可能识别的字符最多为两个10比特预编码字符。如果检测到字符/字符串,comma检测器输出将被拉高,并且数据将被同步排列,这时不会发生队列更替的现象。如果收到一个comma且队列需要重排时,数据则会被重新排列,并在接收端给出指示信息,此时,收发器会连续检测数据,寻找10比特预编码字符。如果将comma检测旁路掉,数据将不会在任何模式下重排。

可编程选项允许用户以comma+、comma-、comma+与comma-混合或用户自定义的序列来排列数据。此外,接收器也允许更改RXP和RXN上差分信号的极性,在PCB电路设计极性颠倒的情况下非常有用。

(1)接收终端

接收机提供了片上的接收终端,可配置为50欧姆或75欧姆,默认为50欧姆。

(2)8B/10B解码器

8B/10B解码器是和编码器配对出现的,如果发送端存在编码器,则接收端也必须具备该模块,不能旁路。

5)环回器

为了便于测试Rocket I/O,提供了两类可编程的环回器,它们无需在外部添加吉比特的数据端和测试终端。

一种方法是串行环回,将吉比特发送端的数据直接送到吉比特接收端,可以验证Rocket I/O模块发送端和接收端的完整性,该环回路径在发送端的输出端口上。

另一类是并行环回,用于检查整个传输电路的正确性。当使能并行环回时,串行环回的功能将失效。但是发送端的输出仍然保持有效,且可将数据通过链路发送出去,如果将TXINHIBIT拉高,则TXP将被强制为0直到TXINHIBIT重新拉低为止。

6)弹性传送缓冲器

(1)接收缓冲器

接收缓冲器为深度64、位宽13比特的FIFO,写时钟为恢复时钟RXRECCLK,读时钟为RXUSRCLK,其作用有两个:一是用来调节读、写时钟的相位差和频率差;另一个是支持通路绑定,允许将接收流重组,以便被多个收发器读取。此外,接收缓冲器是一个弹性缓冲,其―弹性‖特征指的是,可以修正其读取指针。

当然,接收缓冲器可以被旁路掉,其控制属性为:

RX_BUFFER_USE = FALSE

在该模式下,不能完成时钟校正和通路绑定,RXUSRCLK必须由RXRECCLK直接产生,但由于布线等因素,二者的相位是无法预测的,无法保证接收端可靠地接收数据。因此,一般不允许将该缓冲器旁路。

(2)接收端时钟校正器

在发送端,每隔一定的包长都会插入一些特定的修正字符,在接收端这些字符仅用来实现时钟校正,然后就会被丢掉。恢复时钟RXRECCLK的频率反映了到来数据的速率,时钟RXUSRCLK定义了FPGA接收数据的速率,在理想情况下,二者应当是同步的,即频率和相位都一致。但由于在实际中,它们来自不同的时钟源,属于异步时钟,再加上抖动,因此频率、相位上肯定存在一定的偏差,二者需要通过接收缓冲来调节。常见的异步时钟情况如图10-11所示。

(a) 理想情况下(读时钟=写时钟)缓冲器半满示意图

(b) 读时钟>写时钟时,缓冲器少于半满示意图

(c) 读时钟<写时钟时,缓冲器多于半满示意图

图10-11 不同读写时钟模式下缓冲器状态示意图

其中,(a)是理想情况,弹性缓冲器的读时钟RXUSRCLK和写时钟RXRECCLK保持同步,缓冲器处于半满状态;当没有接收到有效数据时,接收数据将插入空闲(Idle)字符以及其余无效数据。(b)情况下读时钟快于写时钟,缓冲器将出现读空的状态,为了避免这个后果,需要进行一些重复读取或空读的操作,调整读数数据指针,对时钟完成降低校正;如果字节序列长度大于1,且属性

CLK_COR_REPEAT_WAIT为0,则接收端会重复读取相同的内容,一直到缓冲器的长度达到理想的

半长。(c)情况下,读时钟慢于写时钟,缓冲器将出现溢出的状态,为避免该后果,需要丢掉一些数据,调整数据指针,对时钟完成加快校正;当CLK_COR_REPEAT_WAIT为1时,接收端会跳过两个连续的、可删除的字节序列来清空缓冲器。因此,时钟校正器总是保持缓冲器处于半满状态。

以上操作要求时钟校正逻辑能够识别那些需要重复和删除的字节序列,这些冗余序列都是在发送端插入的。此外,时钟校正和振荡器的频率、关系很大,因此晶振的精度一般应该在50ppm以内。

(3)通道绑定

通道绑定是指将多个串行通道组合在一起构成一个并行通道,以此来提高收发的数据吞吐率。由于每个通道在收发器互连时钟再生和数据接收延迟上各不相同,会使接收到的数据产生―错位‖的情况,因此要在发送端数据流中加入一个特殊的序列——通道绑定序列,如图10-12中的―P字符‖。每个绑定通道都设定―P字符‖为通道绑定序列,在接收端指定一个通道为主通道,其余通道都依据主通道的CHBONDO有效指示进入绑定状态,进而锁定本通道在Elastic Buffer中接收到通道绑定序列的位置。由弹性缓冲向内部逻辑电路输出数据时,所有经过绑定的通道都以绑定序列指定的弹性缓冲中的偏移位置进行对齐输出。通道绑定完成后,为了使绑定维持在稳定状态,各通道收发器也要以主通道收发器为基准进行时钟修正操作。

在实现时,FPGA的布线原则是使绑定指示信号在模块间传输的延迟尽量小,尽量使两个互连模块间的连线不要穿越整个芯片。在FPGA布线时要对绑定指示互连线设置严格的时延约束参数。

典型的通道绑定的示意图如图10-12所示,左边为原始数据,右边为经过通道绑定的数据示意图。

图10-12 通道绑定原理图

(4)发送缓冲期

发送缓冲器为深度4、位宽20比特的FIFO,写时钟为恢复时钟TXUSRCLK,读时钟为收发器的参考时钟,其作用是用来调整读、写时钟之间的相位差,完成发送端时钟校正。

发送缓冲器也可以被旁路掉,其控制属性为:

TX_BUFFER_USE = FALSE

在该模式下,不能完成时钟校正和通路绑定,TXUSRCLK和REFCLK的相位是无法预测的,无法保证发送端可靠发送数据。因此,一般不允许将该缓冲器旁路。

7)CRC校验模块

Rocket I/O收发器支持固定的32比特CRC校验算法,其编码公式为:

该算法可支持Infiniband、光纤信道以及吉比特以太网等传输协议。在发送端,CRC逻辑识别出CRC校验字节应添加的位置,统计包头和包尾,并在数据包尾上添加四个计算出的CRC占位符,因此需要在发送缓冲器预留4字节的CRC码空间。在接收端,CRC完成CRC值的校验。同样,CRC逻辑也支持用户模式,以用户定义的包头和包尾来定义简易数据包。

8)配置模块

下面列出可通过配置选择或控制的功能,Xilinx实现软件工具支持16个收发原语,其简要说明如表10-1所列。

表10-1 Rocket I/O可配置的原语说明

以上的每个原语都有其默认值,都允许允许修改,原语的使用方法见3.4节,详细地参数说明和更多的细节可参照文献[1]。

9)复位模块

Rocket I/O模块的复位引脚分为发送复位和接收复位两部分。由于DCM在输出时钟锁定之前处于不