Übertragen von Daten vom FPGA zum PC (neu bei FPGAs)

FPGA-Anfänger hier.

Ich habe ein Basys2-FPGA-Board (i-Code in Verilog) und möchte es mit meinem PC kommunizieren lassen. Derzeit empfängt es Daten von einem Slave-Gerät und speichert sie in einem 64-Bit-Register. Ich möchte diese Daten jedoch zur Verarbeitung an meinen Computer senden und in Matlab verarbeiten.

Ich habe einige Nachforschungen angestellt. Es scheint, als könnte ich entweder die EPP-API von Digilent verwenden oder einfach die UART-Kommunikation verwenden. [: Scheint, als wäre dies jetzt nicht möglich, da ich keinen Zugriff auf einen UART-Übersetzer habe]. Ich kann jedoch keine ausreichend erklärenden Beispiele zu einer der Methoden finden. Vorhandene Beispiele scheinen eine Menge Code zu haben, "der einfach funktioniert". Aber der Mangel an Erklärung macht es mir unmöglich, es für mich anzupassen

Zum Beispiel gibt es die Funktion DeppGetReg (HIF hif, BYTE bAddr, BYTE * pbData, BOOL fOverlap) auf der API, aber ich weiß nicht, was ich eingeben soll (insbesondere die Adresse), um sie zum Lesen von Werten aus dem FPGA bereitzustellen. Nur Dokument i finden konnte war in diesem Link . Ich bin auch ahnungslos bei UART.

Hier sind die verfügbaren I/O-Ports von FPGA. Der einzige USB-Port wird zum Programmieren des FPGA verwendet, ich bin mir nicht sicher, ob ich auch über diesen Port kommunizieren kann.Geben Sie hier die Bildbeschreibung ein

Ich würde mich freuen, wenn Sie mir Ideen geben könnten, wo ich anfangen könnte, mein FPGA-Board in Betracht zu ziehen. Vielen Dank im Voraus.

Der VGA-Anschluss ist ein Videoausgang, der nichts mit der seriellen RS232-UART-Kommunikation zu tun hat. Dies wird tatsächlich im BASYS2-Abschnitt „VGA-Port“ des Referenzhandbuchs digilentinc.com/Data/Products/BASYS2/Basys2_rm.pdf erklärt B. Digilentinc.com PMOD-RS232 mit einem der PMOD-Anschlüsse.
@MarkU Ich dachte, es könnte direkt für UART verwendet werden, mein Fehler. Kann ich den einzelnen USB-Anschluss sowohl für die Programmierung des FPGAs als auch für die Stromversorgung und die UART-Kommunikation verwenden?
Nein, der USB-Controller auf dem BASYS2-Board unterstützt nur JTAG-Programmierung und EPP 8-Bit paralleles Lesen/Schreiben. Kein serieller UART. Aber RS232 UART ist das am einfachsten hinzuzufügende Peripheriegerät, weshalb es eine so nützliche Diagnose ist. Jeder Übersetzer auf RS232-Niveau reicht aus, zum Beispiel MAX232. Oder verbinden Sie das FPGA direkt mit einem FT232 von FTDIchip.com.
Danke für die Auskunft. Sieht so aus, als würde ich das EPP zuerst ausprobieren, da ich im Moment keinen Zugriff auf zusätzliche Hardware habe. 8-Bit-Lesen/Schreiben klingt gut. Ich werde die Frage bearbeiten.

Antworten (1)

Der USB-Anschluss kann verwendet werden, um mit einem Design zu kommunizieren, das auf dem FPGA läuft, sowie um es zu programmieren. Die Digilent Adept-Software kann verwendet werden, um mit einem Design zu interagieren, das dieses Protokoll implementiert; Es ist auch möglich, die Digilent-Bibliotheken zu verwenden, um Ihre eigene Software zu schreiben, die dieses Protokoll verwendet. (Ich habe auch ein Perl-Modul geschrieben, Device::Digilentfalls Sie das C vorziehen.)

Informationen zum Protokoll finden Sie unter:

https://www.digilentinc.com/Data/Products/ADEPT/DpimRef%20programmers%20manual.pdf

Kurz gesagt: Es gibt einen parallelen Bus zwischen dem USB-Schnittstellenchip und dem FPGA, bestehend aus:

  • Ein bidirektionaler 8-Bit-Bus, der sowohl für Adressen als auch für Daten verwendet wird.
  • Adress- und Daten-Strobes und ein Schreib-Flag, die alle vom Host signalisiert werden
  • Ein "Warte"-Signal, das vom FPGA verwendet wird, um anzuzeigen, wann es einen Lese-/Schreibvorgang ausgeführt hat

Das verwendete Protokoll behandelt das FPGA so, als hätte es 256 Byte breite "Register", von denen jedes jederzeit vom Host gelesen oder beschrieben werden kann. Die Reihenfolge der Ereignisse für einen Lesevorgang ist:

  • Der Host aktiviert den Adress-Strobe mit eingeschaltetem Schreib-Flag und treibt den Datenbus mit dem Index des Registers, das er schreiben wird.
  • Der Host aktiviert den Daten-Strobe mit ausgeschaltetem Schreib-Flag, und das FPGA treibt den Datenbus mit dem Wert des Registers.

Ein Schreibvorgang funktioniert ähnlich, außer dass bei der zweiten Übertragung das Schreibflag eingeschaltet ist und der Host den Datenbus mit dem zu schreibenden Wert treibt.