[LNIV Xilinx](index.html) | [Vitis HLS](hlsVitis.htm) | [model](hlsModel.htm) | [simulacija](hlsSim.htm) | sinteza # Sinteza visokonivojskega modela Pri sintezi modela vezja iz opisa v jeziku C/C++ imamo na voljo direktive s katerimi nastavljamo parametre in omejitve sintetizatorja in vrsto vezja. Privzeto naredi orodje Vitis HLS vezje, ki izvaja operacije v zaporedju (sekvenčno), podobno kot program v mikroprocesorju. Algoritmi se pogosto izvajajo v zankah, ki jih lahko razvijemo in izvedemo paralelno. Direktiva za cevovodno izvedbo vezja pa poskuša sintetizirati vezje z majhnim iniciacijskim intervalom, kar poviša zmogljivost obdelave zaporednih podatkov. Delovanje teh direktiv si bomo pogledali na modelu vezja digitalnega sita [fir.zip](hls/fir.zip). ## Razvijanje zank Funkcija fir() vsebuje dve zanki: zanka z oznako *shift* pomakne nov vhodni podatek v zbirko vzorcev, zanka *mac* pa naredi izračun konvolucije: ```c #include "fir.h" void fir(const DATA_T x, DATA_T &y) { static DATA_T z[N]; const COEF_T c[N] = {0.0041, 0.0766, 0.245, 0.346, 0.245, 0.0766, 0.0041}; SUM_T sum = 0; shift: for (int i=N-1; i>0; i--) { z[i] = z[i-1]; } z[0] = x; mac: for (int i=0; i<N; i++) { sum += z[i] * c[i]; } y=sum; } ``` Rezultat sinteze vezja brez direktiv: | Funkcija | latenca | interval | DSP | LUT | FF | | ---------- | ----------- | -------- | ------ | ----- | | fir() | 240 ns | 25 | 0 | 435 | 98 | Na zanko *shift* dodamo direktivo UNROLL, ki razvije zanko in naredi hitrejše vezje, in nato podobno naredimo še za zanko *mac*: ```c shift: for (int i=N-1; i>0; i--) { #pragma HLS UNROLL z[i] = z[i-1]; } z[0] = x; mac: for (int i=0; i<N; i++) { #pragma HLS UNROLL sum += z[i] * c[i]; } ``` Rezultat sinteze bo vezje z večjo površino (porabo LUT in FF), vendar nižjo latenco in krajšim iniciacijskim intervalom, ki ga še dodadno skrajšamo, če dodamo funkciji fir() direktivo PIPELINE: | Direktiva | latenca | interval | DSP | LUT | FF | | ---------- | ----------- | -------- | ------ | ----- | | shift:UNROLL | 190 ns | 20 | 0 | 416 | 131 | | +mac:UNROLL | 80 ns | 9 | 0 | 1174 | 332 | | +fir:PIPELINE | 80 ns | 1 | 0 | 1155 | 406 |