k622-Binaere_Entscheidungsdiagramme_BDDs_Konstruktion_von_BDDs
k622-Binaere_Entscheidungsdiagramme_BDDs_Konstruktion_von_BDDs
Page 1
Kapitel 6 – Formale Spezifikation von Hardware
- Boolesche Ausdrücke (Wiederholung)
- Binäre Entscheidungsdiagramme (BDDs)
2.1 Kanonische Darstellung, ROBDDs
2.2 Konstruktion von BDDs
2.3 ITE-Beispiel, Variablenordnung - Anwendung: Formale Verifikation mit BDDs
Albert-Ludwigs-Universität Freiburg
Prof. Dr. Armin Biere
Institut für Informatik
Page 2
Kofaktoren und Shannon-Zerlegung
Für eine Boolesche Funktion
für alle
Entsprechend heißt
der Kofaktor von
Shannonscher Entwicklungssatz: Es gilt für beliebiges
Page 3
Zusammenhang Kompositionsregel, Kofaktoren und Shannon-Zerlegung
Sei
Also sind die Subfunktionen
Es folgt dann:
Somit wird an
Page 4
Konstruktion von BDDs
Über die Kofaktoren.
Beispiel: Um ein
und
Sie stellen die Söhne des Knotens
Aus einem Booleschen Ausdruck über Boolesche Operationen.
Aus einem Schaltkreis über Boolesche Operationen (Symbolische Simulation).
Page 5
BDD des Carry-Bits
Funktionstabelle für
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 1 | 0 |
| 0 | 1 | 0 | 1 | 0 |
| 0 | 1 | 1 | 1 | 1 |
| 1 | 0 | 0 | 0 | 0 |
| 1 | 0 | 1 | 1 | 0 |
| 1 | 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 1 | 1 |
Page 6
BDD des Carry-Bits
(Siehe Funktionstabelle auf vorheriger Seite.)
Page 7
BDD des Carry-Bits
Page 8
BDD des Carry-Bits
Page 9
BDD des Carry-Bits
Kofaktor
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
Page 10
BDD des Carry-Bits
Kofaktor
| 0 | 1 |
| 1 | 1 |
Page 11
BDD des Carry-Bits
Kofaktor
| 0 | 0 |
| 1 | 1 |
Page 12
BDD des Carry-Bits
BDD für
Page 13
BDD des Carry-Bits
BDD-Knoten:
Page 14
BDD des Carry-Bits
BDD-Knoten:
Page 15
BDD des Carry-Bits
BDD-Knoten:
Page 16
BDD des Carry-Bits
Funktionstabelle (wie auf Seite 5).
Page 17
BDD des Carry-Bits
Page 18
BDD des Carry-Bits
Page 19
BDD des Carry-Bits
Kofaktor
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
Page 20
BDD des Carry-Bits
Kofaktor
| 0 | 0 |
| 1 | 1 |
Page 21
BDD des Carry-Bits
Kofaktor
| 0 | 0 |
| 1 | 0 |
Page 22
BDD des Carry-Bits
BDD-Knoten:
Page 23
BDD des Carry-Bits
BDD-Knoten:
Page 24
BDD des Carry-Bits
BDD-Knoten:
Page 25
BDD des Carry-Bits
BDD-Knoten:
Page 26
BDD des Carry-Bits
Funktionstabelle (wie auf Seite 5).
Page 27
BDD des Carry-Bits
Page 28
BDD des Carry-Bits
BDD-Knoten:
Page 29
BDD des Carry-Bits
Reduziertes BDD:
Page 30
Syntaktische BDD Top-Down Konstruktion
wobei nun
nur einmal berechnet wird (cache!).
Page 31
BDD aus einem Booleschen Ausdruck
Konstruiere (bottom-up) BDD
Generiere bdd_x1, bdd_x2, bdd_x3, bdd_x4.
bdd_x1x2 := AND(bdd_x1, bdd_x2)
bdd_x1x2x3 := AND(bdd_x1x2, bdd_x3)
bdd_x2' := NOT(bdd_x2)
bdd_x2'x4 := AND(bdd_x2', bdd_x4)
bdd_x3' := NOT(bdd_x3)
bdd_x3'x4 := AND(bdd_x3', bdd_x4)
bdd_x1x2x3+x2'x4 := OR(bdd_x1x2x3, bdd_x2'x4)
bdd_f := OR(bdd_x1x2x3+x2'x4, bdd_x3'x4)
Berechnung von AND, OR, NOT: Später!
Page 32
BDD aus Schaltkreis: Symbolische Simulation
Schaltkreis mit Eingängen
Page 33
BDD aus Schaltkreis: Symbolische Simulation
BDD-Operationen:
bdd_x1, bdd_x2, ..., bdd_x8
Page 34
BDD aus Schaltkreis: Symbolische Simulation
BDD-Operationen:
bdd_x1, bdd_x2, ..., bdd_x8
bdd_9 := XOR(bdd_x2, bdd_x3) # x2 ⊕ x3
Page 35
BDD aus Schaltkreis: Symbolische Simulation
BDD-Operationen:
bdd_x1, bdd_x2, ..., bdd_x8
bdd_9 := XOR(bdd_x2, bdd_x3) # x2 ⊕ x3
bdd_10 := AND(bdd_x4, bdd_x5) # x4 · x5
Page 36
BDD aus Schaltkreis: Symbolische Simulation
BDD-Operationen:
bdd_x1, bdd_x2, ..., bdd_x8
bdd_9 := XOR(bdd_x2, bdd_x3) # x2 ⊕ x3
bdd_10 := AND(bdd_x4, bdd_x5) # x4 · x5
bdd_11 := XOR(bdd_9, bdd_10) # x2 ⊕ x3 ⊕ x4·x5
Page 37
BDD aus Schaltkreis: Symbolische Simulation
BDD-Operationen:
bdd_x1, bdd_x2, ..., bdd_x8
bdd_9 := XOR(bdd_x2, bdd_x3) # x2 ⊕ x3
bdd_10 := AND(bdd_x4, bdd_x5) # x4 · x5
bdd_11 := XOR(bdd_9, bdd_10) # x2 ⊕ x3 ⊕ x4·x5
bdd_out1 := OR(bdd_x1, bdd_11) # (x2 ⊕ x3 ⊕ x4·x5) + x1
Page 38
BDD aus Schaltkreis: Symbolische Simulation
BDD-Operationen:
bdd_x1, bdd_x2, ..., bdd_x8
bdd_9 := XOR(bdd_x2, bdd_x3) # x2 ⊕ x3
bdd_10 := AND(bdd_x4, bdd_x5) # x4 · x5
bdd_11 := XOR(bdd_9, bdd_10) # x2 ⊕ x3 ⊕ x4·x5
bdd_out1 := OR(bdd_x1, bdd_11) # (x2 ⊕ x3 ⊕ x4·x5) + x1
bdd_12 := OR(bdd_x6, bdd_x7) # x6 + x7
Page 39
BDD aus Schaltkreis: Symbolische Simulation
BDD-Operationen:
bdd_x1, bdd_x2, ..., bdd_x8
bdd_9 := XOR(bdd_x2, bdd_x3) # x2 ⊕ x3
bdd_10 := AND(bdd_x4, bdd_x5) # x4 · x5
bdd_11 := XOR(bdd_9, bdd_10) # x2 ⊕ x3 ⊕ x4·x5
bdd_out1 := OR(bdd_x1, bdd_11) # (x2 ⊕ x3 ⊕ x4·x5) + x1
bdd_12 := OR(bdd_x6, bdd_x7) # x6 + x7
bdd_13 := AND(bdd_10, NOT(bdd_x8)) # x8' · x4 · x5
Page 40
BDD aus Schaltkreis: Symbolische Simulation
BDD-Operationen:
bdd_x1, bdd_x2, ..., bdd_x8
bdd_9 := XOR(bdd_x2, bdd_x3) # x2 ⊕ x3
bdd_10 := AND(bdd_x4, bdd_x5) # x4 · x5
bdd_11 := XOR(bdd_9, bdd_10) # x2 ⊕ x3 ⊕ x4·x5
bdd_out1 := OR(bdd_x1, bdd_11) # (x2 ⊕ x3 ⊕ x4·x5) + x1
bdd_12 := OR(bdd_x6, bdd_x7) # x6 + x7
bdd_13 := AND(bdd_10, NOT(bdd_x8)) # x8' · x4 · x5
bdd_14 := AND(bdd_12, bdd_x8) # x8 · (x6 + x7)
Page 41
BDD aus Schaltkreis: Symbolische Simulation
BDD-Operationen:
bdd_x1, bdd_x2, ..., bdd_x8
bdd_9 := XOR(bdd_x2, bdd_x3) # x2 ⊕ x3
bdd_10 := AND(bdd_x4, bdd_x5) # x4 · x5
bdd_11 := XOR(bdd_9, bdd_10) # x2 ⊕ x3 ⊕ x4·x5
bdd_out1 := OR(bdd_x1, bdd_11) # (x2 ⊕ x3 ⊕ x4·x5) + x1
bdd_12 := OR(bdd_x6, bdd_x7) # x6 + x7
bdd_13 := AND(bdd_10, NOT(bdd_x8)) # x8' · x4 · x5
bdd_14 := AND(bdd_12, bdd_x8) # x8 · (x6 + x7)
bdd_out2 := OR(bdd_13, bdd_14) # x8'·x4·x5 + x8·(x6+x7)
Page 42
Beispiel: BDD des Carry-Bits
Volladdierer-Schaltkreis:
Page 43
Beispiel: BDD des Carry-Bits
BDD-Knoten:
Page 44
Beispiel: BDD des Carry-Bits
BDD-Knoten:
Page 45
Beispiel: BDD des Carry-Bits
BDD-Knoten:
Page 46
Beispiel: BDD des Carry-Bits
BDD-Knoten:
Page 47
Beispiel: BDD des Carry-Bits
BDD-Knoten:
Page 48
Beispiel: BDD des Carry-Bits
BDD-Knoten:
Page 49
Beispiel: BDD des Carry-Bits
BDD-Knoten:
Page 50
Beispiel: BDD des Carry-Bits
BDD-Knoten:
Page 51
Beispiel: BDD des Carry-Bits
Reduziertes BDD:
Page 52
Übrigens ...
Wir haben soeben einen Äquivalenzcheck durchgeführt!
Funktionstabelle für
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 0 |
| 0 | 1 | 0 | 0 | 1 |
| 0 | 1 | 1 | 1 | 1 |
| 1 | 0 | 0 | 0 | 0 |
| 1 | 0 | 1 | 1 | 0 |
| 1 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 1 |
Reduziertes BDD:
Page 53
Realisierung von Booleschen Operationen zwischen BDDs
Gegeben BDDs
Erste Option: Berechne die Funktionstabelle von
Besserer Ansatz: If-Then-Else-Funktion (ITE).
Alle binären Operationen sind auf ITE zurückführbar:
| Operation | ITE-Ausdruck |
|---|---|
Page 54
Berechnung von ITE auf BDDs – Prinzip
Gegeben sind drei BDDs
Es gilt für eine Variable
ITE-Berechnung im vollständigen BDD:
Sei
BDDs für
Berechne BDDs
Knoten mit Variable
Page 55
ITE auf reduzierten BDDs
Rekursive Vorgehensweise:
Berechne BDDs
Falls
Sonst generiere Knoten mit Variable
Terminalfälle:
Weitere Terminalfälle:






















































