2. Synchroniczne układy sekwencyjne

W synchronicznym układzie sekwencyjnym układ kombi­nacyjny (rys. 4.6) automatu jest układem wielowyjściowym, wytwarzają­cym syg­nały wyjściowe automatu y1, …, ym oraz syg­nały wzbudzające układ pamięciowy q1, …, qk. Wejścia­mi układu kombi­nacyjnego 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 zanego­wanym) 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ą:

 

Q^\prime=D

Q^\prime=\overline{T}Q+T\overline{Q}

 

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 = 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

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

 

Przy projektowaniu układów synchronicznych posłu­gujemy 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 prze­rzutnika jest istotne o tyle, że wyznacza on momenty zmiany stanu bieżącego Q. Zmiany te mogą nastąpić tylko w chwilach sygnali­zowanych przez ustalone zbocze sygnału zega­rowego (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 = 01, C = 11. Przyjęcie kodowania determinuje jednocześnie liczbę przerzutników układu sekwencyjnego. Oznaczając przerzutniki Q1, Q0 uzyskujemy zakodowaną tablicę przejść wyjść (tabl. 4.8). Tablicę tę podajemy łącznie z nadmiarowym stanem wewnętrznym. Tak uzyskana tablica posłuży do obliczania funkcji wzbudzeń dla różnych przerzutników. Naszym zadaniem będzie realizacja tego automatu w trzech różnych strukturach: z zasto­sowaniem przerzutników typu D, T oraz JK.

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ń boolow­skich 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:

Q_1^\prime=D_1=\bar{x}Q_1

Q_0^\prime=D_0=\bar{x}

Y=xQ_1

 

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 uzy­skania tablic wzbudzeń dla przerzutników T1 i T0. Transformacji takiej dokonujemy na podstawie tablicy wzbudzeń przerzutnika T. W rezultacie uzys­ku­jemy 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

T_1=\bar{x}{\bar{Q}}_1Q_0+xQ_1

T_0=\bar{x}{\bar{Q}}_0+xQ_0

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:

J_1=\bar{x}Q_0    K_1=x

J_0=\bar{x}           K_0=x

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 sek­wencyjnych 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: S0S1, …, 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 ab, c. Sposób kodowania podany jest w tabl. 4.12b.

Tablica  4.12

 

a)

 

 

 

 

 

b)

 

 

 

 

 

   X
S

a

b

c

Y

 

           x1x2
Q2Q1Q0

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

 

 

Q2Q1Q0

 

 

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ń D2D1, D0.

D_2={\bar{x}}_1{\bar{x}}_2Q_1Q_0+{\bar{x}}_1x_2{\bar{Q}}_2{\bar{Q}}_1{\bar{Q}}_0

D_1={\bar{x}}_1{\bar{x}}_2{\bar{Q}}_1Q_0+{\bar{x}}_1{\bar{x}}_2{Q_1\bar{Q}}_0+{\bar{x}}_1x_2Q_1Q_0+{\bar{x}}_1x_2Q_2

D_0={\bar{x}}_1{\bar{x}}_2{\bar{Q}}_0+{\bar{x}}_1Q_1{\bar{Q}}_0+{\bar{x}}_1x_2Q_2

 

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ń:

J_2={\bar{x}}_1{\bar{x}}_2Q_1Q_0+{\bar{x}}_1x_2{\bar{Q}}_1{\bar{Q}}_0

K_2=1

J_1={\bar{x}}_1{\bar{x}}_2Q_0+{\bar{x}}_1x_2Q_2

K_1={\bar{x}}_2Q_0+x_2{\bar{Q}}_0+x_1

J_0={\bar{x}}_1{\bar{x}}_2{\bar{Q}}_2+{\bar{x}}_1x_2Q_2+{\bar{x}}_1Q_1

K_0=1

 

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