FPGA高速设计之Aurora64B/66B的应用与不足的修正

server/2024/11/14 3:09:48/

FPGA高速设计之Aurora64B/66B的应用与不足的修正

Aurora IP协议的特点

        首先基于网上找到的一些资料,来讲述下Aurora高速协议的特点与相关的应用。Aurora 协议在 2002 年由 Xilinx 公司首次提出,是由Xilinx提供的一个开源、免费的链路层串行传输通信协议,可扩展且轻量,可以实现点到点的串行数据传输。Aurora协议具有实现高性能数据传输系统的高效率和简单易用的特点。具体如下:

        可扩展,轻量级:部署快捷,可在一个或多个高速串行通道上点对点传输;

        链路层协议:独立于网络层,可直接传输工业标准协议封装的数据,例如TCP/IP、UDP等;

        短距通信:针对芯片间和板间通信应用,通过标准光接口可用于设备间通信;

        开源:免费使用和共享,可基于该协议标准开发独立应用。

        Aurora 协议针对 FPGA 间的高速数据传输,能够为物理层提供透明接口。与 RapidIO、PCIE 等协议只支持固定的传输速率不同,Aurora 协议的传输速率可以进行灵活配置,支持速度为 0.75~13.1 Gbps,并可随着 FPGA 及其内嵌高速串行收发器的发展而进一步提高,可通过通道绑定的方法实现更高的数据传输速度。

        Aurora 协议支持全双工和单工通道,使用的逻辑资源非常少,具有高带宽、无线帧尺寸和灵活组帧的特点。通过调用 Xilinx 公司的 Aurora IP  核,用户只需处理简单的用户接口即可,可以方便地实现器件间的单通道或多通道数据通信。

        Aurora 总线协议包括物理层和数据链路层两层,最初采用了 8B/10B 编码方式,后续为了提高总线带宽利用率,Xilinx 公司于 2008年又采用了 64B/66B 编码。为了区分两种编码方式,采用 8B/10B 编码方式的 Aurora协议称为 Aurora 8B/10B;采用 64B/66B 编码方式的 Aurora 协议称为 Aurora 64B/66B 。

        Aurora协议最大的优势即为开源和共享。Aurota协议为用户提供了一个透明的物理层接口,支持任何上层私有或符合工业标准的协议,如TCP/IP、以太网等,使得采用Aurora协议的高速串行总线接口能够在最短时间内与现有用户设计集成,而不大幅改动用户应用的设计。此外,Aurora协议也具有实现简单、占用物理资源少、通信效率高、速率可灵活配置等优点。

        Aurora协议仍然具有不完善之处,如不具备地址机制,不支持通道切换功能,未规定数据有效载荷内校正等。Aurora总线的应用领域目前仍然局限于FPGA相关的通信,应用范围仍然不够广泛。

Aurora IP协议与应用

Aurora协议分为8B/10B版本(SP002)和64B/66B版本(SP011),主要介绍了五个方面的内容:

物理层:针对信号电平、时钟编码、编码和符号代码等进行介绍。

链路层:描述了在传输过程中如何标记用户协议数据单元(user PDUs)的整个过程,以及在传输期间如何在数据中插入数据暂停,以及如何管理发射机和接收机之间的时钟速率差异。

初始化和错误处理:定义了为跨单通道和多通道通信而准备通道Partners*所需的步骤。它还描述了通道Partners在通道中出现比特错误时应该如何处理。

数据分割:描述了数据如何被映射到一条由多个串行数据线组成的数据通道上。

流量控制:Aurora协议定义了链路层的流量控制机制,并提供了转发更高层用户流量控制消息的加速机制。

        Aurora是一种简单,可扩展的开放式协议,支持下述或更多场景的应用:

        芯片间通信:使用Aurora协议的通信总线为高速串行总线,相对传统IC间的并行总线,可大大减少硬件设计中的布线复杂度和布线层数;

        板间通信Aurora协议支持8B/10B编码或更高效率的64B/66B编码,使的Aurora可以与许多现有标准兼容。另外,aurora的数据传输率和通道个数是可自定义的,用户使用更加方便;

        单工模式Aurora协议支持单工模式,在不需要全双工通信的场景可节省更多布线资源。

        ASIC设计Aurora协议不仅仅应用于FPGA设计,还支持ASIC设计。Aurora的简单和开源特性使得它在FPGA和ASIC中都可以占用更小的资源和成本。

Aurora IP的配置

下图为vivado2018.3 KU+系列芯片中Aurora 64B/66B(不包括DRP重配置选项),IP的选项卡比较简洁明了,下面讲解下各个选项卡的作用。

  1. GT Type:KU+系列芯片拥有GTH,GTY两种GT口,其中GTY的速率较高32.75Gb/s,GTH仅有16.375Gb/s;
  2. Line Rate:高速收发器线速率,速率影响了高速收发器使用CPLL还是QPLL的输出作为参考时钟信号;
  3. Column Used:选择某一列GT口进行数据传输,与实际的FPGA的GT口位置相关,当前仅有left;
  4. Lanes:可以选择1~8lane进行高速传输,与器件相关;
  5. Start GT Quad/Lane:选择Quad与lane,当前器件2个Quad,8条lane;
  6. GT Refclk Selection:选择哪个Quad的时钟作为参考钟;
  7. GT Refclk MHz:高速收发器参考时钟频率;
  8. INIT clk:初始化时钟,对时钟来源没有要求,可以和DRP共用同一时钟;
  9. Generate Aurora without GT:不使用GT资源,只使用逻辑资源生成Aurora协议;
  10. Dataflow Mode:选择该IP工作模式,可选有仅发送、仅接收、收发单工,全双工,选择全双工模式可以进行环回实验;
  11. Interface:用户接口类型,Framing/Streaming前文分析过该IP支持两种用户接口,本文选择使用framing,即axi-stream数据格式 ;
  12. Flow Control:流量控制设置,支持两种流控模式,,简单情况下不使用流量控制传输;
  13. Little Endian Support:小端对齐。不勾选该选项时,图中数据信号的最高位是0,表示先传输高字节数据,采用大端对齐。勾选该选项后,数据位会颠倒,变成小端对齐,FPGA内部一般使用大端对齐,保持默认即可。

Aurora IP的第二个选项卡则为shared logic,可以将QPLL,时钟buffer等包含在IP中还是示例设计中,此处建议包含在example design,这样我们可以从示例工程学习到关键的时钟如何处理。

生成IP后,可在source-IP栏右键选择open example design。Xilinx官方的IP除了有配套手册外,还都提供了示例工程。通过手册得知IP的工作原理,通过示例工程去验证IP功能,然后在example design的基础上构建自己的代码。

Aurora IP的example design

打开示例工程后,会有一个工程与一个仿真,截图如下:

其中aurora_64b66b_0_exdes.v是一个完整收发模块,包含了协议层(aurora_64b66b_0_support.v),跨时钟同步设计(aurora_64b66b_0_cdc_sync.v),数据生成(aurora_64b66b_0_frame_gen.v)与检查(aurora_64b66b_0_frame_check.v),示例工程在TestBench中例化了两次该模块,即使用了两个高速收发器进行仿真,把高速收发器1的发送通道与高速收发器2的接收通道连接,从而形成数据闭环。

  由于两个模块产生相同数据,在仿真时可以只关注一个收发器的接收和发送通道数据,就能够观察接收和发送数据是否正确,也可以第二个aurora中的GT设置为收发直连,形成数据闭环。直接运行仿真,可以查看如下的关键信号。

找到axis相关的tx,rx信号data,valid,ready,keep,last,可以看到信号收发正确,还有两个关键信号是channel_up与lane_up当这俩信号被拉低,表明GT初始化成功,才能看到数据的收发,仿真持续时间为34.8us。

Aurora IP的问题

当前在两片FPGA进行aurora通信时,我们采用了如上图的配置,RX侧user_clk=156.25MHz,在axis-stream模式下我们一般要使用一个异步FIFO来跨时钟域,问题来了user_clk=156.25MHz,但我们使用数据的频率仅为100MHz,这样无论多大的FIFO都会发生数据丢失的行为,因为我们无法利用axis_ready信号告诉前级,数据即将溢出,即aurora协议无法接收rx侧的axis_ready信号,从而产生接收数据丢失的风险。此处有两种办法:第一种是我们在接收信号的板子上引出一根ready信号,告诉前级数据不要再发数据了,因为axis_valid &&axis_ready同步拉高,前级的aurora才会发数,这样就相当于人为控制数据的收发,比较灵活。需要注意的是:在设计ready信号时需要关注从后级传到前级的时延;第二种方式则为Flow Control模式,可以通过NFC控制流量,让GT口暂停发数,最多可设置为256拍后才发数据,此方法适用于可以预知下级接收的FIFO什么时候会溢出,然后通过计数暂停发数。


http://www.ppmy.cn/server/141280.html

相关文章

python-圆的问题

圆是几何中的基本形状之一,它由一个固定点到平面上所有到该点的距离相等的点组成。在数学中,圆可以用其半径r表示,也可以用直径d表示。 在Python中,我们可以使用math库来计算圆的一些属性。下面是一些常见的圆的属性和计算方法&a…

华为OD机试真题---电脑病毒感染

华为OD机试中的“电脑病毒感染”题目是一个典型的图论问题,涉及到网络中的电脑如何通过连接传播病毒,并计算感染所有电脑所需的最短时间。以下是对该题目的详细解析: 一、题目描述 一个局域网内有很多台电脑,分别标注为0~N-1的数…

在CentOS下安装RabbitMQ

在CentOS下安装RabbitMQ 在CentOS下安装RabbitMQ可以按照以下步骤进行:步骤 1: 更新系统步骤 2: 安装Erlang步骤 3: 添加RabbitMQ仓库步骤 4: 安装RabbitMQ步骤 5: 启动RabbitMQ服务步骤 6: 检查RabbitMQ状态步骤 7: 启用RabbitMQ管理插件(可选&#xff…

「QT」几何数据类 之 QPoint 整型点类

✨博客主页何曾参静谧的博客📌文章专栏「QT」QT5程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…

uni-app表单⑪

文章目录 十七、用户登录-登录界面搭建一、结构样式代码编写 十八、用户登录-表单验证一、userRulesMixin 文件使用二、验证规则编写 十七、用户登录-登录界面搭建 一、结构样式代码编写 uni-forms 插件下载 下载地址:https://ext.dcloud.net.cn/plugin?id2773 s…

windows和linux行尾序列CRLF和LF切换问题

行尾序列 行尾序列通常指的是行终止符。常见的行终止符包括: \n:LF (Line Feed),在文本文件中通常表示为换行,换行(LF,ASCII 10) \r\n:CRLF (Carriage Return Line Feed)&#x…

M1M2 MAC安装windows11 虚拟机的全过程

M1/M2 MAC安装windows11 虚拟机的全过程 这两天折腾了一下windows11 arm架构的虚拟机,将途中遇到的坑总结一下。 1、虚拟机软件:vmware fusion 13.6 或者 parallel 19 ? 结论是:用parellel 19。 这两个软件都安装过&#xff0…

WPF中ImageBrush和Image的区别

在WPF(Windows Presentation Foundation)中,ImageBrush 和 Image 控件都可以用来显示图像,但它们的用途和行为有所不同: Image 控件 Image 控件用于在用户界面中直接显示一个图像。它继承自 FrameworkElement&#x…