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架构

image
注意: Si570产生的时钟通过USER_MGT_CLOCK输入到系统中
image
如果使用默认的Si570的输入, 会导致IP核并不运行, 具体表现为demo工程中的状态指示灯不会点亮.

ZYNQMP核设置

创建工程时, 从ZCU111开发板创建, 包含了默认的ZYNQMP核的配置, 下面记录了需要更改的配置

接口设置

image

  • 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模式)
    independent_clock_bufg 时钟速率

PS-PL交互设置

image

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

image

  1. 使用SFP-DAC线与主机SFP接口直连(不知道为什么1000Base-T的接口无法正常工作,请看 @SFP网口调试sgmii)
  2. 使用跳线帽短接zSFP0_Disable
  3. 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

image

内核启动

image
其中的 unable to generate target frequency: 125 MHz 是由于ps输入时钟非125MHz的整数关系, 所以时钟有误差, 可以忽略.

互ping测试

与主机设置相同网段的IP即可测试网络.
右侧: 主机 192.168.30.2
左侧: zynqmp 192.168.30.100
image

posted @ 2021-06-15 16:23  ArtisticZhao  阅读(2316)  评论(0编辑  收藏  举报