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 nagranie tego na filmie):
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). Regulację zademonstrować na filmie. Należy także przed rozpoczęciem
demonstracji kalkulatora ustawić jasność tak, aby obraz wyświetlanych cyfr był
najwyraźniejszy (zbyt duża jasność powoduje „rozmycie” segmentów).