ZYNQ PL通过EMIO ETHE1外接PHY由GMII转RGMII
ZYNQ使用AXI_Ethernet編譯系統擴展多網口:
詳見博客:https://mp.csdn.net/editor/html/104765046
一,硬件簡介
1,3個以太網口,1個在PS,2個在PL;1個PS網口,1個PL網口在LINUX上同時使用,PL的網口掛到EMIO上。
2,從GMII過度到RGMII
GMII:
發送 gmii_tx_clk gmii_tx_d[7:0] gmii_tx_en gmii_tx_er
接收 gmii_rx_clk gmii_rx_d[7:0] gmii_rx_dv gmii_rx_er
RGMII:
發送 tx_clk tx_d[3:0] tx_ctrl
接收 rx_clk rx_d[3:0] rx_ctrl
首先數據總線從時鐘單邊沿采樣8bit轉變為了雙邊沿采樣4bit,從88E1512 Datasheet中時序圖可以直觀看出這一點。RGMII中上升沿發送一字節數據的低四位,下降沿發送剩余的高四位數據。接收端時鐘雙邊沿采樣,因此125MHZ*8bit = 125MHZ*4bit*2 = 1000Mbit/s。至于GMII中的數據有效和數據錯誤指示信號被ctrl信號復用:tx_ctrl在時鐘tx_clk上升沿發送是tx_en,在下降沿發送是tx_en ^ tx_er。rx_ctrl在時鐘rx_clk上升沿接收是rx_dv,在下降沿接收是rx_en ^ rx_er。綜上,RGMII接口引腳數從25個降低到14個。
從上邊的時序圖分析,數據在時鐘的邊沿變化。因此如果不做額外處理,接收端無法穩定采樣。為了解決這一問題,常見的做法是為時鐘信號添加延時,使其邊沿對準數據總線的穩定區間。可以在控制器端、PCB走線以及PHY芯片內部添加時鐘偏移,本文使用最后一種方式實現。
3,add clock skew
在第三階段中添加延遲。數據發送方向,FPGA側的TX_CLK信號不需要額外處理,也就是說FPGA發送與數據邊沿對齊的時鐘信號。TXD和TX_CLK信號波形如圖。使PHY芯片工作在延遲模式下時,FPGA單不需要添加額外的邏輯來保證穩定采樣。發送方向直接將數據驅動時鐘作為TX_CLK信號發送,接收方向直接利用RX_CLK對RXD信號采樣。
二,vivado工程搭建配置
1,設置EMIO方式引出ETHE1
2,IP核設置
(1)vector unity logic設置
(2)gmii to rgmii設置
3,整體vivado設計方案
使用ZYNQ內部的MAC控制器實現數據鏈路層功能。但由于其接口為GMII,需要用到GMII_to_RGMII IP Core轉換接口邏輯。上層網絡協議則通過LWIP開源協議棧完成。首先配置ZYNQ IP,使能ENET1并以EMIO方式引出。
?
?
4,管教約束示例
FPGA與RGMII接口的PHY芯片之間的時序關系按照數據接口同步和數據采樣方式屬于源同步DDR采樣。input delay約束對應接收方向,時序關系是中心對齊。output delay約束對應發送方向,時序關系是邊沿對齊。前者由于很多時候不知道上游器件Tcko信息,會使用示波器測量有效數據窗口來計算。而后者因為是邊沿對齊,通過示波器測量抖動窗口并使用skew based method計算。生成HDL文件之后接著我們從原理圖上找到這些引腳的對應,做成XDC約束文件:
set_property PACKAGE_PIN K15 [get_ports mdio_rtl_0_mdio_io] set_property IOSTANDARD LVCMOS33 [get_ports mdio_rtl_0_mdio_io] set_property PACKAGE_PIN L16 [get_ports mdio_rtl_0_mdc] set_property IOSTANDARD LVCMOS33 [get_ports mdio_rtl_0_mdc] set_property PACKAGE_PIN K21 [get_ports {rgmii_rtl_0_rd[3]}] set_property IOSTANDARD LVCMOS33 [get_ports {rgmii_rtl_0_rd[3]}] set_property IOSTANDARD LVCMOS33 [get_ports {rgmii_rtl_0_rd[2]}] set_property IOSTANDARD LVCMOS33 [get_ports {rgmii_rtl_0_rd[1]}] set_property IOSTANDARD LVCMOS33 [get_ports {rgmii_rtl_0_rd[0]}] set_property PACKAGE_PIN L21 [get_ports {rgmii_rtl_0_rd[2]}] set_property PACKAGE_PIN L19 [get_ports {rgmii_rtl_0_rd[1]}] set_property PACKAGE_PIN K18 [get_ports {rgmii_rtl_0_rd[0]}] set_property PACKAGE_PIN J18 [get_ports {rgmii_rtl_0_td[3]}] set_property IOSTANDARD LVCMOS33 [get_ports {rgmii_rtl_0_td[3]}] set_property IOSTANDARD LVCMOS33 [get_ports {rgmii_rtl_0_td[2]}] set_property IOSTANDARD LVCMOS33 [get_ports {rgmii_rtl_0_td[1]}] set_property IOSTANDARD LVCMOS33 [get_ports {rgmii_rtl_0_td[0]}] set_property PACKAGE_PIN K19 [get_ports {rgmii_rtl_0_td[2]}] set_property PACKAGE_PIN J21 [get_ports {rgmii_rtl_0_td[1]}] set_property PACKAGE_PIN J22 [get_ports {rgmii_rtl_0_td[0]}] set_property PACKAGE_PIN L17 [get_ports rgmii_rtl_0_rx_ctl] set_property PACKAGE_PIN L18 [get_ports rgmii_rtl_0_rxc] set_property PACKAGE_PIN J16 [get_ports rgmii_rtl_0_tx_ctl] set_property IOSTANDARD LVCMOS33 [get_ports rgmii_rtl_0_rx_ctl] set_property IOSTANDARD LVCMOS33 [get_ports rgmii_rtl_0_rxc] set_property IOSTANDARD LVCMOS33 [get_ports rgmii_rtl_0_tx_ctl] set_property IOSTANDARD LVCMOS33 [get_ports rgmii_rtl_0_txc] set_property PACKAGE_PIN K20 [get_ports rgmii_rtl_0_txc] set_property PACKAGE_PIN P18 [get_ports {reset_rtl_0[0]}] set_property IOSTANDARD LVCMOS33 [get_ports {reset_rtl_0[0]}] set_property SLEW FAST [get_ports rgmii_rtl_0_txc] set_property SLEW FAST [get_ports rgmii_rtl_0_tx_ctl] set_property SLEW FAST [get_ports {rgmii_rtl_0_td[*]}]三,debian系統配置
把里面的dts文件替換掉/mnt/workspace/osrc-lab/boards/MZ7X/debian/dts下的system-top.dts,然后再把FPGA工程也替換掉。
運行source settings64.sh
進入xilinx路徑,執行get_hw_description.sh,更新FPGA的硬件
uboot 內核的配置文件沒有做修改,我們可以直接執行 make_uboot.sh,編譯 uboot。如果做了修改,需要先執行 cfg_uboot.sh
因為我們修改了內核文件下的 xilinx_mz7x_defconfig,所以需要執行 cfg_kernel.sh,進行配置內核文件
編譯內核:新增加的EMIO擴展的網口需要增加驅動,所以再進入kernel源碼路徑執行執行 make menuconfig ARCH=arm
之后保存并且退出,執行save_kernel_defconfig.sh保存剛才的配置參數。每次配置修改內核后都要執行cfg_kernel.sh。
./save_kernel_defconfig.sh? ,? 然后執行./cfg_kernel.sh
再執行make_kernel.sh,編譯內核。
執行 create_image.sh
復制編譯好的文件到Tf卡的uboot分區
四,網口測試
插入串口,接口為USB-232 然后接通到虛擬機,使用putty軟件打開
開機后登錄系統???? 用戶名:osrc?? 密碼:root
再進入管理員模式,輸入ifconfig 可以看到有eth0 eth1 兩路以太網
把和 PS-LAN(上圖的eth0)網口連接的電腦網口網絡IP地址設置為192.168.0.10
把和PL-LANA(上圖的eth1)網口連接的電腦網口網絡IP地址設置為192.168.10.10
然后設置系統的IP地址
然后分別ping 192.168.0.10,再ping 192.168.10.10
配置成功,兩路以太網都能正常工作
總結
以上是生活随笔為你收集整理的ZYNQ PL通过EMIO ETHE1外接PHY由GMII转RGMII的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三年三个商业理论,你是否超越了?
- 下一篇: oracle12c 一键卸载