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"。
系统框图和信号流
例程运行结果
- 需要9.2k LUT6, 占了zynq7010大约50%资源。需要2个MMCM,用完了zynq的资源。
- sdk直接使用demo例程即可运行,不需要做任何修改,这个与ps_lwip不同。例如lwip echo server或lwip tcp server perf。
- 与电脑网卡连不上,原因不详(后来原因找到了,请往下看)。
- 可以与路由器连,如果是自动协商,结果是100Mbps连接。
- 与路由器连,如果手动设定为固定1000Mbps,并且关闭dhcp,连不上。如果将速度降低为100Mbps,可以连上。
- 与电脑连,如果手动设定为固定100Mbps,并且关闭dhcp,也可以连上。
- 以上说明了一个问题:当发现连不上时,优先需要考虑的手段是,关闭dhcp,并且将速度降低。
上图是手动设置为100Mbps后,与电脑连的情况,可以正确连接。
- 网友可以固定为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点,因为是连的电脑。因此:
- 需要手动设置网速为100Mbps
- 需要注释platfrom_zynq.c文件中如下段落
如果不注释掉,网卡会反复重启。如下所示。
3)运行效果ok
一年之后再次运行该例程(与pc机连),补充说明
1)先用lwip_echo_server模板例程尝试
2)windows的以太网卡,要与开发板保持一致(可以改开发板,也可以改windows。开发板的默认是192.168.1.10)
3)这一段还是要注释
4)lwip设置为100Mbps,关闭dhcp
5)经过以上配置后,可以确保zynq与pc机可以成功通信
ping 192.168.1.10
telnet 192.168.1.10 7