FPGA_VIVADO_SI_VHDL_Mihael_Cristian_Ignat

(Cristian I.K_ntXI) #1
60

Întrucât în acest punct informațiile ar trebui să fie suficient de avansate, vor fi explicate doar anumite
porțiuni de cod.


Utilizând următorul cod, vor fi afișate pe monitor, cu alb, caracterele extrase:

process(clk65MHz)
begin
if rising_edge(clk65MHz) then
if vga_en_q = '1' and ROM_extract_pixel_q = '1' then
vgaRed <= "1111";
vgaGreen <= "1111";
vgaBlue <= "1111";
else
vgaRed <= R_pattern;
vgaGreen <= G_pattern;
vgaBlue <= B_pattern;
end if;
end if;
end process;

În procesul de generare a caracterelor pentru SSD, se utilizează interogarea unui numărător cu valoarea
x"03DF_D23F". În hexazecimal, această valoare reprezintă 64999999, deci acest numărător se
incrementează de 64999999 ori până să se reseteze. Practic, el numără de la 0 la 64999999 ori, cu alte
cuvinte, numără de 65 de milioane de ori. Având în vedere faptul că perioada de clock de la proces este de
65 de MHz, înseamnă că el se reseteaza la o secundă. În același proces se poate observa că numerele de pe
SSD uneori sunt afișate crescător, alteori sunt afișate descrescător, valoarea de reset fiind x”0123”, respectiv
x”3210”. Pentru incrementarea tuturor caracterelor se utilizează incrementarea cu x”1111”.
Aceeași valoare de resetare a numărătorului se utilizează și în procesul ce controlează temporizarea
pentru baleierea ledurilor, astfel rotirea ledurilor va fi făcută la fiecare secundă. Încărcarea registrului de
rotire se face utilizând data x”8453”. Aceasta poate fi înlocuită cu orice altă dată.
Transmiterea mesajului “Hello world” se face utilizând următoarea conversie:
std_logic_vector(to_unsigned(natural(character'pos(uart_data_array(char_counter))), 8))


Se utilizează numărătorul “char_counter” pentru a controla poziția caracterului extras din șirul de
caractere.


Pentru mai multe detalii legate de funcționalitatea oricărei componente, va trebui mers la capitolul
corespunzător, unde este explicată acea componentă.

Free download pdf