TCP/IP協議棧設計—TCP設計實現小結

TCP/IP協議棧設計—TCP設計實現小結

設計目的:在FPGA上採用純Verilog描述的方式,實現可定製裁剪的TCPIP硬件協議棧,並加入超時重傳、滑動窗口等優化算法,最終希望實現傳輸速率能超過200MHz的千兆以太網。

去年3月份,就開始了設計之旅,期間參考了衆多論文,網上也查了許多資料。經過一步步設計,現在終於實現了初步的TCPIP傳輸。現將實現的工程進行簡單介紹和總結。

開發環境:ISE14.7 ,win7 X64 臺式機,採用具備phy接口芯片的黑金開發板AX516,高速網線一根。

測試工具:網絡調試助手NetAssist.exe 、TCP&UDP測試工具 、WireShark軟件

設計過程:設計中,先是參考開發板例程,自己全新實現了一遍UDP硬件協議棧。具體細節見我前期的相關文章,其代碼已上傳資源。

問題小結:在充分了解了以太網,特別是MAC層接口工作原理後,開始設計TCPIP協議棧。但發現困難重重,一直前進不了。不斷在網上查閱資料,參考了UDPIP協議棧設計,然後實現了ARP、ICMP。並給出完整的UDPIP協議棧設計代碼。但在調試TCP傳輸時,遇到一些問題,始終未能解決。

直到最近,在找工作期間,爲了應付IC設計中的筆試題,特別學習了IC設計相關的書,對其中的時序分析,有了很多認識,特別是保持時間、建立時間、關鍵路徑等等。最近再回過頭來,設計、調試TCP時,發現,在系統時鐘到125MHz後,存在時序約束不滿足的情況。具體問題見前面相關博文。他們主要是:①CRC保持時間不夠,該下降沿發送,增加保持時間;②checksum組合路勁延遲太大,換更快速的方法;③TCP建立連接,第一個幀必須待選項。④全局使用同一時鐘rx_clk,導致刪除和時鐘偏斜skew太大,改用PLL分頻,作爲發送時鐘。很多問題,只有在做的時候,纔會發現。真的需要對TCPIP協議足夠地熟悉,才能把它設計出來。

工程介紹:RTL頂層如下。該工程,包含ARP、ICMP、UDP、TCP、IP和MAC全過程的傳輸。其綜合原理圖見tcpip_stack_top_sch_v1.1.pdf 。設計過程的仿真文件也如下圖。

測試結果:前面已進行過許多測試,參見前面的博文。這裏再用netassist助手測試一下。如下,先測試了整個過程,並斷開TCP。

 

再次連接,並截取發送過程的結果,如下圖。

 

上述便是對該TCPIP協議棧的測試情況。如果有朋友感興趣,可以一起分享探討一下。也可以下載我分享的該源碼,進行參考。

 

歡迎交流、源碼分享見CSDN資源,筆者扣扣:1021100382 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章