1. 项目背景与硬件平台介绍
最近在做一个基于AC7Z020的开发项目,需要用到KSZ9031这颗千兆以太网PHY芯片。说实话,刚开始觉得应该挺简单的,毕竟Zynq的PS端自带了以太网控制器,LwIP库也是现成的。但实际动手才发现,事情没那么简单——官方SDK里的LwIP驱动根本不认识KSZ9031这颗芯片!
AC7Z020是Xilinx Zynq-7000系列的一款FPGA+ARM架构芯片,内部集成了双核Cortex-A9处理器和可编程逻辑单元。KSZ9031则是Microchip(原Micrel)的一款千兆以太网PHY芯片,支持RGMII接口。这种组合在工业控制和嵌入式网络设备中很常见,但官方驱动库通常只支持常见的PHY芯片,遇到KSZ9031这种就需要自己动手改造了。
我用的开发环境是Vivado 2017.4和配套的SDK,这个版本虽然有点老,但稳定性不错,很多企业项目还在用。如果你用的是更新的版本,基本思路是一样的,只是文件路径可能稍有不同。
2. 硬件工程创建与配置
2.1 创建Vivado工程
首先打开Vivado,创建一个新的RTL工程。工程类型选择RTL Project,记得勾选"Do not specify sources at this time",因为我们后面会通过Block Design来配置系统。
芯片选择很关键,要选xc7z020clg400-2,这是AC7Z020的具体型号。clg400表示封装类型,400个引脚,这个参数必须匹配,否则后续引脚分配会出问题。
创建完工程后,直接创建Block Design,这是Zynq平台的核心设计方式。在Diagram窗口中点击"Add IP",搜索ZYNQ7 Processing System,添加PS核。
2.2 PS端以太网配置
双击添加的ZYNQ7 IP核进入配置界面,这里有几个关键设置需要注意:
在PS-PL Configuration页面,找到GP Master AXI Interface,取消勾选M_AXI_GP0接口。因为我们要用的是PS端内置的以太网控制器,不需要通过AXI总线扩展,这样可以节省PL资源。
在Peripheral I/O Pins配置中,找到Bank1 I/O Voltage,设置为LVCMOS 3.3V。这个电压要匹配你的板子实际电平,如果设错了可能会烧坏PHY芯片。
接下来配置以太网:在MIO Configuration中找到Ethernet 0,勾选Enabled,然后选择MIO接口范围16-27。这些引脚用于RGMII接口的数据和控制信号。MDIO管理接口需要单独配置,设置MDIO到MIO 52-53,其中52是MDIO数据线,53是MDC时钟线。
2.3 时钟与DDR配置
在Clock Configuration中,确保Ethernet 0的时钟源正确设置。通常使用PS端内部的时钟生成器,频率设置为125MHz,这是千兆以太网的标准参考时钟。
DDR配置很重要,关系到系统稳定性。选择MT41J256M16 RE-125,这是美光的DDR3芯片型号,容量为512MB。时序参数保持默认即可,Vivado会自动生成正确的控制器配置。
所有这些配置完成后,点击OK保存设置。回到Block Design界面,点击"Run Block Automation",让Vivado自动完成剩余连接。然后右键点击设计选择"Create HDL Wrapper",生成顶层的HDL封装文件。
3. 生成比特流与导出硬件
硬件配置完成后,需要生成比特流文件。在Flow Navigator中选择Generate Bitstream,Vivado会自动执行综合、实现和比特流生成过程。这个过程可能需要十几分钟到半小时,取决于电脑性能。
比特流生成成功后,最重要的


274

被折叠的 条评论
为什么被折叠?



