赞
踩
版权声明:本文为CSDN博主「孤独的单刀」的原创文章,原文链接:https://blog.csdn.net/wuzhikaidetb/article/details/123723408
本文主要参考Xilinx《SP002–Aurora 8B/10B Protocol Specification》。
系列汇总:一天上手Aurora 8B/10B IP核----汇总篇(直达链接)
Aurora 8B/10B协议是一个用于在点对点串行链路间移动数据的可扩展轻量级链路层协议(由Xilinx开发提供)。该协议即允许独立运行,而可以在其物理层的基础上运行诸如Ethernet和TCP/IP等协议,或其他自定协议,这无疑为应用提供了非常大的灵活性和可扩展性。
Aurora 8B/10B协议定义了以下内容:
Aurora 8B/10B协议没有定义的内容:
下图是典型的基于Aurora 8B/10B协议的全双工串行通信流程图。参与通讯的两个设备被称为通道伙伴(channel partners,自己翻译的,可能不恰当),用户通过用户接口与Aurora接口通信,其传输的内容可以是用户数据(user PDUs),也可能是用户流控进行。Aurora接口之间可能存在一条路径(lane)或者多条路径进行串行数据的传输。
相对于其他高速串行协议,Aurora 8B/10B协议算是一个简洁的协议,该协议更多是定义了链路层与物理层的内容,使得封装较为底层。
用户数据的发送可分为如下4个阶段:
用户数据的接收实际上就是发送的逆过程,同样可分为如下4个阶段:
尽管在通信双方(TX方和TX方)都具备FIFO来进行数据缓存,但由于通信双方速率的差异,还是存在可能性使得FIFO满而导致的数据丢失,为了防止这种情况,Aurora 8B/10B协议引入了流控机制。
**为什么需要流量控制?**双方在通信的时候,发送方的速率与接收方的速率是不一定相等,如果发送方的发送速率太快,会导致接收方处理不过来,这时候接收方只能把处理不过来的数据存在缓存区里(失序的数据包也会被存放在缓存区里)。如果缓存区满了发送方还在疯狂着发送数据,接收方只能把收到的数据包丢掉,大量的丢包会极大着浪费网络资源,因此,我们需要控制发送方的发送速率,让接收方与发送方处于一种动态平衡才好。对发送方发送速率的控制,我们称之为流量控制。
目前支持的流控机制有以下两种:Native Flow Control(本地流控);User Flow Control(用户流控)。
从下图我们可以看出来流控是如何操作的。
本地流控操作:
RX状态机监控用于RX FIFO的数据量,一旦其具备溢出风险时,即生成流控数据,用以代替用户数据。TX方接收到这些流控数据后,会根据数据内容暂停一段时间的发送,以便RX方有充足的时间处理数据。
本地流控数据的格式如下:首字节为SNF符号(start of native flow control);第二个字节的前4bit表示需要暂停的间隔(以传输单个symbol为单位),后4个bit保留。
用户流控操作:
用户流控操作实际上与用户传递数据类似,区别在于其传递的为流控信息,此种流控方式的主动权掌控在发送方手中。本质上是用户需要进行流控时,不暂停发送,而直接发送流控信息(流控信息实际上就是无效信息)。
用户流控数据的格式如下:首字节为SUF符号(start of user flow control);第二个字节的前3bit表示后面的流控信息的字节长度,后5个bit保留;后面跟符合前面定义长度的流控字节。
在使用Aurora通道进行数据收发之前,需要进行准备–初始化。 初始化的进行分为3个阶段:
在复位或通道故障时,单个通道初始化过程将每个通道收发器与它的通道伙伴同步。信道故障定义为以下任一情况:
通道绑定将会将每条lane接收的数据对齐。通道绑定需要所有的lane都完成初始化后才开始,如下:
通道验证过程用于在用户界面上对齐数据,并验证通道完整性。它本质上包括在每个方向上的所有通道上发送信道验证序列。使用这个已知的数据模式,接收通道伙伴可以在用户界面上正确地对齐数据,并验证通道的完整性。流程如下:
协议定义了两种数据收发的错误,分别是硬错误(物理层面的错误)和软错误(解析或帧格式方面的错误)
硬错误:
软错误:
Aurora 8B/10B协议是一个建立在GT收发器的高速串行物理通信协议,所以其基本架构实际上是GT收发器的架构,可分为两个部分:
8B/10B,也叫做8比特/10比特或8b10b。8b/10b方式最初由IBM公司于1983年发明并应用于ESCON(200M互连系统),由Al Widmer和Peter Franaszek在IBM的刊物“研究与开发”上描述。
8b/10b编码的特性之一是保证DC 平衡,采用8b/10b编码方式,可使得发送的“0”、“1”数量保持基本一致,连续的“1”或“0”不超过5位,即每5个连续的“1”或“0”后必须插入一位“0”或“1”,从而保证信号DC平衡,它就是说,在链路超时时不致发生DC失调。通过8b/10b编码,可以保证传输的数据串在接收端能够被正确复原,除此之外,利用一些特殊的代码( 在PCI-Express总线中为K码) ,可以帮助接收端进行还原的工作,并且可以在早期发现数据位的传输错误,抑制错误继续发生。
8b/10b编码是将一组连续的8位数据分解成两组数据,一组3位,一组5位,经过编码后分别成为一组4位的代码和一组6位的代码,从而组成一组10位的数据发送出去。相反,解码是将1组10位的输入数据经过变换得到8位数据位。数据值可以统一的表示为DX.Y或KX.Y,其中D表示为数据代码,K表示为特殊的命令代码,X表示输入的原始数据的低5位EDCBA,Y 表示输入的原始数据的高3位HGF。
8b/10b编码是目前许多高速串行总线采用的编码机制,如 USB3.0、1394b、Serial ATA、PCI Express、Infini-band、Fibre Channel(光纤通道)、RapidIO等总线或网络等。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。