Indholdsfortegnelse:
- Trin 1: Hvad er Vivado HLS?
- Trin 2: HLS videobibliotek
- Trin 3: Syntetisering
- Trin 4: Versionering og anden information til eksport
- Trin 5: Eksport til et Vivado IP -bibliotek
- Trin 6: Syntese og eksportanalyse
- Trin 7: Tilføjelse af IP -biblioteket i Vivado
- Trin 8: Gør en opgradering
- Trin 9: Yderligere detaljer og oplysninger
- Trin 10: Output og input
- Trin 11: AXI Register Interfacing
- Trin 12: Dataflow Pragma
Video: Vivado HLS Video IP -bloksyntese: 12 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:29
Har du nogensinde ønsket at behandle video i realtid uden at tilføje meget latens eller i et integreret system? FPGA'er (feltprogrammerbare gate -arrays) bruges undertiden til at gøre dette; at skrive videobehandlingsalgoritmer på hardwarespecifikationssprog som VHDL eller Verilog er i bedste fald frustrerende. Indtast Vivado HLS, Xilinx -værktøjet, der giver dig mulighed for at programmere i et C ++ - miljø og generere hardwarespecifikationens sprogkode fra det.
Påkrævet software:
- Vivado HLS
- Vivado
- (Hvis du bruger AXI -registre) Vivado SDK
(Valgfrit) Download de Xilinx -eksempler her:
Xilinx HLS -videoeksempler
Trin 1: Hvad er Vivado HLS?
Vivado HLS er et værktøj, der bruges til at omdanne c ++ - lignende kode til hardwarestrukturer, der kan implementeres på en FPGA. Den indeholder en IDE til at gøre denne udvikling. Når du har afsluttet din udvikling af koden til HLS, kan du eksportere din genererede IP i et format til brug sammen med Vivado.
Download de vedhæftede filer og læg dem tæt på, hvor du vil oprette dit projekt. (omdøb dem tilbage til "top.cpp" og "top.h", hvis de har et randomiseret navn)
Trin 2: HLS videobibliotek
HLS -videobiblioteket har dokumentation med referencedesign i dette papir: XAPP1167En anden god ressource er Xilinx Wiki -siden om det.
Start Vivado HLS.
Opret et nyt projekt.
Tag de filer, du downloadede i det foregående trin, og tilføj dem som kildefiler. (Bemærk: filerne kopieres ikke til projektet, men forbliver i stedet, hvor de er)
Brug derefter knappen Gennemse til at vælge den øverste funktion.
På den næste side skal du vælge den Xilinx -del, du bruger.
Trin 3: Syntetisering
Løsning => Kør C -syntese => Aktiv løsning
Efter ~ 227.218 sekunder skal det gøres. (Bemærk: din faktiske syntesetid vil variere baseret på mange faktorer)
Trin 4: Versionering og anden information til eksport
Versionsnumre interagerer med Vivado for at få dig til at kunne opdatere IP'en i et design. Hvis det er en mindre versionændring, kan den gøres på plads, mens større versionændringer kræver, at du manuelt tilføjer den nye blok og fjerner den gamle. Hvis dine grænseflader ikke er ændret, og versionopdateringen er en mindre, kan opdateringen være gøres helt automatisk ved at trykke på opdateringens IP -knap. Du kan køre "report_ip_status" i Vivado tcl -konsollen for at se status for din IP.
Indstil versionsnumre og andre oplysninger i Løsning => Løsningsindstillinger …
Alternativt kan disse indstillinger sættes under eksporten.
Trin 5: Eksport til et Vivado IP -bibliotek
Løsning => Eksporter RTL
Hvis du ikke har angivet oplysninger om IP -biblioteket i det foregående trin, kan du gøre det nu.
Trin 6: Syntese og eksportanalyse
På denne skærm kan vi se statistikken om vores eksporterede modul, der viser, at det opfylder vores urperiode på 10ns (100MHz) og hvor meget af hver ressource, den bruger.
Med en kombination af dette, vores synteserapport og vores Dataflow -analyse kan vi se, at det tager 317338 urcykler * 10ns urperiode * 14 pipeline -faser = 0,04442732 sekunder. Det betyder, at den samlede latenstid, der tilføjes af vores billedbehandling, er mindre end en tyvendedel af et sekund (når den er klokket til den målrettede 100MHz).
Trin 7: Tilføjelse af IP -biblioteket i Vivado
For at bruge din syntetiserede IP -blok skal du tilføje den til Vivado.
I Vivado skal du tilføje et IP-lager til dit projekt ved at gå til IP-kataloget og højreklikke på "Tilføj depot …"
Naviger til dit Vivado HLS -projektmappe, og vælg dit løsningskatalog.
Den skal rapportere den IP, den fandt.
Trin 8: Gør en opgradering
Nogle gange skal du foretage ændringer i din HLS -blok efter at have inkluderet den i et Vivado -design.
For at gøre dette kan du foretage ændringerne og resyntetisere og eksportere IP'en med et højere versionsnummer (se detaljer i tidligere trin om større/mindre versionsnummerændringer).
Efter ændring af eksport af den nye version skal du opdatere dine IP -lagre i Vivado. Dette kan enten gøres, når Vivado bemærker, at IP'en er ændret i depotet eller aktiveret manuelt. (Bemærk, hvis du opdaterer dine IP -lagre efter start, men før eksporten er fuldført i HLS, vil IP'en midlertidigt ikke være der, skal du vente på, at den er færdig og opdateres igen.)
På dette tidspunkt skal der vises et vindue med oplysninger om, at en IP er blevet ændret på disken og giver dig mulighed for at opdatere den med en "Opgrader valgt" -knappen. Hvis ændringen var en mindre versionændring, og ingen af grænsefladerne blev ændret, derefter trykke på den knap vil automatisk erstatte den gamle IP med den nye, ellers mere arbejde kan være påkrævet.
Trin 9: Yderligere detaljer og oplysninger
De følgende trin giver mere information om, hvordan HLS -syntese fungerer, og hvad du kan gøre med det.
For et eksempel på et projekt, der bruger en HLS -syntetiseret IP -blok, kan du se denne instruks.
Trin 10: Output og input
Output og input til den endelige IP -blok bestemmes ud fra en analyse, synthesizeren foretager af datastrømmen ind og ud af topfunktionen.
På samme måde som i VHDL eller verilog giver HLS dig mulighed for at angive detaljer om forbindelserne mellem IP. Disse linjer er eksempler på dette:
void image_filter (AXI_STREAM & video_in, AXI_STREAM & video_out, int & x, int & y) {
#pragma HLS INTERFACE akseport = video_in bundle = INPUT_STREAM #pragma HLS INTERFACE akseport = video_out bundle = OUTPUT_STREAM #pragma HLS INTERFACE s_axilite port = x bundle = CONTROL_BUS offset = 0x14 #pragma HLS INTERCACE = port_x1 = offset_1 = offset_PUNKT = port_x1 = offset_sats1 = offset_forbindelse = port_x1_komponent_sats
Du kan se, hvordan de porte, der vises på IP -blokken, påvirkes af disse direktiver.
Trin 11: AXI Register Interfacing
For at få input/output til/fra din IP -blok til PS'en er en god måde at gøre dette på via et AXI -interface.
Du kan angive dette i din HLS -kode, herunder de forskydninger, der skal bruges til at få adgang til værdien senere på følgende måde:
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 dataflow
x = 42;
y = 0xDEADBEEF; }
Når den er tilsluttet korrekt i Vivado, kan du få adgang til værdierne ved hjælp af denne kode i 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);
Dette får dig til at ende med 42 i x og 0xdeadbeef i y
Trin 12: Dataflow Pragma
Inde i #pragma DATAFLOW ændres måden, hvorpå koden er implementeret, fra normal C ++. Koden er pipelineret, så alle instruktionerne til enhver tid kører i forskellige dele af dataene (Tænk på det som en samlebånd på en fabrik, hver station arbejder kontinuerligt med at udføre en funktion og videregive den til den næste station)
fra billedet kan du se, at hvert af direktiverne
På trods af at det ser ud til at være normale variabler, implementeres img -objekter faktisk som små buffere mellem kommandoerne. Brug af et billede som input til en funktion "forbruger" det og gør det ikke længere brugbart. (Derfor behovet for de dobbelte kommandoer)
Anbefalede:
UK Ring Video Doorbell Pro, der arbejder med mekanisk klokke: 6 trin (med billeder)
UK Ring Video Doorbell Pro, der arbejder med mekanisk klokke: **************************************** **************** Vær opmærksom på, at denne metode kun fungerer med vekselstrøm lige nu.Jeg vil opdatere, hvis/når jeg finder en løsning til dørklokker, der bruger jævnstrømI mellemtiden, hvis du har en jævnstrøm levering, skal du ikke
Vídeo Tutoriales De Tecnologías Creativas 01: Hej verden! Blink, Hacemos Parpadear Nuestro Primer Led Con Arduino: 4 trin
Vídeo Tutoriales De Tecnologías Creativas 01: Hej verden! Blink, Hacemos Parpadear Nuestro Primer Led Con Arduino: En este tutorial kan se en forfremmelse til at hacer parpadear (blink) og diode LED med en placering af Arduino Uno. Ejer ejercicio lo realizaremos mediante simulación and para ello utilizaremos Tinkercad Circuits (utilizando una cuenta gratuita). En fortsættelse
Akustisk levitation med Arduino Uno trin for trin (8 trin): 8 trin
Akustisk levitation med Arduino Uno Step-by Step (8-trin): ultralyds lydtransducere L298N Dc kvindelig adapter strømforsyning med en han-DC-pin Arduino UNOBreadboard Sådan fungerer det: Først uploader du kode til Arduino Uno (det er en mikrokontroller udstyret med digital og analoge porte til konvertering af kode (C ++)
Sådan bruges Vivado Simluation: 6 trin
Sådan bruges Vivado Simluation: Jeg har udført dette simuleringsprojekt for en online klasse. Projektet er skrevet af Verilog. Vi vil bruge simulering i Vivado til at visualisere bølgeformen i enable_sr (aktiver ciffer) fra stopur -projektet, der tidligere blev oprettet. Derudover vil vi os
Toddler Video Remote til PC Video Player: 6 trin
Toddler Video Remote til PC Video Player: Jeg bygger en fjernbetjening, der kan tilsluttes en pc med USB. Den store fjernbetjening lader mit lille barn vælge og afspille videoer på en gammel computer. Dette er et relativt simpelt projekt. Kernekomponenten er enten et USB -tastatur eller et trådløst USB -tastatur. Derefter