k622-Binaere_Entscheidungsdiagramme_BDDs_Konstruktion_von_BDDs

k622-Binaere_Entscheidungsdiagramme_BDDs_Konstruktion_von_BDDs

Page 1

page-01.png

Kapitel 6 – Formale Spezifikation von Hardware

  1. Boolesche Ausdrücke (Wiederholung)
  2. Binäre Entscheidungsdiagramme (BDDs)
    2.1 Kanonische Darstellung, ROBDDs
    2.2 Konstruktion von BDDs
    2.3 ITE-Beispiel, Variablenordnung
  3. Anwendung: Formale Verifikation mit BDDs
    Albert-Ludwigs-Universität Freiburg
    Prof. Dr. Armin Biere
    Institut für Informatik

Page 2

page-02.png

Kofaktoren und Shannon-Zerlegung

Für eine Boolesche Funktion heißt definiert durch

für alle der Kofaktor von nach .

Entsprechend heißt definiert durch

der Kofaktor von nach .

Shannonscher Entwicklungssatz: Es gilt für beliebiges :

heißt Shannon-Zerlegung von .

Page 3

page-03.png

Zusammenhang Kompositionsregel, Kofaktoren und Shannon-Zerlegung

Sei ein innerer Knoten eines geordneten BDDs, der mit markiert ist. Dann kommt in Kindern von nicht vor (sonst mehrfaches Vorkommen auf dem gleichen Pfad).

Also sind die Subfunktionen , von von unabhängig, d.h. für alle gilt:

Es folgt dann:

Somit wird an die Shannon-Zerlegung berechnet:

Page 4

page-04.png

Konstruktion von BDDs

Über die Kofaktoren.

Beispiel: Um ein von bzgl. der Variablenordnung zu konstruieren, konstruiere BDDs von

und

Sie stellen die Söhne des Knotens dar. Wende dies rekursiv an (top-down Konstruktion).

Aus einem Booleschen Ausdruck über Boolesche Operationen.

Aus einem Schaltkreis über Boolesche Operationen (Symbolische Simulation).

Page 5

page-05.png

BDD des Carry-Bits eines Volladdierers aus Kofaktoren (1/3)

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

page-06.png

BDD des Carry-Bits eines Volladdierers aus Kofaktoren (1/3)

(Siehe Funktionstabelle auf vorheriger Seite.)

Page 7

page-07.png

BDD des Carry-Bits eines Volladdierers aus Kofaktoren (1/3)

Page 8

page-08.png

BDD des Carry-Bits eines Volladdierers aus Kofaktoren (1/3)

Page 9

page-09.png

BDD des Carry-Bits eines Volladdierers aus Kofaktoren (1/3)

Kofaktor :

0 0 0
0 1 1
1 0 1
1 1 1

Page 10

page-10.png

BDD des Carry-Bits eines Volladdierers aus Kofaktoren (1/3)

Kofaktor :

0 1
1 1

Page 11

page-11.png

BDD des Carry-Bits eines Volladdierers aus Kofaktoren (1/3)

Kofaktor :

0 0
1 1

Page 12

page-12.png

BDD des Carry-Bits eines Volladdierers aus Kofaktoren (1/3)

BDD für : , mit und .

Page 13

page-13.png

BDD des Carry-Bits eines Volladdierers aus Kofaktoren (1/3)

BDD-Knoten: , , mit , .

Page 14

page-14.png

BDD des Carry-Bits eines Volladdierers aus Kofaktoren (1/3)

BDD-Knoten: , , , .

Page 15

page-15.png

BDD des Carry-Bits eines Volladdierers aus Kofaktoren (1/3)

BDD-Knoten: , , , .

Page 16

page-16.png

BDD des Carry-Bits eines Volladdierers aus Kofaktoren (2/3)

Funktionstabelle (wie auf Seite 5).

Page 17

page-17.png

BDD des Carry-Bits eines Volladdierers aus Kofaktoren (2/3)

Page 18

page-18.png

BDD des Carry-Bits eines Volladdierers aus Kofaktoren (2/3)

Page 19

page-19.png

BDD des Carry-Bits eines Volladdierers aus Kofaktoren (2/3)

Kofaktor :

0 0 0
0 1 0
1 0 0
1 1 1

Page 20

page-20.png

BDD des Carry-Bits eines Volladdierers aus Kofaktoren (2/3)

Kofaktor :

0 0
1 1

Page 21

page-21.png

BDD des Carry-Bits eines Volladdierers aus Kofaktoren (2/3)

Kofaktor :

0 0
1 0

Page 22

page-22.png

BDD des Carry-Bits eines Volladdierers aus Kofaktoren (2/3)

BDD-Knoten: , , mit , .

Page 23

page-23.png

BDD des Carry-Bits eines Volladdierers aus Kofaktoren (2/3)

BDD-Knoten: , , , .

Page 24

page-24.png

BDD des Carry-Bits eines Volladdierers aus Kofaktoren (2/3)

BDD-Knoten: , , , .

Page 25

page-25.png

BDD des Carry-Bits eines Volladdierers aus Kofaktoren (2/3)

BDD-Knoten: , , , .

Page 26

page-26.png

BDD des Carry-Bits eines Volladdierers aus Kofaktoren (3/3)

Funktionstabelle (wie auf Seite 5).

Page 27

page-27.png

BDD des Carry-Bits eines Volladdierers aus Kofaktoren (3/3)

Page 28

page-28.png

BDD des Carry-Bits eines Volladdierers aus Kofaktoren (3/3)

BDD-Knoten: , (für ), (für ), .

Page 29

page-29.png

BDD des Carry-Bits eines Volladdierers aus Kofaktoren (3/3)

Reduziertes BDD: , , , .

Page 30

page-30.png

Syntaktische BDD Top-Down Konstruktion

wobei nun

nur einmal berechnet wird (cache!).

Page 31

page-31.png

BDD aus einem Booleschen Ausdruck

Konstruiere (bottom-up) BDD von

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

page-32.png

BDD aus Schaltkreis: Symbolische Simulation

Schaltkreis mit Eingängen und Gattern.

Page 33

page-33.png

BDD aus Schaltkreis: Symbolische Simulation

BDD-Operationen:

bdd_x1, bdd_x2, ..., bdd_x8

Page 34

page-34.png

BDD aus Schaltkreis: Symbolische Simulation

BDD-Operationen:

bdd_x1, bdd_x2, ..., bdd_x8
bdd_9    := XOR(bdd_x2, bdd_x3)      # x2 ⊕ x3

Page 35

page-35.png

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

page-36.png

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

page-37.png

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

page-38.png

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

page-39.png

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

page-40.png

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

page-41.png

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

page-42.png

Beispiel: BDD des Carry-Bits eines FAs aus Schaltkreis

Volladdierer-Schaltkreis: , .

Page 43

page-43.png

Beispiel: BDD des Carry-Bits eines FAs aus Schaltkreis

BDD-Knoten: .

Page 44

page-44.png

Beispiel: BDD des Carry-Bits eines FAs aus Schaltkreis

BDD-Knoten: , mit .

Page 45

page-45.png

Beispiel: BDD des Carry-Bits eines FAs aus Schaltkreis

BDD-Knoten: , mit .

Page 46

page-46.png

Beispiel: BDD des Carry-Bits eines FAs aus Schaltkreis

BDD-Knoten: , mit .

Page 47

page-47.png

Beispiel: BDD des Carry-Bits eines FAs aus Schaltkreis

BDD-Knoten: , mit (Reduktion beginnt: ).

Page 48

page-48.png

Beispiel: BDD des Carry-Bits eines FAs aus Schaltkreis

BDD-Knoten: , mit , (Reduktion).

Page 49

page-49.png

Beispiel: BDD des Carry-Bits eines FAs aus Schaltkreis

BDD-Knoten: , mit (weitere Reduktion).

Page 50

page-50.png

Beispiel: BDD des Carry-Bits eines FAs aus Schaltkreis

BDD-Knoten: , mit (weitere Reduktion).

Page 51

page-51.png

Beispiel: BDD des Carry-Bits eines FAs aus Schaltkreis

Reduziertes BDD: , , .

Page 52

page-52.png

Ü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

page-53.png

Realisierung von Booleschen Operationen zwischen BDDs

Gegeben BDDs und , berechne BDD .

Erste Option: Berechne die Funktionstabelle von , erzeuge daraus das BDD mit der Kofaktor-Methode → sehr ineffizient!

Besserer Ansatz: If-Then-Else-Funktion (ITE).

Alle binären Operationen sind auf ITE zurückführbar:

Operation ITE-Ausdruck

Page 54

page-54.png

Berechnung von ITE auf BDDs – Prinzip

Gegeben sind drei BDDs , und mit der gleichen Variablenordnung. Gesucht ist BDD für .

Es gilt für eine Variable (Substitution/Kofaktor distributiert über alle Operatoren):

ITE-Berechnung im vollständigen BDD:

Sei die oberste Variable in BDDs , und .

BDDs für sind Kinder von .

Berechne BDDs und rekursiv.

Knoten mit Variable und diesen BDDs als Kinder ist das gesuchte BDD.

Page 55

page-55.png

ITE auf reduzierten BDDs

Rekursive Vorgehensweise:

Berechne BDDs und .

Falls , so ist

Sonst generiere Knoten mit Variable , dessen High-Kante auf und Low-Kante auf zeigt.

Terminalfälle:

, , , , .

Weitere Terminalfälle: