Aurora 8B/10B 是 Xilinx 搞出来的一个轻量级高速串行协议,夹在裸 GT 收发器和 PCIe/以太网之间。它能帮你搞定对齐、通道绑定甚至流控,但协议本身又不像以太网那么重,延迟也低。官方手册写得挺全,可是真到配 IP 的时候,其实大部分工作就是改几个参数,底层东西都自动生成了。

1. Physical Layer(物理层)
这一页直接决定硬件连线和电气特性,必须跟板卡设计、对端设备对上,没商量的余地。
Lane Width (Bytes)
决定了 AXI-Stream 的接口位宽,也直接算出 user_clk 的频率。
- 2 Bytes:AXI 位宽 16-bit,
user_clk = 线速率 / 20。 - 4 Bytes:AXI 位宽 32-bit,
user_clk = 线速率 / 40。
线速率要是跑到 5 Gbps 以上,选 4 字节能让 user_clk 慢一半,时序好收一点。像 3.125 Gbps 这种中低速,2 字节就够了。
Line Rate (Gbps)
光纤或铜线上实际跑的比特率,受 SFP 模块、PCB 走线和对面设备的速度限制。3.125 Gbps 是个经典值,也是 XAUI 的标准速率。
GT Refclk (MHz)
外部差分参考时钟。必须和板子上接到 GT Bank 的晶振频率一模一样,填错了 PLL 锁不住,整个核都起不来。
INIT clk (MHz)
初始化时钟,上电时驱动复位逻辑和状态机,50 MHz 到 100 MHz 随便给个稳的就行,不挑抖动。默认 50 MHz。
DRP Clk (in MHz)
动态重配置口时钟,一般用不上,可以和 INIT clk 共用。如果你想在运行中切换线速率,才需要配 DRP 去改 GT 参数。默认也是 50 MHz。
上面这三个时钟(GT Refclk, INIT, DRP)是我们得喂给 IP 核的。IP 核还会吐出一个
user_clk,它是根据线速率和 Lane 位宽算出来的,用户所有 AXI 接口逻辑都必须挂在这个时钟域下,否则亚稳态跑不了。
2. Link Layer(链路层)
这一页控制数据怎么打包、怎么握手。TX 和 RX 两边的配置必须完全一致,不然 channel_up 永远拉不高。
Dataflow Mode
- Duplex:常用,同时收发。
- TX-only / RX-only:只发或只收。
- Simplex:有特殊边带信号处理的单工。
Interface —— 重点
Framing(帧模式)
有包的概念,AXI 接口带 tlast 信号指示一包结束。适合发命令包、以太网帧这类非连续、有边界的数据。Aurora 会自动处理包间空闲。
Streaming(流模式)
没有 tlast,数据像水管一样源源不断。适合 ADC 采样流、视频流这些连续数据,效率最高,因为没帧头帧尾开销。
Flow Control
- None:简单,最常用。
- UFC:用户自己发命令插队。
- NFC:核自动根据接收端 FIFO 状态反压发送端。
初学者先选 None,等接收端 FIFO 老溢出了再考虑 NFC。
Back Channel
Sidebands 主要在单工时用 GPIO 线通知对端。加扰/解扰(Scrambler/Descrambler)建议勾上,把数据伪随机化,减少连 0 连 1,有助于 EMI 和时钟恢复。小端序支持除非你的处理器是强小端且不想软件倒字节,不然保持默认大端。
3. Error Detection
如果选了 Framing 模式,CRC 建议勾上。接收端会检查 CRC,错了能报错,保证数据完整性。Streaming 模式一般不加。
4. Debug and Control
调试阶段把 Vivado Lab Tools 勾上,它会往核里塞 ILA,抓 lane_up、channel_up 这些关键信号,不通的时候能定位卡在哪一步。量产再关掉省资源。
5. 配置避坑要点
- 时钟计算:以图里配置为例,3.125 Gbps / 2 Bytes / 10 = 156.25 MHz,这就是
user_clk。所有 AXI 逻辑都得跑这个频率。 - 两端一致性:Line Rate、Lane Width、Scrambler、Interface 模式必须一模一样。
- Refclk 必须准:板子晶振多少就填多少,别想当然。
- 复位顺序:先
gt_reset,再reset,或者直接用 IP 自带reset_pb按 example design 的时序来。
6. Lane Assignment(通道分配)
如果说 Core Options 决定传多快、传什么格式,那这页就是决定在 FPGA 哪几根物理引脚上跑。纯物理层配置,必须对着原理图和封装文件来。
Lanes(通道数)
你想用几条物理通道。比如 QSFP 有 4 路,就可以设 4,带宽×4,Aurora 会自动对齐。板子上只画了一对线,这里就老老实实选 1。
Lane Assignment 表格
表格左边是 Quad(每 4 个通道一组),右边是 Quad 里 Channel 0~3 的下拉菜单。
- X:不用这个物理通道。
- 1, 2, 3…:把 Aurora 的第几条逻辑通道映射到此物理位置。
怎么填:
- 打开原理图,看 SFP 或 SMA 接在哪个 Bank、哪对管脚(比如
MGTHTXP_115)。 - 查 Xilinx 封装文件或者 Vivado I/O Planning 视图,确定这对管脚属于哪个 Quad 的第几个 Channel(X0Y0、X0Y1 等)。
- 在表格里找到那个 Quad 和 Channel,下拉选上编号。
这个图形界面只是个向导,更稳妥的做法是大概选对 Quad,最后在 XDC 里用
set_property LOC GTXE2_CHANNEL_X0Y0 [get_cells ...]精确约束引脚。如果 XDC 和这里冲突太大(比如时钟跨太多 Bank 够不着),Implementation 会报错。
GT Refclk1 / GT Refclk2
参考时钟也得选对 Quad。看原理图上差分晶振接在哪个 Quad 的 MGTREFCLK 管脚,就选那个 Quad。尽量让 Refclk 和数据通道在同一个 Quad 或相邻 Quad,不然抖动大。拿不准也可以先随便选,后面靠 XDC 强拉,但别太离谱。
7. Shared Logic(共享逻辑)
这一页问你:IP 核内部要不要自带 PLL 和差分缓冲器?
一个 Quad 里 4 个通道共享 PLL 和参考时钟缓冲。
- Include Shared Logic in core:PLL 和缓冲都在核里,对外接口简单,直接接板级 refclk。适合设计里只有一个 Aurora 核,或者同 Quad 里的第一个核(主核)。
- Include Shared Logic in example design:核内部不含 PLL 和缓冲,得由外部喂时钟信号。生成 example design 时,这些共享逻辑会被放在顶层。适合同 Quad 里第 2、3、4 个核(从核),或者你想自己写 PLL 复位逻辑,或者多个 IP 核共用一个 PLL。
典型场景:
- 新手最简单:一个核,选 Include in core。
- 同 Quad 多核:第一个核选 Include in core,后面三个都选 Include in example design,然后把主核输出的时钟连到从核的对应端口。
- 完全自己掌控时钟:选 Include in example design,手写 IBUFDS_GTE 和 GT_COMMON 原语。


