基礎(chǔ)信息
vivado版本:vivado2018.3
測試板卡:優(yōu)數(shù)科技 PCIe-404、som-404 信號處理模塊
基本架構(gòu)

說明
TCP/IP協(xié)議棧: 核心的TCP/IP代碼,支持ICMP,UDP,TCP,ARP等以太網(wǎng)報文處理。
Tri_mode_eth:xilinx的千兆網(wǎng)IP_CORE,當(dāng)前使用RGMII與以太網(wǎng)芯片交互。
Mdio_cfg:解決誤碼問題,在本模塊進行RXDLY的微調(diào)設(shè)置,需要根據(jù)不同的板卡確定調(diào)整值。
實際測試
基礎(chǔ)配置
FPGA_IP地址:192.168.1.30
FPGA_MAC地址:0x1234_5678_9abb
上位機IP地址:192.168.1.26
交互情況
上板測試后,發(fā)現(xiàn)FPGA與電腦之間存在報文交互,交互正常。
如下圖,arp報文和TCP報文可以正常發(fā)送至上位機。

PING異常
在電腦端ping 192.168.1.30地址,發(fā)現(xiàn)ping不通,但wireshark抓包發(fā)現(xiàn)FPGA與電腦可正常收發(fā)包。

如下圖所示,用wireshark抓取ping報文,發(fā)現(xiàn)FPGA對ping是有回復(fù)的,但是回復(fù)的報文在異常,check_sum錯誤,回復(fù)數(shù)據(jù)也存在異常。本應(yīng)該6768696a的數(shù)據(jù),變?yōu)?76a696a,分析是存在1位的錯誤。


在抓取了FPGA內(nèi)部收到的ping報文后,發(fā)現(xiàn)從PHY芯片進入FPGA的報文就已經(jīng)錯了,因此懷疑硬件PCB走線問題。更換PCB板卡后,測試正常。在查閱pg051和以太網(wǎng)PHY芯片的數(shù)據(jù)手冊后,決定嘗試通過微調(diào)RXDLY的值解決問題。誤碼如何解決詳情見MDIO配置RXDLY延遲章節(jié)。
通過修改RXDLY后,再次進行ping報文的操作,發(fā)現(xiàn)此時是可以ping通的。

通過wireshark抓包,可以看到此時reply的數(shù)據(jù)是正常的。


性能及資源
在解決了誤碼情況后進行性能測試。
性能
UDP性能測試
千兆網(wǎng),UDP測試性能在970Mbp左右。

TCP性能測試
TCP的4個port測試,性能在960Mbps左右

MDIO配置RXDLY延遲
目標(biāo)是通過MDIO調(diào)節(jié)Rx_delay_sel的值解決誤碼問題,如下圖所示,Rx_delay_sel位于EXE_0xA003寄存器的【13:10】bit.每步長為150ps.

查閱YT8531SH數(shù)據(jù)手冊發(fā)現(xiàn),通過配置0x1E寄存器和0x1F寄存器來實現(xiàn)對擴展寄存器的訪問。

Pg051使用勘誤
PHY地址的確定,xilnx手冊中描述phy地址不能為0.但是實測發(fā)現(xiàn)當(dāng)前只有1個phy時,僅當(dāng)phy地址為0才能讀取到正確的數(shù)據(jù),其他的phy地址時,讀取到的數(shù)據(jù)全部為0xffff。

YT8531SH使用勘誤
1.如下圖,使用是需要配置0x1E寄存器配置為0xA003,圖中顯示僅【7:0】bit是可寫的,【15:8】bit是僅讀的,但實際測試發(fā)現(xiàn),整個0x1E寄存器的16bit都是可讀可寫的,否則無法將0xA003寫入。

MDIO
寄存器說明
Xilinx通過axi_lite接口配置MDIO需要關(guān)注以下寄存器。




MDIO讀取測試
進行初步的測試,觀察當(dāng)前使用讀取phy芯片的0x0寄存器,回讀的數(shù)據(jù),為0x1140,與YT8531SH數(shù)據(jù)手冊之中phy芯片的0x0寄存器默認(rèn)值能對應(yīng)的。



寄存器控制流程
開啟MDIO傳輸
操作phy芯片的寄存器時必須先開啟MDIO傳輸。
| 開啟MDIO傳輸 | |||
| w/r | axi_awaddr | axi_wdata | description |
| w | 0x500 | 0x58 | [6]bit打開MDIO_ENABLE |
寫0x1E寄存器
給0x1E寄存器寫入0xA003表示我們要操作的擴展寄存器是EXT_A003.
| 給0x1E寄存器寫0xA003 | |||
| w/r | axi_awaddr | axi_wdata | description |
| w | 0x508 | 0xA003 | 需要寫的數(shù)據(jù)是0xA003 |
| w | 0x504 | 0x001E_4800 | 1.[11]bit開啟傳輸 |
| 2.[15:14]bit是2'b01開啟寫流程 | |||
| 3.[20:16]bit TX_REGAD是0x1E | |||
| 4.[28:24]bit phy地址是0x0 | |||
寫0x1F寄存器
0x1E寄存器指代要操作的擴展寄存器,0x1F指代給給0x1E指定的擴展寄存器寫的值。
給0x1F寄存器寫入0x10F1表示,我們要給EXT_A003寄存器寫0x10F1.
| 給0x1F寄存器寫0x10F1 | |||
| w/r | axi_awaddr | axi_wdata | description |
| w | 0x508 | 0x10F1 | 需要寫的數(shù)據(jù)是0x10F1 |
| w | 0x504 | 0x001F_4800 | 1.[11]bit開啟傳輸 |
| 2.[15:14]bit是2'b01開啟寫流程 | |||
| 3.[20:16]bit TX_REGAD是0x1F | |||
| 4.[28:24]bit phy地址是0x0 | |||
通過以上開啟MDIO傳輸,寫0x1E和寫0x1F寄存器,就可以修改RX_DELAY_SEL的值了。
讀寄存器流程
寫寄存器和讀寄存器都要先開啟MDIO的控制傳輸,此處不再贅敘。
以讀0x1E地址的數(shù)據(jù)為例,說明下讀寄存器的命令。
先發(fā)送axi寫數(shù)據(jù),給0x504寄存器寫入0x001E_8800,表明要讀取0x1E地址的數(shù)據(jù)。而后通過讀取0x50C寄存器獲取數(shù)據(jù)。
| 讀取0x1E寄存器的值 | |||
| w/r | axi_addr | axi_wdata | description |
| w | 0x504 | 0x001E_8800 | 1.[11]bit開啟傳輸 |
| 2.[15:14]bit是2'b10開啟讀流程 | |||
| 3.[20:16]bit TX_REGAD是0x1E | |||
| 4.[28:24]bit phy地址是0x0 | |||
| r | 0x50c | 讀取0x50c獲取到TX_REGAD寄存器返回的值 | |
參考文檔
PG051-tri-mode-eth-mac-en-us-9.0
以太網(wǎng)收發(fā)器_YT8531SH
-
FPGA
+關(guān)注
關(guān)注
1660文章
22431瀏覽量
637062 -
TCP
+關(guān)注
關(guān)注
8文章
1426瀏覽量
83569 -
上位機
+關(guān)注
關(guān)注
27文章
1007瀏覽量
57159 -
千兆網(wǎng)
+關(guān)注
關(guān)注
0文章
36瀏覽量
9978
原文標(biāo)題:FPGA(采用RGMII接口)邏輯實現(xiàn)千兆網(wǎng)TCP/IP協(xié)議棧調(diào)試記錄
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
集成硬件TCP/IP協(xié)議棧網(wǎng)口芯片
剖析:WIZnet以太網(wǎng)核心技術(shù)–全硬件TCP/IP協(xié)議棧
如何去簡化Simplified TCP/IP協(xié)議棧?
怎么實現(xiàn)的基于TCP/IP協(xié)議棧的簡易服務(wù)器?
基于ARM的TCP/IP協(xié)議棧LwlP是如何實現(xiàn)的?
怎么實現(xiàn)嵌入式TCP/IP協(xié)議棧的設(shè)計?
在FPGA中實現(xiàn)嵌入式TCP/IP通信協(xié)議棧
Microchip TCP/IP協(xié)議棧
基于FPGA和嵌入式以太網(wǎng)W5500的TCP/IP協(xié)議棧實現(xiàn)設(shè)計
Microchip TCP/IP精簡協(xié)議棧
Microchip TCP/IP協(xié)議棧
基于PIC單片機的TCP/IP協(xié)議棧實現(xiàn)
使用FPGA實現(xiàn)千兆網(wǎng)TCP/IP協(xié)議棧調(diào)試記錄
評論