前言
上一篇博文中实验了PS端移植LwIP库的演示程序。本篇接下来基于Vivado17.4整理比较详细的PL端移植过程。
一、Vivado 工程建立
1、新建一个空工程,名称为net_lwip_pl。
2、FPGA芯片选择xc7z100ffg900-2。
二、配置PS&PL系统硬件
1、工程建好以后,接下来要配置PS与PL两端的系统硬件,这样我们可以借助串口和APU核通过PL端连接的网络IP接通网络。首先单击左侧导航栏的Create Block Design建立图形文件取名top,单击OK。
2、在图形文件中单击+号,在搜索栏输入zynq找到PS端的IP核
3、双击添加ARM核的IP。
4、双击IP核进入配置界面,因为从PL端建立网络连接,所以需要AXI总线扩展。首先使能GP0和HP0
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、搜索“eth”,添加一个“AXI 1G/2.5G Ethernet Subsystem”
12、双击刚才添加的模块,修改参数,物理接口选择“RGMII”,其他参数默认
13、单击自动运行生成其它附属IP
14、弹出窗口勾选全部选项,单击OK
15、单击自动连接生成端口引脚
16、弹出窗口勾选全部选项,单击OK
17、处理中断连接,搜索“conc”添加“Concat”
18、双击刚添加的模块,修改端口数量为“4”
19、将 4 个中断信号连接起来汇成总线
20、然后和 ZYNQ 的“IRQ_F2P”接口相连
21、处理以太网模块参考时钟,以太网模块需要一个 200Mhz 时钟和一个125Mhz 时钟,我们修改为通过外部 200Mhz 的晶振输入然后通过 PLL 模块,选择“axi_ethernet_0_refclk”的“clk_in1”引脚,右键单击
22、选择“Disconnect Pin”
23、双击“axi_ethernet_0_refclk”修改时钟输入频率为 200Mhz,Source 选择差分
24、然后右键单击“clk_in1”引脚选择“Make External”
25、修改“axi_ethernet_0_refclk”的"clk_in1 的端口名称为“sys_clk”
26、修改其他端口的名称
27、至此PL端开通网络的系统硬件配置完毕。通过Create HDL Wrapper将原理图工程转换为Verilog顶层工程
三、编辑管脚约束文件
1、PL端的引脚需要指明连接,所以右击并新建约束文件,文件名称为top.xdc
2、双击打开top.xdc文件,添加约束内容如下:
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]
set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property CFGBVS VCCO [current_design]
set_property BITSTREAM.CONFIG.UNUSEDPIN PULLUP [current_design]
############## clock define##################
create_clock -period 5.000 [get_ports sys_clk_clk_p]
set_property PACKAGE_PIN F9 [get_ports sys_clk_clk_p]
set_property IOSTANDARD DIFF_SSTL15 [get_ports sys_clk_clk_p]
set_property PACKAGE_PIN B14 [get_ports {
mdio_mdc }]
set_property PACKAGE_PIN A14 [get_ports {
mdio_mdio_io }]
set_property PACKAGE_PIN B15 [get_ports {
phy_rst_n }]
set_property PACKAGE_PIN E13 [get_ports {
rgmii_rxc }]
set_property PACKAGE_PIN D13 [get_ports {
rgmii_rx_ctl }]
set_property PACKAGE_PIN F15 [get_ports {
rgmii_rd[0] }]
set_property PACKAGE_PIN F14 [get_ports {
rgmii_rd[1] }]
set_property PACKAGE_PIN E12 [get_ports