Inhaltsverzeichnis:
- Schritt 1: Was ist Vivado HLS?
- Schritt 2: HLS-Videobibliothek
- Schritt 3: Synthetisieren
- Schritt 4: Versionierung und andere Informationen für den Export
- Schritt 5: Exportieren in eine Vivado IP-Bibliothek
- Schritt 6: Synthese- und Exportanalyse
- Schritt 7: Hinzufügen der IP-Bibliothek in Vivado
- Schritt 8: Durchführen eines Upgrades
- Schritt 9: Zusätzliche Details und Informationen
- Schritt 10: Ausgabe und Eingabe
- Schritt 11: AXI-Registerschnittstelle
- Schritt 12: Dataflow-Pragma
Video: Vivado HLS Video-IP-Blocksynthese - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:21
Wollten Sie schon immer die Echtzeitverarbeitung von Videos ohne zusätzliche Latenz oder in einem eingebetteten System? Dazu werden manchmal FPGAs (Field Programmable Gate Arrays) verwendet; Das Schreiben von Videoverarbeitungsalgorithmen in Hardwarespezifikationssprachen wie VHDL oder Verilog ist jedoch bestenfalls frustrierend. Geben Sie Vivado HLS ein, das Xilinx-Tool, mit dem Sie in einer C++-Umgebung programmieren und daraus Hardware-Spezifikationssprachencode generieren können.
Erforderliche Software:
- Vivado HLS
- Vivado
- (Wenn Sie die AXI-Register verwenden) Vivado SDK
(Optional) Laden Sie die von Xilinx erstellten Beispiele hier herunter:
Xilinx HLS-Videobeispiele
Schritt 1: Was ist Vivado HLS?
Vivado HLS ist ein Tool, das verwendet wird, um c++-ähnlichen Code in Hardwarestrukturen umzuwandeln, die auf einem FPGA implementiert werden können. Es enthält eine IDE für diese Entwicklung. Sobald Sie Ihre Entwicklung des Codes für HLS abgeschlossen haben, können Sie Ihre generierte IP in ein Format exportieren zur Verwendung mit Vivado.
Laden Sie die angehängten Dateien herunter und legen Sie sie in die Nähe des Ortes, an dem Sie Ihr Projekt erstellen werden. (benennen Sie sie wieder in "top.cpp" und "top.h" um, wenn sie einen zufälligen Namen haben)
Schritt 2: HLS-Videobibliothek
Die HLS-Videobibliothek enthält eine Dokumentation mit Referenzdesigns in diesem Papier:XAPP1167Eine weitere gute Ressource ist die Xilinx-Wiki-Seite dazu.
Starten Sie Vivado HLS.
Erstellen Sie ein neues Projekt.
Nehmen Sie die Dateien, die Sie im vorherigen Schritt heruntergeladen haben, und fügen Sie sie als Quelldateien hinzu. (Hinweis: die Dateien werden nicht in das Projekt kopiert, sondern verbleiben dort, wo sie sind)
Wählen Sie dann mit der Schaltfläche Durchsuchen die oberste Funktion aus.
Wählen Sie auf der nächsten Seite das von Ihnen verwendete Xilinx-Teil aus.
Schritt 3: Synthetisieren
Lösung => C-Synthese ausführen => Aktive Lösung
Nach ~227.218 Sekunden sollte es fertig sein. (Hinweis: Ihre tatsächliche Synthesezeit hängt von vielen Faktoren ab)
Schritt 4: Versionierung und andere Informationen für den Export
Versionsnummern interagieren mit Vivado, damit Sie die IP in einem Design aktualisieren können. Wenn es sich um eine geringfügige Versionsänderung handelt, kann sie an Ort und Stelle durchgeführt werden, während größere Versionsänderungen erfordern, dass Sie den neuen Block manuell hinzufügen und den alten entfernen erfolgt vollautomatisch durch Drücken der Schaltfläche IP aktualisieren. Sie können "report_ip_status" in der Vivado tcl-Konsole ausführen, um den Status Ihrer IP zu sehen.
Legen Sie die Versionsnummern und andere Informationen in Lösung => Lösungseinstellungen fest…
Alternativ können diese Einstellungen beim Export vorgenommen werden.
Schritt 5: Exportieren in eine Vivado IP-Bibliothek
Lösung => RTL exportieren
Wenn Sie die IP-Bibliotheksdetails im vorherigen Schritt nicht festgelegt haben, können Sie dies jetzt tun.
Schritt 6: Synthese- und Exportanalyse
Auf diesem Bildschirm können wir die Statistiken zu unserem exportierten Modul sehen, die zeigen, dass es unsere Taktperiode von 10 ns (100 MHz) einhält und wie viel von jeder Ressource es verwendet.
Mit einer Kombination daraus, unserem Synthesebericht und unserer Datenflussanalyse können wir sehen, dass es 317338 Taktzyklen * 10 ns Taktperiode * 14 Pipeline-Stufen = 0,04442732 Sekunden dauert. Das bedeutet, dass die von unserer Bildverarbeitung hinzugefügte Gesamtlatenz weniger als eine Zwanzigstelsekunde beträgt (bei einer Taktung mit den angestrebten 100 MHz).
Schritt 7: Hinzufügen der IP-Bibliothek in Vivado
Um Ihren synthetisierten IP-Block zu verwenden, müssen Sie ihn zu Vivado hinzufügen.
Fügen Sie in Vivado Ihrem Projekt ein IP-Repository hinzu, indem Sie zum IP-Katalog gehen und mit der rechten Maustaste "Repository hinzufügen…" auswählen.
Navigieren Sie zu Ihrem Vivado HLS-Projektverzeichnis und wählen Sie Ihr Lösungsverzeichnis aus.
Es sollte die gefundene IP melden.
Schritt 8: Durchführen eines Upgrades
Manchmal müssen Sie Ihren HLS-Block ändern, nachdem Sie ihn in ein Vivado-Design aufgenommen haben.
Um dies zu tun, können Sie die Änderungen vornehmen und die IP mit einer höheren Versionsnummer neu synthetisieren und exportieren (siehe Details im vorherigen Schritt zu Änderungen der Haupt-/Nebenversionsnummer).
Nachdem Sie den Export der neuen Version geändert haben, aktualisieren Sie Ihre IP-Repositorys in Vivado. Dies kann entweder erfolgen, wenn Vivado bemerkt, dass sich die IP im Repository geändert hat, oder manuell aktiviert werden. (Beachten Sie, wenn Sie Ihre IP-Repositorys nach dem Start aktualisieren, aber bevor der Export in HLS abgeschlossen ist, ist die IP vorübergehend nicht vorhanden. Warten Sie, bis sie abgeschlossen ist, und aktualisieren Sie sie erneut.)
An dieser Stelle sollte ein Fenster mit der Information erscheinen, dass eine IP auf der Festplatte geändert wurde und Ihnen die Möglichkeit bietet, diese mit einem "Upgrade Selected"-Button zu aktualisieren. Wenn die Änderung eine geringfügige Versionsänderung war und keine der Schnittstellen geändert wurde, dann wird durch Drücken dieser Taste automatisch die alte IP durch die neue ersetzt, andernfalls ist möglicherweise mehr Arbeit erforderlich.
Schritt 9: Zusätzliche Details und Informationen
Die folgenden Schritte enthalten weitere Informationen darüber, wie die HLS-Synthese funktioniert und was Sie damit tun können.
Ein Beispiel für ein Projekt mit einem HLS-synthetisierten IP-Block finden Sie in dieser Anleitung.
Schritt 10: Ausgabe und Eingabe
Ausgänge und Eingänge zum endgültigen IP-Block werden aus einer Analyse bestimmt, die der Synthesizer des Datenflusses in und aus der Top-Funktion durchführt.
Ähnlich wie bei VHDL oder Verilog können Sie mit HLS Details zu den Verbindungen zwischen IP angeben. Diese Zeilen sind Beispiele dafür:
void image_filter(AXI_STREAM& video_in, AXI_STREAM& video_out, int& x, int& y) {
#pragma HLS INTERFACE Achse port=video_in Bundle=INPUT_STREAM #pragma HLS INTERFACE Achse port=video_out Bundle=OUTPUT_STREAM #pragma HLS INTERFACE s_axilite port=x Bundle=CONTROL_BUS offset=0x14#pragma HLS INTERFACE sy_axilite_port=BUS.0=xilite_port=BUS
Sie können sehen, wie die auf dem IP-Block angezeigten Ports von diesen Anweisungen beeinflusst werden.
Schritt 11: AXI-Registerschnittstelle
Um Eingaben/Ausgaben zu/von Ihrem IP-Block zum PS zu erhalten, ist dies eine gute Möglichkeit, dies über eine AXI-Schnittstelle zu tun.
Sie können dies in Ihrem HLS-Code angeben, einschließlich der Offsets, die verwendet werden sollen, um später auf den Wert zuzugreifen, wie folgt:
void image_filter(AXI_STREAM& video_in, AXI_STREAM& video_out, int& x, int& y) {
#pragma HLS INTERFACE s_axilite port=x Bundle=CONTROL_BUS offset=0x14
#pragma HLS INTERFACE s_axilite port=y Bundle=CONTROL_BUS offset=0x1C #pragma HLS Datenfluss
x = 42;
y = 0xDEADBEEF; }
Sobald Sie in Vivado richtig verbunden sind, können Sie mit diesem Code im Vivado SDK auf die Werte zugreifen:
#include "parameter.h"
#define xregoff 0x14 #define yregoff 0x1c x = Xil_In32(XPAR_IMAGE_FILTER_0_S_AXI_CONTROL_BUS_BASEADDR+xregoff); y = Xil_In32(XPAR_IMAGE_FILTER_0_S_AXI_CONTROL_BUS_BASEADDR+yregoff);
Dadurch erhalten Sie 42 in x und 0xdeadbeef in y
Schritt 12: Dataflow-Pragma
Innerhalb des #pragma DATAFLOW ändert sich die Art und Weise, wie der Code implementiert wird, von normalem C++. Der Code wird so gepipelinet, dass alle Anweisungen jederzeit in verschiedenen Teilen der Daten ausgeführt werden (Stellen Sie sich das wie ein Fließband in einer Fabrik vor, jede Station arbeitet kontinuierlich, führt eine Funktion aus und gibt sie an die nächste Station weiter)
Aus dem Bild können Sie sehen, dass jede der Anweisungen
Obwohl es sich um normale Variablen handelt, sind img-Objekte tatsächlich als kleine Puffer zwischen den Befehlen implementiert. Die Verwendung eines Bildes als Eingabe für eine Funktion "verbraucht" es und macht es nicht mehr verwendbar. (Daher die Notwendigkeit für die doppelten Befehle)
Empfohlen:
Video-Tutorials De Tecnologías Creativas 05: ¿Hacemos Un Detector De Presencia? ¡Por Supuesto!: 4 Schritte
Video-Tutorials De Tecnologías Creativas 05: ¿Hacemos Un Detector De Presencia? ¡Por Supuesto!: En este Tutorial vamos a prender como hacer a Detector de presencia con a sensor de ultrasonidos sobre una placa Arduino Uno y utilizando Tinkercad Circuits (utilizando una cuenta gratuita)
Video-Tutorials De Tecnologías Creativas 04: ¿Para Qué Servirá Un Potenciómetro Y Un Led?: 4 Schritte
Video-Tutorials De Tecnologías Creativas 04: ¿Para Qué Servirá Un Potenciómetro Y Un Led?: En este Tutorial vamos a prender como modificar la intensid de la luz de un led con einer potenciómetro sobre una placa Arduino Uno. Este ejercicio lo realizaremos mediante simulación y para ello utilizaremos Tinkercad Circuits (utilizando una cuen
OxusR – Ihr Video-Content im Fluss: 3 Schritte
OxusR – Ihre Videoinhalte im Fluss: O QUE É?OxusR é um das Projekt von Digital Signage que otimiza o consumo de banda evitando redundância de downloads em uma mesma rede
Tutorial: So verwenden Sie ESP32-CAM in einem Video-Streaming-Webserver: 3 Schritte
Tutorial: So verwenden Sie ESP32-CAM in Videostreaming-Webservern: Beschreibung: ESP32-CAM ist ein ESP32 Wireless IoT Vision Development Board in einem sehr kleinen Formfaktor, das für den Einsatz in verschiedenen IoT-Projekten entwickelt wurde, z drahtlose Steuerung, drahtlose Überwachung, drahtlose QR-Identifikation
So verwenden Sie die Vivado-Simulation: 6 Schritte
So verwenden Sie die Vivado-Simulation: Ich habe dieses Simulationsprojekt für eine Online-Klasse durchgeführt. Das Projekt wird von Verilog geschrieben. Wir werden die Simulation in Vivado verwenden, um die Wellenform in enable_sr(enable digit) aus dem zuvor erstellten Stoppuhrprojekt zu visualisieren. Außerdem werden wir uns