Podręcznik
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 |