.. _z2:

=================
Zadanie 2: Stoper
=================

Data ogłoszenia: 24.10.2018

Termin oddania: 05.12.2018

Napisać prosty stoper.

Stoper wyświetla aktualny stan (liczbę dziesiętną 0-9999) na wyświetlaczu
7-segmentowym.  Po uruchomieniu, stoper ma pokazywać 0 i być zatrzymany.
Przyciski mają następujące funkcje:

- ``btn[3]``: resetuje stoper do stanu początkowego.
- ``btn[2]``: zatrzymuje stoper.
- ``btn[1]``: uruchamia stoper w trybie odliczania w górę.
- ``btn[0]``: uruchamia stoper w trybie odliczania w dół.

Gdy stoper jest uruchomiony, przełączniki ``sw[4:0]`` wybierają szybkość
odliczania: stoper powinien zwiększać lub zmniejszać swój licznik o 1
z częstotliwością ``oscylator / 2 ** sw[4:0]``.  Przełącznik ``sw[7]`` wybiera
źródło sygnału zegarowego: przełączony w dół wybiera zegar ``mclk`` (oscylator
50MHz na płytce), a przełączony w górę wybiera zegar ``uclk`` (oscylator
zewnętrzny włożony w gniazdko).

Jeśli stoper jest w trybie odliczania w dół i jego obecną wartością licznika
jest 0, powinien się zatrzymać.  Analogicznie powinien się zatrzymać, jeśli
wartością licznika jest 9999 i jest w trybie odliczania w górę.

Diody powinny wyświetlać następujące informacje kontrolne:

- ``led[0]``: świeci, jeśli stoper jest w trybie odliczania w dół.
- ``led[1]``: świeci, jeśli stoper jest w trybie odliczania w górę.
- ``led[2]``: świeci, jeśli odliczanie zatrzymało się przez osiągnięcie
  minimalnej bądź maksymalnej wartości licznika (naciśnięcie któregokolwiek
  przycisku powinno wyczyścić ten stan).

Należy pamiętać o zastosowaniu synchronizatorów na wejściach od użytkownika
i odpowiedniego modułu do przełączania sygnału zegarowego.