FPGA_VIVADO_SI_VHDL_Mihael_Cristian_Ignat

(Cristian I.K_ntXI) #1
37

39 9 49 I 59 Y 69 i 79 y
3A : 4A J 5A Z 6A j 7A z
3B ; 4B K 5B [ 6B k 7B {
3C < 4C L 5C \ 6C l 7C |
3D = 4D M 5D ] 6D m 7D }
3E > 4E N 5E ^ 6E n 7E ~
3F? 4F O 5F _ 6F o 7F DEL
Tabel 3: Cod ASCII pentru caracterele cel mai des utilizate

[https://www.genuinecoder.com/ascii-code-for-characters-in-c-program-html/]

De exemplu, pentru a transmite pe UART caracterul ‘k’ la baud rate de 9600 cu starea de stop este pe
1.5 biti, va trebui transmisă data corespunzătoare acestuia și anume 0x6B = 0b011001011. Pentru o
transmisie corectă, trebuie respectați timpii de transmisie, așa cum se arată în figura următoare:


Figure 46: Transmisia caracterului ‘k’ pe UART

Pentru această comunicație nu este obligatorie consultarea unui tabel cum ar fi Tabel 3 , deoarece VHDL
permite conversia automată din caracter / șir de caractere (string) în valoarea ASCII corespunzătoare. Astfel
se pot defini șiruri de caractere utilizând codul urmator:


type uart_data_type is array ( 0 to 11) of character;
constant uart_data_array: uart_data_type := ("Hello world") & LF;

Aici, LF reprezintă acronimul de la Line Feed, aceasta reprezentând, practic, o linie nouă.
Codul anterior salvează ca un șir de caractere constante “Hello world” urmat de o linie nouă, aceasta
fiind echivalentul “Hello world\n” din codul C.


Pentru conversia din șir de caractere în std_logic_vector se utilizează următoarea linie de cod:
std_logic_vector(to_unsigned(natural(character'pos(uart_data_array(char_counter))), 8))

Exemplul de folosire a acestui mod de utilizare a caracterelor se poate găsi în demo.vhd.
În următoarea imagine se pot vedea componentele de transmisie și recepție împreună cu pinii
corespunzători fiecărei componente:

Free download pdf