Diferență între revizuiri ale paginii „CID Lab Lucrarea 6”

De la WikiLabs
Jump to navigationJump to search
 
(Nu s-au afișat 16 versiuni intermediare efectuate de un alt utilizator)
Linia 6: Linia 6:
 
* [[Introducere în sinteza pe FPGA. Xilinx ISE]]
 
* [[Introducere în sinteza pe FPGA. Xilinx ISE]]
 
* Utilizarea programului de sinteză [[Tutorial Xilinx ISE|Xilinx ISE]]
 
* Utilizarea programului de sinteză [[Tutorial Xilinx ISE|Xilinx ISE]]
* [[Memorii ROM]]
+
* [[Circuite secvențiale]]
* [[Circuite secvențiale]], [[Numărătorul]]
+
* [[Memorii RAM]]
* [[Automate]], [[Tastatura PS2]]
 
  
 
== Cerințe ==
 
== Cerințe ==
  
* Realizați un automat care să citească ''scancodes'' trimise de către o tastatură PS2. Aceasta va avea următoarele porturi:
+
* Descrieți în Verilog o memorie RAM 16x4b cu un port de citire-scriere sincron.
** 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);
+
* Legați adresa și data de intrare la switch-uri.
** 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);
+
* Legati semnalul de activare a scrierii la unul din butoane (BTN0 ... BTN3).
** ps2_data - este portul de intrare de date pe care se primesc serial (bit cu bit), datele de la tastatură;
+
* Legați ieșirea la leduri.
** scancode - este portul de ieșire, de tip registru, care stochează ultimul ''scancode'' primit;
+
* Scrieți adresele 3 6 și 10 cu valorile 2, 1 și 0 apoi citiți-le în aceeași ordine.
** 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;
+
[[Fișier:lab5.png|thumb|Schema bloc a circuitului]]
** 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;
+
* Descrieți în Verilog un divizor de frecvență care să genereze un ceas cu frecvența de 250Hz. Scrieți un modul de test pentru acest circuit în care semnalul de ceas descris în modulul de test să fie aibă exact perioada ceasului prezent pe placa de dezvoltare. Simulați circuitul în Modelsim.
** STATE_READ_STOP_BIT - automatul trece în starea STATE_READ_START_BIT.
+
* Descrieți în Verilog un generator de impulsuri cu factor de umplere variabil folosind un registru de numărare de 8 biți. Scrieți un modul de test pentru acest circuit în care semnalul de ceas descris în modulul de test să fie aibă exact perioada ceasului prezent pe placa de dezvoltare. Simulați circuitul în Modelsim.
* 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 blocuri de instanțiere, descrieți în Verilog un circuit (numit Blinker) care să respecte schema din figură. Explicați funcționarea lui. Sintetizați circuitul legând ieșirile la leduri și configurați FPGA-ul.
* Folosind modulele anterioare, realizați un circuit care să afișeze tasta numerică apăsată pe afisajul cu 7 segmente (pentru orice alta tasta apasata, se va afisa caracterul E urmat de punct).
+
* Descrieți în Verilog un numărător pe 3 biți care odată ajuns la valoarea maximă, să se decrementeze până la 0, și ajuns la 0 să se incrementeze până la valoarea maximă.
 +
* Descrieți în Verilog un decodor cu intrarea pe 3 biți.
 +
* Folosind modulele anterioare și un divizor de frecvență cu frecvența de ieșire de 4Hz, descrieți în Verilog prin blocuri de instanțiere un modul care să afișeze pe leduri ieșirea decodată a numărătorului care va funcționa la frecvența dată de divizorul de frecvență. Sintetizați circuitul și configurați FPGA-ul.
 +
 
 +
'''Atenție:''' Ieșirea generatorului cu factor de umplere variabil este de 1 bit. Acesta trebuie multiplicat de 8 ori pentru a putea fi legat la ieșirea out a modulului Blinker.
  
 
== Cerințe suplimentare (opționale) ==
 
== Cerințe suplimentare (opționale) ==
 +
 +
Descrieți în Verilog un circuit care să afișeze pe toate ledurile, în același timp, repetitiv, codul morse pentru SOS (. . . - - - . . .). Acest circuit vă poate salva viața!
 +
 +
-->

Versiunea curentă din 19 aprilie 2015 19:51

Noțiuni și cunoștințe necesare

Cerințe

  • Descrieți în Verilog o memorie RAM 16x4b cu un port de citire-scriere sincron.
  • Legați adresa și data de intrare la switch-uri.
  • Legati semnalul de activare a scrierii la unul din butoane (BTN0 ... BTN3).
  • Legați ieșirea la leduri.
  • Scrieți adresele 3 6 și 10 cu valorile 2, 1 și 0 apoi citiți-le în aceeași ordine.