8.11. Układy programowalne
1
ETR 8.11
Cyfrowe układy scalone z punktu widzenia użytkownika projektującego
urządzenie, w którym mają być stosowane można podzielić na trzy
grupy: układy standardowe (cegiełki, z których można zbudować duży
układ łącząc je na płytce drukowanej), układy projektowane na
zamówienie u producenta oraz układy programowalne, które w jednym
układzie scalonym zawierają bardzo dużo podstawowych elementów
cyfrowych, a konfigurację połączeń między nimi może realizować w
sposób dowolny użytkownik. Przyjęty ogólnie w świecie elektroniki
skrót nazwy tych układów to
PLD
– Programmable Logic
Devices
. Projektowanie urządzenia finalnego wymaga użycia
specjalistycznego oprogramowania i sprzętu programującego
dostarczanego przez wytwórcę PLD. Współczesne oprogramowanie
wspomagające jest przyjazne dla użytkownika.
Układy programowalne mogą być
programowalne
jednokrotnie lub wielokrotnie
.
Opracował Mirosław Doleżych
Układy programowalne jednokrotnie.
W układach jednokrotnie programowalnych wszystkie
możliwe połączenia mogą być już zrealizowane, a w
procesie projektowania finalnego układu wybrane
połączenia są usuwane (przepalane). W takich układach
połączenia są wykonane w postaci cieniutkich ścieżek
przepalanych w procesie programowania
przez użycie
prądów o wartościach znacznie większych od stosowanych
przy normalnej pracy układu. Drugim typem układów
jednokrotnie programowalnych są układy, w których
wszystkie możliwe połączenia stanowią rozwarcia, a w
procesie programowania
rozwarcia są niszczone
(diody
niszczone przez przebicie lawinowe lub mikrokondensatory,
których izolacja jest przepalana) i
zastępowane przez
zwarcia
. Programowanie obydwu typów realizowane jest w
specjalnych programatorach.
2
ETR 8.11
3
Układy programowalne wielokrotnie.
W układach tego typu połączenia pomiędzy elementami są
tworzone przez
komórki pamięci półprzewodnikowych,
których tranzystory realizują zwarcie lub rozwarcie
w
zależności od wpisanego stanu. Mogą to być pamięci
bipolarne typu
SRAM
lub pamięci unipolarne typu
CMOS
.
Pamięci SRAM są szybsze ale ulotne, więc konfiguracja
połączeń musi być w takich układach ładowana z
zewnętrznej pamięci po każdym włączeniu zasilania. W
układach CMOS stosowane są programowalne pamięci
stałe
EPROM, EEPROM i FLASH
co pozwala utrzymywać
konfigurację połączeń przy wyłączonym zasilaniu.
Spotykane są również układy z pamięcią EPROM bez
okienka do kasowania zawartości programowalne
jednokrotnie (
OTP ROM
– One Time Programmable).
ETR 8.11
4
Proste układy programowalne – SPLD (Simple PLD).
Są to układy średniej skali integracji (kilkadziesiąt bramek) w
tradycyjnych obudowach dwurzędowych. W części
kombinacyjnej układy zawierają bramki AND, OR i negacje,
w części sekwencyjnej przerzutniki typu D.
W zależności od architektury wyróżnia się układy
PLA
(Programmable Logic Array),
PAL
(Programmable Array
Logic) i
GAL
(Generic Array Logic).
W części kombinacyjnej układy te zasadniczo realizują
funkcje logiczne zapisane jako sumy iloczynów. Zawierają
od strony wejść negacje, następnie matrycę bramek AND i
od strony wyjść bramki OR. Możliwości układu wyznacza
liczba wejść i wyjść. W układach PLA: programowana jest
zarówno sieć bramek AND jak i sieć wyjściowych bramek
OR.
ETR 8.11
Ogólnie przyjęta jest konwencja uproszczonych symboli
bramek logicznych, w których wszystkie wejścia bramki
zastępowane są jedną linią.
Przykładowy uproszczony schemat fragmentu układu PLA:
5
Kółka na przecięciu
linii siatek oznaczają
połączenia
programowane,
które mogą być
zwarciem lub
rozwarciem.
ETR 8.11
6
Układy PAL mają programowalne tylko połączenia do wejść
bramek AND. Wyjściowe bramki OR mają wejścia na stałe
dołączone do wyjść bramek AND.
Przykładowy uproszczony schemat fragmentu układu PAL:
Wyjściowe bramki OR są najczęściej 4 lub 8 – wejściowe.
z http://commons.wikimedia.org/wiki/
File:AMD_PAL_22V10.jpg
ETR 8.11
7
W układach programowalnych stosowane są również bramki
trójstanowe. Najczęściej są to bufory wyjściowe, co
umożliwia stosowanie tych samych zacisków jako wyjścia
lub wejścia (wtedy odpowiedni bufor wyjściowy musi być w
stanie wysokiej impedancji).
Układy GAL są rozwinięciem układów PAL. Historycznie były
to pierwsze układy programowalne wielokrotnie. Oprócz
negacji wejściowych i matrycy bramek AND zawierają tak
zwane
makrokomórki wyjściowe
(Makrocell). Przykładowo
makrokomórka zawiera, prócz bramek, przerzutnik typu D z
wejściami kasowania i ustawiania oraz trójstanowy bufor
wyjściowy. Sygnały wejściowe makrokomórki to sygnały z
matrycy AND. Makrokomórka ma też oddzielne wejścia:
zegarowe i wejście zezwalające buforów trójstanowych.
Prócz wejść makrokomórka ma jedną końcówkę, która
może być wyjściem, wyjściem przerzutnika lub wejściem.
ETR 8.11
8
Przykładowy uproszczony schemat blokowy układu GAL:
ETR 8.11
9
Na rysunku obok
zamieszczono schemat
logiczny układu ATF16V8B
firmy ATMEL w trybie
rejestrowym. Układ ma 8
wejść, wejście zegarowe
CLK, wejście zezwalające
OE oraz 8 wejść/wyjść. Na
skrzyżowaniu linii
poziomych i pionowych
znajdują się
programowalne połączenia
(technologia Flash).
Matryca połączeń
dołączona jest do wejść
bramek AND. Schemat
makrokomórki Output Logic
przedstawiono na
następnej stronie.
10
Schemat makrokomórki Output Logic układu ATF16V8B firmy ATMEL w
trybie rejestrowym (dostępne są trzy tryby: Registered, Complex i
Simple).
11
Złożone układy programowalne – CPLD (Complex PLD).
Są to układy dużej skali integracji (kilkaset bramek) w
nowoczesnych obudowach wielozaciskowych. Układy SPLD
stanowią tu bloki logiczne złożone z makrokomórek
połączone dodatkową matrycą połączeń.
Przykładowy schemat blokowy układu CPLD:
ETR 8.11
12
Programowalne matryce bramkowe (FPGA
– Field
Programmable Gate Array).
Przykładowy schemat architektury układu FPGA:
z
http://commons.wikimedia.org/wiki/
ETR 8.11
MC
– makrokomórka
P
– programowalne
połączenia międzyblokowe
13
Układy FPGA są układami bardzo dużej skali integracji (do
kilkudziesięciu milionów bramek) w nowoczesnych obudowach
wielozaciskowych. Stanowią matrycę programowalnych
makrokomórek
(MC
– Macrocell). W węzłach matrycy umieszczone
są programowalne połączenia międzyblokowe (P).
Makrokomórka zawiera
kilka bramek, kilka
multiplekserów i jeden
lub dwa przerzutniki z
wejściami kasującymi i
ustawiającymi.
Przykładową
makrokomórkę
przedstawiono obok.
ETR 8.11
14
Budowa makrokomórki jest niezwykle elastyczna co pozwala
uzyskiwać bardzo zróżnicowane funkcje wyjściowe.
Układy FPGA budowane są w wersji z pamięcią SRAM lub z
pamięcią stałą (EPROM, EEPROM, FLASH). Zastosowanie
pamięci SRAM pozwala uzyskiwać bardzo małe czasy
propagacji (rzędu 2 ns) i łatwość zmiany konfiguracji w
urządzeniach mikroprocesorowych.
Modyfikacja funkcji
układu jest możliwa w każdej chwili w trakcie działania układu
(np. w urządzeniach mikroprocesorowych). Układy z
pamięcią SRAM są programowane przy każdym włączeniu
zasilania. Ich zawartość musi być przechowywana w
zewnętrznych pamięciach stałych i najczęściej jest ładowana
przez wejście szeregowe.
Układy z pamięcią stałą są często układami OTP
(jednokrotnie programowalne).
ETR 8.11
15
Do programowania układów FPGA stosowane jest
specjalistyczne oprogramowanie dostarczane przez
producenta układów najczęściej bezpłatnie. Umożliwia ono
projektowanie układu i sprawdzanie jego poprawności wraz z
oceną szybkości działania.
Stosowane są specjalne języki programowania zwane HDL –
Hardware Description Language. Zawierają one wiele
zdefiniowanych makrorozkazów znacznie ułatwiających
projektowanie.
Przykład: należy zaprojektować układ mnożący dwie liczby 16 – bitowe.
Układ zawiera dwa 16 – bitowe wejścia liczby A i B i 32 – bitowe wyjście
Y. Liczba bramek potrzebna do zrealizowania projektu wynosi około 6000.
Tradycyjny sposób projektowania polega na stworzeniu
wielostronicowego schematu co zajmuje kilka dni wytężonej pracy,
następnie stworzenie listy połączeń i dalszej obróbki. Układ taki trudno
jest modyfikować i musi zawierać bramki dostępne na rynku.
ETR 8.11
W języku HDL projektowanie polega na napisaniu kilku linijek testu np. :
entity MULT is
--
nazwa układu
port (A,B : in std_logic (15 downto 0) ;
--
definicja wejść
Y : out std_logic (31 downto 0) ;
--
definicja wyjść
end MULT ;
architecture BEHAVE of MULT is
Y <= A * B ;
--
opis działania
end BEHAVE ;
W przypadku zmiany polegającej na rozszerzeniu liczby wejść i wyjść w
tradycyjnym projektowaniu pracę w zasadzie trzeba powtórzyć od nowa.
W przypadku języka HDL wystarczy po prostu zmienić dwie liczby.
16
ETR 8.11
17
entity MULT is
--
nazwa układu
port (A,B : in std_logic (31 downto 0) ;
--
definicja wejść
Y : out std_logic (63 downto 0) ;
--
definicja wyjść
end MULT ;
architecture BEHAVE of MULT is
Y <= A * B ;
--
opis działania
end BEHAVE ;
Nowsze narzędzia projektowe tworzą graficzne środowisko
programistyczne co jest dalszym ułatwieniem dla użytkownika.
ETR 8.11