[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; i0; i--) {
#pragma HLS UNROLL
z[i] = z[i-1];
}
z[0] = x;
mac: for (int i=0; i