Procesor MicroBlaze w układzie FPGA



Treść zadania

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.