基于zynq的千兆网udp项目_米联客 ZYNQ/SOC 精品教程 S05-CH03-UDP千兆光通信
3.1概述
MZ7035開發板具有的2路SFP接口,可實現千兆光纖以太網通信。使用開發板中實現千兆網UDP傳輸的基本邏輯框架如下圖所示。FPGA程序基于米聯的新版UDP IP協議棧以及Xilinx的IP核Tri Mode Ethernet MAC和1G/2.5G Ethernet PCS/PMA or SGMII而實現。
本文檔對應2個例程,分別為udp_ip_1g_sfp和udp_ip_1g_sfp_4ch,分別實現單路和4路千兆UDP光纖傳輸(MZ7035FA只有兩路SFP,MZ7035FB(D)有四路SFP)。例程基于vivado 2017.4開發。
3.2 SFP接口
開發板上有4個SFP屏蔽籠。SFP屏蔽籠可以插入千兆。SFP信號定義如下圖所示。
3.3 IP設置
3.3.1 Tri Mode Ethernet MAC設置
由于使用千兆通訊,因此將速率設為1Gbps。如下圖所示。
首先,由于該IP需要與IP核1G/2.5G Ethernet PCS/PMA or SGMII之間通過GMII接口連接,此時不需要在IP核內部為GMII接口添加I/O BUF。因此,需要將PHY Interface設為Internal。
其次,由于1G/2.5G Ethernet PCS/PMA or SGMII使用1G光通訊時采用了1000BASEX標準,速率固定為1G。所以,需要將Tri Mode Ethernet MAC的MAC speed設為1000Mbps,與之相匹配。
當Tri Mode Ethernet MAC與1G/2.5G Ethernet PCS/PMA or SGMII配合使用時,Tri Mode Ethernet MAC的gtx_clk時鐘源需要由1G/2.5G Ethernet PCS/PMA or SGMII提供。一般都選擇1G/2.5G Ethernet PCS/PMA or SGMII輸出的user_clk2(125MHz)時鐘作為Tri Mode Ethernet MAC的時鐘源。
將Tri Mode Ethernet MAC的配置方式設置為通過AXI-Lite接口配置。
將AXI-Lite接口的時鐘設為與user_clk2頻率相同,即125MHz,這樣可以使用同一個時鐘源。
在設計中不使用MDIO與1G/2.5G Ethernet PCS/PMA or SGMII IP核連接,因此不使能MDIO接口。
上述設置如下圖所示。
Shared logic不用進行設置。
音視頻橋、流量控制、參數統計等功能均不使用。如下圖所示。
3.3.2 1G/2.5G Ethernet PCS/PMA or SGMII設置
使用1000BASEX模式,需要將速度設為1G,如下圖。
選擇1000BASEX模式,如下圖。
使用開發板的GTX收發器作為SFP的接口,輸入IP核內部的MMCM的時鐘源選擇為GTX收發器輸出的時鐘TXOUTCLK,該MMCM將產生我們所需要的用戶接口時鐘。MDIO接口可用可不用,這里不使能MDIO接口。使能自協商。如下圖。
當設計中只包含1個此IP核時,應當將可共享的邏輯資源和硬件模塊包含在IP核內部,這樣會減少所生成的模塊數量,簡化設計。如下圖所示。
當設計中需要同時使用若干個此IP核,且所使用的GTX均位于同一個GTX BANK中。此時,只需其中1個IP核內部的共享資源(MMCM、GTX PLL、GTX 參考時鐘等)便可以滿足所有IP核的需求,即選擇將共享資源包含在IP核內部。其余IP核將這些共享資源從其內部剔除即可,即選擇將共享資源包含在example中。
3.4 IP核結構
3.4.1 Tri Mode Ethernet MAC
3.4.1.1時鐘網絡
IP核內部時鐘網絡結構如下圖所示。其中,tx_mac_aclk為AXI-Stream發送接口的同步時鐘,rx_mac_aclk為AXI-Stream接收接口的同步時鐘。由于在設計中沒有使用MDIO接口,所以不存在時鐘信號mdc。
gtx_clk為IP核工作的全局時鐘源,頻率125MHz。s_axi_aclk為AXI-Lite接口的同步時鐘。其余時鐘refclk、gtx_clk90等均與GMII、RGMII接口與外部PHY芯片連接有關,由于設計中IP核與1G/2.5G Ethernet PCS/PMA or SGMII連接。因此,不需要使用這些時鐘。
3.4.1.2用戶接口
這里對一些重要的用戶接口進行說明,其他接口可參考IP核手冊。
3.4.1.2.1 AXI-Stream接收接口
AXI-Stream接收接口信號如下圖所示。用戶通過該接口接收從IP核輸出的以太網數據包。需要注意的是,接收接口沒有使用AXI-Stream標準中的tready信號。這代表接收端需要具備持續接收數據的能力,防止出現數據來不及接收而產生溢出。
AXI-Stream接收接口時序如下圖所示。
3.4.1.2.2 ?AXI-Stream發送接口
AXI-Stream發送接口信號如下圖所示。用戶通過該接口,向IP核傳輸所需要發送的以太網數據包。其中,tx_ifg_delay用于設置發送間隔,一般都默認采用最小間隔,將tx_ifg_delay置為0即可。
AXI-Stream發送接口時序如下圖所示。
3.4.1.2.3接收發送數據統計信號
下圖中的信號,用于統計并輸出當前發送完畢或者接收完畢的幀對應的各種類型的信息。除了調試用之外,一般無需使用。
信號時序如下圖所示。
3.4.1.2.4流量控制信號
非高帶寬、大負荷傳輸情況下,一般不需要使用流量控制功能。因此,不需要發送暫停幀,將以下兩個信號均置為0即可。
3.4.1.2.5 AXI-Lite接口
AXI-Lite接口主要用于配置和讀取IP核內部的寄存器。除此之外,還可以直接通過MDIO接口配置外部PHY芯片或者1G/2.5G Ethernet PCS/PMA or SGMII IP核的寄存器。由于MDIO沒有使用。因此,AXI-Lite接口主要用于IP核設置。
3.4.1.2.6復位信號
IP核的復位信號網絡如下圖所示。
其中glbl_rstn為全局復位信號,用于復位整個IP核。rx_axi_rstn和tx_axi_rstn分別用于單獨復位接收和發送部分的邏輯,一般無需使用。在例程中,將rx_axi_rstn和tx_axi_rstn都被恒置為1。
tx_reset和rx_reset分別用于表示IP核的發送和接收部分邏輯的復位狀態,根據這兩個信號可以判斷IP核是否處于復位狀態。這兩個信號需要配合AXI-Stream接收和發送接口的同步時鐘信號tx_mac_aclk和rx_mac_aclk進行使用,這是因為可能當tx_reset和rx_reset由1變為0時,IP核才會輸出tx_mac_aclk和rx_mac_aclk。對于使用tx_mac_aclk和rx_mac_aclk作為同步時鐘的邏輯,復位信號必須以tx_reset和rx_reset作為基準,避免出現復位無效的情況。對此,在例程中給出了參考設計。
3.4.2 1G/2.5G Ethernet PCS/PMA or SGMII
3.4.2.1時鐘網絡
IP核內部時鐘網絡結構如下圖所示。
3.4.2.2多IP資源共享
在例程udp_ip_1g_sfp_2ch中,同時使用了2個SFP接口,在程序中例化了2個IP核。2個IP核使用共享的MMCM、GTX PLL和GTX 參考時鐘。
3.4.2.2.1時鐘網絡
當需要使用多個IP時,且所使用的GTX位于同一個GTXBANK中時,不同IP核之間的時鐘網絡可以進行共享,如下圖所示。多個IP核可共享同1個GTX BANK的參考時鐘,以及同一個MMCM輸出的時鐘信號。
3.4.2.2.2共享端口
多個IP核之間的共享信號連接方式如下圖所示。
上圖中,左側的IP核選擇了將共享資源包含在IP核內部,右側的IP核則選擇了將共享資源從IP核內部去除,移至example desgin中。在udp_ip_1g_sfp_2ch例程中,例化了2個IP核。其中,gig_ethernet_pcs_pma_i_1對應上圖左側的IP核,pcs_pma_i_2對應上圖右側的IP核。這取決于上面所提到的1個IP設置,其中pcs_pma_ i_1的設置如下圖所示。
pcs_pma_ i_2的設置如下圖所示。
各共享信號定義與連接關系如下圖所示。
3.4.3用戶接口
這里對一些重要的用戶接口進行說明,其他接口可參考IP核手冊。
3.4.3.1GMII接口
GMII接口的同步時鐘為IP核的輸出時鐘userclk2。
3.4.3.1.1 GMII發送時序
3.4.3.1.2 GMII接收時序
3.4.3.2 independent_clock_bufg
independent_clock_bufg是頻率為200MHz的輸入時鐘。在IP核的example design中,GMII接口連接了IDELAYE2,并作為IO與芯片引腳連接。independent_clock_bufg輸入的200MHz時鐘便作為IDELAYCTRL的參考時鐘。在本例程中,GMII作為內部信號,不用作IO口,所以不需要使用IDELAYCTRL。
除此之外,independent_clock_bufg還供IP核內部的其他邏輯使用。因此,無論是否需要使用IDELAYCTRL,independent_clock_bufg都必須輸入200MHz的時鐘。后綴bufg表示該200MHz時鐘進入independent_clock_bufg端口前就已經通過BUFG進入了全局時鐘網絡。
3.4.3.3 signal_detect
要使IP核正常工作,需要將signal_detect置1。
3.4.3.4 Configuration_Vector
Configuration_Vector用于配置IP核的基本工作模式,可替代MDIO接口的功能。其具體含義如下圖所示。
在例程中,Configuration_Vector的配置如下:
3.4.3.5 an_adv_config_vector
an_adv_config_vector用于配置IP核的自協商功能,其具體含義如下圖所示。對于1000BASEX模式,只需要關注bit5,bit8~7,bit13~12。
在本例程中,an_adv_config_vector的設置如下。使能全雙工,不使用暫停進行流量控制,無錯誤狀態。
assign ?an_adv_config_vector = 16'b0000000000100001;
3.4.3.6 Status_Vector
Status_Vector反應了IP核工作狀態,其具體含義如下圖所示。可以把其中的若干個信號接至LED燈上進行觀察。其中比較重要的幾個信號分別為bit0、bit1、bit12。
3.4.4 Tri Mode Ethernet MAC與1G/2.5G Ethernet PCS/PMA or SGMII的連接
在設計中,需要將Tri Mode Ethernet MAC與1G/2.5G Ethernet PCS/PMA or SGMII之間通過GMII接口互聯。Tri Mode Ethernet MAC IP核的工作時鐘源為1G/2.5G Ethernet PCS/PMA or SGMII輸出的userclk2,頻率為125MHz。同時,userclk2也與GMII接口的各信號同步。GMII接口連接如下圖所示。由于本例程中不使用MDIO接口,無需連接。
3.4.5 IP核使用注意點
3.4.5.1Tri Mode Ethernet MAC
3.4.5.1.1數據發送長度
Tri Mode Ethernet MAC IP核在默認情況下,發送幀長度小于64字節時,IP核會在幀末尾自動補0,補足至64字節,并且再幀末尾自動插入4字節CRC。接收時,IP核自動去除末尾4字節CRC,但對于長度小于64字節的幀末尾補的0不會被去掉,仍會通過接收接口輸出。因此,可以發送的數據長度在14~1514(含14字節MAC幀頭)字節之間。
IP使用文檔中對此有如下描述。
3.4.5.2AXI-Lite接口配置策略
通過vivado仿真IP核自帶的example,可以觀察到example中通過AXI-Lite配置IP核的過程,如下圖所示。具體寄存器定義參考PG051。在例程中,直接采用了這部分的代碼。
需要說明的是,最后3個步驟均與幀過濾功能有關。
其中,unicast address就是設置IP核的本地MAC地址,用于過濾時進行地址匹配。如果開啟幀過濾功能,除了廣播地址、暫停地址和本地MAC地址,含有其他目的MAC地址的幀將會被全部進行過濾,不被用戶接收。
最后一個步驟啟用IP核的promiscuous mode,關閉了接收幀過濾功能,使IP核接收包含任何目的MAC地址的以太網幀。如果用戶需要考慮進行MAC地址過濾可關閉該功能。相關寄存器如下圖所示。
3.5約束
3.5.1 GTX參考時鐘約束
使用GTX時,需要對GTX BANK輸入的差分參考時鐘進行約束,需要約束其對應的引腳位置以及時鐘頻率。如下所示(以下為示例代碼,如果和配套的代碼有差異,以配套代碼和原理圖為準):
set_property PACKAGE_PIN U6 [get_ports gtrefclk1_p]
set_property PACKAGE_PIN U5 [get_ports gtrefclk1_n]
create_clock -period 8.000 -name gtrefclk -add [get_ports gtrefclk1_p]
3.5.2 GTX位置約束
在XDC文件中,需要鎖定IP核所使用的GTX對應于FPGA芯片的具體位置,并指定工程中GTX原語所在的路徑。
在MZ7035開發板中,包含了1個GTX BANK。4個SFP模塊分別與X0Y12,X0Y13,X0Y14,X0Y15的GTX連接。
例如,在udp_ip_1g_sfp例程中的XDC中的約束如下:
set_property LOC GTXE2_CHANNEL_X0Y15 [get_cells gig_ethernet_pcs_pma_i_1/*/*/transceiver_inst/gtwizard_inst/*/gtwizard_i/gt0_GTWIZARD_i/gtxe2_i]
例如,在udp_ip_1g_sfp_4ch例程中的XDC中的約束如下:
set_property LOC GTXE2_CHANNEL_X0Y12 [get_cells gig_ethernet_pcs_pma_i_4/*/transceiver_inst/gtwizard_inst/*/gtwizard_i/gt0_GTWIZARD_i/gtxe2_i]
set_property LOC GTXE2_CHANNEL_X0Y13 [get_cells gig_ethernet_pcs_pma_i_3/*/transceiver_inst/gtwizard_inst/*/gtwizard_i/gt0_GTWIZARD_i/gtxe2_i]
set_property LOC GTXE2_CHANNEL_X0Y14 [get_cells gig_ethernet_pcs_pma_i_2/*/transceiver_inst/gtwizard_inst/*/gtwizard_i/gt0_GTWIZARD_i/gtxe2_i]
set_property LOC GTXE2_CHANNEL_X0Y15 [get_cells gig_ethernet_pcs_pma_i_1/*/*/transceiver_inst/gtwizard_inst/*/gtwizard_i/gt0_GTWIZARD_i/gtxe2_i]由于使用了GTX原語鎖定了GTX在芯片中的物理位置,每個GTX與相應的RX、TX引腳是一一對應的,因此,GTX的RX、TX引腳可不作約束。
3.6 例程設計
本教程設計了2個測試例程:udp_ip_1g_sfp和udp_ip_1g_sfp_4ch。
例程的原理如下圖所示。2個例程均實現了UDP收發環路,即在電腦上通過網絡調試助手向開發板發送任意長度小于1472字節的UDP包。開發板接收到udp包經過fifo緩存后重新發回電腦,由此驗證數據收發的正確性。
由于UDP IP協議棧的AXI-Stream數據接口位寬為64bit,而Tri Mode Ethernet MAC的AXI-Stream數據接口位寬為8bit。因此,要將UDP IP協議棧與Tri Mode Ethernet MAC之間通過AXI-Stream接口互聯,需要進行時鐘域和數據位寬的轉換。實現方案如下圖所示。
3.6.1 AXI-Stream DATA FIFO
收發路徑都使用了2個AXI-Stream DATA FIFO,通過其中1個FIFO實現異步時鐘域的轉換,1個FIFO實現數據緩沖和同步Packet mode功能。
由于1G速率下Tri Mode Ethernet MAC的AXI-Stream數據接口同步時鐘信號為125MHz。此時,UDP IP協議棧64bit的AXI-Stream數據接口同步時鐘信號應該為125MHz/(64/8)=15.625MHz。因此,異步AXI-Stream DATA FIFO兩端的時鐘分別為125MHz(8bit),15.625MHz(64bit)。
Packet mode是指FIFO在輸出數據前持續緩存AXI-Stream接口輸入的數據直至輸入端tlast信號拉高,即存滿一個完整的數據包時,才開始在AXI-Stream輸出端口向外輸出數據。Packet mode功能設置如下圖所示。需要注意的是,啟用Packet mode時,FIFO必須工作于同步模式。
對于發送路徑,啟用Packet mode是為了防止FIFO被IP核讀空。對于接收路徑,是由于米聯的UDP IP協議棧要求1個數據包的tvalid信號在數據包持續期間必須恒為1。
3.6.2 AXI4-Stream Data Width Converter
UDP IP協議棧的AXI-Stream接口經過FIFO時鐘域轉換后,還需要進行數據數據位寬轉換,數據位寬的轉換通過AXI4-Stream Data Width Converter完成。
在接收路徑中,進行8bit到64bit的轉換,AXI4-Stream Data Width Converter設置如下圖所示。
在發送路徑中,進行64bit到8bit的轉換,AXI4-Stream Data Width Converter設置如下圖所示。
3.7 例程測試
udp_ip_1g_sfp實現了單路UDP網絡傳輸功能,udp_ip_1g_sfp_4ch中同時例化了4個UDP IP協議棧,實現了4路UDP網絡傳輸功能。在例程中,電腦的IP地址為192.168.10.2,UDP端口號為61441,開發板中的4個SFP接口的IP地址均為192.168.10.1,UDP端口號均為61440。
對于udp_ip_1g_sfp例程,將SFP光電模塊及網線插入SFP-A對應的屏蔽籠內。對于udp_ip_rgmii_2ch例程,則可將SFP電模塊及網線與SFP-A、SFP-B、SFP-C、SFP-D中任意一個SFP屏蔽籠連接。
測試前,需要將所使用電腦網卡的IP地址設置為192.168.10.2,子網掩碼設為255.255.255.0,如下圖所示。
3.7.1 UDP環路測試
打開網絡調試助手,分別設置好電腦和開發板的IP地址位和UDP端口號, 通過網絡調試助手以udp包的形式向開發板發送文字數據,并以1ms的間隔不斷循環發送,如下圖所示。
測試結果上圖所示。從圖中可以看出,網絡調試助手所發出的udp包和開發板返回的udp包一致,接收和發送的數據包數量一致。
通過wireshark軟件可捕獲電腦和開發板之間的通信數據包,如下圖所示。
3.7.2 Ping、ARP測試
在網絡調試助手向開發板發UDP包的同時,通過cmd命令窗不斷向開發板發起ping命令,觀察ping命令的返回,如下圖所示。從圖中可以看到開發板能夠快速響應電腦發起的ping命令,UDP數據包收發與ping應答互不干擾。
通過wireshark軟件對ping過程的數據進行抓包驗證,如下圖所示。
在整個測試過程中,電腦會以一定頻率持續向開發板發送ARP請求,開發板均能及時響應,wireshark軟件抓取的電腦與開發板的ARP通信過程如下圖所示。
總結
以上是生活随笔為你收集整理的基于zynq的千兆网udp项目_米联客 ZYNQ/SOC 精品教程 S05-CH03-UDP千兆光通信的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js pug 代码_Pug模板(一)
- 下一篇: 计算机中8位二进制机器数,一个字节由8位