Rechnerstrukturen WS 2012/13

Werbung
Rechnerstrukturen WS 2012/13
◮
Boolesche Funktionen und Schaltnetze
◮ Repräsentationen boolescher Funktionen (Wiederholung)
◮ Normalformen boolescher Funktionen (Wiederholung)
◮ Repräsentation boolescher Funktionen mit OBDDs
◮ Synthese von OBDDs für boolesche Funktionen
◮ Schaltnetze
Hinweis: Folien teilweise a. d. Basis von Materialien von Thomas Jansen
Fink
Rechnerstrukturen
¶·º»
Boole. Fkt.
23. Oktober 2012
1
Repräsentationen boolescher Funktionen
Definition 4
Seien n, m ∈ N. Eine Funktion f : B n → B m heißt boolesche Funktion.
Notation
B n = Menge aller n-stelligen Tupel über B
Beispiel B 2 = {(0, 0), (0, 1), (1, 0), (1, 1)}
Anzahl boolescher Funktionen
boolesche Funktion f : B n → B m als Wertetabelle darstellbar
mit |B n | = 2n Zeilen
und |B m | = 2m Möglichkeiten je Zeile
⇒ 2m
2n
Beispiel
Fink
Rechnerstrukturen
n
= 2m·2 boolesche Funktionen f : B n → B m
2
21·2 = 24 = 16 boolesche Funktionen f : B 2 → B
¶·º»
Boole. Fkt.
2
Alle booleschen Funktionen f : B 2 → B
x
y
f1
f2
f3
f4
f5
f6
f7
f8
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
1
1
1
1
1
0
0
0
1
1
0
0
1
1
1
1
0
1
0
1
0
1
0
1
Nullfkt.
AND
0
∧
Proj.
x
Proj.
XOR
OR
y
⊕
∨
x
y
f9
f10
f11
f12
f13
f14
f15
f16
0
0
1
1
1
1
1
1
1
1
0
1
0
0
0
0
1
1
1
1
1
0
0
0
1
1
0
0
1
1
1
1
0
1
0
1
0
1
0
1
NOR
Äquiv.
Negation
Negation
Impl.
NAND
Einsfkt.
⇔
¬y
¬x
⇒
1
Verwenden im Weiteren ∧ (Konjunktion), ∨ (Disjunktion), ¯ (Negation)
Fink
Rechnerstrukturen
¶·º»
Boole. Fkt.
3
Darstellung boolescher Funktionen
gerade gesehen
x
0
0
1
1
y
0
1
0
1
Wertetabelle
(Orientierung meistens wie hier)
f7
0
1
1
0
bei fester Reihenfolge
Wertevektor
f7 : (0, 1, 1, 0)
Fink
Rechnerstrukturen
¶·º»
Boole. Fkt.
4
Index und Minterm
Index
0
1
2
3
x
0
0
1
1
y
0
1
0
1
f7
0
1
1
0
nicht einschlägig
einschlägig
einschlägig
nicht einschlägig
Definition
Die boolesche Funktion, für die nur der Index i einschlägig ist, heißt
Minterm zum Index i .
Ein Minterm ist nur mit Negationen und Konjunktionen darstellbar:
(
0
xj
xj =
1
xj
und dann Konjunktion all dieser Literale (=
ˆ [negierte] Variable)
Fink
Rechnerstrukturen
¶·º»
Boole. Fkt.
5
Normalformen
Definition 8
◮
Die Darstellung von f als Disjunktion all ihrer Minterme zu
einschlägigen Indizes heißt disjunktive Normalform (DNF).
◮
Die Darstellung von f als XOR-Verknüpfung all ihrer Minterme
zu einschlägigen Indizes heißt Ringsummen-Normalform (RNF).
Anmerkung
Normalformen sind eindeutig.
Index x y
0
0 0
Beispiel
1
0 1
2
1 0
3
1 1
DNF von f7 x y ∨ x y
Fink
Rechnerstrukturen
f7
0
1
1
0
Minterm
xy
xy
xy
xy
RNF von f7
¶·º»
Boole. Fkt.
xy ⊕xy
6
Funktionale Vollständigkeit
Beobachtung
jede boolesche Funktion f : B n → B nur mittels
Konjunktion, Disjunktion und Negation darstellbar
(z. B. durch ihre DNF)
Definition 5
Eine Menge F von booleschen Funktionen heißt funktional
vollständig, wenn sich jede boolesche Funktion durch Einsetzen und
Komposition von Funktionen aus F darstellen lässt.
Satz 6
{∧, ∨, ¬} ist funktional vollständig.
Fink
Rechnerstrukturen
¶·º»
Boole. Fkt.
7
Darstellungen boolescher Funktionen
Wozu stellt man boolesche Funktionen dar?
◮ Realisierung
◮ Verifikation
◮ Fehleranalyse
◮ Synthese
◮ ...
Wo stellt man boolesche Funktionen dar?
◮ auf dem Papier
◮ im Computer
Probleme
◮ Wertetabelle, Wertevektor immer groß
◮ Normalformen oft groß
◮ Normalformen unterstützen gewünschte Operationen kaum
Fink
Rechnerstrukturen
Wunsch
¶·º»
andere Repräsentation
Boole. Fkt.
8
Eine Datenstruktur für boolesche Funktionen
Ziel
f : B n → B darstellen
Wünsche
◮
zu einer Belegung x1 , x2 , . . . , xn schnell den Funktionswert
f (x1 , x2 , . . . , xn ) ausrechnen können
◮
Funktionen schnell auf Gleichheit testen können
◮
Funktionen schnell manipulieren (z. B. eine Variable konstant
setzen) können
◮
schnell eine Null-Eingabe/eine Eins-Eingabe finden können
◮
Funktionen möglichst klein repräsentieren
◮
...
Ordered Binary Decision Diagrams
Fink
Rechnerstrukturen
¶·º»
Boole. Fkt.
9
OBDDs
erster Schritt
dann
◮
◮
◮
◮
◮
◮
Festlegen einer Variablenordnung π
(z. B. π = (x3 , x1 , x2 , x4 ))
x4
1
Baue πOBDD aus Knoten
oder
1 x3
x2
nach folgenden Regeln:
und Kanten
Knoten mit Variablen, 0 oder 1 markiert
Kanten mit 0 oder 1 markiert
Variablen-Knoten mit je einer ausgehenden 0- und 1-Kante
Konstanten-Knoten ohne ausgehende Kante
genau ein Knoten ohne eingehende Kante
Kanten zwischen Variablenknoten beachten π
Fink
Rechnerstrukturen
¶·º»
Boole. Fkt.
10
πOBDD – Ein Beispiel
Variablenordnung π = (x1 , x2 , x3 )
Beispiel Auswertung f (1, 0, 1)
x1 = 1, x2 = 0, x3 = 1
f (1, 0, 1) = 1
x1
0
1
x2
x2
0
1
x3
0
Fink
Rechnerstrukturen
1
0
x3
1
x3
1
0
1
0
0
0
0
1
¶·º»
x3
1
0
1
1
1
1
Boole. Fkt.
11
πOBDD-Größe
gleichartige Senken verschmelzen
x1
0
1
x2
x2
0
1
x3 1
x3
0
Fink
Rechnerstrukturen
0
0
1
1
x3
x3
0 1
0
¶·º»
1
Boole. Fkt.
0
1
12
πOBDD-Größe
gleichartige Knoten verschmelzen
x1
0
1
x2
x2
0
1
x3 1
x3
0
Fink
Rechnerstrukturen
0
0
1
1
x3
0 1
0
¶·º»
1
Boole. Fkt.
13
πOBDD-Größe
Knoten ohne Einfluss eliminieren
x1
0
1
x2
x2
0
1
x3 1
1
x3
0
Fink
Rechnerstrukturen
0
0
1
0
¶·º»
1
Boole. Fkt.
14
πOBDD-Größe
Knoten ohne Einfluss eliminieren
x1
0
1
x2
0
1
x3 1
x3
0
Fink
Rechnerstrukturen
0
1
0
¶·º»
1
Boole. Fkt.
15
πOBDD-Größe
Knoten ohne Einfluss eliminieren
x1
0
1
x2
0
Größe minimal
1
x3 1
0
Fink
Rechnerstrukturen
0
¶·º»
1
Boole. Fkt.
16
Alternative Darstellung eines πOBDDs
x1
x2
x3
Fink
Rechnerstrukturen
0
¶·º»
1
Boole. Fkt.
17
OBDD-Reduzierung
Satz 9
Die erschöpfende Anwendung der
◮
Verschmelzungsregel Knoten mit gleicher Markierung und
”
gleichen Nachfolgern können verschmolzen werden“ und
◮
Eliminationsregel Ein Knoten mit gleichem Null- und
”
Einsnachfolger kann entfernt werden“
in beliebiger Reihenfolge führt zum reduzierten πOBDD.
reduziert = minimale Größe und eindeutig
Fink
Rechnerstrukturen
¶·º»
Boole. Fkt.
18
Erzeugung von OBDDs
Wie kommt man zu einem πOBDD? für f : B n → B?
Kommt darauf an, wie f gegeben ist. . .
Welche Formate kennen wir?
◮
Funktionstabelle
◮
Wertevektor
◮
boolescher Ausdruck
◮
Normalformen
◮
informale Beschreibung
◮
OBDD
◮
...
Fink
Rechnerstrukturen
¶·º»
Boole. Fkt.
19
Erzeugung von OBDDs
Man will nicht irgendein πOBDD,
man will das reduzierte πOBDD.
Welchen Weg kennen wir, das zu bekommen?
1. Erstelle vollständigen binären Baum über den Variablen, schreibe
passende Funktionswerte an die Senken.
2. Reduziere.
Ist das ein vernünftiges Vorgehen?
Nur, wenn vollständiger Binärbaum nicht wesentlich größer als
Eingabe und reduziertes πOBDD!
Fink
Rechnerstrukturen
¶·º»
Boole. Fkt.
20
πOBDD aus vollständigem Binärbaum
Variablenordnung π = (x1 , x2 , x3 )
x1
0
1
x2
x2
0
1
x3
0
Fink
Rechnerstrukturen
1
0
x3
1
x3
1
0
1
0
0
0
0
1
¶·º»
x3
1
0
1
1
1
1
Boole. Fkt.
21
Größe von Repräsentationen boolescher Funktionen
Wie groß ist ein πOBDD für f , das vollständiger Binärbaum ist?
i -te Ebene 2i −1 Knoten
n−1
n
P i
P
2 = 2n − 1 + Senken
2i −1 = Senken +
Senken +
Beobachtung
also
i =0
i =1
Für welche Eingabeformate ist das also akzeptabel?
sicher nur für Wertetabelle und Wertevektor
also Vorgehen fast immer nicht akzeptabel
Erkenntnis
Fink
Rechnerstrukturen
Wir brauchen eine Alternative.
¶·º»
Boole. Fkt.
22
Schrittweise OBDD-Konstruktion
Idee
baue πOBDD schrittweise aus
einfachsten“ πOBDDs zusammen
”
0
klar πOBDD für Nullfunktion
1
klar πOBDD für Einsfunktion
0
klar πOBDD für xi
0
xi
1
1
klar πOBDD für ¬f aus πOBDD für f
durch Invertierung der Senkenmarkierungen
¶ · º » Boole. Fkt.
Fink
Rechnerstrukturen
23
OBDD-Synthese
πOBDD G1 für f1 : B n → B
πOBDD G2 für f2 : B n → B
πOBDD G
für f1 ⊗ f2
für beliebige boolesche Funktion ⊗ : B 2 → B
Wichtig
Idee
gleiche Variablenordnung π
Durchlaufe beide πOBDDs parallel.
Fink
Rechnerstrukturen
¶·º»
Boole. Fkt.
24
Ein einfaches Beispiel
x4 1
x4 1
0
0
x1 2
0
0 3
x4 ∨ x4 x1
1
x1 2
1
1
0
0
x4 (1,1)
x1 (2,2)
1
0
1
1 4 0 3
1
1 4
0 (3,3)
1 (4,3)
(x4 ∨ x4 x1 ) ⊕ (x4 x1 ) = x4
x4 x1
Variablenordnung x4 , x2 , x1 , x3
boolesche Verknüpfung ⊕
Fink
Rechnerstrukturen
¶·º»
Boole. Fkt.
25
πOBDD-Synthese
πOBDD G1 für f1 : B n → B
πOBDD G2 für f2 : B n → B
πOBDD G
für f1 ⊗ f2
für beliebige boolesche Funktion ⊗ : B 2 → B
G1 hat Knoten v1 , v2 , . . . , vs1 .
G2 hat Knoten w1 , w2 , . . . , ws2 .
Wir starten in Wurzeln v1 und w1 .
Mit dem aktuellen Knotenpaar machen wir einen Synthese-Schritt.
Ergebnis des Synthese-Schritts: 1 Knoten des Ergebnis-πOBDD.
Fink
Rechnerstrukturen
¶·º»
Boole. Fkt.
26
Ein Synthese-Schritt
aktuelle Knoten
vi , wj
vi hat Markierung mi ∈ {x1 , x2 , . . . , xn , 0, 1}
wj hat Markierung mj ∈ {x1 , x2 , . . . , xn , 0, 1}
Falls mi ∈
/ {0, 1}
vi ,0 ist Nullnachfolger von vi
vi ,1 ist Einsnachfolger von vi
Falls mj ∈
/ {0, 1}
wj,0 ist Nullnachfolger von wj
wj,1 ist Einsnachfolger von wj
Wir unterscheiden mehrere Fälle
nach den Markierungen mi und mj .
Fink
Rechnerstrukturen
¶·º»
Boole. Fkt.
27
1. Fall: gleiche Variable
mi = mj = xk
Erzeuge Knoten (vi , wj ) mit Markierung xk .
Nullnachfolger
der von Synthese-Schritt(vi ,0 , wj,0 )
erzeugte Knoten
Einsnachfolger
der von Synthese-Schritt(vi ,1, wj,1 )
erzeugte Knoten
Fink
Rechnerstrukturen
¶·º»
Boole. Fkt.
28
2. Fall: verschiedene Variable
mi = xk , mj = xk ′ , xk vor xk ′
Erzeuge Knoten (vi , wj ) mit Markierung xk .
Nullnachfolger
der von Synthese-Schritt(vi ,0 , wj )
erzeugte Knoten
Einsnachfolger
der von Synthese-Schritt(vi ,1, wj )
erzeugte Knoten
Fink
Rechnerstrukturen
¶·º»
Boole. Fkt.
29
3. Fall: verschiedene Variable
mi = xk , mj = xk ′ , xk hinter xk ′
Erzeuge Knoten (vi , wj ) mit Markierung xk ′ .
Nullnachfolger
der von Synthese-Schritt(vi , wj,0 )
erzeugte Knoten
Einsnachfolger
der von Synthese-Schritt(vi , wj,1 )
erzeugte Knoten
Fink
Rechnerstrukturen
¶·º»
Boole. Fkt.
30
4. Fall: eine Variable, eine Senke
mi = xk , mj ∈ {0, 1}
Idee
Konstante liegen in der Variablenordnung ganz hinten
Erzeuge Knoten (vi , wj ) mit Markierung xk .
Nullnachfolger
der von Synthese-Schritt(vi ,0 , wj )
erzeugte Knoten
Einsnachfolger
der von Synthese-Schritt(vi ,1, wj )
erzeugte Knoten
Fink
Rechnerstrukturen
¶·º»
Boole. Fkt.
31
5. Fall: eine Variable, eine Senke
mi ∈ {0, 1}, mj = xk
Erzeuge Knoten (vi , wj ) mit Markierung xk .
Nullnachfolger
der von Synthese-Schritt(vi , wj,0 )
erzeugte Knoten
Einsnachfolger
der von Synthese-Schritt(vi , wj,1 )
erzeugte Knoten
Fink
Rechnerstrukturen
¶·º»
Boole. Fkt.
32
6. Fall: zwei Senken
mi ∈ {0, 1}, mj ∈ {0, 1}
Erzeuge mit mi ⊗ mj markierte Senke.
Zusammenfassung zum Merken
1. Erzeuge Knoten mit weiter vorne liegender“ Markierung.
”
2. Wenn beide Knoten mit gleicher Variabler markiert, aus beiden
Knoten fortschreiten.
3. Bei ungleicher Variablenmarkierung, nur aus weiter vorne
”
liegenden“ Knoten fortschreiten, im anderen Knoten warten.
4. Abbruch, wenn in beiden Knoten Senken erreicht.
Fink
Rechnerstrukturen
¶·º»
Boole. Fkt.
33
Noch ein Beispiel
0
x1 (1,1)
1
x2 (2,1)
0
x1 1
0 2
1
0
x2 1
1 3 0 2
x1
0
1
x2 (3,1)
0
1
1
1 3
0 (2,2)
1 (3,2) 0
(2,3)
x1 ⊕ x2
x2
(3,3)
Variablenordnung x1 , x2
boolesche Verknüpfung ⊕
Fink
Rechnerstrukturen
¶·º»
Boole. Fkt.
34
Größenzuwachs bei Synthese
Wie groß wird das neue πOBDD?
Beobachtung
also
für je zwei Knoten höchstens ein neuer Knoten
aus πOBDDs mit s1 und s2 Knoten
neues πOBDD mit ≤ s1 · s2 Knoten
Beobachtungen
◮
Ergebnis-πOBDD in der Regel nicht reduziert
◮
Größe s1 · s2 manchmal erforderlich (ohne Senken)
Fink
Rechnerstrukturen
¶·º»
Boole. Fkt.
35
Operationen auf OBDDs
Erinnerung
OBDDs unterstützen viele wichtige Operationen
√
1. Reduzierung
√
2. Synthese
√
3. Auswertung
4. Konstantsetzung xi = c
◮
◮
OBDD durchlaufen
Vorgänger jedes xi -Knotens auf c-Nachfolger des xi -Knotens
umsetzen
5. Gleichheitstest
◮
◮
◮
◮
Fink
Rechnerstrukturen
√
√
Voraussetzung gleiche Variablenordnung π
beide reduzierte πOBDDs ab der Quelle parallel durchlaufen
bei ungleicher Markierung ungleich
rekursiv für Null- und Einsnachfolger
¶·º»
Boole. Fkt.
36
Operationen auf OBDDs (Fortsetzung)
Erinnerung
OBDDs unterstützen viele wichtige Operationen
6. Null-/Einseingabe finden
◮
◮
√
mit OBDD-Durchlauf Vorgänger-Zeiger berechnen
von passender Senke Aufstieg bis zur Quelle, dabei Belegung
merken
7. Null-/Einseingaben zählen
◮
◮
◮
◮
◮
◮
Fink
Rechnerstrukturen
√
Beobachtung über Quelle laufen alle 2n Eingaben
Beobachtung jede Knoten halbiert Anzahl Eingaben und leitet
Hälften jeweils über 0- und 1-Nachfolger
OBDD von der Quelle durchlaufen
an jedem Knoten Anzahl Eingaben notieren
bei mehrfach erreichten Knoten Anzahlen addieren
Summe an der passenden Senke ablesen (für reduziertes πOBDD)
¶·º»
Boole. Fkt.
37
Schaltnetze
bis jetzt
Diskussion (theoretischer) Grundlagen
Wo bleibt die Hardware?
kommt jetzt
Wunsch
klar
aber immer noch abstrakt
Realisierung boolescher Funktionen in Hardware
brauchen Realisierung einer funktional-vollständigen
Menge boolescher Funktionen
Erinnerung
Realisierung von NAND reicht aus
+V
xy
Beobachtung
x
realisiert NAND(x, y )
y
Fink
Rechnerstrukturen
¶·º»
Boole. Fkt.
38
Gatter
Realisierung mit Transistoren . . . falsche Ebene!
Grundlage hier
einfache logische Bausteine (Gatter)
Bausteine für Negation, Konjunktion, Disjunktion, . . .
Spielregeln
◮
Eingänge mit Variablen oder Konstanten belegt
◮
nur Verbindungen von Ausgängen zu Eingängen
◮
keine Kreise
Ergebnis heißt Schaltnetz
Fink
Rechnerstrukturen
¶·º»
Boole. Fkt.
39
Symbole für Gatter (1)
Funktion
DIN 40700
y =x
x
y
y = x1 ∧ x2 ∧ x3
x1
x2
x3
y
y = x1 ∧ x2 ∧ x3
x1
x2
x3
y
Fink
Rechnerstrukturen
¶·º»
DIN EN 60617
IEEE
x
1
y
x
y
x1
x2
x3
&
y
x1
x2
x3
y
x1
x2
x3
&
y
x1
x2
x3
y
Boole. Fkt.
40
Symbole für Gatter (2)
Funktion
DIN 40700
y = x1 ∨ x2 ∨ x3
x1
x2
x3
y
y = x1 ∨ x2 ∨ x3
x1
x2
x3
y
y = x1 ⊕ x2
x1
y
x2
y = x1 x2 ∨ x1 x2
Fink
Rechnerstrukturen
IEEE
x1
x2
x3
>1
y
x1
x2
x3
y
x1
x2
x3
>1
y
x1
x2
x3
y
=1
y
x1
x1
y
¶·º»
y
x2
x2
x1
x2
DIN EN 60617
x1
x1
y
y
x
2
Boole.
Fkt.
x2
41
Schaltnetz-Bewertung
Und jetzt beliebige Schaltnetze entwerfen?
mindestens relevant
Größe und Geschwindigkeit
◮
Schaltnetzgröße (= Anzahl der Gatter) wegen Kosten,
Stromverbrauch, Verlustleistung, Zuverlässigkeit, . . .
◮
Schaltnetztiefe (= Länge längster Weg Eingang
wegen Schaltgeschwindigkeit
◮
Fan-In (= max. Anzahl eingehender Kanten) wegen
Realisierungsaufwand
◮
Fan-Out (= max. Anzahl ausgehender Kanten) wegen
Realisierungsaufwand
◮
. . . (z. B. Anzahl Gattertypen, Testbarkeit, Verifizierbarkeit)
Fink
Rechnerstrukturen
¶·º»
Boole. Fkt.
Ausgang)
42
Was wir schon wissen
Jede boolesche Funktion kann mit einem {∧, ∨, ¬}- bzw. einem
{⊕, ∧, ¬}-Schaltnetz der Tiefe 3 realisiert werden.
Beweis
DNF, KNF oder RNF direkt umsetzen
Probleme
◮
Fan-In des tiefsten Gatters kann extrem groß sein
◮
Größe des Schaltnetzes oft inakzeptabel
Fink
Rechnerstrukturen
¶·º»
Boole. Fkt.
43
Beispiel: DNF
fbsp : B 3 → B, Wertevektor (1, 0, 0, 0, 1, 1, 1, 1)
f (x1 , x2 , x3 ) = x1 x2 x3 ∨ x1 x2 x3 ∨ x1 x2 x3 ∨ x1 x2 x3 ∨ x1 x2 x3
x1
1
&
&
x2
1
>1
&
f bsp
&
&
x
Fink 3
Rechnerstrukturen
1
¶·º»
Boole. Fkt.
44
Beispiel: RNF
fbsp : B 3 → B, Wertevektor (1, 0, 0, 0, 1, 1, 1, 1)
f (x1 , x2 , x3 ) = x1 x2 x3 ⊕ x1 x2 x3 ⊕ x1 x2 x3 ⊕ x1 x2 x3 ⊕ x1 x2 x3
x1
1
&
&
x2
1
=1
&
f bsp
&
&
x
Fink 3
Rechnerstrukturen
1
¶·º»
Boole. Fkt.
45
Beispiel: KNF
fbsp : B 3 → B, Wertevektor (1, 0, 0, 0, 1, 1, 1, 1)
f (x1 , x2 , x3 ) = (x1 ∨ x2 ∨ x3 ) ∧ (x1 ∨ x2 ∨ x3 ) ∧ (x1 ∨ x2 ∨ x3 )
x1
>1
x2
1
>1
x3
1
>1
Fink
Rechnerstrukturen
¶·º»
&
Boole. Fkt.
f bsp
46
Multiplexer
eine weitere Beispielfunktion . . .
aber eine in der Praxis sehr wichtige diesmal!
MUXd y1 , y2 , . . . , yd , x0 , x1 , . . . , x2d −1 = x(y1 y2 ··· yd )2
Beispiel
y1 y2
0 0
0 0
0 1
0 1
1 0
1 0
1 1
1 1
Fink
Rechnerstrukturen
y3
0
1
0
1
0
1
0
1
MUX3 (y1 , y2 , y3 , x0 , x1 , . . . , x7 )
x0
x1
x2
x3
x4
x5
x6
x7
¶·º»
Boole. Fkt.
47
Multiplexer
Warum ist MUX in der Praxis wichtig?
direkte Speicheradressierung
OBDD-Realisierung
Welche Variablenordnung π?
wohl sinnvoll
Adressvariablen zuerst
denn
Wir müssen uns sonst alle Datenvariablen merken!
Fink
Rechnerstrukturen
¶·º»
Boole. Fkt.
48
OBDD-Realisierung MUX3
Variablenordnung π = (y1 , y2 , y3 , x0 , x1 , x2 , x3 , x4 , x5 , x6 , x7 )
y1
0
1
y2
0
y2
1
0
y3
0
x0
y3
1
x1
0
y3
1
x2
0
x3
0
1
¶·º»
y3
1
x4
jeweils xi realisieren
Fink
Rechnerstrukturen
1
x5
0
x6
1
x7
xi
0
0
Boole. Fkt.
1
1
49
Einfluss von π auf OBDD-Größe
Beispiel
MUXd
gesehen
Variablenordnung π = (y1 , y2 , . . . , yd , x0 , x1 , . . . , x2d −1 )
Größe des reduzierten πOBDDs?
oben
unten
vollständiger Binärbaum über y1 , y2 , . . . , yd
20 + 21 + · · · + 2d−1 = 2d − 1 Knoten
je ein xi -Knoten und zwei Senken
2d + 2 Knoten
zusammen
Fink
Rechnerstrukturen
2d − 1 + 2d + 2 = 2d+1 + 1 Knoten
¶·º»
Boole. Fkt.
50
Einfluss von π auf OBDD-Größe
Beispiel
MUXd
gesehen
Variablenordnung π = (y1 , y2 , . . . , yd , x0 , x1 , . . . , x2d −1 )
Größe des reduzierten πOBDD 2d+1 + 1
Betrachte
Variablenordnung π = (x0 , x1 , . . . , x2d −1 , y1 , y2 , . . . , yd )
Größe des reduzierten πOBDDs?
Behauptung
Beweis
Fink
Rechnerstrukturen
d
∀x 6= x ′ ∈ {0, 1}2 : nach Lesen von x bzw. x ′
verschiedene Knoten erreicht
durch Widerspruch
¶·º»
Boole. Fkt.
51
Widerspruchsbeweis zur OBDD-Größe
d
∀x 6= x ′ ∈ {0, 1}2 : nach Lesen von x bzw. x ′
verschiedene Knoten erreicht
Behauptung
Annahme
Betrachte
Betrachte
Beobachtung
aber
d
für x 6= x ′ ∈ {0, 1}2 gleiche Knoten v erreicht
i = min{j | xj 6= xj′ }
y1 , y2 , . . . , yd mit (y1 y2 · · · yd )2 = i
MUXd (y1 , y2 , . . . , yd , x) = xi
6=xi′ = MUXd (y1 , y2 , . . . , yd , x ′ )
OBDD berechnet gleichen Wert, da gleicher Knoten erreicht
also
minimales OBDD für π = (x0 , x1 , . . . , x2d −1 , y1 , y2 , . . . , yd )
d
hat Größe mindestens 22 − 1 (Binärbaum d. Tiefe 2d )
d min. OBDD-Größe π = (d, x) min. OBDD-Größe π = (x, d)
2
9
≥ 15
33
≥
65
535
4
Fink
Rechnerstrukturen
¶ · º » Boole. Fkt.
8
513
≥ 1,1579 · 1077
52
Schaltnetz für MUX3
x0
&
x1
&
x2
&
x3
&
x4
&
>1
x5
&
x6
&
x7
Fink
Rechnerstrukturen
MUX 3
&
1
1
1
y1
y2
y3
¶·º»
Boole. Fkt.
53
Herunterladen