Aurora 协议学习理解与应用——Aurora 8B10B协议学习

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

Aurora 8B10B协议学习之一,理解协议


概述

Aurora 8B/10B 协议描述了通过 Aurora 8B/10B Channel传输用户数据。一个 Aurora 8B/10B Channel由一个或多个 Aurora 8B/10B lanes组成。每个 Aurora 8B/10B lane都是全双工串行数据连接。通信的双方称为Partners。与其他例如SRIO称为Master和Slave不同,这里Partners说明双方是对等的关系。

Aurora 8B/10B 协议接口通过用户接口与用户应用程序传输数据和控制。用户接口不在协议的规定范围内,可选用任一种接口。

用户应用和Aurora 8B/10B 接口之间的数据流包含user protocol data units (user PDUs)和user flow control,用户PDU可以是任意长度,它的格式不在协议定义范围内。有2种流控PDU在协议中进行了定义。

8B10B数据发送和接收

Symbol-Pairs

通过Aurora 8B/10B channel传输的最小信息单元是2个字符(symbols),叫做Symbol-Pairs。信息总是由多个字符对组成的。

传输调度

有6种数据通过Aurora 8B/10B channel进行传输:

1、时钟补偿序列:用于防止Partner时间的的时钟速率差异而导致接收器溢出的控制符号序列。

2、初始化序列:四个有序集作为空闲序列来使用,为初始化期间的数据传输准备 Aurora 8B/10B 通道。

3、自然流量控制PDU:由 Aurora 8B/10B 接口生成并解释的链路层流量控制 PDU

4、用户流量控制PDU:流量控制消息由用户应用程序生成和解释,并封装成用户流量控制 PDU 来传输。

5、通道PDU(Channel PDUs):用户数据PDU

6、空闲序列:没有数据发送的时候发送的控制符号序列。

这六种序列的优先级如下:

当发送器正在处理流量控制请求时,数据类型优先级应该改变。在自然流量控制倒计时或用户流量控制倒计时期间,空闲序列比通道 PDU 具有更高的优先级。由于当没有更高优先级的数据类型可用时总是传输空闲序列,因此这种优先级的转变有效地阻止了帧传输,直到流量控制倒计时完成。

用户PDU传输过程

用户PDU的传输要求如下流程:

1、填充(Padding)

2、使用通道 PDU 分隔符进行封装

3、8B10B编码通道PDU载荷

4、串化和时钟编码

1、填充

Aurora 8B/10B通道要求传输内容是偶数个字符组成,用户PDU如果是奇数个需要填充一个字节,填充字节为0x9C.

2、链路层封装

用户 PDU 用控制符号序列(称为有序集)封装,以产生完整的信道 PDU。这些有序集划分了串行数据流内通道 PDU 的开始和结束。 Aurora 8B/10B 协议使用 /SCP/ (/K28.2/K27.7/) 有序集来标记通道 PDU 的开始,并使用 /ECP/ (/K29.7/K30.7/) 有序集标记通道 PDU 的结束。

3、8B10B编码

高速收发器包含该功能

4、串行化和时钟编码

高速收发器包含该功能

用户PDU接收过程

用户PDU的接收有如下流程:

1、解串

2、8B10B解码

3、链路层剥离

4、填充位剥离

1、解串

高速收发器包含该功能

2、8B10B解码

高速收发器包含该功能

3、链路层剥离

链路层剥离过程移除信道 PDU 封装以及传输期间可能插入的任何嵌入的空闲有序集。

通道 PDU 封装的移除包括用于标记通道 PDU 开始的 /SCP/ (/K28.2/K27.7/) 有序集,以及用于标记通道 PDU 结束的 /ECP/ (/K29.7/K30.7/) 有序集。

删除空闲有序集涉及删除 /K/ (/K28.5/)、/R/ (/K28.0/) 和 /A/ (/K28.3/) 符号。任意数量的这些符号可以出现在通道 PDU 中的任何位置,但具有以下限制:

(1)必须插入偶数个空闲符号

(2)空闲序列的开始必须在通道 PDU 中的偶数个符号之后开始

4、填充剥离

如果在 8B/10B 解码过程中检测到 /P/ (/K28.4/) 控制符号后跟 /ECP/ (/K29.7/K30.7/),这是传输过程为了满足信道对齐要求而添加的字节(传输要偶数个字节)。该八位字节在解码后值为 0x9C,应在将其传递给用户应用程序之前从数据流的末尾剥离。

流控

本章介绍 Aurora 8B/10B 协议支持的可选流量控制机制。这些机制提供低延迟流量控制,以防止由于通道双方之间的数据来源和接收速率差异而导致数据丢失。由于流量控制 PDU 可以嵌入通道 PDU 中,延迟得以最小化。

Aurora 8B/10B协议支持以下两种流控机制:

Native Flow Control:自然流量控制,NFC。由Aurora 8B/10B 接口的接收端自行调整链路的接收速率。

User Flow Control:该机制可用于在任意层实现用户定义的流量控制方案。用户流控制消息由用户应用程序生成并解释。Aurora 8B/10B 接口将这些消息封装到用户流控制 PDU 中,并为其跨通道传输提供低延迟机制。

自然流量控制 PDU 通常在接收方的弹性缓冲器耗尽时生成 。请注意,这些 PDU 必须足够早地生成,以便它们发出的时间和流量停止之间的延迟不会导致弹性存储溢出。

用户流控制消息通过 Aurora 8B/10B 通道从一个用户应用程序转发到另一个用户应用程序,并且不会由任一 Aurora 8B/10B 接口解释。

(这两种流控相当于一种是被动流控,一种是主动流控)

关于流量控制机制需要注意的一些事项:

1、自然流量控制的断言不会阻塞用户流控PDU的转发

2、用户流量控制 PDU 一旦开始传输,就不能被任何其他序列中断

自然流量控制操作

RX 自然流量控制状态机监视 RX FIFO 的状态,并在存在 RX FIFO 溢出风险时生成自然流量控制 PDU。这些 PDU 请求通道Partner将用户 PDU 的传输 暂停指定的符号次数。如何定义 RX FIFO 的状态用于进行自然流控的算法与实现有关,不在协议规定的范围。
TX 自然流量控制状态机通过在请求的时间间隔内暂停用户 PDU 的传输来响应来自通道partner的自然流量控制 PDU。请注意,除了空闲序列之外,暂停还可以包括自然流量控制 PDU 或用户流量控制 PDU 的传输,因为这些 PDU 都不存储在 RX FIFO 中。

如果 Aurora 8B/10B 接口正在传输用户 PDU,则 TX 本机流控制状态机可以通过两种方式之一响应本机流控制 PDU。

Completion Mode:完成模式,完成模式只允许在用户PDU之间插入空闲字符

Immediate Mode:立即模式,立即模式允许在数据帧内插入空闲字符。

所有 Aurora 8B/10B 协议实现如果支持流量控制,则必须能够支持任一行为。操作模式必须是可编程的,但本规范没有定义如何选择操作模式。

自然流量控制延迟

当在立即模式下运行时,双方的最大往返延迟被定义,用于限制用户 RX FIFO 的深度。通道引入的延迟并不包含在此定义中,但在为特定通道设计用户 RX FIFO 时也必须考虑在内。

自然流控控制PDU请求的往返延迟不得超过 256 个符号时间。

自然流量控制PDU格式

一共2个字节长度。第一个字节是SNF(start of native flow control),第二个字节是命令字节。命令字节包含 PAUSE 字段,该字段指定空闲字符必须发送的时钟周期数,以响应通道Partner的 PDU。

在同一周期传输的所有自然流控 PDU 必须携带相同的 PAUSE 代码和 XOFF 位设置。当多个本机流控制 PDU 在同一时钟周期到达时,接收器必须仅处理一个 PDU,并选择其中任何一个 PDU 进行处理。

用户流量控制操作

一旦开始传输,用户流控制 PDU 就不会被时钟补偿序列、本机流控制 PDU 或空闲序列中断。 Aurora 8B/10B 协议实现可能需要缓冲用户流控制 PDU,以确保它们不被中断,并满足时钟补偿规则。任何缓冲方案均取决于实现,并且在本规范中未定义。

用户流量控制格式

用户流量控制 PDU 的长度为 4 到 18 个字节。第字节是 SUF(用户流控制开始)字符,后面跟着一个称为命令字节的数据字符。该命令字节后面紧跟着来自用户应用程序的 2 到 16 个字节的流量控制消息。

注意:/K28.4/ 符号用于通道 PDU 的 SUF 字符和填充字符。然而,填充字符后面只能跟控制字符,而不能跟数据字符。这区分了用作填充字符的 /K28.4/ 和用于标记用户流控制 PDU 开始的 /K28.4/

用户流量控制消息的长度在SIZE字段中指定。用户流量控制消息大小可以是 2 到 16 之间的任意偶数个字节

初始化和错误处理

Aurora 8B/10B 通道的初始化是一个三阶段过程。这些阶段是:

Lane Initialization:此过程在每个通道上单独执行,以激活链路并将接收到的数据对齐到正确的边界。

Channel Bonding:此过程将各个lane绑定到单个数据通道中。如果实现的功能仅使用单个链路,则不需要通道绑定并且将被绕过。通道绑定消除了各种来源引入的偏差,包括走线长度、连接器和 IC 变化。

Channel Verification:此过程执行将接收到的数据映射到用户接口所需的任何对齐,并验证通道传输有效数据的能力。

在channel verification,期间,所有lane必须准备好通过channel接收数据。当Aurora 8B/10B接口完成channel verification后,可以立即开始传输数据。

8B10B链路初始化

各个lane初始化过程在复位或通道故障时将每个通道收发器与其Partner同步。通道故障定义为以下任一条件:

1、通道数据错误过多

2、过度违反协议规定

8B10B通道绑定

通道绑定过程对齐每个通道接收的所有数据。在每个通道完成通道初始化过程之前,通道绑定无法开始。

通道绑定分两个阶段进行。第一阶段对应于图 4-3 中的状态 CB0,由收发器特定的数据对齐组成。第二阶段对应于状态CB1,验证收发器是否已正确对准并同时传送/I/有序集内的/A/有序集。

8B10B通道验证

通道验证过程用于跨用户接口对齐数据,并验证通道完整性。它本质上包括在每个方向的所有通道上发送通道验证序列。使用这种已知的数据模式,接收通道partner可以在用户接口上正确对齐数据,并验证通道完整性。该过程的示意图如图

验证序列由以下模式组成:60 个 /I/ 符号,后跟四个符号 /V/ 有序集

当所有通道接收器已从其通道Partner接收到第三个/V/有序集时,接收器的通道接收器部分(如果尚未启用)必须启用以防止数据丢失。

8B10B错误处理

在正常传输数据的过程中,通道有可能出现故障。必须单独监控所有通道是否有错误。在串行收发器正确地对数据进行字节对齐之前,会在输出上看到许多错误。因此,重要的是,在通道稳定之前,不会激活任何错误检测电路。当 K 计数器达到 3 时,即达到该稳定点。一旦 K 计数器达到 3,所有错误检测电路均应激活

有两种类型的错误:硬错误和软错误。

在以下情况下会发生硬错误:

• 发送或接收弹性缓冲区中存在上溢/下溢

• 软错误太多,请参阅下图

• Partner复位,收到了初始序列

• 与Partner之间的物理连接断开

硬错误被视为灾难性错误,之后应立即重新初始化通道。发生硬错误时接收到的任何数据单元都会被损坏,应被丢弃。

软错误通常是由于通道上的瞬时位错误造成的。软错误不一定需要重置通道。 Aurora 8B/10B 协议没有显式的数据错误检查;由软错误引起的数据错误应通过用户的错误处理能力来检测和纠正。软错误的示例包括:

• 极性错误

• 符号错误

在多 Gbps 系统中,对于通道完整性较差的系统,误码的发生时间可能为几分钟,而对于通道完整性良好的系统,误码的发生时间可能为数天或数年。因此,Aurora 8B/10B 接口必须实现软错误监控逻辑,以验证持续的通道完整性。该逻辑由软错误计数器和每个通道的相关控制逻辑组成。下图说明了软错误监控逻辑所需的行为

Aurora 8B/10B Ordered Sets

Idle Sequence

空闲有序集(idle)用于在初始化期间执行字边界对齐和通道绑定。在操作期间,空闲用于指示没有数据。空闲插入发生在等待状态期间以及通道 PDU 之间。空闲有序集由三个代码组组成:/A/、/K/和/R/。 /K/ 和 /R/ 代码组必须以伪随机序列(在 /A/ 代码组之间)应用,以通过不产生离散频谱来降低 EMI。适用以下条件:

1、/A/ 间距随机化,任意两个 /A/ 代码组之间至少有 16 个代码组,但不超过 32 个代码组。

2、/K/s 和 /R/s 以随机方式放置在 /A/s 之间。

3、最小传输模式是一个符号对。只要遵守前面两条规则,就可以发送这三个字符中的任何一个。如果发送/A/,则仍必须遵守间距规则。

4、对于多通道通道,必须需要空闲的所有通道上同时传输相同的空闲符号对。

5、不产生离散频谱

一个空闲序列的例子:

用于产生空闲序列的逻辑实现方法:

时钟补偿

Aurora 8B/10B 协议为发送器和接收器之间的时钟速率差异提供了补偿机制。这种机制称为时钟补偿,可以适应发送器和接收器之间高达 ± 100 ppm 的时钟速率差异。 Aurora 8B/10B协议通过周期性地将时钟补偿序列插入到空闲模式或用户数据中来实现时钟补偿。时钟补偿序列不应插入到用户流控制 PDU 中。

时钟补偿序列由时钟补偿有序集/CC/的六个副本 组成。即使有 PDU 或其他代码组可供传输,时钟补偿序列也应至少每 10,000 个代码组传输一次。对于多通道通道,完整的时钟补偿序列在组成通道的每个通道上同时传输。

单条lane的传输规则

单通道通道在每个方向上都有一个差分对。单通道通道应进行编码,并按照从上层接收字符的顺序,通过差分对传输从上层接收到的控制有序集和 PDU 的字符流。当上层没有控制命令集和 PDU 传输时,空闲序列应被馈送到编码器的输入以进行编码和传输。

接收时,代码组流被解码并传递到上层。图中需要注意的主要特征是:

1、第一个示例显示如何填充具有奇数个有效负载字节的通道 PDU 以保持 /ECP/ 符号的对齐

2、第三个示例显示了被时钟补偿序列和空闲序列中断的通道 PDU

Multi-Lane Striping and Transmission Rules

Aurora 8B/10B 协议定义了跨由任意数量通道组成的通道的用户数据条带化(striping)和控制有序集。条带化(striping)方案平衡了通道效率和实施简单性.

条带化在多个通道上分配符号对。条带化是用于在多通道通道的所有 n 个通道上同时发送数据的方法。例如,第一个符号对被条带化到通道 0,第二个符号对被条带化到通道 1,第 n 个符号对被条带化到通道 n-1。第 n+1 个符号对被条带化到通道 0 上。

唯一的特殊要求如下:

• 符号对/SCP/、/ECP/、/SNF/、/SUF/ 中的各个符号不得在通道之间分割,但可以在任何通道上发送和接收
• 传输/I/ 序列时,必须在需要/I/ 序列的通道中的每个通道上传输相同的数据模式

电气特性

(略)

相关推荐
fei_sun8 小时前
【Verilog】第一章作业
fpga开发·verilog
深圳市雷龙发展有限公司longsto8 小时前
基于FPGA(现场可编程门阵列)的SD NAND图片显示系统是一个复杂的项目,它涉及硬件设计、FPGA编程、SD卡接口、NAND闪存控制以及图像显示等多个方面
fpga开发
9527华安13 小时前
FPGA实现PCIE3.0视频采集转10G万兆UDP网络输出,基于XDMA+GTH架构,提供工程源码和技术支持
网络·fpga开发·udp·音视频·xdma·pcie3.0·万兆网
able陈13 小时前
为什么verilog中递归函数需要定义为automatic?
fpga开发
fei_sun14 小时前
【Verilog】第二章作业
fpga开发·verilog
碎碎思14 小时前
如何使用 Vivado 从源码构建 Infinite-ISP FPGA 项目
fpga开发·接口隔离原则
江山如画,佳人北望16 小时前
fpga-状态机的设计及应用
fpga开发
晓晓暮雨潇潇18 小时前
Xilinx IP核(3)XADC IP核
fpga开发·vivado·xadc·ip核
CWNULT18 小时前
AMD(Xilinx) FPGA配置Flash大小选择
fpga开发
碎碎思1 天前
很能体现FPGA硬件思维的一道面试题
fpga开发