Ta strona używa ciasteczek (plików cookies), dzięki którym może działać lepiej. Dowiedz się więcejRozumiem i akceptuję

Kurs FPGA – #2 – podstawowe pojęcia, porównanie z uC

Programowanie 10.09.2017 Adam, Damian

Czym są programowalne układy logiczne? Jakie korzyści niesie ta technologia? Podczas tej części zajmiemy się podstawami, które opisują różnice między FPGA, a mikrokontrolerami.

Omówimy również pojęcia, skróty oraz platformę sprzętową niezbędną do wykonania ćwiczeń z naszego kursu podstaw FPGA.

Nawigacja serii artykułów:
« poprzednia część

» Pokaż/ukryj cały spis treści «

Kup zestaw elementów i zacznij naukę w praktyce! Przejdź do strony dystrybutora »

Czym jest VHDL?

VHDL to język opisu sprzętu. W odróżnieniu od języków programowania takich jak np. C++, Java itp. stworzony kod nie jest zapisywany do pamięci operacyjnej mikrokontrolera. Język VHDL opisuje kolejność i połączenia pojedynczych elementów logicznych.

Właściwszym jest więc stwierdzenie, że
język VHDL konfiguruje układ logiczny.

Co to oznacza w praktyce? Zamiast pisać program, który wykonywany jest linia, po linii, tworzymy wewnętrzne połączenia elementów logicznych. Dzięki temu nasz skonfigurowany układ działa jak dedykowany układ scalony (np. sterownik wyświetlacza używany w kursie TC). Takie podejście pozwala na znaczne szybsze i równolegle wykonywanie wielu operacji w jednym układzie!

Wewnątrz układów programowalnych mogą powstać bardzo rozbudowane układy. Można nawet zbudować swój własny mikrokontroler!

Zamiast PCB, możemy zaprojektować własny układ scalony!

Czym są programowalne układy logiczne?

Zrozumienie zagadnień opisywanych w kursie należy rozpocząć od poznania programowalnych układów logicznych (PLD – ang. Programmable Logic Device).

W dalszej części tego kursu pojęcia takie jak programowalny układ logiczny i jego angielski skrót PLD będą używane zamiennie.

Programowalny układ logiczny z zewnątrz wygląda jak wiele innych układów scalonych: czarna obudowa z wystającymi na krawędziach pinami. Charakterystyczna dla tych układów jest jednak struktura wewnętrzna. Układy PLD mają wewnątrz ogromną liczbę pojedynczych komórek zwanymi elementami logicznymi (LE – ang. Logic Elements). Pojedyncza komórka LE zawiera w sobie bramki AND, OR, NOT oraz przerzutnik RS.

Uwaga! To tylko uogólnienie – w rzeczywistości zawartość pojedynczej komórki LE może się różnić zależnie od technologii wykonania układu PLD.

Konfigurowanie, czyli operacja odpowiadająca „programowaniu” w językach takich jak C i Java, polega w praktyce na ustawianiu połączeń między odpowiednimi bramkami/przerzutnikami w komórkach LE.

Rodzaje programowalnych układów logicznych

W praktyce spotkać można wiele różnych programowalnych układów logicznych. Na początku warto poznać podstawowe nazwy, skróty oraz ich wyjaśnienia.

FPGA (ang. Field-Programmable Gate Array) – jeden z rodzajów układów PLD. Układy FPGA zawierają w sobie matrycę programowalnych bloków logicznych i konfigurowalnych połączeń między nimi. Układy FPGA ze względu na poziom skomplikowania oraz możliwości tych układów określa się jako najbardziej zaawansowane ze wszystkich rodzin PLD.

Układ FPGA, z którego korzystamy w kursie.

CPLD (ang. Complex Programmable Logic Devices) – kolejny rodzaj układów PLD. Układy CPLD w odróżnieniu od układów FPGA posiadają uproszczoną strukturę wewnętrzną i mniejszą liczbę LE (inaczej zbudowanych niż w przypadku FPGA).

Najważniejsze wnioski płynące z różnic w budowie tych układów:

  • Układy CPLD posiadają większą liczbę pinów wyjściowych w stosunku do układów FPGA (w podobnej klasie cenowej).
  • Układy CPLD posiadają mniejszą liczbę przerzutników. Układy te są dedykowane do zadań typowych dla układów kombinacyjnych (stan wyjść zależy wyłącznie od stanu wejść).
  • Długość ścieżek sygnałów CPLD jest dla każdej funkcji taka sama. To umożliwia prostsze konstruowanie układów pracujących z bardzo wysokimi częstotliwościami taktującymi.
  • Układy CPLD ze względu na prostszą budowę i mniejszą wielkość wykazują się znacznie mniejszym poborem mocy od układów FPGA.

PAL (ang. Programmable Array Logic) – najstarsza rodzina programowalnych układów logicznych powstała pod koniec lat 70 XX wieku. Układy PAL dały początek układom SPLD (ang. Simple PLD), HDPLD (ang. High Density PLD).

W dalszym toku rozwoju z tych rodzin stworzono układy CPLD oraz FPGA.

ASIC (ang. Application Specific Integrated Circuit) – rodzaj układów scalonych, w których nie ma możliwości ich rekonfiguracji. Ich zaletami jest to, że wykonują funkcje szybciej i przy mniejszym użyciu zasobów niż w przypadku np. mikrokontrolerów. Układy ASIC mieszczą w sobie często kompletne funkcjonalności dla których byłoby konieczne użycie mikrokontrolera i dodatkowych układów, co umożliwia stworzenie kompletnego urządzenia w jednym chipie.

Często w trakcie opracowywania układów ASIC korzysta się z FPGA lub CPLD w celu przeprowadzenia testów (czasu propagacji sygnałów, wydzielanej mocy itd).

Na poniższym zdjęciu widać przykład układu ASIC, w którym wykorzystano 20% dostępnych elementów logicznych. Struktury tej nie można już rekonfigurować.


W praktyce podczas pracy w tym kursie nie będzie wymagana dokładna znajomość różnic między kolejnymi technologiami wykonania układów PLD. Położyliśmy nacisk na naukę języka oraz niezbędnych narzędzi do tworzenia różnych aplikacji. Wybór typu układu będzie zawsze zależał od konkretnego zastosowania.

Zestaw do kursu FPGA

Gwarancja pomocy na forum dla osób, które kupią poniższy zestaw!

Zestaw uruchomieniowy Elbert v2 - Spartan 3A z wszystkimi niezbędnymi peryferiami do wykonania ćwiczeń z kursu FPGA!


Kup w Botlandzie »

Jak porównać „wydajność” PLD?

Do porównywania układów PLD korzysta się z dwóch parametrów:

  • Częstotliwość sygnału taktującego – ma to znaczenie dla aplikacji działających sekwencyjnie (gdzie występuje konieczność uwzględniania poprzednich stanów systemu).
  • Liczba elementów logicznych (LE) – to one bezpośrednio decydują jak bardzo rozbudowaną funkcjonalność można upakować w FPGA. Na rynku istnieją układy posiadające od kilkuset do nawet kilku milionów elementów logicznych dla najbardziej zaawansowanych serii chipów PLD.

Dlaczego warto poznać układy programowalne?

Zacznijmy od kilku zalet „materialnych”. Po pierwsze, dobra znajomość układów FPGA i poparcie tej wiedzy praktyką, daje pewność podjęcia świetnie płatnej pracy.  Warto również pamiętać, że VHDL używa się do projektowania rdzeni mikroprocesorów. Korzysta się z niego m.in. w takich firmach jak Intel, Nvidia, AMD, czy ARM. Znajomość tego języka umożliwia podjęcie pracy, w największych firmach, które tworzą technologie napędzające świat, w którym żyjemy!

Nawet jeśli jesteś zorientowany na pracy jako programista i koncentrujesz się na oprogramowaniu mikrokontrolerów, to często w ogłoszeniach jako „mile widziane umiejętności” wskazana jest przynajmniej podstawowa znajomość VHDL/FPGA.

Znajomość FPGA, to świetny atut na rynku pracy!

Znajomość VHDL daje nowe spojrzenie na zagadnienia związane z całą techniką cyfrową. Od teraz wiedza o podstawowych bramkach logicznych będzie miała odzwierciedlenie w układach programowalnych, które pozwalają na samodzielne „tworzenie” układów cyfrowych.

Opanowanie umiejętności konfiguracji cyfrowych układów logicznych daje konstruktorowi nowe możliwości jak np. zdolność implementacji kilku układów logicznych w jednym układzie. Umożliwia to oszczędność m.in. miejsca na PCB oraz energii zużywanej przez urządzenie.

Dla przykładu w PLD, to konstruktor decyduje jaka funkcjonalność jest przypisana danemu pinowi. To oznacza koniec z kombinowaniem i zmianami prowadzenia ścieżek jak w przypadku mikrokontrolerów!

Programowalne układy logiczne vs. Mikrokontrolery

Programowalne układy logiczne różnią się znacznie od mikrokontrolerów. Warto rozpatrzyć to zagadnienie w trzech kategoriach: cena, szybkość/wydajność oraz ogólna zasada działania.

Cena układów

Cena jest jedną z najważniejszych przyczyn dla których programowalne układy logiczne nie zdobyły tak dużej popularności jak mikrokontrolery. Fizycznie chipy programowalnych układów logicznych są kilkukrotnie droższe – nawet dla najmniejszych aplikacji.

Jak często bywa, jedną z przeszkód na drodze są pieniądze.

Cena ma tym samym wpływ na koszty zestawów do nauki i na popularność danej technologii. Trzeba też przyznać, że koszty opracowania i rozwoju aplikacji na programowalne układy logiczne są wyższe. Ten ostatni punkt jest w rzeczywistości na korzyść, dzięki temu pensje w tej branży są wysokie…

Szybkość/wydajność

W tej kategorii dużo zależy od konkretnej aplikacji. Programowalne układy logiczne mają znaczną przewagę w zadaniach, które powinny być wykonywane równolegle, czyli jednocześnie. Na przykład jako układy do przetwarzania grafiki – to jest tajemnica szybkości kart graficznych!

Układy programowalne są mistrzami wielozadaniowości!

Ogólna zasada działania

Tworzenie projektów, bądź aplikacji dla programowalnych układów logicznych różni się od tych tworzonych na mikrokontrolery. W przypadku mikrokontrolerów tworzony kod jest tłumaczony na instrukcje maszynowe, które są przechowywane w pamięci mikrokontrolera. W czasie pracy instrukcje są pobierane z pamięci i wykonywane przez ALU (jednostkę arytmetyczno-logiczną).

Więcej na temat budowy mikrokontrolerów znaleźć można w artykule:
Mikrokontroler – wszystko o jego działaniu

W PLD nie wykonuje się kolejno instrukcji (jedna, po drugiej). Wewnątrz tworzony jest układ sekwencyjny, który można opisać jako maszynę stanów. Dzięki temu możliwe jest wykonywanie wielu zadań równolegle. Z punktu widzenia działającego urządzenia wygląda to więc tak, gdyby w sklepie kupiono specjalistyczny układ cyfrowy realizujący wszystkie wymagane funkcje!

Różnica ta będzie na pewno znacznie łatwiejsza do zrozumienia,
gdy przejdziemy do przykładów praktycznych!

Jak wygląda praca z FPGA?

Podczas nauki, w tym kursie będziemy realizowali standardowy schemat pracy przy korzystaniu z programowalnych układów logicznych:

  • tworzenie kodu w VHDL i przeprowadzenie jego „syntezy”,
  • przeprowadzanie symulacji zaprojektowanej aplikacji,
  • wykonywanie testów aplikacji na płytce.

Taki schemat pracy zapewni, że unikniemy błędów, które mogłyby się zakończyć uszkodzeniem sprzętu z którego będziemy korzystać podczas wykonywanie ćwiczeń w tym kursie.

Symulacja układu.

Synteza programowalnych układów logicznych odpowiada w pewnym stopniu „kompilacji” przeprowadzanej w „tradycyjnych” językach programowania. Proces ten oznacza przetworzenie napisanego kodu na odpowiednią konfiguracje połączeń elementów logicznych w PLD.

Zestaw używany w kursie FPGA

Wszystkie ćwiczenia zostały przygotowane z użyciem zestawu ELBERT V2, który dostępny jest w Botlandzie. To właśnie na nim przeprowadzone będą wszystkie ćwiczenia!

ELBERT V2 to kompletny układ wyposażony we wszystko, co niezbędne podczas pierwszych kroków z nauką VHDL. Korzystanie z gotowego zestawu uruchomieniowego pozwala na szybką i sprawną naukę bez szukaniu błędów w nieznanym i niesprawdzonym sprzęcie.

Co ważne, w przypadku nauki FPGA, korzystanie z innego zestawu nie ograniczy się do kilku zmian w kodzie! Różnic może być więcej, co w połączeniu z zawiłością tematyki może zniechęcić początkujących do poznawania FPGA.

Specyfikacja techniczna płytki ELBERT V2:

  • Rdzeniem i sercem zestawu jest układ FPGA firmy Xilinx z serii Spartan XC3S50A, który posiada 144 wyprowadzenia, z czego 104 są do dyspozycji użytkownika.
    • Układ pracuje z maksymalną częstotliwością dochodzącą do 280 MHz.
    • W jego wnętrzu znaleźć można 1728 elementów logicznych.
  • Konfiguracja FPGA i komunikacja zestawu odbywa się poprzez kabel USB 2.0. Od strony zestawu znajduje się złącze Mini USB (brak w zestawie).
  • Zestaw posiada 16 MB pamięci Flash która przechowuje konfiguracje układu FPGA.
  • Na płytce umieszczono dodatkowo:
    • 8 kontrolek LED,
    • 6 przycisków typu micro-switch,
    • 8 przełączników DIP,
    • wyjście VGA (stosowane jako wyjście grafiki dla monitorów komputerowych),
    • wyjście Audio Sereo,
    • 3 wyświetlacze 7-segmentowe,
    • gniazdo dla kart MicroSD.

Do korzystania z zestawu nie jest potrzebny żaden dodatkowy programator!

Rozmieszczenie najważniejszych elementów na płytce.

Płytka Elbert V2 posiada 39 wyprowadzeń (GPIO)
do wyłącznej dyspozycji użytkownika (wyprowadzone na złącza).

Podsumowanie

W tym artykule omówiliśmy podstawowe pojęcia, które ułatwią dalsze korzystanie z FPGA oraz naukę VHDLa w praktyce. Informacji z tej części kursu nie trzeba uczyć się na pamięć. Z czasem korzystanie z nowych skrótów opanujesz „automatycznie”. Najważniejsze, aby w razie problemów wiedzieć, że w tym artykule znajduje się podręczny słowniczek z tymi informacjami.

W kolejnej cześci zajmiemy się instalacją i konfiguracją środowiska. Jest to więc najlepszy moment, aby zaopatrzyć się we własny zestaw do nauki FPGA.

» Pokaż/ukryj cały spis treści «

Kup zestaw elementów i zacznij naukę w praktyce! Przejdź do strony dystrybutora »

Autor kursu: Adam Bemski
Redakcja: Damian Szymański

O autorze: Adam Bemski

Autorem kursu jest Adam Bemski, specjalista od systemow wbudowanych. Pracuje w obszarze automatycznego testowania urządzeń z funkcjonalnością IoT. Adam dodatkowo prowadzi zajęcia z techniki mikroprocesorowej na wyższej uczelni DHBW Stuttgart. Więcej szczegółów o Adamie na blogu adambemski.com.

Powiadomienia o nowych, darmowych artykułach!

Komentarze

Mellon

7:18, 11.09.2017

#1

Bardzo fajne wprowadzenie. W kolejnej części przydałby się opis wejść/wyjść i innych zasobów płytki z zestawu (zasilanie np. 5 V i jaki prąd wymagany) itp.

Treker
Administrator

9:46, 11.09.2017

#2

Mellon, wszystko będzie wprowadzane krok, po kroku. Do zasilania podczas ćwiczeń wystarczy przewód USB :)

Mellon

13:37, 11.09.2017

#3

Tak oczywiście. Ale warto wspomnieć na samym początku że jest złącze dla zewnętrznego zasilacza. Źródło zasilania domyślnie jest ustawione za pomocą zworek na USB ale można zmienić na te złącze za pomocą zworek i złącza V-select. Może się przydać przy uruchamianiu układu bez komputera.

[ Dodano: 11-09-2017, 13:44 ]

Dobrze jest gdy programista zna możliwości konfigurowanego układu. Dlatego też wskazany byłby "połączeniowy/złączowy" wstęp zanim zacznie się cokolwiek konfigurować i uruchamiać.

Treker
Administrator

13:50, 11.09.2017

#4

Mellon, jasna sprawa - będzie w kolejnych częściach, gdy będziemy uruchamiać płytkę :)

BlackJack

21:57, 14.09.2017

#5

Ciekawy kurs. Szczerze nie spodziewałem się FPGA na Forbocie. Czy Spartan 3A toleruje logikę 5V. Pytam bo zawsze mnie kusiło zrobić na FPGa kooprocesor matematyczny dla mojego C64 + jakieś REU z DMA obsługujący kilka MB RAM.

Treker
Administrator

12:16, 15.09.2017

#6

BlackJack, zestaw używany w kursie pracuje na 3,3V (oraz 1,2V). Zasilany jest z USB (5V) tylko dla większej wygody :)

Zobacz powyższe komentarze na forum

FORBOT Damian Szymański © 2006 - 2017 Zakaz kopiowania treści oraz grafik bez zgody autora. vPRsLH.