常用連結

2026年2月4日 星期三

深入淺出 FPGA 網路實作:從「精簡版手刻電路」到「完整版 TSE IP」架構解析

 

在開發 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 ReceiverTSE IP 處理了所有乙太網路層的複雜協議(如 CRC 校驗、前導碼處理等)。


2. 資料高速公路:msgdma

為了讓 HPSARM 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

📌 艾鍗學院FPGA課程 https://www.ittraining.com.tw/ittraining/course/hardware/fpga