Wie kann ich Daten anzeigen, debuggen oder analysieren, die in mein FPGA eingegeben werden?

Ich arbeite mit einem Xilinx Spartan6 auf dem Nexys3-Board von Digilent .

Geben Sie hier die Bildbeschreibung ein


Ich habe auch ihr PmodMIC gekauft , damit ich versuchen kann, einige Audiodaten auf mein Board zu bekommen, um eine Signalverarbeitung durchzuführen.

Geben Sie hier die Bildbeschreibung ein


Das PmodMIC hat eine einfache SPI-Verbindung und soll 12 Samples pro "Lauf" seriell ausgeben, die in einen 12-Bit-Vektor innerhalb des PmodMIC-VHDL-Moduls verschoben werden.

Ich habe einigen Top-Level-Code und unterstützenden Code erstellt, von dem ich denke, dass er funktionieren könnte , aber ich finde mich völlig verloren, wenn ich mich frage: „Wie kann ich überprüfen, ob ich korrekte Daten erhalte, oder überhaupt gute Daten für diese Angelegenheit ?"

Ich beschloss, 8 der 12 Bits im Ausgangsvektor den LEDs auf der Platine zuzuordnen, damit ich überhaupt etwas sehen konnte. Wenn ich meine zugeordnete Taste drücke, um den Konvertierungsprozess zu starten, kann ich sogar sehen, welche LEDs gelegentlich wechseln und sich bewegen, aber ich weiß, dass dies im Wesentlichen für alles Sinnvolle nutzlos ist.

An dieser Stelle bin ich völlig ahnungslos. Wenn es nur eine Möglichkeit gäbe, Daten seriell über USB an den PC zurückzugeben oder den Zustand des FPGA einzufrieren und den Inhalt seines Speichers zu untersuchen, nachdem dort einige Samples abgelegt wurden. Wenn es solche Methoden gibt, weiß ich sicher nichts davon.

Logikanalysator

Ich habe das Analog Discovery (ein weiteres Digilent-Produkt) gekauft und versucht, die seriellen Daten anzuzeigen, die vom PmodMIC zum FPGA kommen. Ich habe die seriellen Daten einfach an einen anderen unbenutzten Ausgang der JA-Bank geleitet und den Analysator angeschlossen, aber meine Ergebnisse waren ziemlich schlecht.

Ich bin mir sicher, dass vieles davon mit meiner Unerfahrenheit mit dem Gerät zu tun hat (ich kann nicht einmal herausfinden, wie ich seine Abtastrate steuern kann).

Auf jeden Fall ist meine letzte Frage etwas umfassender, nämlich:

Welche Tools, Methoden oder Prozesse gibt es, um Daten auf einem FPGA anzuzeigen, zu debuggen oder zu analysieren?

Antworten (3)

Xilinx hat ein systeminternes Debug-Tool namens " ChipScope ". Es verwendet freie FPGA-Ressourcen (hauptsächlich Block-RAM und Zähler), um einen Logikanalysator zu erstellen, der sich mit jedem Knoten in Ihrem Design verbinden, Wellenformen erfassen und auf Ihrem Host-PC anzeigen kann, wobei dieselbe JTAG-Schnittstelle verwendet wird, über die Sie den Chip programmieren.

Ich denke, das ist genau das, was ich wissen musste. Schaue mir jetzt einige Xilinx-Videos darüber an. Danke!
Angesichts der Tatsache, dass ChipScope für den Bastler ziemlich teuer ist, bin ich immer noch offen für andere Kommentare, Vorschläge oder Antworten.

Ich habe ein Atlys-Board und ein paar verschiedene Lösungen, die ich je nach Anwendung und Datenrate zur Validierung von Daten verwende:

Ich verwende einen UART für die Übertragung mit niedriger Geschwindigkeit und verbinde ihn über ein USB-Kabel mit meinem PC. Ich denke, der Nexys hat einen integrierten FTDI-Chipkonverter, sodass Sie nur das USB-Kabel verwenden müssen. Es gibt eine Reihe von uart opencores , oder es ist relativ einfach, eigene zu schreiben. Es ist eine einfache Schnittstelle, was das Protokoll betrifft. Ich vermute, dass dies die USB-Debugging-Schnittstelle von Digilent verwendet, die jedoch nur Windows-Unterstützung bietet. Da ich hauptsächlich Linux verwende, verwende ich meine eigene Implementierung.

Für Hochgeschwindigkeitsschnittstellen verwende ich eine modifizierte Version des UDP-Stacks von opencores über Ethernet. UDP ist nicht allzu schwer zu codieren/zu verstehen und viele der Header-Daten können fest codiert werden. Ich habe meinen eigenen benutzerdefinierten Paketheader erstellt und die MAC-Adressierung verwendet, um die Pakete auf die richtige Weise weiterzuleiten.

Auf der PC-Seite schreibe ich normalerweise ein Python-Dienstprogramm, um UART/UDP-Pakete zu analysieren und die Daten sinnvoll anzuzeigen. Es ist auch möglich, so etwas wie Hyperterminal in Windows zu verwenden. Ich verwende auch Wireshark , um zu überprüfen, ob meine UDP-Pakete der Ethernet-Spezifikation entsprechen.

Chipscope ist nützlich, um zu sehen, was im FPGA vor sich geht (für Debugging-Zwecke), aber Sie können keine Daten über längere Zeit erfassen. Soweit ich mich erinnere, verwendet es JTAG, also ist es auch nicht so schnell. Für Anwendungen, bei denen Sie nur an einer bestimmten Datenausgabe interessiert sind, ist es einfacher, diesen Datenstrom einfach kontinuierlich über eine Schnittstelle in einen PC einzuspeisen.

Die meisten FPGA-Boards von Digilent, einschließlich des Nexys3, implementieren eine einfache parallele Schnittstelle, auf die über USB zugegriffen werden kann. Die Schnittstelle ist dokumentiert unter:

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

Siehe auch: Implementierung des Digilent EPP

Sie können mit dieser Schnittstelle interagieren, indem Sie von Digilent bereitgestellte Codebibliotheken oder die I/O-Abschnitte von Digilent Adept verwenden.

Die EPP-Schnittstelle ist für Nexys4ddr und neue Diligent-Produkte nicht mehr verfügbar. Daher schlage ich vor, der Einfachheit halber auf Ethernet UDP umzusteigen.
Ich weiß nicht, wie ich einen IP-Stack "einfach" nennen würde. Wenn Sie das zum Laufen bringen können, brauchen Sie diese Art von Debugger wahrscheinlich nicht. :) ChipScope über JTAG oder eine UART-Implementierung sind wahrscheinlich einfachere Ansätze…
UDP ist nicht so schwierig. Wenn die UART-Leistung in Ordnung ist, bleibt es meine bevorzugte herstellerunabhängige Lösung.