01signal.com

FPGAs 与 Multi-Gigabit Trasnsceivers之间通信的协议(protocols)列表

此页是介绍 Multi-Gigabit Transceiver (MGT)的系列页面中的第二页。

介绍

Multi-Gigabit transceivers (MGTs)是许多著名协议的基本组成部分: PCIe、 SATA、 Gigabit Ethernet、 SuperSpeed USB、 Thunderbolt 和 Displayport。所有这些协议都有一个共同点: 其中涉及一台计算机。还有几台用于电信的协议,用于通过光纤链路传输电话呼叫。

MGTs 还可用于在两 FPGAs之间交换数据。上一页列出了使用 MGT 进行此目的时需要注意的一些事项。显然,需要某种协议来确保数据在物理通道上正确传输且具有可接受的可靠性。这种协议的实现相当复杂,因此问题是是否有现成的协议或其他可以提供帮助的构建块。

本页试图总结主要的替代方案。它们按照应用逻辑的复杂程度列在下面,最不复杂的列在最前面。

除非另有说明,以下所有协议均可作为双向链路(全双工)以及单向链路(半双工)工作。

Xillyp2p

Xillyp2p 是专有的协议,可在两 FPGAs之间提供多数据流的可靠传输。协议管理应用程序数据的传输、流量控制、调度和重传,方式类似于 TCP/IP 协议通过网络传输数据的方式: 保证所有数据正确到达对方。

应用逻辑通过标准 FIFOs与协议的实现进行交互。协议营造出标准 FIFO 的假象,并跨越两 FPGAs: 这个虚拟的 FIFO的写入端在一 FPGA上,读取端在另一 FPGA上。

在两 FPGAs中, FIFO 的一侧连接到应用逻辑,而另一侧与协议的逻辑交互。因此,发送方的应用逻辑将数据写入 FIFO ,而接收方的应用逻辑从另一 FIFO读取数据。协议负责将数据从发送方 FPGA 上的 FIFO 移动到接收方 FPGA上的 FIFO 。协议的流量控制可确保目标 FPGA 上的 FIFO 永远不会满。

协议可以双向为多 FIFOs 提供服务。公平的数据传输调度程序可确保高效利用 MGT的带宽。发送方 FIFO 中的数据很快就会被消耗掉,因此这 FIFO 不会变满(只要带宽允许并且数据是从另一侧的 FIFO 消耗的)。

协议还具有不同的传输数据包的接口(在 EOP 端口的帮助下)。

还支持半双工选项。在这种情况下,协议确保所有到达的数据都是正确的。如果物理通道上发生位错误,则在错误数据到达应用逻辑之前数据流会停止。

Gigabit Ethernet

尽管 Gigabit Ethernet 旨在用于计算机之间的通信,但可以使用这个简单的协议在两 FPGAs之间发送数据包。 FPGA 制造商通常会提供合适的 IP 。因此,应用逻辑负责通过标准接口之一(GMII、 RGMII、 XGMII 等)创建和接收 Ethernet 数据包。

与任何 Ethernet 链路一样,应用逻辑的作用是将数据组织成数据包,以及处理链路上的错误(例如重传)。

Interlaken

Interlaken 是一个开放的协议,用于芯片之间的通信。它基于64b/67b 编码: 低级数据流由重复传输的 64 比特段组成。在每个这样的段之前,都会添加 3 比特,以区分应用数据和控制字。

协议的基本传输单元是长度可变的突发。在每个这样的突发之前和之后立即传输一个控制字。这两个控制字包含允许抽象数据包和通道的信息。其中包括:

使用 CRC24检查控制字的内容和(可能)之前出现的数据突发是否存在位错误。

Interlaken 协议还具有用于诊断目的的 CRC32 检查(每 Meta Frame一次)。但是,如果在此测试的帮助下检测到错误,则该错误与大量数据有关,而不是与特定突发或数据包有关。换句话说,如果数据尽管存在位错误但仍通过了 CRC24 测试,则只能在稍后检测到,并且无法指出包含错误数据的突发。

Interlaken 还允许使用两种机制发送流控制请求: 带内流量控制和带外流量控制 (OOBFC)。这两种机制都包含一种让接收方通过 XON/XOFF 语义来通告其是否已准备好接收数据的方法。此信息由每个接收实体的单个比特(bit)组成。当此实体准备好接收数据时,此比特(bit)为“1”,否则为“0”。“接收实体”的确切含义因应用程序而异。

带内流控机制使用控制字中的 16 比特来传输流控请求。带外流控机制需要三条额外的物理线路(时钟、 sync 和数据(data))来传输信息。

Interlaken 不包含任何仲裁或传输调度机制,因此无法强制执行流量控制。应用逻辑负责仲裁来自不同来源的数据传输,并确保遵守流量控制请求。当 Interlaken IP core 宣布它支持流量控制时,通常意味着它允许发送流量控制请求,而不是控制数据流。

如果突发数据未通过 CRC24 测试(即检测到位错误),则可以按照 Interlaken Retransmit Extension Protocol Definition中的定义请求重传。此重传请求通过上述带外接口 (OOBFC) 发送。换句话说,协议并未定义在 MGT 链路本身上发送重传请求的方法,而是在三条独立的物理带外线路上发送。

Aurora

Aurora 是 Xilinx (现为 AMD)为其自己的 FPGAs开发的协议。此协议的基本传输单元是单个字(具有固定宽度,具体取决于所涉及的 MGTs 的数量)。但是,协议还支持数据包模式,通过可选地公开与数据包的最后一个字一起通过通道传递的“last”信号。

协议无法纠正物理通道上的位错误。

在发送端,双方(协议和应用 logic) (application logic)))均可通过握手信号来限制数据流。在接收端,应用逻辑必须始终接受到达的任何数据字。但是,协议提供了两种阻止发送器发送数据的选项:

由于两种流量控制机制都是基于相反方向的数据链路,因此仅在全双工模式下可用。

当使用协议传输数据包时,发送器可选择在每个数据包末尾附加一 CRC (在 Xilinx的协议实现中)。协议的实现会在接收端检查此 CRC ,并通知应用逻辑是否在数据包中检测到错误。如果使用 Aurora 时没有数据包(没有“last”信号),协议不会进行错误检测。

任何重传机制、多通道复用和传输调度都必须由应用逻辑实现。

Aurora有两种变体: 使用8b/10b 编码64b/66b 编码。 64b/66b 编码效率更高,因此在可能的情况下应优先考虑此变体。

Serial Lite

Altera 有一系列协议和 IP cores ,它们共享名称 Serial Lite:

IP cores 与协议系列的不同成员不兼容。只有 SerialLite II 可以发起重传。

RapidIO

RapidIO是一种基于数据包的协议,它与PCIe类似,因为它支持的数据包类型与 CPU所需的操作相对应,其中包括:

RapidIO 和 PCIe 之间的主要功能差异在于, PCIe 协议需要中央单元( Root Complex,通常是 CPU)配置系统中的所有端点。 RapioIO 系统不需要这种中央单元。

与 PCIe 的另一个区别是数据包的重传是可选的。仅当数据包以“reliable traffic”(RT)的形式发送时才会重传。数据包也可以以“continuous traffic”(CT)的形式发送。此类数据包既不被确认也不被重传。

RapidIO 协议定义了通信的所有方面,从电气规范到数据包格式、重传和流量控制。

由于协议的复杂性,RapidIO 可能不是两 FPGAs之间简单的点对点连接的理想选择。 RapidIO 可能更适合通过 switch连接多 FPGAs ,特别是如果 PCIe 不适合,因为系统中需要 CPU 。

概括

介绍了几种用于传输应用数据的协议。每种协议都提供了不同的数据传输、控制流量和响应位错误(如果有的话)的方法。适合应用的正确协议是在协议提供的功能与实现应用逻辑中缺失部分所需的努力之间取得平衡。

以上就是关于 MGTs系列的第二页。下一页将介绍一些经常用于 MGTs的编码方法。

此页面由英文自动翻译。 如果有不清楚的地方,请参考原始页面
Copyright © 2021-2024. All rights reserved. (b4b9813f)