Aurora 8b/10b协议(高速收发器十五)

news2024/11/26 15:50:46

  点击进入高速收发器系列文章导航界面


  前面几篇文章通过自定义PHY协议去实现高速收发器收发数据,一帧数据包括帧头、数据、帧尾等信息,在空闲的时候发送FLSR伪随机序列降低电磁干扰,并且每隔固定空闲时间发送一次逗号,用于接收端字节对齐和时钟纠正。在接收端需要用户自己完成字对齐。

  xilinx官方其实提供了一个Aurora 8B/10B的IP,该IP本质就是对GTX进行封装,在其基础上完成组帧和拆包。并且该IP多了一个流控的处理方式,当接收端处理数据的速度低于发送端发送速度时,接收端可以通过一些指令让发送端暂停发送数据来防止接收端数据溢出。另一方面发送端可以把一些高优先级的数据立即发送给接收端。这两个功能是自定义PHY协议时所没有考虑的。

  Aurora 8B/10B IP开放给用户的功能极其简单,用户只需要以固定时序接收、发送数据即可,Aurora 8B/10B IP内部回自己组帧,会把数据进行字对齐之后再输出给用户。缺点是用户不能控制其组帧的格式之类的。

  本文讲解Aurora 8B/10B协议的一些规则,参考文档为Sp002,下一篇文章讲解xilinx的Aurora 8B/10B IP知识。

1、用户协议数据单元(user protocol data units)

  Aurora 8B/10B协议是一种可扩展的轻量级链路层协议,可用于在一条或多条高速串行通道上点对点传输数据。

  Aurora 8B/10B协议接口通过用户界面向用户应用程序传输数据和控制。该协议的数据传输方式如下图所示,左右两部分可以看成是两个高速收发器设备,该IP支持多通道的高速收发器。

在这里插入图片描述

图1 aurora 8b/10b通道概述

  其中用户与IP之间可以传输两种数据,一种是用户的发送或者接收的数据,称为用户PDU。另一种是用于控制发送数据速率的指令(简称流控),称为用户流量控制(User Flow Control Messages)。

  Aurora 8B/10B协议发送数据的流程如下所示,需要经过Padding、组帧、8B/10B编码、串行化等几个过程。

在这里插入图片描述

图2 发送数据流程

  Padding:因为Aurora 8B/10B信道传输的最小信息单位是两个字节,因此首先需要检测用户待发送数据字节数为奇数还是偶数。如果是奇数,则在用户待发送数据后面补充一个值为0x9C(K28.4)的K码Pad数据。

  组帧:就是在开始发送数据前发送2字节的起始码SCP(值分别为K28.2、K27.7),在帧尾发送两字节停止位ECP(值分别为K29.7、K30.7)。

  8B/10B编码:在传输之前,通过高速收发器的PCS中的8B/10B进行编码,用于填充数据的Pad被编码为控制字符,其余被编码为数据字符。编码后的数据被串行化,以差分不归零(NRZ)格式传输。

  Aurora 8B/10B协议接收数据的流程如下所示,包含串并转换、8B/10B解码、去除帧头帧尾和空闲字符、去除Pad等几个阶段。

在这里插入图片描述

图3 接收流程

  串并转换:串行数据流以差分NRZ格式接收,将该数据反序列化为10位数据和控制符号。

  8B/10B解码:串并转换后,链路层有效负载被解码为八位字节流。在解码过程中,必须把停止位ECP之前的填充字符Pad标记,便于后续去除。

  去除链路层:把解码后用户数据流中的起始位SCP、停止位ECP、空闲字符去除,空闲字符可能是通过流控操作发送端插入的。空闲序列必须在偶数字节用户数据之后开始插入,并且插入偶数个空闲字符。

  去除Pad:最后去除填充的Pad字符0x9C(K28.4),之后把得到的数据传输给用户。

2、流控(Flow Control)

  Aurora 8B/10B协议除了常规的用户数据收发,主要特点是支持可选的流量控制机制和多通道绑定机制。可选的流量控制机制提供了低延迟流量控制,防止因为发送速率和接收速率不同导致的数据丢失。

  Aurora 8B/10B协议支持User Flow Control(UFC)和Native Flow Control(NFC)两种流量控制机制,相关的流量控制方案如下图所示,下文将对这两种机制进行详细讲解。

在这里插入图片描述

图4 流量控制框图

2.1、用户流量控制(UFC)

  这个接口主要用于传输一些高优先级的数据,将UFC数据插入到用户待发送数据(UPDU)中,优先传输,一般用来传输比较重要的控制信息。下图是UFC数据的流向图,均是单向传输。

在这里插入图片描述

图5 UFC传输路径

  UFC开始传输后不能被时钟补偿序列、NFC或空闲序列中断。因为UFC会中断用户数据的发送,因此Aurora 8B/10B协议实现可能需要将用户待发送数据暂存,防止数据丢失。

  UFC的数据格式如下图所示,长度为4到18个字节,第一个字节是用户流控制开始字符(SUF),是一个K码,值为K28.4。

  第二个字节称为命令字节的数据字符,之后紧跟着发送用户需要传输的高优先级数据,数据长度为2到16个字节。

在这里插入图片描述

图6 UFC数据格式

  注意K28.4可以用于SUF和填充,区别在于填充字符后面只能跟一个控制字符,不能跟一个数据字符。

  UFC消息的长度为SIZE取值乘2加2,即SIZE*2+2。因为SIZE长度只有三位,因此UFC消息大小可以是2到16之间的任意偶数字节。

2.2、本地流量控制(NFC)

  本地流量控制(Native Flow Control,简称NFC)是一种链路层流量控制机制,由Aurora 8B/10B接口生成并解释,而UFC是上层实现的机制。

  NFC的机制其实比较简单,如下图所示,高速收发器A通过蓝色走线向高速收发器B传输数据。由于双方的速率可能并不一致,导致高速收发器B的用户接收FIFO快溢出了,此时高速收发器B会生成NFC消息,然后通过发送端口传输给高速收发器A的接收端。

  高速收发器A解析NFC消息之后,可能会暂停发送用户数据(蓝线暂停),而是发送空闲数据(黄线发送),接收端接收空闲数据会直接丢弃,不会存入接收FIFO,通过上述机制来防止接收FIF溢出。

在这里插入图片描述

图7 NFC传输机制

  注意NFC的优先级低于UFC,这是因为发送的UFC消息也不会存入接收端的FIFO中,即UFC的传输对接收端的FIFO溢出没有影响。

  高速收发器A的发送端通过在请求的时间间隔内暂停发送用户数据,来响应接收端的NFC控制。这段时间除了可以发送空闲序列之外,暂停还可以传输UFC和NFC数据,因为这些都没有存储在接收端的FIFO中。

  发送端暂停的时间与接收端通过NFC传输的数据有关,NFC的数据格式如下图所示,长度为两字节。第一个字节是本地流控制开始字符(SNF),第二个字节是数据字符,称为命令字节。

在这里插入图片描述

图8 NFC数据格式

  命令字节包含暂停字段,该字段指定发送空闲字符的时钟周期数,下表显示了暂停字段的编码。

表1 NFC暂停字段编码
PAUSE暂停间隔(符号)
00000(XON)
00012
00104
00118
010016
010132
011064
0111128
1000256
1001~1110保留
1111无限(XOFF)

  当发送端口收到接收端的NFC数据时,如果Aurora 8B/10B接口正在发送用户数据,发送端可以通过完成模式或立即模式两种方式之一响应NFC。

  完成模式需要等待用户这一帧数据发送完成之后才执行暂停的时间,而立即模式可以直接中断用户当前数据的发送,直接暂停规定时间,一般会采用立即模式吧。

  通过上面分析可知,NFC与用户收发数据的关系不大,是在Aurora 8B/10B协议内部完成的。可能有点影响的是暂停时间设置多大合适,要考虑接收端与发送端传输的延迟,不能发送端接收到NFC时,接收端的FIFO就已经溢出了。

3、初始化和错误处理

  下文介绍准备Aurora 8B/10B通道以进行数据传输和接收所需的初始化程序,Aurora 8B/10B通道的初始化分为三个阶段,即通道初始化、通道绑定、通道验证。

  这部分内容大多直接翻译手册,用户只需要了解即可,知道有这些东西,对于具体实现方式不需要关注太多。

  通道初始化:在每个通道上单独执行,以激活数据传输的链路并将接收到的数据与正确的边界对齐(字节对齐)。

  通道绑定:将多个通道绑定为一个数据通道。如果仅使用单条链路,则不需要通道绑定,通道绑定将被绕过。通道绑定消除了各种来源引起的偏斜,包括PCB走线长度、连接器和IC变化。

  通道验证:将接收到的数据映射到用户界面所需的任何校准,并验证通道传输有效数据的能力。

  下图说明了这三个阶段是如何相互关联的,在通道验证期间,所有通道必须准备好接收数据。当Aurora 8B/10B接口完成通道验证时,可以立即开始传输数据。

在这里插入图片描述

图9 初始化概述

  复位或通道故障时,独立通道初始化程序会使每个通道收发器与接收器同步。通道传输的数据错误过多或者违反协议都会造成通道故障。

  下图显示了通道初始化程序的状态图,其中/SP/表示同步和极性、/K/表示逗号,/SPA/表示同步和极性应答。

在这里插入图片描述

图10 通道初始化程序

  下图是该协议中一些K码的含义。

在这里插入图片描述

图11 Aurora 8B/10B有序集

  注意D21.5是D10.2的倒数,而D19.6是D12.1的倒数。

  通道绑定过程会对齐每个通道接收的所有数据,下图显示了通道绑定程序的状态图。

在这里插入图片描述

图12 通道绑定流程

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

  通道验证用于在用户界面上对齐数据,并验证通道完整性,实质包括在每个方向的所有通道上发送通道验证序列。

在这里插入图片描述

图13 通道验证

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

  在正常的数据传输过程中,通道可能会出现故障。在串行收发器正确字节对齐数据之前,输出端会出现许多错误。因此,在通道稳定之前不激活任何错误检测电路。

  一旦K计数器达到3,所有错误检测电路都应被激活,一般有硬错误和软错误的两种类型错误。

  当发送或接收弹性buffer上溢或下溢、软错误太多,接收或者发送放复位、接收和发送端断开物理连接则被认为是硬错误,硬错误一般都需要进行复位处理。

  软错误通常是由通道上的瞬时位错误引起的,软错误不一定需要复位通道。Aurora 8B/10B协议不进行显式数据错误检查,应该通过用户的错误处理能力来检测和纠正由软错误引起的数据错误。

  在高速系统中,对于信道完整性较差的系统,误差可能在几分钟内发生,对于信道完整性较好的系统,可能在几天或几年内发生。

  因此,Aurora 8B/10B接口必须实施软错误监控逻辑来验证正在进行的通道完整性。该逻辑由软错误计数器和每个通道的相关控制逻辑组成。下图说明了软错误监控逻辑所需的行为。

在这里插入图片描述

图14 软错误处理

4、PCS和PMA

  Aurora 8B/10B协议手册还讲解了PCS、PMA以及8B/10B编码解码,但是这些内容与GTX的功能是一致的,因此不再赘述。

  在初始化器件,空闲字节用于执行字节对齐和通道绑定。在发送数据期间,空闲用于指示没有数据,此时必须发送伪随机序列,用于降低EMI。

  Aurora 8B/10B协议为了补偿发送端与接收端的时钟速率差异,会定期将时钟补偿序列插入空闲模式或用户数据中,使得接收端对时钟进行纠正,与自定义PHY协议中每间隔固定时间发送一个用于时钟纠正的K码效果一致。

  这种时钟补偿机制,可以补偿发送端和接收端之间高达100ppm的时钟速率差异。由图11知,一般使用K23.7作为时钟补偿序列。

  发送端传输10000个字符后至少要传输一次时钟补偿序列,对于多通道,完整的时钟补偿序列在每个通道上同时传输。

  Aurora 8B/10B协议可以发送多种数据,发送各种数据优先级如下图所示,时钟纠正序列优先级最高,其实是初始化序列、NFC、UFC、用户数据、空闲数据。

在这里插入图片描述

图15 各种数据发送的优先级

  综上所述就是Aurora 8B/10B协议的相关内容了,本质就是规定了组帧格式、空闲是发送伪随机序列、通道初始化及通道绑定相关功能、时钟补偿序列等等。

  与自定PHY协议的主要区别在于流量控制,UFC和NFC,其中UFC给用户发送高优先级数据提供通道,而NFC用于仿真接收端FIFO溢出。

  本文讲解的是Aurora 8B/10B协议内容,而这个协议是开放协议,xilinx在此基础上提供了一个Aurora 8B/10B IP,下文将讲解xilinx的Aurora 8B/10B IP相关信息。

  本文的多数内容来自sp002手册,可以在xilinx官网获取该手册,也可以在公众号后台回复“xilinx手册”(不包括引号)获取相关的所有手册。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1797029.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(文章复现)基于主从博弈的售电商多元零售套餐设计与多级市场购电策略

参考文献: [1]潘虹锦,高红均,杨艳红,等.基于主从博弈的售电商多元零售套餐设计与多级市场购电策略[J].中国电机工程学报,2022,42(13):4785-4800. 1.摘要 随着电力市场改革的发展,如何制定吸引用户选择的多类型零售套餐成为提升售电商利润的研究重点。为…

大模型备案重点步骤详细说明

随着人工智能技术的发展,大模型在语音识别、图像处理、自然语言处理等领域应用日益广泛,为进一步保障和监管大模型技术应用,我国出台了《生成式人工智能服务管理暂行办法》,为大模型的合规提供了明确的法律框架。2024年4月2日&…

[STM32]定位器与PWM的LED控制

目录 1. 深入了解STM32定时器原理,掌握脉宽调制pwm生成方法。 (1)STM32定时器原理 原理概述 STM32定时器的常见模式 使用步骤 (2)脉宽调制pwm生成方法。 2. 实验 (1)LED亮灭 代码 测试效果 (2)呼吸灯 代码 测试效果 3.总结 1. 深入了解STM32定时器原…

【MySQL】SQL通用语法

【MySQL】SQL通用语法 SQL是结构化查询语言(Structured Query Language)的缩写,是一种专门用来管理和操作关系型数据库的标准化语言。SQL能够实现数据库的创建、查询、更新和删除操作,以及对数据进行存储、检索和管理。通过SQL语句…

YOLOv5改进 | 主干网络 | 用SimRepCSP作为主干网络提取特征【全网独家 + 降本增效】

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 SimRepCSP 类似于 YOLOv7的主干网络,由卷积模块和重参数化卷积(RepConv)模块组合而成,以 Cro…

政安晨【零基础玩转各类开源AI项目】解析开源:IDM-VTON:改进真实虚拟试穿的扩散模型

目录 概述 要求 数据准备 服饰代码 推理 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: 零基础玩转各类开源AI项目 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 项目地址&…

添加图片到资源文件,QPixmap ,QSplash的用法

实现1个QSplash加载之后&#xff0c;呈现主窗体的效果 1、创建资源文件&#xff0c;添加Splash.png文件 2、main.cpp 编码实现 将图像添加资源文件&#xff0c;复制文件的路径 main.cpp :/img/Splash.png 为资源的文件路径 #include "mainwindow.h" #include <…

Flink任务如何跑起来之 1.DataStream和Transformation

Flink任务如何跑起来之 1.DataStream和Transformation 1. 滥觞 在使用Flink完成业务功能之余&#xff0c;有必要了解下我们的任务是如何跑起来的。知其然&#xff0c;知其所以然。 既然重点是学习应用程序如何跑起来&#xff0c;那么应用程序的内容不重要&#xff0c;越简单…

【设计模式深度剖析】【4】【行为型】【策略模式】

文章目录 策略模式定义英文原话直译 角色类图策略接口Strategy&#xff1a;具体策略类上下文类Context测试类 策略模式的应用策略模式的优点策略模式的缺点策略模式的使用场景 策略模式 策略模式&#xff08;Strategy Pattern&#xff09; Strategy策略也称作Policy政策。 想…

快速搭建rtsp server(Ubuntu)

在现代视频监控和实时视频流媒体应用中&#xff0c;实时流协议&#xff08;RTSP&#xff09;服务器扮演着至关重要的角色。无论是家庭安防系统、企业级监控还是流媒体服务&#xff0c;RTSP服务器都能提供高效、稳定的解决方案。然而&#xff0c;对于许多初学者或开发者来说&…

单轮对话和多轮对话

参考&#xff1a;数据集对应关系说明 - 千帆大模型平台 | 百度智能云文档 (baidu.com) 什么是单轮对话 单轮对话和多轮对话是两种不同的对话形式&#xff0c;它们分别指的是在一次对话中只涉及一个问题和对应的回答&#xff0c;以及在一次对话中涉及多个问题和对应的回答。 …

【JMeter接口测试工具】第二节.JMeter基本功能介绍(上)【入门篇】

文章目录 前言一、获取所有学院信息接口执行二、线程组的介绍 2.1 并发和顺序执行 2.2 优先和最后执行线程组 2.3 线程组的设置细节三、HTTP请求的介绍四、查看结果树的配置使用总结 前言 一、获取所有学院信息接口执行 我们先针对一条简单的接口进行执行&#…

【Python报错】已解决AttributeError: ‘method‘ object has no attribute ‘xxx‘

解决Python报错&#xff1a;AttributeError: ‘method’ object has no attribute ‘xxx’ 在Python中&#xff0c;AttributeError通常表明你试图访问的对象没有你请求的属性或方法。如果你遇到了AttributeError: method object has no attribute xxx的错误&#xff0c;这通常意…

Mintegral数据洞察:全球中轻度游戏市场与创意更新频率

基于2024年3月大盘数据&#xff0c;汇量科技数据研究中心发现&#xff0c;超休闲品类仍是投流中轻度手游的中流砥柱。而投流力度较大的其他细分品类里&#xff0c;可以看到棋牌、模拟经营、非4X策略以及合成X游戏的身影&#xff0c;这些品类是近年来经常出现融合玩法的新兴赛道…

算法课程笔记——可撤销并查集

算法课程笔记——可撤销并查集 Gv

(学习笔记)数据基建-数据质量

数据基建-数据质量 数据质量数据质量保障措施如何推动上下游开展数据质量活动数据质量保障如何量化产出数据质量思考全链路数据质量保障项目 数据质量 概念&#xff1a;数据质量&#xff0c;意如其名&#xff0c;就是数据的准确性&#xff0c;他是数据仓库的基石&#xff0c;控…

【Java】static 类方法中注意事项

static 类方法中注意事项 目录 代码示例&#xff1a; package suziguang_d4_staticNote;public class Student {public int score 66;public static String name "zhangsan";// 1.类方法中可以直接访问类的成员&#xff0c;不可以直接访问实例成员public static v…

Unity Vuforia

首先在unity2019版本里可以在windows->PackageManager里搜Vuforia EngineAR; &#xff08;unity2021版本里搜不到&#xff09; 在官网注册账号&#xff1a; 添加识别图等&#xff1b; 将导出的unitypackage包导入unity中。 unity里导入package之后&#xff0c;新建场景&am…

【SpringBoot + Vue 尚庭公寓实战】房间支付方式管理接口实现(三)

【SpringBoot Vue 尚庭公寓实战】房间支付方式管理接口实现&#xff08;三&#xff09; 文章目录 【SpringBoot Vue 尚庭公寓实战】房间支付方式管理接口实现&#xff08;三&#xff09;1、查询全部支付方式列表2、保存或更新支付方式3、根据ID删除支付方式 房间支付方式管理…

C++设计模式——Adapter适配器模式

一&#xff0c;适配器模式简介 适配器模式是一种结构型设计模式&#xff0c;用于将已有接口转换为调用者所期望的另一种接口。 适配器模式让特定的API接口可以适配多种场景。例如&#xff0c;现有一个名为"Reader()"的API接口只能解析txt格式的文件&#xff0c;给这…