Podręcznik
Strona: | SEZAM - System Edukacyjnych Zasobów Akademickich i Multimedialnych |
Kurs: | Układy sekwencyjne |
Książka: | Podręcznik |
Wydrukowane przez użytkownika: | Gość |
Data: | czwartek, 21 listopada 2024, 23:55 |
1. Pojęcia podstawowe
W omawianych do tej pory układach kombinacyjnych wektor wyjściowy Yt w chwili t jest bezpośrednio zależny od wektora wejściowego Xt w chwili t. Zajmiemy się teraz układami sekwencyjnymi, dla których wektor wyjściowy Yt w chwili t zależy od sekwencji wektorów wejściowych Xt, Xt–1, Xt–2,…, w chwilach t, t –1, t – 2,… .
Modelem matematycznym układu sekwencyjnego jest automat. Automat jest definiowany przez określenie:
- zbioru liter wejściowych X (lub V) i wyjściowych Y,
- zbioru stanów wewnętrznych S,
- funkcji przejść (oznaczanej d),
- funkcji wyjść (oznaczanej l).
W formalnym zapisie automat A określa się jako piątkę áS, X, Y, d, lñ, gdzie funkcja przejść jest definiowana jako odwzorowanie d: S ´ X ® S, natomiast funkcja wyjść l jest odwzorowaniem l: S ´ X ® Y (tzw. automat Mealy’ego) lub jako l: S ® Y (tzw. automat Moore’a).
Ważnym pojęciem w układach cyfrowych jest pojęcie automatu zupełnego i niezupełnego. Automat, określony funkcjami przejść d i wyjść l nazywamy automatem zupełnym, jeśli dziedziny tych funkcji są równe zbiorom S ´ X oraz S (w przypadku funkcji wyjść automatu Moore’a). Jeśli natomiast dziedziną którejkolwiek funkcji jest podzbiór wymienionych zbiorów, to jest: Dd Ì S ´ X, Dl Ì S ´ X lub Dl Ì S, to taki automat nazywamy niezupełnym.
Funkcje przejść-wyjść jest najwygodniej przedstawiać za pomocą tablicy przejść-wyjść. Tablice przejść-wyjść przykładowych automatów podane w tabeli 4.1 reprezentują automat Moore’a (a) oraz automat Mealy’ego (b). Tablicom tym odpowiadają grafy automatów pokazane na rys. 4.1.
Tablica 4.1
Techniczną realizacją automatu jest układ sekwencyjny zbudowany z układu kombinacyjnego i pamięci (rys. 4.2). Układ kombinacyjny automatu jest układem wielowyjściowym, wytwarzającym sygnały wyjściowe automatu y1, …, ym oraz sygnały wzbudzające układ pamięciowy q1, …, qk. Wejściami układu kombinacyjnego są sygnały wejściowe automatu x1, …, xn oraz sygnały wyjściowe Q1, …, Qp układu pamięciowego.
Rys. 4.1. Graf automatu a) Moore’a, b) Mealy’ego
Rys. 4.2. Układ sekwencyjny
Układ kombinacyjny jest opisany tablicami wyjść i wzbudzeń (sposób tworzenia tablic wzbudzeń poznamy w dalszej części rozdziału). W układach synchronicznych pamięć automatu jest zbudowana z tzw. przerzutników – automatów elementarnych synchronizowanych specjalnym sygnałem zegarowym oznaczonym clk. W układach asynchronicznych pamięć jest realizowana bezpośrednio przez sprzężenia zwrotne z wyjść na wejścia układu kombinacyjnego.
Synteza układów sekwencyjnych jest złożonym i obszernym zadaniem składającym się z kilku etapów. Zwyczajowo wyróżnia się następujące etapy:
- synteza abstrakcyjna (utworzenie tablicy przejść-wyjść),
- redukcja (minimalizacja) liczby stanów,
- kodowanie stanów, liter wejściowych i wyjściowych,
- synteza kombinacyjna (obliczanie funkcji wzbudzeń przerzutników i funkcji wyjściowych).
Omawianie procesu syntezy układów sekwencyjnych rozpoczynamy od etapu syntezy abstrakcyjnej, której celem jest utworzenie tablicy przejść-wyjść. Tablicę taką najczęściej tworzy się za pośrednictwem grafu automatu. Jest to najważniejszy a zarazem najobszerniejszy etap całego procesu syntezy.
Tworzenie grafu automatu, a tym samym odpowiedniej tablicy przejść-wyjść, jest istotną czynnością w syntezie układów sekwencyjnych. Rozważmy tablicę przejść-wyjść układu sekwencyjnego spełniającego funkcję tzw. detektora sekwencji
Układ ma badać kolejne „trójki” symboli wejściowych. Sygnał wyjściowy pojawiający się podczas trzeciego skoku układu ma wynosić 1, gdy „trójka” ma postać 001, a 0, gdy „trójka” jest innej postaci – stąd nazwa „detektor sekwencji”. Graf tego automatu jest pokazany na rys. 4.3. Odpowiadająca mu tablica przejść-wyjść jest pokazana w tablicy 4.2.
Rys. 4.3. Graf detektora sekwencji
Tablica 4.2
Łatwo sprawdzić, że każda sekwencja 001 na wejściu układu spowoduje powstanie na jego wyjściu sygnału y = 1.
Równie prosta jest konstrukcja grafu automatu wykrywającego ciąg dokładnie trzech albo dokładnie czterech następujących bezpośrednio po sobie jedynek w dowolnie długim słowie wejściowym.
Graf stanów tego automatu pokazano na rys. 4.4. W stanie S1 (początkowym) sygnał 0 na wejściu powoduje pozostanie w tym stanie (nie może to być początek wejściowej sekwencji złożonej z trzech lub czterech jedynek). Pojawiające się na wejściu kolejne trzy jedynki powodują przejście przez stany S2, S3 do stanu S4, przy czym przy przejściu ze stanu S3 do S4 sygnalizowane jest wystąpienie trzech kolejnych jedynek sygnałem 1 na wyjściu. Pojawienie się w stanie S4 czwartej kolejnej jedynki powoduje przejście do stanu początkowego S1 i wygenerowanie na wyjściu sygnału 1. Pojawienie się na wejściu sygnału 0 powoduje przejście z każdego stanu do stanu początkowego S1.
Rys. 4.4. Graf stanów automatu wykrywającego trzy albo cztery jedynki
Na podstawie grafu stanów z rys. 4.4 utworzono tablicę przejść-wyjść automatu (tab. 4.3).
Tablica 4.3
x S |
0 |
1 |
0 |
1 |
1 |
1 |
2 |
0 |
0 |
2 |
1 |
3 |
0 |
0 |
3 |
1 |
4 |
0 |
1 |
4 |
1 |
1 |
0 |
1 |
Syntezę abstrakcyjną bardziej złożonego automatu omawiamy w przykładzie 4.2.
Zaprojektować układ wykrywający parzystą liczbę sekwencji 0011.
Konstrukcję grafu stanów automatu pokazano na rys. 4.5. W stanie S1 (początkowym) sygnał 1 na wejściu powoduje pozostanie w tym stanie (nie może to być początek wejściowej sekwencji 0011). Załóżmy dalej, że w stanie automat jest w stanie S1, a na wejściu pojawią się kolejno sygnały 0, 0, 1, 1, 0, 0, 1, 1, czyli dwie sekwencje 0011. Spowoduje to kolejne przejścia automatu przez stany: S2, S3, S4, S5, S6, S7, S8. Ze stanu S8 automat przejdzie do stan S1, przy czym dla sygnału wejściowego 1 na wyjściu zostanie wygenerowany sygnał 1 oznaczający wykrycie parzystej liczby sekwencji 0011. W stanie S3 pod wpływem sygnału wejściowego 0 układ pozostaje, oczekując na przyjście sygnału 1 podobna sytuacja ma miejsce dla stanu S7. W stanie S5 pod wpływem sygnału wejściowego 1 układ pozostaje, oczekując na przyjście sygnału 0. Ze stanów S2 i S6 pod wpływem sygnału wejściowego 1 sygnał wraca do stanu początkowego S1, analogicznie dla stanów S4 i S8 dla sygnału wejściowego. Na podstawie grafu stanów z rys. 4.5 utworzono tablicę przejść-wyjść automatu (tab. 4.4).
Rys. 4.5. Graf stanów automatu z przykładu 4.1
Tablica 4.4
x S |
0 |
1 |
0 |
1 |
1 |
2 |
1 |
0 |
0 |
2 |
3 |
1 |
0 |
0 |
3 |
3 |
4 |
0 |
0 |
4 |
1 |
5 |
0 |
0 |
5 |
6 |
5 |
0 |
0 |
6 |
7 |
1 |
0 |
0 |
7 |
7 |
8 |
0 |
0 |
8 |
1 |
1 |
0 |
1 |
2. Synchroniczne układy sekwencyjne
W synchronicznym układzie sekwencyjnym układ kombinacyjny (rys. 4.6) automatu jest układem wielowyjściowym, wytwarzającym sygnały wyjściowe automatu y1, …, ym oraz sygnały wzbudzające układ pamięciowy q1, …, qk. Wejściami układu kombinacyjnego są sygnały wejściowe automatu x1, …, xn oraz sygnały wyjściowe Q1, …, Qp układu pamięciowego. Układ kombinacyjny jest opisany tablicami wyjść i wzbudzeń (sposób tworzenia tablic wzbudzeń poznamy w dalszej części rozdziału).
Rys. 4.6. Synchroniczny układ sekwencyjny
Pamięć automatu jest zbudowana z tzw. przerzutników – automatów elementarnych synchronizowanych specjalnym sygnałem zegarowym oznaczonym clk.
Rys. 4.7. Symbol graficzny przerzutnika
Przerzutnik – to automat typu Moore’a o dwóch stanach wewnętrznych, jednym lub dwóch wejściach informacyjnych, dwóch wyjściach (prostym i zanegowanym) oraz wejściu synchronizującym (zegarowym). Symbol graficzny przerzutnika pokazano na rys. 4.7.
Tablica 4.5
W zależności od rodzaju wejść informacyjnych wyróżnia się przerzutniki typu: D, T, SR i JK. Ich tablice przejść są przedstawione kolejno w tabl. 4.5a, b, c, d.
Bezpośrednio z tablicy przejść można wyznaczyć równanie charakterystyczne przerzutnika określające zależność stanu następnego Q’ od sygnałów wejściowych i stanu bieżącego Q. Na przykład dla przerzutników D i T odpowiednie równania będą:
Podane w tabl. 4.6 tablice przejść przerzutników interpretujemy następująco. Przerzutnik typu D jest to element opóźniający sygnał wejściowy o takt. Przerzutnik typu T przy podaniu jedynki na wejście T zmienia w kolejnym takcie swój stan na przeciwny. Przerzutnik typu SR jest to przerzutnik z dwoma wejściami: ustawiającym (Set) i zerującym (Reset), czyli przy S = 1, R = 0 przerzutnik przechodzi do stanu Q = 1, przy S = 0, R = 1 przerzutnik przechodzi do stanu Q = 0, przy czym podawanie jedynek na oba wejścia jednocześnie jest zabronione. Przerzutnik JK działa jak SR, gdy jedynka jest podana na co najwyżej jedno wejście i jak typu T, gdy jedynka jest podana na oba wejścia. Zatem na wejścia przerzutnika JK może być podana dowolna kombinacja wartości sygnałów J i K, przy czym zawsze przy sygnałach J = 1, K = 0 przerzutnik ten „zapala się”, to znaczy przechodzi do stanu 1, zaś przy sygnałach J = 0, K = 1 przerzutnik „gaśnie”, to znaczy przechodzi do stanu 0. Przy sygnałach J = K = 1 przerzutnik zmienia stan na przeciwny.
Tablica 4.6
|
Przy projektowaniu układów synchronicznych posługujemy się również tzw. tablicami wzbudzeń przerzutników. Określają one jakie muszą być sygnały wejściowe przerzutnika, aby uzyskać określoną zmianę stanu (przejście ze stanu bieżącego Q do następnego Q’). Tablice wzbudzeń omawianych przerzutników podane są w tabl. 4.6.
Tablica 4.6
Q Q’ |
D |
T |
S R |
J K |
0 0 |
0 |
0 |
0 – |
0 – |
0 1 |
1 |
1 |
1 0 |
1 – |
1 0 |
0 |
1 |
0 1 |
– 1 |
1 1 |
1 |
0 |
– 0 |
– 0 |
Tablice przejść i tablice wzbudzeń przerzutników nie określają bezpośrednio roli sygnału zegarowego. Znaczenie sygnału zegarowego w pracy przerzutnika jest istotne o tyle, że wyznacza on momenty zmiany stanu bieżącego Q. Zmiany te mogą nastąpić tylko w chwilach sygnalizowanych przez ustalone zbocze sygnału zegarowego (np. narastające). Na rys. 4.8 są pokazane przebiegi sygnałów wejściowych przerzutnika typu D i T oraz sygnały na ich wyjściach Q.
Rys. 4.8. Wykresy czasowe sygnałów dla przerzutników D i T
Omawianie procesu syntezy układów sekwencyjnych rozpoczynamy od etapu syntezy kombinacyjnej. Jest to najważniejszy a zarazem najobszerniejszy etap całego procesu syntezy. Polega on (jak to pokazano na schemacie blokowym układu sekwencyjnego – rys. 4.9) na obliczaniu funkcji sterujących wejściami przerzutników (funkcje wzbudzeń) oraz na obliczaniu funkcji wyjściowych. Warto podkreślić różnicę w obliczaniu funkcji wyjściowych dla automatów typu Moore’a a i typu Mealy’ego. Otóż w pierwszym przypadku funkcje te są zależne tylko od wyjść Q przerzutników, natomiast w drugim, są zależne zarówno od wyjść Q jak i od wejść zewnętrznych X.
Rys. 4.9. Schemat blokowy układu sekwencyjnego
Syntezę kombinacyjną omówimy na przykładzie automatu, który dla ustalenia uwagi nazywać będziemy detektorem sekwencji. Jest to automat typu Mealy’ego, o trzech stanach wewnętrznych oznaczonych A, B, C (tabl. 4.7), jednym sygnale wejściowym x oraz jednym sygnale wyjściowym.
Tablica 4.7
Pierwszą czynnością jaką należy wykonać jest zatem kodowanie stanów wewnętrznych. Kodowanie stanów polega na przyporządkowaniu abstrakcyjnym symbolom stanów A, B, C ciągów binarnych o możliwie najmniejszej liczbie bitów. Dla trzech stanów do jednoznacznego zakodowania wystarczą dwa bity. Dlatego przyjmiemy, że A = 00, B =
Tablica 4.8
Tablica 4.9
Zgodnie z tym co powiedzieliśmy zakodowana tablica reprezentuje dwa przerzutniki. Zatem w celu obliczenia funkcji wzbudzeń tablicę tę należy „rozpisać” na dwie tabelki odpowiadające poszczególnym przerzutnikom Q1 i Q0. Uzyskuje się w ten sposób oddzielne tablice wzbudzeń dla każdego przerzutnika (tabl. 4.9). Są one zapisane w formie tablic Karnaugha, a więc można na nich zakreślać pętelki w celu uzyskania minimalnych wyrażeń boolowskich dla funkcji wzbudzeń D1 i D0. W przypadku przerzutników typu D funkcje wzbudzeń są tożsame z funkcjami stanu następnego oznaczonym Q1’ oraz Q0’. Również bezpośrednio z tabelki 4.8 obliczamy funkcję wyjściową Y:
Schemat logiczny tak zaprojektowanego układu (rys. 4.10) jest zbudowany z dwóch przerzutników, do których wejść sterujących D1 i D0 dołączone są wyjścia układów kombinacyjnych realizujących funkcje wzbudzeń oraz funkcję wyjściową.
Rys. 4.10. Schemat logiczny detektora sekwencji z przerzutnikami typu D
Dla realizacji z przerzutnikami T uzyskane poprzednio tabelki dla funkcji stanu następnego Q1’ i Q0’ należy dodatkowo przekształcić w celu uzyskania tablic wzbudzeń dla przerzutników T1 i T0. Transformacji takiej dokonujemy na podstawie tablicy wzbudzeń przerzutnika T. W rezultacie uzyskujemy tablice dla funkcji wzbudzeń T1 i T0 (tabl. 4.10). Są one podane w formie tablic Karnaugha, zatem po zakreśleniu pętelek bezpośrednio obliczamy wyrażenia boolowskie dla T1 i T0.
Tablica 4.10
Podobnie jak poprzednio schemat logiczny tak zaprojektowanego układu jest zbudowany z dwóch przerzutników, do których wejść sterujących T1 i T0 dołączone są wyjścia układów kombinacyjnych realizujących funkcje wzbudzeń oraz funkcję wyjściową (rys. 4.11). Funkcja wyjściowa nie uległa zmianie.
Rys. 4.11. Schemat logiczny detektora sekwencji z przerzutnikami typu T
Nieco bardziej skomplikowane jest obliczanie funkcji wzbudzeń dla przerzutników JK. W tym przypadku każdą tabelkę funkcji stanu następnego tj,. Q1’ oraz Q0’ należy przekształcić na dwie tabelki: jedną dla wejścia J, a drugą dla wejścia K. Oczywiście podobnie jak poprzednio odpowiednie wartości sygnałów binarnych jakie należy wpisywać do poszczególnych kratek tabelek wzbudzeń uzyskujemy z tablicy wzbudzeń dla JK. W rezultacie powstają cztery tabelki wzbudzeń: dla J1, K1 oraz dla J0, K0. Pokazane są one w tabl. 4.11.
Tablica 4.11
Obliczone na ich podstawie funkcje wzbudzeń są następujące:
Schemat logiczny układu pokazano na rys. 4.12.
Rys. 4.12. Schemat logiczny detektora sekwencji z przerzutnikami typu JK
Omówiony przykład syntezy układu dla detektora sekwencji jest zbyt prosty. Dla bardziej skomplikowanego treningu w projektowaniu sekwencyjnych układów cyfrowych omówimy syntezę licznika mod 5 ze sterowaniem. Licznik to układ cyfrowy (blok funkcjonalny), w którym zliczane są impulsy zegarowe. Pojawienie się impulsu zwiększa lub zmniejsza zawartość licznika o 1. Czyli jest to prosty układ sekwencyjny, który musi pamiętać poprzednią zawartość reprezentowaną stanem wewnętrznym.
Należy zaprojektować licznik pracujący w trzech różnych trybach, a mianowicie: liczenie do przodu, liczenie do tyłu oraz zerowanie. Wybór tych trybów będzie dokonywany sygnałami sterującymi x1 i x2.
Pierwszą czynnością jest formalne zapisanie działania układu w postaci tablicy przejść wyjść. Jest to czynność, którą zgodnie z klasyfikacją etapów syntezy automatów zaliczamy do etapu syntezy abstrakcyjnej. Oznaczając dla licznika mod 5 (czyli zliczającego do 5) stany wewnętrzne wg naturalnego kodu binarnego: S0, S1, …, S4 wymienione trzy tryby pracy możemy zapisać w formie tablicy podanej w tabl. 4.12a. Kolejny etap syntezy to kodowanie. Do zakodowania mamy zarówno stany wewnętrzne S0 do S4, jak też litery wejściowe a, b, c. Sposób kodowania podany jest w tabl. 4.12b.
Tablica 4.12
a) |
|
|
|
|
|
b) |
|
|
|
|
|
X |
a |
b |
c |
Y |
|
x1x2 |
00 |
01 |
11 |
10 |
Y |
S0 |
S1 |
S4 |
S0 |
0 |
|
000 |
001 |
100 |
000 |
000 |
0 |
S1 |
S2 |
S0 |
S0 |
0 |
|
001 |
010 |
000 |
000 |
000 |
0 |
S2 |
S3 |
S1 |
S0 |
0 |
|
010 |
011 |
001 |
000 |
000 |
0 |
S3 |
S4 |
S2 |
S0 |
0 |
|
011 |
100 |
010 |
000 |
000 |
0 |
S4 |
S0 |
S3 |
S0 |
1 |
|
100 |
000 |
011 |
000 |
000 |
1 |
Uzyskaną tablicę należy zapisać w formie dogodnej do dalszych obliczeń. W tym celu dla oznaczenia poszczególnych wierszy i kolumn tej tablicy przyjmujemy kod Gray’a. Oczywiście chcąc, aby tablica taka jak najwierniej odpowiadała tablicy Karnaugha, niektóre wiersze będą miały nieokreślone stany następne. Uzyskana tablica podana jest w tabl. 4.13. Reprezentuje ona (łącznie) trzy funkcje stanu następnego Q2’,Q1’,Q0’.
W celu obliczenia funkcji wzbudzeń należy uzyskaną tablicę rozpisać na trzy tablice, podane w tabl. 4.14. Reprezentują one poszczególne przerzutniki tj. ich stany następne, a w przypadku przerzutników typu D są to jednocześnie funkcje wzbudzeń.
Tablica 4.13
x1x2 Q2Q1Q0 |
00 |
01 |
11 |
10 |
||
000 |
001 |
100 |
000 |
000 |
|
|
001 |
010 |
000 |
000 |
000 |
|
|
011 |
100 |
010 |
000 |
000 |
|
|
010 |
011 |
001 |
000 |
000 |
|
|
110 |
– – – |
– – – |
– – – |
– – – |
|
|
111 |
– – – |
– – – |
– – – |
– – – |
|
|
101 |
– – – |
– – – |
– – – |
– – – |
|
|
100 |
000 |
011 |
000 |
000 |
|
|
|
Q’2Q’1Q’0 |
|
Tablica 4.14
a) |
|
|
|
|
|
b) |
|
|
|
|
|
c) |
|
|
|
|
|
x1x2 \ Q2Q1Q0 |
00 |
01 |
11 |
10 |
|
x1x2 \ Q2Q1Q0 |
00 |
01 |
11 |
10 |
|
x1x2 \ Q2Q1Q0 |
00 |
01 |
11 |
10 |
|
000 |
0 |
1 |
0 |
0 |
|
000 |
0 |
0 |
0 |
0 |
|
000 |
1 |
0 |
0 |
0 |
|
001 |
0 |
0 |
0 |
0 |
|
001 |
1 |
0 |
0 |
0 |
|
001 |
0 |
0 |
0 |
0 |
|
011 |
1 |
0 |
0 |
0 |
|
011 |
0 |
1 |
0 |
0 |
|
011 |
0 |
0 |
0 |
0 |
|
010 |
0 |
0 |
0 |
0 |
|
010 |
1 |
0 |
0 |
0 |
|
010 |
1 |
1 |
0 |
0 |
|
110 |
– |
– |
– |
– |
|
110 |
– |
– |
– |
– |
|
110 |
– |
– |
– |
– |
|
111 |
– |
– |
– |
– |
|
111 |
– |
– |
– |
– |
|
111 |
– |
– |
– |
– |
|
101 |
– |
– |
– |
– |
|
101 |
– |
– |
– |
– |
|
101 |
– |
– |
– |
– |
|
100 |
0 |
0 |
0 |
0 |
|
100 |
0 |
1 |
0 |
0 |
|
100 |
0 |
1 |
0 |
0 |
|
|
Mając zatem tablice wzbudzeń poszczególnych przerzutników podane w formie tablic Karnaugha możemy bezpośrednio z tych tabelek wyznaczyć odpowiednie wyrażenia boolowskie na funkcje wzbudzeń D2, D1, D0.
Proces projektowania licznika jest jeszcze bardziej skomplikowany dla realizacji na przerzutnikach typu JK. W tym przypadku każdą uzyskaną poprzednio tablicę stanu następnego należy rozpisać na dwie oddzielne dla sterowania J oraz K.
Oczywiście Y = Q2.
Trzy kolejne tablice reprezentują funkcje wzbudzeń wejścia J oraz K poszczególnych przerzutników kolejno: J2, K2 (tabl. 4.15), J1, K1 (tabl. 4.16) oraz J0, K0 (tabl. 4.17). Z tablic tych bezpośrednio obliczamy funkcje wzbudzeń:
Oczywiście Y = Q2.
Tablica 4.15
a) |
|
|
|
|
|
b) |
|
|
|
|
x1x2 Q2Q1Q0 |
00 |
01 |
11 |
10 |
|
x1x2 Q2Q1Q0 |
00 |
01 |
11 |
10 |
000 |
0 |
1 |
0 |
0 |
|
000 |
– |
– |
– |
– |
001 |
0 |
0 |
0 |
0 |
|
001 |
– |
– |
– |
– |
011 |
1 |
0 |
0 |
0 |
|
011 |
– |
– |
– |
– |
010 |
0 |
0 |
0 |
0 |
|
010 |
– |
– |
– |
– |
110 |
– |
– |
– |
– |
|
110 |
– |
– |
– |
– |
111 |
– |
– |
– |
– |
|
111 |
– |
– |
– |
– |
101 |
– |
– |
– |
– |
|
101 |
– |
– |
– |
– |
100 |
– |
– |
– |
– |
|
100 |
1 |
1 |
1 |
1 |
|
J2 |
|
|
K2 |
Tablica 4.16
a) |
|
|
|
|
|
b) |
|
|
|
|
|||||
x1x2 Q2Q1Q0 |
00 |
01 |
11 |
10 |
|
x1x2 Q2Q1Q0 |
00 |
01 |
11 |
10 |
|||||
000 |
0 |
0 |
0 |
0 |
|
000 |
– |
– |
– |
– |
|||||
001 |
1 |
0 |
0 |
0 |
|
001 |
– |
– |
– |
– |
|||||
011 |
– |
– |
– |
– |
|
011 |
1 |
0 |
1 |
1 |
|||||
010 |
– |
– |
– |
– |
|
010 |
0 |
1 |
1 |
1 |
|||||
110 |
– |
– |
– |
– |
|
110 |
– |
– |
– |
– |
|||||
111 |
– |
– |
– |
– |
|
111 |
– |
– |
– |
– |
|||||
101 |
– |
– |
– |
– |
|
101 |
– |
– |
– |
– |
|||||
100 |
0 |
1 |
0 |
0 |
|
100 |
– |
– |
– |
– |
|||||
|
|
J1 |
|
|
K1 |
Tablica 4.17
a) |
|
|
|
|
|
b) |
|
|
|
|
|||
x1x2 Q2Q1Q0 |
00 |
01 |
11 |
10 |
|
x1x2 Q2Q1Q0 |
00 |
01 |
11 |
10 |
|||
000 |
1 |
0 |
0 |
0 |
|
000 |
– |
– |
– |
– |
|||
001 |
– |
– |
– |
– |
|
001 |
1 |
1 |
1 |
1 |
|||
011 |
– |
– |
– |
– |
|
011 |
1 |
1 |
1 |
1 |
|||
010 |
1 |
1 |
0 |
0 |
|
010 |
– |
– |
– |
– |
|||
110 |
– |
– |
– |
– |
|
110 |
– |
– |
– |
– |
|||
111 |
– |
– |
– |
– |
|
111 |
– |
– |
– |
– |
|||
101 |
– |
– |
– |
– |
|
101 |
– |
– |
– |
– |
|||
100 |
0 |
1 |
0 |
0 |
|
100 |
– |
– |
– |
– |
|||
|
J0 |
|
|
K0 |
3. Minimalizacja stanów automatu
Jak wiadomo automat A = áS,V,Y,d,lñ, w którym zbiór S stanów wewnętrznych S ma liczność |S| może być zrealizowany na co najmniej p = élog2÷S÷ù przerzutnikach. Zatem każde zmniejszenie liczby stanów, ale takie, aby automat z punktu widzenia obserwatora zewnętrznego wykonywał taką samą pracę jest bardzo korzystne ze względu na złożoność (a tym samym koszt) jego realizacji. Proces redukowania liczby stanów automatu, ale w taki specjalny sposób, aby nie zmniejszyło to możliwości funkcjonalnych automatu nazywa się minimalizacją liczby stanów automatu. Przykład minimalizacji automatu podany jest w tabl. 4.18. Automat opisany tablicą przejść wyjść (tabl. 4.18a) ma 6 stanów wewnętrznych, zatem wymaga do swojej realizacji 3 przerzutników. Automat ten można jednak zminimalizować (na razie nie wiadomo w jaki sposób) do postaci podanej w tabl. 4.18b. Zminimalizowany automat ma 3 stany, a więc do jego realizacji wystarczą tylko 2 przerzutniki.
Proces minimalizacji automatu polega na wyznaczaniu relacji zgodności na zbiorze stanów wewnętrznych S. Następnie dla tak wyznaczonych par zgodnych obliczane są Maksymalne Klasy Zgodności. W ostatnim etapie minimalizacji dokonuje się selekcji minimalnej liczby zbiorów zgodnych spełniających tzw. warunek pokrycia i zamknięcia.
Dwa stany wewnętrzne Si, Sj są zgodne, jeżeli dla każdego wejścia v mają one niesprzeczne stany wyjść, a ich stany następne są takie same lub niesprzeczne.
Dwa stany wewnętrzne Si, Sj są zgodne warunkowo, jeżeli ich stany wyjść są niesprzeczne oraz dla pewnego v Î V para stanów następnych do Si, Sj (ozn. Sk, Sl):
(Si, Sj) ¹ (Sk, Sl)
Stany Si, Sj są sprzeczne, jeżeli dla pewnego v Î V ich stany wyjść są sprzeczne.
Dla automatu z tabl. 4.18a, którego stany wewnętrzne są oznaczone liczbami naturalnymi 1 do 6, para 2, 4 jest zgodna, para 1, 3 jest zgodna warunkowo, a para 5, 6 jest sprzeczna.
Tablica 4.18
Ze względu na to, że para zgodna warunkowo może – po dalszej analizie – okazać się parą zgodną albo sprzeczną, w obliczaniu wszystkich par zgodnych posługujemy się tzw. tablicą trójkątną. Przykładowa tablica trójkątna (tabl. 4.19) dla automatu o 5 stanach ma 4 kolumny oznaczone 1 do 4 oraz 4 wiersze oznaczone (od góry) 2 do 5. W rezultacie uzyskujemy tablicę, której kratki wypełniamy symbolami v, gdy analizowana para jest zgodna, x – gdy dana para jest sprzeczna lub w kratce zapisujemy parę (lub pary) stanów następnych w przypadku zgodności warunkowej.
Tablica 4.19
2 |
|
|
|
|
3 |
|
|
|
|
4 |
|
|
|
|
5 |
|
|
|
|
|
1 |
2 |
3 |
4 |
Sposób wypełnienia tablicy trójkątnej dla przykładowego automatu (podanego w tabl. 4.20) wyjaśniamy w tabl. 4.21. Jak widać para 1, 2 jest zgodna, kratkę o współrzędnych 1, 2 wypełniamy znaczkiem v; para 1, 3 jest zgodna pod warunkiem zgodności pary 3, 6 i dlatego w odpowiedniej kratce wpisujemy 3, 6; z kolei para 1, 4 ma sprzeczne wyjścia, zatem wypełniamy ją symbolem ´ itd.
Tablica 4.20
Ogólnie, w tablicy trójkątnej należy wpisać wszystkie warunki oraz wykreślić kratki odpowiadające stanom o sprzecznych wyjściach. Następnie należy wykreślić wszystkie kratki, w których jako warunek (lub jeden z warunków) wpisana jest para k,l odpowiadająca klatce (k,l) wykreślonej na poprzednim etapie. Dla wszystkich nowo wykreślonych klatek należy sprawdzić, czy odpowiadające im pary stanów występują w niewykreślonych kratkach jako warunki. Czynność wykreślania klatek prowadzi się aż do uzyskania sytuacji, gdy wszystkie pary określające warunki odpowiadają kratkom niewykreślonym.
Tablica 4.21
2 |
v |
|
|
|
|
3 |
3,6 |
4,6 |
|
|
|
4 |
´ |
v |
´ |
|
|
5 |
2,4 |
v |
v |
´ |
|
6 |
´ |
3,4 |
v |
1,2; 3,5 |
´ |
|
1 |
2 |
3 |
4 |
5 |
W tak uzyskanej tablicy wszystkie kratki niewykreślone, bez względu na ich zawartość, odpowiadają parom stanów zgodnych. Z tabl. 4.21 odczytujemy, że wszystkie pary zgodne dla automatu z tabl. 4.20 są następujące:
(1,2) (1,3) (1,5) (2,3) (2,4) (2,5) (3,5) (3,6) (4,6)
Dysponując zbiorem wszystkich par zgodnych przystępujemy do wyznaczenia rodziny Maksymalnych Klas Zgodności. Dla potrzeb obliczania rodziny MKZ możemy stosować jedną z dwóch metod omówionych w rozdz. 2.
W przypadku tak prostego automatu wystarczy metoda bezpośrednia. Stosowne obliczenia przebiegają następująco. Najpierw z par tworzymy trójki: 1,2,3; 1,2,5; 1,3,5; 2,3,5. Z uzyskanych czterech trójek powstaje zbiór czteroelementowy: 1, 2, 3, 5. W celu uzyskania wszystkich zbiorów MKZ uzupełniamy tę „czwórkę” tymi parami zgodnymi, które nie zawierają się w dotychczas obliczonych zbiorach zgodnych (czyli w 1, 2, 3, 5). W rezultacie uzyskujemy rodzinę MKZ = {{1,2,3,5}, {2,4}, {3,6}, {4,6}}.
Zgodnie z dotychczasowymi informacjami kolejnym etapem minimalizacji jest selekcja zbiorów zgodnych spełniających odpowiedni warunek pokrycia i zamknięcia. Skoncentrujmy się na wyjaśnieniu warunków pokrycia i zamknięcia.
Tablica 4.22
|
a |
b |
c |
d |
1,2,3,5 |
4,6 |
3,6 |
2,4 |
2 |
4,6 |
3 |
6 |
1,2 |
3,5 |
Otóż pokrycie wymaga, aby każdy stan realizowanego automatu był elementem co najmniej jednej wybranej klasy. Natomiast zamknięcie wymaga, aby dla każdej litery wejściowej wszystkie następniki (stany następne) danej klasy były zawarte w jednej z wybranych klas.
Minimalnym zbiorem klas stanów zgodnych, spełniającym warunek pokrycia dla automatu z tabl. 4.20 jest zbiór {{1,2,3,5}, {4,6}}. Zbiór ten nie jest jednak zamknięty, gdyż warunkami dla klasy {1,2,3,5} są {3,6} i {2,4}, które nie są spełnione (tabl. 4.22), gdyż żadna z tych klas nie jest zawarta w żadnej z obu klas zbioru minimalnego. Ponieważ następnikami klasy {4,6} są klasy {1,2} i {3,5}, więc spróbujmy rozbić klasę {1,2,3,5} na klasy {1,2} i {3,5}. Na podstawie tablicy trójkątnej stwierdzamy, że klasy te nie mają warunków zamknięcia. Jeśli zatem utworzymy zbiór {{1,2}, {3,5}, {4,6}}, to wszystkie klasy będące warunkami zamknięcia dla klas tego zbioru są zawarte w pewnych jego klasach. Zatem optymalny zbiór MKZopt = {{1,2}, {3,5}, {4,6}} jest zamknięty i pełny, a więc jest minimalnym zbiorem klas zgodnych dla tego automatu. Konstrukcja automatu minimalnego pokazana jest w tabl. 4.23.
Tablica 4.23
a) |
|
|
|
|
|
|
|
|
|
|
b) |
|
|
|
|
|
|
|
|
|
|
a |
b |
c |
d |
a |
b |
c |
d |
|
|
a |
b |
c |
d |
a |
b |
c |
d |
A |
1,2 |
4 |
3 |
4 |
2 |
0 |
1 |
1 |
1 |
|
A |
C |
B |
C |
A |
0 |
1 |
1 |
1 |
B |
3,5 |
6 |
6 |
2 |
– |
0 |
1 |
1 |
– |
|
B |
C |
C |
A |
– |
0 |
1 |
1 |
– |
C |
4,6 |
3 |
6 |
1,2 |
3,5 |
0 |
0 |
0 |
1 |
|
C |
B |
C |
A |
B |
0 |
0 |
0 |
1 |
W kolejnym przykładzie dokonamy redukcji stanów dla automatu podanego tablicy 4.24.
Tablica 4.24
x S |
0 |
1 |
0 |
1 |
1 |
5 |
4 |
0 |
0 |
2 |
2 |
7 |
1 |
1 |
3 |
– |
1 |
– |
0 |
4 |
– |
3 |
– |
0 |
5 |
2 |
– |
1 |
– |
6 |
6 |
– |
1 |
– |
7 |
– |
8 |
– |
0 |
8 |
– |
– |
– |
1 |
W tab. 4.25 zaznaczono pary sprzeczne (´), pary zgodne (v) oraz pary zgodne warunkowo (np. 1,4). Po sprawdzeniu zgodności warunkowej wykreślono pary 1,7; 3,7 oraz 4,7.
Tablica 4.25
Następnie stosując algorytm wyznaczania MKZ wg par zgodnych uzyskuje się:
S1 = Æ |
{1} |
S2 = Æ |
{2}{1} |
S3 = {1} |
{1,3}{2} |
S4 = {1,3} |
{1,3,4}{2} |
S5 = {2,3,4} |
{3,4,5}{2,5}{1,3,4} |
S6= {2,3,4,5} |
{3,4,5,6}{2,5,6} |
S7= {5,6} |
{5,6,7} |
S8= {2,5,6} |
|
MKZ = {1,3,4},{2,5,6,8},{3,4,5,6},{5,6,7}
Warunek pokrycia spełniają klasy {1,3,4}, {2,5,6,8}, {5,6,7}. Warunek zamknięcia jest sprawdzany w tab. 4.26.
Tablica 4.26
x S |
0 |
1 |
0 |
1 |
1,3,4 |
5--- |
413 |
0 |
0 |
2,5,6,8 |
226- |
7--- |
1 |
1 |
5,6,7 |
--26 |
--8 |
1 |
0 |
Przyporządkowując odpowiednio nazwy stanów A, B, C otrzymujemy tablicę przejść-wyjść (tab. 4.27) automatu minimalnego.
Tablica 4.27
x S |
0 |
1 |
0 |
1 |
A 1,3,4 |
B/C |
A |
0 |
0 |
B 2,5,6,8 |
C |
C |
1 |
1 |
C 5,6,7 |
B |
B |
1 |
0 |
|
S |
y |
Treścią kolejnego przykładu będzie zadanie nieco obszerniejsze – obejmujące dwa etapy syntezy tj. syntezę abstrakcyjna oraz minimalizacje liczby stanów.
Zaprojektować automat do kontroli czterobitowych słów podawanych szeregowo na jego wejście. Automat ma sprawdzać, czy słowa należą do kodu 2 z 4.
Synteza abstrakcyjna
Konstrukcję grafu stanów automatu pokazano na rys. 4.13. Automat pracuje w czterech taktach, co odpowiada przejściom ze stanu S1 np. przez stany S2, S4, S8 i powrót do stanu S1. Takich możliwych przejść jest 16 – każde odpowiada jednemu z szesnastu czterobitowych słów wejściowych. W czwartym takcie pracy automatu (przy powrocie do stanu S1) na wyjściu pojawia się sygnał 1 – jeśli w słowie wejściowym były dokładnie dwie jedynki (np. przejście S1, S2, S5, S11, S1, lub sygnał 0 – jeśli w słowie wejściowym była inna liczba jedynek niż dwie.
Na podstawie grafu stanów z rys. 4.13 utworzono tablicę przejść-wyjść automatu (tab. 4.28).
Tablica 4.28
x S |
0 |
1 |
0 |
1 |
1 |
2 |
3 |
0 |
0 |
2 |
4 |
5 |
0 |
0 |
3 |
6 |
7 |
0 |
0 |
4 |
8 |
9 |
0 |
0 |
5 |
10 |
11 |
0 |
0 |
6 |
12 |
13 |
0 |
0 |
7 |
14 |
15 |
0 |
0 |
8 |
1 |
1 |
0 |
0 |
9 |
1 |
1 |
0 |
1 |
10 |
1 |
1 |
0 |
0 |
11 |
1 |
1 |
1 |
0 |
12 |
1 |
1 |
0 |
1 |
13 |
1 |
1 |
1 |
0 |
14 |
1 |
1 |
1 |
0 |
15 |
1 |
1 |
0 |
0 |
Rys. 4.13. Graf stanów automatu z przykładu 4.4
Minimalizacja liczby stanów
W tablicy trójkątnej 4.29 znakiem v zaznaczono pary zgodne, krzyżykami ´ zaznaczono pary sprzeczne, a polach odpowiadających parom zgodnym warunkowo podano warunki. Następnie eliminujemy pary zgodne warunkowo na podstawie par sprzecznych (1,9; 2,9 itd.). Powstają nowe pary sprzeczne, które dalej eliminują pary zgodne warunkowo, itd. Okazuje się, że w wyniku tego postępowania uzyskano pary zgodne: (5,6), (8,15), (9,10), (9,12), (10,12), (11,13), (11,14), (131,14). Na tej podstawie wyznaczamy maksymalne klasy zgodności: {1}, {2},{3},{4},{5,6},{7}, {8,15}, {9,10,12}, (11,13,14}. Ponieważ dla spełnienia warunku pokrycia trzeba wziąć wszystkie klasy, zatem warunek zamkniętości też będzie spełniony.
Tablica 4.29
Jeśli wymienionym wcześniej klasom zgodności przypiszemy nazwy kolejno A, B, … , H, I, to uzyskamy tablicę przejść automatu minimalnego (tab. 4.30)
Tablica 4.30
x S |
0 |
1 |
0 |
1 |
A |
B |
C |
0 |
0 |
B |
D |
E |
0 |
0 |
C |
F |
G |
0 |
0 |
D |
G |
H |
0 |
0 |
E |
H |
I |
0 |
0 |
F |
I |
G |
0 |
0 |
G |
A |
A |
0 |
0 |
H |
A |
A |
0 |
1 |
I |
A |
A |
1 |
1 |
Na zakończenie wrócimy do syntezy automatów, dla których w przykładach 4.1 i 4.2 już wykonano syntezę abstrakcyjną. W wyniku tej syntezy otrzymaliśmy następujące tablice przejść-wyjść tych automatów.
Pokazane są one odpowiednio w tablicach 4.31 oraz 4.32. Odpowiadające im tablice trójkątne, pokazane w tablicach 4.33 i 4.34, wykazują, że automatów tych nie można zminimalizować.
Tablica 4.31
Tablica 4.32
Tablica 4.33
Tablica 4.34
4. Układy z pamięciami
Układy z pamięciami
4.1. Informacje ogólne
Omawiane w rozdz. 3 metody syntezy układów kombinacyjnych jak najbardziej uwzględniały aktualne tendencje realizacji układów cyfrowych w strukturach z pamięciami ROM. W szczególności redukcja argumentów oraz dekompozycja funkcjonalna mogą być uznane za skuteczne metody syntezy umożliwiające realizacje funkcji boolowskich na pamięciach ROM z ograniczoną liczba wejść adresowych. Nietrudno przewidzieć, iż w przypadku układów sekwencyjnych liczba zmiennych wejściowych n (rys. 4.14)
Rys. 4.14. Realizacja układu sekwencyjnego z użyciem pamięci ROM
Rys. 4.15. Realizacja układu sekwencyjnego z wykorzystaniem układu modyfikacji adresu
oraz zmiennych wewnętrznych p układu sekwencyjnego niejednokrotnie przekroczy liczbę zmiennych adresowych pamięci ROM przeznaczonej do realizacji tego układu. Stąd wynika potrzeba opracowania metody umożliwiającej zmniejszenie wymiaru pamięci ROM za pośrednictwem Układu Modyfikacji Adresu (rys. 4.15).
Taka realizacja może być traktowana jako dekompozycja bloku pamięciowego z rys. 4.14 na dwa bloki: kombinacyjny układ modyfikacji adresu oraz blok pamięci o mniejszym rozmiarze, niż wymagany przy realizacji w strukturze z rys. 4.15. Dzięki tej metodzie układy sekwencyjne, które wymagałyby zbyt dużej pojemności pamięci ROM, a tym samym nie mogłyby być realizowane przy użyciu architektury FPGA z pamięciami o ograniczonej pojemności, mogą zostać zaimplementowane przy użyciu mniejszej pamięci.
Z punktu widzenia układów FPGA jest to metoda korzystna o tyle, że blok modyfikacji adresu może być realizowany przez komórki typu LUT lub matrycę PAL, a blok pamięci – w matrycach wbudowanych typu EAB.
4.2. Modyfikacja adresu
Niech A = áV, S, δ, lñ będzie automatem (zupełnym lub niezupełnym), gdzie: V – zbiór liter wejściowych, S – zbiór stanów wewnętrznych, d – funkcję przejść, a l – funkcja wyjść. Przyporządkujmy (w sposób wzajemnie jednoznaczny) elementowi (v, s) z dziedziny funkcji przejść automatu liczbę naturalną ze zbioru K = {1, …, <i>t </i>= </span><span style="line-height:150%"><span style="font-family:Symbol">ú</span></span><i><span style="line-height:150%">D</span></i><sub><span style="line-height:150%"><span style="font-family:Symbol">d</span></span></sub><span style="line-height:150%"><span style="font-family:Symbol">ú</span></span><span style="line-height:150%">}. Oznaczmy odwzorowanie Dd ® K przez K i określmy na zbiorze K podział charakterystyczny Pc w następujący sposób: do jednego bloku B podziału Pc zaliczamy te elementy z K, będące obrazami (przy odwzorowaniu K) takich par (v, s) z Dd, którym funkcja przejść d przyporządkowuje taki sam stan s' z S.
Na przykład dla automatu o tablicy przejść podanej w tablicy 4.35a i odwzorowania K podanego w tablicy 4.35b podział Pc ma następującą postać:
Tablica 4.35
Niech P = {<i>P</i><sub>1</sub>, …, <i>P<sub>w</sub></i>} będzie zbiorem dwublokowych podziałów na K, gdzie w spełnia nierówność:
élog2úSúù £ w < élog2úSúù + élog2úVúù
Oznaczmy przez (B1, …, Bi, …, Bt) bloki iloczynu podziałów P1 × P2 ×…× Pw . Ustalonej komórce pamięci (rys. 4.15) odpowiada zawsze jej adres w UMA – wektor (a1, …, aw), który tu będzie wyznaczany w sposób następujący: i-ta składowa wektora (a1, …, aw) odpowiadająca elementom k ze zbioru Bi jest 0, jeśli Bi należy do pierwszego bloku podziału Pi, natomiast 1 – jeśli Bi należy do drugiego bloku podziału Pi.
Zgodnie ze schematem z rys. 4.15 ustalonej komórce pamięci są przyporządkowane tylko takie elementy z K, którym odpowiadają pary (v, s) o tej samej wartości funkcji przejść d automatu. W związku z tym adresy komórek spełniających powyższy warunek wyznaczymy za pomocą podziałów ze zbioru P wtedy i tylko wtedy, gdy:
P = P1 × P2 ×…× Pi ×…× Pw £ Pc
przy czym liczba zajętych komórek (liczba słów) pamięci ROM będzie 2w ´ p, gdzie p = élog2÷S÷ù.
Poszczególnym podziałom Pi na K, spełniającym powyższy warunek, odpowiadają tym samym zmienne adresowe a1, …, aw , wytwarzane w układzie adresowania UMA. Przy ustalonym kodowaniu stanów wewnętrznych i liter wejściowych automatu, zmienne te są określonymi funkcjami zmiennych wewnętrznych q i zewnętrznych x tego automatu, a ustalenie podziałów Pi na K zapewniających najprostszy – przy danym w – układ adresowania nie sprawia trudności. Istotną rolę w syntezie układu UMA będzie spełniać pojęcie zgodności podziałów na zbiorze K z podziałami na zbiorze stanów S lub zbiorze wejść automatu A = áV, S, d, lñ.
Podział P na zbiorze K nazywamy zgodnym z podziałem p na zbiorze S wtedy i tylko wtedy, gdy dla dowolnych wejść va, vb warunek, że si i sj należą do jednego bloku podziału p implikuje warunek, że elementy z K przyporządkowane odpowiednio parom (va, si) oraz (vb, sj) należą do jednego bloku podziału P.
Podział P na K nazywamy zgodnym z podziałem q na V wtedy i tylko wtedy, gdy dla dowolnych stanów sa, sb warunek, że vi, vj należą do jednego bloku podziału q implikuje warunek, że elementy z K przyporządkowane parom (vi, sa) oraz (vj, sb) należą do jednego bloku podziału P. W szczególności podział P na zbiorze K może być zgodny ze zbiorem {</span><span style="line-height:150%"><span style="font-family:Symbol">p, q</span></span><span style="line-height:150%">}, jeśli jest zgodny zarówno z podziałem p, jak też q. Natomiast podział P będziemy nazywać zgodnym ze zbiorem {p<sub>1</sub>,</span></span><span style="line-height:150%"> …</span><span style="line-height:150%"><span style="font-family:Symbol">,</span></span> <span style="line-height:150%"><span style="font-family:Symbol">p<sub>a</sub>} podziałów na S ({</span><span style="line-height:150%"><span style="font-family:Symbol">q</span></span><sub><span style="line-height:150%">1</span></sub><span style="line-height:150%">, …, </span><span style="line-height:150%"><span style="font-family:Symbol">q<sub>b</sub></span></span><span style="line-height:150%">} podziałów na V) wtedy i tylko wtedy, gdy P jest zgodny z podziałem p: p = p1 × p2 ×…× pa (gdy P jest zgodny z podziałem q: q = q1 × q2 ×…× qb).
Na przykład dla automatu o tablicy przejść podanej w tablicy 4.35a i funkcji K podanej w tablicy 4.35b podział:
jest zgodny z podziałem natomiast:
jest zgodny ze zbiorem podziałów {</span></span></span></span><span style="font-size:12.0pt"><span style="line-height:115%"><span style="font-family:Symbol"><span style="color:black">p, q</span></span></span></span><span style="font-size:12.0pt"><span style="line-height:115%"><span style="font-family:"Calibri",sans-serif"><span style="color:black">}: ,
Obecnie przedstawimy metodę selekcji podziałów na K umożliwiającą uproszczenie układu adresowania pamięci dla układu o schemacie blokowym pokazanym na rys. 4.15, w którym w (liczba zmiennych adresowych) spełnia warunek:
élog2úSúù £ w < élog2úSúù + élog2úVúù
Punktem wyjścia rozważań będzie zakodowana tablica przejść automatu A = áV, S, d, lñ, gdzie élog2úSúù = p, élog2úVúù = n. Załóżmy, że podziały kodujące stany wewnętrzne są p1, …, pp, natomiast podziały kodujące wejścia są q1, …, qn. Dla każdego podziału p i każdego podziału q znajdujemy zgodny z nimi podział P. W celu zapewnienia jednoznaczności kodowania zmiennych adresowych a1, …, aw i jednocześnie odpowiedniego przyporządkowania elementów ze zbioru K – przy ustalonej funkcji K –poszczególnym komórkom pamięci, należy utworzyć w podziałów P na zbiorze K takich, że:
P1 × P2 ×…× Pw £ Pc
gdzie Pc jest podziałem charakterystycznym automatu A.
Proces generacji podziałów P ułatwia pojęcie r-przydatności podziału (zbioru podziałów) P względem podziału Pc (porównaj rozdz. 3). Zauważmy bowiem, że warunek 4-1 mogą spełniać wyłącznie takie podziały P, które są r-przydatne względem Pc, gdzie r £ w.
Wszystkich podziałów P, zgodnych z podziałami p oraz q ustalonymi przez kodowanie automatu A, jest n + p. Oznaczmy je przez Pz = {<i>P</i><sub>1</sub>, …, <i>P<sub>n</sub></i></span><sub><span style="line-height:150%"><span style="font-family:Symbol">+</span></span></sub><i><sub><span style="line-height:150%">p</span></sub></i><span style="line-height:150%">}. Sytuacja optymalna będzie więc wtedy, gdy w zbiorze Pz istnieje w-przydatny (względem Pc) podzbiór. W tym przypadku każda zmienna adresowa a będzie funkcją jednej zmiennej – wewnętrznej q albo zewnętrznej x – automatu A. Jeśli ze zbioru Pz nie można wyselekcjonować w-elementowego podzbioru w-przydatnego względem Pc, to do dalszych obliczeń należy wybrać u-przydatny (względem Pc) podzbiór , gdzie u = max. Pozostałe w – u podziały należy dobrać tak, aby:
Oczywiście podziały nie należą do zbioru Pz. Odpowiednia realizacja automatu jest przedstawiona na rys. 4.16. W układzie z tego rysunku wejścia adresowe a1, …, au są funkcjami jednej zmiennej wewnętrznej q albo zewnętrznej x automatu, natomiast wejścia au+1, …, aw są funkcjami, których argumenty należą do zbioru {<i>q</i><sub>1</sub>, …, <i>q<sub>p</sub></i>, <i>x</i><sub>1</sub>, …, <i>x<sub>n</sub></i>}.
Przyjmijmy, że strukturę układu UMA będziemy określać układem liczb (b1, …, bi, …, bw), gdzie bi jest liczbą argumentów zmiennej adresowej ai.
Rys. 4.16. Realizacja automatu wg warunku 4-1
Dla schematu automatu z rys. 4.16 mamy więc (b1, …, bu, bu+1, …, bw), przy czym bj = 1 dla 1 £ j £ u oraz 1 < bj £ m+p dla u < j £ w. Przy ustalonym kodowaniu stanów wewnętrznych i liter wejściowych automatu, najprostszą strukturę UMA (dla danego w oraz u = max) uzyskamy wtedy, gdy zmienne adresowe będą dobrane tak, że:
Z powyższych rozważań wynika, że największy wpływ na stopień skomplikowania układu adresowania ma ta jego część, w której zmienne adresowe są zależne od więcej niż jednego argumentu. Dlatego też najistotniejszy jest taki dobór kodowań stanów wewnętrznych i liter wejściowych automatu, przy którym można uzyskać maksymalny zbiór podziałów P (zgodnych z p albo q) w-przydatny względem Pc Do kodowania należy więc wybierać takie podziały, których r-przydatność względem Pc jest równa co najwyżej w. Kodowania te będziemy generowali korzystając z faktu, że r-przydatność podziału P zgodnego z podziałem p = (B1, …, Bi, …, Ba) jest równa:
gdzie: Bi – blok podziału p, – globalna funkcja przejść, a symbol oznacza liczbę elementów w najliczniejszym zbiorze . Analogiczne zależności można wyprowadzić dla podziałów P zgodnych z q, jak też zgodnych z {</span><span style="line-height:150%"><span style="font-family:Symbol">p, q</span></span><span style="line-height:150%">}.
Z powyższego wynika, że na zbiorze K ponumerowanych komórek pamięci sposób postępowania jest analogiczny do dekompozycji funkcji boolowskiej i polega na wykonaniu następujących czynności:
1. Wybór zbioru U (wstępne kodowanie)
2. Określenie podziałów:
P(U), Pg = P(V)
3. Wyznaczenie podziału Pg ³ Pg
P(U) · Pg £ PF
(czasami istnieje potrzeba wprowadzenia zbioru W)
4. Obliczenie funkcji G reprezentującej układ modyfikacji adresu oraz funkcji H reprezentującej adresowanie pamięci ROM.
5. Przykłady syntezy
Omówione w dalszej części przykłady pozwalają stwierdzić, że proces kodowania stanów wewnętrznych automatu dla realizacji na pamięciach znakomicie się upraszcza i głównie polega na wyznaczaniu kodowania wstępnego. Wyznaczanie kodowania wstępnego z reguły sprowadza się do odpowiedniego podziału tablicy przejść automatu. N przykład dla automatu z tablicy 4.41a kodowanie wstępne uzyskamy dzieląc tę tablica na 4 podtablice w sposób pokazany w tab. 4.41b.
Tablica 4.41
a) |
|
|
|
|
|
b) |
|
|
|
|
x1x2 |
00 |
01 |
11 |
10 |
|
x1x2 |
00 |
01 |
11 |
10 |
a |
e |
– |
c |
– |
|
a |
e |
– |
c |
– |
b |
e |
a |
f |
f |
|
b |
e |
a |
f |
f |
c |
– |
e |
c |
f |
|
c |
– |
e |
c |
f |
d |
a |
a |
– |
c |
|
d |
a |
a |
– |
c |
e |
a |
d |
b |
b |
|
e |
a |
d |
b |
b |
f |
d |
a |
c |
c |
|
f |
d |
a |
c |
c |
Zapewni to realizację tego automatu na pamięci o trzech wejściach adresowych, ze zbiorem wejść bezpośrednich U ={q1,x1} i zbiorem wejść do UMA, V={q2,q3,x2}. Oczywiście nie można być pewnym, że możliwa będzie dekompozycja rozłączna i być może dla spełnienia warunku dekompozycji trzeba będzie powiększyć liczbę wejść do UMA.
Jeszcze inna sytuacja może się zdarzyć, gdy dla uzyskania właściwego podziału tablicy przejść na podtablice trzeba dokonać odpowiedniej permutacji wierszy tej tablicy. Z sytuacją taką mamy do czynienia w automacie o tablicy przejść podanej w tab. 4.42a. W tym przypadku odpowiednia permutacja oraz podział na podtablice powinny być takie jak w tab. 4.42b.
Tablica 4.42
a) |
|
|
|
|
|
|
b) |
|
|
|
|
|
|
000 |
001 |
110 |
111 |
010 |
|
|
000 |
001 |
110 |
111 |
010 |
|
v1 |
v2 |
v3 |
v4 |
v5 |
|
|
v1 |
v2 |
v3 |
v4 |
v5 |
a |
a |
b |
e |
e |
c |
|
b |
c |
b |
b |
a |
b |
b |
c |
b |
b |
a |
b |
|
e |
b |
c |
b |
– |
– |
c |
a |
a |
c |
– |
b |
|
a |
a |
b |
e |
e |
c |
d |
c |
e |
e |
d |
e |
|
c |
a |
a |
c |
– |
b |
e |
b |
c |
b |
– |
– |
|
d |
c |
e |
e |
d |
e |
Mogą być również takie automaty, w których struktura układu sekwencyjnego jest niezależna od kodowania stanów wewnętrznych. Sytuację taką omawiamy w poniższych przykładach.
5.1. Przykład 1
Metoda syntezy układu sekwencyjnego w strukturze z rys. 4.16 zostanie omówiona na przykładzie automatu z tab. 4.35, którą dla dalszych obliczeń zapisujemy po odpowiedniej permutacji wierszy, tak jak to pokazano w tabl. 4.36 a i b.
Tablica 4.36
W automacie tym niezbędna liczba wejść adresowych pamięci jest 5. Aby zrealizować ten automat z wykorzystaniem pamięci o 4 wejściach adresowych należy zaprojektować odpowiedni układ modyfikacji adresu. W tym celu dzieli się tablicę przejść-wyjść (stany następne ponumerowano liczbami naturalnymi – tablica 4.36b) na 8 części w taki sposób, aby każda z nich zawierała co najwyżej dwa różne stany następne. Oczywiście podział tablicy przejść na podtablice jest określony przez kodowanie stanów wewnętrznych i liter wejściowych automatu. Dla automatu z tab. 4.36a są to podziały na zbiorze stanów automatu oraz θ na zbiorze liter wejściowych, ale w tym przypadku θ jest podziałem zerowym.
Dla U = {x1, x2, q1}, V = {q2, q3} podziały te wyznaczają zgodne z nimi podziały na zbiorze ponumerowanych komórek pamięci (wg tab. 4.36b).
Zgodnie z metodą dekompozycji szeregowej należy teraz wyznaczyć odpowiedni podział PG, który dla zapewnienia warunku: P(U) × PG £ PC musi oddzielać elementy 1 od 6; 3,7 od 4 itp. – jak to wynika z podziału ilorazowego P(U)|PC. Łatwo sprawdzić, że jest to niemożliwe, gdyż odpowiedni podział PG miałby w swoim pierwszym bloku B1 dwa pierwsze bloki P(V), a w drugim – B2 – dwa ostatnie bloki P(V), czyli
Tym samym po oddzieleniu 1 od 6 nie można spełnić warunku na oddzielenie elementów 3,7 od 4. Dlatego powiększamy zbiór B dodając do niego argument x1. Zmienna x1 oddziela elementy 1,2 od 3 (tab. 4.36b), tym samym element 3 będzie można przenieść do drugiego bloku podziału PG.
Zatem:
V ’ = {<i>x</i><sub>1</sub>, <i>q</i><sub>2</sub>, <i>q</i><sub>3</sub>}
W tej sytuacji
Tablica prawdy funkcji g reprezentującej UMA jest podana w tablicy 4.37, a tablica określająca zawartość pamięci – w tablicy 4.38.
Tablica 4.37
Z tablicy 4.37 wyznaczamy . Schemat realizacji automatu pokazano na rysunku 4.17.
Rys. 4.17. Schemat logiczny realizacji automatu z przykładu 4.5
Tablica 4.38
Ten sam automat można również zrealizować w strukturze pokazanej na rys. 4.18. W strukturze tej wejściami bezpośrednimi są tylko zmienne wewnętrzne zbioru U = {<i>q</i><sub>1</sub>, <i>q</i><sub>2</sub>}, czyli V = {<i>x</i><sub>1</sub>, <i>x</i><sub>2</sub>, <i>q</i><sub>3</sub>}. Taką realizację uzyskamy przy podziale tablicy przejść (tab. 4.35) automatu na 4 części, z których każda zawierać będzie nie więcej niż 4 stany następne. Jedną z możliwości takiego podziału pokazano w tablicy 4.39a.
Tablica 4.39
Rys. 4.18. Schemat logiczny innej realizacji automatu z przykładu 4.5
Z kolei w tablicy 4.39b dokonano numeracji zajętych kratek tablicy przejść (są to jednocześnie abstrakcyjne adresy komórek pamięci ROM) oraz wprowadzono kodowanie: wstępne dla zmiennych q1, q2 i wtórne dla zmiennej q3. Na tej podstawie wyznaczamy podziały P(U), P(U)|PC oraz P(V):
Bloki P(V) są elementami kratek należących do wierszy S1, S3 albo S2, S4, S5 i kolumn x1x2 kodowanych 00, 01, 11, 10. Na przykład blok z elementami 1,6 należy do wierszy S1, S3 i kolumny x1x2 = 00, natomiast blok 10,13 należy do wierszy S2, S4, S5 i tej samej kolumny x1x2 = 00. Z bloków podziału P(V) konstruujemy podział PG:
Korzystamy przy tym z warunków „rozdziału” zapisanych w podziale ilorazowym P(U)|PC. Sposób tej konstrukcji jest pokazany w tablicy 4.40.
Tablica 4.40
Oczywiście, w celu obliczenia tablicy prawdy (co pomijamy) dla funkcji g1, g2 modyfikujących adres należy zakodować bloki podziału PG. Wystarczy przyjąć dla pierwszego bloku kod 00, a dla następnych kolejno 01, 10, 11. Wtedy poszczególne wiersze tej tablicy będą wyznaczane przez bloki podziałów P(U) i PG. Na przykład blok determinuje wektor x1, x2, q = 000, któremu odpowiadają wyjścia g1g2 = 00. Dalej analogicznie. Natomiast do obliczenia tablicy adresowania pamięci ROM trzeba obliczyć iloczyn P(U) × PG:
Bloki tego iloczynu determinują rzeczywiste adresy i zawartość komórek pamięci ROM. Na przykład, abstrakcyjnemu adresowi, reprezentowanemu przez blok odpowiada adres rzeczywisty q1q2g1g2 = 0000. W komórce ROM o tym adresie musi być zapisany kod stanu S1, czyli q1q2q3 = 000. Podobnie, dla trzeciego bloku mamy adres q1q2g1g2 = 0001 oraz zawartość jako kod stanu S4, czyli 111.
5.2. Przykład 2
Automat z tablicy 4.43 zrealizować w strukturze UMA/ROM, stosując ROM o możliwie najmniejszej pojemności. W rozwiązaniu podać wyrażenie boolowskie funkcji modyfikującej adres oraz zawartość ROM.
Tablica 4.43
|
v1 |
v2 |
v3 |
v4 |
v5 |
a |
d |
– |
c |
c |
d |
b |
b |
b |
– |
a |
– |
c |
a |
d |
d |
d |
– |
d |
– |
c |
b |
– |
b |
Dla danego automatu należy wstępnie przyjąć
U = {</span></span></span></span><i><span lang="DE" style="font-size:12.0pt"><span style="line-height:115%"><span style="font-family:"Calibri",sans-serif"><span style="color:black">q</span></span></span></span></i><sub><span lang="DE" style="font-size:12.0pt"><span style="line-height:115%"><span style="font-family:"Calibri",sans-serif"><span style="color:black">1</span></span></span></span></sub><span lang="DE" style="font-size:12.0pt"><span style="line-height:115%"><span style="font-family:"Calibri",sans-serif"><span style="color:black">,<i>q</i><sub>2</sub></span></span></span></span><span style="font-size:12.0pt"><span style="line-height:115%"><span style="font-family:"Calibri",sans-serif"><span style="color:black">} V= {</span></span></span></span><span style="font-size:12.0pt"><span style="line-height:115%"><span style="font-family:"Calibri",sans-serif"><span style="color:black"> <i>x</i><sub>1</sub>,<i>x</i><sub>2,</sub><i>x</i><sub>3</sub></span></span></span></span><span style="font-size:12.0pt"><span style="line-height:115%"><span style="font-family:"Calibri",sans-serif"><span style="color:black">}
co spowoduje ponumerowanie komórek pamięci, jak w tab. 4.44 i schemat dekompozycji, jak na rys. 4.19.
Tablica 4.44
Rys. 4.19. Schemat dekompozycji do przykładu 4.6
Podział PG tworzymy z bloków P(V):
Konflikty wymagają rozdzielenia elementów 6, 12 od 9 oraz 4 od 14, co można uzyskać za pośrednictwem zmiennej q2. Dlatego dla dekompozycji nierozłącznej wybieramy q2 i liczymy podział P(q2):
co ułatwia obliczenie P(V’):
Z bloków P(V’) łatwo można utworzyć P’G:
Na tej podstawie możemy wyznaczyć tablice prawdy bloków układu modyfikacji (tab. 4.45 dla G) oraz układu adresowania pamięci ROM (tab. 4.46 dla H), zgodnie z rys. 4.19.
Tablica 4.45.
|
q2x1x2x3 |
g |
1,8 |
0000 |
0 |
4 |
0100 |
0 |
5 |
1000 |
0 |
6,12 2,10 3,11 7 9 13 14 |
1001 0010 0011 1011 0001 1010 1100 |
0 1 1 1 1 1 1 |
Tablica 4.46.
|
q1 q2g |
Stan |
1,4 |
000 |
d |
2,3 |
001 |
c |
5,6 |
010 |
b |
7 |
011 |
a |
8 |
100 |
a |
9,10,11 |
101 |
a |
12 |
110 |
c |
13,14 |
111 |
b |
6. Zadania
Zadania do samodzielnego rozwiązania:
Zrealizować na przerzutnikach typu D oraz JK automaty z przykładów 4.1 oraz 4.2.
Zminimalizować i zrealizować na przerzutnikach typu D oraz JK automat podany w tablicy 4.47.
Tablica 4.48
S\x |
0 |
1 |
0 |
1 |
1 |
1 |
7 |
0 |
0 |
2 |
4 |
3 |
1 |
1 |
3 |
– |
5 |
– |
0 |
4 |
– |
2 |
– |
0 |
5 |
4 |
– |
1 |
– |
6 |
8 |
– |
1 |
– |
7 |
– |
6 |
– |
0 |
8 |
– |
– |
– |
1 |
Automat o tablicy przejść podanej w tabl. 4.48 zrealizować na pamięci ROM o 4 wejściach adresowych i najprostszym bloku UMA. W rozwiązaniu podać wyrażenie boolowskie dla UMA. Przyjąć oznaczenia wejść jako: x1, x2.
Tablica 4.47
|
v1 |
v2 |
v3 |
v4 |
a |
– |
c |
d |
a |
b |
b |
c |
a |
– |
c |
c |
– |
a |
b |
d |
– |
d |
a |
b |
e |
c |
– |
– |
a |