TC Moduł 11

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Układy cyfrowe cz. 2

Sekwencyjne bloki funkcjonalne to przede wszystkim rejestry i liczniki. W tak zwanym rejestrze uniwersalnym, oprócz typowych operacji LOAD i HOLD, występują mikrooperacje przesuwania w prawo SHR (Shift Right) oraz w lewo SHL (Shift Left).

Licznik to rejestr specjalnego typu, dodatkowo wyposażony w mikrooperację zwiększania (zliczania w górę Y:=Y+1) lub zmniejszania (zliczania w dół Y:=Y1) jego zawartości. Mikrooperacje te zapisuje się również jako inkrementację lub dekrementację:

Y:=INC(Y) ,
Y:=DEC(Y) ,

Rejestr to w najprostszym przypadku układ składający się z zespołu przerzutników, z których każdy wykonuje identyczne funkcje. Na rysunku pokazano rejestr zbudowany z czterech przerzutników. Jest on wyposażony w 4 wejścia typu D. W rejestrze takim wpisanie (LOAD) nowej zawartości jest dokonywane przez wejścia Di synchronicznie z zegarem CLK. Inaczej mówiąc, po podaniu na wejścia Di 4-bitowego słowa i po przyjściu ustalonego zbocza sygnału CLK nastąpi zapamiętanie tego słowa w rejestrze, co znaczy, że pojawi się ono na wyjściach Qi.

Ważnym w zastosowaniach jest rejestr, w którym wejścia i wyjścia są połączone kaskadowo. Taki rejestr nazywa się rejestrem przesu¬wającym (shift register). Pracę rejestru przesuwającego można opisać jak w tablicy na planszy. Pokazano w niej sześć kolejnych stanów rejestru dla kolejnych sześciu impulsów zegarowych, przy założeniu, że pierwotnie rejestr znajdował się w stanie 0000, a na jego wejście D1 podano szeregowo sekwencję bitów 010000. Z tablicy wynika, że jedynka podana na wejście rejestru (wejście D1 pierwszego przerzutnika) pojawi się na wyjściu przerzutnika Q4 po czwartym impulsie zegarowym.

Można zbudować układ, w którym czynności wykonywane w rejestrze równoległym (jak na planszy 3) i przesuwającym będą wykonywane w tym samym bloku funkcjonalnym BF, a o ich wyborze będzie decydować wartość sygnału na odpowiednim wejściu sterującym. Konstrukcja takiego rejestru jest możliwa jeśli każdy przerzutnik rejestru zostanie dodatkowo wyposażony w multiplekser.

Dodając przed wejście każdego przerzutnika multiplekser uzyskuje się rejestr szeregowy z wpisem równoległym. W rejestrze tym sygnał wprowadzony na wejście D przerzutnika jest za pośrednictwem multipleksera pobierany bądź to z wejścia równoległego, bądź szeregowego (dla pierwszego ogniwa) lub z wyjścia poprzedzającego przerzutnika. W rezultacie przy sygnale Shift/Load = 0 w układzie jest wykonywana mikrooperacja przesuwania, a przy Shift/Load = 1 jest wykonywany wpis równoległy.

Dalsza rozbudowa prowadzi do koncepcji rejestru uniwersalnego. W rejestrze uniwersalnym, oprócz typowych operacji LOAD i HOLD, występują mikrooperacje przesuwania w prawo oraz w lewo:

SHR(xp,Y) – przesunięcie logiczne słowa Y w prawo z wpisaniem bitu xp na zwalnianą pozycję; yn1:=xp,yi:=yi+1 dla i=n2,,0;

SHL(Y,xl) – przesunięcie logiczne słowa Y w lewo z wpisaniem bitu xl na zwalnianą pozycję; yi:=yi1 dla i=n1,,1,y0:=xl .



Licznik to rejestr specjalnego typu, dodatkowo wyposażony w mikrooperację zliczania. Rysunek na planszy ilustruje pracę licznika o mikrooperacjach: LOAD, HOLD, COUNT.

Zaprojektowanie licznika o pojemności N (licznik mod N), co oznacza zliczanie w cyklu 0,1,...,N1,0,1 itd., jest prostym zadaniem syntezy logicznej. Przykładowa, zakodowana tablica przejść-wyjść licznika mod 16, zliczającego w górę i wyposażonego w wejście zezwalające E jest podana w tablicy na planszy. Bezpośrednio z tej tablicy można uzyskać tablice Karnaugha funkcji wzbudzeń dla przerzutników typu T.

Łatwo sprawdzić, że obliczonym w ten sposób funkcjom wzbudzeń odpowiada schemat logiczny licznika jak na niniejszej planszy. Rozbudowa tego licznika do układu z wpisywaniem równoległym polega na wykorzystaniu spostrzeżenia, że naturalnym układem do wpisywania jest rejestr zbudowany z przerzutników typu D. Przerzutnik typu T można zbudować z przerzutnika D w sposób pokazany na rysunku.

Zastępując każdy przerzutnik T licznika z planszy 10 przerzutnikiem typu D z bramką EXOR uzyskujemy układ, w którym możliwe będzie zrealizowanie dodatkowej mikrooperacji ładowania (LOAD).

Wprowadzając następnie multipleksery między wyjścia bramek EXOR a wejścia D uzyskuje się schemat licznika z wpisywaniem równoległym synchronicznym.

Pamięci stałe typu ROM (Read Only Memory) są układami kombinacyjnymi, w których jest możliwe tylko odczytanie infor¬macji zawartej w strukturze matrycy pamięci. Zapisanie tej informacji odbywa się w procesie technologicznym zwanym programowaniem pamięci.

O pamięci, w której wektor adresowy A ma długość n a wektor wyjściowy Y – długość m mówimy, że ma pojemność N×m bitów (N słów m-bitowych), przy czym N=2n.


Na rysunku przedstawione jest działanie pamięci typu ROM o 3 wejściach adresowych. Sygnały wyjściowe pamięci odpowiadające poszczególnym adresom wyróżniono kolorami.

Układ cyfrowy zbudowany ze specjalizowanych bloków funkcjonalnych, z których każdy wykonuje ustalone mikrooperacje, jest nazywany układem operacyjnym (UO) lub wykonawczym. Ponieważ mikrooperacje te zgodnie z zadanym algorytmem przetwarzania – muszą być wykonywane sekwencyjnie – to do tak skonstruowanego układu należy doprowadzić odpowiednią sekwencję sygnałów sterujących. Sekwencja ta jest ciągiem słów binarnych tzw. mikrorozkazów, które wytwarzane są w wyodrębnionym układzie sterującym US. Jednocześnie informacja o stanie przetwarzania sygnałów wejściowych w wyjściowe jest przekazywana zwrotnie do układu sterującego.

Schemat blokowy systemu cyfrowego zbudowanego z bloków US i UO pokazano na rysunku. Wejściami układu sterującego są sygnały pochodzące z UO – tzw. sygnały predykatowe XP oraz sygnały zewnętrzne XZ. Sygnały predykatowe określają „stan” przetwarzania słów wejściowych w słowa wyjściowe. Przez „stan” przetwarzania należy rozumieć informację przeznaczoną do US, a określającą np. zakończenie procesu przetwarzania w danym bloku funkcjonalnym lub określony wynik tego procesu. Na przykład, jeżeli wektory A,B reprezentują liczby i jeśli blok BF ma dokonać porównania tych liczb i w zależności od wyniku porównania wykonać operację BA lub AB, to do US należy doprowadzić binarny sygnał określający jeden z dwóch „stanów”: AB lub A>B. Informacjami dotyczącymi pracy US są również binarne sygnały zewnętrzne XZ oraz XY (np. sygnały START, ALARM).

Syntezę strukturalną układów cyfrowych omówimy na przykładzie układu do konwersji liczby binarnej na liczbę dziesiętną w kodzie BCD (liczbę dziesiętną z cyframi kodowanymi binarnie). W kodzie BCD (Binary Coded Decimal) każda cyfra liczby zapisanej w kodzie dziesiętnym jest przedstawiana czterobitową liczbą binarną.

Mówiąc poglądowo naszym zadaniem jest zaprojektowanie układu czyli skonstruowanie go z bloków funkcjonalnych. W celu ograniczenia rozmiarów układu założymy, że przetwarzana liczba binarna może być liczbą 8-bitową, ale mniejszą od 100.

Do projektu wykorzystamy algorytm znany pod nazwą „plus 3”. W algorytmie tym liczba przetwarzana binarna jest wprowadzana do 8 bitowego rejestru LB. Liczba w kodzie BCD jest „wytwarzana” w dwóch 4 bitowych rejestrach LDA i LDB. W poszczególnych krokach algorytmu wykonywane są następujące czynności. Sprawdzana jest liczba LDB i jeśli jest ona większa lub równa 5, to zawartość tego rejestru jest zwiększana o 3. W przeciwnym przypadku zawartość LDB nie ulega zmianie. Analogiczne czynności wykonywane są dla rejestru LDA. Po sprawdzeniu zawartość wszystkich rejestrów zostaje przesunięta o 1 bit w lewo. Po 8 sekwencjach sprawdzania i przesuwania w rejestrach LDA (część starsza) i LDB (część młodsza) powstanie liczba w kodzie BCD.

Pracę algorytmu „plus 3” ilustrujemy poglądowo na następującej planszy. Rysunek przedstawia zawartości rejestrów LB, LDB oraz LDA w poszczególnych krokach algorytmu. Do rejestru LB została wprowadzona (binarnie) liczba 27. Zauważmy, że w 6 kroku algorytmu do liczby binarnej 0110 (dziesiętnie 6) została dodana liczba 0011 (czyli 3). Po 8 krokach w rejestrach LDA, LDB ustaliły się liczby 0010 oraz 0111, czyli 27.

Na niniejszej planszy przedstawiamy formalny zapis algorytmu. W poszczególnych klatkach sieci działań zapisujemy odpowiednie czynności (mikrooperacje). Stosujemy do tego celu symboliczne mnemoniki typowych mikrooperacji. Przykładowo: LOAD, SHIFT, DEC.

Zmienne (argumenty) w tym algorytmie to: LB – 8-bitowa liczba binarna, LDA – 4-bitowa starsza część badanej liczby, LDB – 4-bitowa młodsza część badanej liczby, LD = (LDA, LDB) – złożenie liczb LDA i LDB, czyli liczba w kodzie BCD (wynik przetwarzania), LK – zmienna pomocnicza (licznik kroków algorytmu).


Na podstawie formalnego zapisu algorytmu tworzymy schemat blokowy układu operacyjnego (wykonawczego). Jest on zbudowany z rejestrów R1, R2, R3 reprezentujących odpowiednio rejestry LB, LDB oraz LDA, multipleksera MUX, sumatora , komparatora K, licznika kroków LK i rejestru R4. Potrzeba zastosowania takich bloków wynika bezpośrednio z analizy czynności wykonywanych w klatkach sieci działań opisującej pracę algorytmu.

Binarna liczba LB jest ładowana do 8-bitowego rejestru przesuwającego. Pośrednie wyniki przetwarzania (liczby LDA i LDB) są zapamiętywane w dwóch 4-bitowych rejestrach, odpowiednio R3 i R2. Rejestry R3, R2 i R1 połączone są w łańcuch, umożliwiający przesuwanie 16 bitów. Ich pracą sterują 2-bitowe sygnały S3, S2 i S1. W układzie zastosowano 4-bitowy sumator i komparator K. Przełączanie pracy układu na badanie młodszych i starszych czterech bitów odbywa się w multiplekserze MUX. Ostateczny wynik przetwarzania (liczba dwucyfrowa LDA,LDB) jest zapisywany w 8-bitowym rejestrze R4, w którym jest on utrzymywany do czasu przetworzenia następnej liczby.

Licznik kroków algorytmu jest zrealizowany w liczniku LK zliczającym w dół z sygnałem predykatowym, wykrywającym stan licznika równy 0...0. Współpraca układu operacyjnego z odpowiednim układem sterującym jest realizowana za pomocą sygnałów LK=0 i K5. Sygnałami sterującymi dla układu operacyjnego są sygnały S1, S2, S3 sterujące rejestrami, sygnał ładowania LOAD dla licznika i rejestru R4, sygnał DEC dla licznika LK oraz sygnał MUX sterujący multiplekserem.


Tak skonstruowany układ wykonawczy odbiega nieco od pierwotnego schematu z planszy 21. Po starcie (S) następuje załadowanie liczby binarnej LB do rejestru R1 (LOAD1), zerowanie rejestrów R2 i R3 (CLEAR2,3) i załadowanie licznika kroków LK. Dla młodszej czwórki bitów (MUX:=0) następuje porównanie zawartości R2 z liczbą 5. Jeżeli wynik K5, to do rejestru R2 jest zapisywana liczba zwiększona o 3, jeśli nie – to pierwotna liczba. Podobne operacje są wykonywane dla starszej czwórki bitów (MUX:=1), po czym zawartość rejestrów R1, R2 i R3 jest przesuwana w lewo o jeden bit (SHL). Po ośmiokrotnym wykonaniu powyższych operacji (LK=0) czterobitowe wektory z rejestrów R3 i R2 są ładowane do rejestru R4 jako liczba w kodzie BCD.

Na tak skonstruowanej sieci działań jednocześnie dokonujemy numeracji stanów wewnętrznych odpowiedniego układu sterującego. Stany wewnętrzne oznaczone A0 do A7 kojarzymy z klatkami operacyjnymi. Należy zauważyć, że w stanie A0 mimo pozornie braku klatki operacyjnej wykonywana jest czynność „mikrooperacji pustej”.


Na podstawie sieci działań z ponumerowanymi stanami wewnętrznymi układu sterującego przystępujemy do narysowania grafu automatu sterującego. Odpowiedni układ sterujący można zaprojektować jako układ sekwencyjny, który na podstawie sygnałów wejściowych LK=0, K5 oraz S (start) będzie wytwarzał sygnały określające mikrooperacje: LOAD1, CLEAR itp. Dla uproszczenia zapisu można przyjąć, że sygnały wejściowe są oznaczone odpowiednio: S jako x2, K5 jako x1, LK=0 jako x0. Przyjmijmy również, że sygnały wyjściowe w poszczególnych klatkach operacyjnych sieci z rysunku są oznaczone Z0,Z1,...,Z7, przy czym Z0 jest tak zwanym mikrorozkazem pustym.

Odpowiednia tablica przejść wyjść automatu reprezentującego układ sterujący wynika bezpośrednio z uzyskanego grafu.