ZCU111/ZynqMP/Zynq ultrascale+ RFSoC/MPSoC 调试SFP网口1000BASE-X(DAC)
参考内容
https://github.com/Xilinx-Wiki-Projects/ZCU102-Ethernet
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/478937213/MPSoC+PS+and+PL+Ethernet+Example+Projects#Using-PS-GEM-through-EMIO
PL与PS架构
注意: Si570产生的时钟通过USER_MGT_CLOCK
输入到系统中
如果使用默认的Si570的输入, 会导致IP核并不运行, 具体表现为demo工程中的状态指示灯不会点亮.
ZYNQMP核设置
创建工程时, 从ZCU111开发板创建, 包含了默认的ZYNQMP核的配置, 下面记录了需要更改的配置
接口设置
- GPIO中使能EMIO
- 使用GEM0驱动器, 输出到EMIO中
- 取消ZCU111工程默认使能的接口, 包括URAT1
时钟设置
- Output clk → LPD clk → PL Fabric clk 设置向PL输出时钟为50MHz(这个时钟为1G/2.5G Ethernet PCS/PMA or SGMII提供独立时钟, 如下图不同的independent_clock_bufg对应IP工作在1G模式或者2.5G模式)
PS-PL交互设置
Hardware工程
主要参考下面这个工程
https://github.com/Xilinx-Wiki-Projects/ZCU102-Ethernet/tree/main/2019.1/ps_emio_eth_1g
Block Design
照抄demo工程即可, 因为IP生成需要根据rfsoc的型号, 所以并不可以直接改变demo工程的芯片型号.
约束
# sfp0 zcu111
set_property PACKAGE_PIN Y35 [get_ports sfp_txp]
set_property PACKAGE_PIN Y36 [get_ports sfp_txn]
set_property PACKAGE_PIN AA38 [get_ports sfp_rxp]
set_property PACKAGE_PIN AA39 [get_ports sfp_rxn]
set_property PACKAGE_PIN G12 [get_ports {sfp_tx_dis[0]}]
set_property IOSTANDARD LVCMOS18 [get_ports {sfp_tx_dis[0]}]
# gt clk
set_property PACKAGE_PIN V31 [get_ports gtrefclk_in_clk_p]
set_property PACKAGE_PIN V32 [get_ports gtrefclk_in_clk_n]
create_clock -name gt_ref_clk -period 6.4 [get_ports gtrefclk_in_clk_p]
set_property IOSTANDARD LVCMOS18 [get_ports *_led]
set_property PACKAGE_PIN AR13 [get_ports xcvr_rst_done_led]
set_property PACKAGE_PIN AP13 [get_ports {link_status_led[0]}]
set_property PACKAGE_PIN AR16 [get_ports {link_sync_led[0]}]
set_property PACKAGE_PIN AP16 [get_ports {pcs_clk_led[0]}]
set_property PACKAGE_PIN AN16 [get_ports {pl_reset_led[0]}]
set_property PACKAGE_PIN AN17 [get_ports {mdc_clk_led[0]}]
set_property PACKAGE_PIN AV15 [get_ports {gmii_rx_clk_led[0]}]
几点说明:
gtrefclk_in
需要配置到专用输入上, 见第一章set_property IOSTANDARD LVCMOS18 [get_ports *_led]
这是一个小技巧, 这样就不用每一个led都写电平约束了.- xdc文件不支持行尾注释, 所有注释必须独占一行!!!
Petalinux工程
使用ZCU102工程默认的即可. 但是需要导入ZCU111的HDF,如果是自己创建的project,需要将demo工程的project-spec merge
到新的工程里面!!
petalinux-config --get-hw-description <path-to-sdk>
petalinux-build
测试
debug leds
- 使用SFP-DAC线与主机SFP接口直连(不知道为什么1000Base-T的接口无法正常工作,请看 @SFP网口调试sgmii)
- 使用跳线帽短接
zSFP0_Disable
- leds
LED[n] | LED Name | Status |
---|---|---|
LED7 | gmii_rx_clk_led | 快速闪烁 |
LED6 | mdc_clk_led | 慢速闪烁 |
LED5 | pl_reset_led | 长灭 |
LED4 | 长灭 | |
LED3 | pcs_clk_led | 快速闪烁 |
LED2 | link_sync_led | 常亮 |
LED1 | link_status_led | 常亮 |
LED0 | xcvr_rst_done_led | 常亮 |
启动u-boot
内核启动
其中的 unable to generate target frequency: 125 MHz
是由于ps输入时钟非125MHz的整数关系, 所以时钟有误差, 可以忽略.
互ping测试
与主机设置相同网段的IP即可测试网络.
右侧: 主机 192.168.30.2
左侧: zynqmp 192.168.30.100