Wie implementiert man Ethernet-Kommunikation in einem FPGA?
Globaler Lieferant elektronischer Komponenten AMPHEO PTY LTD: Umfangreiches Inventar für One-Stop-Shopping. Einfache Anfragen, schnelle, individuelle Lösungen und Angebote.
Die Implementierung von Ethernet-Kommunikation in einem FPGA ist eine komplexe, aber häufige Aufgabe, die sich an der Schnittstelle von digitaler Logik, Vernetzung und Systemintegration befindet. Es umfasst mehrere Schichten des Netzwerkstacks.
Hier ist ein praktischer Entwurf, dem Sie folgen können - von der Hardware bis hin zu Paketen - plus ein paar "fertige" Rezepte.
0) Gesamtüberblick (was du brauchst)
-
Stecker & PHY (RJ45 + Magnetics/Übertrager oder SFP/SFP+): übernimmt die analoge Leitung.
-
PHY-Schnittstelle zum FPGA: MII/RMII/GMII/RGMII/SGMII/1000BASE-X/10GBASE-R.
-
MAC: erstellt/parst Ethernet-Frames (CRC, Padding, Inter-Packet Gap).
-
Puffer/DMA: FIFOs oder DMA-Ringe für Datentransfer.
-
Protokoll-Stack: ARP/IP/ICMP/UDP(/TCP) in Hardware oder Software.
-
Management: MDIO (Clause 22/45) zum Lesen/Schreiben von PHY-Registern.
-
Takte & Resets: saubere 25/50/125 MHz (oder Multi-GHz für SERDES) und zuverlässige Resets.
1) PHY-Schnittstelle wählen (Speed, Pins, SERDES)
Link | Schnittstelle | Bitrate an Pins | Takte | Hinweise |
---|---|---|---|---|
100BASE-TX | MII | 4-bit @ 25 MHz | 25 MHz | Viele Pins; Timing einfach. |
100BASE-TX | RMII | 2-bit @ 50 MHz | 50 MHz Ref | Weniger Pins; geteilter Ref-Takt; beliebt (z. B. LAN8720A). |
1000BASE-T | GMII | 8-bit @ 125 MHz | 125 MHz | Breit; simpel, aber pin-hungrig. |
1000BASE-T | RGMII | 4-bit DDR @ 125 MHz | 125 MHz | Halbe Pins; Skew/Delay sorgfältig behandeln. |
1G Fiber/Kupfer | SGMII / 1000BASE-X | 1,25 Gb/s seriell | SERDES | Nutzt FPGA-Transceiver (GTX/GTH/…); wenige Pins. |
10G | 10GBASE-R | 10,3125 Gb/s | SERDES | Vendor-PCS/PMA + MAC (CMAC/Ten-Gig MAC) verwenden. |
Tipp: Für 1 GbE bei begrenzten Pins ist RGMII der Sweet Spot. Für SFP/SFP+ Designs nimm SERDES (SGMII/BASE-X/BASE-R).
2) MAC + Stack-Strategie wählen
Vendor-IP (schnellster Weg):
-
AMD Xilinx: AXI Ethernet Subsystem / Tri-Mode MAC (TEMAC), 10G/25G CMAC.
-
Intel (Altera): Triple-Speed Ethernet (TSE), 10G MAC.
-
Lattice/Microchip: jeweilige MAC/PCS-IP.
Vorteile: verifiziertes Timing, DMA, Checksum-Offload, fertige AXI/Avalon-Busse.
Nachteile: Lizenzen, Tool-Bindung.
Open-Source (schlank, flexibel):
-
LiteEth (Migen/LiteX) – UDP/IP/ARP in Gateware oder mit Soft-CPU.
-
verilog-ethernet (Alex Forencich) – MAC/ARP/IP/UDP, diverse PHY-IFs.
Vorteile: kostenlos, hackbar; ideal für minimales UDP.
Nachteile: Verifikation/Integration liegt bei dir.
Stack-Varianten:
-
Nur Hardware: ARP + ICMP Echo + UDP-Cores → geringste Latenz, begrenzte Features.
-
Soft-CPU + lwIP (MicroBlaze/Nios II/RISC-V) → UDP/TCP, DHCP, Sockets.
-
Zynq/SoC + Linux → vollständiger TCP/IP-Stack + Treiber; maximale Flexibilität.
3) Hardware-Architektur (Referenz)
4) Takte, Timing & MDIO
-
RMII: 50 MHz Referenztakt (oft vom PHY ins FPGA).
-
RGMII: 125 MHz mit DDR-I/Os. ~2 ns TXC-Delay hinzufügen (interner PHY-Skew oder FPGA ODELAY). I/O-Delays sauber constrainen.
-
SERDES: korrekte Line Rates (1,25 Gb/s, 10,3125 Gb/s), Refclks, PCS/PMA-Settings setzen.
-
MDIO: Link hochfahren, PHY ID prüfen, Modi bewerben, RGMII-Delays aktivieren, Link-Status lesen.
5) Frame- & Datenpfad-Essentials
-
Preamble + SFD, min. 64 B Frame (ggf. Padding), FCS (CRC-32), 96-Bit IPG.
-
RX: deserialisieren → SFD prüfen → CRC verifizieren → Ethertype parsen → Dispatch (ARP/IPv4/IPv6).
-
TX: schedulen (ARP-Replies, ICMP Echo, UDP), Header bauen, Checksummen neu berechnen, pad, CRC.
-
Puffer: kleine BRAM-FIFOs für Line-Rate-Elastizität; DMA zu DDR für große Bursts.
-
Performance: Cut-Through vs. Store-and-Forward; Jumbo Frames; PAUSE (802.3x) bei MAC-Flow-Control.
6) Drei Rezepte, die du kopieren kannst
A) 100 Mb RMII + UDP-Echo (Minimal-Logik)
-
PHY: LAN8720A/DP83848 (RMII-Modus), 50 MHz Ref ins FPGA.
-
MAC/Stack: Open-Source-MAC + ARP/ICMP/UDP-HDL-Cores (oder Vendor-Lite-MAC).
-
User: einfacher UDP-Port-Echo.
-
Inbetriebnahme: feste IP/MAC → ARP-Antwort → ICMP Ping → UDP-Echo-Test.
Geeignet für: Lernen, Pin-arme FPGAs, Demos.
B) 1 Gb RGMII + lwIP auf Soft-CPU (voll TCP/UDP)
-
PHY: RTL8211F/KSZ9031 (RGMII), internen TXC-Delay aktivieren.
-
MAC: Vendor Tri-Mode/AXI Ethernet + AXI DMA zur DDR.
-
CPU: MicroBlaze/Nios II (oder Zynq PS) mit lwIP (No-OS) oder Linux.
-
App: Sockets (TCP Server/Client, UDP-Streams), DHCP oder statische IP.
Geeignet für: robustes Networking, File-Transfer (TFTP), Web/REST-Endpunkte.
C) 10 Gb SFP+ + anwendungsnahe Streams
-
PHY: SFP+-Modul → FPGA-GTY/Transceiver (kein externer PHY).
-
MAC/PCS: Vendor 10GBASE-R (CMAC/10G MAC) + AXI-Stream.
-
Speicher: AXI DMA zu DDR4; Bursts ausrichten, Jumbo Frames aktivieren.
-
App: Line-Rate-UDP (oder DPDK-Host auf der Gegenseite).
Geeignet für: High-Throughput-DAQ, Trading, Vision.
7) Minimale UDP-Pipeline (nur Hardware) – Logikskizze
-
ARP: Sender-IP/MAC cachen; antworten, wenn Target-IP unsere ist.
-
ICMP: Echo Request beantworten (MAC/IP tauschen; ICMP Type 0; Checksummen neu).
-
UDP: Für whitelisted Ports MAC/IP/Ports tauschen, Längen updaten, optionale Checksumme (oder 0 bei IPv4), in TX einreihen.
-
Scheduler: ARP/ICMP gegenüber UDP priorisieren; IPG einhalten.
8) Constraints & PCB-Hinweise
-
RGMII: Längen innerhalb jedes Busses abgleichen, CLK-zu-DATA-Skew gemäß PHY-Datenblatt; PHY nah an RJ45/Magnetics; saubere Rückstrompfade.
-
Power: PHY braucht oft 3,3 V + 2,5/1,8 V; Strap-Pins setzen Adresse/Modus.
-
ESD & Magnetics: Gleichtaktdrosseln, ggf. Bob-Smith-Terminierung.
-
Referenztakte: Jitter-Budgets für SERDES beachten; Vendor-Clocking-Guides folgen.
9) Inbetriebnahme-Checkliste (spart Stunden)
-
MDIO: PHY-ID lesen → Reset → Modi bewerben → Link-Partner & Speed/Duplex prüfen.
-
Takte: 25/50/125 MHz oszilloskopieren; Duty-Cycle & Phase prüfen (RGMII-TXC-Delay).
-
Loopback: internes PHY-Loopback, dann MAC-Loopback.
-
Ping: ARP in Wireshark sehen; ICMP-Replies verifizieren.
-
UDP:
iperf
/Custom-Sender; auf Drops, CRC-Fehler, Overruns achten. -
Fehlerbilder: CRC-Fehler → SI/Timing; RX-FIFO-Overflows → größere FIFOs/DMA-Tuning; kein ARP → MAC/IP-Konfig falsch.
10) Häufige Fallstricke
-
RGMII-Timing nicht constrained (I/O-Delays setzen oder PHY-Skew aktivieren).
-
Mindest-64-B-Frame vergessen → zu kleine Frames werden verworfen.
-
MDIO falsche Clause/Speed → PHY verbleibt in Isolate/Powerdown.
-
Gemischte Takt-Domänen → Metastabilität (CDC-FIFOs einsetzen).
-
TCP rein in HDL → komplex; bevorzuge lwIP/Linux, außer du brauchst es zwingend in Hardware.
Verwandte Artikel
- ·Wie verbindet man einen externen Speicher mit einem FPGA?
- ·Entwurf eines Ampelsteuerungssystems auf FPGA-Basis
- ·Faseroptisches chaotisches Verschlüsselungssystem basierend auf FPGA
- ·Wie implementiert man UART, SPI oder I2C in einem FPGA?
- ·Entwurf eines multifunktionalen Roboterarmsystems mit Gestenerkennungssteuerung auf Basis der FPGA-Technologie
- ·Entwurfstechniken zur Reduzierung des FPGA-Stromverbrauchs
- ·Kosten-Effektivität im Vergleich: Altera vs Xilinx vs Lattice
- ·Wie bootet man Linux auf einem Xilinx FPGA?
- ·Ist ein FPGA-Chip für die Algorithmusentwicklung geeignet?