Task 1-1 (2p). Implementați un modul care afișează cifra “0” folosind afișajul cu 7 segmente.

Task 1-2 (3p). Implementați un modul care afișează ziua și luna voastră de naștere (ex: “24.06”) folosind afișajul cu 7 segmente.

Daca ciclam foarte repede printre cele 4 cifre va aparea un efect de bleeding. Pentru a-l combate introduceti o intarziere de 1ms intre cifre.

Task 2 (5p). Realizați un timer utilizând 7 segment display. Folosiți primele 2 cifre pentru afișarea minutelor, iar ultimele 2 pentru afișarea secundelor. Va trebui să întârziați clock-ul intern al plăcuței pentru a obține frecvența aferenta 1s. După cum stiți, la 60s, display-ul aferent secundelor se va reseta la 00, iar display-ul aferent minutelor va crește cu o unitate. La activarea switch-ului reset, timer-ul vostru trebuie să revină la 00:00:

  1. In clock_div.v, definiti CLK_DIV, dupa care implementati logica divizorului de ceas. refresh_fq poate fi folosit drept valoare de refresh pentru cifre, ~381Hz fiind “good enough”.
  2. In counter.v implementati logica numaratorului.
  3. In bin2bcd.v implementati algoritmul Double Dabble, pentru a converti valoarea numaratorului in 2 cifre.
  4. In display_7seg.v: implementati logica corespunzatoare pentru ciclarea printre cifre; afisarea fiecarei cifre; afisarea punctului intre minute si secunde.
  5. In task2.v, legati firele corespunzator intre toate modulele implementate anterior pentru a obtine logica completa a display-ului.
  6. (1p - Bonus) Implementati functionalitatea dublarii vitezei numaratorului prin activarea unui switch.