一、前言
以下参考:一天上手Aurora 8B/10B IP核(一)----Aurora概述及数据接口(Framing接口、Streaming接口) | FPGA 开发圈 (eetrend.com)
Aurora 协议是一个用于在点对点串行链路间移动数据的可扩展轻量级链路层协议(由Xilinx开发提供)。这为物理层提供透明接口,让专有协议或业界标准协议上层能方便地使用高速收发器。Aurora协议在Xilinx的FPGA上有两种实现方式:8B/10B 与 64B/10B。两个协议大部分相同,主要区别在编码方式上:
- Aurora 8B/10B:将8bit数据编码成10bit数码进行传输,尽量平衡数据中“0”和“1”的个数以实现DC平衡,显然这个编码方式的开销是20%,也就是效率为80%
- Aurora 64B/10B:将64bit数据编码成66bit块传输,66bit块的前两位表示同步头,主要由于接收端的数据对齐和接收数据位流的同步。同步头有“01”和“10”两种,“01“表示后面的64bit都是数据,“10”表示后面的64bit是数据信息。数据信息0和1不一定是平衡的,因此需要进行加扰,开销较小
Aurora 8B/10B 常用于芯片(FPGA)与芯片(FPGA)之间通信。它用于使用一个或多个收发器在设备之间传输数据。连接可以是全双工(双向数据)或单工。最多可实现16个收发器(GTX,GTP或GTH),吞吐量可从480 Mb / s扩展到84.48 Gb / s。Aurora核心吞吐量取决于收发器的数量以及所选收发器的线路速率。 通过使用25%的开销来计算吞吐量Aurora 8B / 10B协议编码和以及线速0.5 Gb / s至6.6 Gb / s的线速范围来计算,其传输吞吐量为从单通道设计的0.4 Gb / s到最高16通道的84.48 Gb / s。
Aurora 8b/10bIP核当连接到对端的Aurora 8b/10bIP核可以自动的初始化通道,并且流经通道的数据可以是帧模式的数据或者流模式的数据。
Aurora的帧可以是任意大小的,并且可以在任何时候打断。
在有效数据之间会自动填充空闲数据去保持通道锁定和防止电磁干扰
流控制可用于降低传入数据的速率,或通过该通道发送简短的、高优先级的消息。
下图是一种典型的使用方式(参考PG046):
从上图可以看出:
- Aurora支持全双工传输,并支持多条lane同时传输
- 发送的数据通过IP核编码后通过多条lane传输到另外一个Aurora IP核,改IP核通过用户接口接收数据
二、IP核的组成
整体架构
Lane Logic : 每个GTP、GTX或GTH收发器(以下简称收发器)都由通道。逻辑模块的一个实例驱动,该模块对每个单独的收发器进行初始化,并处理控制字符的编码和解码以及错误检测。
Gloabl Logic:全局逻辑执行通道的绑定和初始化阶段。在操作过程中,该逻辑会产生协议所需的空闲字符,并监控所用通道的错误。
RX User Interface:AXI-Stream接收接口从通道中接收数据,并执行流控功能。
TX User Interface:AXI4-Stream TX用户界面将数据从应用程序移动到通道,并执行流控制TX功能。标准的时钟补偿模块嵌入在核心内部。该模块控制时钟补偿(CC)字符的周期性传输。
传输延迟
延迟是因为通过协议引擎和GT Transceiver造成的,并且延迟会随着数据宽度的增加而增加。下图为数据路径造成延迟的示意图。
对于数据位宽为2 byte的最小的数据位宽为37个user_clk
对于数据位宽为4byte位宽,最小的延迟为41 user_clk.
三、IP核的使用
IP核选项
帧模式接口:
帧模式接口包含完整的AXI-Streaming的完整接口,包括主机与从机的握手信号。
流模式接口:
没有keep、last信号,发送的所有数据都会被视为有效信号。
下面是用户接口信息。
流控
UFC(User flow control):用户流量控制接口,此选项会给用户控制数据分配最高的优先级。
NFC(Native flow control) : 本级流量控制,指示通道对端接收到NFC消息时必须发送的暂停次数。必须保存,直到s_axi_nfc_tx_tready再次拉高。有两种方式:
一种是立即执行的NFC(Immediate NFC)当收到NFC指示符后会立即暂停。
另外一种是完成NFC,当接收到此类NFC后,会在完成当前的操作后暂停。
通道分配
指定Lane所使用的GT Channel。
共享逻辑
时钟关系
参考Aurora 8b/10b例子工程
Drpclk与Initclk可以使用同一个时钟
Userclk与Syncclk可以使用同一个时钟,也就是参考时钟
Gt_refclk为参考输入时钟
小结
本节主要讲了Aurora 8b/10b的使用,下一节在搭工程,写代码