前言
LwIP是Light Weight (轻型)IP协议是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。AX7Z100开发板带有源码和教学视频,但不是AX7Z100开发板的,所以最初移植的时候遇到一些小问题困扰好长时间。因此笔者基于Vivado17.4整理比较详细的移植过程供后面参考。
一、Vivado 工程建立
1、新建一个空工程,名称为net_lwip_ps。
2、FPGA芯片选择xc7z100ffg900-2。
二、配置PS系统硬件
1、单击左侧导航栏的Create Block Design建立图形文件取名top,单击OK。
2、在图形文件中单击+号,在搜索栏输入zynq找到PS端的IP核
3、双击添加ARM核的IP。
4、双击IP核进入配置界面,因为PS端内嵌有两个以太网控制器不需要AXI总线扩展,所以勾选掉默认的AXI GP0接口
5、网络要通过串口测试,所以在Perioheral I/O Pins中开通串口
6、网络MAC的IP核Enet0需要开通
7、网络MACIP核Enet0控制外接PHY芯片的MDIO接口需要开通
8、以太网控制器采用RGMII工作方式,所以工作电压修改为:LVCMOS 1.8V
9、因为开发板DDR内存与默认不同,所以选择MT41J256M16 RE-125,单击OK退出。
10、单击自动连接生成引脚。
11、至此PS端开通网络的系统硬件配置完毕。但是直接编译原理图工程可能报错,所以通过Create HDL Wrapper将原理图工程转换为Verilog顶层工程
三、编译硬件生成bit文件
1、因为在引入PS端ZYNQ的ARM核过程中系统已经默认在工程文件夹下的/net_lwip_ps.srcs/sources_1/bd/top/ip/top_processing_system7_0_0/top_processing_system7_0_0.xdc文件中自动建立了管脚约束参数,其中包括网卡(Enet0)、串口(Uart0)和DDR的引脚约束,而且黑金开发板跟默认工程项目参数与其一致。所以TOP的项目约束文件可以省略,其它系统另行设置。因此直接编译生成bit文件(等待时间较长)
2、单击File菜单,导出bit文件的硬件信息给SDK应用。
3、导出对话框要勾选bit文件,单击OK。
至此,系统硬件部分bit文件编译导出完成,接下来将进入软件编程环节。
四、SDK程序设计
1、LwIP是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。在PS端跑裸机程序的时候因为没有操作系统所以要借助LwIP连接网络。SDK环境内嵌了LwIP的开发库保存在X:\Xilinx\SDK\2017.4\data\embeddedsw\ThirdParty\sw_services中(X为Vivado安装盘),Vivado17.4版本的SDK内嵌的是lwip141_v2_0。
2、但是在黑金的AX7Z100开发板中,以太网PHY芯片采用了MICREL公司的KSZ9031型号的芯片类型,与系统默认的PHY芯片不一致,所以SDK开发包中的LwIP库需要打补丁。打开lwip141_v2_0文件夹,进入lwip141_v2_0\src\contrib\ports\xilinx\netif文件夹找到xemacpsif_physpeed.c文件。
3、打开xemacpsif_physpeed.c文件在宏定义部分添加PHY芯片的ID信息。
#define PHY_DETECT_REG 1
#define PHY_IDENTIFIER_1_REG 2
#define PHY_IDENTIFIER_2_REG 3
#define PHY_DETECT_MASK 0x1808
#define PHY_MARVELL_IDENTIFIER 0x0141
#define PHY_TI_IDENTIFIER 0x2000
#define PHY_XILINX_PCS_PMA_ID1 0x0174
#define PHY_XILINX_PCS_PMA_ID2 0x0C00
// === Add by Yan