Układy cyfrowe
Transkrypt
Układy cyfrowe
Układy cyfrowe Przełom dwudziestego i dwudziestego pierwszego wieku można śmiało nazwać erą informatyki i mikroprocesorów. Obydwa te obszary zrewolucjonizowały nasze życie. Systemy i układy mikroprocesorowe są wszechobecne, od komputerów począwszy, przez sprzęt powszechnego użytku, motoryzację, do telekomunikacji. Wszystkich dziedzin zresztą wymienić nie sposób. Mikroprocesory są układami cyfrowymi. Kolejną tendencją, którą łatwo zauważyć, jest wypieranie w elektronice, w wielu dziedzinach, techniki analogowej przez technikę cyfrową. Może więc należałoby powiedzieć, że żyjemy w wieku techniki cyfrowej i informatyki (która bez techniki cyfrowej pozostałaby prawdopodobnie teorią). Idea funkcjonowania układów cyfrowych oparta jest na założeniu, ze wszelka formacja i wszelkie wielkości przetwarzane przez te układy reprezentowane są przez dwa stany. Stany te możemy umownie nazywać zerem (0) i jedynką (1) lub stanem niskim (L) i wysokim (H). Należy więc określić, jakie wartości lub zakresy wartości będą oznaczać zero, czyli poziom logiczny niski, a jakie jedynkę, czyli poziom logiczny wysoki. W dużym przybliżeniu można to zrobić, mówiąc na przykład: jest napięcie - jedynka, nie ma napięcia (napięcie zerowe) - zero. W rzeczywistości trzeba oczywiście precyzyjnie określić, jakie zakresy napięć odpowiadają zeru, a jakie jedynce. Określenie poziomów logicznych. Kodowanie informacji Kodowaniem nazywamy przyporządkowanie poszczególnym obiektom zbioru kodowanego odpowiadających im elementów zwanych słowami kodowymi, przy czym każdemu słowu kodowemu musi odpowiadać dokładnie jeden element kodowany. Zgodnie z rysunkiem litera A będzie reprezentowana przez słowo kudowe (w skrócie kod) 111, litera B przez 010, a litera C przez 001 lub 100. Fakt, że literze C odpowiadają dwa słowa kodowe, nie przeszkadza w poprawnym przetwarzaniu informacji, aczkolwiek stanowi pewne utrudnienie procesu kodowania. Sytuacja odwrotna, gdy jedno słowo kodowe odpowiadałoby dwóm literom (na przykład A - 001 i B - 001), byłaby niedopuszczalna. Jeżeli w procesie przetwarzania informacji otrzymalibyśmy jako wynik kod 001, nie bylibyśmy w stanie określić przy dekodowaniu, czy odpowiada on literze A, czy B. Kodem liczbowym nazywamy taki kod, który liczbom dowolnego systemu będzie przyporządkowywał słowa kodowe w postaci zerojedynkowej. Naturalny kod binarny (NKB) Definicja Jeżeli dowolnej liczbie dziesiętnej przyporządkujemy odpowiadającą jej liczbę binarną, to otrzymamy naturalny kod binarny (NKB). Kod prosty BCD Sposób konstruowania słowa kodowego w kodzie prostym BCD jest następujący: 1. Każdej cyfrze dziesiętnej przyporządkowujemy czterocyfrową liczbę dwójkową (zwaną tetradą) w kodzie NKB. 2. Słowo kodowe w kodzie prostym BCD odpowiadające danej liczbie otrzymujemy, zapisując każdą cyfrę tej liczby w postaci czwórki cyfr binarnych. Przykład 67D=01100111BCD Kod ASCII i jego następcy Inny przykład stanowi kod służący do kodowania tekstów i przesyłania ich pomiędzy urządzeniami cyfrowymi. Nosi nazwę kodu ASCII (ang. American Standard Codę for Information Interchange). Koduje oprócz znaków alfanumerycznych tak zwane znaki sterujące, służące do sterowania transmisją i pracą drukarki lub dalekopisu czy też ruchami kursora na ekranie. Do zakodowania liter alfabetu łacińskiego, cyfr arabskich, znaków przestankowych i podstawowych znaków arytmetycznych oraz poleceń sterujących wystarczy 128 pozycji, stąd kod ASCII do kodowania tych obiektów używał 7 bitów (27=128). Dlatego też początkowo ósmy bit był nieużywany lub służył jako bit kontroli parzystości. Później, jako rozwinięcie kodu ASCII, powstał rozszerzony kod ASCII, do którego dołączono tak zwane znaki semigraficzne, czyli proste znaki graficzne pozwalające rysować ramki i inne obiekty. Wykorzystano do tego celu ósmy bit, przy czym dla znaków semigraficznych miał on wartość 1. Kod ASCII jest oczywiście przystosowany do pisowni anglosaskiej. Ponieważ inne narodowości chciały używać w tekstach znaków specyficznych dla danego języka (na przykład znaków diakrytycznych: polskie ś, ć czy niemieckie a, ii), powstał problem narodowych stron kodowych. Próbowano go rozwiązać, zastępując potrzebnymi znakami niektóre znaki semigraficzne, jednak dawało to czasami dość nieoczekiwane efekty na rysunkach. Sytuację komplikował jeszcze fakt istnienia innych alfabetów poza łacińskim (hebrajski, cyrylica, katakana i inne). Przejściowym rozwiązaniem było stosowanie dla tego typu kodów dodatkowego bajtu, jednak nie było wygodne dla programistów (wyjaśnienie tej kwestii i dokładniejszy opis wspomnianego niżej Unikodu zawiera na przykład pozycja [29]). Rozwiązaniem okazało się wprowadzenie tak zwanego Unikodu, kodującego znaki 16 bitami. Daje to możliwość zakodowania 65536 znaków, co jest wystarczające do obdzielenia wszystkich narodów na świecie. Jednocześnie zapewniono kompatybilność Unikodu z kodem ASCII. Ten ostatni jest podzbiorem Unikodu, w którym starszy bajt jest równy zeru. Kodowanie informacji ciągłej Przekształcić możemy informację ciągłą, czyli analogową, na informację cyfrową, w postaci binarnej np. napięcie (będące wielkością wyjściową wielu przetworników, na przykład mikrofonów, termometrów cyfrowych i wielu innych). Informacja analogowa charakteryzuje się tym, że może przybierać wiele wartości, przy czym zmiany pomiędzy tymi wartościami są płynne. Zmiany wielkościanalogowej na wykresie przedstawiamy w postaci ciągłej krzywej. Proces kodowania informacji analogowej, czyli ciągłej, jaką jest przykładowo dźwięk (dźwięk jest zmianą ciśnienia akustycznego rozchodzącą się w powietrzu lub innym materiale), wymaga realizacji kilku etapów. Są to: - próbkowanie, polegające na cyklicznym (inaczej: z określoną częstotliwością) sprawdzaniu wartości przebiegu analogowego i zwykle czasowym zapamiętaniu tej wartości, - kwantyzacja, polegająca na podziale całego obszaru zmienności wielkości analogowej na określoną liczbę przedziałów i stwierdzeniu, w którym przedziale znajduje się dana pobrana próbka, - kodowanie, polegające na przyporządkowaniu każdemu przedziałowi zmienności wielkości analogowej określonej kombinacji zerojedynkowej (zwykle interpretowanej jako numer czy też wartość danego przedziału) i podaniu kodu tego przedziału, w którym znajduje się nasza próbka. Przejście takie realizowane jest przez układ zwany przetwornikiem analogowo-cyfrowym (w skrócie przetwornikiem a/c, ang. ADC - Analog to Digital Converter) Podział układów cyfrowych Układem kombinacyjnym nazywamy taki układ cyfrowy, w którym stan wejść jednoznacznie określa stan wyjść układu. Oznacza to, że aby określić stan na wyjściach takiego układu, nie potrzebujemy żadnej dodatkowej informacji poza stanem wejść i rodzajem układu. Najprostszym przykładem układów kombinacyjnych są bramki. Jedną z cech układów kombinacyjnych jest możliwość przedstawienia ich działania (opisu) w postaci tabeli prawdy. Jest to oczywiste, gdyż tabela prawdy podaje właśnie zależność sygnałów wyjściowych od wejściowych. Inną cechą układów kombinacyjnych jest możliwość ich realizacji przez proste połączenie odpowiedniej liczby i rodzaju bramek bez sprzężeń zwrotnych (czyli prowadzenia sygnałów wstecz, od wyjścia do wejścia). Układem sekwencyjnym nazywamy układ cyfrowy, w którym stan wyjść zależy od stanu wejść oraz od poprzednich stanów układu. Oznacza to, że układy sekwencyjne są układami z pamięcią. Klasycznym przykładem może być tu licznik. Znajomość stanu jego wejścia zliczającego - „pojawił się kolejny impuls do zliczenia" - nie pozwala jeszcze określić, jaka liczba zliczonych impulsów pojawiła się na jego wyjściu. Do określenia tej wielkości potrzebna jest nam znajomość liczby impulsów, które wcześniej zliczył licznik (i którą musiał pamiętać). Najprostszymi układami z pamięcią, czyli najprostszymi układami sekwencyjnymi, są przerzutniki. Cyfrowe układy funkcjonalne Przerzutniki Asynchroniczny przerzutnik RS Symbol przerzutnika RS Tabela dla przerzutnika RS W tabeli Qn oznacza stan na wyjściu przed zmianą sygnałów sterujących, natomiast Qn+1 stan po ich zmianie. Pozioma kreska to tak zwany stan logicznie zabroniony. Interpretacja tabeli jest następująca. Jeżeli na obydwu wejs'ciach układu są zera, nie żądamy od przerzutnika wykonania żadnej operacji i znajduje się on wówczas w stanie pamiętania. Oznacza to, że stan przerzutnika nie zmienia się, czyli że Qn+1 = QN. Gdy podajemy stan 1 na wejście S, żądamy wpisu jedynki i wówczas Qn+1 = 1. Podanie stanu 1 na wejście R oznacza zerowanie przerzutnika, czyli Qn + 1 = 0. Podanie jedynek na obydwa wejścia przerzutnika jest żądaniem operacji niewykonalnej, a mianowicie jednoczesnego wpisu zera i jedynki, co jest sprzecznością (także logiczną). Przerzutnik D typu latch Przerzutnik ten jest przerzutnikiem synchronicznym reagującym na poziom (niski lub wysoki w zależności od rodzaju wejścia zegarowego). Symbol przerzutnika D Tabela dla przerzutnika D Zawartość tabeli oznacza, że jeżeli na wejściu zegarowym jest stan 1 (czas czynny przerzutnika), to gdy na wejściu D mamy stan 1, jest on przepisywany na wyjście (podobnie dla stanu 0). Inaczej mówiąc, w stanie czynnym przerzutnik typu latch powtarza na wyjściu kształt przebiegu z wejścia D. Rejestry Rejestrem nazywamy układ cyfrowy przeznaczony do krótkoterminowego przechowywania niewielkich ilości informacji lub do zamiany postaci informacji z równoległej na szeregową albo odwrotnie. Wejściem cyfrowym równoległym nazywamy takie wejście, które umożliwia wprowadzenie do układu cyfrowego wszystkich bitów słowa w jednym takcie zegarowym. Liczniki Definicja ta wymaga pewnych dodatkowych założeń. Po pierwsze zakładamy, że licznik zawsze zaczyna liczyć od tej samej wartości początkowej, najczęściej od zera. Po drugie, zakładamy, że licznik może zliczyć dowolną liczbę impulsów, co w praktyce nie jest prawdą. Podstawowymi parametrami charakteryzującymi licznik są jego pojemność oraz kod, w którym jest podawana liczba zliczonych impulsów. Pojemność określa maksymalną liczbę impulsów, którą może zliczyć licznik. Po przekroczeniu tej wartości licznik zaczyna zliczanie impulsów od początku. Dekodery i kodery priorytetu Symbol dekodera z przykładową kombinacją sygnałów Działanie dekodera jest proste. Na jednym z jego wyjść pojawia się wyróżniona wartość (może to być 0 lub 1). Na pozostałych wyjściach występują wartości przeciwne do wyróżnionej. O tym, na którym wyjściu pojawi się wartość wyróżniona, decyduje kombinacja sygnałów podawana na wejściu. Kombinacja ta jest zakodowanym numerem wyjścia, na którym wystąpi wyróżniony sygnał. Teoretycznie numer ten może być zakodowany w dowolnym kodzie. Praktycznie w dekoderach używa się niemal wyłącznie kodu NKB (jako najprostszego). Koder priorytetu Koderem nazywamy układ cyfrowy o n wyjściach i k < 2n wejściach, przy czym na wyjściu pojawia się zakodowany numer tego wejścia, na którym występuje wyróżniony sygnał. Symbol i przykładowe wartości sygnałów dla kodera priorytetu Na wyjściu układu pojawił się kod liczby 5, ponieważ wyróżniony sygnał jest podany na wejścia o numerach 3 i 5 i spośród nich wejście 5 ma najwyższy priorytet. Multipleksery Multipleksery są kolejnymi układami pomocniczymi występującymi w układach techniki komputerowej, przykładowo w opisie kart graficznych lub pamięci dynamicznych. Zadaniem multipleksera jest przekazywanie jednego z wielu sygnałów wejściowych na wyjście, przy czym wyboru, który sygnał ma się pojawić na wyjściu, dokonujemy za pomocą wejścia będącego rodzajem wejścia adresowego. Na wejście to podajemy zakodowany dwójkowo numer tego wejścia, którego stan ma być przekazywany na wyjście. Wyjście multipleksera, a co za tym idzie i jego wejścia, mogą być jedno- lub wielobitowe. Symbol multipleksera Przykład działania multipleksera Demultiplekser Demultiplekser - jest układem mającym jedno wejście x, n wejść adresowych a oraz wyjść k, a także wejścia strobujące S. Pełni funkcję odwrotną do multipleksera. Jego działanie polega na przełączeniu sygnału wejścia x do określonego wyjścia y. Numer wyjścia jest określony przez podanie jego numeru na wejście adresowe a, na pozostałych wyjściach występuje stan logicznego zera. Jeśli na wejście strobujące zostanie podane logiczne zero, to wyjścia y przyjmują określony stan logiczny niezależny ani od stanu wejścia x, ani wejść adresowych a. Ze względu na zastosowanie multipleksery i demultipleksery należy właściwie omawiać razem. Oprócz funkcji specjalnych, umożliwiających syntezę układów kombinacyjnych, właściwym ich zastosowaniem jest stworzenie np. toru transmisji danych cyfrowych, udostępnianie naprzemiennie informacji na różnych wejściach i kierowanie jej do odpowiednich wyjść. Multiplekser ma zadanie, w zależności od kodu wejścia, połączyć ten numer wejścia z wyjściem za pomocą wejścia adresowego, natomiast demultiplekser działa odwrotnie, łączy wejście z numerem wyjścia wskazanym przez wejście adresowe.