TC Moduł 11
Układy cyfrowe cz. 2 |
Sekwencyjne bloki funkcjonalne to przede wszystkim rejestry i liczniki. W tak zwanym rejestrze uniwersalnym, oprócz typowych operacji i , występują mikrooperacje przesuwania w prawo (Shift Right) oraz w lewo (Shift Left).
Licznik to rejestr specjalnego typu, dodatkowo wyposażony w mikrooperację zwiększania (zliczania w górę ) lub zmniejszania (zliczania w dół ) jego zawartości. Mikrooperacje te zapisuje się również jako inkrementację lub dekrementację:
|
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 wejścia typu . W rejestrze takim wpisanie () nowej zawartości jest dokonywane przez wejścia synchronicznie z zegarem . Inaczej mówiąc, po podaniu na wejścia -bitowego słowa i po przyjściu ustalonego zbocza sygnału nastąpi zapamiętanie tego słowa w rejestrze, co znaczy, że pojawi się ono na wyjściach . |
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 , a na jego wejście podano szeregowo sekwencję bitów . Z tablicy wynika, że jedynka podana na wejście rejestru (wejście D1 pierwszego przerzutnika) pojawi się na wyjściu przerzutnika 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 , 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 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:
– przesunięcie logiczne słowa w prawo z wpisaniem bitu na zwalnianą pozycję; dla ; – przesunięcie logiczne słowa w lewo z wpisaniem bitu na zwalnianą pozycję; dla .
|
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 (licznik mod ), co oznacza zliczanie w cyklu itd., jest prostym zadaniem syntezy logicznej. Przykładowa, zakodowana tablica przejść-wyjść licznika mod , zliczającego w górę i wyposażonego w wejście zezwalające jest podana w tablicy na planszy. Bezpośrednio z tej tablicy można uzyskać tablice Karnaugha funkcji wzbudzeń dla przerzutników typu . |
Ł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 . Przerzutnik typu można zbudować z przerzutnika w sposób pokazany na rysunku. |
Zastępując każdy przerzutnik licznika z planszy 10 przerzutnikiem typu z bramką uzyskujemy układ, w którym możliwe będzie zrealizowanie dodatkowej mikrooperacji ładowania (). |
Wprowadzając następnie multipleksery między wyjścia bramek a wejścia 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 ma długość a wektor wyjściowy – długość m mówimy, że ma pojemność bitów ( słów -bitowych), przy czym . |
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 oraz sygnały zewnętrzne . 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 reprezentują liczby i jeśli blok BF ma dokonać porównania tych liczb i w zależności od wyniku porównania wykonać operację lub , to do US należy doprowadzić binarny sygnał określający jeden z dwóch „stanów”: lub . Informacjami dotyczącymi pracy US są również binarne sygnały zewnętrzne oraz (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 . Zauważmy, że w 6 kroku algorytmu do liczby binarnej (dziesiętnie ) została dodana liczba (czyli ). Po 8 krokach w rejestrach LDA, LDB ustaliły się liczby oraz , czyli . |
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 . Współpraca układu operacyjnego z odpowiednim układem sterującym jest realizowana za pomocą sygnałów i . 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 następuje porównanie zawartości R2 z liczbą 5. Jeżeli wynik , 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 , po czym zawartość rejestrów R1, R2 i R3 jest przesuwana w lewo o jeden bit (SHL). Po ośmiokrotnym wykonaniu powyższych operacji 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 do kojarzymy z klatkami operacyjnymi. Należy zauważyć, że w stanie 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 , 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 , jako , jako . Przyjmijmy również, że sygnały wyjściowe w poszczególnych klatkach operacyjnych sieci z rysunku są oznaczone , przy czym jest tak zwanym mikrorozkazem pustym. |
Odpowiednia tablica przejść wyjść automatu reprezentującego układ sterujący wynika bezpośrednio z uzyskanego grafu. |