65
Intrările sunt switch-urile notate cu sw[3:0] și CLK100MHZ, iar ieșirile sunt LED[3:0]. La fiecare intrare și
ieșire se vede că sunt niște buffere, iar între acestea se află logica descrisă în cod. Blocurile mai mari, cele cu
4 intrări și o ieșire, sunt bistabili, iar blocurile cu două intrări sunt LUT-uri, așa cum se poate vedea și în figura
următoare. FDRE reprezintă bistabil cu pin de reset și clock enable, iar LUT2 reprezintă Look-Up table cu 2
intrări. Pinul de clock enable validează semnalul de tact. Acest lucru înseamnă că, atunci când este ‘0’,
bistabilul își va menține data de la ieșire până la următorul semnal de ‘1’.
Fig. 70: Bistabil și LUT
Dacă se expandează blocurile ce implementează regiștrii, se observă că acestea conțin 4 bistabili.
Sinteza face niște optimizări și niște redenumiri așa încât ar fi foarte dificil să ne dăm seama efectiv ce
componente se utilizează și cum sunt realizate conexiunile dintre ele. Astfel, pentru a nu se aplica optimizări
și redenumiri, se poate utiliza cuvântul cheie ‘keep’ astfel:
attribute keep : string;
attribute keep of signal_name: signal is "true";
După ce am pus aceste atribute și rulăm din nou sinteza, la ‘Nets’ se găsesc semnalele care au atributul
keep. Dacă aceste semnale se selectează, în schemă vor putea fi văzute aceaste trasee, ca în figura
următoare:
Fig. 71: Selectare traseu în schema generată
Pentru a avea o vizibilitate și mai bună asupra schemei, trebuie știut faptul că fiecare componentă are
anumite proprietăți. Acestea se găsesc în Cell Properties -> Properties. De exemplu, LUT-urile au la
proprietatea INIT valoarea 9 în hexa, adică 1001 în binar, aceasta însemnând că ieșirea va fi ‘1’ atunci când
adresa de intrare va fi “00” sau “11”. Cu alte cuvinte, aceste LUT-uri implementează funcția logică XNOR,
acest lucru fiind în acord cu codul.