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 stos001
: jak wyżej, odejmij dwie liczby (później wpisaną od wcześniej wpisanej)010
: jak wyżej, pomnóż dwie liczby011
: jak wyżej, podziel dwie liczby100
: jak wyżej, policz resztę z dzielenia dwóch liczb101
: zdejmij liczbę ze stosu110
: 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.