Elektronika Cyfrowa
Wprowadzenie do techniki cyfrowej
W technice analogowej mamy głównie do czynienia z układami, w których napięcia wejściowe i wyjściowe zmieniają się w pewnym zakresie wartości. Są to obwody RC, wzmacniacze, integratory, prostowniki, wzmacniacze operacyjne itd. Stosowanie tego typu układów jest naturalne, gdy przetwarzamy sygnały ciągłe (np. sygnały akustyczne) lub zmieniające się w sposób ciągły napięcia z urządzeń pomiarowych (np. czujników temperatury lub światła, z sond biologicznych lub chemicznych).
Zdarza się jednak, że sygnał wejściowy ma z natury formę dyskretną, jak np. impulsy z detektora cząstek lub "bity" danych z przełącznika, klawiatury lub komputera. Wtedy użycie techniki cyfrowej (układów, które przetwarzają dane utworzone z jedynek i zer) jest naturalne i wygodne. Co więcej, często jest pożądana zmiana ciągłej (analogowej) informacji na formę cyfrową i odwrotnie (przy użyciu przetworników C/A i A/C) w celu wykonania obliczeń na otrzymanych danych za pomocą kalkulatora lub komputera lub w celu przechowania dużych porcji danych w postaci liczb. W typowym zastosowaniu mikroprocesor lub komputer może monitorować sygnały z eksperymentu lub procesu przemysłowego, sterować parametrami procesu na podstawie przyjmowanych danych i przechowywać do późniejszego wykorzystania zgromadzone lub przetworzone dane, podczas gdy proces trwa dalej. Innym interesującym przykładem możliwości techniki cyfrowej jest transmisja informacji analogowej bez jej degradacji szumem.
Na sygnał akustyczny lub wizyjny transmitowany kablem lub drogą radiową nakładają się zakłócenia, które nie mogą być usunięte w żaden sposób. Jeżeli zamiast transmitować taki sygnał analogowo, zastąpimy go ciągiem liczb reprezentujących jego amplitudę w kolejnych chwilach i te liczby będziemy przesyłać jako sygnały cyfrowe, to rekonstrukcja sygnału analogowego w odbiorniku (dokonywana za pomocą przetworników C/A) będzie bezbłędna, pod warunkiem, że poziom szumu w kanale transmisyjnym nie będzie na tyle wysoki, aby uniemożliwić prawidłowe rozpoznanie jedynek i zer. Ta technika, znana jako PCM (ang. pulse code modudation - modulacja impulsowa kodowa), jest szczególnie atrakcyjna wtedy, gdy sygnał musi przejść przez wiele stacji przekaźnikowych, tak jak w przypadku międzykontynentalnego połączenia telefonicznego, ponieważ cyfrowa regeneracja sygnału w każdej stacji gwarantuje transmisję bez zakłóceń. Informacja i obrazy z ostatnio wysyłanych sond kosmicznych dalekiego zasięgu były przekazywane techniką PCM. Technika cyfrowa jest obecnie powszechnie stosowana w akustycznym sprzęcie domowego użytku w postaci 12-centymetrowych optycznych płyt CD (ang. compact disc). Na takiej płycie fragment stereofonicznego utworu muzycznego jest zapisany jako szereg par liczb 16-bitowych pojawiających się co 23 mikrosekundy. Ogółem płyta zawiera 6 miliardów bitów informacji. Są też sposoby zapisywania płyt optycznych wielowarstwowo (DVD).
W istocie układy cyfrowe potrafią już tak wiele, że zadania, których natura sugeruje zastosowanie techniki analogowej, są często lepiej rozwiązywane metodami cyfrowymi. Na przykład, do analogowego miernika temperatury można wbudować układ mikroprocesorowy z pamięcią, który zwiększy dokładność przyrządu przez kompensację jego nieliniowości. Z uwagi na szeroką dostępność mikroprocesorów takie zastosowania stają się coraz powszechniejsze. Zresztą zamiast wymieniać, co można zrobić wykorzystując technikę cyfrową, lepiej zacząć ją poznawać. Zastosowania nasuną się w czasie tego wykładu same.
Stany logiczne
Przez układy cyfrowe rozumiemy układy, w których w każdej chwili występują tylko dwa (zwykle) możliwe stany, np. tranzystor, jako element układu cyfrowego, może być albo w stanie nasycenia, albo w stanie nieprzewodzenia. Z możliwości opisu stanów jako poziomów napięcia lub poziomów prądu zwykle wybiera się to pierwsze rozwiązanie. Mówi się wtedy o poziomie napięcia odpowiadającym stanowi wysokiemu1), oznaczanemu symbolem H (ang. high), oraz o poziomie napięcia odpowiadającym stanowi niskiemu, oznaczanemu symbolem L (ang. low). Te dwa stany mogą reprezentować wiele różnych "bitów" (cyfr dwójkowych) informacji, jak na przykład: jeden bit liczby,czy przełącznik jest otwarty czy zamknięty? czy sygnał jest obecny czy nieobecny? czy pewien sygnał analogowy jest powyżej czy poniżej pewnego ustalonego poziomu? czy zaszło już pewne wydarzenie czy nie? czy pewna akcja powinna być podjęta czy nie? itd.
Stan wysoki (H) i stan niski (L)
Można zdefiniować odpowiedniość między stanami: wysokim (H) i niskim (L) układu cyfrowego a elementami algebry Boole'a, określanymi jako "prawda" i "fałsz". Jeśli pojawiającemu się w pewnej linii układu stanowi H przypiszemy "prawdę", wówczas tę linię nazywamy aktywną stanem wysokim (lub aktywną w stanie wysokim), a przyjętą konwencję nazywamy logiką dodatnią. Przypisanie "prawdy" stanowi L definiuje linię aktywną stanem niskim (lub aktywną w stanie niskim) i logikę ujemną. Na początku może to być nieco mylące. Spójrzmy na przykład przedstawiony na rysunku. Stwierdzenie PRZEŁĄCZNIK ZAMKNIĘTY jest prawdziwe, gdy wyjście układu jest w stanie niskim. Linia wyjściowa jest aktywna stanem niskim i możemy oznaczyć ją w sposób pokazany na rysunku (kreska nad symbolem oznacza NIE; ta linia jest w stanie wysokim wtedy, gdy przełącznik nie jest zamknięty). Zapamiętajmy zatem, że obecność lub nieobecność kreski negującej nad oznaczeniem mówi, czy linia napięcia jest w stanie niskim, czy wysokim, gdy wskazany warunek (PRZEŁĄCZNIK ZAMKNIĘTY) jest prawdziwy. Na podstawie przebiegu sygnałów na wejściach układu cyfrowego można określić przebieg jego sygnału wyjściowego. Tak samo zachowywały się układy analogowe - nie było problemu z określeniem funkcji sygnału pojawiającego się na wyjściu wzmacniacza operacyjnego. Jednakże układy cyfrowe pozwalają na większą elastyczność układową niż układy analogowe. Te same linie sygnałowe są używane do przenoszenia różnych rodzajów informacji lub nawet do przesyłania informacji w dwóch różnych kierunkach w różnych chwilach. Aby to "multipleksowanie" było możliwe, musi być przesyłana dodatkowa informacja (bity adresu lub bity stanu). Później podamy liczne przykłady tej użytecznej właściwości układów cyfrowych. Na razie załóżmy, że każdy układ, z którym będziemy mieć do czynienia, realizuje znaną nam funkcję oraz, że wiemy, skąd pochodzą dane wejściowe i dokąd wędrują dane wyjściowe.
Aby skomplikować trochę nasze, proste dotąd, rozważania, wprowadźmy symbole 1 i 0. Są one używane w algebrze Boole'a do oznaczania odpowiednio prawdy i fałszu i czasami pojawiają się w elektronice w dokładnie tym samym znaczeniu. Niestety, symbole te są również używane do oznaczania stanów logicznych, przy czym jedynką (1) oznacza się stan wysoki a zerem (0) niski! W tej publikacji będziemy starali się unikać jakiejkolwiek niejednoznaczności używając do reprezentacji stanów logicznych słowa wysoki (lub symbolu H - jak HIGH) i słowa niski (lub symbolu L - jak LOW), co jest metodą powszechnie stosowaną w przemyśle elektronicznym. Symboli 1 i 0 będziemy używali tylko w sytuacjach absolutnie jednoznacznych.
Zakresy napięć stanów H i L
W dziedzinie układów cyfrowych dopuszcza się, aby stanom: wysokiemu i niskiemu odpowiadały zakresy wartości napięcia, a nie pojedyncze poziomy napięć. Na przykład, dla szybkich układów CMOS (seria HC), napięcia wejściowe o wartościach między 0 V a 1,5 V są interpretowane jako stan niski, natomiast napięcia o wartościach między 3,5 V a 5 V, gdzie +5 V jest wartością napięcia zasilania - jako stan wysoki. Stany: niski i wysoki na wyjściach układów CMOS są reprezentowane odpowiednio przez zakresy napięć 0 V do kilku dziesiątych wolta oraz od wartości napięcia zasilania do wartości tego napięcia pomniejszonego o kilka dziesiątych wolta (wyjście układu CMOS jest dołączane do jednej z szyn zasilających przez tranzystor polowy MOS, patrz rys. 8.17). Takie określenie stanów logicznych uwzględnia rozrzuty produkcyjne, wrażliwość układów na temperaturę, obciążenie, napięcia zasilania itp. oraz obecność "szumu", tj. rozmaitych śmieci nakładających się na sygnał podczas jego wędrówki przez układ (powstających na skutek sprzężeń pojemnościowych, przenikania zakłóceń zewnętrznych itp.). Układ otrzymujący sygnał decyduje, czy reprezentuje on stan wysoki czy stan niski i odpowiednio reaguje. Dopóki szum nie zamienia jedynki na zero lub odwrotnie, wszystko jest w porządku. Jakiekolwiek zakłócenie jest eliminowane w każdym stopniu układu, ponieważ odtwarzane są "czyste" sygnały 0 i 1. W tym sensie układy cyfrowe są bezzakłóceniowe i doskonałe. Do określenia maksymalnego poziomu szumu, który może być dodany do poziomu logicznego (w najgorszym przypadku) i który nie powoduje błędnego działania układu używa się pojęcia marginesu zakłóceń (ang. noise-immunity - odporność na zakłócenia). Na przykład, margines zakłóceń układów TTL wynosi 0,4 V, ponieważ wejście układu TTL interpretuje dowolne napięcie o wartości mniejszej niż +0,8 V jako stan niski i dowolne napięcie o wartości większej niż +2,0 V jako stan wysoki, a napięcia na wyjściu w najgorszym przypadku mają wartości odpowiednio +0,4 i + 2,4 V (porównaj z treścią wstawki o poziomach logicznych). W praktyce margines zakłóceń ma wartość znacznie większą od podanej, gdyż typowe wartości napięć wyjściowych odpowiadające stanom: niskiemu i wysokiemu są równe +0,2 V i 3,4 V, natomiast wartość napięcia progowego, które służy do rozpoznawania stanu na wejściu układu wynosi + 1,3 V. Jednak naprawdę dobry układ musi być projektowany na najgorszy przypadek. Warto przy tym pamiętać, że różne rodziny elementów cyfrowych mają różną odporność na zakłócenia. Układy CMOS mają większą odporność na zakłócenia napięciowe niż układy TTL, podczas gdy szybkie układy z rodziny ECL - odpowiednio mniejszą. Oczywiście, wrażliwość systemu cyfrowego na zakłócenia zależy również od amplitudy zakłóceń powstających w nim samym, która z kolei zależy od parametrów takich jak wartość impedancji wyjściowych poszczególnych elementów, wartości indukcyjności doprowadzeń masy, istnienie długich linii tworzących szyny i magistrale, oraz od szybkości zmiany napięcia przy przełączaniu stanów logicznych (na skutek sprzężeń pojemnościowych w chwilach przełączeń stanów powstają w przewodach masy krótkotrwałe impulsy prądu, które są przyczyną pojawiania się szpilkowych impulsów napięcia).
Kody liczbowe
Większość wymienionych wcześniej sytuacji, w których stosuje się sygnały cyfrowe, jest oczywista. Bardziej złożony i bardzo interesujący jest problem reprezentowania liczb za pomocą stanów logicznych. Liczba dziesiętna (o podstawie liczenia 10) jest po prostu ciągiem symboli czyli cyfr, które są rozumiane jako mnożniki kolejnych potęg liczby 10, a cała liczba jest rozumiana jako suma tych iloczynów cząstkowych. Na przykład:
137,06=1.102+3.101+7.100+0.10-1+6.10-2
Potrzeba na to 10 cyfr (od 0 do 9), a waga każdej cyfry jest określona jej położeniem względem przecinka dziesiętnego. Jeżeli chcemy reprezentować liczbę używając tylko dwóch symboli (0 i 1), musimy zastosować dwójkowy (inaczej binarny) system liczenia, w którym podstawą jest liczba 2.
Cyfry 1 lub 0 mnoży się przez kolejne potęgi liczby 2. Na przykład:
11012=1.23+1.22+0.21+1.20=1310
Poszczególne jedynki i zera są nazywane "bitami" (cyframi binarnymi). Dolny indeks określa obowiązujący system liczenia i jest często niezbędny dla uniknięcia niejednoznaczności, ponieważ stosowane w różnych systemach liczenia symbole wyglądają tak samo.
Liczbę dwójkową zamieniamy na dziesiętną metodą właśnie opisaną. Aby dokonać zamiany w przeciwnym kierunku, powtarzamy dzielenie liczby przez 2 i zapisujemy kolejne reszty. Aby zamienić liczbę 1310 na dwójkową wykonujemy dzielenie:
13/2 = 6 reszta 1
6/2 = 3 reszta 0
3/2 = 1 reszta 1
1/2 = 0 reszta 1
co daje 1310= 11012
Zauważmy, że wynik otrzymujemy w kolejności od najmłodszego bitu (ang. least significant bit - LSB) do najstarszego bitu (ang. most significant bit - MSB).
Szesnastkowa (heksadecymalna) reprezentacja liczb.
Dla układów dwustanowych najbardziej naturalnym sposobem zapisu liczb jest zapis binarny (nie jest to jednak sposób jedyny i niektóre inne wkrótce poznamy). Ponieważ liczby binarne są stosunkowo długimi ciągami cyfr, przyjęło się zapisywanie ich jako liczb szesnastkowych (o podstawie liczenia 16).
Każda pozycja liczby szesnastkowej reprezentuje odpowiednią potęgę szesnastu, a symbol umieszczony na dowolnej pozycji ma wartość od 0 do 15. Ponieważ potrzebne są pojedyncze symbole umieszczane na pozycjach liczby szesnastkowej, wartościom od 10 do 15 przypisano symbole literowe od A do F. Aby liczbę binarną zamienić na liczbę szesnastkową (zapisać w postaci szesnastkowej), należy pogrupować ją, poczynając od najmniej znaczącego bitu, na fragmenty 4-bitowe i każdy taki fragment zapisać jako cyfrę szesnastkową.
70710=10110000112(=10 1100 00112)=2C316
Reprezentacja szesnastkowa najbardziej odpowiada typowej "bajtowej" (8-bitowej) organizacji informacji we współczesnych komputerach, w których najczęściej występują "słowa" 16- lub 32-bitowe.
Słowo składa się zatem z dwóch lub czterech bajtów. Znak alfanumeryczny (litera, cyfra lub symbol) jest jednobajtowy. Tak więc w zapisie szesnastkowym każdy bajt składa się z dwóch cyfr szesnastkowych, słowo komputera 16-bitowego z 4 cyfr szesnastkowych itd. Weźmy przykłady. W powszechnie używanej reprezentacji znaków według standardu ASCII małej literze "a" odpowiada liczba binarna 01100001 (czyli liczba szesnastkowa 61, którą zapisujemy jako 61H), literze "b" odpowiada 62H itd. Tak więc słowo "nerd" może być zapamiętane jako para słów (komputerowych) 16-bitowych o wartościach 6D65H i 7274H. Inny przykład. Położenie słowa pamięci w komputerze wyposażonym w pamięć o pojemności 65536 bajtów (pamięć "64K") można określić przez podanie 2-bajtowego adresu, gdyż 216 = 65536. Adresem najmniej znaczącym jest w tym przypadku liczba 0000H, adresem najbardziej znaczącym - liczba FFFFH, druga połowa pamięci zaczyna się od adresu 8000H, natomiast czwarta ćwiartka pamięci - od adresu COOOH.
Czasami można spotkać zapis ósemkowy liczb, nazywany również oktalnym (podstawą liczenia jest 8). Jest to relikt wczesnej epoki komputerowej, gdy w komputerach były stosowane słowa 12- i 36-bitowe, a znaki alfanumeryczne były reprezentowane za pomocą 6 bitów. Chociaż system ósemkowy zdaje się być bardzo wygodny ze względu na korzystanie tylko ze znanych symboli (0-7), jednak jest on bardzo krępujący, kiedy próbuje się go zastosować do słów o organizacji bajtowej.
POZIOMY LOGICZNE
Dla każdej rodziny układów logicznych konieczne jest określenie dopuszczalnych wartości napięć wejściowych i wyjściowych, odpowiadających obu stanom logicznym: wysokiemu i niskiemu. Zacienione obszary znajdujące się nad linią odpowiadają zakresom napięć wyjściowych, w których muszą mieścić się napięcia stanów niskiego i wysokiego. Para strzałek wskazuje typowe wartości napięć wyjściowych stanu niskiego i stanu wysokiego spotykane w praktyce.
Zacienione obszary znajdujące się pod linią odpowiadają zakresom napięć wejściowych interpretowanym i gwarantowanym jako napięcia stanu niskiego lub wysokiego. Strzałka wskazuje typową wartość napięcia progowego tzn. linię dzielącą stany niski i wysoki. We wszystkich przypadkach wartość napięcia stanu wysokiego jest większa niż wartość napięcia stanu niskiego.
Znaczenie wartości minimalnej, typowej i maksymalnej w danych technicznych podzespołów elektronicznych warte jest kilku słów wyjaśnienia. Najprościej mówiąc, producent gwarantuje, że wartość parametru elementów danego typu mieści się w przedziale od minimum do maksimum, z dużą liczbą elementów o wartości parametru zbliżonej do wartości typowej. Wartości typowych używa się przy projektowaniu układów, jednakże układy te muszą pracować poprawnie w całym zakresie dopuszczalnych zmian parametrów od minimum do maksimum (dla ekstremalnych wartości rozrzutu produkcyjnego). W szczególności, dobrze zaprojektowany układ musi działać poprawnie dla najgorszej z możliwych kombinacji wartości minimalnych i maksymalnych parametrów jego elementów. Jest to tak zwane projektowanie na najgorszy przypadek i ma zasadnicze znaczenie przy projektowaniu przyrządów, które produkowane są z użyciem elementów branych wprost z półki sklepowej (tzn. bez specjalnej selekcji).
BCD
Innym sposobem zapisywania liczb jest dwójkowe kodowanie każdej cyfry dziesiętnej. Ten sposób nazywa się kodowaniem BCD (ang. binary coded decimal) i wymaga zastosowania grup 4-bitowych dla każdej cyfry dziesiętnej. Na przykład:
13710=0001 0011 0111 (BCD)
Zauważmy, że notacja BCD nie jest identyczna z zapisem dwójkowym, którym w tym przypadku jest 13710 = 100010012. Najlepiej uważać kolejne pozycje bitów (poczynając od prawego) za reprezentacje liczb 1,2,4,8,10,20,40,80,100, 200,400,800 itd. W zapisie BCD marnotrawimy oczywiście część bitów, ponieważ każda grupa 4-bitowa mogłaby przestawiać liczby od 0 do 15, podczas gdy przedstawia tylko liczby od 0 do 9. Jednakże zapis BCD jest idealny, jeśli chce się wyświetlać liczby dziesiętne, ponieważ wszystko, co trzeba zrobić, to zamienić każdą 4-bitową grupę BCD na odpowiadającą jej cyfrę dziesiętną i ją wyświetlić.
Istnieje wiele układów specjalnie do tego przeznaczonych, np. "dekoder, wzmacniacz i wyświetlacz BCD", który jest małym układem scalonym z przezroczystym wierzchem. Doprowadza się do niego sygnały o poziomach logicznych odpowiednich dla pożądanej cyfry BCD i zapala się właściwa cyfra. Z tego powodu zapis BCD jest powszechnie używany do wprowadzania i wyprowadzania informacji numerycznej. Niestety, konwersje między czystym zapisem binarnym i zapisem BCD są skomplikowane, ponieważ każda cyfra dziesiętna jest funkcją niemal każdego bitu liczby dwójkowej i przeciwnie. Niemniej jednak arytmetyka binarna jest tak wydajna, że większość komputerów zamienia wszystkie dane wejściowe na postać binarną, przeprowadzając konwersję odwrotną tylko wtedy, gdy wymaga tego wyjście. Wyobraźmy sobie, o ile prostsze byłoby życie, gdyby Homo sapiens wykształcił 8 (lub 16) palców.
Liczby ze znakiem
Zapis znak-moduł
Wcześniej czy później niezbędne staje się zapisywanie dwójkowe liczb ujemnych, szczególnie w urządzeniach, które mają przeprowadzać jakieś obliczenia. Najprostszą metodą jest poświęcenie jednego bitu (powiedzmy najstarszego - MSB) na znak, podczas, gdy pozostałe bity reprezentują moduł liczby.
Ten sposób jest nazywany zapisem "znak-moduł" i odpowiada sposobowi, w jaki zwykle zapisywane są liczby ujemne (patrz tablica 8.1). Jest on wykorzystywany zarówno przy wyświetlaniu liczb, jak i w niektórych przetwornikach A/C. Ogólnie możemy powiedzieć, że nie jest to najlepszy sposób zapisu liczb, szczególnie gdy mają być przeprowadzone jakieś obliczenia, i to z kilku powodów. Obliczenia są niewygodne, gdyż odejmowanie różni się od dodawania (tzn. dodawanie "nie działa" na liczbach ze znakiem).
Pojawiają się także dwa zera (+0 i -0), więc należy dobrze uważać, aby używać tylko jednego z nich. Zapis binarny przesunięty. Drugą metodą zapisu liczb ze znakiem jest zapis binarny przesunięty, w którym, aby otrzymać reprezentowaną wartość, odejmuje się od niej połowę największej możliwej liczby (tablica 8.1). Mato tę zaletę, że kody liczb od najbardziej ujemnej do najbardziej dodatniej tworzą zwykły binarny postęp arytmetyczny, odpowiadający w sposób naturalny trybowi pracy "liczników" dwójkowych. Najstarszy bit w dalszym ciągu zawiera informację o znaku, a zero występuje tylko raz. Zapis binarny przesunięty jest popularny w przetwornikach A/C i C/A, ale wykonywanie operacji arytmetycznych jest w nim w dalszym ciągu niewygodne.
Zapis z uzupełnieniem do dwóch.
Najczęściej spotykanym w obliczeniach na liczbach całkowitych jest zapis z "uzupełnieniem do dwóch". W tym zapisie liczby dodatnie są reprezentowane przez zwykłe liczby binarne bez znaku. Liczbę ujemną reprezentuje liczba binarna, którą trzeba dodać do liczby dodatniej o tym samym module, aby otrzymać zero. Aby zapisać liczbę ujemną, najpierw trzeba zanegować każdy bit liczby dodatniej (tzn. zastąpić 0 przez 1 i odwrotnie, co jest nazywane uzupełnieniem do jedynki"), a następnie należy dodać (to jest "uzupełnienie do 2"). Jak można wywnioskować z tablicy 8.1, związek pomiędzy zapisem z uzupełnieniem do 2 i zapisem binarnym przesuniętym polega na zanegowaniu najstarszego bitu (MSB). Podobnie jak dla innych sposobów przedstawiania liczb ze znakiem, również w tym przypadku MSB zawiera informację o znaku. Występuje tylko jedno zero, wygodnie reprezentowane przez same bity 0 ("zerowanie" licznika lub rejestru ustawia jego zawartość na zero).
Działania arytmetyczne w zapisie z uzupełnieniem do dwóch
Działania arytmetyczne na liczbach w zapisie z uzupełnieniem do 2 są proste. Aby dodać dwie liczby, dodajemy je bit po bicie (z przeniesieniem), w sposób następujący:
5+(-2):
0101 (+5)
1110 (-2)
0011 (+3)
Aby odjąć B od A, trzeba wziąć uzupełnienie do 2 liczby B i dodać do A (tzn. dodać liczbę przeciwną):
2-5:
0010 (+2)
1011 ( - 5)
1101 ( - 3)
( + 5 = 0101; uzupełnienie do 1 = 1010, więc uzupełnienie do 2 = 1011)
Również mnożenie "dobrze działa" w zapisie uzupełnienia do 2. W zapisie z uzupełnieniem do 2 obliczenia wykonuje się w sposób naturalny, więc zapis ten jest powszechnie używany w komputerach do wykonywania obliczeń na liczbach całkowitych (zauważmy jednak, że liczby "zmiennoprzecinkowe" są zwykle zapisywane w formacie "znak-moduł", a dokładniej znak-wykładnik-mantysa).
Bramki i tablice prawdy
Układy kombinacyjne i sekwencyjne
Istotą techniki cyfrowej jest wytwarzanie cyfrowych sygnałów wyjściowych jako odpowiedzi na cyfrowe sygnały wejściowe. Na przykład sumator przetwarza doprowadzone do wejść dwie liczby 16-bitowe na 16-bitową sumę tych liczb oraz bit przeniesienia. Można także zbudować układ do mnożenia dwóch liczb. Są to operacje w rodzaju tych, jakie powinna wykonywać jednostka arytmetyczna komputera. Innym zadaniem może być porównanie dwóch liczb w celu sprawdzenia, która z nich jest większa. Albo porównanie zestawu sygnałów wejściowych z sygnałem pożądanym w celu sprawdzenia, czy wszystkie podzespoły weszły w tryb normalnej pracy. Można również zażądać dołączenia do liczby "bitu parzystości" tak, aby całkowita liczba jedynek w rozbudowanej reprezentacji liczby była parzysta, na przykład przed transmisją przez łącze. Następnie parzystość może być sprawdzona przy odbiorze, co daje prostą kontrolę poprawności transmisji. Innym typowym zadaniem układów cyfrowych jest pobranie pewnych liczb binarnych i ich wyświetlenie, wydrukowanie lub wydziurkowanie jako znaków dziesiętnych. We wszystkich wymienionych zadaniach sygnały (stany) wyjściowe są zdeterminowanymi funkcjami sygnałów (stanów) wejściowych. Zalicza się je do zadań "kombinacyjnych". Wszystkie mogą być wykonane za pomocą urządzeń zwanych bramkami, które realizują działania algebry Boole`a w dziedzinie układów dwustanowych (binarnych).
Istnieje druga klasa zagadnień, które nie mogą być rozwiązane przez utworzenie kombinacyjnych funkcji tylko bieżących stanów wejść, lecz wymagają znajomości poprzednich stanów wejść. Ich rozwiązanie wymaga zastosowania układów "sekwencyjnych". Typowe zadania tego rodzaju to: zamiana szeregowego ciągu bitów (bity następują kolejno jeden po drugim) w równoległy zestaw bitów, zliczanie jedynek w danej sekwencji, rozpoznanie pewnego wzoru w sekwencji, lub też wytworzenie jednego impulsu dla co czwartego impulsu wejściowego. Do realizacji wszystkich wymienionych zadań konieczne jest zastosowanie jakiejś pamięci cyfrowej. Podstawowym urządzeniem pamięciowym jest przerzutnik bistabilny (ang. flip flop lub bistable multivibrator). Zaczniemy od bramek i układów kombinacyjnych, ponieważ są one podstawą wszelkich układów cyfrowych. Technika cyfrowa stanie się bardziej interesująca, kiedy dojdziemy do układów sekwencyjnych, ale zabawa z samymi bramkami również dostarczy nam sporo radości.
Bramka OR
Wyjście bramki OR (czyli LUB) jest w stanie wysokim, jeżeli któreś z wejść (lub oba) jest w stanie wysokim. Można to wyrazić za pomocą "tablicy prawdy", pokazanej na rysunku 8.2. Narysowana bramka to 2-wejściowa bramka OR. W przypadku ogólnym bramki mogą mieć dowolną liczbę wejść, ale typowy układ scalony zawiera zwykle cztery bramki 2-wejściowe, trzy bramki 3-wejściowe lub dwie bramki 4-wejściowe. Na przykład wyjście 4-wejściowej bramki OR będzie w stanie wysokim, jeżeli przynajmniej jedno jej wejście będzie w stanie wysokim.
W algebrze Boole'a symbolowi OR odpowiada symbol +. "A LUB B" zapisywane jest jako A+B.
Bramka AND
Wyjście bramki AND (czyli I) jest w stanie wysokim tylko wtedy, gdy oba wejścia są w stanie wysokim. Symbol logiczny tej bramki i tablicę prawdy pokazano na rysunku. Podobnie jak w przypadku bramek OR, dostępne są bramki AND 3- i 4-wejściowe (czasem o większej liczbie wejść). Na przykład 8-wejściowa bramka AND będzie miała wyjście w stanie wysokim tylko wtedy, gdy wszystkie wejścia będą w stanie wysokim.
W algebrze Boole'a symbolowi AND odpowiada kropka (.). Może być ona pominięta, co jest powszechnie spotykane. "A I B" jest zapisywane jako A . B lub po prostu AB.
Inwerter (funkcja NOT)
Często potrzebujemy zmienić stan logiczny na przeciwny (nazywa się to również negowaniem stanu logicznego). Jest to funkcja inwertera, "bramki" o jednym wejściu.
Boole'owskim odpowiednikiem symbolu NOT (negacji) jest kreska pozioma stawiana nad negowanym elementem, a czasem apostrof ('). "NIE A" jest zapisywane jako A'. Dla wygody składających teksty na oznaczenie
negacji często zamiast kreski stosuje się symbole /, *, -, '.
Tak więc, "NIE A" może być zapisane również następująco: A', -A, *A, /A, A*, A/. W danej publikacji wybiera się zazwyczaj jeden z wymienionych sposobów negacji i konsekwentnie się go stosuje w całym tekście. W naszej używamy notacji A'.
NAND i NOR
Funkcja NOT może być połączona z innymi funkcjami, tworząc NAND i NOR.
Exclusive-OR
Exclusive-OR (XOR, czyli WYŁĄCZNE LUB) jest ciekawą funkcją, chociaż mniej podstawową niż AND i OR.
Wyjście bramki XOR
jest w stanie wysokim, jeżeli jedno albo drugie wejście jest w stanie wysokim (jest to zawsze funkcja dwóch zmiennych). Mówiąc inaczej, wyjście jest w stanie wysokim, jeżeli stany wejść są różne. Bramka XOR realizuje dodawanie bitów modulo-2.