k623-Binaere_Entscheidungsdiagramme_BDDs_ITE-Beispiel_Variablenordnung

k623-Binaere_Entscheidungsdiagramme_BDDs_ITE-Beispiel_Variablenordnung

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

ITE-Berechnung: Beispiel (1/2)

BDDs:

  • : root , Blätter
  • : root , Blätter
  • : root , Blätter

Wir haben vorhin gerechnet: .

Dies entspricht: .

Wir wollen nun die rekursive ITE-Berechnung nachvollziehen.

Es liegt kein Terminalfall vor, obere Variable: .

Page 3

page-03.png

ITE-Berechnung: Beispiel (2/2)

Berechne zunächst rekursiv .

Rechne rekursiv mit Variable weiter:

Page 4

page-04.png

Beispiel:

, , :

, , :

Insgesamt:

Page 5

page-05.png

Beispiel:

Berechne zunächst rekursiv .

Ein Terminalfall liegt vor:

Page 6

page-06.png

Beispiel – Ende

Durch die Verwendung der sogenannten Unique Table (UT) sind die berechneten BDDs bereits reduziert: Somit muss ITE nur noch einen Knoten einfügen und seine ausgehenden Kanten „richtig lenken".

Ergebnis:

Page 7

page-07.png

Zur Komplexität von ITE

Bei der rekursiven Konstruktion von ITE überprüft man zunächst vor einem ITE-Aufruf, ob das BDD vielleicht bereits generiert wurde und in der sogenannten Computed Table (CT) referenziert wird.

Nur wenn dies nicht der Fall ist, wird das BDD durch den rekursiven Aufruf erzeugt, der Aufruf wird in der CT referenziert und das Ergebnis in die UT eingetragen.

Implementiert man dies effizient, wird die Komplexität von ITE zu .

Ohne Beweis (betrachte Anzahl möglicher Einträge in CT).

Somit lässt sich etwa die Komplexität von

durch abschätzen ( ist das BDD für die konstante 0-Funktion, das aus 1 Knoten besteht).

Page 8

page-08.png

ITE-Algorithmus

function ITE(F, G, H):
    // Überprüfe erst 4 Terminalfälle
    if F == 1: return G
    if F == 0: return H
    if G == 1 and H == 0: return F
    if G == H: return G

    R = Lookup_Computed_Table(F, G, H)
    if R exists: return R

    x = Top_Variable(F, G, H)    // Gleiche Variablenordnung
    high = ITE(F_{x=1}, G_{x=1}, H_{x=1})
    low  = ITE(F_{x=0}, G_{x=0}, H_{x=0})

    if high == low: return low

    R = Find_Or_Add_in_Unique_Table(x, high, low)
    Insert_in_Computed_Table((F, G, H), R)
    return R

Page 9

page-09.png

Größe von BDDs

  • Oft exponentiell.
  • Hängt stark von der Variablenordnung ab.
  • Siehe Beispiel auf der nächsten Folie.
  • Für viele in der Praxis vorkommende Funktionen sind BDDs zumindest für einige Variablenordnungen kompakt.
  • BDD-Minimierung: Finden einer „guten" Variablenordnung (ist wohl NP-hartes Problem).
  • Exakte und heuristische Verfahren.
  • Für einige Funktionen, u.a. Multiplizierer, ist BDD-Größe für jede Variablenordnung exponentiell.

Page 10

page-10.png

Einfluss der Variablenordnung

Beispiel:

Page 11

page-11.png

Einfluss der Variablenordnung

Beispiel:

Variablenordnung : exponentielle Größe

Page 12

page-12.png

Einfluss der Variablenordnung

Beispiel:

Variablenordnung Größe
exponentiell
linear

Page 13

page-13.png

Schaltkreis direkt aus BDD

BDD: , Blätter .

Page 14

page-14.png

Schaltkreis direkt aus BDD

BDD → MUX-Schaltkreis: Erster MUX für .

Page 15

page-15.png

Schaltkreis direkt aus BDD

Zweiter MUX für (low-Zweig).

Page 16

page-16.png

Schaltkreis direkt aus BDD

Dritter MUX für (high-Zweig).

Page 17

page-17.png

Schaltkreis direkt aus BDD

Vierter MUX für .

Page 18

page-18.png

Schaltkreis direkt aus BDD

... beschreibt die Boolesche Funktion