TC Moduł 10

From Studia Informatyczne

Enlarge
Układy cyfrowe cz. 1

Enlarge
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.

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

Enlarge
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.

Enlarge
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\,.

Enlarge
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.


Enlarge
Multiplekser to funkcjonalny blok kombinacyjny, w którym jest N\, wejść informacyjnych (N=2^n\,), n\, wejść adresowych a_{n-1},...,a_0\,, wyjście y\, oraz wejście zezwolenia e\, (enable). Multiplekser (MUX) realizuje funkcję y\, opisaną wyrażeniem boolowskim:
y=e\sum_{k=0}^{N-1} P_k(A)d_k ,

gdzie P_k(A)\, oznacza pełny iloczyn zmiennych a_{n-1},...,a_0\,, prostych lub zanegowanych, zgodnie z reprezentacją binarną liczby k\,.


Enlarge
Zakładając, że e = 1 dla n = 1 (tak zwany MUX 2 : 1) mamy:
y=\overline{a}d_0+ad_1

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.


Enlarge
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.

Enlarge
Demultiplekser to układ kombinacyjny o jednym wejściu informacyjnym d\,, n\, wejściach adresowych a_{n-1},...,a_0\,, N\, wyjściach y_0,...,y_{n-1}\, (N=2^n) oraz wejściu zezwalającym e\,. Na wyjściu y_k\, jest realizowana funkcja:
y_k=eP_k(A)d ,

gdzie P_k(A)\, (jak poprzednio) jest pełnym iloczynem zmiennych a_{n-1},...,a_0\,, prostych lub zanegowanych, zgodnie z reprezentacją binarną liczby k\,.


Enlarge
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.

Enlarge
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.

Enlarge
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.

Enlarge
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\,.

Enlarge
W rezultacie działanie tych układów można uogólnić następująco. Multiplekser MUX przesyła na wyjście Y\, wektor X_j\,, 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\,.


Enlarge
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\,.

Enlarge
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 = \sum(1,7,11,13,14,15).


Enlarge
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 = \sum(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.


Enlarge
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 c_n\, sygnałem logicznym 1\,, a wektor (c_n, Y)\, jest prawidłowym wynikiem.

Enlarge
W najprostszej realizacji sumator jest zbudowany z kaskadowo połączonych sumatorów jednobitowych, o wejściach a_i,  b_i, c_i\,, wyjściach y_i\, oraz c_{i+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 c_4\,.

Enlarge
Działanie pojedynczego ogniwa sumatora można opisać funkcjami boolowskimi y_i, c_{i+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.

Enlarge
Sumator może być wykorzystany do realizacji operacji odejmowania Y = A - B. 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.

Enlarge
Wartość dziesiętna A_D\, liczby przedstawionej za pomocą wektora zapisanego w NKB A_{NKB}=\left \langle a_{n-1} ,..., a_j ,..., a_0\right \rangle wynosi:
A_D=L(A_{NKB})=\sum_{j=0}^{n-1} a_j2^j

Za pomocą wektora A\, o długości n\, można przedstawić dziesiętne liczby dodatnie z zakresu 0\le A_D\le 2^n - 1.

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

A_D=L(A_{U2})=-a_{n-1}2^{n-1}+\sum_{j=0}^{n-2} a_j2^j


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

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

A+(B\oplus c_0)+c_0 ,gdzie c_0\in \{0,1\}

Dla c_0=0 mamy Y =  A + B, czyli sumowanie. Dla c_0=1 mamy Y = A+\overline{B}+1; \overline{B}+1 oznacza liczbę -B\, w kodzie U2\,, zatem Y = A - B\,.


Enlarge
Rysunek na planszy przedstawia 4 bitowy sumator przystosowany do wykonywania operacji odejmowania. Przekroczenie zakresu wykonywanego działania jest sygnalizowane sygnałem nadmiaru OVR (overflow): OVR = c_n\oplus c_{n–1}

Enlarge
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 Y_r\,, Y_w\, lub Y_m\,, określa odpowiednio sytuację gdy: A=B, A>B, A<B.

Enlarge
Przeanalizujmy przedstawiony na rysunku komparator 4-bitowy, gdzie: A=a_3a_2a_1a_0 , B=b_3b_2b_1b_0 , a ponadto:
Y_r=1 tylko wtedy, gdy A=B ,
Y_m=1 tylko wtedy, gdy A<B ,
Y_w=1 tylko wtedy, gdy A>B ,

Oznaczając i_k=\overline{a_k\oplus b_k} poszczególne wyjścia komparatora można opisać zależnościami:

Y_r=i_3i_2i_1i_0
Y_w=a_3\overline{b}_3+i_3a_2\overline{b}_2+i_3i_2a_1\overline{b}_1+i_3i_2i_1a_0\overline{b}_0
Y_m=\overline{Y_r+Y_w}