天天看点

分析以太网帧结构_100G以太网接口调试初体验

分析以太网帧结构_100G以太网接口调试初体验

是的,标题没有多敲一个“0”,明人不说暗话,就是在FPGA上实现100G以太网接口设计。

正好参与了实验室某项目中的100G接口的调试,早想写个专栏文章了,由于调试过程中发现了一些硬件问题,导致迟迟没有往前推进,现在问题解决了之后可以简单分享一下100G以太网接口的调试初体验了~

(好像DDR4读写测试系列文章还没搞完 )

这篇初体验暂时不分多个章节了,基本设计流程与之前发布的“10G以太网接口”系列文章一致,忘了的可以下戳链接查看

十二点过九分:10G以太网接口(一):基本知识​zhuanlan.zhihu.com

分析以太网帧结构_100G以太网接口调试初体验

十二点过九分:10G以太网接口(二):接口的基本结构​zhuanlan.zhihu.com

分析以太网帧结构_100G以太网接口调试初体验

十二点过九分:10G以太网接口(三):IP核的配置​zhuanlan.zhihu.com

分析以太网帧结构_100G以太网接口调试初体验

十二点过九分:10G以太网接口(四):测试与使用​zhuanlan.zhihu.com

分析以太网帧结构_100G以太网接口调试初体验
本次调试中采用:FPGA硬件平台为搭载ZU19EG芯片自制板子,硬件开发平台为XIlinx的Vivado 2019.2,网络测试平台为Spirent的TestCenter。

调试内容

由于实验室某项目所设计制作的板子上有4*100G以太网接口,所以此次分享的就是测试板子上的四个100G以太网接口的功能。

调试具体内容为:
  • 利用XIlinx提供的IBERT工具测试每个100G网口对应的4路GTY收发器的收发性能,观察眼图等;
  • 利用Xilinx提供的100G以太网相关的IP核进行以太网接口的设计,简单设计一个自环工程;
  • 利用Spirent的网络测试仪(可支持100G以太网测试)对设计的接口进行打流测试,通过不断设置不同的数据包和发送速率等,观察测试仪的收发情况,以判断设计的100G以太网接口性能是否良好。

其中所使用的设计和测试方法与之前的10G以太网接口的设计与测试基本一致,可以参考其流程,IBERT测试不再说明,忘记的可以详见下面的文章 。

十二点过九分:在开始高速接口前,我们来试试IBERT测试吧!​zhuanlan.zhihu.com

分析以太网帧结构_100G以太网接口调试初体验

IP配置

本次100G以太网接口的调试中采用的IP为

UltraScale+ 100G Ethernet Subsystem

,其手册为

PG203

,对于IP的结构等内容可以详见手册,本部分只分享其配置部分和IP核例化后的接口信号等。

值得注意的是,在使用这个IP之前,需要先去Xilinx官网

申请这个IP的License

,这里默认都有License了。

新建工程不必多讲,直接到IP Catalog里找100G的Ethernet Subsystem,如下图所示。

分析以太网帧结构_100G以太网接口调试初体验

在IP Catalog 里选择“UltraScale+ 100G Ethernet Subsystem”IP Core

接下来就是该IP的各项定制界面,具体可以参考PG203,首先是General界面,如下两张图所示。

分析以太网帧结构_100G以太网接口调试初体验

General 界面1

分析以太网帧结构_100G以太网接口调试初体验

General 界面2

在General界面中,值得注意的是:

  • Physical Layer中根据自身条件设置:比如是采用10*10G构成的100G则选择CAUI10、若是4*25G构成的100G则如图选择,另外收发器参考时钟与板子提供的一致,这里选择161.1328125MHz,Uer Interface选择AXIS(也可以选择LBUS,如果熟悉的话);
  • 其他选择根据需求选择,笔者是没有勾选流控制和RS-FEC(后面会说原因),没有选择AXI-Lite作为配置信号的总线协议。

接下来是Control/Pause Packet Processing 界面,如下图所示,由于前面已经勾了相关选项了,所以这里都没用到。

分析以太网帧结构_100G以太网接口调试初体验

Control/Pause Packet Processing 界面

接下来是CMAC/GT Selection and Configuration 界面1,如下两幅图所示。

分析以太网帧结构_100G以太网接口调试初体验

CMAC/GT Selection and Configuration 界面1

分析以太网帧结构_100G以太网接口调试初体验

CMAC/GT Selection and Configuration 界面2

在CMAC/GT Selection and Configuration 界面中,这一页基本保持默认选项,值得注意的是:

  • Shared Logic选择Core,这里在专栏之前的文章有介绍;
  • 其他保持默认,但是也可以根据自定义勾选,如果设计的板子在信号完整上有问题的话,可以勾选RX均衡等用于改善信号等。

最后是RS-FEC Transcode Bypass 界面,如下图所示。

分析以太网帧结构_100G以太网接口调试初体验

RS-FEC Transcode Bypass 界面

大概完成上面内容的基本配置,就直接生成IP就好了。

根据习惯不同,使用IP的方法也不大一样,如果对该IP不大熟悉的话,依旧可以在生成IP后在其上右键“Open Example Design”打开一个Xilinx提供的示例工程,然后在这个示例工程上,根据自己的需求进行修改,作为一个

翻译大师

连线狂魔

,笔者选择自行连线。

例化这个IP可以看到诸多的信号线,便于理解和使用期间,笔者简单将其分类和注释,如下多张图所示。

分析以太网帧结构_100G以太网接口调试初体验

100G IP 例化接口信号1

分析以太网帧结构_100G以太网接口调试初体验

100G IP 例化接口信号2

分析以太网帧结构_100G以太网接口调试初体验

100G IP 例化接口信号3

分析以太网帧结构_100G以太网接口调试初体验

100G IP 例化接口信号3

上面的信号中还缺少Tx端和Rx端的数据统计信号线,由于都是输出信号以及信号太多太长,并且暂时没有用到均不予以截图了,望知。

工程结构

当然,上面只是例化了IP,为了完成对4*100G接口的测试还需要在工程中完善其他部分。

首先,测试四个100G口,那么需要例化四个IP;

其次,要自环测试的话,需要把IP的Tx数据接口与Rx数据接口相连接,才能做到自发自收,鉴于二者接口略有不同,需要接一级FIFO做跨时钟域和数据缓存操作;

然后,为了设计的接口在日后能直接用于使用,还需要引出一个全局时钟作为对接收到的以太网数据做处理时钟;

最后,将上述各项内容“怼一块”,就得到了下图所示的工程结构图。

分析以太网帧结构_100G以太网接口调试初体验

工程结构框图

之后就是写各类约束xdc了,包括引脚约束和时序约束等。

弄完上述这些之后就跑综合、布局布线和生成bit文件等,确保时序没啥问题且能生成bit后就直接下板子即可。

100G自环测试

接下来是自环测试,笔者使用的是Spirent的网络测试仪,使用的是其提供的测试模块FX3-100GQ-T2,如下图所示,最高可支持100G以太网测试。

分析以太网帧结构_100G以太网接口调试初体验

Spirent 网络测试仪

至于TestCenter软件的使用,这里不再说明,可以详询其技术客服或者其提供的资料或help(如下图)等。

分析以太网帧结构_100G以太网接口调试初体验

Spirent TestCenter Help 界面

笔者在调试100G以太网接口前看到过一篇文章说在客制化IP时需要勾上RS-FEC选项[1],不然在使用网络测试仪连接设计的接口时连接不上,实际测试中发现,其实配置IP时不勾上也没关系,只要在使用TestCenter软件时设置网络测试仪100G端口时也去掉就行了,

如下图所示

,去掉这两个选项后,就会发现有Link(绿灯亮了)。不过,两者都勾上也可以,毕竟这个IP支持这个纠错码也有利于降低连接器件的成本等。

分析以太网帧结构_100G以太网接口调试初体验

测试仪100G端口设置

测试部分其实没啥好讲的了,就是使用TestCenter的软件编辑各类测试的数据流,设置好数据发送各项模式速率后,直接打流到FPGA板子上即可,笔者对于测试仪的使用也仅限于此,更高级的功能也没怎么使用过了。

那怎么知道设计的接口的性能呢?

首先,在TestCenter上观察是否有Link(亮灯),如果能连接上,那么就已经成功一大半了,之前由于调试的板子的硬件问题搞了好久才Link;

其次,对FPGA板子打流操作后,可以观察TestCenter的首发情况,比如收发的以太网数据帧帧数是否一致,是否有错帧,错帧的类型是什么,捕捉接收到的数据帧(可以是TestCenter上的,也可以是Vivado加Debug信号触发的)是否和想要的一致;

最后,可以尝试一些更严苛的测试,比如长时间测试其稳定性和准确性等(当然,这是我瞎测试的,不一定要这么做)。

测试结果如下图所示,多番测试下,大概最高可到99.999Gbps收发情况下无丢帧错帧,单口跑不满100Gbps,其他一些文章所推测是由于时钟有一定的偏差所导致的,不过基本影响不大,

一般使用能用满100Gbps?
分析以太网帧结构_100G以太网接口调试初体验

Spirent TestCenter 测试结果

分析以太网帧结构_100G以太网接口调试初体验

Vivado ILA抓取的Rx数据

注意事项

  • 需要 财力雄厚 ,因为既需要有 支持100G以太网 接口的FPGA板子(具有4个GTY或10个GTX收发器以上),又需要有 支持100G以太网测试 的网络测试仪(国产或者洋货都无所谓);
  • 使用IP设计前需要 申请该IP的License ,具体申请方法可详见网上教程;
  • 对于AXIS数据接口熟悉的可使用 Vivado 2019 以上的进行开发,因为Vivado之前版本的数据接口只有LBUS总线接口(对于不熟悉的人来说可能比较复杂);
  • 该IP较为复杂,各类信号线很多,如果有更高需求要 详细翻阅手册
  • 如果有一块板子(比如 KCU116 )只有四个25G(4*SFP28)的接口,也可以设计100G接口,前提是有一根 100G(QSFP28)转4*25G(4*SFP28)的转接线 ,然后在FPGA端使用上述同样的IP设计,引脚根据顺序约束好即可,不过切记转接线连接要按照顺序连,不然会没有Link;
  • 网络测试仪与FPGA板上的100G以太网接口的连接可以使用100G光模块( 稍微有点贵 ),也可以使用电缆( 省钱 ),反正能插得上能连接就行;
  • 如果硬件板在设计过程中,100G使用的四组收发器收与发的顺序不对应的话(例如Rx为1234,而Tx为1324或者其他),只要在引脚约束时按照Rx正确顺序对应的引脚约束就好,不用管Vivado自动根据Rx进行Tx的引脚约束(这个可能讲的有点乱,大概是这个意思),实测这么操作是可以成功使用接口的。
  • 其他注意事项想到再说

作为初体验也就简单的分享上面这么多了,总结就是无论是10G的还是100G以太网,接口设计这东西就这么回事,拿个IP Core一搭就完事了,如果要再做更上层协议上的东西,那就各凭本事了。

当然,我还是个蔡鸡,还要继续学习一个。如果有老哥也做这方面东西的可以交流研究 ,如果文中有啥不足之处还望指正~

参考

  1. ^100G以太网光口的FPGA测试实例 https://mp.weixin.qq.com/s/PqaZt487zU0LmJ05U_ZHsQ