一、Aurora 64B/66B 使用介绍
FPGA 光通信的开发过程中,最简便的方式为 Aurora 64B/66B。开发人员无需关注 2bit 同步头、加解扰等过程,开放给开发人员的主要是 AXI-Stream 用户数据接口。
Aurora 是一款可扩展的轻量级、高数据速率链路层高速串行通信协议,支持全双工或单工,支持 64B/66B、8B/10B 编码。
1.1 IP 核介绍
该核的使用架构主要如下:借助 Xilinx 核,开发人员可根据用户接口实现多通道间的光通信。最大支持 16 lane。

参考 PG074,该核的内部结构如下:

其中:
- Lane logic:每个 GT 收发器由一个 lane 逻辑模块实例驱动,初始化每个收发器,处理控制字符的编解码,并执行错误检测。
- Global logic:全局逻辑模块执行通道绑定以进行通道初始化。在运行过程中,该通道跟踪 Aurora 64B/66B 协议定义的 Not Ready 空闲字符,并监控所有通道逻辑模块的错误。
- RX user interface:AXI4-Stream 接收用户数据从通道移动到应用程序,并执行流控制功能。
- TX user interface:AXI4-Stream 发送用户数据从应用程序移动到通道,并执行 TX 的流量控制功能。
1.1.1 接口
IP 核如下(不同版本界面有差异,但含义相同):

主要的接口信息如下,具体含义可查看 PG074。
- 用户数据接口:USER_DATA_S_AXIS_TX(数据发送)、USER_DATA_M_AXIS_RX(数据接收)
- GT BANK 管脚:GT_SERIAL_RX、GT_SERIAL_TX、REFCLK
- 控制接口:CORE_CONTROL(回环模式等)、CORE_STATUS
- 重配置端口:GT_DRP(比如动态切换线速率场景)
- 复位、时钟接口:INIT_CLK、USER_CLK/SYNC_CLK、pma_init、reset_pb
时钟关系如下:

1.1.2 复位
复位接口为 pma_init 和 reset_pb,高电平复位释放前要求 INIT_CLK 和 REFCLK 保持稳定;先释放 pma_init(gt_reset),后释放 reset_pb(reset)。reset_pb 的释放同步于 USER_CLK,pma_init 复位信号同步于 INIT_CLK。
pma_init 的复位会重置收发器的所有物理编码子层 (PCS) 和物理介质附件 (PMA) 子组件,即会先复位高速收发器,后复位内核逻辑。而 reset_pb 只会复位内核逻辑,不会复位底层的高速收发器。先释放 pma_init,后释放 reset_pb。
不同模式下,复位时序不一样,本文只介绍双工模式的复位时序:上电阶段复位、其他复位。

双工模式下的正常复位时序如上图所示,先把 reset_pb 拉高 128 个时钟周期,然后再拉高 pma_init 一段时间。之后先拉低 pma_init,最后拉低 Reset_pb 信号。
如下图所示:双工模式下 reset_pb 拉高的最短时间为 128 个 user_clk 周期。经过一段时间后,channel_up 被拉低,表示传输通道建立失效。

如下图所示:双工模式下的 pma_init(gt_reset)复位时序,pma_init 至少拉高 128 个 init_clk 周期。经过一些时钟周期后,user_clk 会暂停产生时钟(因为 user_clk 的时钟来源是 GT 收发器 txoutclk,pma_init 复位从底层的物理层复位)。随后拉低 channel_up 信号,表示传输通道建立失效。

1.1.3 初始化
初始化过程如下:

Lane up 表示通道中的哪些通道已完成通道初始化。仅当所有通道和内部逻辑完成整个初始化过程后,channel_up 才会被拉高。Aurora 64B/66B 内核可以在 Channel_up 拉高之前接收数据,但 Channel_up 拉高之前不能发送数据,可把 Channel_up 取反用作全双工模式下发送端的复位信号。
1.1.4 控制及状态接口
- loopback:回环模式,实际使用一般接到 0;000: normal;001: Near-end PCS Loopback;010: Near-end PMA Loopback;100: Far-end PMA Loopback;110: Far-end PCS Loopback
- power down:高电平有效。当其为高时,GT 会进入非工作、低功耗的模式。使用的时一般直接拉低。
- pll_not_locked 接 ~pll_locked

- lane_up:"1"状态指示各通道初始化成功,每位代表一个通道
- channel_up:"1"状态指示通道初始化完成,通道已准备好进行数据传输
- hard_err:主要是硬件类错误
- soft_err:主要是软件类错误
- frame_err:当前通道帧协议错误
1.1.5 数据接口
该核支持两类数据接口:
- Framing 接口:在 AXI4-Stream 的基础上 IP 核自动加入帧头、帧尾,并在固定时间内完成时钟补偿,但是会降低传输效率和使用较多资源。
- Streaming 接口:简化的 AXI4-Stream 接口,只有数据有效、握手和数据信号,此种方式传输效率高,但无法保证传输的准确性。
本文只介绍 Frame 类型接口,即用户接口类型为 AXIS 模式。由于 64B/66 编码,aurora 的设计上在发送端需要 ready 信号握手。发送端用户只需要在发送、接收双方完成握手后,即可发送数据,通信双方均可通过握手信号来反压对方;接收端用户仅需要在 valid 信号有效时从总线上拿数据即可。
当 s_axi_tx_tready 反压与 s_axi_tx_tvalid 握手成功后,即可发送数据,使用 s_axi_tx_tlast 来表示当前发送最后一个数据,s_axi_tx_tkeep 来表示最后一个数据的有效字节。

接收数据:当 m_axi_rx_tvalid 为高时,接收的数据是有效数据,可以拿来用了,m_axi_rx_tkeep 与 m_axi_rx_tlast 的用法与发送端对应的信号一致。

1.2 IP 核配置
根据本人开发板原理图配置如下:

- GT Refclk:GT 参考时钟,板子时钟为 156.25Mhz
- Lane Rate:以 10.3125Gbps 作为测试
- INIT clk:初始化时钟,根据工程自行选择设计
- GT 位置及 lane 数目:根据板子原理图设计
- Dataflow Mode:选择全双工
- Interface:Framing 类型
- 流控:不使用

- little Ednian support:小端数据(小端:[15:0] 大端:[0:15])
- 动态重配置接口类型
- Debug 信号
- CRC 功能

Shared Logic:设置 IP 的逻辑放置的位置,如果 GT REFCLK 没被别的 serdes 使用,两种模式都行,否则建议 In example design 模式。
- In core:在 IP 核内:support、复位、时钟等逻辑包含在 ip 内
- In example design:在例子中,support、复位、时钟等逻辑都在 ip 外
1.3 参考例子
主要参考 support、复位、时钟的使用。

- support 模块:包含了对时钟、复位、IP 等的例化处理等一系列操作;在应用中此部分可不需要修改。
- frame_gen 数据生成模块,采用 LFSR 的方式生成伪随机序列;在实际工程中替换为自己的数据模块即可。
- frame_check 数据检验模块,对接收的数据进行检验以验证传输的正确性;在实际工程中替换为自己的数据模块即可。
二、工程设计、测试
2.1 工程设计
按照上述配置的上进行设计,收发数据流程为,当 Channel_up 拉高后,可通过 VIO 使能控制 data_test_module 测试数据模块产生测试数据。
data_test_module:当 FIFO 非空时写入递增数据,根据 AXIS 接口的 ready 反压信号读 FIFO 到 Aurora IP 核。

2.2 仿真测试
对上述工程进行自回环收发仿真测试:

初始化及收发过程:

复位关系、状态信号:

发数据:ready 和 valid

收数据主要关注 data、valid、last、keep 等信号。

2.3 上板测试
通过 VIO 使能控制 data_test_module 测试数据模块产生测试数据。

接收到的数据:与发送数据一一对应。

三、总结
本文介绍了 FPGA Aurora 64B/66B 协议的使用,涵盖 IP 核架构、接口定义、复位时序、配置方法及测试验证流程。


