Podręcznik

3. Specyfikacje i realizacje funkcji boolowskich

Omówione w poprzednich podrozdziałach zasady reprezentacji funkcji boolowskich są w praktyce projektowania układów cyfrowych bardziej sformalizowane. Stosowanie formalnych zasad specyfikacji funkcji boolowskich jest ważne ze względu na coraz powszechniejsze stosowanie komputerowych systemów projektowania. Zasady te – w przypadku języków opisu sprzętu – są mocno rozbudowane i przy założonej tematyce tego podręcznika mało istotne dla omawiania zaawansowanych algorytmów syntezy logicznej.

Z tych powodów ograniczymy się do tzw. standardu berkeley’owskiego stosowanego w komputerowym systemie Espresso [2.1].

 

Tablica 2.6

type fr

.i 4

.o 7

.p 10

0000 1111110

0001 0110000

0010 1101101

0011 1111001

0100 0110011

0101 1011011

0110 1011111

0111 1110000

1000 1111111

1001 1111011

.e

 

W tablicy 2.6 jest podana tablica prawdy funkcji boolowskiej reprezentującej działanie dekodera wskaźnika siedmiosegmentowego (por. tabl. 2.2). Istotą takiej reprezentacji (plik typu pla) jest specyficzny zapis nagłówka określającego:

 

.type fr – typ danych

.i  4 – liczba wejść

.o 7 – liczba wyjść

.p 10 – liczba wektorów (kostek)

 

Realizacje funkcji boolowskich

Dysponując różnymi bramkami logicznymi możemy realizować funkcje boolowskie w różnych strukturach. Do najbardziej typowych i najczęściej stosowanych należą:

 

realizacja AND-OR,

realizacja OR-AND.

 

Na rys. 2.3a pokazano realizację AND-OR funkcji opisanej wyrażeniem:

 

y=x_1x_2+x_1{\bar{x}}_3+x_2{\bar{x}}_3

 

 

Rys. 2.3. Realizacja AND-OR (a) i OR-AND (b)

Realizacja AND-OR jest bezpośrednim odwzorowaniem wyrażenia boolowskiego typu SOP (Sum of Product). Z kolei realizację OR-AND uzyskujemy z wyrażenia typu iloczyn sum. Na rys 2.3b pokazano realizację OR-AND funkcji opisanej wyrażeniem y=\left(x_1+x_2\right)(\ x_1+{\bar{x}}_3)\left(x_2+{\bar{x}}_3\right)

W dwuelementowej algebrze Boole'a wprowadza się też inne działania (operatory). Do najważniejszych z nich należą: zanegowana suma (NOR), zanegowany iloczyn (NAND), oraz suma wyłączająca (tzw. suma modulo 2 lub różnica symetryczna, oznaczana EXOR).

Określenia tych działań podano w tablicy 2.7, a odpowiednie symbole bramek na rys. 2.4.

 

 

Rys. 2.4. Symbole bramek NAND, NOR i EXOR

 

Tablica 2.7

 

Dysponując bramkami logicznymi NAND, NOR możemy realizować funkcje boolowskie w innych strukturach. Do najbardziej typowych i najczęściej stosowanych należą:

realizacja NAND,

realizacja NOR.

 

Realizację NAND uzyskujemy z wyrażenia typu suma iloczynów, które przekształcamy zgodnie z prawem De Morgana do postaci:

y=\overline{\overline{x_1x_2}\cdot\overline{x_1{\bar{x}}_3}\cdot\overline{x_2{\bar{x}}_3}}

 

 

Rys. 2.5. Realizacja NAND (a) i NOR (b)

 

Realizację NAND podano na rys. 2.5a.

Z kolei przekształcenie wyrażenia typu iloczyn sum wg prawa De Morgana:

y=\overline{\overline{x_1{+x}_2}+\overline{x_1+{\bar{x}}_3}+\overline{x_2{+\bar{x}}_3}}

bezpośrednio prowadzi do realizacji NOR, którą podano na rys. 2.5b.

Realizacje takie polegają na konfigurowaniu (programowaniu) matrycy AND-OR, która jest podstawowym elementem konstrukcyjnym układów PLD. Matryca AND-OR może być matrycą typu PAL (Programmable Array Logic), której cechą charakterystyczną jest programowalna matryca AND i stała matryca OR lub typu PLA (Programmable Logic Array), gdzie obie matryce, AND i OR są programowalne. Znaczy to, że PAL jest zespołem bramek iloczynowych dołączonych do oddzielnych bramek OR (rys. 2.6a), a w PLA każda bramka AND może być dołączona do dowolnej bramki OR (rys. 2.6b). Programowanie polega na realizacji połączeń w punktach styku linii poziomych i pionowych.

Całkowicie odmienne możliwości realizacji funkcji boolowskich powstały wraz z wprowadzeniem struktur programowalnych typu FPGA (Field Programmable Gate Array). Wynika to z faktu, że w układach FPGA typową strukturą jest prostokątna macierz elementów logicznych zwanych komórkami, rozmieszczonych w środowisku komutacyjnym kanałów połączeniowych.

 

 

Rys.  2.6. Matryca typu PAL (a) i typu PLA (b)

 

Komórka struktur FPGA jest zbudowana z uniwersalnego układu kombinacyjnego, umożliwiającego realizację dowolnej funkcji logicznej (zadanej tablicą prawdy) o kilku wejściach i jednym lub dwóch wyjściach. Z tych powodów taką komórkę nazywa się komórką typu  LUT (Look Up Table), a jednocześnie klasę układów zbudowanych z takich komórek nazywa się układami FPGA typu LUT. Dlatego realizacje w strukturach FPGA mają całkiem odmienne wymagania na struktury układów logicznych. Bezpośrednie odwzorowanie struktur bramkowych na komórki logiczne układów FPGA jest sprzeczne z naturą komórki o tyle, że z punktu widzenia syntezy jest ona przystoso­wana do realizacji dowolnej funkcji logicznej o argumentach wprowadzo­nych na jej wejścia. Z tych powodów dla struktur FPGA znacznie skuteczniejszą metodą syntezy okazuje się dekompozycja funkcji boolowskich, której istotą jest synteza funkcji boolowskich w strukturach wielopoziomowych złożonych z kompo­nentów w postaci bloków logicznych typu LUT specyfikowanych pierwot­nymi tablicami prawdy.

 

Tablica 2.8

 

x1

x2

x3

x4

x5

f

1

0

0

0

0

0

0

2

0

1

0

1

1

0

3

0

0

1

0

1

0

4

0

1

1

1

1

0

5

0

0

1

1

0

0

6

0

1

0

0

1

1

7

0

0

1

0

0

1

8

0

1

1

1

0

1

9

1

0

1

0

1

1

10

1

1

0

0

1

1

11

1

0

0

0

1

1

 

Rys. 2.7. Realizacja funkcji f z tab. 2.8

 

Na przykład funkcję podaną w tablicy 2.8 można zrealizować w strukturze FPGA, jeśli tylko bloki g i h realizują odwzorowania podane w tablicach 2.9a i 2.9b, co pokazano na rys. 2.7. Można sprawdzić, że dla każdego wektora złożenie funkcji g oraz h wytwarza na wyjściu h = f  tę samą wartość.

 

Tablica 2.9

a)

     

 

b)

 

 

 

x3

x4

x5

g

 

x1

x2

g

h

0

0

0

0

 

0

0

0

0

0

1

1

1

 

0

0

1

1

1

0

1

0

 

0

1

0

1

1

1

1

1

 

0

1

1

0

1

1

0

0

 

1

0

0

1

0

0

1

0

 

1

1

0

1

1

0

0

1