Czym jest CPLD?
Układy CPLD, czyli złożone programowalne układy logiczne, w pełni spełniają swoje założenia. Zasadniczo są zaprojektowane tak, aby emulować wiele układów PAL (programowalnych macierzy logicznych) połączonych w jednym układzie scalonym za pośrednictwem przełącznika krzyżowego. Ponieważ są oparte na tej samej technologii, wykorzystują te same metody programowania i współpracują ze znanymi narzędziami programistycznymi, mogą skutecznie obsługiwać rozleglejsze i bardziej złożone operacje logiczne.
Chociaż układy FPGA i SPLD (proste programowalne układy logiczne) są bardziej zaawansowane niż układy CPLD, działają w podobny sposób. Układy CPLD są bardziej złożone niż SPLD, ale mniej złożone niż FPGA. Powszechnie stosowane układy SPLD, takie jak PAL (programowalna macierz logiczna), PLA (programowalna macierz układów logicznych) i GAL (uniwersalna macierz logiczna), wykazują pewne podobieństwa do układów CPLD.

Czym jest FPGA?
Programowalne macierze bramek (FPGA) to urządzenia półprzewodnikowe wyposażone w macierz konfigurowalnych bloków logicznych (CLB), połączonych programowalnymi połączeniami. Cechą wyróżniającą układy FPGA jest możliwość ich przeprogramowania po wyprodukowaniu, co pozwala dostosować je do wymagań konkretnej aplikacji lub funkcji.
Układy FPGA różnią się istotnie od układów ASIC (Application-Specific Integrated Circuits — układów scalonych projektowanych do konkretnych zastosowań), które są projektowane na zamówienie zgodnie z określonymi wymaganiami. Cechą wyróżniającą układy FPGA jest możliwość ich ponownego programowania. W przeciwieństwie do układów ASIC, których konstrukcja jest stała, układy FPGA można w razie potrzeby rekonfigurować lub aktualizować, dzięki czemu są bardziej elastyczne i łatwiej dostosowują się do zmieniających się wymagań projektu.
Wśród układów FPGA większą popularnością niż jednokrotnie programowalne (OTP) płytki rozwojowe FPGA cieszą się układy FPGA oparte na pamięci SRAM, ponieważ można je aktualizować wielokrotnie.
Układy FPGA mają strukturę podobną do układów ASIC z macierzami bramek, a nie do układów PAL ani innych tradycyjnych urządzeń programowalnych. Są często używane w sytuacjach, w których docelowo zostanie zastosowany układ ASIC, służąc do prototypowania i testowania jego funkcjonalności przed rozpoczęciem produkcji. Umożliwia to weryfikację i iterację projektu przed poniesieniem wyższych kosztów związanych z wytwarzaniem układu ASIC.
Architektura CPLD
Układ CPLD (Complex Programmable Logic Device — złożony programowalny układ logiczny) jest zbudowany z wielu struktur PAL (Programmable Array Logic — programowalna macierz logiczna), nazywanych makrokomórkami. Stanowi rozwinięcie technologii PAL. W układzie CPLD każdy pin wejściowy w obudowie jest dostępny dla każdej makrokomórki, ale każda makrokomórka ma tylko jeden pin wyjściowy. Schemat blokowy układu CPLD przedstawia jego strukturę wewnętrzną.
Schemat blokowy podkreśla, że układ CPLD składa się z licznych makrokomórek lub bloków funkcjonalnych. Makrokomórki te są połączone za pośrednictwem programowalnej globalnej macierzy połączeń (GIM). Zmiana konfiguracji GIM umożliwia tworzenie różnych obwodów logicznych. Układy CPLD wykorzystują cyfrowe wyprowadzenia wejściowe i wyjściowe do komunikacji z zewnętrznym sprzętem. Taka architektura zapewnia elastyczność i możliwość rekonfiguracji przy implementowaniu różnych funkcji logicznych zgodnie z konkretnymi wymaganiami projektu.
Struktura CPLD
Przedstawiono podstawową strukturę układu CPLD na przykładzie układu z serii Xilinx XC9500XL. Architektura CPLD opiera się na koncepcji iloczynów logicznych (Product-Term). Obejmuje trzy kluczowe komponenty: blok funkcjonalny, przełącznik FastCONNECT II SwitchMatrix oraz moduł sterowania I/O .
Ilustracja przedstawia budowę każdego bloku funkcjonalnego, który obejmuje programowalną macierz, układ alokacji iloczynów logicznych oraz 18 makrokomórek. Makrokomórki te są podstawowymi jednostkami służącymi do wykonywania operacji logicznych.
Moduł sterowania I/O odpowiada za konfigurację różnych właściwości elektrycznych pinów wejściowych i wyjściowych, takich jak wyjścia typu otwarty kolektor i wyjścia trójstanowe. Ponadto zarządza funkcjami związanymi z wejściami i wyjściami.
Ponadto dostępne są globalne sygnały zegara (I/O/GCK), resetowania (I/O/GSR) i zezwolenia na wyjście (I/O/GTS), połączone z każdym modułem funkcjonalnym w układzie CPLD za pomocą dedykowanych linii. Te globalne sygnały zapewniają koordynację i synchronizację działania układu CPLD.
Makrokomórka, będąca kluczowym komponentem CPLD, odpowiada za wykonywanie podstawowych operacji logicznych. Podstawową strukturę makrokomórki przedstawiono na poniższym obrazie. Po lewej stronie obrazu znajduje się macierz iloczynów logicznych, która może występować lub nie, zależnie od konkretnej konfiguracji.
Każdy punkt krzyżowy w macierzy iloczynów logicznych jest programowalny i po aktywacji realizuje operacje logiczne „AND”, współtworząc logikę kombinacyjną wraz z układem alokacji iloczynów logicznych działającym w tle. Ta elastyczność umożliwia tworzenie różnych funkcji logicznych w makrokomórce.
Programowalny przerzutnik po prawej stronie obrazu można skonfigurować jako przerzutnik D lub przerzutnik T, zależnie od wymagań projektu. Jeśli funkcja wyzwalania nie jest potrzebna, można ją pominąć, a sygnał skierować do wyprowadzenia I/O lub matrycy połączeń, co zapewnia elastyczność w projektowaniu i implementacji różnych funkcji logicznych w układzie CPLD.

Komponenty CPLD
Komponenty CPLD składają się z różnych elementów, które wspólnie tworzą architekturę urządzenia. Poniżej przedstawiono szczegółowy opis tych komponentów:
- Programowalne komponenty: CPLD wykorzystują programowalne komponenty, takie jak flash EPROM (kasowalna programowalna pamięć tylko do odczytu), EEPROM (elektrycznie kasowalna programowalna pamięć tylko do odczytu), PROM (programowalna pamięć tylko do odczytu) oraz ROM (pamięć tylko do odczytu). Komponenty te przechowują dane konfiguracyjne i można je modyfikować w celu definiowania funkcji logicznych urządzenia.
- Blok funkcyjny: blok funkcyjny w układzie CPLD składa się z matrycy AND, która otrzymuje wejścia z bloków wejścia/wyjścia, innych bloków funkcyjnych, a nawet z wyjść tego samego bloku funkcyjnego. Wejścia są poddawane operacjom logicznym, a następnie wybierane za pomocą dużego multipleksera przed dodaniem do matrycy OR. Proces ten umożliwia tworzenie złożonych funkcji logicznych w układzie CPLD.
- Połączenia: interkonekt w układzie CPLD to macierz programowalnych przełączników, która steruje trasowaniem sygnałów z jednej części urządzenia do innej. Umożliwia nawiązywanie połączeń między różnymi elementami, w tym blokami funkcyjnymi i blokami wejścia/wyjścia, w celu skonfigurowania wymaganej logiki.
- Bloki wejścia/wyjścia: bloki wejścia/wyjścia (I/O) odpowiadają za komunikację z zewnętrznym sprzętem. Zapewniają przesyłanie sygnałów do pinów CPLD i z nich przy odpowiednich poziomach napięcia i prądu. Bloki wejścia/wyjścia pomagają zmniejszyć opóźnienia, skrócić czas bezczynności urządzenia oraz zwiększyć ogólne wykorzystanie zasobów CPLD.
Elementy te współpracują ze sobą, zapewniając elastyczność i wszechstronność w konfigurowaniu złożonych funkcji logiki cyfrowej w układzie CPLD, a jednocześnie ułatwiając wydajną komunikację z urządzeniami zewnętrznymi.
Zalety układów CPLD
- Jego projektowanie jest proste.
- Został opracowany przy umiarkowanych kosztach.
- CPLD pomaga zmniejszyć rozmiar płytki.
- Zapewnia wysoką niezawodność.
Wady układów CPLD
- CPLD to bardziej zaawansowane urządzenie programowalnej logiki niż SPLD.
- Jest to bardziej złożony element programowalnej logiki.
Jak działa układ CPLD?
Układy CPLD (Complex Programmable Logic Devices) wykorzystują różne technologie programowania, w tym CMOS EPROM, EEPROM, pamięć flash i SRAM, aby tworzyć bardzo kompaktowe, szybkie i energooszczędne programowalne układy logiczne. Urządzenia te należą do kategorii układów scalonych o dużej skali integracji, charakteryzujących się stosunkowo złożoną strukturą i znacznymi rozmiarami fizycznymi. CPLD to rodzaj cyfrowego układu scalonego, który umożliwia użytkownikom projektowanie i implementowanie niestandardowych układów logicznych dostosowanych do ich konkretnych wymagań.
Podstawowe podejście do projektowania z użyciem układów CPLD obejmuje następujące kroki:
- Opracuj pożądany system cyfrowy przy użyciu zintegrowanej platformy programistycznej.
- Opisz projekt za pomocą języka opisu sprzętu.
- Przenieś kod projektu do docelowego układu CPLD za pomocą kabla do programowania — proces ten jest znany jako programowanie „in-system”.
- Wygeneruj odpowiedni plik docelowy definiujący funkcje logiczne, które mają być realizowane przez układ CPLD.
Architektura FPGA
W podstawowej konstrukcji układu FPGA (Field-Programmable Gate Array) stosuje się trzy główne typy modułów: bloki wejścia/wyjścia lub pola kontaktowe, linie połączeniowe, macierze przełączników oraz programowalne bloki logiczne (CLB). Użytkownicy mogą łączyć te elementy w różnych konfiguracjach, aby utworzyć podstawową strukturę architektoniczną układu FPGA.
Funkcje tych modułów architektury FPGA:
- CLB (konfigurowalny blok logiczny): Blok CLB jest podstawową jednostką odpowiedzialną za wykonywanie operacji logicznych. Składa się z elementów logicznych oraz cyfrowych połączeń wejściowych i wyjściowych. Użytkownicy mogą konfigurować bloki CLB w celu implementacji niestandardowych funkcji logicznych zgodnie z wymaganiami konkretnych zastosowań.
- Połączenia wewnętrzne: Połączenia wewnętrzne służą jako ścieżki przenoszące instrukcje i dane między różnymi blokami logicznymi wewnątrz układu FPGA. Ścieżki te umożliwiają blokom CLB współpracę przy realizacji logiki zdefiniowanej przez użytkownika.
- Macierz przełączników: Macierz przełączników zapewnia niezbędne połączenia i trasowanie oparte na logice między elementami wewnątrz układu FPGA. Ułatwia dynamiczną konfigurację połączeń, umożliwiając elastyczne dostosowanie układu FPGA do różnych projektów logicznych.
- Pady wejścia/wyjścia: Pady wejścia/wyjścia służą jako interfejsy między układem FPGA a urządzeniami zewnętrznymi lub światem zewnętrznym. Umożliwiają połączenie z zewnętrznym sprzętem, pozwalając na przesyłanie danych do układu FPGA i z niego.
Możliwość łączenia tych modułów w tablice dwuwymiarowe i konfigurowania ich zgodnie z określonymi wymaganiami jest podstawową cechą układów FPGA. Ta elastyczność i programowalność sprawiają, że układy FPGA nadają się do szerokiego zakresu zastosowań — od cyfrowego przetwarzania sygnałów po implementacje konfigurowalnego sprzętu.
Podstawy układów FPGA
Pojedynczy blok CLB (Configurable Logic Block) w układzie FPGA składa się z wielu bloków logicznych, z których każdy wpływa na funkcjonalność bloku CLB. Ważną cechą układu FPGA jest jego tablica wyszukiwania (LUT), charakterystyczna dla tej technologii. Układy LUT mogą przechowywać z góry określoną listę wyjść logicznych dla każdej możliwej kombinacji sygnałów wejściowych. Zazwyczaj układy LUT występują w wersjach z czterema do sześciu bitami wejściowymi. Typowe operacje logiczne, które można implementować za pomocą układów LUT, obejmują przerzutniki, pełne sumatory i multipleksery.
Liczba i konfiguracja elementów wewnątrz bloku CLB mogą się różnić w zależności od konkretnego układu FPGA. W wersji uproszczonej blok CLB może składać się z dwóch trójwejściowych układów LUT (1), pełnego sumatora (3), przerzutnika typu D (5), zwykłego multipleksera (2) oraz dwóch programowalnych multiplekserów wewnątrz układu FPGA.
Skondensowany blok CLB może działać na dwa różne sposoby. W trybie arytmetycznym pełny sumator otrzymuje sygnały wejściowe z wyjść LUT oraz sygnał przeniesienia z innego bloku CLB. W trybie normalnym układy LUT i multiplekser 2 współpracują ze sobą, tworząc czterowejściowy układ LUT. Multiplekser 4 decyduje, czy użyć wyjścia pełnego sumatora, czy wyjścia LUT. O tym, czy operacja jest asynchroniczna, czy zsynchronizowana z zegarem FPGA, decyduje przerzutnik typu D za pośrednictwem multipleksera 6.
W układach FPGA obecnej generacji bardziej zaawansowane bloki CLB mogą wykonywać wiele operacji w obrębie pojedynczego bloku. Te zaawansowane bloki CLB można łączyć w celu realizacji bardziej złożonych zadań, takich jak mnożenie, rejestry, liczniki, a nawet przetwarzanie sygnałów cyfrowych (DSP), dzięki czemu układy FPGA są uniwersalne i znajdują zastosowanie w szerokim zakresie aplikacji.

Elementy układu FPGA
- Blok I/O służy do łączenia układów scalonych.
- Zastosowanie programowalnego routingu umożliwia korzystanie z funkcji.
- Funkcje logiczne można implementować za pomocą programowalnych bloków logicznych.
Zalety układów FPGA
- Rozwój układów FPGA jest tańszy niż rozwój układów ASIC, ponieważ nie występują koszty NRE (Non-Recurring Expenses, koszty jednorazowe), a używane narzędzia są tańsze.
- Układy FPGA są zawsze programowalne na poziomie oprogramowania. Dzięki temu układ scalony FPGA można wielokrotnie rekonfigurować lub ponownie wykorzystywać. Układy FPGA można także programować zdalnie.
- Układy scalone FPGA można łatwo programować za pomocą kodu HDL i są szeroko dostępne. Skutkuje to szybszym wprowadzeniem rozwiązania na rynek.
- Trasowanie, rozmieszczanie i analiza czasowa są obsługiwane programowo w projektowaniu układów FPGA. Wymaga to mniej pracy ręcznej. Proces projektowy eliminuje czasochłonne i trudne rozmieszczanie elementów i trasowanie, planowanie rozmieszczenia oraz uwzględnianie parametrów czasowych.
- Układy FPGA umożliwiają programowanie na poziomie logicznym. W rezultacie mogą wykorzystywać bardziej równoległe i szybsze przetwarzanie sygnałów. Wykonywanie tego przez procesor CPU jest trudne.
Wady układów FPGA
- Podstawowa znajomość systemów cyfrowych oraz języków programowania VHDL/Verilog jest warunkiem wstępnym programowania układów FPGA. Programowanie jest bardziej złożone niż w przypadku urządzeń wyposażonych w procesory. Ponadto inżynierowie muszą rozumieć, jak korzystać z oprogramowania do symulacji.
- Rozmiar i charakterystyka projektu są ograniczone zasobami dostępnymi w układzie scalonym FPGA po jego wybraniu i wykorzystaniu w projekcie. Aby uniknąć tego problemu, należy od początku wybrać odpowiedni układ FPGA.
- Układ FPGA ma zwiększony pobór mocy, a programiści mają niewielką kontrolę nad optymalizacją zużycia energii.
- Układy FPGA zyskały popularność dzięki wszechstronności w różnych zastosowaniach.
- Konkretne zastosowania układów FPGA obejmują rozpoznawanie mowy, kryptografię, filtrowanie sygnałów, kodowanie komunikacji, sterowniki urządzeń, radio programowalne, logikę losową, prototypowanie układów ASIC, obrazowanie medyczne, emulację sprzętu komputerowego oraz sterowniki urządzeń.
- Układy FPGA są często używane w specjalistycznych zastosowaniach niskonakładowych, w których zależność między wydajnością a kosztami sprawia, że są korzystnym wyborem. FPGA dobrze sprawdzają się w prototypowaniu i produkcji niskonakładowej. Koszt jednostkowy również rośnie wraz ze wzrostem liczby produkowanych układów FPGA.
- Układy FPGA (Field-Programmable Gate Arrays, programowalne macierze bramek) należą do rodziny programowalnych układów logicznych, często określanych mianem programowalnego sprzętu. Same w sobie nie mają wbudowanej funkcjonalności, ale można je zaprogramować tak, aby działały jak praktycznie dowolny wybrany układ cyfrowy. Ta cecha jest niezwykła, ponieważ umożliwia szybką konfigurację bez konieczności lutowania lub wykonywania rozbudowanego okablowania.
Oto jak działają układy FPGA:
- Konfiguracja: Układy FPGA konfiguruje się, ładując do urządzenia określony plik konfiguracyjny bitstream. Konfiguracja ta definiuje połączenia oraz działanie elementów logicznych wewnątrz układu FPGA.
- Wszechstronność: Po skonfigurowaniu układ FPGA będzie działać jako żądany układ cyfrowy. Można go łatwo przeprogramować do wykonywania różnych zadań poprzez załadowanie nowej konfiguracji, co czyni go niezwykle wszechstronnym rozwiązaniem dla szerokiego zakresu zastosowań.
- Oparte na pamięci RAM: Układy FPGA wykorzystują konfigurację opartą na pamięci RAM, co umożliwia dynamiczną rekonfigurację. Oznacza to, że urządzenie można w razie potrzeby aktualizować i modyfikować bez wprowadzania zmian fizycznych.
- Projektowanie na podstawie opisu: Projektowanie układów FPGA zazwyczaj polega na opisaniu pożądanego działania zamiast tworzenia tradycyjnych schematów obwodów. Do określania funkcjonalności powszechnie używa się języków opisu sprzętu (HDL), a następnie narzędzi do wygenerowania odpowiedniej konfiguracji sprzętowej.
Zastosowania układów CPLD:
- Złożone programowalne układy logiczne doskonale nadają się do wysokowydajnych i wymagających zastosowań sterujących.
- Układy CPLD można stosować w projektach cyfrowych do obsługi funkcji programu rozruchowego.
- Odgrywają rolę w ładowaniu danych konfiguracyjnych z pamięci nieulotnej do programowalnych w terenie matryc bramek.
- Układy CPLD są powszechnie stosowane do prostych zadań projektowych, takich jak dekodowanie adresów.
- Ich niewielkie rozmiary i niskie zużycie energii sprawiają, że układy CPLD nadają się do wrażliwych cenowo, przenośnych urządzeń zasilanych bateryjnie.
Zastosowania układów FPGA:
- Układy FPGA zyskały popularność dzięki wszechstronności w różnych zastosowaniach.
- Konkretne zastosowania układów FPGA obejmują rozpoznawanie mowy, kryptografię, filtrowanie sygnałów, kodowanie komunikacji, sterowniki urządzeń, radio programowalne, logikę losową, prototypowanie układów ASIC, obrazowanie medyczne, emulację sprzętu komputerowego oraz sterowniki urządzeń.
- Układy FPGA są często stosowane w wyspecjalizowanych zastosowaniach niskonakładowych, w których parametry i koszty sprawiają, że są korzystnym wyborem.
FPGA a CPLD
| FPGA | CPLD |
| FPGA to z kolei skrót od field-programmable gate arrays, czyli programowalnych w terenie matryc bramek. | CPLD to skrót od Complex Programmable Logic Devices, czyli złożonych programowalnych układów logicznych. |
| FPGA to układ logiki cyfrowej oparty na pamięci RAM. | Natomiast układy CPLD są oparte na pamięci EEPROM. |
| Opóźnienia CPLD są znacznie bardziej przewidywalne niż opóźnienia FPGA. | Ponieważ CPLD ma pamięć nieulotną, jest bezpieczniejszy niż FPGA. |
| FPGA należy do kategorii układów o małym ziarnie. | Natomiast CPLD należy do układów o dużym ziarnie. |
| Matryca bramek i FPGA są porównywalne. | CPLD jest jednak odpowiednikiem układu PAL. |
| Routing wewnętrzny jest przewidywalny, ponieważ ma niewielki wpływ na wydajność FPGA. | Z drugiej strony wydajność CPLD jest zmienna i zależy od routingu. |
| FPGA zużywa więcej energii. | Z kolei CPLD charakteryzuje się mniejszym zużyciem energii. |
| FPGA dobrze sprawdza się w złożonych aplikacjach. | Jednak układ CPLD działa lepiej w prostszych zastosowaniach. |
| Układ FPGA ma do 100 000 małych bloków logicznych. | Natomiast układy CPLD mogą zawierać tylko kilka tysięcy bloków logicznych. |
| W przeciwieństwie do niego FPGA to rodzaj układu scalonego, który jest przeznaczony głównie do modyfikowania przez klienta lub projektanta po wyprodukowaniu. | Działanie systemu cyfrowego wspomaga układ scalony CPLD. |
Większość pionowych zastosowań układów FPGA to wyspecjalizowane zastosowania niskonakładowe. Najlepsze firmy ponoszą koszty sprzętu na jednostkę w przypadku tych niskonakładowych zastosowań. Liczba praktycznych zastosowań wzrosła obecnie dzięki lepszym parametrom i niższym kosztom.
