Zadaniem jest realizacja na bazie układu FPGA prostego systemu wbudowanego, wykorzystującego procesor MicroBlaze oraz układy peryferyjne do realizacji uproszczonego kalkulatora z Odwrotną Notacją Polską (Reverse Polish Notation).
Konfigurację i syntezę systemu mikroprocesorowego z wykorzystaniem narzędzia IP INTEGRATOR, będącego częścią programu Vivado, opisuje następujący screencast:
Synteza procesora Microblaze i układów peryferyjnych
Należy zrealizować system mikroprocesorowy według instrukcji ze screencastu.
Plik z ograniczeniami projektowymi nie jest wykorzystywany w tym ćwiczeniu.
Środowisko programisty (SDK) opisuje kolejny screencast:
Środowisko programisty systemu z procesorem Microblaze
Należy napisać w języku C program implementujący czterodziałaniowy kalkulator RPN (Reverse Polish Notation) działający tylko na liczbach całkowitych. Jako wzorzec działania przyjąć kalkulator HP-12C dla którego istnieje wiele emulatorów, poniżej przykłady:
Emulator dokładny: https://stendec.io/ctb/hp12c.html
Emulator uproszczony (ale z widokiem całego stosu): https://www.lehigh.edu/~sgb2/rpnTutor.html
Emulator innego kalkulatora RPN: http://www.alcula.com/calculators/rpn/
Instrukcja obsługi kalkulatora HP-12C: http://h10032.www1.hp.com/ctg/Manual/c00363319.pdf
Wprowadzanie danych do kalkulatora ma się odbywać z wykorzystaniem portu RS232 (domyślne ustawienie UartLite: 9600 bps, 8-bitów, bez parzystości).
Kalkulator ma wykorzystywać wszystkie osiem wyświetlaczy 7-segmentowych (8 wyjść GPIO sterujących anody i 8 wyjść GPIO sterujących segmenty). Na najstarszej pozycji ma się wyświetlać znak minus jeżeli liczba w rejestrze X jest ujemna (jeżeli jest dodatnia nie ma się nic wyświetlać). Na siedmiu kolejnych pozycjach ma być wyświetlana zawartość rejestru X (także podczas wprowadzania). Wprowadzanie ma się odbywać od prawej strony wyświetlacza – podobnie jak w zwykłym kalkulatorze. Zera nieznaczące powinny być wygaszone.
Zaimplementować funkcjonalność 4-elementowego stosu realizującego mechanizm RPN (rejestry X, Y, Z, T) – przy czym rejestr X powinien być widoczny na wyświetlaczu 7-segmentowym. Jako rozszerzenie możliwości kalkulatora należy dodać prosty monitor niewidocznych rejestrów stosu (Y, Z, T) na diodach LED (3 najmłodsze diody: dioda nr 2 – rejestr Y, dioda nr 1 – rejestr Z, dioda nr 0 – rejestr T). Diody powinny się świecić, jeżeli zawartość rejestrów jest niezerowa.
Uwaga: zawartość rejestru T nie zmienia się podczas operacji zdejmowania danej ze stosu (np. podczas operacji dodawania).
Zaimplementować wyłącznie operacje arytmetyczne dodawania [+], odejmowania [-], mnożenia [*], dzielenia [/] i klawisz CHS [S] (zmiana znaku).
Z obsługi
wprowadzania danych i stosu zaimplementować jedynie klawisze:
ENTER
[ENTER] (wprowadzenie na stos zawartości rejestru X),
CLx [C] (kasowanie rejestru X),
X↔Y [X] (zamiana zawartości rejestrów X i Y),
R↓ [R] (rotacja rejestrów w dół, zawartość rejestru X zostaje przesłana do rejestru T).
W nawiasach kwadratowych podano znak, którego przesłanie przez interfejs RS232 (putty) powinno spowodować wykonanie operacji.
Błąd operacji (dzielenie przez 0, przekroczenie zakresu) powinien spowodować
wyświetlenie napisu Error na wyświetlaczu 7-segmentowym).
Napis powinien zniknąć po naciśnięciu CLx czyli wysłaniu znaku [C] – co powinno także
wyzerować rejestr X.
Weryfikacja układu
Należy zweryfikować układ praktycznie poprzez zaprogramowanie płytki testowej z układem FPGA. W tym ćwiczeniu nie wykonuje się symulacji.
Aby wysyłać dane na płytkę należy uruchomić program Putty, wybrać połączenie „Serial”, wpisać prędkość (9600) oraz port: COMx (x to numer portu, należy go odczytać w programie „device manager” (program ten można łatwo znaleźć na zdalnym komputerze za pomocą klawisza szukania „lupa”) – pod pozycją „Ports (COM&LPT)” należy znaleźć urządzenie o nazwie „USB serial Port” – numer portu będzie podany obok). Należy jeszcze włączyć echo lokalne, aby znaki wysyłane do płytki były widoczne na ekranie – trzeba kliknąć w kategorię „Terminal” i zaznaczyć opcję „Force on” dla „Local echo”. Potem kliknąć w klawisz „Open” w celu otwarcia połączenia.
Weryfikacja praktyczna na zaliczenie polega na sprawdzeniu działania układu na płytce FPGA poprzez wykonanie kilku obliczeń i prezentację działania prowadzącemu laboratorium:
1. Należy zrealizować następujące
obliczenie testowe (podane wartości wprowadzić do putty):
numer_indeksu S ENTER 5 ENTER 6 * 3 ENTER 4 * + 7 – 70 X /
+ S 2 +
2. Następnie przeprowadzić prosty test
wprowadzania, przeglądania i kasowania rejestrów:
1 ENTER 2 ENTER 3 ENTER 4 R R R R C ENTER ENTER ENTER
3. Wprowadzić dowolnie wybrane obliczenie, które spowoduje przekroczenie zakresu i wyświetlenie błędu. Następnie błąd skasować.
Dane wprowadzać powoli, co
około 2-3 sekundy, aby można było sprawdzić czy reakcja wyświetlacza
7-segmentowego i diod LED jest prawidłowa.
Zadanie
dla chętnych za dodatkowe 4 punkty
Zrealizować regulację jasności wyświetlacza za pomocą interfejsu RS232. Znak przecinka [,] ma powodować zmniejszenie, a znak kropki [.] zwiększenie jasności wyświetlacza o jeden krok (liczba kroków od 8 do 16). Wskazówka: regulację zrealizować poprzez dodatkowe okresy, w których nie wyświetla się żaden wyświetlacz (wszystkie anody wyłączone). W tym celu można zwiększyć nieco częstotliwość przełączania wyświetlaczy (aby zapobiec jej nadmiernemu spadkowi po dodaniu ciemnych okresów). Rezultaty zademonstrować prowadzącemu laboratorium.