Procesor MicroBlaze w układzie FPGA



Treść zadania (przystosowana do laboratorium zdalnego)

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).