Wie kann ich Flash mit Vitis programmieren?

Ich bin ein bisschen neu bei Vitis und Vivado. Ich habe ISE-Tools hauptsächlich für Spartan 6 verwendet und es ist eine steile Lernkurve für neue Tools.

Ich habe zuvor iMPACT mit ISE verwendet, um Flash mit JTAG zu programmieren. Jetzt mit Vivado und Vitis wird es für mich verwirrender.

Was ist der wirkliche Unterschied, wenn ich Flash mit vivado und vitis programmiere? Ich verstehe es nicht wirklich. Ich weiß, dass Vitis BSP-Bitstream hat und Vivado nur ein Hardware-Bitstream ist. Wenn ich die vitis-Option "Program Flash" verwende, kann ich den Flash erfolgreich programmieren, aber nach dem Ein- und Ausschalten lädt das FPGA die Konfiguration nicht aus dem Flash und bleibt im Leerlauf. Ich verwende CMOD S7 XCS725 und die Version 2020.2.

Antworten (2)

Also habe ich es endlich herausgefunden. Ich poste es hier für alle, die damit zu kämpfen haben. Vitis ist kein großartiges Tool für die Flash-Programmierung.

  1. Erstellen Sie ein Blockdesign mit Microblaze (Anleitung dazu hier: https://reference.digilentinc.com/programmable-logic/guides/getting-started-with-ipi )
  2. Fügen Sie die QSPI-Flash-IP von der Registerkarte Board zum Blockdesign hinzu (normalerweise 50 MHz Takt zum externen SPI-Takt auf dem AXI Quad SPI IP). Bestätigen Sie, dass die IP-Bestätigung auf dem AXI Quad IP auf den SPI Quad-Modus und das Slave-Gerät auf Macronix eingestellt ist (vorausgesetzt, Sie haben eine Version B des Cmod S7).
  3. Beenden Sie die Generierung des Blockdesigns, erstellen Sie den HDL-Wrapper und generieren Sie den Bitstream (oder führen Sie nur die Implementierung durch).
  4. Öffnen Sie das implementierte Design, damit Sie dann zu den Projekteinstellungen gehen können.
  5. Stellen Sie in den Projekteinstellungen im Bereich Bitstream so ein, dass die .bin-Datei erstellt wird, gehen Sie in die zusätzlichen Bitstream-Einstellungen, stellen Sie die Bitstream-Komprimierung auf True, stellen Sie die Konfigurationsrate von 3 MHz auf 33 MHz ein und wählen Sie unter Konfigurationsmodi aus Master-SPI x4. Klicken Sie auf OK und speichern Sie das Design.
  6. Generieren Sie den Bitsteam und exportieren Sie die .xsa und öffnen Sie Vitis.
  7. Erstellen Sie ein normales C-Anwendungsprojekt (nicht SREC) und erstellen Sie das Projekt. Dadurch wird eine .elf-Datei generiert.
  8. Gehen Sie zurück zu Vivado, fügen Sie die neu generierte .elf-Datei als Designquelle zum Projekt hinzu und speichern Sie (Sie werden wahrscheinlich aufgefordert, eine neue .xdc-Datei zu speichern).
  9. Klicken Sie mit der rechten Maustaste auf die Microblaze-IP und verknüpfen Sie diese .elf unter den Designquellen (im Gegensatz zu den Simulationsquellen). Regenerieren Sie den Bitstrom.
  10. Öffnen Sie den Hardware-Manager, klicken Sie auf Konfigurationsspeichergerät hinzufügen (Macronix-Teilenummer MX25L3233F für Cmod S7-25 Rev B) und programmieren Sie es mit der .bin-Datei.

Sie müssen das Board aus- und wieder einschalten (ich habe das S7 gerade ausgesteckt und dann über USB wieder eingesteckt), aber das Flash-Speicher-Microblaze-Programm sollte geladen sein und ausgeführt werden.

Solange Sie den Flash für ein "normales" FPGA (kein ARM-SoC oder andere Soft-Cpuss) programmieren möchten, ist die Vorgehensweise einfach und es ist egal, ob Sie dies direkt mit vitis oder vivado tun. Aber um genau zu sein, beachten Sie, dass das von Ihnen erwähnte BSP (Board Support Package) kein Konfigurationsbitstrom ist.

Um den Blitz mit vivado zu programmieren, können Sie dem in ug908 in Kapitel 6 definierten Verfahren folgen. Kurz gesagt müssen Sie:

  1. Definieren Sie das Speichergerät (in Ihrem Fall Macronix MX25L3233F gemäß Handbuch): Extras> Konfigurationsspeichergerät hinzufügen.
  2. Generieren Sie eine Konfigurationsdatei mit dem Bitstream (der Bitstream hat das Format .bit, die Flash-Conf-Datei entweder .mcs oder .bit), und flashen Sie sie dann auf dem Gerät: Tools> Speicherkonfigurationsdatei generieren
  3. Flashen Sie es auf dem Gerät.

Ich würde auch vorschlagen, die Befehle zu beachten, die im Fenster "Tcl-Konsole" ausgeführt werden. Sie können sie in einem TCL-Skript aufschreiben, um die gesamte Prozedur zu skripten (und vielleicht alles in ein Make-Skript packen).

Ich kann den Blitz programmieren, aber beim Ein- und Ausschalten passiert nichts. Bei mir hat das Programm (ohne Konfiguration) auch schon mal funktioniert. Die Flash-Boot-Schreibadresse ist 0x00000000 und der Offset ist FLASH_IMAGE_BASEADDR 0x00140000. Ich weiß nicht, ob diese Offset-Nummer Write ist. Ich habe den Speicher überprüft (Flash - MX25L3233F) Informationen zum Konfigurationsspeicher: Dateiformat BIN Schnittstelle SPIX4 Größe 32 MB Startadresse 0x00000000 Endadresse 0x01FFFFFF Addr1 Addr2 0x00000000 0x0012F2CB 30. Juli example/microblaze_example.runs/impl_1/design_1_wrapper.bit
könnten Sie klarstellen, wo Sie diese Parameter einfügen? Ich bin besonders neugierig auf diesen Schreiboffset; Es sollte in diesem Fall keinen Grund geben, den Bitstream mit einem anderen Offset als 0 zu schreiben. Versuchen Sie auch, den Flash nach dem Schreiben zu überprüfen, und versuchen Sie sicherheitshalber, den Befehl "Boot from Configuration Memory Device" auszuführen, wie auf Seite 7 gezeigt 59 von ug908.