Konfigurieren Sie FPGA dynamisch aus dem Host-Programm

Ich habe mich gefragt, ob jemand eine effiziente Möglichkeit zum Programmieren des FPGA (PL) für eine Xilinx Zynq-7-Serie oder verwandte Geräte von einem Host-C-Programm aus kennt (nicht auf dem SoC, sondern vom Host-PC). Gibt es eine Xilinx-API, die ich in meinem Programm verwenden/einbeziehen kann? Als einzige Möglichkeit, die mir im Moment einfällt, ist das Aufrufen der Befehlszeilenprogrammierung über Impact (was nicht sehr elegant ist).

Grundsätzlich möchte ich die SDK-Funktion "FPGA programmieren" in mein Host-C-Programm einfügen, in dem der Benutzer eine vorgefertigte .bit-Datei (und wenn möglich eine .elf-Datei) auswählt, um das FPGA/(SoC) zu programmieren. Dies ist nur ein Konzepttest, später möchte ich diese dynamische Konfiguration auf eine der ARM-CPUs übertragen.

Vielen Dank Sam

Antworten (2)

Hängt davon ab, wie Sie das FPGA mit dem Host verbinden. Wenn Sie das Xilinx JTAG-Kabel verwenden, bleiben Sie bei Impact ziemlich hängen. Wenn Sie jedoch eine andere Schnittstelle zum Host haben, wäre es nicht allzu schwierig, beispielsweise eine Loader-Schnittstelle zu schreiben, die eine Bitdatei akzeptieren und den Konfigurations-Flash überschreiben kann. Dann müssen Sie nur noch das Board neu starten, und Sie können loslegen. Ich würde vorschlagen, den Xilinx-Konfigurationsleitfaden für das von Ihnen verwendete Teil zu lesen. Es enthält genauere Informationen zu den verschiedenen Konfigurationsschnittstellen.

Bearbeiten: Interessant; Es gibt keinen separaten Konfigurationsleitfaden für die Zynq-Teile. Werfen Sie einen Blick auf Kapitel 6 des technischen Referenzhandbuchs Xilinx ug585. Loks wie das Verfahren besteht darin, einen Kern vom Flash zu booten und dann den Kern die FPGA-Konfiguration laden zu lassen. Wenn Sie über eine beliebige Schnittstelle eine neue Konfiguration in den RAM laden können, können Sie das FPGA zurücksetzen und die neue Konfiguration aus dem RAM laden, solange das Zurücksetzen des programmierbaren Logikteils den Kern nicht daran hindert, auf das Bild im RAM zuzugreifen. Sieht so aus, als müssten Sie AXI-PCAP verwenden. Ich könnte mir vorstellen, dass Sie auch die ARM-Core-Software aktualisieren können, aber ich bin mir nicht sicher, was das richtige Verfahren wäre. Haben Sie einen externen Programmspeicher oder verwenden Sie nur On-Chip-Speicher? Wenn Sie einen externen Speicher verwenden können, können Sie möglicherweise ein neues Bild im externen Speicher "inszenieren". Kopieren Sie es dann zurück in den internen Speicher, bevor Sie es starten. Im Grunde genommen brauchen Sie nur eine Möglichkeit, ein wenig Code zu entfernen, der die FPGA-Konfiguration neu laden und dann die ARM-Core-Software neu laden und/oder starten kann.

Xilinx hat einen sehr guten Anwendungshinweis mit unterstütztem C-Code, den Sie als Basis für Ihren Code verwenden können.

Damit Ihr Controller funktioniert, müssen Sie über 4 freie GPIOs verfügen und diese wie in diesem Bild gezeigt mit dem FPGA (und den anderen JTAG-Geräten in der Kette) verbinden:

JTAG-Kette

Möglicherweise müssen Sie es ein wenig ändern, um es an Ihre eigene Umgebung anzupassen, aber im Grunde müssen Sie die in der App-Note beschriebenen Schritte durchlaufen, zuvor habe ich das XSVF-Format verwendet, um das FPGA mit einem Cortex M3-Controller zu programmieren, dafür I folgende Schritte befolgt:

So erstellen Sie eine XSVC-Datei für Xilinx

Sie können Xilinx nach XAPP058 suchen : "Xilinx In-System Programming Using an Embedded Microcontroller" auf ihrer Website, es ist ein bisschen alt, aber Sie können vielleicht das neueste finden, das auch mit den neuen Geräten funktioniert.

Wird hier ein benutzerdefiniertes Board verwendet? Da ich im Moment nur das Zedboard benutze, könnte das mein Problem sein!
Nachdem ich viele Dokumente und Foren gelesen habe, muss ich zu dem Schluss kommen, dass die Verwendung der ARM-Kerne wahrscheinlich der einzige Weg ist (mit PCAP), es sei denn, ich möchte Impact auf der Befehlszeile verwenden. Dies wirft jedoch das Problem auf, dass ich die ARM-Kerne nicht mit den .elf-Dateien konfigurieren kann, die der Software entsprechen, die den PL antreibt.
Sieht so aus, als ob sich die Konfiguration für die Zynq-Geräte stark von anderen FPGAs unterscheidet. Die im Handbuch aufgeführte Startsequenz zeigt an, dass der ARM-Kern zuerst hochfährt und dann der Benutzercode das FPGA-Image laden kann. Ich nehme an, es ist möglich, dies nach dem Booten erneut zu tun, vorausgesetzt, dass das Stoppen des FPGA den Abschluss des Vorgangs nicht verhindert. Ist dies für ein dynamisches Rekonfigurations-Setup oder nur für ein seltenes Firmware-Update? Vielleicht ist die beste Lösung, den Konfigurationsspeicher neu zu schreiben und neu zu starten.
Nun, Xilinx hat eine detaillierte Beschreibung und ein Referenzdesign für die Zynq-FPGAs, die das XPS verwenden. Das war etwas Neues für mich, ich habe es nicht selbst getestet, aber es sieht ziemlich einfach aus: wiki.xilinx.com/…