文章目录
前言一、硬件设计1.创建 Block Design2.配置 1G/2.5G Ethernet PCS/PMA or SGMII 核3.配置PS端4.连接PS端和1G/2.5G Ethernet PCS/PMA or SGMII5.添加约束并生成硬件比特流文件二、在Petalinux中验证1.导入硬件文件2.编译后启动前言
项目最近要用芯片的GTH高速收发器进行通讯,还必须要到1Gbps以上的速率,只能用一个GTH收发器。最开始想着是用 AXI DMA + Aurora 8b10b 这俩IP核,用Petalinux做PS端系统。后来发现因为没折腾过这个东西,做起来太麻烦了。
偶然发现 1G/2.5G Ethernet PCS/PMA or SGMII 这个IP核正好能满足需求,而且因为是走千兆以太网,不仅满足之前的速率要求,还利于后续系统开发。
但是这以太网物理层配置的时候还是踩了不少坑,所以单独拿出来说说。
注:以下是本篇文章正文内容,下面案例仅供参考
一、硬件设计
1.创建 Block Design
并在 Block Design 中添加 Zynq 的 PS 端内核1,和1G/2.5G Ethernet PCS/PMA or SGMII IP核。其中如果你同样也是官方支持的开发板,建议点击上方“自动配置开发板”,这会自动设置你的 Zynq 的 PS 端内核,减少后期工作量。
2.配置 1G/2.5G Ethernet PCS/PMA or SGMII 核
Board 页面是用于官方支持的开发板自动配置,如果没有该页面,不影响使用。在我的项目中是设置外部时钟的输入,本文不需要用到,故设置为自定义。
Ethernet MAC 页面是设置MAC层,本文使用的是PS端的MAC层。另一个选项是和 Tri-Mode Ethernet MAC IP核配合使用的。
Standard 页面用于设置网口标准,本文使用光口作为网络接口,所以选择1000BASEX标准,如果你使用RJ-45千兆网口,亦或是需要转换成RGMII等信号,请选择SGMII或BOTH。
Core Functionality页面用于配置输出接口,根据自己的硬件设备进行选择。本文使用的Zynq系列有GT高速接口,配置时要注意参考时钟和GT收发器位置的设置。
Shared Logic 页面设置逻辑核共享,如果有多个IP核,可以由其中一个当做主核,其余分享主核逻辑,这样可以节省硬件资源。本文仅有一个核,所以选择包含共享内核。
3.配置PS端
PS端其余部分请根据自己的板子进行配置,本文只对以太网接口进行配置。在I/O配置界面,选择需要使用的网口,并打开MDIO接口,同时选择引脚为EMIO。
[可选] 在时钟配置界面,修改输出时钟为50MHz,方便后续时钟配置。也可根据自己需求选择。
4.连接PS端和1G/2.5G Ethernet PCS/PMA or SGMII
除此之外还需要对 1G/2.5G Ethernet PCS/PMA or SGMII 的输入接口进行配置。根据官方IP核的文档PG4072 。
首先是phyaddr[4:0],是当两个PHY设备被连接到MDIO总线上。每一个都需要有一个不同的物理地址,为了给预定的PHY寻址用。该值必须为常数,且地址不能为03,否则后续设备树中无法识别。
configuration_vector 和 an_adv_config_vector 分别用于配置内核和自动速率协商功能,同样可以在PG047找到相应的配置表格。在MDIO启用后,会以MDIO的配置为准。若需要强制配置,可以将configuration_valid和an_adv_config_val信号线提供上升沿。an_restart_config 用于初始化时配置有效,也是上升沿有效的信号。本文中这些信号都不需要用到,所以全部配置成 0 。并使用VIO核(虚拟I/O接口)用于JTAG调试的时候可以方便调整数值进行配置。
reset 通过非门与系统复位输出相连,signal_detect 连接到一个光学模块,以检测光的存在。逻辑1表示光学模块正确地检测到了光;逻辑0表示有故障,如果没有连接任何模块,信号必须是逻辑1。本文直接设置为逻辑1,来保证模块永久运行。
最终的BD如下:
5.添加约束并生成硬件比特流文件
右键BD,由BD生成顶层设计。
一键二连!然后打开lmplemented Design,在里面对输入的时钟引脚进行约束。记得保存!
一键三连!
导出硬件文件,记得包含比特流文件
二、在Petalinux中验证
1.导入硬件文件
使用命令
petalinux- config -- get-hw- description <*.xsa>
在配置目录中,可以看到选择的网卡
Subsystem AUTO Hardware Settings → Ethernet Settings→ Primary Ethernet (psu_ ethernet 0)
2.编译后启动
开机后在载入Linux内核前,会发现自动给网卡分配MAC地址,如果没有分配而显示找不到网卡,大概率是网卡没有正常启动。(写文章的时候开发板暂时不在身边没有图片,以后想起来再补上)
如果你是 ZYNQ7000 系列,将会与本文有区别 ↩︎
pg047-gig-eth-pcs-pma ↩︎
说实话我也没搞明白到底是几,手册上说只是0不可以,但是我后来发现1也不能识别,最终我换到了9才能正常调通。 ↩︎