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  | 
			
			 
  | 
			
			 
  | 
			
			 
  | 
			
			 
  | 
			
			 
  | 
		


