Extras din proiect
1. Port Serial (UART) – Tx
Sa se scrie modelul Verilog al unui modul de transmisie seriala uart_tx.v si un modul de test testbench_tx.v
Interfata:
Nume directie marime (nr de biti) descriere obs
reset_n input 1 reset general asincron
clk input 1 clock
tx output 1 transmisia seriala
load_en input 1 -semnal de control pentru incarcarea paralela a octetului ce urmeaza a fi transmis serial pe tx
-activ pe 1
load_data input 8 -data ce urmeaza a fi transmisa serial pe tx cand load_en e activ
baud_rate_period input 2 determina alegerea uneia din cele 4 rate de transfer:
00 –16
01 - 32
10 - 64
11 – 128
Nota: durata unui bit este egala cu clk_period * baud_rate_period.
load_ready output 1 circuitul este gata pentreu primirea load_data (semnaleaza preluarea load_data) Clientul poate prezenta o noua data
Descriere functionala:
Circuitul realizeaza codare seriala si transmite pe portul de iesire tx un sir de octeti primiti pe interfata paralela load_data.
Timing interfata paralela:
Circuitul incarca load_data intr-un registru intern inainte de transmisia seriala. Incarcarea se face daca load_en == 1 si daca load_ready ==1;
Dupa incarcarea datelor de pe portul load_data si pana la terminarea transmisiei, load_ready are valoarea 0, pentru a preveni o noua comanda. O noua data poate fi initiata pe interfata load_data & load_en doar daca load_ready == 1.
Timing interfata seriala:
Fiecare perioada a shift_clk din figura de mai jos dureaza un numar de clk de sistem in acord cu valoarea portului e intrare baud_rate_period din tabelul de mai sus, adica
shift_clk_period = clk_period * baud_rate_period
Pentru fiecare octet scris pe interfata paralela BYTE_VALUE[7:0], se vor transmite serial urmatorii biti:
0, BYTE_VALUE[0], BYTE_VALUE[1]... BYTE_VALUE[7], 1
Nota:
• primul bit este bitul START si este intotdeauna egal cu 0
• ultimul bit este bitul STOP si este intotdeauna egal cu 1
Testarea:
Modulul testbench va include instanta circuitulul testat si va genera semnalele de intrare pentru circuitul testat.
Sa se realizeze transmisia sucessiva a cate 4 octeti 0xaa, 0xab, 0xac, 9xdd pentru fiecare rata de transfer posibila.
2. Port Serial (UART) – Rx
Sa se scrie modelul Verilog al unui modul de receptie seriala uart_rx.v si un modul de test testbench_rx.v.
Nume directie marime (nr de biti) descriere obs
reset_n input 1 reset general asincron
clk input 1 clock
rx input 1 receptia seriala
rec_ready output 1 -semnal de semnalizare a existentei unui octet complet receptionat serial.
-activ pe 1
rec_data output 8 -data receptionalta serial prezentata in format parallel.
baud_rate_period input 2 determina alegerea uneia din cele 4 rate de transfer:
00 –16
01 - 32
10 - 64
11 – 128
Nota: durata unui bit este egala cu clk_period * baud_rate_period.
Rec_err output 1 Semnal de eroare; este active pe 1 si semnalizeaza faptul ca in perioada bitului de STOP rx nu are valoarea 1
Descriere functionala:
Circuitul realizeaza receptia seriala pe portul de intrare rx a unui sir de octeti; acestia sunt prezentati pe interfata paralela formata din porturile rec_data, rec_ready, rec_err.
Timing interfata seriala:
Fiecare perioada a shift_clk din figura de mai jos dureaza un numar de perioade clk confiorm cu valoarea portului de intrare baud_rate_period din tabelul de mai sus, adica:
shift_clk_period = clk_period * baud_rate_period
Pentru fiecare octet scris pe interfata paralela BYTE_VALUE[7:0], se vor transmite serial urmatorii biti:
0, BYTE_VALUE[0], BYTE_VALUE[1]... BYTE_VALUE[7], 1
Nota:
• primul bit este bitul START si este intotdeauna egal cu 0
• ultimul bit este bitul STOP si este intotdeauna egal cu 1
Circuitul este initial in stare incativa (rx == 1);
Circuitul trebuie sa detecteze tranzitia 1->0 si sa porneasca un contor ce numara de la 0 la baud_rate_period-1 de un numar de ori egal cu 8+1;
de fiecare data cand numaratorul ajunge la baud_rate_period-1 (momentele corespund sagetilor verticale din figura de mai jos) contorul o ia de la capat.
Fiecare moment simbolizat de sagetile din figura de mai jos este folosit pentru a citi valoarea rx si a o salva in registrul de receptie a datelor, pe pozitia corespunzatoare, mai putin ultimul bit, cel de stop care nu se salveaza; astfel, dupa receptia celor 8 biti (dupa cel de start si pana la cel de stop) se vor regasi pe portul rec_data impreuna cu rec_ready si (eventual) rec_error.
Timing interfata paralela:
-Dupa ce toti cei 8 biti ai unui octet plus bitul de STOP au fost receptionati si valoarea rx pentru bitul de STOP este egala cu 1 atunci valoarea octetului este scrisa pe rec_data, rec_ready devine 1 si rec_err devine 0. Aceste trei valori raman pe interfata paralela pana la detectarea unui bit de START pe interfata seriala.
-Dupa ce toti cei 8 biti ai unui octet plus bitul de STOP au fost receptionati si valoarea rx pentru bitul de STOP este egala cu 0 atunci valoarea octetului receptionat nu se inscrie in rec_data, rec_ready devine 1 si rec_err devine 1 (pentru a semnaliza eroarea de receptie).
Aceste trei valori raman pe interfata paralela pana la detectarea unui bit de START pe interfata seriala, dupa care rec_ready devine 0.
Preview document
Conținut arhivă zip
- Proiect Modul de Transmisie Seriala UART.doc