zynq-7000系列基於zynq-7015的vivado初步設計之linux下控制PL擴展的光以太網(1000BASE-X)

 zynq-7000系列基於zynq-7015的vivado初步設計之linux下控制PL擴展的以太網(1000BASE-X)

                           

                      作者:盧浩  

                                     時間:2017.2.13

                                    轉載請註明出處

                                                                 嵌入式愛好者開發羣:122879839

打開vivado,基於zynq-zed工程,添加IP->AXI 1G/2.5G ETHERNET SUBSYSTEM。雙擊IP模塊,選擇1000BASE-X。如下圖:

在zynq模塊上把hp0選中,如下圖:



千兆光IP的中斷用zynq的IRQ_F2P的中斷,記得把MM2S S2MM中斷與IRQ_F2P連接,另外MGT_CLK的時鐘由底板外部差分時鐘提供,另外需要添加axi_interconnect IP.然後用自動連接,模塊就生成了。

如下圖:



由於工程太大,沒法截圖完整,我把最重要的部分截出來了。

接下來就是綜合,配置引腳,最後生成bit文件,這些流程和之前擴展GPIO UART是一樣的。

BIT文件生成之後,export hardware,launch sdk,生成FSBL,生成BOOT.bin,生成DTS文件,這些步驟在上篇文章都講過。

這裏需要重點講一下,在內核配置部分,需要添加axi ethernet驅動的支持。

配置如下:

CONFIG_ETHERNET
CONFIG_NET_VENDOR_XILINX
CONFIG_XILINX_AXI_EMAC
CONFIG_XILINX_PHY (For testing SGMII/1000Base-x Configuration with PCS/PMA Core)

生成的網卡dts描述信息:

axi_ethernet_2: ethernet@41080000 {
axistream-connected = <&axi_ethernet_2_dma>;
axistream-control-connected = <&axi_ethernet_2_dma>;
clock-frequency = <100000000>;
clock-names = "ref_clk";
clocks = <&clkc 0>;
compatible = "xlnx,axi-ethernet-1.00.a";
device_type = "network";
interrupt-parent = <&intc>;
interrupts = <0 54 4>;
phy-handle = <&phy1>;
phy-mode = "sgmii";
reg = <0x41080000 0x40000>;
xlnx = <0x0>;
xlnx,axiliteclkrate = <0x0>;
xlnx,axisclkrate = <0x0>;
xlnx,phy-type = <0x5>;
xlnx,phyaddr = <0x1>;
xlnx,rable = <0x0>;
xlnx,rxcsum = <0x0>;
xlnx,rxmem = <0x1000>;
xlnx,txcsum = <0x0>;
axi_ethernet_2_mdio: mdio {
#address-cells = <1>;
#size-cells = <0>;
phy1: phy@1 {
device_type = "ethernet-phy";
reg = <1>;
};
};
};


在linux下啓動,可以看到如下的log:

xilinx_axienet 41080000.ethernet: TX_CSUM 0
xilinx_axienet 41080000.ethernet: RX_CSUM 0
libphy: Xilinx Axi Ethernet MDIO: probed


xilinx_axienet 41080000.ethernet eth3: Link is Down
xilinx_axienet 41080000.ethernet eth3: setting Axi Ethernet mac speed 1000BASEX
xilinx_axienet 41080000.ethernet eth3: Link is Up - 1Gbps/Full - flow control off
xilinx_axienet 41080000.ethernet eth3: setting Axi Ethernet mac speed 1000BASEX
IPv6: ADDRCONF(NETDEV_CHANGE): eth3: link becomes ready

下面我們來測試一下性能,


Client connecting to 172.28.96.61, TCP port 5001
TCP window size:  320 KByte (WARNING: requested 1.00 MByte)
------------------------------------------------------------
[  3] local 172.28.96.19 port 46392 connected with 172.28.96.61 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0- 1.0 sec  69.9 MBytes   586 Mbits/sec
[  3]  1.0- 2.0 sec  66.9 MBytes   561 Mbits/sec
[  3]  2.0- 3.0 sec  66.9 MBytes   561 Mbits/sec
[  3]  3.0- 4.0 sec  66.8 MBytes   560 Mbits/sec
[  3]  4.0- 5.0 sec  66.8 MBytes   560 Mbits/sec
[  3]  5.0- 6.0 sec  66.6 MBytes   559 Mbits/sec
[  3]  6.0- 7.0 sec  66.9 MBytes   561 Mbits/sec
[  3]  7.0- 8.0 sec  66.5 MBytes   558 Mbits/sec
[  3]  8.0- 9.0 sec  66.8 MBytes   560 Mbits/sec
[  3]  9.0-10.0 sec  66.8 MBytes   560 Mbits/sec
[  3]  0.0-10.0 sec   671 MBytes   563 Mbits/sec


千兆網卡在TCP下測試的性能是560Mb/s,速度還行,基本上能滿足大部分用戶的需求。


          

 
發佈了41 篇原創文章 · 獲贊 8 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章