高速接口----使用sfp完成以太网传输

时间:2024-03-26 07:02:23

  最近在做以太网相关的东西,最近参考xapp1082完成了一个通过光口以太网完成数据传输的简单的例子。xapp1082的链接地址如下:xapp1082
  xapp1082所对应的工程需要在xilinx的官网注册账号后进行下载。里面包含了ZYNQ中各种以太网的使用情况。xapp1082中介绍了4中以太网的应用。如下表:

名称 作用
pl_eth_1000basex 使用AXI Ethernet 完成通过sfp完成以太网的使用 协议为1000BaseX
pl_eth_sgmii 使用AXI Ethernet完成通过sfp完成以太网的使用,接口协议为sgmii
ps_emio_1000basex 使用EMIO将GEM引出到PL端完成以太网的使用,协议为1000BaseX
ps_emio_sgmii 使用EMIO将GEM引出到PL端完成以太网的使用,协议为sgmii

  我在实现的时候,参照pl_eth_1000BaseX完成了使用sfp来完成以太网使用,在SDK下可以运行一个lwip,在linux下也可以正常地使用光口以太网。

创建工程

  参照xapp1082里面建立一个工程,其中AXI Ethernet 这个IP需要选择模式为1000BaseX,其他地选项保持默认即可。然会对这个AXI 1G/2.5G Ethernet Subsystem进行自动连线,系统会自动地添加一个AXI DMA IP,然后剩下的自动连线就可以差不多可以完成这个工程的创建,具体可以参照xapp1082里面的内容。
高速接口----使用sfp完成以太网传输
最终的连线结果如下图所示:
高速接口----使用sfp完成以太网传输

创建SDK工程

  在SDK中创建一个简单的带宽测试程序就可以来验证sfp的功能的正确性。在main函数当中需要进行简单的修改,由于这个xapp1082里面官方使用开发板是ZC706,ZC706上有有一个可编程的晶振,这个晶振会提供给系统一个125MHz的参考时钟,也就是高速收发器的参考时钟。在示例的lwip的模板当中,上电的时候,程序会对外部晶振进行配置。在自己实现的时候,只需要将其中的这两个函数注释掉进行了。
高速接口----使用sfp完成以太网传输

实验结果

  需要使用一个光电转换模块来连接以太网,连接完成后,运行iperf这个软件就能来测试带宽了。
高速接口----使用sfp完成以太网传输
  在SDK中启动应用程序,并将bit文件下载到FPGA内部之后,就可以看到串口打印如下信息。
高速接口----使用sfp完成以太网传输
  这时候使用串口提示的信息,就可以来进行带宽的测试。在命令行中,跳转到包含iperf软件的目录下,然后运行串口终端提示的命令。

高速接口----使用sfp完成以太网传输
高速接口----使用sfp完成以太网传输
  从测试结果来看,运行一个TCP 的协议栈以太网的速度能够达到560Mbit。

petalinux

  在petalinux中完成这个实验就很简单,按照xilinx wiki上的东西就可以了,Wiki的地址在这里:xapp1082 Wiki
  根据Wiki上面的指示,在内核中需要更改如下内容:
简单来说就是使能Xilinx的PHY,取消Xilinx AXI DMA Engine。
高速接口----使用sfp完成以太网传输
  在设备树当中,只需要添加简单的设备就行了
高速接口----使用sfp完成以太网传输
  然后编译就可以生成完成petalinux的创建,再将生成好的image拷贝到SD中启动就可以了。

参考:


xapp1082
xapp1082 wiki