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:
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
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:
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:
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 przystosowana do realizacji dowolnej funkcji logicznej o argumentach wprowadzonych 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 komponentów w postaci bloków logicznych typu LUT specyfikowanych pierwotnymi 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 |
|
|
|
|
|