FPGA数据传输

SFP/SFP+/QSFP/QSFP+光模块

SFP( small form-factor pluggable,小封装热拔插光模块)主要由光电子器件(光发射器、光接收器)、功能电路和光接口等部分组成,主要作用就是实现光纤通信中的光电转换和电光转换功能。

SFP/SFP+/QSFP/QSFP+区别:

  1. SFP是基于IEEE802.3和SFF-8472协议,传输速率能够达到4.25 Gbps,典型的有多种传输速率155Mbps/1.25Gbps/3.125Gbps/2.5Gbps/1Gbps等;

  2. SFP+规范是基于SFF-8431,最高传输速率可以达到16Gbps,典型传输速率有6G/8G/10G等;

  3. 相较SFP和SFP+的1路收发通路,QSFP和QSFP+增加到了4路,也就是数据速率提高4倍。

MGT是 Multi-Gigabit Transceiver的缩写,是Multi-Gigabit Serializer/Deserializer (SERDES)的别称。MGT包含GTP、GTX、GTH、GTZ、GTY、GTM。
为了便于管理、适应各种电气标准,FPGA的IO被划分为多各组(BANK),每个BANK的接口标准由其接口电压VCCO决定,一个BANK只能有一种VCCO。

8B/10B编解码

8b/10b编码机制是Infiniband,千兆位以太网, FiberChannel以及XAUI 10G以太网接口采用的编码机制。它是一种数值查找类型的编码机制,可将8位的字转化为10位符号。这些符号可以保证有足够的跳变用于时钟恢复。下表是两个8-bit数据编码为10-bit数据的例子。

8位数值

10位符号

00000000

1001110100

00000001

0111010100

在上面的例子中,8-bit数据会导致线路很长时间不出现切换而丢失同步信息。 所以8B/10B编解码电路采用了一种叫做运行不一致(Running Disparity)的技术来保证线路良好的直流平衡性能。

运行不一致(Running Disparity)

8B/10B编解码机制中的直流平衡是通过一种称作“运行不一致性”的方法来实现的。实现直流平衡的最简单办法是:只使用有相同个数0和1的符号,但是这将限制符号的数量。而8B/10B则为各个数值分配了两个不同的符号。其中一个符号有6个0和4个1,这种情况称为正运行不一致符号,简写为RD+,另一个符号则有4个0和6个1,这种情况称为负运行不一致符号,简写为RD-。编码器会检测0和1的数量,并根据需求选择下一个符号,以保证线路的直流平衡。下表给出了一些符号示例。

此外,如果数据违反了运行不一致性规则,那么接收器可以通过监控输入数据的运行不一致性规则来检测数据中的错误。

控制字符(Control Characters)

8B/10B编解码技术将12个特殊字符编码成12个控制字符,通常也称作“K”字符。这些控制字符用于数据对齐,控制以及将带宽划分成为子通道。下表是12种控制字符的编码情况。

上板实验

利用IBERT进行GTP信号眼图测试

Vivado 中提供了 1种IBERT 工具用于对Xilinx FPGA芯片的高速串行收发器进行板级硬件测试。通过IBERT我们可以获取误码率,观察眼图,调节串行收发器的参数,从而有助于判断可能存在的问题,便于验证硬件的稳定性和信号完整性。
而MA703FA开发板的底板具有两路SFP接口,可接市场上通用的光模块,用于高速信号传输。MA703FA开发板具有4对GTP,其中2对用于SFP接口。

使用一根SFP线,两端分别插入两个屏蔽笼中。

两个光模块各有一个RX与TX,实际连接了两个GTP,如图:
经过长时间测试,可以发现Errors一直为0,这代表,测试过程中没有出现任何误码,这说明板级层面的GTP硬件工作稳定。
图中使用的测试数据是7bit的伪随机序列,使用其他类型数据,同样无error。

可以使用高速收发器实现数据传输

使用眼图分析: 上面的是使用1.25Gbps传输速率测试结果,更换为6.25Gbps,眼图如下:

眼图中间的蓝色区域越大,GTP所对应的PCB高速电路的信号完整性越好。
原因:信号的频率越高,在传输过程中的损耗越大,上下沿越来越平缓,方波会变得越来越像正弦波,眼图也会“睁得”越来越小。

整体思路

  1. 首先通过上面的利用IBERT进行GTP信号眼图测试实验,确定可以使用高速收发器实现数据传输;

  2. 通过后续实验,实现数据传输可控,先自行设计数据来模拟AD采集模块的数据输入,传输想要传输的数据;

  3. 将AD采集模块装上板子,SFP插入同一个板子的屏蔽笼,把采集到的数据传输出去再自己接受回来。


本文章使用limfx的vscode插件快速发布