千兆乙太網在國產FPGA(智多晶)上的實現

2021-10-10 14:53:40 字數 2913 閱讀 8071

閒來無事,想了想寫點東西,順帶著記錄一下自己學習的過程,其中千兆乙太網這個模組是之前的乙個專案任務,已經實現,但是想著自己在這裡面也遇到過許多坑,所以寫點東西,避免後來者遇到相同的問題,以後盡量避免事後總結,要做到邊做邊總結;

在2023年國產化的大趨勢下,國產晶元開始發展,在這樣的時代背景下,我開始了千兆乙太網的學習;

實現的是簡單千兆乙太網的實現,利用udp協議、arp協議等千兆乙太網的通訊,在介紹具體操作流程的過程前,我先介紹一下千兆乙太網的設計框架,知識淺薄,有錯誤請多多支援;

本實驗以千兆乙太網 rgmii 通訊為例來設計 verilog 程式,會先傳送預設的 udp 資料到網路,每秒鐘傳送一次,如果 fpga 檢測網口發來的udp 的資料報,會把接收到的資料報儲存在fpga 內部的 ram 中,再不斷的把 ram 中的資料報通過網口發回到 ethernet 網路。程式分為兩部分,分別為傳送和接收,實現了 arp,udp,ping 功能。以下為 原理實現框圖:

至於使用哪乙個,看自己的模組使用的匯流排類別而定;我使用的是智多晶的開發板,這個模組是rgmii匯流排的,具體型號好像是2000系列的,可以去官網查一下

讀者在設計時一定要清楚rgmii和gmii的區別,包括時鐘訊號,訊號傳輸方式等等,例如:rgmii使用的是同時利用上下延進行資料的傳輸;

上圖為gmii介面

上圖為rgmii介面

rgmii 介面是 gmii 介面的簡化版,在時鐘的上公升沿及下降沿都取樣資料,上公升沿傳送txd[3:0]/rxd[3:0],下降沿傳送 txd[7:4]/rxd[7:4],tx_en 傳送 tx_en(上公升沿)和 tx_er(下降沿)兩種資訊,rx_dv 傳送 rx_dv(上公升沿)和 rx_er(下降沿)兩種資訊。

接下來,為大家介紹一下乙太網的各個協議,協議的內容等

進一步擴充套件,以 udp 協議為例,可以看到其結構如下,除了乙太網首部的 14 位元組,資料部分包含 ip 首部,udp 首部,應用資料共 46~1500 位元組。

arp 位址解析協議,根據 ip 位址獲取實體地址。主機傳送包含目的 ip 位址的 arp 請求廣播(mac 位址為 48』hff_ff_ff_ff_ff_ff)到網路上的主機,並接收返回訊息,以此確定目標的實體地址,收到返回訊息後將 ip 位址和實體地址儲存到快取中,並保留一段時間,下次請求時直接查詢 arp 快取以節約資源。

上圖為資料報格式,

幀型別:arp 幀型別為兩位元組 0806

硬體型別:指鏈路層網路型別,1 為乙太網

協議型別:指要轉換的位址型別,採用 0x0800 ip 型別,之後的硬體位址長度和協議位址長度分別對應 6 和 4

op 欄位中 1 表示 arp 請求,2 表示 arp 應答(這裡要注意)

例如:|ff ff ff ff ff ff(乙太網的目的位址)|00 0a 35 01 fe c0(乙太網源位址)|08 06(幀型別)|00 01(硬體型別)|08 00(協議型別)|06(硬長)|04(軟長)|00 01(請求)|00 0a 35 01 fe c0(乙太網源位址)

|c0 a8 00 01(源ip位址)| ff ff ff ff ff ff(乙太網的目的位址)|c0 a8 00 02(目的ip位址)| 表示向 192.168.0.2 位址傳送 arp 請求。

下面就不備註了,這就是對應的arp請求與應答;

|00 0a 35 01 fe c0 | 60 ab c1 a2 d5 15 |08 06|00 01|08 00|06|04|00 02| 60 ab c1 a2 d5 15|c0 a8 00 02|00 0a 35 01 fe c0|c0 a8 00 01|表示向 192.168.0.1 位址傳送 arp 應答。

udp 是 user datagram protocol(使用者資料報協議)的英文縮寫。udp 只提供一種基本

的、低延遲的被稱為資料報的通訊。所謂資料報,就是一種自帶定址資訊,從傳送端走到接收端的資料報。udp 協議經常用於影象傳輸、網路監控資料交換等資料傳輸速度要求比較高的場合。

udp 協議的報頭格式:

udp 報頭由 4 個域組成,其中每個域各占用 2 個位元組,具體如下:

① udp 源埠號

② 目標埠號

③ 資料報長度

④ 校驗和

udp 協議使用埠號為不同的應用保留其各自的資料傳輸通道。資料傳送一方將 udp 資料報通過源埠傳送出去,而資料接收一方則通過目標埠接收資料。

資料報的長度是指包括報頭和資料部分在內的總位元組數。因為報頭的長度是固定的,所以該域主要被用來計算可變長度的資料部分(又稱為資料負載)。資料報的最大長度根據操作環境的不同而各異。從理論上說,包含報頭在內的資料報的最大長度為 65535 位元組。不過,一些實際應用往往會限制資料報的大小,有時會降低到 8192 位元組。

udp 協議使用報頭中的校驗值來保證資料的安全。校驗值首先在資料傳送方通過特殊的演算法計算得出,在傳遞到接收方之後,還需要再重新計算。如果某個資料報在傳輸過程中被第三方篡改或者由於線路噪音等原因受到損壞,傳送和接收方的校驗計算值將不會相符,由此 udp 協議可以檢測是否出錯。雖然 udp 提供有錯誤檢測,但檢測到錯誤時,錯誤校正,只是簡單地把損壞的訊息段扔掉,或者給應用程式提供警告資訊。

先寫到此,在設計的過程中參考的是黑金的千兆乙太網例程,這一章先來點理論知識,具體的實現流程和其他在後來的章節在闡述。

千兆乙太網幀

乙太網資料報如圖 mac層由前導碼 sfd 目的mac位址 源mac位址 型別 資料 fcs組成。前導碼 7個位元組,為7個 8 h55 也就是連續的01,表示乙個mac資料報的開始,用於同步。sfd 1個位元組,為7個 8 hd5 11010101。目的mac位址 6位元組,存放目的裝置的實體地址...

XILINX SGMII千兆乙太網 3

thelogicore ip tri mode ethernet media access controller temac solution comprises the 10 100 1000 mb s ethernet mac,the 1 gb s ethernet mac,2.5 gb s e...

xilinx千兆乙太網與萬兆乙太網IP介面

說明 對於ip核輸出資料的解析最好的工具就是其自帶的 檔案,裡面既將接收的資料進行了解析,又將傳送給ip核的資料進行了封裝,這對於了解資料結構和協議是十分有幫助的,乙太網如此,pcie ram fifo等其它ip也如此,我們只需將ip自帶的 檔案改為我們自己的邏輯即可,介面連線並不變。1.對於千兆乙...