FPGA - Datenübertragung über Ethernet

Ich habe ein Verilog-Modul, mit dem mein FPGA seine LEDs mit Frequenzen blinken lässt, die bestimmten Variablen / Konstanten entsprechen, die ich im Code festgelegt habe. Allerdings möchte ich diese Variablen extern ändern, damit ich das Blinkmuster on-the-fly ändern kann, ohne das FPGA jedes Mal neu programmieren zu müssen. Aus diesem Grund habe ich überlegt, wie ich Daten vielleicht über den Ethernet-Port auf das FPGA-Board übertragen kann.

Das FPGA-Board, das ich habe, ist das Digilent Nexys 3 mit dem Spartan-6-FPGA. Ich verwende die Xilinx ISE mit Webpack-Lizenz zum Entwerfen und Programmieren.

Ich habe einige der Dokumentation gelesen, aber vieles davon ist schwer zu verstehen. Soweit ich weiß, muss ich einen Ethernet-IP-Core erstellen. Ich habe das auf ISE gemacht, indem ich einen IP-Core als Quelle hinzugefügt und „Ethernet 1000BASE-X PCS/PMA oder SGMII“ ausgewählt habe. Dadurch wurde eine .xco-Datei in der Designhierarchie erstellt. Ich habe auf „View HDL Functional Model“ geklickt und gesehen, dass ein Modul zusammen mit vielen Ports definiert ist. Die Ports scheinen jedoch nicht mit den im Nexys 3-Referenzhandbuch aufgeführten Pins übereinzustimmen. Das Ethernet auf dem Nexys 3-Board hat die SMCS-Teilenummer LAN8710.

Eine andere Methode, die ich in Betracht gezogen habe, ist die Verwendung der Digilent Adept-Software, um Daten in die Register auf der Registerkarte „Register I/O“ zu schreiben. Anscheinend reicht der Wertebereich, der für die Adressen eingegeben werden kann, von 0 bis 255 (8 Bit). Das Problem ist, dass ich nicht weiß, wie ich diese Register den Variablen innerhalb des Moduls zuordnen soll (falls das überhaupt möglich ist).

Dies ist das erste Mal, dass ich mit FPGAs arbeite (seit ungefähr einem Monat), mit wenig bis gar keinem Hintergrund in digitaler Elektronik (ich bin Physik-Student im Hauptfach), obwohl ich sowohl Programmiererfahrung als auch Computer habe Hardware- und Netzwerkerfahrung (CompTIA N+ zertifiziert). Alle Informationen, die Sie geben können, um einem Neuling zu helfen, würden geschätzt.

Ein Ethernet-IP-Core verfügt über Ports, die Sie programmgesteuert verwenden können, die den funktionalen Ein- und Ausgängen entsprechen, die zum Lesen und Schreiben verwendet würden. Sie entsprechen nicht den physischen RJ45-Pins (falls Sie das erwartet haben).
Wenn Sie neu in diesem Bereich sind, würde ich mit etwas viel Einfacherem als Ethernet beginnen. Damit das Ethernet funktioniert, ist viel mehr als nur der Ethernet-Controller erforderlich. Das Board, das Sie haben, hat einen USB-UART-Adapter, der mit dem FPGA verbunden ist, also würde ich damit beginnen, eine einfache UART-Empfängerschnittstelle zu schreiben (sie sind nicht zu schwierig und es wäre eine gute Lernerfahrung).
@Tom Zimmermann +1. Das einfache Verkabeln eines Ethernet-Kerns zählt definitiv als fortgeschrittenes Projekt.

Antworten (2)

Ich bin mit Ihrer Umgebung (Nexys 3 usw.) nicht vertraut, aber ich denke, das Folgende sollte im Allgemeinen richtig sein. Wenn Sie den IP-Kern hinzufügen, erstellt er einen Logikblock innerhalb des FPGA, wobei die Ports die internen Schnittstellen des FPGA sind. Die meisten Schnittstellen müssen Sie mit internen Logiken verbinden, die Sie definieren. Teile der Schnittstellen können Sie tatsächlichen externen I/O-Pins zuordnen. Für den externen Controller LAN8710 an Bord dupliziert er die Funktion des IP-Kerns mit der hinzugefügten erforderlichen physikalischen Netzwerkschnittstelle. Entweder der LAN8710 oder der IP-Core stellt Ihnen nur die unteren Hardwareschichten der Netzwerkstapel zur Verfügung (der IP-Core enthält wahrscheinlich nicht die physikalische Schicht/Schnittstelle). Die nächste Ebene wäre die TCP/IP(Internet Protocol)-Schicht (vorausgesetzt, Sie möchten einen Standard-Stack), die normalerweise in der Software eines Prozessors implementiert ist.

Daher hinterlässt der IP-Core oder LAN8710 nach der Integration in Ihre Logik (nicht trivial) immer noch große Lücken (z. B. TCP/IP und höhere Schichten) bei dem, was Sie tun möchten. Probieren Sie stattdessen die USB-UART-Idee aus. Oder versuchen Sie es mit einem externen UART-zu-Ethernet- oder WLAN-Konvertermodul.

Das LAN8710 ist ein 10/100-Mbit/s-PHY, an das Sie über eine Standardschnittstelle namens MII (oder eine Variante davon namens RMII) anschließen.

Sie haben im FPGA einen IP-Block ausgewählt, der für 1000-Mbit/s-Ethernet bestimmt ist und mehrere verschiedene Schnittstellen zu einem PHY verwendet, von denen keine MII/RMII ist ).

Sie müssen zunächst einen IP-Block auswählen, der 10/100-Netzwerke unterstützt, und dann sicherstellen, dass Sie eine MII- oder RMII-Schnittstelle auswählen, je nachdem, welche für Ihre Hardware geeignet ist. Wenn Ihre Hardware vier Datenleitungen in jede Richtung hat, verwendet sie MII, wenn sie zwei in jede Richtung hat, dann verwendet sie RMII.

Wie andere Leute angedeutet haben, ist es nur ein winziger Teil einer enormen Anstrengung, den MAC (das Bit im FPGA) mit dem PHY (dem LAN8710) zu kommunizieren, und Sie nehmen sich vielleicht mehr vor, als sinnvoll ist in diesem Stadium.