Zadanie 3: Kalkulator

Data ogłoszenia: 14.11.2018

Termin oddania: 09.01.2019

Napisać prosty kalkulator operujący na odwrotnej notacji polskiej.

Kalkulator ma operować na 512-elementowym stosie 32-bitowych liczb ze znakiem. Po resecie, stos ma być pusty. Kalkulator w każdej chwili ma wyświetlać na wyświetlaczu liczbę na górze stosu. Jeśli btn0 jest naciśnięty, ma wyświetlać górne 16 bitów tej liczby, w przeciwnym wypadku ma wyświetlać niskie 16 bitów. Jeśli stos jest pusty, wyświetlacz ma wyświetlać ----.

Naciśnięcie btn1 ma wrzucić na stos 8-bitową liczbę wybraną przez sw, rozszerzoną z lewej zerami.

Naciśnięcie btn2 ma zdjąć ze stosu liczbę, przesunąć ją w lewo o 8 bitów, zapisać 8 bitów wybranych przez sw w niskich bitach, po czym wrzucić z powrotem na stos (pozwalając na wpisanie dłuższych liczb niż 8-bitowe).

Naciśniecie btn3 ma wykonać operację wybraną przez sw[2:0]:

  • 000: zdejmij dwie liczby ze stosu, dodaj je, wrzuć na stos

  • 001: jak wyżej, odejmij dwie liczby (później wpisaną od wcześniej wpisanej)

  • 010: jak wyżej, pomnóż dwie liczby

  • 011: jak wyżej, podziel dwie liczby

  • 100: jak wyżej, policz resztę z dzielenia dwóch liczb

  • 101: zdejmij liczbę ze stosu

  • 110: skopiuj liczbę na górze stosu (odłóż ją jeszcze raz)

  • 111: zamień miejscami dwa górne miejsca na stosie

Naciśnięcie btn3 i btn0 jednocześnie ma zresetować cały układ do stanu początkowego.

Na led[6:0] należy wyświetlać, ile liczb jest obecnie na stosie (modulo 128).

W razie wystąpienia jakiegokolwiek błędu, należy zignorować żądaną operację i ustawić flagę błędu. Flagę błędu należy czyścić po wykonaniu jakiejkolwiek udanej operacji. Flagę błędu należy wystawić na led[7].

Błędy, które powinny być wykrywane, to:

  • przepełnienie stosu

  • zdjęcie liczby z pustego stosu

  • dzielenie przez 0

Operacje dodawania, odejmowania oraz mnożenia powinny być wykonywane modulo 2**32.