TC Moduł 4: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Daniel-PW (dyskusja | edycje)
Nie podano opisu zmian
Daniel-PW (dyskusja | edycje)
Nie podano opisu zmian
Linia 77: Linia 77:
{| border="0" cellpadding="4" width="100%"
{| border="0" cellpadding="4" width="100%"
|valign="top" width="450px"|[[Grafika:TC_M4_Slajd9.png]]
|valign="top" width="450px"|[[Grafika:TC_M4_Slajd9.png]]
|valign="top"|
|valign="top"|Macierzą blokującą (kostkę k) nazywać będziemy macierz:
 
<math>B(k,R)=[b_{ij}]</math> , <math>1\le i\le |R|\,</math> , <math>1\le j\le n\,</math>
 
w której każdy element <math>b_{ij}\epsilon \left \{0,1\right \}</math> jest definiowany następująco:
 
<math>b_{ij}=1</math> , jeśli <math>k_j=1</math> oraz <math>r_{ij}=0</math> lub <math>k_j=0</math> oraz <math>r_{ij}=1</math> ;
 
<math>b_{ij}=0</math>, w pozostałych przypadkach.
 
W przypadku funkcji opisanej wektorami binarnymi  macierz blokująca dla danej kostki <math>k \epsilon F\,</math> powstaje z macierzy <math>R\,</math> przez zanegowanie tych kolumn <math>R\,</math>, których pozycje są wyznaczone przez pozycje jedynek w kostce <math>k \epsilon F\,</math>.
 
|}
|}


Linia 84: Linia 95:
{| border="0" cellpadding="4" width="100%"
{| border="0" cellpadding="4" width="100%"
|valign="top" width="450px"|[[Grafika:TC_M4_Slajd10.png]]
|valign="top" width="450px"|[[Grafika:TC_M4_Slajd10.png]]
|valign="top"|
|valign="top"|Wyznaczymy macierz blokującą dla kostki <math>k_1\,</math> funkcji EXTL z planszy 7.  Macierze  <math>F\,</math> i <math>R\,</math> tej funkcji podane są ponownie na niniejszej planszy. Zgodnie z definicją, skoro <math>k_1=(0100101)</math>, to dla uzyskania <math>B\,</math> wystarczy w macierzy <math>R\,</math> „zanegować” kolumny drugą, piątą i siódmą, co zaznaczono odpowiednimi kolorami.
 
|}
|}


Linia 91: Linia 103:
{| border="0" cellpadding="4" width="100%"
{| border="0" cellpadding="4" width="100%"
|valign="top" width="450px"|[[Grafika:TC_M4_Slajd11.png]]
|valign="top" width="450px"|[[Grafika:TC_M4_Slajd11.png]]
|valign="top"|
|valign="top"|Pokryciem kolumnowym macierzy <math>B=[b_{ij}]</math>, <math>i\epsilon left \{1,...,w\right \}\,</math>, <math>j\epsilon left \{1,...,n\right \}\,</math> jest zbiór <math>L\subseteq left \{1,...,n\right \}\,</math> taki, że dla każdego <math>i\epsilon left \{1,...,w\right \}\,</math> istnieje <math>j\epsilon L\,</math> , dla którego <math>b_{ij} = 1</math> . Pokrycie kolumnowe nazywamy minimalnym, jeżeli nie istnieje <math>L' \subseteq L\,</math>, który jest pokryciem macierzy <math>B\,</math>.
 
|}
|}



Wersja z 22:40, 28 sie 2006

Minimalizacja funkcji boolowskich metodą ekspansji.

Kolejną klasyczną metodą minimalizacji funkcji boolowskich jest metoda Quine’a-McCluskey’a . Jest ona wykonywana w dwóch etapach:

a) generacji implikantów prostych,

b) selekcji minimalnego zbioru implikantów wiernie reprezentującego funkcję f.

Mimo dużej złożoności obliczeniowej każdego z wyżej wymienionych etapów, metoda Quine’a-McCluskey’a jest najczęściej nauczaną metodą minimalizacji, głównie ze względu na podstawowy charakter jej procedur. Niestety – podobnie jak w przypadku tablic Karnaugha – jest to metoda absolutnie nieprzydatna do algorytmicznych obliczeń komputerowych. Dla potrzeb komputerowych systemów projektowania układów cyfrowych opracowano wiele nowych metod minimalizacji funkcji boolowskich. Najbardziej znaną i uznawaną za najskuteczniejszą jest metoda ESPRESSO opracowana w latach 80. na Uniwersytecie Kalifornijskim w Berkeley.


Metoda Espresso polega na iteracyjnym stosowaniu różnych procedur, z których najważniejsze to Ekspansja (Expand), Pokrycie nienadmiarowe (Irredundant Cover) i Uzupełnienie (Complement). Są to bardzo złożone procedury, których omówienie przekracza zakres niniejszego wykładu. Ich pełny opis można znaleźć w książce Brayton R., Hachtel G.D., McMullen C., and Sangiovanni-Vincentelli A.: Logic Minimization Algorithms for VLSI Synthesis. Kluwer Academic Publishers, Boston, 1984 lub w podręczniku Synteza układów logicznych.

Najprostszą i najogól¬niejszą procedurą metody ESPRESSO jest procedura Ekspansji. Sama procedura ekspansji wykorzystuje znaną od dawna metodę powiększania mintermu kϵF w taki sposób, aby powiększona kostka nie zawierała żadnego mintermu należącego do zbioru wektorów zerowych funkcji. Ponieważ właściwie powiększony minterm zbioru F może być implikantem funkcji, odpowiednio zmodyfikowana metoda ekspansji może być stosowana autonomicznie jako niezależna metoda minimalizacji funkcji boolowskich. Metoda ta została zrealizowana w programie PANDOR. Program ten jest udostępniony na stronie internetowej www.zpt.tele.pw.edu.pl w katalogu OPROGRAMOWANIE.

Pojęciem podstawowym w metodzie ekspansji jest – podobnie jak w innych metodach minimalizacji – pojęcie kostki. Kostkami nazywać będziemy ciągi elementów ze zbioru {0,1,*} . Kostki będziemy oznaczać nieindeksowanymi literami, na przykład k , a ich składowe będziemy indeksowali, na przykład ki . Również, w celu uproszczenia oznaczeń kostki (i wektory) będziemy zapisywać bez przecinków. Na przykład (*,1,*,0,1) zapiszemy jako (*1*01).

Kostka to uproszczony zapis zbioru wektorów binarnych. Kostka K=(0*1*) reprezentuje zbiór wektorów:

0010001101100111

Kostka reprezentuje również niepełny iloczyn zmiennych binarnych: Na przykład kostkę K=0*1* można zapisać jako x1x3


W metodzie ekspansji podobnie jak w standardzie Espresso zbiór wektorów (w ogólności kostek), dla których funkcja f=1 oznacza się F. Natomiast zbiór tych wektorów (kostek), dla których funkcja f=0 oznacza się R.

Na planszy przedstawiono tablicę prawdy funkcji boolowskiej 7-argumentowej oraz podano odpowiednie zbiory F i R tej funkcji. Funkcję tę w dalszej części wykładu oznaczać będziemy EXTL. Wektory zbioru F oznaczono symbolami k1,...,k5 .

Ekspansja jest procesem działającym na kostkach zbiorów F i R, a jej celem jest uzyskanie dla danej kϵF kostki k tak dużej, jak to tylko możliwe (tzn. z możliwie dużą liczbą pozycji o wartości *) i nie pokrywającej żadnego wektora zbioru R. W swoich obliczeniach Ekspansja wykorzystuje tzw. macierz blokującą B.

Macierzą blokującą (kostkę k) nazywać będziemy macierz:

B(k,R)=[bij] , 1i|R| , 1jn

w której każdy element bijϵ{0,1} jest definiowany następująco:

bij=1 , jeśli kj=1 oraz rij=0 lub kj=0 oraz rij=1 ;

bij=0, w pozostałych przypadkach.

W przypadku funkcji opisanej wektorami binarnymi macierz blokująca dla danej kostki kϵF powstaje z macierzy R przez zanegowanie tych kolumn R, których pozycje są wyznaczone przez pozycje jedynek w kostce kϵF.


Wyznaczymy macierz blokującą dla kostki k1 funkcji EXTL z planszy 7. Macierze F i R tej funkcji podane są ponownie na niniejszej planszy. Zgodnie z definicją, skoro k1=(0100101), to dla uzyskania B wystarczy w macierzy R „zanegować” kolumny drugą, piątą i siódmą, co zaznaczono odpowiednimi kolorami.

Pokryciem kolumnowym macierzy B=[bij], Parser nie mógł rozpoznać (błąd składni): {\displaystyle i\epsilon left \{1,...,w\right \}\,} , Parser nie mógł rozpoznać (błąd składni): {\displaystyle j\epsilon left \{1,...,n\right \}\,} jest zbiór Parser nie mógł rozpoznać (błąd składni): {\displaystyle L\subseteq left \{1,...,n\right \}\,} taki, że dla każdego Parser nie mógł rozpoznać (błąd składni): {\displaystyle i\epsilon left \{1,...,w\right \}\,} istnieje jϵL , dla którego bij=1 . Pokrycie kolumnowe nazywamy minimalnym, jeżeli nie istnieje LL, który jest pokryciem macierzy B.