.. _z1:

==========================
Zadanie 1: Mini-kalkulator
==========================

Data ogłoszenia: 17.10.2018

Termin oddania: 14.11.2018

Napisać prosty kalkulator operujący na liczbach 4-bitowych.  Wejściami do
kalkulatora będą ustawiane na ``sw[7:4]`` (nazwijmy je ``a``) oraz
``sw[3:0]`` (nazwijmy je ``b``).  Wejścia będą traktowane jako liczby bez
znaku.  Przyciskami będziemy wybierać tryb pracy kalkulatora:

- ``btn[0]`` naciśnięty: dodawanie i odejmowanie.  Na ``led[7:4]`` pokazujemy
  ``a+b``, a na ``led[3:0]`` pokazujemy ``a-b``.
- ``btn[1]`` naciśnięty: minimum i maksimum.  Na ``led[7:4]`` pokazujemy
  ``min(a, b)``, a na ``led[3:0]`` pokazujemy ``max(a, b)``.
- ``btn[2]``: mnoĹźenie.  Na ``led[7:0]`` pokazujemy 8-bitowy wynik mnoĹźenia
  ``a * b``.
- ``btn[3]``: dzielenie.  Na ``led[7:4]`` pokazujemy ``a / b``, a na
  ``led[3:0]`` pokazujemy ``a % b``.  Jeśli ``b == 0``, możemy pokazać cokolwiek.
- brak naciśniętych przycisków: diody wyłączone.
- więcej niż jeden naciśnięty przycisk: dowolnie.

Jako część rozwiązania należy napisać układ kombinacyjny dzielący dwie liczby,
zrealizowany jako moduł parametryzowany długością liczb w bitach.  Najprościej
jest to zrobić, generując wynik dzielenia od góry bit po bicie i odejmując
za każdym razem odpowiednio przesunięty dzielnik, jeśli wynikowym bitem jest
1 (ale istnieją bardziej zaawansowane algorytmy).