background image

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

background image

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

background image

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

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

background image

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

background image

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

background image

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

background image

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

background image

8

Przykładowy uproszczony schemat blokowy układu GAL:

ETR 8.11

background image

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.

https://www1.elfa.se/data1/wwwroot/assets/datasheets/

background image

10

Schemat makrokomórki Output Logic układu ATF16V8B firmy ATMEL w 
trybie rejestrowym (dostępne są trzy tryby: Registered, Complex i 
Simple). 

background image

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

background image

12

Programowalne matryce bramkowe (FPGA 

– Field 

Programmable Gate Array).

Przykładowy schemat architektury układu FPGA:

http://commons.wikimedia.org/wiki/

File:Fpga_xilinx_spartan.jpg

ETR 8.11

MC 

– makrokomórka

– programowalne 

połączenia międzyblokowe

background image

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

background image

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

background image

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

background image

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

background image

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