CID Lab Lucrarea 6

De la WikiLabs
Jump to navigationJump to search
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

Noțiuni și cunoștințe necesare

Cerințe

  • Realizați un automat care să citească scancodes trimise de către o tastatură PS2. Aceasta va avea următoarele porturi:
    • reset - intrarea de reset a circuitului care aduce automatul în starea inițială (atenție, datorită sincronizării dintre bitul de date și ceasul PS2, acest automat necesită un port de reset asincron pentru a funcționa corect);
    • ps2_clock - este intrarea de ceas pe care funcționează automatul, și care este produs de către interfața PS2 (atenție, circuitul este sensibil la frontul negativ de ceas);
    • ps2_data - este portul de intrare de date pe care se primesc serial (bit cu bit), datele de la tastatură;
    • scancode - este portul de ieșire, de tip registru, care stochează ultimul scancode primit;
    • valid_code - este o ieșire de un bit care specifică dacă conținutul registrului de ieșire scancode este valid (a fost completat cu toți cei 8 biți și valoarea checksum se potrivește);
    Automatul are următoarele stări:
    • STATE_READ_START_BIT - în această stare automatul așteaptă bitul de start (0), când acesta este produs, automatul trece în starea STATE_READ_SCANCODE, ieșirea valid_code devine 0, iar registrul intern de calcul al checksum devine și el 0;
    • STATE_READ_SCANCODE - în această stare automatul, folosind un numărător de 3 biți, citește bit cu bit scancode-ul primit de la tastatură și bitul citit se adună la checksum; când numărătorul ajunge la valoarea maximă, automatul trece în starea STATE_READ_CHECKSUM;
    • STATE_READ_CHECKSUM - valoarea checksum prezentă de pe portul de date se compară cu valoarea calculată în prealabil pentru toți biții scancode-ului iar dacă cele două valori sunt egale, ieșirea valid_code devine 1; automatul trece în starea STATE_READ_STOP_BIT;
    • STATE_READ_STOP_BIT - automatul trece în starea STATE_READ_START_BIT.
  • Realizați o memorie ROM care să facă tranziția de la scancode la valoarea numerică a tastei de la 0 la 9; pentru orice altă tastă, această memorie va da valoarea 4'd10.
  • Folosind modulele anterioare și un modul de control pentru afișajul cu 7 segmente, realizați un circuit care să afișeze tasta numerică apăsată pe afisaj (pentru orice altă tastă apasată, se va afișa caracterul E urmat de punct).

Observație: Documentația completă a interfeței PS2 pentru placa de dezvolatare Nexys 2, inclusiv scancode-urile tastelor, se găsește în manualul de referință al plăcii [1].

Cerințe suplimentare (opționale)