[轉]基於FPGA的以太網開發


基於FPGA的以太網開發,在調試過的FPGA玩家開來,其實算不上很難的技術!但是如果只是菜鳥級別的選手,沒有調試過的話,就有些頭疼了!早在自己在實習的時候,就接觸到XAUI(萬兆以太網口)接口,但是由於某些原因沒能參與調試,成為了自己的遺憾,這次在Altera平台下開發百兆以太網,想通過博文的方式記錄自己的調試例程

   做網絡開發,首先必須對以太網的層級結構有了解,否則,你很容易分不清每層的功能,而在自己到底要做什么上而找不到方向!這里,從802.3的協議上抓取一副圖片說明問題:
  
 
   圖中采用的是GMII(Gigabit Media Independent Interface)接口,可以看到PHY層,物理層基本不做邏輯上的處理,對於吉比特串行而言主要是是傳輸物理的數據信號編碼(8B10B)和時鍾信號回復(CDR)。FPGA提供的MAC IP核,若器件帶高速收發器(GTX),那么我們就不需要外接PHY芯片,否則就需要外接PHY芯片,完成PHY層的功能。
   這里繼續給出ISO協議提供的MAC幀格式:
 
 其中開始的7個字節放固定的幀同步碼;1個字節的幀開始符;6個字節的源物理地址;6個字節的目的物理地址;接下來就是長度和幀類型。實際開發中,我們使用的IPv4的報文,類型號:
,接下來MAC層提供給用戶的數據凈荷大小是46-1500個字節(基本幀結構)。
   理清楚這個概念以后,在實際使用中MAC內的凈荷是如何存放的,還需要知道網絡協議的層次結構,這里貼出一張ISO七層協議到TCP/IP四層協議的對應關系圖,然后說明實際底層開發,FPGA做封包處理,到底要干嘛。
  
      MAC幀封裝的是MAC幀頭+傳輸層的IP報文。
      FPGA通過純迎硬件的方式開發網絡功能,IP數據幀中的數據包:對應的傳輸層有TCP和UDP兩種協議。由於TCP協議涉及到三次握手建立連接和四次揮手釋放連接,以純硬件的方式來開發,難度較大,但是有第三方的IP可以實現該功能,這里我們選用面向無連接的UDP協議。
     雖然選擇了UDP協議,但是最后想FPGA發送的網絡數據能夠讓上位機的應用軟件接收到,我們需要給應用分配一個端口號。端口號就是為了區分上位機上不同的網絡應用程序之間的數據的。比如,同時瀏覽網頁和聊天,瀏覽器有個端口號接收自己的數據,聊天工具有個端口號接收自己的數據。
   講了這么多的目的,是建立網路報文和層之間對應的基本概念。因為通過FPGA開發網絡應用,我們需要自己在最底層,一個字節一個字節的拼出一個IP報文,從端口號開始到MAC幀,FPGA開發者都必須掌握這些概念。不然,不知道自己到底用什么拼一個數據包出來給FPGA的MAC核。
    其實FPGA的MAC核在我們看來完成了加前導碼、幀定界符、FCS的功能。實際使用以太網給PC發送數據的時候,基本是用網絡進行點對點通信,沒涉及到CSMA/CD功能。如果真的涉及到PC機側和多個外部設別通信,在組包的時候,需要注意MAC地址、IP地址、端口號,合理規范,避免沖突。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM