千兆UDP學習除錯記錄(四)

2021-08-29 02:17:09 字數 2764 閱讀 8407

千兆udp學習除錯記錄(四)

20181009 周二

繼續分析源**,crc已經說過了,現在來看ip_receive模組。通過對傳送模組的全面、細緻解析,再對現在的接收模組進行分析,應該會輕鬆很多了吧。哈哈。

補充:程式是直接用乙個總的流程狀態實現的,相比於一般的三段式狀態機,各有什麼優點呢?

可以嘗試把程式寫成三段式狀態機來實現。

△iprecieve模組,gmii udp資料報傳送模組。

上一節已經全部梳理了整個乙太網傳輸協議及過程,因此此節不再贅述,下面開始梳理ip(乙太網)接收模組的程式原始碼。

接收過程就是挨著ip幀的格式,順序接收便ok。8bit位寬的資料進來,按要求組合成32bit位寬資料,並取出首部資訊。

以位寬為8bit的ram來存資料,不用32bit的ram;

盡量考慮模組的通用性,實用性,拓展性,模組化,為後續工作做好準備;

做好測試記錄,磨刀不誤砍柴工,一定要紮實基礎;

盡快實現,不要陷到細節裡,要站在全域性來實現。

流程和傳送模組類似,在此不再贅述。

千兆udp學習之測試記錄

20181008-10  經上述章節設計的程式,依次進行,並總結了如下測試。

測試一:針對廣播模式進行測試。廣播形式的協議設定如下。

第一次測試,連線成功,很順利。。。

資料抓取正常。

但是回環測試錯誤,fpga未能接收除錯助手傳送的udp資料!——也就是說,現在的情況是,fpga的位址不明確,位址未正確解析。

分析:這次的測試結果奇怪,沒有出現預想的「廣播不到」的情況,除錯助手接收到fpga來的廣播位址請求,並且fpga端傳送udp資料正常,反而是fpga端未能接收udp資料,沒有「應答」到自己的位址。

測試二:這次測試,就出現了預計的問題,pc端(除錯助手)未能解析到fpga端的廣播連線。但是能回顯到pc端……

測試三:把向gmii的25m時鐘線去掉,如下設定。

因為使用的千兆模式,25m未使用,所以在程式中嘗試去掉,然後進行了測試。出現和「測試一」完全一樣的情況。

接下來,換成指定pc端mac位址,再次進行測試。

預計情況,這樣應該能解決上述出現的兩個「交叉」問題。猜測原因,是因為使用的自動協商,所在phy晶元沒有「正確」工作。

結果:**失敗,結果還是

pc端能接收

udp資料,但是不能回顯。所以,這個

25m時鐘線還不能去掉

,原因為何,還待進一步考察。

一點思考:

如果這樣一遇到問題就來記錄的話,學習效率太低了。記錄是需要的,但不能讓記錄用去的時間太多了,應該把時間重點放在推進工作進度上。就是說,遇到問題,不要著急記錄,而應是先去嘗試方法解決,等解決之後,再來記錄。這樣的記錄才是有效記錄,才有更高的參考價值。

測試四:不知為何原因,直接下原裝的程式,但是還是一樣的結果……所以這就納悶了。

問題1:電腦居然不能繫結ip了,奇怪,問題如下。

解決辦法,見

主要用一下命令:

1、使用 arp -a 命令 檢視閘道器的mac網絡卡實體地址

2、使用 netsh i i show in 命令 檢視 本地連線的idx編號

3、使用 netsh -c "i i" add neighbors 本地連線的idx 「閘道器ip」 「閘道器mac」 命令繫結

netsh -c 「i i」 add neighbors 11 「192.168.0.2」 "00-0a-35-01-fe-c0」

同理,在win7上用arp -d並不能完全的刪除繫結,必須使用netsh -c "i i" delete neighbors idx(idx改為相應的數字)才可刪除mac位址繫結。

該問題解決後,如下。

完整正確的測試結果,應如下圖所示。為保證測試方便,固化該fpga程式。

經過上面的「波折」,總結如下的udp測試流程經驗。

修改本機pc端的ip等:192.168.0.3

arp -a

netsh -c "i i" add neighbors 11 "192.168.0.2" "00-0a-35-01-fe-c0"

開啟除錯助手、wireshark軟體進行測試驗證。

UDP封裝基礎學習記錄

size t 是一種整形型別,裡面儲存的是乙個整數,如同int long 一樣。他是一種記錄大小的資料型別,它可以同sizeof等同起來,以此類推,size t也就可以做int 相類似的運算。那麼為什麼不直接用int來代替它呢?它是為了提高 的可移植性。比如,在32位的作業系統中它是4位元組,但是在...

Linux can匯流排除錯學習記錄

由於最近工作需要,需要用到can匯流排,自己以前又沒有用到過can匯流排,所以記錄下來自己的學習過程。由於我是在linux下操作can匯流排的,所以一下內容主要是linux下的can操作過程。首先,配置linux下can驅動,我所用的平台是am335x,am335x有兩個can介面,can0和can...

機器學習 學習記錄(四)

本篇部落格將介紹深度學習時所用到的一些tips。我們知道,機器學習的三大步驟 function set,goodness of function,pick up the best function 那如果我們最終得到的結果壞掉了怎麼辦。如果壞掉了,到底是這三步的哪乙個步驟出現了問題呢?結果的壞掉有兩...