Tutorial – projektowanie systemu dwuprocesorowego FPGA

Transkrypt

Tutorial – projektowanie systemu dwuprocesorowego FPGA
Tutorial – projektowanie systemu dwuprocesorowego FPGA
Celem niniejszego tutoriala jest zapoznanie się z zagadnieniami związanymi z
projektowaniem systemów wieloprocesorowych w układach FPGA.
Tutorial jest zgodny z oprogramowaniem EDK w wersji 13.2 i dotyczy projektu
dwuprocesorowego systemu FPGA realizującego obsługę kodeka audio AC-97.
Implementację projektu należy wykonać na platformie ewaluacyjnej Digilent ATLYS.
Przed rozpoczęciem pracy należy zapoznać się z opisem projektu, który zawiera opis
architektury oraz sposobu działania systemu.
Aby rozpocząć pracę należy otworzyć program Xilinx Platform Studio(XPS).
1. Po otwarciu programu należy wybrać opcję Base System Builder, jest to kreator
ułatwiający projektowanie systemów procesorowych.
2. W pierwszym oknie kreatora ustawiamy ścieżkę, pod którą zostanie utworzony
projekt(żadna z nazw folderów w ścieżce nie może zawierać spacji!), jako magistralę
wybieramy AXI, a następnie ustawiamy ścieżkę do sterowników platformy
rozwojowej ATLYS:
set peripherial repository serach path:
…..\Multicore_embedded\Atlys_AXI_BSB_Support\lib
(Folder zawierający sterowniki jest dołączony do tutoriala)
3. W kolejnym oknie platforma sprzętowa została automatycznie wybrana na Digilent
ATLYS, więc wybieramy Dual MicroBlaze Processor System i klikamy Next.
4. W tym kolejnym oknie należy wybrać parametry obu procesorów zawartych w
systemie:
a. Zegar systemu należy pozostawić w tej części bez zmian.
b. Dla obu procesorów należy wybrać local memory size 16KB, a część
dotyczącą pamięci podręcznej procesora pozostawić bez zmian.
c. W ramce included peripherials powinny znajdować się jedynie peryferia
MCB_DDR2 oraz RS232UART.
5. Aby wygenerować podstawę sprzętową systemu należy kliknąć Finish. Po chwili
wygenerowany system zostanie przedstawiony w widoku System Assembly View.
6. Dzięki zastosowaniu dwóch procesorów w systemie jesteśmy w stanie zmniejszyć
częstotliwość taktowania zegara procesorów tak, aby ograniczyć moc pobieraną przez
system przy zachowaniu pełnej funkcjonalności.
7. Zmian związanych z taktowaniem zegarów dokonujemy w narzędziu Hardware>Launch Clock Wizard. Narzędzie to umożliwia zmianę taktowania zegarów
wszystkich komponentów systemu. Zaznaczamy opcję Enable Full Dynamic Range.
W przypadku naszego projektu chcemy użyć zegara 25MHz więc ustawiamy taką
wartość we wszystkich procesorach, magistralach oraz peryferiach poza MCB_DDR2
gdzie wartości powinny wyglądać dokładnie tak jak na przedstawionym rysunku:
Opracował: Damian Mroczek
Strona 1
Po takim ustawieniu zegarów systemu należy kliknąć validate clocks, a następnie
OK.
8. Kolejnym etapem będzie dodanie do projektu sprzętowego kontrolera kodeka AC-97.
a. Aby tego dokonać należy skopiować dołączony do tutoriala folder
ac97ctrl_v_1_00_a do folderu pcorces w katalogu projektu.
b. Po skopiowaniu należy wybrać Project->Rescan User Repositories, aby
program wykrył dodanie nowego IP Core’a do katalogu
c. Teraz w zakładce IP Catalog po lewej stronie interfejsu w podkatalogu USER
pojawił się nowy IP Core o nazwie ac97ctrl
d. Należy wybrać ten IP Core prawym klawiszem myszy i wybrać Add IP,
następnie dwa razy wybrać OK nie zmieniając domyślnych opcji.
e. Po chwili w zakładce Bus Interfaces zostanie dodany nowy sprzęt, następnie
należy sprawdzić w zakładce Adresses czy został mu przydzielony adres.
f. Kolejnym etapem jest przejście do zakładki Ports w celu modyfikacji ustawień
portów kontrolera – wszystkie niepodłączone porty należy uczynić portami
wyjściowymi w przedstawiony sposób:
Opracował: Damian Mroczek
Strona 2
g. Kolejnym etapem jest przyporządkowanie zewnętrznych portów do
konkretnych pinów układu FPGA, należy to zrobić modyfikując plik
system.ucf znajdujący się w zakładce Project
h. Dodanie nowego portu zewnętrznego odbywa się poprzez wstawienie
następującej linii w tym pliku:
NET ac97ctrl_0_sync_pin LOC = "U17" | IOSTANDARD = "LVCMOS33";
( ta linia oznacza dla programu przyporządkowanie sygnału ac97ctrl_0_sync_pin do pinu U17)
Korzystając z tego przykładu należy przyporządkować wszystkie 4 pozostałe
sygnały związane z kontrolerem według następującego szablonu:
ac97ctrl_0_sdi_pin -> T18
ac97ctrl_0_sdo_pin -> N16
ac97ctrl_0_bitclk_pin -> L13
ac97ctrl_0_reset_c_pin ->T17
9. Po wykonaniu tej czynności został zaprojektowny cały system dwuprocesorowy, który
posłuży do uruchomienia aplikacji umożliwiającej obsługę kodeka audio AC-97
znajdującego się na płytce rozowjowej. Aby obejrzeć schemat blokowy systemu
należy kliknąc Project->Generate Block Diagram Image.
10. Kolejnym krokiem jest przeprowadzenie syntezy oraz implementacji systemu, aby
tego dokonać należy wybrać Hardware->Generate Bitstream
11. Jeżeli proces przebiegł bez błędów mamy zaprojektowaną platformę sprzętową, aby
przejść do projektu oprogramowania należy kliknąć Export Design to SDK i wybrać
opcję Export Only.
Dalsza część projektu wykonywana jest w programie Software Development Kit:
12. W celu utworzenia aplikacji na zaprojektowaną platformę należy otworzyć program
SDK pakietu Xilinx EDK.
13. Po otworzeniu aplikacji jako workspace wybieramy pusty folder na dysku, po
otwarciu programu zamykamy okno powitalne.
14. W celu stworzenia projektu nowej aplikacji wybieramy File->New->Xilinx C
Project, następnie zostaniemy zapytani czy chcemy wyspecyfikować platformę
sprzętową na jakiej będzie pracował projekt, wybieramy Specify następnie wpisujemy
nazwę projektu oraz podajemy ścieżkę do pliku BMM wyeksportowanego przez
program XPS, plik znajduje się w lokalizacji projektu, w folderze SDK.
Opracował: Damian Mroczek
Strona 3
15. Po wykonaniu tej czynności program automatycznie wróci do tworzenia nowego
projektu w języku C. W otwartym oknie zmieniamy nazwę projektu na recorder_mb1
i pozostawiamy Project Template: Hello World oraz Processor: microblaze_1
16. W kolejnym oknie zmieniamy nazwę projektu z hello_world_bsp_0 na recorder_bsp
i klikamy Finish.
17. W analogiczny sposób tworzymy nowy projekt dla procesora microblaze_0 o nazwie
user_system_0
18. W ten sposób wygenerowane zostały dwa puste projekty, które można modyfikować
w celu zaprojektowania aplikacji, pierwszym krokiem jest zmiana nazwy pliku
hello_world.c w każdym projekcie odpowiednio na recorder.c oraz user_system.c.
19. W kolejnym etapie należy zamienić kod zawarty w tych plikach na kod dołączony do
tutoriala – nazwy plików odpowiadają sobie.
20. Po wklejeniu kodu do odpowiednich plików należy do każdego projektu dodać
bibliotekę kodekac97.h. Biblioteka ta zawiera funkcje obsługujące kodek
umieszczony na płytce rozwojowej.
a. Aby to zrobić należy kliknąć prawym przyciskiem myszy na folder src, a
następnie New->Header file. Jako nazwę należy wpisać kodekac97.h i
kliknąć Finish.
b. Następnie należy wkleić do tego pliku zawartość załączonej biblioteki o tej
samej nazwie.
c. Zadanie należy wykonać w obu podprojektach
21. Kolejnym etapem jest zadbanie o to, aby dane instrukcji oraz dane podręczne
procesorów nie były umieszczone w jednym obszarze pamięci. Należy to zrobić
poprzez modyfikację pliku linkera lscript.ld w obu podprojektach. Należy to wykonać
otwierając i modyfikując pliki w sposób przedstawiony na rysunku:
Wszystkie sekcje linkera należy przypisać do pamięci BRAM procesora.
Opracował: Damian Mroczek
Strona 4
Zadanie 1
W kodzie user_system.c celowo został pominięty kod odpowiadający za obsługę bloku
mailbox. Należy uzupełnić kod we wskazanym na rysunku miejscu:
Konfiguracja bloku mailbox przebiega identycznie jak bloku mutex.
Wskazówki:
-Należy użyć funkcji konfigurującej odpowiadającej blokowi mailbox:
XMbox_LookupConfig(ID);
-Jako ID należy użyć znalezionego w bibliotece xparameters.h ID odpowiadającego
danemu procesorowi.(np. XPAR_MAILBOX_0_IF_5_DEVICE_ID)
Zadanie 2
Procesory podczas pracy programu wysyłają sobie 32 bitowe wiadomości takie jak rozkaz
rozpoczęcia nagrywania, komunikat o błędzie, oraz wskaźnik do nagrania.
Realizacja wysyłania i odbierania tych wiadomości powinna zostać obsłużona przez funkcje
XMbox_Write oraz XMbox_Read, pełen opis użycia tych funkcji znajduje się w
dokumentacji bloku mailbox dostępnej w pliku system.mss w mailbox: documentation.
Funkcje powinny zostać użyte w następujących miejscach zaznaczonych w kodzie:



///////wyslij polecenie nagrania///////////
//////wyslij polecenie zwolnienia pamieci///////
/////obsluga odebrania wskaznika nagrania///////
W ostatnim punkcie należy dwukrotnie użyć funkcji w zaznaczonych w kodzie miejscach
Wskazówki:
- jako BytesRecvdPtr użyj zmiennej bytesrcvd zadeklarowanej w programie
-jeżeli występują problemy spróbuj rozpocząć Debugowanie programu, aby to zrobić należy
kliknąć Program FPGA, a następnie wybrać prawym klawiszem myszy projekt user_system
i kliknąć Debug->Launch on Hardware. Następnie krok po kroku obserwujemy działanie
kodu.
Opracował: Damian Mroczek
Strona 5
Zadanie 3
Analogicznych modyfikacji dokonaj w zaznaczonych w kodzie miejscach w pliku recorder.c,
aby umożliwić obustronną komunikację programów.
22. Po wykonaniu zadań 1,2 i 3 możliwe jest w sprawdzenie w pełni działającego
programu , aby sprawdzić działanie należy skonfigurować program:
23. Należy podłączyć kabel usb->prog oraz drugi usb->UART, aby umożliwić
komunikację z programem. Podłączamy również kablami źródło i odbiornik dźwięku,
a następnie włączamy płytkę.
24. Programujemy układ FPGA poprzez wybranie Program FPGA, a następnie
wykonujemy czynności:
a. Uruchamiamy user_system poprzez zaznaczenie prawym klawiszem myszy i
wybór Run->Launch on Hardware, a następnie to samo robimy z
podprojektem recorder.
b. Wybieramy Run->Run Configuratrions…
c. Wybieramy recorder.elf i zmieniamy Device Initialization na Reset
Processor Only, zatwierdzamy zmianę.
d. W tym samym oknie dwukrotnie klikamy Launch group gdzie dodajemy pliki
elf user_system oraz rekorder (uwaga user_system musi być pierwszy na
liście, ponieważ przy inicjalizacji resetuje układ FPGA).
e. Następnie klikamy Run w dolnym prawym rogu.
f. W tym przypadku oba procesory są uruchamiane jednocześnie i program
działa w pełni.
Zadanie 4
Zadanie to należy wykonać za pomocą programu PowerAnalyzer znajdującego się w pakiecie
Ise Design Tools. Wykonanie będzie polegało na wczytaniu projektu do programu i
uruchomieniu analizy. W celu rozpoczęcia analizy należy użyć File->Open Design,
następnie jako Design File należy użyć pliku system.ncd znajdującego się w katalogu
projektu w folderze implementation. Dodatkowo należy wczytać opcjonalny plik physical
constraint file, który znajduje się w tym samym miejscu. Następnie należy uruchomić
analizę. Po wykonaniu analizy należy odnaleźć interesujące nas dane i uzupełnić tabelę:
Opracował: Damian Mroczek
Strona 6
Parametr
Wykorzystanie bloków
logicznych [%]
System dwuprocesorowy System jednoprocesorowy
2xMicroBlaze 25MHz
Microblaze 50MHz
-
-
-
-
-
-
-
-
Całkowita moc pobierana
przez system procesorowy
[W]
Temperatura pracy układu
FPGA [oC]
Całkowita moc pobierana
przez układ FPGA ze
źródła zasilania [W]
Drugą analizę należy wykonać analogicznie na plikach załączonych w folderze one_core
gdzie znajdują się pliki projektu jednoprocesorowego opartego na tym samy procesorze oraz
peryferiach lecz z większą częstotliwością taktowania w celu osiągnięcia wydajności
porównywalnej do naszego systemu.
Wyniki obu analiz należy porównać w tabeli oraz wyciągnąć odpowiednie wnioski.
Opracował: Damian Mroczek
Strona 7

Podobne dokumenty