Xilinx Zynq to nowatorski układ typu System-na-Chipie (SoC), który może być w pełni programowalny przez użytkownika. W poniższym tekście opisano, jak łatwo rozpocząć swoją przygodę z tego rodzaju układem.
Czym jest FPGA?
Firma Xilinx znana jest z produkcji układów programowalnych (FPGA). Układ taki, w dużym uproszczeniu, składa się z programowalnych bloków logicznych, połączonych - także programowalnymi - połączeniami. Układy FPGA charakteryzują się dużą szybkością działania, możliwością równoległego wykonywania wielu zadań czy też różnego, asynchronicznego taktowania poszczególnych segmentów układu. Układy te mogą być wielokrotnie programowane po opuszczeniu fabryki, często także już w systemie gdzie mają pracować, dzięki czemu są bardzo elastyczne. Układy takie znajdują swoje zastosowanie wszędzie tam, gdzie wymagane jest szybkie działanie i duża wydajność obliczeniowa podczas realizacji konkretnego algorytmu. Znalazły swoje aplikacje w systemach uczenia maszynowego, rozpoznawania obrazów czy w systemach serwerowych.
Czym jest ZYNQ
Xilinx Zynq?-7000 to w pełni programowalny układ SoC. Składa się on z procesora z rdzeniem ARM, który w dowolny sposób oprogramować można kodem oraz z elementów układu FPGA, które skonfigurować można w dowolny sposób. W układ wbudowano także dodatkowe bloki dedykowane do konkretnych zadań, takie jak rdzenie DSP, systemy do obróbki sygnałów czy układy szyfrujące do kryptografii. Wszystko to zintegrowane jest w pojedynczym, bardzo elastycznym układzie scalonym.
Układy te wydawać mogą się bardzo złożone, jednakże dzięki odpowiedniemu środowisku bardzo szybko można zacząć się ich uczyć. Wystarczy, krok po kroku, prześledzić poniższy poradnik i wykonać zawarte w nim zadania. Wszystko zrealizowane jest na płytce deweloperskiej ZYBO.
Instalacja Vivado, SDK oraz wsparcia dla ZYBO
Zanim rozpoczniemy programowanie czy projektowanie logiki układu, zainstalować musimy Xilinx Vivado Design Suite. Wersja Webpack jest darmowa, a na stronie Digilenta znajdziemy także kompletny poradnik, jak zainstalować ten pakiet.
Pobierając Vivado zwróćmy uwagę, aby zaznaczyć okienko podpisane "Software Development Kit" w menu Design Tools, aby ściągnąć SDK. Jeśli zapomnimy, to nic strasznego - można później ściągnąć i zainstalować samo SDK.
Po ściągnięciu i zainstalowaniu Vivado, doinstalować musimy pliki wsparcia dla płytki ZYBO. Pozwoli to na konfigurację interfejsów i peryferiów na płytce. Pliki te umieszczamy w folderze wraz z Xilinx Vivado. Dokładną instrukcję jak to zrobić znaleźć możemy na stronie Digilenta: https://reference.digilentinc.com/reference/software/vivado/board-files?redirect=1.
Uwaga: Podczas instalacji wsparcia dla poszczególnych płytek (board_files) w naszym folderze lokalnym. Rekomendujemy jednakże, aby skopiować tam tylko pliki konkretnej płytki, które znajdziemy w folderze vivado-boards-master\new\board_files\zybo.
Utwórzmy nowy projekt
Wykorzystując Digilent ZYBO utwórzmy przykładowy projekt, który pozwoli nam sprawdzić działanie modułu.
W projekcie tym kontrolować będziemy wbudowane w moduł uruchomieniowy diody LED (LD0 - LD3) z pomocą czterech przełączników, jakie są na płytce (SW0 - SW3). Dodatkowo, wykorzystując przyciski w module (BTN0 - BTN3) przesyłać będziemy komunikaty na terminal komputera PC, podłączonego do modułu.
Tok projektowania hardware
Wykonujemy kolejne czynności:
1. Uruchamiamy Vivado i wybieramy płytkę ZYBO.
2. Tworzymy nowy projekt w Vivado.
3. Tworzymy nowy, pusty blok w projekcie.
4. Dodajemy do utworzonego bloku potrzebne elementy wykorzystując IP Integrator.
5. Syntezujemy projekt hardware.
6. Sprawdzamy poprawność projektu bloku sprzętowego i zapisujemy projekt.
7. Tworzymy wrapper HDL dla systemu.
8. Uruchamiamy syntezę i implementację systemu w wbudowanym FPGA.
9. Generujemy plik bitowy dla układu programowalnego.
10. Eksportujemy wygenerowany strumień bitowy do SDK.
11. Uruchamiamy SDK.
Podczas konfiguracji możemy dokładniej skonfigurować procesor w systemie. Jeśli naciśniemy dwa razy na dodany rdzeń axi_gpio_0 pojawi się okienko, gdzie możemy skonfigurować procesor. Zaznaczamy tam "Enable Dual Channel" i naciskamy OK. Dodajemy tam także dwa wejścia - SW i BTN. Każdy rdzeń axi_gpio_core wspiera 32 bity wejść GPIO, ale w naszym wypadku wykorzystujemy tylko 4.
W kolejnym menu konfiguracyjnym dodajemy kolejny rdzeń GPIO, ale nie włączamy w nim opcji "Dual Channel". Posłuży on nam do kontroli wyjść na diody LED.
Finalnie uruchamiamy Connection Automation, aby połączyć ze sobą interfejsy i/lub porty z zewnętrznymi pinami I/O.
Domyślnie jeden z interfejsów UART (UART1) jest zapełniony ZYNQ IP.
Więcej informacji znaleźć możemy tutaj.
Tok tworzenia programu
Możemy powtórzyć kroki z poprzedniego opisu, aby utworzyć nowy projekt dla oprogramowania. Gdy otworzymy helloworld.c w folderze src, możemy tam znaleźć predefiniowane funkcje i biblioteki dla interfejsu użytkownika.
Funkcje i biblioteki
Klikamy prawym przyciskiem myszy na predefiniowanych funkcjach/bibliotekach, aby podejrzeć ich deklaracje.
Kod przykładowego programu zaprezentowany jest poniżej. Wykorzystajmy go do przetestowania stworzonego systemu.
Uruchamianie projektu
Ostatnim krokiem jest skonfigurowanie FPGA i wgranie programu, jaki stworzyliśmy. Po uruchomieniu systemu możemy zaobserwować działanie systemu:
* Gdy przełączać będziemy przełączniki SW0 - SW3, zapalać będą się odpowiednie diody LED.
* Gdy naciskać będziemy przyciski BTN0 - BTN3, system wysyłać będzie poprzez port szeregowy do komputera wiadomość, o tym że naciśnięty został dany przycisk.
Źródło: https://www.rs-online.com/designspark/getting-started-with-xilinx-zynq-all-programmable-soc
Czym jest FPGA?
Firma Xilinx znana jest z produkcji układów programowalnych (FPGA). Układ taki, w dużym uproszczeniu, składa się z programowalnych bloków logicznych, połączonych - także programowalnymi - połączeniami. Układy FPGA charakteryzują się dużą szybkością działania, możliwością równoległego wykonywania wielu zadań czy też różnego, asynchronicznego taktowania poszczególnych segmentów układu. Układy te mogą być wielokrotnie programowane po opuszczeniu fabryki, często także już w systemie gdzie mają pracować, dzięki czemu są bardzo elastyczne. Układy takie znajdują swoje zastosowanie wszędzie tam, gdzie wymagane jest szybkie działanie i duża wydajność obliczeniowa podczas realizacji konkretnego algorytmu. Znalazły swoje aplikacje w systemach uczenia maszynowego, rozpoznawania obrazów czy w systemach serwerowych.
Czym jest ZYNQ
Xilinx Zynq?-7000 to w pełni programowalny układ SoC. Składa się on z procesora z rdzeniem ARM, który w dowolny sposób oprogramować można kodem oraz z elementów układu FPGA, które skonfigurować można w dowolny sposób. W układ wbudowano także dodatkowe bloki dedykowane do konkretnych zadań, takie jak rdzenie DSP, systemy do obróbki sygnałów czy układy szyfrujące do kryptografii. Wszystko to zintegrowane jest w pojedynczym, bardzo elastycznym układzie scalonym.
Układy te wydawać mogą się bardzo złożone, jednakże dzięki odpowiedniemu środowisku bardzo szybko można zacząć się ich uczyć. Wystarczy, krok po kroku, prześledzić poniższy poradnik i wykonać zawarte w nim zadania. Wszystko zrealizowane jest na płytce deweloperskiej ZYBO.
Instalacja Vivado, SDK oraz wsparcia dla ZYBO
Zanim rozpoczniemy programowanie czy projektowanie logiki układu, zainstalować musimy Xilinx Vivado Design Suite. Wersja Webpack jest darmowa, a na stronie Digilenta znajdziemy także kompletny poradnik, jak zainstalować ten pakiet.
Pobierając Vivado zwróćmy uwagę, aby zaznaczyć okienko podpisane "Software Development Kit" w menu Design Tools, aby ściągnąć SDK. Jeśli zapomnimy, to nic strasznego - można później ściągnąć i zainstalować samo SDK.
Po ściągnięciu i zainstalowaniu Vivado, doinstalować musimy pliki wsparcia dla płytki ZYBO. Pozwoli to na konfigurację interfejsów i peryferiów na płytce. Pliki te umieszczamy w folderze wraz z Xilinx Vivado. Dokładną instrukcję jak to zrobić znaleźć możemy na stronie Digilenta: https://reference.digilentinc.com/reference/software/vivado/board-files?redirect=1.
Uwaga: Podczas instalacji wsparcia dla poszczególnych płytek (board_files) w naszym folderze lokalnym. Rekomendujemy jednakże, aby skopiować tam tylko pliki konkretnej płytki, które znajdziemy w folderze vivado-boards-master\new\board_files\zybo.
Utwórzmy nowy projekt
Wykorzystując Digilent ZYBO utwórzmy przykładowy projekt, który pozwoli nam sprawdzić działanie modułu.
W projekcie tym kontrolować będziemy wbudowane w moduł uruchomieniowy diody LED (LD0 - LD3) z pomocą czterech przełączników, jakie są na płytce (SW0 - SW3). Dodatkowo, wykorzystując przyciski w module (BTN0 - BTN3) przesyłać będziemy komunikaty na terminal komputera PC, podłączonego do modułu.
Tok projektowania hardware
Wykonujemy kolejne czynności:
1. Uruchamiamy Vivado i wybieramy płytkę ZYBO.
2. Tworzymy nowy projekt w Vivado.
3. Tworzymy nowy, pusty blok w projekcie.
4. Dodajemy do utworzonego bloku potrzebne elementy wykorzystując IP Integrator.
5. Syntezujemy projekt hardware.
6. Sprawdzamy poprawność projektu bloku sprzętowego i zapisujemy projekt.
7. Tworzymy wrapper HDL dla systemu.
8. Uruchamiamy syntezę i implementację systemu w wbudowanym FPGA.
9. Generujemy plik bitowy dla układu programowalnego.
10. Eksportujemy wygenerowany strumień bitowy do SDK.
11. Uruchamiamy SDK.
Podczas konfiguracji możemy dokładniej skonfigurować procesor w systemie. Jeśli naciśniemy dwa razy na dodany rdzeń axi_gpio_0 pojawi się okienko, gdzie możemy skonfigurować procesor. Zaznaczamy tam "Enable Dual Channel" i naciskamy OK. Dodajemy tam także dwa wejścia - SW i BTN. Każdy rdzeń axi_gpio_core wspiera 32 bity wejść GPIO, ale w naszym wypadku wykorzystujemy tylko 4.
W kolejnym menu konfiguracyjnym dodajemy kolejny rdzeń GPIO, ale nie włączamy w nim opcji "Dual Channel". Posłuży on nam do kontroli wyjść na diody LED.
Finalnie uruchamiamy Connection Automation, aby połączyć ze sobą interfejsy i/lub porty z zewnętrznymi pinami I/O.
Domyślnie jeden z interfejsów UART (UART1) jest zapełniony ZYNQ IP.
Więcej informacji znaleźć możemy tutaj.
Tok tworzenia programu
Możemy powtórzyć kroki z poprzedniego opisu, aby utworzyć nowy projekt dla oprogramowania. Gdy otworzymy helloworld.c w folderze src, możemy tam znaleźć predefiniowane funkcje i biblioteki dla interfejsu użytkownika.
Funkcje i biblioteki
Klikamy prawym przyciskiem myszy na predefiniowanych funkcjach/bibliotekach, aby podejrzeć ich deklaracje.
Kod przykładowego programu zaprezentowany jest poniżej. Wykorzystajmy go do przetestowania stworzonego systemu.
Kod: C / C++
Uruchamianie projektu
Ostatnim krokiem jest skonfigurowanie FPGA i wgranie programu, jaki stworzyliśmy. Po uruchomieniu systemu możemy zaobserwować działanie systemu:
* Gdy przełączać będziemy przełączniki SW0 - SW3, zapalać będą się odpowiednie diody LED.
* Gdy naciskać będziemy przyciski BTN0 - BTN3, system wysyłać będzie poprzez port szeregowy do komputera wiadomość, o tym że naciśnięty został dany przycisk.
Źródło: https://www.rs-online.com/designspark/getting-started-with-xilinx-zynq-all-programmable-soc
Fajne? Ranking DIY
