Warum funktionieren meine FPGA-Programme nicht?

Ich bin sehr neu bei FPGA und entschuldige mich für diese elementare Frage. Ich habe gerade einen sehr einfachen XOR-Code wie diesen mit Webpack ISE zum Herunterladen auf XC2S100 erstellt (nur zum Testen!), Aber er funktioniert nicht.

EDITION1: Laut Kommentaren habe ich nach der Programmierung die DONE-Situation überprüft und sie befindet sich im High-Zustand. Außerdem wurden Pulldown-Widerstände zu a und b hinzugefügt. Außerdem wurde TMS ein 1-kΩ-Pulldown-Widerstand hinzugefügt. Jetzt funktioniert es gut, aber nachdem ich das Gerät neu gestartet habe, funktioniert es nicht mehr. Es scheint, dass der Konfigurationsspeicher nach dem Herunterfahren gelöscht wird.

Geben Sie hier die Bildbeschreibung ein

1- Offensichtlich lässt sich dieser Code gut synthetisieren, und die Simulation ist in Ordnung. Dann Implementiert -> Zugewiesene Pins -> Neu implementiert -> und schließlich Generierte .bit- Datei (diese Sequenz:)

Geben Sie hier die Bildbeschreibung ein

2- Ich habe auch die Pins verwendet, die Vref nicht benötigen. (a:P3, b:P4, aus:P7). Hier ist ein Screenshot der Pinbelegung. Am Ende auf Speichern geklickt:

Geben Sie hier die Bildbeschreibung ein

3- Dann habe ich die Pins in der Designzusammenfassung neu implementiert und überprüft. Alles ok:Geben Sie hier die Bildbeschreibung ein

4- Ich habe eines dieser Download-Kabel von Alkamar. Ich habe die Pins wie empfohlen angeschlossen und iMPACT ausgeführt. Es findet das Gerät gut und liest seine Konfiguration auch gut. Ich war glücklich, als ich die Meldung „ Programm erfolgreich “ sah ! aber wenn ich die VCCO-Spannung (3,3 V) an P3 (a) oder P4 (b) anschließe, passiert nichts in P7 (out). Ich habe alles doppelt überprüft, aber ohne Erfolg!

Was läuft da schief?

Geben Sie hier die Bildbeschreibung ein

Hier ist das Schema, das ich verwende:

1- Testplatine:

Geben Sie hier die Bildbeschreibung ein

2- Stromversorgung:

Geben Sie hier die Bildbeschreibung ein

3- Kristalloszillatorteil (in diesem Test nicht verwendet):

Geben Sie hier die Bildbeschreibung ein

Das ist das Programmierkabel:

Geben Sie hier die Bildbeschreibung ein

Gibt es irgendetwas, um die Pins auf Ihrem Board nach unten zu ziehen? (Pulldown-Widerstände, manuelles Pulldown mit Drähten usw.)
@alex.forencich Nein. Soll ich sie für das XOR-Gatter haben?
Ist es richtig, dass Sie Vcco erst angeschlossen haben, nachdem Sie das Teil programmiert haben? Das ist kein gutes Verfahren. Sie sollten alle Vcc anwenden. Dann das Teil programmieren.
@ThePhoton. Nein, ich habe alle VCCOs und VCCINTs VOR dem Programmieren angeschlossen. ohne dass iMPACT einen Fehler anzeigt: "Cable Not Found"
Als Sie Vcc an P3 angeschlossen haben, was haben Sie an P4 angeschlossen?
@ThePhoton es ist mit nichts verbunden! Sollte ich es erden oder an VCCO anschließen?
Probieren Sie beides aus. Sie sollten entgegengesetzte Signale am Ausgang sehen. Eine andere Frage: Haben Sie nach der Programmierung überprüft, ob der DONE-Pin auf High geht (IIRC)? Ich bin mir nicht 100 % sicher, ob Impact dies überprüft, bevor es den Erfolg meldet.
@ThePhoton Ich habe ein Foto des Programmierers hinzugefügt. Ich verwende JTAG und es ist nicht mit DONE verbunden. Kann es eine Fehlerquelle sein?
Sie können ein DMM verwenden, um den DONE-Pin zu überprüfen. Wenn es nicht hoch kommt (wieder IIRC), bedeutet dies, dass das Gerät aus irgendeinem Grund zwischen dem Laden des Programms und dem Start der Ausführung hängen bleibt.
Sie sollten wahrscheinlich Pull-Ups/Downs auf M0, M1, M2, PROGRAM, INIT, CCLK, TMS und TCK haben (und vielleicht einige, die ich vergessen habe), um sicherzustellen, dass das Gerät nicht wieder in den Programmiermodus wechselt, wenn es sein sollte normal läuft.
@ThePhoton noch eine Frage: Da dies ein einfaches XOR ist, habe ich keine Timing-Einschränkung vorgenommen. Brauche ich es für solch ein statisches Design?
DONE selbst benötigt möglicherweise einen Klimmzug. Schauen Sie sich das alles im Konfigurationsleitfaden an --- Ich gebe es Ihnen aus dem Gedächtnis und ich habe seit mehr als einem Jahr kein FPGA-Design mehr gemacht.
@Aug, Zeitbeschränkungen haben in diesem Design keine Auswirkungen.
Versuchen Sie, einen Pull-up-Widerstand zum DONE-Pin hinzuzufügen und Widerstände zu beiden XOR-Gate-Eingängen herunterzuziehen, und versuchen Sie es erneut.
@alex.forencich Kann ich interne Pullup/Downs verwenden? Ich bin Neuling und konnte nicht finden, wo ich interne Pullup/Downs einstellen kann.
Versuchen Sie es zuerst mit physikalischen Widerständen.
Siehe XAPP176 und XAPP188.
@ThePhoton Ich denke, Ihr Guide wird die Antwort finden. auf Seite 17 des Konfigurationsleitfadens (Link unten). Es heißt in Boundary Scan (JTAG?) Wenn Sie es verwenden, werden andere Modi deaktiviert, aber in Tabelle 9 ist eine hohe Logik für M0 und eine niedrige Logik für M1, M2 ODER M0 = 1, M1 = 0 erforderlich. M2=1. Ich bin verwirrt! Welche Konfiguration ist richtig (wie iMPACT sagt: "Programmierung war erfolgreich?) xilinx.com/support/documentation/data_sheets/ds001.pdf
Ich weiß nicht, ob ich jemals speziell S2 verwendet habe, aber normalerweise überschreibt die JTAG-Schnittstelle die M[2:0]-Pins. Daher ist es wichtig, TMS in anderen Modi (und auch im JTAG-Modus, wenn Sie das Programmierkabel während des Betriebs entfernen) hochzuziehen (herunter?).
@ThePhoton Bitte sehen Sie sich die EDITION-1 in meiner Frage an. Es funktioniert jetzt gut, aber der Konfigurationsspeicher wird jedes Mal gelöscht, wenn ich die Stromversorgung trenne. Danke an alle Hilfe.
So funktionieren FPGAs. Die Konfiguration wird immer gelöscht, wenn Sie die Stromversorgung trennen. Sie müssen jedes Mal neu konfigurieren, wenn Sie das Gerät einschalten.

Antworten (2)

Dies ist ein SRAM-basiertes FPGA. Nach dem Aus- und Wiedereinschalten geht die Konfiguration verloren!

Normalerweise verfügt ein Board, das diese FPGAs verwendet, über einen nichtflüchtigen Speicher, in den Sie die Konfiguration laden. Das FPGA verfügt über eine Logik (konfiguriert durch M0, M1, M2, die Konfigurationsmodus-Pins), um sich selbst von mehreren gängigen Arten von Flash-Speicher oder EEPROM zu booten. Einige von ihnen passen in die JTAG-Kette, sodass Sie sie mit Impact und dem vorhandenen Plattformkabel programmieren können.

Ich kann mit den genauen Details nicht helfen, der XC2S100 ist ein ziemlich altes Gerät, aber Xilinx hat eine Menge Dokumentation zum Konfigurationsspeicher.

In der Zwischenzeit können Sie Ihre Experimente fortsetzen, indem Sie das FPGA direkt konfigurieren, in dem Wissen, dass dies das normale Verhalten für dieses FPGA ist.

Das mag seltsam erscheinen, und es gibt tatsächlich ein paar nichtflüchtige FPGAs; ACTEL (Microsemi) machen welche. Aber die SRAM-Technologie passt so gut zur FPGA-Logik, dass sie trotz der offensichtlichen Nachteile sinnvoll ist.

Die nichtflüchtigen FPGAs sind ein Kompromiss: relativ klein und relativ langsam – so sehr, dass für die meisten Anwendungen die Unannehmlichkeiten eines externen ROMs ein geringer Preis für die Vorteile von SRAM-basierten FPGAs sind.

Danke! Was ist mit XC3S400 (ich habe auch so einen)?
AFAIK alles, was Xilinx (oder Altera oder Lattice) als FPGA verkauft, hat einen flüchtigen Konfigurationsspeicher. Ihre CPLDs haben eine nichtflüchtige Konfiguration.
XC3S400 auch. Es gibt eine Serie (XC3S ... AN-Serie, nicht XC3S ... A) mit nichtflüchtigem Speicher im selben Gehäuse (oder auf demselben Chip, nicht sicher welcher). Das FPGA selbst ist immer noch SRAM-basiert; es lädt sich beim Einschalten aus dem internen ROM.
Verwenden Sie die Spartan3AN-Serie, wenn Sie einen nichtflüchtigen Speicher auf dem FPGA im selben Paket wünschen. Es bietet ein SPI-PROM mit eingebautem Controller, den Sie für die Speicherung von Bitdateien verwenden können. Beim Einschalten bootet das FPGA selbst vom SPI PROM. Für diesen Code können Sie ein kleines XC3S200AN-Gerät verwenden. Bitte beachten Sie, dass Xilinx die Unterstützung für andere Geräte der Spartan3-Serie in ihren neuesten Versionen von Tools entfernt hat.

Es hört sich so an, als ob Sie Ihre Eingaben nicht korrekt bereitstellen. Sie sagen, Sie wenden VCCO auf Ihre beiden Eingangspins an, um eine logische '1' bereitzustellen. Sie können sie jedoch nicht einfach für eine logische '0' unverbunden lassen. Sie müssen sie entweder hoch (VCCO) oder niedrig (GND) treiben.