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

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

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.

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.

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!

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

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.

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

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.

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 elementów do kursu

Gwarancja pomocy na forum Błyskawiczna wysyłka

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

Kup w Botland.com.pl

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.

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

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!

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.

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.

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

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.

Nawigacja kursu

Autor kursu: Adam Bemski
Redakcja: Damian Szymański

O autorze: Adam Bemski

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.

fpga, kursFPGA, pld, vhdl

Komentarze

Dodaj komentarz