Inhoudsopgave:
- Stap 1: Wat is Vivado HLS?
- Stap 2: HLS-videobibliotheek
- Stap 3: Synthetiseren
- Stap 4: Versiebeheer en andere informatie voor export
- Stap 5: Exporteren naar een Vivado IP-bibliotheek
- Stap 6: Synthese en exportanalyse
- Stap 7: De IP-bibliotheek toevoegen in Vivado
- Stap 8: Een upgrade uitvoeren
- Stap 9: Aanvullende details en informatie
- Stap 10: uitvoer en invoer
- Stap 11: AXI Registreer Interfacing
- Stap 12: Dataflow Pragma
Video: Vivado HLS Video IP-bloksynthese - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:19
Heb je ooit video willen verwerken in realtime zonder veel latentie of in een embedded systeem? Hiervoor worden soms FPGA's (Field Programmable Gate Arrays) gebruikt; het schrijven van videoverwerkingsalgoritmen in hardwarespecificatietalen zoals VHDL of Verilog is echter op zijn best frustrerend. Voer Vivado HLS in, de Xilinx-tool waarmee u in een C++-omgeving kunt programmeren en daaruit hardwarespecificatietaalcode kunt genereren.
Vereiste software:
- Vivado HLS
- Vivado
- (Als u de AXI-registers gebruikt) Vivado SDK
(Optioneel) Download hier de door Xilinx gemaakte voorbeelden:
Xilinx HLS-videovoorbeelden
Stap 1: Wat is Vivado HLS?
Vivado HLS is een tool die wordt gebruikt om c++-achtige code om te zetten in hardwarestructuren die op een FPGA kunnen worden geïmplementeerd. Het bevat een IDE om deze ontwikkeling te doen. Zodra u uw ontwikkeling van de code voor HLS hebt voltooid, kunt u uw gegenereerde IP exporteren voor gebruik met Vivado.
Download de bijgevoegde bestanden en plaats ze in de buurt van waar u uw project gaat maken. (hernoem ze terug naar "top.cpp" en "top.h" als ze een willekeurige naam hebben)
Stap 2: HLS-videobibliotheek
De HLS-videobibliotheek heeft documentatie met referentieontwerpen in dit artikel: XAPP1167 Een andere goede bron is de Xilinx Wiki-pagina erover.
Start Vivado HLS.
Maak een nieuw project.
Neem de bestanden die je in de vorige stap hebt gedownload en voeg ze toe als bronbestanden. (Opmerking: de bestanden worden niet naar het project gekopieerd, maar blijven waar ze zijn)
Gebruik vervolgens de knop Bladeren om de bovenste functie te selecteren.
Selecteer op de volgende pagina het Xilinx-onderdeel dat u gebruikt.
Stap 3: Synthetiseren
Oplossing => Voer C-synthese uit => Actieve oplossing
Na ~ 227.218 seconden zou het klaar moeten zijn. (Opmerking: uw werkelijke synthesetijd is afhankelijk van vele factoren)
Stap 4: Versiebeheer en andere informatie voor export
Versienummers werken samen met Vivado om ervoor te zorgen dat u het IP-adres in een ontwerp kunt bijwerken. Als het een kleine versiewijziging is, kan dit ter plekke worden gedaan, terwijl voor grote versiewijzigingen u handmatig het nieuwe blok moet toevoegen en het oude moet verwijderen. Als uw interfaces niet zijn gewijzigd en de versie-update een kleine is, kan de update worden gebeurt volledig automatisch door op de update IP-knop te drukken. U kunt "report_ip_status" uitvoeren in de Vivado tcl-console om de status van uw IP te zien.
Stel de versienummers en andere informatie in Oplossing => Oplossingsinstellingen…
Als alternatief kunnen deze instellingen tijdens het exporteren worden ingesteld.
Stap 5: Exporteren naar een Vivado IP-bibliotheek
Oplossing => RTL exporteren
Als u de details van de IP-bibliotheek niet in de vorige stap hebt ingesteld, kunt u dat nu doen.
Stap 6: Synthese en exportanalyse
Op dit scherm kunnen we de statistieken over onze geëxporteerde module zien, waaruit blijkt dat deze voldoet aan onze klokperiode van 10ns (100MHz) en hoeveel van elke bron het gebruikt.
Met een combinatie hiervan, ons syntheserapport en onze Dataflow-analyse, kunnen we zien dat het 317338 klokcycli * 10ns klokperiode * 14 pijplijnstadia = 0,04442732 seconden duurt. Dit betekent dat de totale latentie die door onze beeldverwerking wordt toegevoegd, minder dan een twintigste van een seconde is (wanneer geklokt op de beoogde 100 MHz).
Stap 7: De IP-bibliotheek toevoegen in Vivado
Om je gesynthetiseerde IP-blok te gebruiken, moet je het aan Vivado toevoegen.
Voeg in Vivado een IP-repository toe aan uw project door naar de IP-catalogus te gaan en met de rechtermuisknop te klikken op "Repository toevoegen…"
Navigeer naar uw Vivado HLS-projectdirectory en selecteer uw oplossingsdirectory.
Het zou het IP moeten rapporteren dat het heeft gevonden.
Stap 8: Een upgrade uitvoeren
Soms moet u uw HLS-blok wijzigen nadat u het in een Vivado-ontwerp hebt opgenomen.
Om dit te doen, kunt u de wijzigingen aanbrengen en het IP-adres opnieuw synthetiseren en exporteren met een hoger versienummer (zie details in eerdere stap over grote/kleine wijzigingen in versienummers).
Na het wijzigen van het exporteren van de nieuwe versie, ververs je je IP-repository's in Vivado. Dit kan worden gedaan wanneer Vivado merkt dat het IP-adres is gewijzigd in de repository, of handmatig worden geactiveerd. (Let op, als u uw IP-opslagplaatsen vernieuwt na het starten, maar voordat de export in HLS is voltooid, zal het IP-adres tijdelijk niet aanwezig zijn, wacht tot het is voltooid en vernieuw opnieuw.)
Op dit punt zou er een venster moeten verschijnen met de informatie dat een IP is gewijzigd op de schijf en u de mogelijkheid biedt om het bij te werken met een "Upgrade Selected"-knop. Als de wijziging een kleine versiewijziging was en geen van de interfaces is gewijzigd, als u vervolgens op die knop drukt, wordt het oude IP-adres automatisch vervangen door het nieuwe, anders kan er meer werk nodig zijn.
Stap 9: Aanvullende details en informatie
De volgende stappen geven meer informatie over hoe HLS-synthese werkt en wat u ermee kunt doen.
Zie dit instructable voor een voorbeeld van een project met behulp van een HLS gesynthetiseerd IP-blok.
Stap 10: uitvoer en invoer
Uitgangen en ingangen naar het laatste IP-blok worden bepaald op basis van een analyse die de synthesizer doet van de gegevensstroom in en uit de topfunctie.
Net als in VHDL of verilog, kunt u met HLS details specificeren over de verbindingen tussen IP. Deze regels zijn daar voorbeelden van:
void image_filter(AXI_STREAM& video_in, AXI_STREAM& video_out, int& x, int& y) {
#pragma HLS INTERFACE as poort=video_in bundel=INPUT_STREAM #pragma HLS INTERFACE as poort=video_out bundel=OUTPUT_STREAM #pragma HLS INTERFACE s_axilite poort=x bundel=CONTROL_BUS offset=0x14#pragma HLS INTERFACE offset s_axilite poort=y bundel
U kunt zien hoe de poorten die op het IP-blok worden weergegeven, worden beïnvloed door deze richtlijnen.
Stap 11: AXI Registreer Interfacing
Om invoer/uitvoer van/naar uw IP-blok naar de PS te krijgen, is een goede manier om dit te doen via een AXI-interface.
U kunt dit specificeren in uw HLS-code, inclusief de offsets die moeten worden gebruikt om later toegang te krijgen tot de waarde als volgt:
void image_filter(AXI_STREAM& video_in, AXI_STREAM& video_out, int& x, int& y) {
#pragma HLS INTERFACE s_axilite port=x bundel=CONTROL_BUS offset=0x14
#pragma HLS INTERFACE s_axilite port=y bundel=CONTROL_BUS offset=0x1C #pragma HLS dataflow
x = 42;
y = 0xDEADBEEF; }
Eenmaal correct verbonden in Vivado, hebt u toegang tot de waarden met behulp van deze code in Vivado SDK:
#include "parameters.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);
Hierdoor krijg je 42 in x en 0xdeadbeef in y
Stap 12: Dataflow Pragma
Binnen de #pragma DATAFLOW verandert de manier waarop de code is geïmplementeerd ten opzichte van normale C++. De code is gepijplijnd zodat alle instructies te allen tijde in verschillende delen van de gegevens worden uitgevoerd (zie het als een lopende band in een fabriek, elk station werkt continu aan één functie en geeft deze door aan het volgende station)
uit de afbeelding kunt u zien dat elk van de richtlijnen
Ondanks dat het lijkt alsof het normale variabelen zijn, worden img-objecten eigenlijk geïmplementeerd als kleine buffers tussen de commando's. Het gebruik van een afbeelding als invoer voor een functie "consumeert" het en maakt het niet langer bruikbaar. (Vandaar de noodzaak voor de dubbele commando's)
Aanbevolen:
Video Tutoriales De Tecnologías Creativas 05: ¿Hacemos Un Detector De Presencia? ¡Por Supuesto!: 4 stappen
Video Tutoriales De Tecnologías Creativas 05: ¿Hacemos Un Detector De Presencia? Por Supuesto!: En este tutorial vamos a aprender como hacer un detector de presencia con un sensor de ultrasonidos sobre un placa Arduino Uno en utilizando Tinkercad Circuits (utilizando una cuenta gratuita)
Video Tutoriales De Tecnologías Creativas 02: ¡Experimentemos Con Señales Analógicas Y Digitales!: 4 Stappen
Video Tutoriales De Tecnologías Creativas 02: ¡Experimentemos Con Señales Analógica En Digitals!: En este tutorial vamos een aprender la diferencia entre señales y componentes digitales en analogicos sobre un placa Arduino Uno. Este ejercicio lo realizaremos mediante simulación y para ello utilizaremos Tinkercad Circuits (utilizando una cuenta gr
Video Tutoriales De Tecnologías Creativas 04: ¿Para Qué Servirá Un Potenciómetro Y Un Led?: 4 stappen
Video Tutoriales De Tecnologías Creativas 04: ¿Para Qué Servirá Un Potenciómetro Y Un Led?: En este tutorial vamos a aprender como modificar la intensidad de la luz de un led con un potenciómetro un placa Arduino Uno. Este ejercicio lo realizaremos mediante simulación y para ello utilizaremos Tinkercad Circuits (utilizando una cuen
Video afspelen met ESP32: 10 stappen (met afbeeldingen)
Video afspelen met ESP32: deze Instructables laten iets zien over het afspelen van video en audio met ESP32
Hoe Vivado Simluation te gebruiken: 6 stappen
Hoe Vivado Simluation te gebruiken: Ik heb dit simulatieproject gedaan voor een online klas. Het project is geschreven door Verilog. We zullen simulatie in Vivado gebruiken om de golfvorm in enable_sr (enable digit) van het eerder gemaakte stopwatch-project te visualiseren. Daarnaast zullen we ons