FPGA_VIVADO_SI_VHDL_Mihael_Cristian_Ignat

(Cristian I.K_ntXI) #1
53

dimensiunea Nx16x16 biți, unde N este numărul de caractere. În exemplul următor vom utiliza 3 caractere.
Pentru a fi implementarea mai simplă, primul caracter tot timpul va fi un șir de biți de ‘0’. Când se dorește să
nu se afișeze nimic, atunci se va accesa caracterul de la poziția 0 , iar biții returnați, fiind toți ‘0’, atunci nu va
fi afișat nimic în zona respectivă.


Următoarele două caractere, în acest exemplu, sunt “0” respectiv “1”. Astfel, dacă se dorește afișarea
caracterului “0”, atunci se va accesa adresa 0x01 a memoriei, iar dacă se dorește afișarea caracterului “1”,
atunci se va accesa adresa 0x02 a memoriei. Când baleierea ajunge în zona unde dorim să afișăm caracterul
dorit pe ecran, atunci valorile biților sunt luate din memorie și afișate direct pe monitor.


Dacă dimensiunea memoriei va fi Nx16x16 biți, unde N este 3 în cazul de față, atunci valoarea
respectivului array va fi de Nx16, fiecare locație a acestui array fiind pe 16 biți. Astfel, această memorie va
avea 3x16 = 48 linii de 16 biți fiecare.
În caz de nevoie, pot fi utilizate și array-uri de mai multe dimensiuni sau se pot implementa tipuri de
array-uri cu dimensiuni generice, însă aceste tipuri nu vor fi explicate aici deoarece nu sunt utilizate foarte
des. [https://www.ics.uci.edu/~jmoorkan/vhdlref/arrays.html]
În codul dat ca exemplu, se poate observa utilizarea funcției conv_integer. Aceasta este utilizată
deoarece, pentru a accesa constanta my_Rom, trebuie utilizați parametri întregi, însă adresa memoriei este
de tip std_logic_vector și astfel funcția respectivă face conversia de la std_logic_vector la valori întregi.
Codul complet al acestei componente se poate găsi la ROM_character.vhd din anexă.
Dacă toolurile de dezvoltare sunt de la Xilinx, în codul VDHL se pot utiliza niște cuvinte-cheie care ajută
utilizatorul să utilizeze niște resurse dorite de el. De exemplu, la implementarea unei memorii se pot utiliza
următoarele două linii pentru a indica explicit faptul că pentru acea memorie va fi utilizată memorie de tip
BRAM sau DRAM [https://www.xilinx.com/support/answers/54778.html]:
attribute RAM_STYLE : string;
attribute RAM_STYLE of my_Rom: signal is "BLOCK";
Dacă în loc de “BLOCK” se utilizează cuvântul “DISTRIBUTED”, atunci aceasta va fi o componentă în care
se va utiliza memorie de tip DRAM. Dacă aceste atribute lipsesc, atunci rămâne ca sintetizatorul să decidă ce
fel de memorie va fi utilizată.


architecture Behavioral of ROM is
type mem is array ( 0 to 47) of std_logic_vector(15 downto 0); -- array are dimensiunea de la 0 la N- 1
constant my_Rom : mem := (

"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
Free download pdf