在開發 Altera Cyclone V SoC FPGA(如 DE10-Nano)時,網路功能一直是學員最感興趣也最具挑戰性的部分。許多同學會問:「為什麼有的範例可以直接上網,有的卻只能傳送簡單的封包?」
本文將透過精簡版(手刻邏輯) 與 完整版(TSE IP + Linux)兩種架構的對比,帶您看懂 FPGA 網路通訊的底層邏輯。
一、 精簡版架構:理解 RGMII 協議的敲門磚
精簡版的目的不在於「連接網際網路」,而是為了讓開發者掌握如何透過 Verilog 直接驅動外部的 Ethernet PHY 晶片。
1. 系統組成與資料流
如【圖一】與【圖二】所示,精簡版架構跳過了複雜的 MAC IP,直接在 FPGA Fabric(邏輯閘陣列)中實作:
- Ethernet
Frame Generator:
負責根據
RGMII 協議產生傳送封包。
- Ethernet Frame Receiver: 負責解析從網線進來的原始資料。
【圖一】
【圖二】
2. 關鍵技術:LOANIO 的橋接
由於 Cyclone V 的硬體設計限制,FPGA Fabric 要存取特定的 Ethernet PHY 引腳,必須經過 HPS LOANIO 進行「借用」。如【圖三】所示,這是一種雙向 IO 的配置方式。
在程式碼實作上(參見【圖三】的 Verilog 程式片段),我們需要手動指派 loan_io_out 與 loan_io_in,將 FPGA 內部的訊號與實體引腳掛鉤:
Verilog
// 範例:將 FPGA 內部訊號對接到 LOANIO 引腳
assign loan_io_out[14] =
HPS_ENET_GTX_CLK;
assign HPS_ENET_RX_CLK = loan_io_in[24];
【圖三】
3. 時序與訊號實作
根據 RGMII 100Mbps 的波形規範【圖四】,資料是在時鐘的邊緣進行傳輸。
*實務上 RGMII 可支援到 1000Mbps (Gigabit),但在精簡版手刻實驗中,為了簡化時序處理,通常先從 100Mbps 開始。
- 傳送端【圖五】: rgmii_tx_gen 模組負責將資料對齊時鐘送出。
- 接收端【圖六】: 透過 rx_payload_cnt 計數器與 rx_payload 暫存器,在每個時鐘邊緣重組封包位元組(Byte)。
【圖四】
【圖五】
【圖六】
二、 完整版架構:實現 Linux 上網的標準方案
當您的需求是「執行 Linux 並開網頁」或「進行 Socket 通訊」時,就必須採用【圖七】所示的完整架構。
【圖七】
1. 核心元件:TSE IP
完整版使用 Altera 官方提供的 Triple Speed Ethernet (TSE)
MAC IP,取代了前面辛苦手刻的 Generator 與 Receiver。TSE IP 處理了所有乙太網路層的複雜協議(如 CRC 校驗、前導碼處理等)。
2. 資料高速公路:msgdma
為了讓 HPS(ARM CPU)能處理網路資料,中間必須建立一條高速通道。這裡使用
msgdma (Modular Scatter-Gather DMA),將網路封包直接搬移到 HPS 的 DDR3 記憶體中,大幅降低 CPU 參與資料搬移的負擔,提升整體網路處理效率。
3. 軟硬體整合:Linux Driver
有了上述硬體配置後,在 Linux 核心中載入對應的 Ethernet Driver。對作業系統而言,它看到的是一個標準的 eth0 介面,這時才能叫醒那隻「網路小精靈」,實現真正的上網功能。
三、 總結:我該選擇哪種架構?
我們將兩者差異整理如下表:
|
特性 |
精簡版 (Hand-coded Verilog) |
完整版 (TSE IP + DMA) |
|
主要目的 |
學習 RGMII 協議、底層時序控制 |
實際應用、Linux 系統整合 |
|
通訊層級 |
實體層/資料鏈結層
(Partial) |
完整的 MAC 層支援 |
|
複雜度 |
低,僅需基礎 Verilog 知識 |
高,需配置 Qsys (Platform Designer) |
|
軟體支援 |
無,需自行處理資料 |
支援標準 Linux Network Stack |
老師的建議:
如果您是初學者,建議先從精簡版下手,理解訊號如何在 FPGA 與 PHY 之間流動(【圖六】的接收邏輯是很好的練習)。一旦掌握了基礎,再進階到完整版架構,屆時您對 Preloader 的重製與 Linux Driver 的掛載將會有更深刻的體會。
📌 艾鍗學院FPGA課程 https://www.ittraining.com.tw/ittraining/course/hardware/fpga

沒有留言:
張貼留言