Diferență între revizuiri ale paginii „CID Lab Lucrarea 5”
De la WikiLabs
Jump to navigationJump to searchm (a redenumit CID Lab Lucrarea 55 în CID Lab Lucrarea 5 înlocuind redirecționarea) |
|||
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]] | ||
− | * [[Circuite secvențiale]] | + | * [[Memorii ROM]] |
− | * [[ | + | * [[Circuite secvențiale]], [[Numărătorul]] |
+ | * [[Generator de impulsuri cu factor de umplere variabil]] | ||
== Cerințe == | == Cerințe == | ||
− | * | + | * Realizați un circuit care să aprindă un led cu o intensitate variabilă, controlată de o valoare setată cu ajutorul switch-urilor SW7-SW0, folosind un generator cu factor de umplere variabil. |
− | * | + | * Realizați un circuit care să stingă apoi să aprindă un led treptat, folosind un generator de factor de umplere variabil. |
− | |||
− | |||
− | |||
<!-- | <!-- | ||
− | + | * Realizați un automat care să citească ''scancode''-urile 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), iar 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 diferite, 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). | ||
− | + | '''Atenție!!!''': Pentru a putea folosi semnalul primit de la pinul de ceas al interfeței PS2 ca semnal de ceas pentru un modul, în fișierul de constrângeri trebuie adăugată următoarea linie, unde ''ps2_clock'' este portul de intrare legat la pinul respectiv, deoarece acest pin nu este specificat ca semnal dedicat de ceas. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | <syntaxhighlight lang="Verilog"> | |
+ | net "ps2_clock" clock_dedicated_route = "false"; | ||
+ | </syntaxhighlight> | ||
+ | '''Observație''': Documentația completă a interfeței PS2 pentru placa de dezvolatare Nexys 2, inclusiv ''scancode''-urile tastelor, se găsesc în manualul de referință al plăcii [http://digilentinc.com/Data/Products/NEXYS2/Nexys2_rm.pdf]. | ||
+ | |||
+ | '''Observație''': Pinii necesari pentru conexiunea la interfața PS2 pe placa de dezvoltare Nexys 2 sunt R12 pentru ''ps2_clock'' și P11 pentru ''ps2_data''. | ||
+ | --> | ||
+ | |||
+ | <!-- | ||
== Cerințe suplimentare (opționale) == | == Cerințe suplimentare (opționale) == | ||
− | + | Realizați un modul Verilog care să permită stocarea unor figuri de afișaj pe 7 segmente într-o memorie RAM, apoi să afișeze conținutul memoriei deplasându-se de la dreapta la stânga, pe afișajul cu 7 segmente. | |
− | |||
--> | --> |
Versiunea de la data 19 aprilie 2015 19:51
Noțiuni și cunoștințe necesare
- Logică booleană și sisteme de numerație
- Sintaxă Verilog
- Utilizarea programului de simulare ModelSim
- Introducere în sinteza pe FPGA. Xilinx ISE
- Utilizarea programului de sinteză Xilinx ISE
- Memorii ROM
- Circuite secvențiale, Numărătorul
- Generator de impulsuri cu factor de umplere variabil
Cerințe
- Realizați un circuit care să aprindă un led cu o intensitate variabilă, controlată de o valoare setată cu ajutorul switch-urilor SW7-SW0, folosind un generator cu factor de umplere variabil.
- Realizați un circuit care să stingă apoi să aprindă un led treptat, folosind un generator de factor de umplere variabil.