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.

Podobne dokumenty