TC Moduł 10

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

Omawiane do tej pory układy logiczne to inaczej mówiąc układy cyfrowe konstruowane z bramek i przerzutników. I w zasadzie można z nich zaprojektować i zbudować dowolny układ cyfrowy. Problem jednak leży w tym, że takie postępowanie byłoby bardzo skomplikowane. Dlatego z podstawowych układów logicznych buduje się najpierw tzw. bloki funkcjonalne, a dopiero z nich konstruuje się bardziej złożone układy cyfrowe jak np.: układy przetwarzania sygnałów, układy sterowania, specjalizowane procesory, układy kryptograficzne.

Wymienione układy znajdują zastosowanie w różnorodnych urządzeniach cyfrowych: telefonia cyfrowa, telewizja cyfrowa, urządzenia multimedialne itp.

Podstawową techniką w projektowaniu układów cyfrowych jest tzw. synteza strukturalna. Jest to metoda budowania „większego” układu z „mniejszych” podukładów, zwanych blokami funkcjonalnymi (BF). W technice układów katalogowych bloki funkcjonalne wykonujące typowe operacje przetwarzania sygnałów cyfrowych były produkowane w postaci modułów scalonych średniej i wielkiej skali integracji. Powszechnie stosowana seria układów scalonych TTL (tzw. seria 74) obejmowała takie układy jak: multipleksery, liczniki, rejestry itp. Układom tym nadawano specyficzne, katalogowe oznaczenia np. 74151 dla multipleksera, 74163 dla licznika itp. Obecnie większość tych układów wchodzi w skład elementów bibliotecznych systemów projektowania układów cyfrowych w postaci tzw. komponentów lub makrobloków.

Blok funkcjonalny to specjalizowany układ cyfrowy przystosowany do wykonania jednej lub kilku określonych operacji przetwarzania sygnałów binarnych. Operacje te w odniesieniu do monolitycznego lub wyodrębnionego bloku funkcjonalnego nazywane są mikrooperacjami. Blok funkcjonalny realizuje wybraną mikrooperację w wyniku zadania odpowiedniego wektora zmiennych wejściowych, zwanych zmiennymi sterującymi. Dla ustalonej mikrooperacji słowo wejściowe X zostanie przetworzone w słowo wyjściowe Y i ewentualnie informacja o stanie tego przetwarzania będzie przekazana na zewnątrz za pośrednictwem sygnałów na wyjściach predykatowych. Dodatkowo sekwencyjny blok funkcjonalny jest wyposażony w wejście synchronizujące (zegarowe) clk.

Najogólniejsza klasyfikacja bloków funkcjonalnych uwzględnia bloki kombinacyjne oraz sekwencyjne. Typowe bloki funkcjonalne kombinacyjne to multipleksery, demultipleksery, dekodery, sumatory, komparatory. Typowe bloki sekwencyjne to rejestry i liczniki.

Warto podkreślić, że pojęcie bloku funkcjonalnego, jak też ich klasyfikacja uległo pewnej modyfikacji i powinno być rozumiane ogólniej niż to miało miejsce w technice układów katalogowych. Wobec możliwości zaprojektowania i umieszczenia w bibliotece komputerowego systemu projektowania dowolnego układu cyfrowego – bez potrzeby sztywnych ograniczeń jakie były oferowane w realizacjach katalogowych – w dzisiejszej technice BF może być specjalizowanym układem cyfrowym, którego mikrooperacje zarówno pod względem ilości jak też funkcjonalności definiuje sam użytkownik.


Multiplekser to funkcjonalny blok kombinacyjny, w którym jest N wejść informacyjnych (N=2n), n wejść adresowych an1,...,a0, wyjście y oraz wejście zezwolenia e (enable). Multiplekser (MUX) realizuje funkcję y opisaną wyrażeniem boolowskim:
y=ek=0N1Pk(A)dk ,

gdzie Pk(A) oznacza pełny iloczyn zmiennych an1,...,a0, prostych lub zanegowanych, zgodnie z reprezentacją binarną liczby k.


Zakładając, że e=1 dla n=1 (tak zwany MUX 2 : 1) mamy:
y=ad0+ad1

W podobny sposób można wyprowadzić wzory dla n=2 (MUX 4 : 1) oraz dla dla n=3 (MUX 8:1). W szczególności na rysunku podany jest schemat multipleksera o dwóch wejściach adresowych. Warto spostrzec, że wzory określające wyjście y podają jednocześnie w jaki sposób skonstruowany jest multiplekser z bramek logicznych.


Multiplekser pracuje jako przełącznik. Dla multipleksera o dwóch wejściach adresowych (jak na rysunku) oznacza to, że jeśli sygnały na jego wejściach adresowych są odpowiednio 00, to na wyjściu y pojawi się sygnał taki jak na wejściu informacyjnym oznaczonym 0, podobnie dla adresu 01, będzie to sygnał taki jak na wejściu 1, itd.

Demultiplekser to układ kombinacyjny o jednym wejściu informacyjnym d, n wejściach adresowych an1,...,a0, N wyjściach y0,...,yn1 (N=2n) oraz wejściu zezwalającym e. Na wyjściu yk jest realizowana funkcja:
yk=ePk(A)d ,

gdzie Pk(A) (jak poprzednio) jest pełnym iloczynem zmiennych an1,...,a0, prostych lub zanegowanych, zgodnie z reprezentacją binarną liczby k.


Demultiplekser też pracuje jako przełącznik, ale jego działanie jest przeciwne do działania multipleksera. W tym przypadku sygnał podany na wejście (informacyjne jest „rozprowadzany” na różne wyjścia. Dla DMUX z rysunku na planszy przy adresie równym 00, sygnał 1 pojawi się na wyjściu oznaczonym 0, (a na pozostałych wyjściach wartość logiczna sygnału będzie 0), przy adresie równym 01, 1 logiczna pojawi się na wyjściu ozn. 1. itd.

Liczba wejść informacyjnych multipleksera (również demultipleksera) rośnie wykładniczo. Z tych powodów nie realizuje się bezpośrednio multiplekserów o dużej liczbie wejść adresowych (np. większej od czterech), a raczej „składa” się je z mniejszych multiplekserów. Przykład takiego kaskadowego połączenia jest pokazany na rysunku.

Szczególnym przypadkiem demultipleksera jest dekoder, w którym przyjmuje się, że do wejścia d zawsze jest dołączony sygnał o wartości logicznej 1. Dlatego wyjście to nie jest dostępne na zewnątrz układu i w rezultacie symbol graficzny dekodera jest nieco inny.

Najważniejsze zastosowanie multiplekserów i demultiplekserów jest związane z realizacjami bloków komutacyjnych, czyli elementów umożliwiających proste przełączanie sygnałów, najczęściej wielokrotnych (grupowych). Na rysunku pokazano multiplekser (nazywany multiplekserem grupowym), w którym dwa 4-bitowe sygnały A i B mogą być dołączane do szyny Y w zależności od stanu wejścia adresowego a.

W rezultacie działanie tych układów można uogólnić następująco. Multiplekser MUX przesyła na wyjście Y wektor Xj, wybrany za pomocą wektora adresowego (adresu) A.

Demultiplekser DMUX przesyła wektor wejściowy X na wyjście o numerze j wskazanym przez wektor adresowy (adres) A.


Dla MUX z rysunku na planszy jego wyjście jest ciągiem 000, gdyż adres 10 przełącza sygnały z wejść informacyjnych oznaczonych cyfrą 2. Dla DMUX na wyjściu oznaczonym 3 pojawiają się sygnały z wejść informacyjnych, czyli 010.

Multipleksery i demultipleksery/dekodery mogą być stosowane do realizacji funkcji boolowskich. Realizacje takie są szczególnie proste, gdy liczba wejść adresowych multipleksera/demultipleksera jest równa liczbie argumentów funkcji. W takich sytuacjach wystarczy wejścia informacyjne multipleksera reprezentowane wektorami zbioru F dołączyć do stałej 1, a wejścia reprezentujące wektory zbioru R dołączyć do stałej 0.

Na rysunku pokazany jest sposób dołączenia sygnałów logicznych do wejść informacyjnych MUX realizującego funkcję y=(1,7,11,13,14,15).


Natomiast realizacja funkcji f=(F,R) na dekoderze wymaga dołączenia odpowiednich wyjść dekodera do wejść bramki OR, której wyjście bezpośrednio realizuje funkcję f. Na rysunku pokazany jest sposób dołączenia wyjść dekodera do wejść bramki OR w celu realizacji funkcji y=(1,7,11,13,14,15).

Oczywiście w przypadkach, gdy liczba argumentów funkcji jest większa od liczby wejść adresowych multipleksera (demultipleksera) należy zastosować odpowiednią konstrukcję większego multipleksera, wykorzystując do tego celu multiplekser kaskadowy. Nie będzie to jednak realizacja najlepsza ze względu na wykładniczy wzrost liczby potrzebnych modułów multiplekserów.


Operację sumowania arytmetycznego Y=A+B realizuje sumator. Na wyjściu Y sumatora powstaje suma liczb binarnych A i B. Ze zrozumiałych względów suma ta, reprezentowana n-bitowym wektorem Y może być „przekłamana”, gdy zapis jej wartości wymagać będzie n+1 bitów. Sytuacja taka jest sygnalizowana na wyjściu przeniesienia cn sygnałem logicznym 1, a wektor (cn,Y) jest prawidłowym wynikiem.

W najprostszej realizacji sumator jest zbudowany z kaskadowo połączonych sumatorów jednobitowych, o wejściach ai,bi,ci, wyjściach yi oraz ci+1. Dodatkowo na rysunku pokazano działanie sumatora 4 bitowego w przypadku, gdy na jego wejścia podano liczby 9(1001) oraz 7(0111). Wtedy wynik należy odczytywać jako 10000 (czyli 16), gdzie 1 logiczna jest wytworzona na wyjściu przeniesienia c4.

Działanie pojedynczego ogniwa sumatora można opisać funkcjami boolowskimi yi,ci+1 podanymi w tablicy. Po odpowiedniej minimalizacji (na tablicach Karnaugha) i stosownych przekształceniach uzyskuje się wyrażenia boolowskie bezpośrednio opisujące strukturę pojedynczego ogniwa sumatora (często zwanego sumatorem pełnym i oznaczanego FA – Full adder.

Sumator może być wykorzystany do realizacji operacji odejmowania Y=AB. W tym celu wystarczy wejścia B dołączyć do wejść sumatora za pośrednictwem inwertorów, ale najlepiej jest negować poszczególne bity wektora B za pośrednictwem dwuwejściowych bramek EXOR, w sposób pokazany na rysunku. Sposób takiej konstrukcji wynika z zasad działania na liczbach zapisanych w kodzie uzupełnień do dwóch.

Wartość dziesiętna AD liczby przedstawionej za pomocą wektora zapisanego w NKB ANKB=an1,...,aj,...,a0 wynosi:
AD=L(ANKB)=j=0n1aj2j

Za pomocą wektora A o długości n można przedstawić dziesiętne liczby dodatnie z zakresu 0AD2n1.

Kod NKB służy do zapisu całkowitych liczb dodatnich. Zapis zarówno liczb dodatnich, jak i ujemnych umożliwia często stosowany kod U2 (kod uzupełnieniowy do dwóch):

AD=L(AU2)=an12n1+j=0n2aj2j


W kodzie U2 Parser nie mógł rozpoznać (błąd składni): {\displaystyle A_{U2} =\left \langle a_{n–1} ,..., a_j ,..., a_0\right \rangle} , gdzie aj{0,1}. Bit an1 można interpretować jako bit znaku. Jeśli an1=0, to liczba jest dodatnia; jeśli an1=1 to liczba jest ujemna; pozostałe bity stanowią uzupełnienie (różnicę) wartości liczby do najwyższej potęgi liczby 2.

Działanie układu z rys. na planszy można opisać:

A+(Bc0)+c0 ,gdzie c0{0,1}

Dla c0=0 mamy Y=A+B, czyli sumowanie. Dla c0=1 mamy Y=A+B+1; B+1 oznacza liczbę B w kodzie U2, zatem Parser nie mógł rozpoznać (błąd składni): {\displaystyle Y = A – B\,} .


Rysunek na planszy przedstawia 4 bitowy sumator przystosowany do wykonywania operacji odejmowania. Przekroczenie zakresu wykonywanego działania jest sygnalizowane sygnałem nadmiaru OVR (overflow): Parser nie mógł rozpoznać (błąd składni): {\displaystyle OVR = c_n\oplus c_{n–1}}

Komparator umożliwia porównanie dwóch liczb n-bitowych i określenie czy są sobie równe, a także która z liczb jest większa, a która mniejsza. Stan logiczny 1 na wyjściach Yr, Yw lub Ym, określa odpowiednio sytuację gdy: A=B, A>B, A<B.

Przeanalizujmy przedstawiony na rysunku komparator 4-bitowy, gdzie: A=a3a2a1a0 , B=b3b2b1b0 , a ponadto:
Yr=1 tylko wtedy, gdy A=B ,
Ym=1 tylko wtedy, gdy A<B ,
Yw=1 tylko wtedy, gdy A>B ,

Oznaczając ik=akbk poszczególne wyjścia komparatora można opisać zależnościami:

Yr=i3i2i1i0
Yw=a3b3+i3a2b2+i3i2a1b1+i3i2i1a0b0
Ym=Yr+Yw