引言

Xillyp2p 是一款 IP 核,为两个 FPGA 之间的通信提供了简单直观的解决方案。

该 IP 核 提供的通信链路具有以下特点:

  • 双向传输
  • 无差错
  • 支持多通道

FPGA 之间的物理连接可以是:

  • 多千兆位收发器(MGT,如 GTX)
  • 基于通用 FPGA 引脚 的 SERDES
  • FPGA 之间的多线连接

数据速率 范围从几兆比特每秒到数十吉比特每秒。

与 Aurora、Interlaken、RapidIO 或以太网等常见的点对点协议不同,使用 Xillyp2p 无需任何与通信协议相关的设计工作:与 Xillybus 系列的其他 IP 核类似,该 IP 核与用户应用逻辑之间的接口基于 FIFO:一个 FPGA 上的应用逻辑向一个标准 FIFO 写入数据,另一个 FPGA 上的应用逻辑则从另一个标准 FIFO 读取数据。

Xillyp2p 原理框图

上图展示了两个 FPGA 上的 IP 核如何利用底层物理连接,在两个方向上建立若干独立的数据通道。

注意:

  • FPGA 之间的物理连接可以是短距离的,例如 PCB 上两个 FPGA 之间的连接。
  • Xillyp2p 同样适用于 FPGA 之间距离较远的场景,例如光纤通信应用。
  • Xillyp2p IP 核以公平的方式将物理链路的数据带宽分配给各个数据通道,从而高效利用带宽。
  • 用户可用的应用数据带宽通常可达物理链路带宽的 97%。

Xillyp2p IP 核创建了一种跨越两个 FPGA 的 FIFO 抽象概念:

  • 每个数据通道对应一个这样的虚拟 FIFO。
  • 所有数据都无差错地送达对侧。
  • 使用“满”和“空”信号对用户数据流进行流控。

应用逻辑无需感知底层存在数据链路通信:只要“满”端口为低电平,逻辑就可以向 FIFO 写入数据;只要“空”端口为低电平,就可以从 FIFO 读出数据。

下图展示了这些虚拟 FIFO 的概念:

Xillyp2p 跨越两个 FPGA 的 FIFO

上面两图展示了一个具体配置:每个方向上有两个数据通道。但用户可以通过 IP Core Factory 生成自定义的 Xillyp2p IP 核。与通过 IP Core Factory 创建的其他 Xillybus IP 核一样,定制化的 Xillyp2p IP 核可根据用户需求进行裁剪:

  • 与物理连接的接口
  • 通道数量
  • 每个通道的方向
  • 每个通道的数据位宽
  • 若干与每个通道相关的其他参数

物理通信通道

用户需要自行搭建物理通信通道。如前所述,这通常是一个 MGT、一个 SERDES 或者简单的 FPGA 引脚。

在 FPGA 内部,Xillyp2p IP 核通过一组并行线向量与物理通信通道对接,该向量表示物理通道上解串后的数据。这是 FPGA 厂商提供的 MGT 及其他 SERDES 模块的常见接口。

该向量的位宽在 IP Core Factory 中配置 IP 核时设定,可以是 1 到 128(含)之间的任意整数。

对两个 FPGA 之间物理通道的要求相对宽松:任何能够以恒定速率在两个 FPGA 之间传输数据,且误码率合理(10-6 及以下)的介质均可使用。Xillyp2p IP 核向物理通道馈送的数据流是直流平衡且随机化的。

如果使用 MGT,请注意以下几点:

  • MGT 常有其他称呼,例如 GTX、GTH、GTY、GTP 等。
  • MGT 应配置为类似简单 SERDES 的工作模式。换句话说:
    • 关闭 8b/10b 编码等类似功能
    • 关闭字对齐功能
    • 关闭所有其他高级功能
  • 可以使用 MGT 的均衡器。均衡器要求数据流经过扰码器随机化,而 Xillyp2p 满足这一要求。

也可以直接使用 FPGA 的引脚,例如:

  • 使用通用 FPGA 引脚连接两个 FPGA。每个方向上,该链路可以是两个 FPGA 之间的一条 PCB 走线或差分线对(如 LVDS)。可以配合 FPGA 内部的 SERDES 模块以获得更高的数据速率。
  • 使用一组并行走线连接两个 FPGA。这允许利用多条单路速率不高的走线来提升总带宽。

Xillyp2p IP 核实现了若干功能以确保可靠的数据传输,包括:

  • 扰码器,用于对物理通道上的数据进行随机化
  • 比特对齐机制
  • 支持错误检测与重传的数据包协议
  • 多通道数据复用,以模拟出跨越两个 FPGA 的标准 FIFO 行为(如上文第二张图所示)。

Xillyp2p 还支持以下特性:

  • 允许物理通道的热插拔。断开再重新连接线缆是可行的。
  • 提供单向版本的 Xillyp2p。显然,该版本不支持重传,因为发送端无法获知数据是否已正确到达。不过,所有到达对侧的数据保证是正确的:链路上的错误会导致受影响的数据段之前的数据传输停止。恢复数据流需要应用逻辑介入处理。

应用场景

  • 同一块板卡上多个 FPGA 之间的互连(尤其适用于 MGT)。
  • 通过背板连接多个 FPGA。
  • 数据采集,例如通过光纤电缆连接位于远端的 FPGA。远端可以是一个视频摄像头或射频(RF)信号接收器。
  • 通过光纤电缆向远端设备输出数据。例如,向距离图像源很远的显示器输出视频,或向远端的无线发射天线输出数据等。
  • 电气隔离(用于医疗设备的安全保障):通过光纤电缆与前端 FPGA 通信。
  • 通过线缆与外围设备(摄像头、显示器、传感器、无线电收发器等)建立数据链路。
  • 利用不同 FPGA 厂商板卡上都具备的 MGT 或其他物理连接,实现板卡间的互连。
  • 降低 I/O 密集型应用的成本:使用多片引脚数适中的 FPGA,而不是一片高引脚数的 FPGA。