1. Funkcje boolowskie

Układ kombinacyjny jest podstawowym układem logicznym umożliwiającym realizację funkcji boolowskich. Układ kombinacyjny konstruujemy z elementów logicznych po to, aby realizować funkcje lub ich zespoły opisujące bardziej skomplikowane układy cyfrowe. Dlatego rozważania o układach kombinacyjnych rozpoczynamy od pojęcia funkcji boolowskiej.

Pojęcie funkcji boolowskiej jest pojęciem podstawowym umożliwiającym modelowanie zjawisk fizycznych reprezentowanych jako odwzorowanie ciągów (wektorów) binarnych należących do zbioru X w ciągi binarne (wektory) ze zbioru Y, gdzie zbiory X, (Y) są podzbiorami n-krotnego, (m-krotnego) iloczynu kartezjańskiego zbioru B = {0, 1}.

Formalnie funkcją boolowską zmiennych binarnych x1, …, xn nazywamy odwzo­rowanie:

 

f: X ® Y, gdzie X Í Bn, Y Í Bm.

 

Jeżeli X = Bn, to funkcję taką nazywamy zupełną; w przeciwnym przypadku jest to funkcja niezupełna, zwana również funkcją nie w pełni określoną.

Najczęściej stosowane reprezentacje funkcji boolowskich to tablica prawdy oraz formuła (wyrażenie) boolowskie.

Funkcja f może być przedstawiona w postaci tablicy prawdy. Jest to tablica o n+1 kolumnach i 2n wier­szach. W kolejnych wierszach są zapisywane wszystkie wartości ciągu x1, …, xn, czyli wszystkie wektory x. W ostatniej kolumnie podana jest wartość y przyporządkowywana danemu wektorowi lub „–”, jeżeli funkcja dla tego wektora nie jest określona. Kolejne wektory są numerowane, przy czym wartość i podana z lewej strony w dodatkowej kolumnie jest dziesiętnym odpowiednikiem wektora x traktowanego jako liczba w zapisie dwójkowym:

 

A_{D} =L( A_{NKB}) =\sum\limits ^{n-1}_{j=0} a_{j} \cdot 2^{j} =a_{n-1} \cdot2^{n-1} +\cdots +a_{2} \cdot2^{2} +a_{1} \cdot2^{1} +a_{0} \cdot2^{0}

 

Na przykład przeliczenia liczb binarnych (0101)B oraz (1010)B (podanych w NKB – naturalnym kodzie binarnym) na liczby dziesiętne 5D i 10D dokonujemy następująco:

 

(0101)B = 0 × 23 + 1 × 22 + 0 × 21 + 1 × 20 = 5D

(1010)B = 1 × 23 + 0 × 22 + 1 × 21 + 0 × 20 = 10D

 

Przykłady tablicowej reprezentacji funkcji boolowskiej podane są w tabl. 2.1a (funkcja zupełna) i tabl. 2.1b – funkcja niezupełna.

 

Tablica 2.1

a)

 

 

 

 

 

 

b)

 

 

 

 

 

 

 

x1

x2

x3

f

 

 

 

x1

x2

x3

f

 

0

0

0

0

0

 

 

0

0

0

0

0

 

1

0

0

1

1

 

 

1

0

0

1

1

 

2

0

1

0

0

 

 

2

0

1

0

 

3

0

1

1

1

 

 

3

0

1

1

1

 

4

1

0

0

0

 

 

4

1

0

0

0

 

5

1

0

1

1

 

 

5

1

0

1

1

 

6

1

1

0

1

 

 

6

1

1

0

 

7

1

1

1

1

 

 

7

1

1

1

1

 

Tablice te specyfikują funkcje boolowskie, których wektory wejściowe są dodatkowo określone liczbami dziesiętnymi. Stąd pomysł, aby specyfikacje funkcji boolowskich podawać w uproszczonej formie. Dla funkcji z tabl. 2.1a odpowiedni zapis powinien być:

 

f = S(1, 3, 5, 6, 7)

 

Natomiast funkcję z tabl. 2.1b zapisać należy z dodatkowym specyfikowaniem wektorów nieokreślonych:

 

f = S[1, 3, 5, 7, (2, 6)].

Rys. 2.1. Dekoder (a) wskaźnika siedmiosegmentowego (b)

Typowym zastosowaniem tablic prawdy do specyfikacji funkcji boolowskich może być opis deko­de­ra wskaźnika siedmiosegmen­towego pow­szechnie stosowanego do wyświetlania cyfr w urządzeniach pomiarowych i monitoru­jących. Deko­der taki to układ kombina­cyjny o wejściach x3, x2, x1, x0 oraz wyjściach ab, c, ..., g (rys. 2.1a), odpowiadających segmentom wskaź­nika (rys. 2.1b). Na wejścia x podawane są liczby binarne 0000, 0001,...,1000,1001 (dziesiętnie: 0,1,...,8,9). Wyjścia a, b, c, ..., g sterują diodami świecącymi. Dioda zostaje podświetlona, gdy odpo­wiednie wyjście jest w stanie 1. W rezultacie działanie dekodera jest opisane tablicą prawdy, podaną w tablicy 2.2. W tym przypadku mamy do czynienia z funkcjami niezupełnymi. Jak się później przekonamy, omówiony dekoder nie nastręcza żadnych trudności w syntezie odpowiadającego im układu kombinacyjnego.

Tablica 2.2

 

x3

x2

x1

x0

a

b

c

d

e

f

g

0

0

0

0

0

1

1

1

1

1

1

0

1

0

0

0

1

0

1

1

0

0

0

0

2

0

0

1

0

1

1

0

1

1

0

1

3

0

0

1

1

1

1

1

1

0

0

1

0

1

1

0

0

0

1

1

0

0

1

1

5

0

1

0

1

1

0

1

1

0

1

1

6

0

1

1

0

1

0

1

1

1

1

1

7

0

1

1

1

1

1

1

0

0

0

0

8

1

0

0

0

1

1

1

1

1

1

1

9

1

0

0

1

1

1

1

1

0

1

1

 

Można jednak podać zastosowania bardziej skomplikowane. Na przykład układ kryptograficzny realizujący tzw. algorytm DES (Data Encryption Standard), jest wyposażony w klucze S, których działanie specyfikuje się funkcjami boolowskimi o 6 wejściach i 4 wyjściach. Przykładowa specyfikacja dla klucza S1 jest podana w tablicy 2.3.

Tablica 2.3

14

4

13

  1

2

15

11

8

3

10

6

12

5

9

0

7

0

15

7

4

14

2

13

1

10

6

12

11

9

5

3

8

4

1

14

8

13

6

2

11

15

12

9

7

3

10

5

0

15

12

8

2

4

9

1

7

5

11

3

14

10

0

6

13

 

Jeśli wejścia klucza S1 oznaczymy x1,...,x6, a wyjścia y1, y2, y3, y4, to zapis w tablicy 2.3 rozumiemy następująco: dla wektora x = (000000) wyjścia y są liczbą binarną, której zapis dziesiętny jest L = 14 (czyli 1110), dla x = (000001), L = 4, wreszcie dla x = (111111), L = 13.

Funkcje boolowskie reprezentowane odwzorowaniem f, jakkolwiek możliwe do bezpośredniej realizacji technicznej, nie są najlepszą formą do zastosowań w strukturach bramkowych. Znacznie wygodniejsze w tym przypadku są reprezentacje funkcji w postaci wyrażeń boolowskich (formuł boolowskich). Ich zaleta wynika przede wszystkim z łatwej realizacji elementów logicznych zwanych bramkami logicznymi, które to elementy stanowią naturalną realizację wyrażeń boolowskich, gdzie występują w postaci operatorów.

Dla funkcji opisanej tablicą prawdy podaną w tabl. 2.1a odpowiednia formuła boolowska jest następująca:

 

f={\bar{x}}_1{\bar{x}}_2x_3+{\bar{x}}_1x_2x_3+x_1{\bar{x}}_2x_3+x_1x_2{\bar{x}}_3+x_1x_2x_3

 

a jej realizacja na bramkach AND, OR, NOT pokazana jest na rys. 2.2.

W układzie kombinacyjnym z rys. 2.2 funkcja f, realizowana na jego wyjściu f, reprezentuje odwzorowanie z tabelki prawdy, co łatwo sprawdzić wprowadzając na wejścia układu odpowiednie wektory binarne i obliczając wartość uzyskaną na wyjściu y. Na przykład dla x1 = x2 = 0, x3 = 1 na wyjściu bramki AND1 pojawi się sygnał o wartości 1, i w rezultacie wyjście y przyjmie wartość 1.

Natomiast dla x1 = x2 = x3 = 0 na wyjściach wszystkich bramek AND będzie 0, a więc jednocześnie y przyjmie wartość 0, co jest zgodne z tablicą prawdy.

 

 

Rys. 2.2. Realizacja funkcji f: a) bezpośrednio, b) po uproszczeniu wg zasad algebry Boole’a

 

Niekwestionowaną zaletą formuł boolowskich jest możliwość ich upraszczania, a co zatem idzie możliwość uzyskiwania realizacji oszczędniejszych z punktu widzenia liczby bramek. Zasady formalne upraszczania formuł boolowskich związane są z prawami i własnościami algebry Boole’a. Stosując prawa algebry Boole’a, poprzednio podane wyrażenie na f można uprościć w sposób podany w następującym przykładzie.

 

\begin{array}{{>{\displaystyle}l}} f=\overline{x}_{1}\overline{x}_{2} x_{3} +\overline{x}_{1} x_{2} x_{3} +x_{1}\overline{x}_{2} x_{3} +x_{1} x_{2}\overline{x}_{3} +x_{1} x_{2} x_{3} =\\ =\overline{x}_{1}\overline{x}_{2} x_{3} +\overline{x}_{1} x_{2} x_{3} +x_{1}\overline{x}_{2} x_{3} +x_{1} x_{2}\overline{x}_{3} +x_{1} x_{2} x_{3} +x_{1} x_{2} x_{3} =\\ =\overline{x}_{1} x_{3}\left(\overline{x}_{2} +x_{2}\right) +x_{1} x_{3}\left(\overline{x}_{2} +x_{2}\right) +x_{1} x_{2}\left(\overline{x}_{3} +x_{3}\right) =\overline{x}_{1} x_{3} +x_{1} x_{3} +x_{1} x_{2} =\\ =x_{3}\left(\overline{x}_{1} +x_{1}\right) +x_{1} x_{2} =x_{3} +x_{1} x_{2} \end{array}

Ostatecznie wyrażenie to można zrealizować w układzie kombinacyjnym, którego struktura – znacznie prostsza od poprzedniej realizacji – jest pokazana na rys. 2.2b.

Sens fizyczny minimalizacji i jej ogromne znaczenie praktyczne wynika z faktu, że oba układy: pierwotny i zminimalizowany działają identycznie. Zatem upraszczając wyrażenia boolowskie będziemy mogli jednocześnie uprościć ich realizację, np. zmniejszyć liczbę zastosowanych bramek co decyduje o kosztach realizacji i tym samym jest głównym czynnikiem zwiększającym konkurencyjność naszego produktu na rynku.

Zasygnalizowany tu proces upraszczania wyrażeń boolowskich ma ogromne znaczenie praktyczne i opracowano  dla jego potrzeb wiele zaawan­sowanych metod syntezy, które z technicznego punktu widzenia nazywa się metodami minimalizacji funkcji boolowskich. Wiele z nich doczekało się realizacji w postaci zaawansowanych narzędzi komputerowych i stanowi podstawę nowoczesnej syntezy logicznej.