sdk例程:pl_lwip例程(基于AXI 1G 2.5G Ethernet Subsystem) - minichao9901/TangNano-20k-Zynq-7020 GitHub Wiki

AXI 1G/2.5G Ethernet Subsystem这个IP需要申请授权。

有网友分享了我一个破解版的(放在仓库里)。另外也可以到Xilinx官方去申请,我注册了一个账号,申请成功了一个试用版的 ,很容易申请。有License的IP打开后,左下角显示如下,注意关键词"Bought"。

系统框图和信号流

例程运行结果

  1. 需要9.2k LUT6, 占了zynq7010大约50%资源。需要2个MMCM,用完了zynq的资源。
  2. sdk直接使用demo例程即可运行,不需要做任何修改,这个与ps_lwip不同。例如lwip echo server或lwip tcp server perf。
  3. 与电脑网卡连不上,原因不详(后来原因找到了,请往下看)。
  4. 可以与路由器连,如果是自动协商,结果是100Mbps连接。
  1. 与路由器连,如果手动设定为固定1000Mbps,并且关闭dhcp,连不上。如果将速度降低为100Mbps,可以连上。
  2. 与电脑连,如果手动设定为固定100Mbps,并且关闭dhcp,也可以连上。
  3. 以上说明了一个问题:当发现连不上时,优先需要考虑的手段是,关闭dhcp,并且将速度降低。

上图是手动设置为100Mbps后,与电脑连的情况,可以正确连接。

  1. 网友可以固定为1000Mbps测试通过,我的不行。可能跟网线也有关系。

附录:引脚约束

#########################ethernet port######################
create_clock -period 8.000   [get_ports rgmii_rtl_0_rxc]
set_property PACKAGE_PIN K17 [get_ports rgmii_rtl_0_rxc]
set_property PACKAGE_PIN K18 [get_ports rgmii_rtl_0_rx_ctl]
set_property PACKAGE_PIN M17 [get_ports {rgmii_rtl_0_rd[3]}]
set_property PACKAGE_PIN M18 [get_ports {rgmii_rtl_0_rd[2]}]
set_property PACKAGE_PIN K14 [get_ports {rgmii_rtl_0_rd[1]}]
set_property PACKAGE_PIN J14 [get_ports {rgmii_rtl_0_rd[0]}]
set_property PACKAGE_PIN L14 [get_ports rgmii_rtl_0_txc]
set_property PACKAGE_PIN N16 [get_ports rgmii_rtl_0_tx_ctl]
set_property PACKAGE_PIN N15 [get_ports {rgmii_rtl_0_td[3]}]
set_property PACKAGE_PIN M15 [get_ports {rgmii_rtl_0_td[2]}]
set_property PACKAGE_PIN L15 [get_ports {rgmii_rtl_0_td[1]}]
set_property PACKAGE_PIN M14 [get_ports {rgmii_rtl_0_td[0]}]
set_property PACKAGE_PIN J15 [get_ports mdio_rtl_0_mdio_io]
set_property PACKAGE_PIN G14 [get_ports mdio_rtl_0_mdc]
set_property PACKAGE_PIN L19 [get_ports reset_rtl_0]   

set_property IOSTANDARD LVCMOS33 [get_ports rgmii_rtl_0_rxc]
set_property IOSTANDARD LVCMOS33 [get_ports rgmii_rtl_0_rx_ctl]
set_property IOSTANDARD LVCMOS33 [get_ports {rgmii_rtl_0_rd[*]}]
set_property IOSTANDARD LVCMOS33 [get_ports rgmii_rtl_0_txc]
set_property IOSTANDARD LVCMOS33 [get_ports rgmii_rtl_0_tx_ctl]
set_property IOSTANDARD LVCMOS33 [get_ports {rgmii_rtl_0_td[*]}]
set_property IOSTANDARD LVCMOS33 [get_ports reset_rtl_0]
set_property IOSTANDARD LVCMOS33 [get_ports mdio_rtl_0_mdio_io]
set_property IOSTANDARD LVCMOS33 [get_ports mdio_rtl_0_mdc]

自己手动操作要点

  • 非常简单,只需要设置好zynq,然后把AXI 1G/2.5G Ethernet Subsystem和DMA调出来,点击自动连线,vivado一条龙自动全搞定。它会自动添加clock_ip并设置clock频率,会自动添加AXI Interconnect和AXI Smartconnect等。
  • 唯一需要注意的是:需要修改AXI 1G/2.5G Ethernet Subsystem,里面接口配置选择RGMII
  • 另一个需要的注意的是,中断一定要连接。(我第一次做,就是中断忘记了连接 ,没有功能)
  • 在sdk例程中需要注意的有2点,因为是连的电脑。因此:
  1. 需要手动设置网速为100Mbps
  2. 需要注释platfrom_zynq.c文件中如下段落

如果不注释掉,网卡会反复重启。如下所示。

3)运行效果ok