CID Lab Lucrarea 5: Diferență între versiuni
De la WikiLabs
Jump to navigationJump to search
m (a redenumit CID Lab Lucrarea 55 în CID Lab Lucrarea 5 înlocuind redirecționarea) |
Fără descriere a modificării |
||
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.