ЗК№ × ЦШ ДУ ЧЭТШ × С Ш ГЦУТ Ц ЩТ Ш УТ Р × УТ Ц СЧ

Werbung
EXOR-basierte Logiksynthese
mit
Kronecker Functional Decision Diagrams
Dissertation
zur Erlangung des Doktorgrades
der Fakult
at fu
 r Angewandte Wissenschaften
der Albert-Ludwigs-Universit
at,
Freiburg im Breisgau
vorgelegt von
Harry Hengster
Freiburg im Breisgau
Dekan
Prof. Dr.Gerald A. Urban
Referenten
Prof. Dr. Bernd Becker
Prof. Dr. Paul Molitor
Tag der Disputation
12. 03. 2001
Fu
 r meine Frau Heike
sowie
meine T
ochter Yasmin und Sarah.
ii
Danksagung
Allen Personen, die einen Beitrag zum erfolgreichen Abschlu dieser Arbeit geleistet
haben, mochte ich herzlich danken.
Prof. Dr. Bernd Becker danke ich sowohl fur die umfassende Betreuung dieser Arbeit
als auch dafur, da er mich bereits wahrend meines Studiums fur die spannenden Themen und interessanten Probleme bei dem Entwurf und Test von integrierten Schaltkreisen
begeistern konnte. Meine wissenschaftliche Arbeit unterstutzte er durch zahlreiche Diskussionen, in denen er nicht nur wertvolle Hinweise zur Losung von verschiedenen Problemen
einbrachte, sondern auch weiterfuhrende Fragestellungen aufzeigte. Insbesondere fur seine
Beharrlichkeit bei den formalen Beweisen zur Testbarkeit bin ich ihm heute sehr dankbar.
Mein besonderer Dank gilt allen Mitarbeitern, ehemaligen Mitarbeitern und Studenten,
die am Lehrstuhl Algorithmen und Datenstrukturen entwickelt sowie die entsprechenden
Programme implementiert haben. Insbesondere aus der von Diplom-Informatiker Stefan
Eckrich und Diplom-Informatikerin Tonja Pfeier erstellten Basisimplementierung konnte
ich zahlreiche Algorithmen und Programmsegmente fur die Realisierung des Syntheseverfahrens ubernehmen. Fur die sehr gute Unterstutzung bei Implementierungsfragen,
die groe Hilfsbereitschaft bei der Anpassung von verschiedenen Software-Komponenten
und die zahlreichen Diskussionen mochte ich mich besonders bei Dr. Christoph Scholl,
Diplom-Informatiker Andreas Hett und Diplom-Informatiker Martin Keim bedanken.
Zu besonderem Dank bin ich den unermudlichen Korrekturlesern Dr. Christoph Scholl und
Diplom-Volkswirtin Heike Hengster verpichtet, denen es durch ihre sorgfaltige Arbeit
gelang, mich durch die Vielzahl der im Manuskript aufgefundenen Mangel in Erstaunen
zu versetzen.
Weiterhin mochte ich mich bei meiner Frau und meinen beiden Tochtern bedanken, die
mir durch ihre Liebe immer wieder neue Kraft gaben, obwohl sie mich leider auch an
vielen Abenden und Wochenenden entbehren muten.
iii
Inhaltsverzeichnis
Einleitung
1
1 Grundlagen
5
1.1 Boolesche Funktionen . . . . . . . . . . . . . . .
1.2 Schaltkreise . . . . . . . . . . . . . . . . . . . .
1.3 Decision Diagrams . . . . . . . . . . . . . . . .
1.3.1 Allgemeine Decision Diagrams . . . . . .
1.3.2 Kronecker Functional Decision Diagrams
1.3.3 Reduktionen . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2.1 Funktionsdarstellung durch Abhangigkeiten im KFDD . . . . . . .
2.1.1 Aktive Pfade und Abhangigkeiten zwischen Knoten . . . . .
2.1.2 Abhangigkeiten aufeinanderfolgender Level . . . . . . . . . .
2.1.3 Komposition von Abhangigkeiten . . . . . . . . . . . . . . .
2.2 EXOR-basiertes Syntheseverfahren . . . . . . . . . . . . . . . . . .
2.2.1 Schaltkreisrealisierung der Abhangigkeitsmatrizen . . . . . .
2.2.2 Schaltkreisoptimierung mit lokalen Vereinfachungen . . . . .
2.2.2.1 Gatter mit konstanten Eingangssignalen . . . . . .
2.2.2.2 Gatter mit gleichen oder inversen Eingangssignalen
2.2.2.3 Inverterketten . . . . . . . . . . . . . . . . . . . . .
2.2.2.4 Anwendbarkeit in synthetisierten Schaltkreisen . .
2.2.2.5 Angepates Syntheseverfahren . . . . . . . . . . . .
2.2.3 Groenreduktion der KFDDs . . . . . . . . . . . . . . . . .
2.2.3.1 D-vollstandige KFDDs . . . . . . . . . . . . . . . .
2.2.3.2 Abhangigkeiten in D-vollstandigen KFDDs . . . .
2.2.3.3 Verallgemeinertes Syntheseverfahren . . . . . . . .
2.3 Experimentelle Ergebnisse . . . . . . . . . . . . . . . . . . . . . . .
2.3.1 Erzeugte Decision Diagrams . . . . . . . . . . . . . . . . . .
2.3.2 Synthetisierte Schaltkreise . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2 Logiksynthese mit KFDDs
iv
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
6
12
13
17
20
29
29
30
35
36
41
41
45
45
48
50
51
57
61
62
67
70
77
78
83
3 Testbarkeit der Schaltkreise
3.1 Stuck-at Fehler . . . . . . . . . . . . . . . . . . . . . .
3.2 Konstante Signale . . . . . . . . . . . . . . . . . . . . .
3.2.1 Konstante 0-Abhangigkeiten . . . . . . . . . . .
3.2.2 Konstante 1-Abhangigkeiten . . . . . . . . . . .
3.2.3 Angepates Syntheseverfahren . . . . . . . . . .
3.3 Bestimmung von Belegungen fur aktive Pfade . . . . .
3.3.1 Belegung fur genau einen aktiven Pfad . . . . .
3.3.2 Belegung fur eine gerade Anzahl aktiver Pfade .
3.4 Vollstandige Testbarkeit . . . . . . . . . . . . . . . . .
3.4.1 Fehler an primaren Eingangen . . . . . . . . . .
3.4.2 Fehler an Eingangen der Teilschaltkreise . . . .
3.4.3 Fehler an Eingangen der AND-Gatter . . . . . .
3.4.4 Fehler an primaren Ausgangen . . . . . . . . . .
3.4.5 Komplexitat der vollstandigen Testberechnung .
3.5 Experimentelle Ergebnisse . . . . . . . . . . . . . . . .
4 Optimierungen
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4.1 Optimierung des vollstandigen Tests . . . . . . . . . . . . .
4.1.1 Fehlersimulation . . . . . . . . . . . . . . . . . . . .
4.1.2 Statische Kompaktierung . . . . . . . . . . . . . . . .
4.1.2.1 Entfernen von generalisierten Testmustern .
4.1.2.2 Kombination von kompatiblen Testmustern
4.1.3 Experimentelle Ergebnisse . . . . . . . . . . . . . . .
4.2 Optimierung der synthetisierten Schaltkreise . . . . . . . . .
4.2.1 Verschmelzen aquivalenter Gatter . . . . . . . . . . .
4.2.2 Experimentelle Ergebnisse . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
86
. 87
. 92
. 94
. 96
. 103
. 104
. 105
. 110
. 116
. 119
. 132
. 139
. 146
. 152
. 153
157
. 157
. 158
. 158
. 160
. 161
. 164
. 166
. 166
. 170
5 Vergleich mit anderen Verfahren
173
6 Schlubemerkungen
181
Literaturverzeichnis
183
5.1 Knotenersetzung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
5.2 SIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
5.3 Automatische Testmustergenerierung . . . . . . . . . . . . . . . . . . . . . 178
Anhang
187
A Zur Groe DnB -vollstandiger KFDDs
187
B Verallgemeinertes Syntheseverfahren
197
v
Einleitung
Der gesamte Entwicklungsproze eines neuen Chips wird durch Computer-Aided Design
(CAD) Werkzeuge unterstutzt1 . Die Aufgaben der CAD-Werkzeuge umfassen einerseits
die Organisation und Verwaltung der einzelnen Arbeitsergebnisse, die sehr umfangreich
und komplex sein konnen. Andererseits mussen die relevanten Informationen fur die einzelnen Arbeitsschritte extrahiert und aufbereitet werden, um eine einfache und komfortable Nutzung durch die Entwickler zu ermoglichen. Aufgrund der hohen Komplexitat und
den kurzen Entwicklungszyklen wird fur die einzelnen Entwicklungsphasen ein moglichst
hoher Automatisierungsgrad angestrebt. In vielen Bereichen ist heute noch sehr viel Interaktion durch die Entwickler notig, um Teilaufgaben uberhaupt losen zu konnen bzw.
um entsprechende Qualitatsanforderungen zu erfullen. Fur andere Entwicklungsschritte
sind die Verfahren bereits soweit fortgeschritten, da die Rolle des Entwicklers darauf
reduziert werden kann, die notigen Eingabeparameter festzulegen und das automatisch
erzeugte Resultat zu uberprufen und zu bewerten.
In dem Gesamtentwicklungsproze umfat der Schritt der Logiksynthese die Aufgabe, eine gegebene Boolesche Funktion durch Verknupfung einzelner Logikbausteine zu
realisieren. Es gibt eine Vielzahl von unterschiedlichen Methoden fur die Logiksynthese, mit denen einerseits unterschiedliche Eigenschaften der einzusetzenden Technologie
berucksichtigt werden und andererseits verschiedene Optimierungsziele beachtet werden
mussen.
Bei Schaltkreisen, die als Programmable Logic Array (PLA) gefertigt werden, ist z.B. zu
berucksichtigen, da nur zweistuge Schaltkreise realisiert werden konnen. Um die Kosten
zu minimieren, mu bei PLAs im wesentlichen die Anzahl der Monome optimiert werden.
Dagegen konnen fur mehrstuge Schaltkreise verschiedene Grundgatter zur Realisierung
von unterschiedlichen Operationen in mehreren Stufen hintereinander geschaltet werden.
Dabei werden die Kosten im wesentlichen durch die Anzahl der verwendeten Grundgatter
und deren jeweilige Groe bestimmt. Bei der Synthese von mehrstugen Schaltkreisen mu
zusatzlich berucksichtigt werden, da die Anzahl und die Typen von Grundgattern auf
einem Pfad von einem Eingang zu einem Ausgang des Schaltkreises die Verzogerungszeit
des Schaltkreises und damit die maximal mogliche Taktfrequenz beeinut. Das Verhaltnis von Groe und Verzogerungszeit kann fur die Grundgatter in verschiedenen Technologien unterschiedlich sein. So benotigt eine CMOS-Realisierung fur ein EXOR-Gatter
wesentlich mehr Platz und hat eine deutlich hohere Verzogerungszeit als ein OR-Gatter.
Dagegen gibt es Field Programmable Gate Arrays (FPGAs), in denen EXOR-Gatter und
OR-Gatter mit gleicher Flache und Verzogerungszeit realisiert werden konnen.
Neben der Groe und der Verzogerungszeit gilt es insbesondere bei elektronischen Komponenten fur mobile Gerate auch noch die Leistungsaufnahme zu minimieren. Dazu konnen
1 In der gesamten Arbeit werden h
aug die aus der Literatur bekannten englischen Begrie bzw. deren
Abkurzungen verwendet.
1
2
EINLEITUNG
z.B. Realisierungen bestimmt werden, bei denen die Schaltwahrscheinlichkeit der einzelnen Gatter gering ist. Oder es kann zusatzliche Kontrollogik eingefugt werden, mit der
bestimmte Teile einer Schaltung vorubergehend deaktiviert werden konnen.
Schlielich entsteht ein groer Anteil der Kosten fur einen Chip durch die Entwicklung
und die Durchfuhrung des Produktionstests, bei dem die fehlerhaften Chips identiziert
werden sollen. Dazu wird mittels automatischer Testmustergenerierung eine Menge
von Testmustern bestimmt. Jedes dieser Testmuster wird an die Eingange der Chips angelegt und die Ausgabe der Chips mit den erwarteten Resultaten verglichen. Fur den
Produktionstest sollen einerseits moglichst wenige Testmuster notig sein, da dieser Test
fur jeden produzierten Chip durchgefuhrt werden mu und das Testequipment sehr teuer
ist. Andererseits sollen durch den Produktionstest moglichst alle defekten Chips aussortiert werden, da ein defekter Chips nach der Integration in ein komplexeres System oder
gar nach der Auslieferung an den Endkunden enorme Kosten sowie einen Imageverlust
verursacht.
Es gibt zwar Verfahren zur automatischen Testmustergenerierung. Allerdings kann die
Laufzeit dieser Verfahren bei ungunstigen Schaltkreisstrukturen sehr hoch werden. Ein
weiteres Optimierungskriterium fur Synthesewerkzeuge besteht also darin, eine moglichst
gute Testbarkeit zu erreichen. Dies kann einerseits durch Vermeiden von ungunstigen
Struktureigenschaften erreicht werden, so da problematische Konstellationen fur die automatische Testmustergenerierung vermieden werden. Andererseits kann bei einigen Verfahren bereits wahrend der Synthese eine Testmenge fur den Schaltkreis erzeugt werden,
ohne automatische Testmustergenerierung anwenden zu mussen.
In vielen CAD-Werkzeugen und insbesondere in Syntheseverfahren werden Decision
Diagrams (DDs) eingesetzt. DDs sind graphbasierte Datenstrukturen, die zur eÆzienten Reprasentation und Manipulation von Booleschen Funktionen entwickelt wurden. In
den Kronecker Functional Decision Diagrams (KFDDs) [23] konnen sowohl die Shannon Dekomposition als auch die Davio Dekompositionen angewendet werden. Damit
stellen KFDDs eine Verallgemeinerung der weit verbreiteten Binary Decision Diagrams
(BDDs) [38, 2, 15] und der Funktional Decision Diagrams (FDDs) [36] dar und konnen
die Vorteile dieser beiden Darstellungsformen vereinen.
Die Graphstruktur von DDs kann aber auch direkt dazu verwendet werden, um Schaltkreisrealisierungen fur die dargestellten Funktionen abzuleiten. Dabei werden Eigenschaften der Graphstruktur des DDs ausgenutzt. Einige Syntheseverfahren nutzen besondere
Eigenschaften von BDDs aus, so da der Einsatz von KFDDs Erweiterungen dieser Verfahren erfordert oder KFDDs uberhaupt nicht eingesetzt werden konnen. Sofern der Einsatz von KFDDs fur ein Syntheseverfahren moglich ist, resultieren aus der kompakteren
Darstellung als KFDD normalerweise auch bessere Schaltkreisrealisierungen.
In [35] wurde z.B. ein Verfahren vorgestellt, bei dem die Abhangigkeiten zwischen den
Knoten aus aufeinanderfolgenden Leveln eines BDDs analysiert werden. Dabei konnen nur
Abhangigkeiten zwischen Knoten aus aufeinanderfolgenden Leveln berucksichtigt werden.
Deshalb mussen zur Vorbereitung der eigentlichen Synthese zunachst neue Knoten in
dem BDD eingefugt werden, bis ein vollstandiges BDD erzeugt wurde. Dann konnen die
Abhangigkeiten zwischen den Knoten durch Teilschaltkreise mit einer einfachen Struktur
realisiert werden. Die einzelnen Teilschaltkreise werden durch weitere Teilschaltkreise zu
dem Gesamtschaltkreis zusammengesetzt, wobei die Struktur der neuen Teilschaltkreise
wiederum sehr einfach und regelmaig ist. Durch die Komposition der Teilschaltkreise
als balancierten, binaren Baum wird eine geringe Verzogerungszeit fur den mehrstugen
Gesamtschaltkreis erreicht. Auerdem sind in dem synthetisierten Gesamtschaltkreis alle
EINLEITUNG
3
und path-delay Fehler testbar, sofern 2-rail Logik verwendet wird. Dafur mu
jedoch die Anzahl der Eingange und Ausgange des Schaltkreises verdoppelt werden, was
fur den praktischen Einsatz nicht akzeptabel ist.
Auch das in dieser Arbeit vorgestellte Syntheseverfahren beruht auf der Grundidee
von [35]. Das Verfahren zur Analyse der Abhangigkeiten wird einerseits von BDDs auf
KFDDs erweitert. Somit konnen die kompakteren Darstellungen der Booleschen Funktionen als KFDD verwendet werden. In KFDDs wird neben der Shannon Dekomposition auch
die Davio Dekomposition eingesetzt, die auf der EXOR-Operation basiert. Daher wird
die Verwendung von EXOR-Gattern in den synthetisierten Schaltkreisen auf naturliche
Weise impliziert.
Daneben wird eine Reihe von lokalen Vereinfachungen fur die Schaltkreisrealisierung vorgestellt, die wahrend der Synthese implizit durchgefuhrt werden konnen. Dadurch wird die
Groe weiter optimiert sowie eine geringe Tiefe und damit eine geringe Verzogerungszeit
fur den Schaltkreis erreicht.
Zusatzlich wird gezeigt, da auch direkte Abhangigkeiten zwischen Knoten aus nicht benachbarten Leveln unmittelbar in der Schaltkreisrealisierung umgesetzt werden konnen,
so da fur das Syntheseverfahren keine vollstandigen KFDDs mehr benotigt werden. Die
fur das verallgemeinerte Syntheseverfahren notigen Anforderungen an die Struktur des
KFDDs konnen mit erheblich weniger Knoten erfullt werden als in dem Verfahren, bei
dem nur Abhangigkeiten zwischen Knoten aus benachbarten Leveln berucksichtigt werden
konnen. Die synthetisierten Schaltkreisrealisierungen sind bei beiden Verfahren gleich, sofern die oben erwahnten Vereinfachungen wahrend der Synthese konsequent durchgefuhrt
werden. Somit kann der Vorteil der eÆzienteren Darstellung des KFDDs genutzt werden
ohne die Qualitat der synthetisierten Schaltkreise zu beeinussen.
Die Testbarkeit der synthetisierten Schaltkreise wird bzgl. des stuck-at Fehlermodells
untersucht. Durch Analyse der Graphstruktur des verwendeten KFDDs mit eÆzienten
Graphalgorithmen kann erreicht werden, da in den erzeugten Schaltkreisen keine konstanten Signale existieren. Fur die so erzeugten Schaltkreise wird gezeigt, da sie auch
ohne den Einsatz der aufwendigen 2-rail Logik vollstandig testbar sind. Dazu werden
Verfahren vorgestellt, mit denen Testmuster fur alle stuck-at Fehler bereits wahrend der
Synthese bestimmt werden. Dabei werden wieder eÆziente Graphalgorithmen eingesetzt,
die jeweils auf die Graphen der KFDDs angewendet werden. Die Anwendung von automatischer Testmustergenerierung fur die synthetisierten Schaltkreise ist somit nicht mehr
erforderlich. Allerdings ist die Anzahl der erzeugten Testmuster sehr hoch, so da eine
Kompaktierung der erzeugten Testmengen notig wird.
Schlielich wird noch gezeigt, da die Groe und Tiefe der synthetisierten Schaltkreise durch Verschmelzen von aquivalenten Gattern weiter reduziert werden kann. Fur die
dabei erzeugten Schaltkreise kann die vollstandige Testbarkeit jedoch nur experimentell
nachgewiesen werden.
Die Arbeit ist folgendermaen gegliedert:
In Kapitel 1 werden Begrie, Verfahren und Datenstrukturen zur Beschreibung von Booleschen Funktionen eingefuhrt. Als Darstellungsformen fur Boolesche Funktionen werden
Schaltkreise und Decision Diagrams genauer betrachtet.
Das grundlegende Syntheseverfahren wird in Kapitel 2 vorgestellt. Dazu wird zunachst
beschrieben, wie eine Boolesche Funktion durch die Abhangigkeiten in einem KFDD dargestellt werden kann. In dem Syntheseverfahren werden fur diese Abhangigkeiten mehrstuge Schaltkreise mit AND-, OR-, EXOR- und NOT -Gattern erzeugt. Die Groe
der dabei erzeugten Schaltkreise kann durch konsequente Anwendung von lokalen Verstuck-at
4
EINLEITUNG
einfachungen optimiert werden. Durch entsprechende Anpassungen im Syntheseverfahren
werden die anwendbaren lokalen Vereinfachungen bereits wahrend der Synthese implizit
durchgefuhrt. Auerdem wird gezeigt, da das Syntheseverfahren auch auf D-vollstandige
KFDDs erweitert werden kann, wodurch die Groe der KFDDs erheblich reduziert wird,
wahrend die erzeugten Schaltkreisrealisierungen gleich bleiben. In den experimentellen
Ergebnissen werden schlielich die Kenngroen der verschiedenen DDs und der aus den
KFDDs erzeugten Schaltkreisrealisierungen angegeben.
Die Testbarkeitseigenschaften der synthetisierten Schaltkreise werden in Kapitel 3 untersucht. Zunachst wird das in dieser Arbeit betrachtete stuck-at Fehlermodell vorgestellt.
Da stuck-at Fehler an konstanten Signalen nicht testbar sind, wird eine Erweiterung des
Syntheseverfahrens prasentiert, bei der keine konstanten Signale erzeugt werden, und es
werden Methoden angegeben, um fur jeden stuck-at Fehler ein Testmuster zu erzeugen.
Sowohl die Vermeidung von konstanten Signalen als auch die Berechnung der Testmuster basiert auf eÆzienten Algorithmen zur Traversierung der Graphen der verwendeten
KFDDs. Durch experimentelle Ergebnisse wird die praktische Anwendbarkeit und die
EÆzienz der Verfahren bestatigt.
In Kapitel 4 werden Verfahren prasentiert, um die Testmengen und Schaltkreise weiter zu
optimieren. Zur Optimierung der Testmengen konnen neben der Fehlersimulation noch
verschiedene Methoden zur statischen Kompaktierung verwendet werden. In den experimentellen Ergebnissen wird zusatzlich die Kombination der beiden Verfahren untersucht.
Die Optimierung der synthetisierten Schaltkreise basiert auf dem Verschmelzen von aquivalenten Gattern. Dabei kann die vollstandige Testbarkeit der erzeugten Gatter jedoch
nur experimentell nachgewiesen werden.
Ein Vergleich mit anderen Verfahren zur Synthese und Testmustergenerierung erfolgt in
Kapitel 5. Es wird ein Syntheseverfahren betrachtet, das ebenfalls auf KFDDs basiert,
und ein Syntheseverfahren, das keine DDs verwendet. Schlielich wird noch ein ausgereifter Testmustergenerator eingesetzt, um Testmuster fur die synthetisierten Schaltkreise
zu erzeugen. Neben einer kurzen Darstellung der anderen Verfahren werden die jeweils
erzielten Resultate mit den Ergebnissen des vorgestellten Verfahrens verglichen.
In Kapitel 6 erfolgt eine Zusammenfassung und es werden weitere Einsatzmoglichkeiten
und Erweiterungen der vorgestellten Verfahren diskutiert.
Kapitel 1
Grundlagen
Es wird ein U berblick uber die in dieser Arbeit verwendeten Begrie, Verfahren und
Datenstrukturen sowie deren Einordnung in das jeweilige Umfeld gegeben.
Zunachst werden Boolesche Funktionen eingefuhrt. Aus der Vielzahl von moglichen Darstellungsformen fur Boolesche Funktionen werden Schaltkreise und Decision Diagrams
genauer betrachtet.
1.1
Boolesche Funktionen
Bei der Spezikation und dem Entwurf von digitalen Systemen werden nur zwei logische
Werte 0 und 1 betrachtet. Zur Beschreibung des digitalen Verhaltens werden Boolesche
Funktionen verwendet:
Denition 1.1
Sei
IB = f0; 1g.
a) Eine Boolesche Funktion ist eine Abbildung f : IBn ! IBm .
b) IBn;m bezeichnet die Menge der Booleschen Funktionen von IBn nach
IBn;1 wird auch die Kurzschreibweise IBn verwendet.
IBm . Fur
Es gibt eine Vielzahl von Moglichkeiten, das Funktionsverhalten einer Booleschen Funktion darzustellen. Jede dieser Darstellungsformen bringt Vor- und Nachteile mit sich. Eine
sehr einfache Darstellungsform bietet z.B. die Wahrheitstabelle.
Beispiel 1.1
Im folgenden ist die Wahrheitstabelle eines Volladdierers V A 2 IB3;2 gegeben, der fur die
Booleschen Werte a, b und cin deren Summe s und U bertrag cout berechnet (vgl. z.B. [26]):
a b cin s cout
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
5
0
1
1
0
1
0
0
1
0
0
0
1
0
1
1
1
6
KAPITEL 1. GRUNDLAGEN
Die linke Seite der Wahrheitstabelle enthalt alle moglichen Belegungen der Variablen a,
b und cin . Die rechte Seite gibt fur jede Belegung die entsprechenden Funktionswerte fur
die Summe s und den U bertrag cout an.
Die Darstellung einer Funktion aus IBn;m als Wahrheitstabelle benotigt jedoch 2n Zeilen mit jeweils m Eintragen aus IB. Dies ist nur fur Funktionen mit wenigen Eingangen
praktikabel.
Die Bezeichnungen, Notationen und Wahrheitstabellen fur die in dieser Arbeit verwendeten Booleschen Funktionen mit bis zu zwei Variablen und einem Ausgang sind in Abbildung 1.1 zusammengestellt.
C0 C1
0
BUF NOT
x1 x1
x1
1
0 1
0
1
0
1
AND 2 NAND 2 OR2 NOR2 EXOR2
x1 x2 x1 x2 x1 x2 x1 + x2 x1 + x2 x1 x2
1
0
0
0
1
1
0
1
0
1
0
0
0
1
1
1
1
0
0
1
1
1
1
0
0
0
0
1
1
0
Abbildung 1.1: Boolesche Funktionen mit keiner, einer und zwei Variablen
Boolesche Funktionen konnen weiterhin in algorithmischer Form, durch Boolesche Ausdrucke, Schaltkreise, Decision Diagrams usw. beschrieben werden. In dieser Arbeit werden
nur Schaltkreise sowie eine spezielle Form von Decision Diagrams verwendet.
1.2
Schaltkreise
Die Realisierung von elektronischen Systemen erfolgt heute meist durch Halbleiterbausteine modernster Technologien. Um die Struktur von Chips zu beschreiben und deren
Verhalten vorhersagen zu konnen, werden verschiedene Modelle benutzt. Mit Hilfe dieser
Modelle wird von den komplexen physikalischen Wechselwirkungen abstrahiert.
Bei der Beschreibung als Schaltkreise auf Gatterebene werden z.B. einzelne Gatter als
Grundbausteine betrachtet. Fur jedes Gatter wird das logische Verhalten durch eine einfache Boolesche Funktion beschrieben. Die Eigenschaften der einzelnen Gatter sind in
einer Bibliothek zusammengestellt. In einem Schaltkreis werden dann mehrere Gatter
miteinander verschaltet, um komplexere Boolesche Funktionen zu realisieren.
Im folgenden wird ein theoretisches Modell fur Schaltkreise auf Gatterebene beschrieben:
Denition 1.2
Eine Bibliothek Bib ist eine Menge von Grundzellen. Fur jede Grundzelle b
Bib ist gegeben:
der Eingangsgrad din (b) 2 IN.
der Ausgangsgrad dout (b) 2 IN.
die Grundfunktion h : IBdin (b) ! IBdout (b) .
b
2
7
1.2. SCHALTKREISE
Es wird eine Standardbibliothek ST D zugrundegelegt, die folgendermaen deniert ist:
ST D = fC0 ; C1 ; NOT; BUF g [
1
1
1
1
1
[
[
[
[
[
ANDi [
NAND i [
ORi [
NORi [
EXORi
i=2
i=2
i=2
i=2
i=2
Die funktionale Beschreibung der Grundzellen aus ST D ist durch Abbildung 1.2 gegeben. Da die Grundfunktionen ANDi , ORi und EXORi jeweils assoziativ und kommutativ
sind, kann fur die Grundzellen mit Eingangsgrad 2 auf eine Klammerung der Variablen verzichtet werden, und die entsprechenden Wahrheitstabellen konnen mit Hilfe von
Abbildung 1.1 hergeleitet werden.
b
din (b) dout (b)
hb
C0
0
1
0
C1
0
1
1
BUF
1
1
x1
NOT
1
1
x1
ANDi
i
1
x1 x2 : : : xi
NANDi
i
1
x1 x2 : : : xi
ORi
i
1 x1 + x2 + : : : + xi
NORi
i
1 x1 + x2 + : : : + xi
EXORi
i
1 x1 x2 : : : xi
Abbildung 1.2: Grundzellen aus ST D
Um eine beliebige Boolesche Funktion mit den gegebenen Grundfunktionen darzustellen,
mu noch beschrieben werden, wie die einzelnen Grundzellen zusammengesetzt werden.
Dazu werden Schaltkreise verwendet:
Denition 1.3
Ein Schaltkreis SK = (G ; typ; I=O) uber einer Bibliothek Bib ist gegeben durch:
1
einen gerichteten, azyklischen Graphen G = (V ; E ), fur den gilt:
{ Die Menge der Knoten V = Z [ Pin [ Pout [ S setzt sich zusammen aus den
endlichen, disjunkten Mengen der Gatter Z , der prim
aren Eingange
Pin , der primaren Ausgange Pout und der Signale S .
{ Die Menge der gerichteten Kanten E = FOS [ FOB setzt sich zusammen
aus den Mengen der Fanoutst
amme FOS (Z [ Pin ) S und der Fanoutzweige FOB S (Z [ Pout ).
{ Die Abbildung source : E ! V ordnet jeder gerichteten Kante e = (vs ; vd )
deren Quelle source(e) = vs zu. Entsprechend wird durch die Abbildung
drain : E ! V die Senke drain(e) = vd deniert.
{ Fur jeden Knoten v 2 V ist der Eingangsgrad din (v ) = jfe 2 E j
drain(e)= vgj und der Ausgangsgrad dout (v) = jfe 2 E j source(e) = vgj
deniert.1
j j bezeichnet die Anzahl der Elemente in einer Menge
S
S
.
8
KAPITEL 1. GRUNDLAGEN
typ : V ! Bib [ fIN g [ fOUT g [ fSIGg, mit:
{ 8v 2 Z : typ(v ) 2 Bib, din (v ) = din (typ(v )) und dout (v ) = dout (typ(v )).
{ 8v 2 Pin : typ(v ) = IN , din (v ) = 0 und dout (v ) = 1.
{ 8v 2 Pout : typ(v ) = OUT , din (v ) = 1 und dout (v ) = 0.
{ 8v 2 S : typ(v ) = SIG, din (v ) = 1 und dout (v ) 1.
eine Orientierung I=O = (I; O; PI; PO), d.h.:
{ Die eingehenden Kanten jedes Knoten v 2 V sind geordnet durch die surjektive Abbildung I : V IN ! E . Fur einen Knoten v 2 V wird der i-te
Eingang von v (i 2 f1; 2; : : : ; din (v )g) durch I(v; i) deniert und es gilt
drain(I(v; i)) = v. Das Signal source(I(v; i)) wird als i-tes Eingangssignal
die Typung
von v bezeichnet.
{ Die ausgehenden Kanten jedes Knoten v 2 V sind geordnet durch die surjektive Abbildung O : V IN ! E . Fur einen Knoten v 2 V wird der i-te
Ausgang von v (i 2 f1; 2; : : : ; dout (v )g) durch O(v; i) deniert und es gilt
source(O(v; i)) = v. Das Signal drain(O(v; i)) wird als i-tes Ausgangssignal von v bezeichnet.
{ Die primaren Eingange des Schaltkreises SK sind geordnet durch die
bijektive Abbildung PI : f1; 2; : : : ; jPin jg ! Pin . PI(i) bezeichnet den i-ten
primaren Eingang des Schaltkreises.
{ Die primaren Ausgange des Schaltkreises SK sind geordnet durch die
bijektive Abbildung PO : f1; 2; : : : ; jPout jg ! Pout . PO(i) bezeichnet den
i-ten primaren Ausgang des Schaltkreises.
Beispiel 1.2
In Abbildung 1.3 ist fur einen Schaltkreis SK = (G ; typ; I=O) uber der Bibliothek ST D
der zugrundeliegende Graph, die Typung und die Orientierung gegeben, wobei die Orientierung der ein- und ausgehenden Kanten nur fur die Knoten s1 und z1 angegeben ist. Die
Knotenmenge V des Graphen setzt sich dabei aus Z = fz1 ; z2; z3 ; z4; z5 g, Pin = fi1 ; i2; i3 g,
Pout = fo1 ; o2 g und S = fs1 ; s2 ; : : : ; s8 g zusammen. Damit ist die Kante (i1 ; s1 ) ein Fanoutstamm und (s1; z1 ) ein Fanoutzweig. Die Quelle der Kante (i1 ; s1) ist der primare
Eingang i1 und die Senke ist das Signal s1. Der Eingangsgrad des Gatters z1 ist 3 und der
Ausgangsgrad ist 1.
Da in dieser Arbeit nur Schaltkreise uber ST D betrachtet werden, kann die graphische
Darstellung von Schaltkreisen vereinfacht werden. In Abbildung 1.4 ist die vereinfachte
Darstellung fur den Schaltkreis SK aus Beispiel 1.2 wiedergegeben.
Fur die Gatter wird der Typ durch die Schaltsymbole aus Abbildung 1.5 wiedergegeben,
wobei der Eingangsgrad durch die Anzahl der eingehenden Kanten gegeben ist. Bei der
Typangabe eines Gatters kann der entsprechende Index auch entfallen. Damit ist z.B. der
Typ eines AND-Gatters aus fAND2 ; AND3; AND4 ; : : :g. Da die Grundfunktionen aller
verwendeten Gatter kommutativ sind, kann auch auf die Angabe der Orientierung der
Eingange fur die Gatter verzichtet werden.
Ein Signal wird nicht mehr durch einen Knoten, sondern durch den entsprechenden Fanoutstamm und die adjazenten Fanoutzweige reprasentiert. Zur Unterscheidung von U berkreuzungen und Verzweigungen werden Verzweigungen durch Punkte markiert.
Auch die primaren Ein- und Ausgange werden nicht mehr durch eigene Knoten dargestellt. Statt dessen sind alle Fanoutstamme, die mit keinen Gatterausgang verbunden sind,
9
1.2. SCHALTKREISE
o1
o2
s7
s8
z5
z1
s4
s5
s6
z2
z3
z4
v typ(v )
z1 EXOR3
z2 AND2
z3 AND2
z4 AND2
z5
OR3
i1
IN
i2
IN
i3
IN
o1 OUT
o2 OUT
s1
SIG
s2
SIG
s1 s2 s3
i1
i2
i3
Graph G = (V ; E )
v i
s1 1
z1 1
z1 2
z1 3
...
I(v; i)
v i O(v; i)
i PI(i)
(i1 ; s1) s1 1 (s1 ; z1) 1 i1
(s1 ; z1) s1 2 (s1 ; z2) 2 i2
(s2 ; z1) s1 3 (s1 ; z3) 3 i3
(s3 ; z1) z1 1 (z1 ; s7)
...
...
...
Orientierung I=O = (I; O; PI; PO)
i
1
2
PO(i)
o1
o2
...
...
s8
SIG
Typung typ
Abbildung 1.3: Beispielschaltkreis SK = (G ; typ; I=O)
s
cout
+
a b cin
Abbildung 1.4: Vereinfachte Darstellung von Schaltkreis SK
Grundzelle
Schaltsymbol
C0
0
C1 BUF NOT
AND
NAND
OR
NOR
1
Abbildung 1.5: Schaltsymbole fur die Grundzellen aus ST D
EXOR
+
10
KAPITEL 1. GRUNDLAGEN
als primare Eingange zu interpretieren. Entsprechend sind Fanoutzweige, die mit keinem
Gattereingang verbunden sind, als primare Ausgange zu interpretieren. Die Orientierung
der primaren Ein- und Ausgange wird durch Angabe von Bezeichnern fur die entsprechenden Fanoutstamme bzw. Fanoutzweige ersetzt. In Abbildung 1.4 sind z.B. die primaren
Eingange mit a, b und cin sowie die primaren Ausgange mit s und cout bezeichnet worden.
Zur Beschreibung der benotigten Flache und der Verzogerungszeit fur die Realisierung
eines Schaltkreises werden verschiedene Bewertungsmethoden verwendet. In dem einfachsten Modell tragt jedes Gatter unabhangig von seinem Typ einen konstanten Wert zu
Groe und Tiefe des Schaltkreises bei:
Denition 1.4
= (G ; typ; I=O) ein Schaltkreis mit G = (V ; E ). Dann gilt:
Die Groe jjSK jj ist durch die Anzahl der Gatter bestimmt, d.h. jjSK jj = jZ j.
Ein Pfad = ((pi; s0); (s0; z1); (z1 ; s1); (s1; z2); : : : ; (sp 1; zp); (zp; sp); (sp; po))
in einem Schaltkreis ist durch eine alternierende Liste von Fanoutstammen
und Fanoutzweigen aus E gegeben, wobei pi 2 Pin ein primarer Eingang und
po 2 Pout ein primarer Ausgang ist sowie zi 2 Z (i 2 f1; 2; : : : ; pg) Gatter und
si 2 S (i 2 f0; 1; : : : ; pg) Signale sind.
Vereinfachend kann auch als (pi; s0 ; z1 ; s1 ; z2 ; : : : ; sp 1 ; zp; sp ; po) geschrieben
Sei SK
werden.
Die Lange ( ) eines Pfades = (pi; s0 ; z1 ; s1 ; z2 ; : : : ; sp 1; zp ; sp; po) ist durch
die Anzahl der Gatter in bestimmt, d.h. ( ) = j fz1 ; z2 ; : : : ; zpg j = p.
Die Tiefe (SK ) des Schaltkreises SK ist durch die Lange des langsten Pfades
gegeben, d.h. (SK ) = max(( )), wobei alle Pfade von SK enthalt.
2
Beispiel 1.3
Entsprechend Denition 1.4 ist die Groe des Schaltkreises aus Abbildung 1.3 durch
jjSK jj = jZ j = 5 gegeben. Der Pfad 1 = (i1 ; s1; z1 ; s7; o1) hat eine Lange von (1) = 1.
Der Pfad 2 = (i1 ; s1; z2 ; s4; z5; s8; o2) hat eine Lange von (2 ) = 2. Neben 2 gibt es
noch weiter Pfade mit Lange 2. Da es aber keine langeren Pfade in SK gibt, ist die Tiefe
des Schaltkreises durch (SK ) = 2 gegeben.
Die Bewertungsmethode aus Denition 1.4 bietet nur eine eingeschrankte Aussagekraft
uber den tatsachlichen Flachenbedarf und die Verzogerungszeit eines Chips, da grundlegende physikalische Eigenschaften vernachlassigt werden. Aber bereits auf der Gatterebene lassen sich weitere Eigenschaften ablesen, die weitestgehend unabhangig von der
Technologie zur Realisierung eines Schaltkreises direkten Einu auf die Groe und Tiefe
haben.
Einerseits ist sowohl die Flache als auch die Verzogerungszeit der Realisierung eines Gatters abhangig von der Komplexitat der realisierten Grundfunktion. Daher ist auf Gatterebene ein Vergleich von Groe und Tiefe fur verschiedene Realisierungen nur dann
aussagekraftig, wenn die Grundfunktionen der verwendeten Gatter vergleichbare Komplexitat haben. Das kann z.B. dadurch erreicht werden, da nur Bibliotheken zugelassen
werden, die ausschlielich Gatter mit einem Eingangsgrad von maximal 2 enthalten.
1.2. SCHALTKREISE
11
Bei einer Realisierung auf Basis einer anderen Bibliothek mu zunachst jedes Gatter mit
groerem Eingangsgrad durch eine entsprechende Realisierung der zugehorigen Grundfunktion ersetzt werden. Bei assoziativen Funktionen kann dies einfach durch einen binaren
Baum aus Gattern mit jeweils 2 Eingangen geschehen. Fur die Ersetzung eines Gatters
mit n 2 Eingangen werden dabei n 1 Gatter mit 2 Eingangen benotigt. Falls ein
balancierter Baum verwendet wird, ist die Tiefe fur jeden Pfad von einem Eingang zu
dem Ausgang des Baumes durch dlog(n)e begrenzt.2; 3 Falls der Eingangsgrad eines Gatters nicht einer Zweierpotenz entspricht, gibt es in dem balancierten Baum auch kurzere
Pfade. Allerdings gibt es immer wenigstens einen Pfad mit der angegebenen worst case
Abschatzung.
Anstelle die Ersetzung von Gattern tatsachlich durchzufuhren, kann die Denition von
Groe und Tiefe so erweitert werden, da obige U berlegungen zu dem Eingangsgrad von
Gattern implizit berucksichtigt werden. In Denition 1.5 wird dementsprechend die Groe
neu deniert. Dabei wird die max-Funktion benotigt, um Gatter mit nur einem Eingang
(z.B. NOT ) weiterhin zu berucksichtigen. Bei der neuen Denition der Tiefe eines Pfades
wird der Eingangsgrad von Gattern in dem ersten Summenterm berucksichtigt. Auch hier
werden Gatter mit einem Eingang wieder durch die max-Funktion berucksichtigt.
Zusatzlich kann bereits auf der Gatterebene der Eekt berucksichtigt werden, da die
tatsachliche Verzogerungszeit eines Gatters mit der zu treibenden Last anwachst. Die Last
wird im wesentlichen durch die Eingangskapazitaten der direkt angeschlossenen Gatter
bestimmt. Dieser Eekt kann vereinfacht dadurch modelliert werden, da jeder Fanoutzweig eines Signals eine zusatzliche Verzogerung von d verursacht. In Denition 1.5 ist
dies bei der neuen Denition der Tiefe eines Pfades durch den zweiten Summenterm
berucksichtigt.
Denition 1.5
= (G ; typ; I=O) ein Schaltkreis mit G = (V ; E ). Dann gilt:
Die Groe jjSK jjd ist gegeben durch jjSK jjd = P max(1; din(z) 1).
z 2Z
Die Lange d() einesp Pfades = (pi; s0; z1 ; s1; z2; : :p: ; sp 1; zp; sp; po) ist geP
P
geben durch d ( ) = max(1; dlog(din(zi ))e) + d dout (si ).
i=1
i=0
Die Tiefe d (SK ) des Schaltkreises SK ist durch die Lange des langsten Pfades gegeben, d.h. d (SK ) = max(d ( )), wobei alle Pfade von SK enthalt.
2
Sei SK
Im folgenden wird fur d der Wert 0:2 verwendet. Dies entspricht der Bewertung, die
auch in dem weit verbreiteten Synthesetool Sis [50] bei der bibliotheksunabhangigen Berechnung der Tiefe eines Schaltkreises mit dem Sis-Befehl print delay -m unit fanout
angewendet wird.
Beispiel 1.4
Entsprechend Denition 1.5 ist die Groe des Schaltkreises aus Abbildung 1.3 durch
jjSK jjd = 2 + 1 + 1 + 1 + 2 = 7 gegeben. Der Pfad 1 = (i1; s1; z1 ; s7; o1) hat eine
Lange von d (1) = 2+0; 2 (3+1) = 2; 8. Der Pfad 2 = (i1; s1 ; z2; s4; z5 ; s8; o2) hat eine
2 log(z )
3 F
ur
bezeichnet in dieser Arbeit den Logarithmus der Zahl z zur Basis 2.
eine reele Zahl x bezeichnet die obere Gau-Klammer dxe die kleinste ganze Zahl k mit k x.
12
KAPITEL 1. GRUNDLAGEN
Lange von d (2 ) = 1 + 2 + 0; 2 (3 + 1 + 1) = 4; 0. Neben 2 gibt es noch weiter Pfade
mit Lange 4. Da es aber keine langeren Pfade in SK gibt, ist die Tiefe des Schaltkreises
durch d(SK ) = 4 gegeben.
Bisher wurde in dem Modell fur Schaltkreise noch nicht beschrieben, wie sich der Schaltkreis nach dem Anlegen von binaren Werten an die primaren Eingange verhalt. Da das
beschriebene Modell auf der Gatterebene basiert, kann das genaue zeitliche Verhalten
vernachlassigt werden, und es braucht nur das logische Verhalten beschrieben werden.
In der folgenden Denition werden die Belegungen in Schaltkreisen fur die Bibliothek
ST D deniert, bei der alle Gatter nur einen Ausgangsgrad von 1 haben. Dabei werden die
logischen Werte nicht den Signalen, sondern den Kanten in dem Schaltkreis zugeordnet.
Diese Denition erleichtert die Modellierung von Fehlern in Kapitel 3.
Denition 1.6
Sei SK = (G ; typ; I=O) ein Schaltkreis uber der Bibliothek ST D mit G = (V ; E ) und
Z V die Menge der Gatter, Pin V die Menge der primaren Eingange, Pout V
die Menge der primaren Ausgange sowie S V die Menge der Signale.
Eine Eingangsbelegung a = (a1 ; a2 ; : : : ; ajPin j) ordnet jedem primaren Eingang PI(i) 2 Pin (i 2 f1; 2; : : : ; jPinjg) den Booleschen Wert ai zu.
Fur eine Eingangsbelegung a ist die Schaltkreisbelegung vala : E ! IB folgendermaen
deniert:
8
ai
falls e = (p; s) 2 Pin S mit p = PI(i)
>
>
>
>
<
falls e = (s; z ) 2 S (Z [ Pout )
vala (e) = > vala (I (s; 1))
>
>
typ(z)(vala(I(z; 1)); vala (I(z; 2)); : : : ; vala(I(z; din(z))))
>
:
falls e = (z; s) 2 Z S
Fur eine Schaltkreisbelegung vala zu der Eingangsbelegung a ist die Ausgangsbelegung b = (b1 ; b2 ; : : : ; bjPoutj ) durch die Zuordnung bj = vala (I(PO(j ); 1))
(j 2 f1; 2; : : : ; jPoutjg) deniert.
Beispiel 1.5
In Abbildung 1.6 ist fur den Schaltkreis aus Beispiel 1.2 die Schaltkreisbelegung fur die
Eingangsbelegung (0; 1; 1) dargestellt. Insbesondere bei Signalen mit nur einem Fanoutzweig kann die Darstellung vereinfacht werden, indem der logische Werte nur fur den
zugehorigen Fanoutstamm oder Fanoutzweig angegeben wird.
1.3
Decision Diagrams
Decision Diagrams (DDs) werden zur graphbasierten Darstellung von Booleschen Funktionen verwendet. Auerdem bieten DDs einfache Methoden, um Boolesche Funktionen zu
manipulieren. Durch die EÆzienz der Darstellung und Manipulation haben DDs Einzug
in viele moderne Werkzeuge im Bereich CAD, Synthese und Verikation gefunden.
Der popularste Vertreter der DDs sind die Binary Decision Diagrams (BDDs) [15]. Dabei
wird eine Boolesche Funktion durch wiederholte Anwendung der Shannon-Dekomposition
zerlegt. In den Functional Decision Diagrams (FDDs) [36] wird die Boolesche Funktion mit
13
1.3. DECISION DIAGRAMS
s
cout
0
1
0
0
0
1
+
01 1
0
1
0
1
1
1
01 1
a b cin
Abbildung 1.6: Schaltkreisbelegung fur die Eingangsbelegung (0,1,1)
Hilfe der Davio-Dekomposition zerlegt. Eine allgemeinere Form bilden die Kronecker Functional Decision Diagrams (KFDDs) [23]. Hier kann sowohl die Shannon-Dekomposition als
auch die Davio-Dekomposition zur Zerlegung der Booleschen Funktion verwendet werden.
BDDs und FDDs konnen also jeweils als Spezialfall von KFDDs betrachtet werden. Durch
die gemeinsame Verwendung der Shannon-Dekomposition und der Davio-Dekomposition
in KFDDs kann die Darstellungsgroe im Vergleich zu BDDs oder FDDs zum Teil erheblich reduziert werden. In [7] wurde z.B. fur die Familie der Hidden Weighted Bit Funktionen [16] gezeigt, da die Groe einer Darstellung als BDD oder FDD immer exponentiell
mit der Anzahl der Variablen wachst, wohingegen es Darstellungen als KFDD gibt, bei
denen die Groe nur polynomiell anwachst.
In den folgenden Abschnitten werden zunachst die syntaktische Beschreibung von allgemeinen DDs sowie gebrauchliche Bezeichnungen eingefuhrt. Nach einem U berblick uber
die verschiedenen Klassen von DDs werden mit den KFDDs, BDDs und FDDs verschiedene Auspragungen von DDs vorgestellt. Weiterhin wird die Semantik der vorgestellten
DDs durch die Zuordnung einer Booleschen Funktion deniert. Abschlieend werden noch
Reduktionen und inverse Reduktionen eingefuhrt, mit denen Knoten entfernt bzw. eingefugt werden konnen, um zusatzliche Struktureigenschaften fur DDs zu erreichen. Eine
ausfuhrliche Abhandlung uber DDs ist in [21] zu nden.
1.3.1 Allgemeine Decision Diagrams
Ein DD ist durch einen Graphen mit besonderen Eigenschaften und einigen ausgezeichneten Knoten, den Wurzeln, gegeben. Die Wurzeln des DDs werden in der Wurzelliste
zusammengefat.
Formal werden die syntaktischen Eigenschaften von DDs folgendermaen deniert:
Denition 1.7
Ein Decision Diagram D = (G; R; Xn ) uber einer Menge von Booleschen Variablen Xn = fx1 ; x2 ; : : : ; xn g ist gegeben durch einen gerichteten und azyklischen
Graphen G = (V; E ) und eine Wurzelliste R = (r1 ; r2 ; : : : ; rm ) 2 V m (m 2 IN) mit
folgenden Eigenschaften:
14
KAPITEL 1. GRUNDLAGEN
Jeder Knoten, der keine Wurzel ist (v 2 V n fr1 ; r2 ; : : : ; rm g)4 , hat mindestens
eine eingehende Kante.5
Die Menge der Knoten V = VI [ VT setzt sich zusammen aus den disjunkten
Mengen der inneren Knoten VI und der terminalen Knoten VT .
{ Jeder innere Knoten v 2 VI ist mit einer Entscheidungsvariablen xi 2
Xn markiert und hat genau zwei ausgehende Kanten: die LOW-Kante
low(v) und die HIGH-Kante high(v).
{ Jeder terminale Knoten v 2 VT ist mit 0 oder 1 markiert und hat keine
ausgehende Kante.
Da in dieser Arbeit nur Auspragungen von DDs betrachtet werden, mit denen Boolesche
Funktionen dargestellt werden, wurden in Denition 1.7 bereits einige Einschrankungen
vorgenommen.
Es ist z.B. moglich, Entscheidungsvariablen aus Xn nicht nur fur Boolesche Werte, sondern
fur eine beliebige diskrete Menge M zu denieren. Dies fuhrt zu den in [52] vorgestellten
Multi-valued Decision Diagrams (MDDs). Fur MDDs reichen allerdings die zwei ausgehenden Kanten fur jeden inneren Knoten nicht aus. Statt dessen mu jeder innere Knoten
jM j ausgehende Kanten haben.
Die bisher beschriebenen DDs sind alle zur Darstellung von Funktionen in die Menge
der Booleschen Werte geeignet und werden als bit-level DDs bezeichnet. Eine weitere
Moglichkeit zur Verallgemeinerung bestehtn darin,m word-level DDs zu verwenden, mit denen pseudo-Boolesche Funktionen f : IB ! ZZ in die ganzen Zahlen dargestellt werden konnen. Dies kann sehr einfach dadurch erreicht werden, da die terminalen Knoten
mit ganzen Zahlen markiert sein durfen. Die dabei entstehenden DDs werden als MultiTerminal Binary Decision Diagrams (MTBDDs) [18] oder Algebraic Decision Diagrams
(ADDs) [4] bezeichnet.
Es gibt noch eine Vielzahl von weiteren Verallgemeinerungen fur bit-level und word-level
DDs, auf die im Rahmen dieser Arbeit aber nicht eingegangen wird. Ein umfangreicher
U berblick ist in [21] zu nden. Mit Denition 1.7 konnen alle hier betrachteten bit-level
DDs uber Booleschen Entscheidungsvariablen beschrieben werden.
Beispiel 1.6
In Abbildung 1.7 ist eine graphische Reprasentation fur ein DD D = (G; R; X4) gegeben.
Innere Knoten sind jeweils durch einen Kreis und terminale Knoten durch ein Quadrat
dargestellt. Der jeweilige Bezeichner ist rechts oberhalb des Knoten angegeben. Die Menge
der inneren Knoten VI besteht aus v1; v2 ; : : : ; v10 und die Menge der terminalen Knoten ist
VT = fv11 ; v12 g. Die Knoten in der Wurzelliste R = (v1 ; v2 ) sind durch zusatzliche Kanten
markiert, die nicht von einem Knoten ausgehen. Aus graphentheoretischem Blickpunkt
sind dies keine Kanten, da sie nicht zwei Knoten des Graphen verbinden. Aber durch die
Verwendung dieser zusatzlichen Kanten vereinfacht sich die Beschreibung der im folgenden
vorgestellten Algorithmen erheblich.
Eine gerichtete Kante e = (v; v0) wird durch einen Pfeil von Knoten v zu Knoten v0 dargestellt. Fur jeden inneren Knoten wird die LOW-Kante durch die linke ausgehende Kante
des Knotens reprasentiert. Analog wird die HIGH-Kante durch die rechte ausgehende
Kante reprasentiert. Fur Knoten v1 ist low(v1 ) = (v1; v3 ) und high(v1 ) = (v1 ; v5). Mengendierenz M1 n M2 enthalt alle Elemente, die in M1 aber nicht in M2 sind.
der hier verwendeten Terminologie durfen auch Wurzeln eingehende Kanten haben.
4 Die
5 In
15
1.3. DECISION DIAGRAMS
X1
X2
X3
v1
v3
X2
1
v6
X3
1
X4
X1
1
2
v4
X2
2
v7
X3
2
v9
X4
1
1
v2
v11
1
0
v5
3
v8
3
v10
2
v12
2
Abbildung 1.7: Graphische Reprasentation eines DDs
Folgende Bezeichnungen werden verwendet:
Denition 1.8
Sei D = (G; R; Xn) ein DD. Dann gilt:
Fur einen Knoten v 2 VI gibt der low-Nachfolger low(v ) den Knoten an, auf
den die Kante low(v ) zeigt. Entsprechend gibt der high-Nachfolger high(v )
den Knoten an, auf den die Kante high(v ) zeigt.
Fur alle Knoten aus V ist das Label durch die Funktion label : V ! Xn [f0; 1g
gegeben. Der Funktionswert ist jeweils durch die in Denition 1.7 eingefuhrten
Markierungen der Knoten deniert.
Fur alle Knoten aus V ist der Index durch die Funktion index : V ! f1; 2; : : : ;
n + 1g gegeben. Fur innere Knoten v 2 VI mit label(v ) = xi ist index(v ) = i.
Fur terminale Knoten v 2 VT ist index(v ) = n + 1.
Die Menge der Knoten V ist unterteilt in n + 1 disjunkte Level, die mit
level1 ; level2; : : : ; leveln+1 bezeichnet werden. leveli = fv 2 V j index(v) = ig
enthalt jeweils alle Knoten mit Index i. Insbesondere enthalt leveln+1 alle terminalen Knoten.
widthi = jlevelij als die Breite des Levels gegeben.
Fur alle Knoten aus leveli ist die Position durch die Bijektion posi : leveli !
f1; 2; : : : ; widthig gegeben.
Fur jeden Level ist
16
KAPITEL 1. GRUNDLAGEN
Die Gro
e jjDjj des DDs D ist deniert durch das Maximum aus der Anzahl
der inneren Knoten und der Anzahl von Leveln, d.h. jjDjj = max(jVI j; n + 1)6 .
Beispiel 1.7
Fur Knoten v1 des DDs D aus Abbildung 1.7 ist der low-Nachfolger low(v1 ) = v3 und der
high-Nachfolger high(v1 ) = v5 . Die Label sind innerhalb der Knoten gegeben. Fur den
inneren Knoten v1 ist label(v1) = x1 und fur den terminalen Knoten v12 ist label(v12) = 0.
Der Index eines Knoten kann direkt an dem Label abgelesen werden und ist deshalb nicht
separat angegeben. Die Knoten v1 und v2 mit Label x1 bilden level1 . Auerdem ist level5
durch die terminalen Knoten v11 und v12 gegeben. Da sowohl level1 als auch level5 jeweils
2 Knoten enthalt, gilt fur deren Breiten width1 = width5 = 2. Die Position ist jeweils
rechts unterhalb der Knoten angegeben. Fur die Knoten aus level1 ist pos1(v1 ) = 1 und
pos1 (v2) = 2. Die Groe des DDs ist jjDjj = 10.
Meist werden weitere strukturelle Eigenschaften fur DDs gefordert. In der folgenden Denition werden Einschrankungen an die Entscheidungsvariablen der Knoten auf den Pfaden
von den Wurzeln zu den terminalen Knoten gemacht.
Denition 1.9
Sei D ein DD uber Xn . Dann gilt:
a) D ist frei, falls jede Entscheidungsvariable auf jedem Pfad von einer Wurzel
zu einem terminalen Knoten hochstens einmal vorkommt.
b) D ist geordnet, falls D frei ist und die Entscheidungsvariablen auf jedem
Pfad von einer Wurzel zu einem terminalen Knoten in der gleichen Reihenfolge
vorkommen. Diese Reihenfolge wird als Variablenordnung bezeichnet.
c) D hat eine natu
rliche Variablenordnung, falls D geordnet ist und die Indizes der Knoten auf jedem Pfad von einer Wurzel zu einem terminalen Knoten
in steigender Reihenfolge vorkommen, d.h. fur jede Kante e = (v; v 0 ) 2 E gilt:
index(v) < index(v0).
Beispiel 1.8
Das DD aus Abbildung 1.7 ist frei, geordnet und hat eine naturliche Variablenordnung. Die Groe von geordneten DDs hangt sehr stark von der verwendeten Variablenordnung
ab. Daher ist es fur den praktischen Einsatz von DDs unabdingbar, die Variablenordnung
durch geeignete Methoden zu optimieren (siehe z.B. [28, 45, 27]). Um eine einfachere
und uberschaubare Beschreibung der in dieser Arbeit vorgestellten Methoden und Algorithmen zu ermoglichen, werden im folgenden jedoch nur geordnete DDs mit naturlicher
Variablenordnung betrachtet. Fur die experimentellen Ergebnisse wurde die Variablenordnung selbstverstandlich optimiert.
6 In der Literatur wird f
ur die Groe eines DDs meistens nur die Anzahl der inneren bzw. aller Knoten
verwendet. Fur praktische Beispiele ist diese Anzahl auch groer als die Anzahl von Leveln. Die hier
gewahlte Denition vereinfacht jedoch an einigen Stellen die Diskussion von Laufzeitschranken.
17
1.3. DECISION DIAGRAMS
1.3.2 Kronecker Functional Decision Diagrams
Es wird die Semantik von KFDDs7 durch die Zuordnung von Booleschen Funktionen zu
bit-level DDs uber Booleschen Entscheidungsvariablen deniert. Da BDDs und FDDs
Spezialfalle von KFDDs sind, ist damit auch deren Semantik gegeben.
Die Boolesche Funktion f 2 IBn;m eines KFDDs wird durch die Booleschen Funktionen
beschrieben, die durch die Wurzeln dargestellt werden. Daher werden zunachst Boolesche
Funktionen betrachtet, die durch einen Knoten dargestellt werden, die auch kurz als
Boolesche Funktion des Knotens bezeichnet wird.
Die Boolesche Funktion fv des inneren Knoten v eines DDs ergibt sich durch Anwendung
von Regeln zur Zusammensetzung aus den Booleschen Funktionen der beiden Nachfolger
low(v) und high(v). Sofern die durch die terminalen Knoten reprasentierten Funktionen
bekannt sind, kann die Funktion einer Wurzel rekursiv durch wiederholte Anwendung der
Regeln bestimmt werden.
Fur die Beschreibung der durch die Nachfolger eines Knotens dargestellten Booleschen
Funktionen sind die Kofaktoren von zentraler Bedeutung:
Denition 1.10
Sei f 2 IBn eine Boolesche Funktion uber der Booleschen Variablenmenge Xn und
sei xi eine Boolesche Variable aus Xn .
a) Die Kofaktoren von f nach xi und xi sind deniert durch:
fjxi (x1 ; : : : ; xi 1 ; xi ; xi+1 ; : : : ; xn )
fjxi (x1 ; : : : ; xi 1 ; xi ; xi+1 ; : : : ; xn )
= f (x1 ; : : : ; xi 1 ; 0; xi+1; : : : ; xn)
= f (x1 ; : : : ; xi 1 ; 1; xi+1; : : : ; xn)
b) Die Boolesche Dierenz der Kofaktoren von f ist deniert durch:
fjxi xi (x1 ; x2 ; : : : ; xn )
= fjxi (x1 ; x2 ; : : : ; xn) fjxi (x1 ; x2 ; : : : ; xn)
Im folgenden werden die Kofaktoren nach xi und xi sowie die Boolesche Dierenz der
Kofaktoren zusammenfassend als Kofaktoren bezeichnet.
Alle Kofaktoren einer Funktion f 2 IBn hangen nicht mehr von der Variablen xi ab. Daher
konnen fjxi , fjxi und fjxixi auch als Funktionen aus IBn 1 interpretiert werden. Durch
wiederholte Anwendung der Kofaktorbildung konnen Funktionen aus IB0 erreicht werden.
Dies sind nur die konstanten Funktionen 0 und 1.
In dem Shannonschen Entwicklungssatz werden Regeln angegeben, um die Gesamtfunktion mit Hilfe der Kofaktoren darzustellen:
Satz 1.1 (Shannonscher Entwicklungssatz)
Sei f 2 IBn eine Boolesche Funktion uber der Booleschen Variablenmenge Xn . Dann
gilt fur alle i 2 f1; 2; : : : ; ng:
f
f
f
7 Die
= xi fjxi + xi fjxi
= fjxi xi (fjxi fjxi )
= fjxi xi (fjxi fjxi )
Shannon
(S)
positiv Davio (pD)
negativ Davio (nD)
hier betrachteten geordneten KFDDs werden in der Literatur oft als OKFDDs bezeichnet.
18
KAPITEL 1. GRUNDLAGEN
Bemerkung 1.1
In Gleichung (S ) kann das OR durch ein EXOR ersetzt werden, d.h. fur f
und i 2 f1; 2; : : : ; ng gilt auch: f = xi fjxi xi fjxi
2 IBn
Die Gleichungen (S ), (pD) und (nD) werden auch als Shannon-Dekomposition, positive Davio-Dekomposition und negative Davio-Dekomposition bezeichnet. Der
Beweis des Satzes und der Bemerkung folgt direkt durch Nachrechnen. Zur Veranschaulichung dient folgendes Beispiel:
Beispiel 1.9
Sei f = x1 x2 x1x3 x2x3 2 IB3 gegeben. Dann sind die Kofaktoren von f nach x1 und
x1 gegeben durch fjx = x3 x2 x3 und fjx = x2 x2 x3 . Die Boolesche Dierenz der
Kofaktoren ist fjx x = x3 x2 . Damit kann f entsprechend den Dekompositionsregeln
1
1
aus Satz 1.1 folgendermaen dargestellt werden:
f = x1 (x3 x2 x3 ) + x1 (x2 x2 x3 )
= x3 x2x3 x1 (x3 x2 )
= x2 x2x3 x1 (x3 x2 )
1
1
In einem geordneten KFDD zu einem DD D = (G; R; Xn) mit naturlicher Variablenordnung wird dem Level leveli (1 i n) ein Dekompositionstyp di 2 fS; pD; nDg
zugeordnet. Die einzelnen Dekompositionstypen werden in einer Dekompositionstypliste (DTL) d = (d1 ; d2 ; : : : ; dn ) zusammengefat. Der Dekompositionstyp eines inneren
Knoten v 2 leveli entspricht dann dem Dekompositionstypen di von leveli und die durch
v dargestellte Funktion wird durch Anwendung der Dekompositionsregel di aus Satz 1.1
berechnet. Den terminalen Knoten werden die konstanten Funktionen 0 und 1 zugeordnet.
Formal lat sich ein KFDD und die durch die Knoten der Wurzelliste dargestellte Boolesche Funktion folgendermaen denieren:
Denition 1.11
Ein Kronecker Functional Decision Diagram K = (G; R; Xn ; d) ist gegeben
durch ein DD D = (G; R; Xn) uber Xn mit der Wurzelliste R = (r1 ; r2 ; : : : ; rm ) sowie
einer DTL d = (d1 ; d2; : : : ; dn ). Die durch einen Knoten v 2 V mit index(v ) = i
reprasentierte Boolesche Funktion fv 2 IBn sei induktiv deniert durch:
fv =
8
>
>
>
>
>
<
>
>
>
>
>
:
0
1
xi flow(v) + xi fhigh(v)
flow(v) xi fhigh(v)
flow(v) xi fhigh(v)
falls
falls
falls
falls
falls
i = n + 1 ^ label(v ) = 0
i = n + 1 ^ label(v ) = 1
i n ^ di = S
i n ^ di = pD
i n ^ di = nD
wobei flow(v) (fhigh(v) ) die durch den Knoten
Boolesche Funktion ist.
low(v) (high(v)) reprasentierte
Die durch das KFDD dargestellte Boolesche Funktion f = (fr1 ; fr2 ; : : : ; frm ) 2 Bn;m
ist dann durch die Booleschen Funktionen der Wurzeln deniert.
19
1.3. DECISION DIAGRAMS
Ein KFDD kann als Darstellung der rekursiven Zerlegung einer Booleschen Funktion
nach dem Shannonschen Entwicklungssatz interpretiert werden. Fur einen inneren Knoten
v 2 leveli stellen die Nachfolger von v abhangig von dem Dekompositionstyp di folgende
Kofaktoren dar:
Die Boolesche Funktion des low-Nachfolgers flow(v) entspricht fur di 2 S; pD dem Kofaktor
fv jx und fur di = nD dem Kofaktor fv jx . Die Boolesche Funktion des high-Nachfolgers
fhigh(v) ist fur di = S der Kofaktor fv jx und fur di 2 fpD; nDg die Boolesche Dierenz
der Kofaktoren fv jxixi .
Falls in einem KFDD verschiedene Boolesche Funktionen dargestellt werden, fur die aber
einzelne Kofaktoren der gleichen Booleschen Funktion entsprechen, dann konnen die gleichen Kofaktoren auch durch den gleichen Knoten des DDs dargestellt werden. Im nachsten
Abschnitt wird noch genauer darauf eingegangen, unter welchen Bedingungen gleiche Kofaktoren durch gleiche Knoten dargestellt werden und in welchen Fallen verschiedene
Knoten verwendet werden.
1
1
1
Beispiel 1.10
In Abbildung 1.8 ist ein KFDD basierend auf dem DD aus Beispiel 1.6 dargestellt. Entsprechend der DTL d = (S; pD; nD; S ) sind die einzelnen Dekompositionstypen jeweils
links von allen Knoten des jeweiligen Levels angegeben. Auerdem ist fur jeden Knoten
dessen dargestellte Funktion angegeben. Die Booleschen Funktionen fv und fv haben
jeweils den gleichen Kofaktor fv jx = fv jx = x4 x3 x4 x2 x3 x4 . Deshalb konnen beide
Kofaktoren durch den gleichen Knoten v5 dargestellt werden und die HIGH-Kanten von
v1 und v2 konnen beide zu v5 fuhren.
1
1
2
1
1
fv
DT
1
X1
S
v1
X1
1
v2
2
X2
v3
X2
1
v4
X2
2
v5
3
=
fv
fv
fv
fv
fv
fv
fv
fv
fv
fv
=
=
=
=
=
=
=
=
=
=
3
4
5
nD
X3
v6
X3
1
v7
X3
2
v8
3
6
7
S
X4
v9
X4
1
v10
2
8
9
10
11
1
v11
1
0
v12
2
=
fv
2
pD
2
12
x1 x3 x4 x1 x2 x4 x1 x2 x3 x4
x1 x4 x1 x3 x4 x1 x2 x3 x4
x1 x3 x4 x1 x2 x3 x4 x1 x4
x1 x3x4 x1 x2x3 x4
x3 x4 x2 x4 x2 x3 x4
x3 x4 x2 x3 x4
x4 x3 x4 x2 x3 x4
x3 x4
x4 x3 x4
x3 x4
x4
x4
1
0
Abbildung 1.8: KFDD und dargestellte Boolesche Funktionen
20
KAPITEL 1. GRUNDLAGEN
Bei der Darstellung von Booleschen Funktionen durch KFDDs hat neben der Variablenordnung auch die Wahl der DTL einen groen Einu auf die Groe des KFDDs. Verfahren
zur Optimierung von Variablenordnung und DTL werden z.B. in [23, 20, 34] beschrieben.
1.3.3 Reduktionen
In Beispiel 1.10 wurde bereits gezeigt, da verschiedene Kofaktoren, die der gleichen Booleschen Funktion entsprechen, durch den gleichen Knoten dargestellt werden konnen. Da
KFDDs in vielen Anwendungen nur zur Darstellung und Manipulation von Booleschen
Funktionen eingesetzt werden, ist es wunschenswert, die Groe der KFDDs zu minimieren. Dazu werden verschiedene Reduktionen eingefuhrt, mit denen Knoten mit gleicher
Boolescher Funktion identiziert und entfernt werden konnen. Fur die hier betrachtete
Anwendung ist es allerdings auch notig, da bestimmte Knoten mit gleicher Boolescher
Funktion in verschiedenen Leveln des KFDDs existieren. Zum Einfugen solcher Knoten
konnen inverse Reduktionen verwendet werden, die direkt aus den Reduktionen abgeleitet
werden konnen.
Zunachst werden strukturelle Beziehungen fur Knoten in einem KFDD deniert. Anschlieend wird gezeigt, da diese Bedingungen hinreichend fur die Gleichheit der Booleschen
Funktionen der Knoten sind.
Denition 1.12
= (G; R; Xn; d) ein KFDD und seien v; v0 2 V zwei Knoten des Graphen
G = (V; E ).
a) v ist isomorph zu v 0 , falls label(v ) = label(v 0 ) und bei inneren Knoten zusatzlich low(v ) = low(v 0 ) und high(v ) = high(v 0 ) gilt.
b) v ist S-aquivalent zu v 0 , falls v ein innerer Knoten mit dindex(v) = S ist und
low(v) = high(v) = v0 gilt.
c) v ist D-
aquivalent zu v 0 , falls v ein innerer Knoten mit dindex(v) 2 fpD; nDg
ist und low(v ) = v 0 sowie label(high(v )) = 0 gilt.
Zusammenfassend wird ein Knoten v als aquivalent8 zu einem Knoten v0 bezeichnet, falls
v isomorph, S-aquivalent oder D-aquivalent zu v 0 ist.
Sei K
Beispiel 1.11
In der oberen Halfte von Abbildung 1.9 sind Ausschnitte aus KFDDs mit aquivalenten
Knoten angegeben. Unabhangig von dem Dekompositionstypen ist Knoten u isomorph zu
u0 . Der Knoten v ist S-aquivalent zu v 0 , falls der Knoten v den Dekompositionstyp S hat.
Schlielich ist der Knoten w D-aquivalent zu w0, falls der Knoten w den Dekompositionstyp
pD oder nD hat.
Lemma 1.2
Seien v und v 0 zwei aquivalente Knoten eines KFDDs. Dann reprasentieren v und
v 0 die gleiche Boolesche Funktion.
8 Die Bezeichnung basiert auf der Aquivalenz

der dargestellten Booleschen Funktionen. Bei der S 


Aquivalenz
und D-Aquivalenz
handelt es sich nicht um Aquivalenzbeziehungen
im klassischen Sinne, da
sie nicht symmetrisch sind, d.h. wenn v aquivalent zu v ist, dann folgt nicht, da v aquivalent zu v ist.
0
0
21
1.3. DECISION DIAGRAMS
Beweis:
Fur isomorphe, terminale Knoten folgt der Beweis direkt aus Denition 1.11. Ansonsten
konnen die Booleschen Funktionen der jeweiligen Nachfolger von v und v0 in die Gleichungen aus Denition 1.11 eingesetzt werden:
Falls v 2 leveli mit di = pD und v D-aquivalent zu v0 ist, gilt wegen low(v) = v0 und
label(high(v)) = 0, da flow(v) = fv0 und fhigh(v) = 0. Damit ist nach Denition 1.11
fv = flow(v) xi fhigh(v) = fv0 xi 0 = fv0 .
Fur die verbleibenden Falle folgt die Gleichheit der Booleschen Funktionen von v und v0
analog.
d i {S, pD, nD}
Xi
u
Xi
u1
u’
d i {S}
u2
Xi
v
Xj
v’
d i {pD, nD}
Xi
w
Xj
w’
0
I
-1
I
Xi
u1
S
-1
S
D
-1
D
u’
u2
Xj
v’
Xj
w’
Abbildung 1.9: Reduktionen und inverse Reduktionen
Um die Groe eines KFDDs mit aquivalenten Knoten zu reduzieren, konnen Knoten, die
zu einem anderen Knoten aquivalent sind, entfernt werden. Andererseits konnen aber auch
neue Knoten in das KFDD eingefugt werden, um bestimmte Struktureigenschaften des
zugrundeliegenden Graphen zu erreichen.
Im folgenden werden fur einen Knoten v eingehende Kanten und Vorkommen in der
Wurzelliste zusammenfassend als Referenzen bezeichnet. Die Ersetzung einer Referenz auf
v durch eine Referenz auf v 0 erfolgt fur eine eingehende Kante (u; v ) durch Entfernen von
(u; v) und Einfugen einer neuen Kante (u; v0). Fur ein Vorkommen von v in der Wurzelliste
erfolgt die Ersetzung der Referenz einfach, indem in der Wurzelliste das Vorkommen
von v durch v0 ersetzt wird. Damit lassen sich Reduktionen und inverse Reduktionen
folgendermaen denieren:
22
KAPITEL 1. GRUNDLAGEN
Denition 1.13
Sei K = (G; R; Xn; d) ein KFDD mit G = (V; E ).
a) Seien v; v 0 2 V zwei Knoten, wobei v aquivalent zu v 0 ist. Die Reduktion von
v auf v 0 ist folgendermaen deniert:
Ersetze alle Referenzen auf v durch Referenzen auf v 0 und losche den Knoten v .
Falls v ein innerer Knoten ist, losche auch die Kanten low(v ) und high(v ).
Existiert danach keine Referenz mehr auf high(v )9 , dann losche auch diesen
Knoten.
Falls v isomorph zu v0 ist, heit die Reduktion I-Reduktion von v auf v0
und wird mit I (v; v 0) bezeichnet.
Falls v S-aquivalent zu v0 ist, heit die Reduktion S-Reduktion von v auf
v 0 und wird mit S (v; v 0) bezeichnet.
Falls v D-aquivalent zu v0 ist, heit die Reduktion D-Reduktion von v
auf v 0 und wird mit D(v; v 0) bezeichnet.
b) Sei v 0 2 V ein Knoten mit Referenz r. Falls r als Wurzel v 0 gegeben ist, dann
sei 1 i < index(v 0 ). Falls r durch eine Kante (u; v 0) gegeben ist, dann sei
index(u) < i < index(v0).
Falls neben r noch mindestens eine weitere Referenz auf v0 existiert, dann
ist die inverse I-Reduktion I 1 (v 0 ; r) von v 0 bzgl. r folgendermaen deniert:
Fuge einen neuen Knoten v mit label(v ) = label(v 0 ) ein und ersetze die
Referenz r durch eine Referenz auf v . Falls v 0 ein innerer Knoten ist,
fuge auerdem zwei neue Kanten low(v ) = (v; low(v 0 )) und high(v ) =
(v; high(v0)) ein.
Die inverse S-Reduktion S 1(v0; r; i) von v0 bzgl. r auf Level i ist folgendermaen deniert:
Fuge einen neuen Knoten v mit label(v ) = xi sowie zwei neue Kanten
low(v ) = (v; v 0 ) und high(v ) = (v; v 0 ) ein und ersetze die Referenz r
durch eine Referenz auf v .
Die inverse D-Reduktion D 1(v0; r; i) von v0 bzgl. r auf Level i ist folgendermaen deniert:
Falls kein terminaler Knoten z mit label(z ) = 0 existiert, fuge einen solchen Knoten ein. Fuge auerdem einen neuen Knoten v mit label(v ) = xi
sowie zwei neue Kanten low(v ) = (v; v 0 ) und high(v ) = (v; z ) ein und
ersetze die Referenz r durch eine Referenz auf v .
Beispiel 1.12
In Abbildung 1.9 wird Knoten u durch die I-Reduktion I (u; u0), Knoten v durch die
S-Reduktion S (v; v0) und Knoten w durch die D-Reduktion D(w; w0) entfernt. Die resultierenden KFDDs sind jeweils in der unteren Halfte der Abbildung gezeigt.
Entsprechend resultieren die oberen KFDDs durch inverse Reduktionen aus den unteren
KFDDs. Dazu seien die Knoten u0, v0 und w0 in der jeweiligen Wurzelliste. Dann wird Knoten u durch die inverse I-Reduktion I 1(u0; u0), Knoten v durch die inverse S-Reduktion
S 1 (v 0 ; v 0 ; i) und Knoten w durch die inverse D-Reduktion D 1 (w0 ; w0; i) eingefugt. Die
Wurzellisten mussen noch entsprechend geandert werden.
9 Dies
kann nur bei der D-Reduktion vorkommen, falls high(v ) ein terminaler Knoten mit Label 0 ist.
23
1.3. DECISION DIAGRAMS
Denition 1.14
Sei K
= (G; R; Xn; d) ein KFDD mit G = (V; E ), e = (u; v) 2 E eine Kante und
w 6= v ein Knoten, so da folgendes gilt:
Fur Knoten v existiert auer e noch mindestens eine weitere Referenz.
Die Booleschen Funktionen von v und w sind gleich, d.h. fv = fw .
Dann ist die legale Kantenersetzung K (e; w) folgendermaen deniert:
Ersetze die Kante e = (u; v ) durch eine neue Kante (u; w).
Beispiel 1.13
In dem linken KFDD in Abbildung 1.10 seien die durch v und w dargestellten Booleschen Funktionen gleich. Durch die legale Kantenersetzung K (low(u); w) wird das linke
KFDD in das rechte KFDD uberfuhrt. Entsprechend wird durch die legale Kantenersetzung K (low(u); v) in dem rechten KFDD das linke KFDD erzeugt.
u
u
K
K
v
w
v
w
Abbildung 1.10: Legale Kantenersetzung fur fv = fw
Lemma 1.3
Sei K = (G; R; Xn; d) ein KFDD und K 0 sei aus K durch wiederholte Anwendung
von Reduktionen, inversen Reduktionen und legalen Kantenersetzungen entstanden.
Dann reprasentieren K und K 0 die gleiche Boolesche Funktion.
Der Beweis des Lemmas folgt direkt aus Denition 1.13 und Lemma 1.2 bzw. Denition 1.14.
Die vorgestellten Methoden zur Modikation eines KFDDs unter Beibehaltung der dargestellten Booleschen Funktion konnen nun verwendet werden, um KFDDs zu erzeugen,
die bestimmte strukturelle Eigenschaften erfullen.
24
KAPITEL 1. GRUNDLAGEN
Denition 1.15
Sei K = (G; R; Xn; d) ein KFDD.
a) K heit reduziert, falls auf K keine I-Reduktion, keine S-Reduktion und keine
D-Reduktion angewendet werden kann.
b) K heit vollstandig, falls auf K keine inverse S-Reduktion und keine inverse
D-Reduktion angewendet werden kann.
c) K heit quasi-reduziert, falls auf K keine I -Reduktion angewendet werden
kann.
Im folgenden wird gezeigt, da jedes gegebene KFDD sowohl in ein reduziertes als auch
in ein vollstandiges, quasi-reduziertes KFDD uberfuhrt werden kann. Weiterhin sind bei
gegebener DTL und naturlicher Variablenordnung beide Formen des KFDDs bis auf Isomorphie eindeutig bestimmt.
Denition 1.16
Sei K = (G; R; Xn; d) ein KFDD mit G = (V; E ) und R = (r1 ; r2 ; : : : ; rm ) und
0 ).
sei K 0 = (G0 ; R0 ; Xn ; d) ein KFDD mit G0 = (V 0 ; E 0 ) und R0 = (r10 ; r20 ; : : : ; rm
0
0
Dann heit K isomorph zu K , wenn es eine bijektive Abbildung : V ! V mit
folgenden Eigenschaften gibt:
8i 2 f1; 2; : : : ; mg : (ri) = ri0
8v 2 V : label((v)) = label(v)
8v 2 VI : low((v)) = (low(v)) und high((v)) = (high(v))
Lemma 1.4
Jedes KFDD K = (G; R; Xn ; d) kann in Zeit O(jjK jj) in ein reduziertes KFDD
uberfuhrt werden, das bis auf Isomorphie eindeutig bestimmt ist.
In [51] wurde gezeigt, da ein reduziertes BDD in linearer Zeit berechnet werden kann.
Der Beweis der Eindeutigkeit bei gegebener DTL und Variablenordnung wurde in [19]
fur KFDDs mit einer Wurzel gefuhrt. Beide Beweise lassen sich einfach auf KFDDs mit
mehreren Wurzeln ubertragen.
Fur das in dieser Arbeit vorgestellte Syntheseverfahren werden jedoch keine reduzierten
KFDDs, sondern zunachst vollstandige, quasi-reduzierte KFDDs verwendet. Um ein gegebenes KFDD in ein vollstandiges, quasi-reduziertes KFDD zu uberfuhren, kann nach
Lemma 1.4 zunachst ein reduziertes KFDD erzeugt werden. Dieses reduzierte KFDD kann
durch wiederholte Anwendung von inversen S-Reduktionen und inversen D-Reduktionen
in ein vollstandiges KFDD uberfuhrt werden. Dabei konnen allerdings isomorphe Knoten
erzeugt werden, welche wiederum durch Anwendung von I-Reduktionen entfernt werden
konnen. Da durch die Anwendung der I-Reduktionen keine neuen inverse S-Reduktionen
oder inverse D-Reduktionen anwendbar werden, wurde ein vollstandiges, quasi-reduziertes
KFDD erzeugt.
Die Anzahl der neu erzeugten, isomorphen Knoten hangt stark von der Reihenfolge ab,
in der die inversen S-Reduktionen und inversen D-Reduktionen durchgefuhrt werden. In
Algorithmus 1.1 wird ein Verfahren vorgeschlagen, bei dem keine isomorphen Knoten
erzeugt werden, d.h. wenn der Algorithmus auf ein reduziertes KFDD angewendet wird,
bleibt das bearbeitete KFDD immer quasi-reduziert. Sobald keine inversen S-Reduktionen
und inversen D-Reduktionen mehr anwendbar sind, ist das KFDD nach Denition 1.15
auch vollstandig.
25
1.3. DECISION DIAGRAMS
Um das Erzeugen von isomorphen Knoten zu vermeiden, wird fur jeden Knoten v des
reduzierten KFDDs ein Feld equiv angelegt. In diesem Feld wird fur jeden Level eingetragen, ob es bereits einen Knoten gibt, der die gleiche Boolesche Funktion wie v darstellt.
In den Zeilen (1) bis (4) der Hauptprozedur MakeComplete werden die Felder equiv
fur alle Knoten des reduzierten
KFDDs zunachst initialisiert. Mit Hilfe dieser Felder wird
1 und D 1 uberpruft, ob tatsachlich ein neuer Knoten mittels
in den Prozeduren Sequi
equi
inverser S-Reduktion bzw. inverser D-Reduktion erzeugt werden mu oder ob eine legale
Kantenersetzung auf einen bereits existierenden Knoten durchgefuhrt werden kann.
In den Zeilen (5) bis (7) wird zunachst abhangig vom Dekompositionstyp des jeweiligen
Levels bestimmt, mit welcher Prozedur Fi neue Knoten auf Level i eingefugt werden bzw.
die legalen Kantenersetzungen durchgefuhrt werden.
Danach wird in Zeile (8) fur jede Wurzel ein aquivalenter Knoten auf Level 1 erzeugt,
sofern die Wurzel nicht selbst schon in level1 ist.
Anschlieend wird dafur gesorgt, da alle Knoten auf Level i nur noch Kanten zu Knoten
in Level i +1 haben. Dazu werden die Knoten levelweise bearbeitet und fur jeden Knoten
v 2 leveli wird die Prozedur Fi+1 sowohl fur die LOW-Kante als auch fur die HIGHKante aufgerufen. Die entsprechende Prozedur erzeugt gegebenenfalls einen Knoten auf
Level i +1, der aquivalent zu low(v) bzw. high(v) ist, und ersetzt die entsprechende Kante
low(v ) bzw. high(v ). Da die neu erzeugten Knoten zu leveli+1 hinzugef
ugt werden, ist
deren Bearbeitung im Fortlauf von Prozedur MakeComplete gesichert.
Beispiel 1.14
Der Ablauf der Prozedur MakeComplete wird an einem Beispiel in Abbildung 1.11
veranschaulicht. Zunachst ist ein reduziertes KFDD gegeben.
Im ersten Schritt werden 1die Wurzeln bearbeitet. Da der Dekompositionstyp d1 = nD
ist, wird die Prozedur Dequi verwendet. Fur Knoten v1 ist equiv [1] = v1. Deshalb wird
1 ausgefuhrt, wobei das Vorkommen von v in der Wurzelliste
nur Zeile (16) von Dequi
1
wieder durch v1 ersetzt wird und die Wurzelliste somit unverandert bleibt. Danach wird
fur die beiden Knoten v2 und v3 mittels inverser D-Reduktion jeweils ein neuer Knoten
auf Level 1 eingefugt und die Eintrage von v2 und v3 in der Wurzelliste werden durch die
neuen Knoten v6 und v7 ersetzt. Die neu erzeugten Knoten sind jeweils grau unterlegt.
Im zweiten Schritt
werden alle Knoten in Level 1 bearbeitet. Auch hier wird wieder die
1 verwendet. Fur die LOW-Kante von Knoten v wird mittels inverser DProzedur Dequi
1
Reduktion der neue Knoten v8 eingefugt. Da die HIGH-Kante von v1 zu Knoten v2 mit
equiv [2] = v2 fuhrt, wird die Kante high(v1 ) = (v1; v2) wieder durch eine Kante (v1; v2 )
ersetzt, wodurch
das KFDD nicht geandert wird. Analog bleibt das KFDD nach dem Auf1
ruf von Dequi(v6 ; low(v6 ); 2) unverandert. Danach werden fur die Kanten high(v6) und
low(v7 ) die neuen Knoten v10 und v9 mittels inverser D-Reduktion eingef
ugt. Durch den
1
Aufruf von Dequi (v6; high(v6 ); 2) ist bereits equiv [2] = v10 gesetzt worden. Deshalb wird
1 fur die HIGH-Kante (v ; v ) wieder nur Zeile (16) ausgefuhrt
bei dem Aufruf von Dequi
7 5
und eine legale Kantenersetzung von high(v7) mit (v7; v10 ) durchgefuhrt. 1
Im dritten Schritt werden die Knoten in Level 2 durch die Prozedur Sequi bearbeitet.
Hier werden fur die LOW-Kante und die HIGH-Kante von v8 zunachst die Knoten v11
und v12 durch inverse S-Reduktion eingefugt. Fur die Kante low(v2 ) wird eine legale Kantenersetzung mit (v2; v11 ) durchgefuhrt. Bei der Bearbeitung von high(v2 ) und low(v9 )
bleibt das KFDD unverandert. Schlielich werden fur die Kanten high(v9 ), low(v10 ) und
high(v10 ) noch legale Kantenersetzungen auf Knoten v12 durchgef
uhrt.
1
2
5
26
KAPITEL 1. GRUNDLAGEN
Algorithmus 1.1
MakeComplete
( KFDD K = (G; R; Xn ; d) )
// Berechnet aus dem reduzierten KFDD K ein vollstandiges, quasi-reduziertes KFDD.
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
for all v 2 V do
for i = 1 to
+ 1 do equiv [i] = Null od
equiv [index( )] = v
od
for i = 1 to n do
1 else Fi = D 1 if di = S then Fi = Sequi
equi
od
for j = 1 to m do F1 (rj ; rj ; 1) od
for i = 1 to n 1 do
for all v 2 leveli do
Fi+1 (low(v );
(v); i + 1)
Fi+1 (high(v );
(v); i + 1)
n
v
low
od
od
high
equi ( Knoten v, Referenz r, Level i )1
S 1
// Wendet die inverse S-Reduktion S (v; r; i) an, wobei keine Knoten erzeugt werden,
// die isomorph zu bereits existierenden Knoten sind.
(1) if equiv [i] = Null then
(2)
erzeuge neuen Knoten u mit Label xi
(3)
erzeuge neue Kante (u) = (u; v)
(4)
erzeuge neue Kante
(u) = (u; v)
(5)
leveli = leveli [ fug
(6)
equiv [i] = u
(7) (8) Ersetze Referenz r durch Referenz auf equiv [i]
low
high
equi ( Knoten v, Referenz r, Level i ) 1
D 1
// Wendet die inverse D-Reduktion D (v; r; i) an, wobei keine Knoten erzeugt werden,
// die isomorph zu bereits existierenden Knoten sind.
(1) if equiv [i] = Null then
(2)
if terminaler Knoten mit Label 0 existiert then
(3)
z = terminaler Knoten mit Label 0
(4)
else
(5)
erzeuge neuen terminalen Knoten z mit Label 0
(6)
for i = 1 to n do equiz [i] = Null od
(7)
leveln+1 = leveln+1 [ fzg
(8)
equiz [n + 1] = z
(9)
(10)
erzeuge neuen Knoten u mit Label xi
(11)
erzeuge neue Kante (u) = (u; v)
(12)
erzeuge neue Kante
(u) = (u; z)
(13)
leveli = leveli [ fug
(14)
equiv [i] = u
(15) (16) Ersetze Referenz r durch Referenz auf equiv [i]
low
high
27
1.3. DECISION DIAGRAMS
DT
DT
nD
X1
v1
pD
nD
X2
v2
X3
S
1
X1
v1
pD
1.)
v3
X1
X2
0
v5
X1
1
v7
v2
X3
S
v4
v6
v3
v4
0
v5
2.)
DT
DT
nD
X1
pD
X2
S
X3
1
v1
v8
v11
v4
X1
X2
v6
v2
X3
X1
X2
v3
v7
v9
X2
X3
0
v10
3.)
v12
v5
nD
X1
pD
X2
v1
v8
X1
X2
v6
v2
X3
S
1
v4
X1
X2
v7
v9
X2
v10
v3
0
v5
Abbildung 1.11: Erzeugen eines vollstandigen, quasi-reduzierten KFDDs
Algorithmus 1.1 fuhrt zu folgendem Lemma:
Lemma 1.5
Jedes reduzierte KFDD K = (G; R; Xn; d) mit G = (V; E ) kann in Zeit O(jjK jjn) in
ein vollstandiges, quasi-reduziertes KFDD mit O(jjK jj n) Knoten uberfuhrt werden,
das bis auf Isomorphie eindeutig bestimmt ist.
Beweis:
Zunachst werden fur maximal jV j Wurzeln inverse Reduktionen durchgefuhrt. Danach
werden die Knoten levelweise bearbeitet. Bei allen inversen Reduktionen werden fur die
neuen Knoten nur Kanten auf die Knoten des reduzierten KFDDs oder den terminalen
Knoten mit Label 0 eingefugt. Deshalb wird durch die Felder equiv von allen Knoten v
des reduzierten KFDDs und des terminalen Knoten mit Label 0 sichergestellt, da jeder
Level vor seiner Bearbeitung durch die Zeilen (10) bis (13) von Prozedur MakeComplete h
ochstens jV j + 1 Knoten enthalt. Bei der Bearbeitung eines Knotens aus Level
28
KAPITEL 1. GRUNDLAGEN
werden keine neuen Knoten in leveli eingefugt. Insgesamt enthalt der durch Algorithmus 1.1 erzeugte vollstandige, quasi-reduzierte KFDDs also hochstens (jV j + 1) n innere
Knoten und maximal 2 terminale Knoten.
Da jeder innere Knoten nur 2 ausgehende Kan1 und D 1 maximal 2 (jV j +1) n mal aufgerufen.
ten hat, werden die Prozeduren Sequi
equi
Die Bearbeitung beider Prozeduren erfolgt jeweils in konstanter Zeit, sofern der 1terminale
Knoten mit Label 0 existiert. Ansonsten werden die Zeilen (5) bis (8) von Dequi genau
einmal bearbeitet. Dabei wird das Feld equiz in n + 1 Schritten initialisiert. Die Initialisierung der Felder equiv fur alle Knoten des reduzierten KFDDs in den Zeilen (1) bis
(4) von Prozedur MakeComplete benotigt weitere jV j (n + 1) Schritte. Da in einem
reduzierten KFDD hochstens 2 terminale Knoten existieren, kann die Anzahl der Knoten
jV j nach Denition 1.8 durch die Groe jjK jj des KFDDs abgeschatzt werden. Insgesamt
benotigt Algorithmus 1.1 also O(jjK jj n) Schritte.
Die Korrektheit des Algorithmus folgt bereits aus der Diskussion des Verfahrens auf
Seite 24. Der Beweis der Eindeutigkeit der Darstellung einer Booleschen Funktion als
vollstandiges, quasi-reduziertes KFDD kann bei gegebener DTL und Variablenordnung
wieder analog zu dem Beweis der Eindeutigkeit von reduzierten KFDDs in [19] gefuhrt
werden.
Die Groe von DDs kann weiter reduziert werden, indem komplementierende Kanten
verwendet werden [10]. Hierzu wird jeder Referenz in einem DD eine Markierung zugeordnet. Falls die Markierung nicht gesetzt ist, wird wie bisher die durch den referenzierten
Knoten v reprasentierte Boolesche Funktion fv dargestellt. Ist die Markierung gesetzt,
wird das Komplement fv referenziert. Oensichtlich kann die Groe eines DDs durch Verwendung von komplementierenden Kanten hochstens halbiert werden. In dieser Arbeit
werden nur DDs ohne komplementierende Kanten betrachtet.
i
Kapitel 2
Logiksynthese mit KFDDs
Die von einem KFDD dargestellte Boolesche Funktion kann uber die Abhangigkeiten zwischen den Knoten des KFDDs beschrieben werden. Von dieser Darstellungsform kann
ein Syntheseverfahren fur mehrstuge Schaltkreise mit AND-, OR-, EXOR- und NOT Gattern abgeleitet werden. Dieses Verfahren stellt eine Erweiterung des Verfahrens dar,
das in [35] fur die Synthese von Schaltkreisen von BDDs vorgestellt wurde. Neben der
Verallgemeinerung von BDDs auf KFDDs wird zusatzlich eine konsequente Anwendung
von lokalen Vereinfachungen eingefuhrt, die wahrend der Synthese implizit durchgefuhrt
werden, um die Groe des erzeugten Schaltkreises zu reduzieren. Auerdem wird eine
Verallgemeinerung des Syntheseverfahrens prasentiert, bei der nicht nur Abhangigkeiten
zwischen Knoten aus benachbarten Leveln berucksichtigt werden konnen. Fur das verallgemeinerte Syntheseverfahren brauchen nur D-vollstandige KFDDs erzeugt werden. Dafur
werden wesentlich weniger Knoten benotigt als bei dem in [35] vorgeschlagenen Verfahren,
das auf vollstandigen DDs basiert.
Nach der Vorstellung der grundlegenden Theorie uber aktive Pfade und Abhangigkeiten
in KFDDs wird das darauf basierende Syntheseverfahren mit den entsprechenden Algorithmen prasentiert. Dabei werden neben dem Grundverfahren fur die KFDD-basierte
Synthese auch die lokalen Vereinfachungen zur Optimierung der Schaltkreisgroe sowie
die Verallgemeinerungen fur D-vollstandige KFDDs zur Reduktion der Groe des KFDDs
eingefuhrt. In den experimentellen Ergebnissen werden schlielich die Kenngroen der verschiedenen DDs und der aus den KFDDs erzeugten Schaltkreisrealisierungen angegeben.
2.1
Funktionsdarstellung durch Abh
angigkeiten im
KFDD
In diesem Abschnitt wird ein Verfahren vorgestellt, bei dem Boolesche Funktionen durch
Abhangigkeiten zwischen den Knoten des KFDDs dargestellt werden. Zunachst werden die
Abhangigkeiten fur aufeinanderfolgende Level des KFDDs betrachtet. Anschlieend wird
mit der Parity Matrix Multiplikation eine EXOR-basierte Methode zur Komposition der
Abhangigkeiten vorgestellt. Weiterhin wird die Korrektheit des Verfahrens zur Berechnung
der Gesamtfunktion des KFDDs gezeigt. Die hier vorgestellten theoretischen Ergebnisse
bilden die Basis fur das spater vorgestellte Syntheseverfahren.
Neben den Bezeichnungen aus Denition 1.8 wird folgende Terminologie verwendet:
29
30
KAPITEL 2. LOGIKSYNTHESE MIT KFDDS
Denition 2.1
Sei K = (G; R; Xn; d) ein quasi-reduziertes KFDD mit G = (V; E ). Dann gilt:
Mit vxk wird der innere Knoten vxk 2 levelk mit Position pos(vxk ) = x und Index
index(vxk ) = k bezeichnet.
Mit v1n+1 wird der terminale Knoten mit Label 1 bezeichnet.
Mit v2n+1 wird der terminale Knoten mit Label 0 bezeichnet.
Ein Pfad = (e1 ; e2 ; : : : ; ep) in einem KFDD ist durch eine Liste von Kanten
ei = (ui ; u0i) 2 E gegeben, wobei u0i = ui+1 (i 2 f1; 2; : : : ; p 1g) gilt.
Ein kompletter Pfad ist ein Pfad von einer Wurzel des KFDDs zu einem
terminalen Knoten.
Ein 1-Pfad ist ein Pfad zu dem terminalen Knoten mit Label 1.
Die Lange eines Pfades = (e1 ; e2 ; : : : ; ep ) ist durch die Anzahl p der Kanten
in gegeben.
Eine Belegung a = (a1 ; a2 ; : : : ; an ) ordnet jeder Booleschen Variablen xi 2 Xn
(i 2 f1; 2; : : : ; ng) den Booleschen Wert ai zu.
2.1.1 Aktive Pfade und Abhangigkeiten zwischen Knoten
Die Abhangigkeiten zwischen den Knoten eines KFDDs werden durch Aktivierungsbedingungen fur einzelne Kanten und Pfade im KFDD beschrieben. Informal ist eine Kante
(v; v0) dann aktiv, wenn der Wert von Knoten v0 uber die Kante (v; v0) zur Berechnung
des Wertes von v beitragt.
Denition 2.2
Sei K = (G; R; Xn; d) ein KFDD, v 2 leveli und = (e1 ; e2 ; : : : ; ep) ein Pfad in G.
a) Die Aktivierungsbedingungen fur Kanten und Pfade sind folgendermaen
deniert:
active(low(v)) = x1i
active(high(v)) = xxii
p
active() = Q active(ej )
falls di = S
falls di 2 fnD; pDg
falls di 2 fS; pDg
falls di = nD
j =1
b) Eine Kante oder ein Pfad heit aktiv fu
r eine Belegung a, falls die Aktivierungsbedingung fur Belegung a erfullt ist, d.h. active( ) (a) = 1.
Abbildung 2.1 gibt eine U bersicht uber die Aktivierungsbedingungen fur alle Dekompositionstypen. Fur alle Belegungen werden die aktiven Kanten eines Knotens v 2 leveli
durch einen fett gezeichneten Pfeil dargestellt. Es ist leicht zu sehen, da bei der ShannonDekomposition fur jede Belegung genau eine ausgehende Kante aktiv ist. Bei der DavioDekomposition ist die LOW-Kante immer aktiv und abhangig von der Belegung a kann
die HIGH-Kante ebenfalls aktiv sein. Dadurch ist es in einem KFDD moglich, da fur
eine gegebene Belegung mehrere von einem Knoten ausgehende Pfade gleichzeitig aktiv
sind.

2.1. FUNKTIONSDARSTELLUNG DURCH ABHANGIGKEITEN
IM KFDD
Shannon:
active(low(v)) = xi
active(high(v)) = xi
pos. Davio:
active(low(v)) = 1
active(high(v)) = xi
neg. Davio:
active(low(v)) = 1
active(high(v)) = xi
ai = 0
ai = 1
Xi
xi
LOW(v)
HIGH(v)
LOW(v)
HIGH(v)
LOW(v)
xi
LOW(v)
HIGH(v)
xi
Xi
LOW(v)
31
HIGH(v)
Xi
HIGH(v)
LOW(v)
HIGH(v)
Abbildung 2.1: Aktive Kanten fur Knoten v 2 leveli
Beispiel 2.1
In Abbildung 2.2 sind fur die Belegung a = (0; 1; 1; 0) alle aktiven Kanten durch fett
gezeichnete Pfeile dargestellt. Fur den Pfad (low(v11); low(v12); low(v13 ); low(v14)) ist die
Aktivierungsbedingung x1 x4 fur Belegung a erfullt und damit ist dieser Pfad fur a aktiv.
Weiterhin sind noch die kompletten 1-Pfade (low(v11); high(v12); low(v23 ); low(v14)) und
(low(v21 ); low(v22); low(v13); low(v14)) fur Belegung a aktiv. Auerdem ist der komplette
Pfad (low(v21); high(v22); low(v33); low(v24)) aktiv, bei dem es sich jedoch nicht um einen
1-Pfad handelt.
Mit Hilfe der Aktivierungsbedingungen konnen die Gleichungen aus Denition 1.11 fur
die durch einen inneren Knoten eines KFDDs dargestellte Boolesche Funktion fur alle
Dekompositionstypen in der folgenden Form dargestellt werden:
fv = active(low(v )) flow(v) active(high(v )) fhigh(v)
(2.1)
Auerdem konnen die Aktivierungsbedingungen zur Darstellung der Booleschen Funktion
eines inneren Knotens verwendet werden:
Lemma 2.1
Sei K = (G; R; Xn; d) ein KFDD, v ein innerer Knoten und Pv die Menge aller von
Knoten v ausgehenden 1-Pfade. Dann gilt:
M
2Pv
active() = fv
32
KAPITEL 2. LOGIKSYNTHESE MIT KFDDS
DT
Level
S
1
pD
2
X2
nD
3
X3
S
4
5
X1
X2
1
X3
1
X4
X1
1
X2
2
X3
2
v
X4
1
1
2
1
0
3
3
2
2
Abbildung 2.2: Aktive Kanten und Pfade fur Belegung a = (0; 1; 1; 0)
Beweis:
Der Beweis wird mittels Induktion uber die maximale Lange Lmax eines Pfades in Pv
gefuhrt:
Induktionsanker: Lmax = 1
Es wird zunachst eine Fallunterscheidung entsprechend den Kanten in Pv gemacht:
Fall 1: Pv = flow(v); high(v)g
Da sowohl low(v) als auch high(v) zu dem terminalen Knoten mit Label 1 fuhren,
ist flow(v) = 1 und fhigh(v) = 1.
Fur dindex(v) = S gilt dann:
M
active() = active(low(v)) active(high(v))
2Pv
= xi 1 xi 1 = xi flow(v) xi fhigh(v) = fv
Entsprechend ergibt sich fur dindex(v) = pD:
M
active() = active(low(v)) active(high(v))
2Pv
= 1 xi 1 = flow(v) xi fhigh(v) = fv
Fur dindex(v) = nD ergibt sich schlielich:
M
active() = active(low(v)) active(high(v))
2Pv
= 1 xi 1 = flow(v) xi fhigh(v) = fv

2.1. FUNKTIONSDARSTELLUNG DURCH ABHANGIGKEITEN
IM KFDD
33
Fall 2: Pv = flow(v)g
Da high(v) nicht in Pv enthalten ist, mu diese Kante zu dem terminalen Knoten
mit Label 0 fuhren. Damit ergibt sich flow(v) = 1 und fhigh(v) = 0.
Analog zuLFall 1 ergibt sich fur jede Wahl des Dekompositionstyps von v die Gleichheit von active() und fv
2Pv
Die verbleibenden Falle Pv = fhigh(v)g und Pv = ; folgen analog.
Induktionsannahme: L active() = fv gilt fur Lmax k 1
2Pv
Induktionsschritt: Lmax = k
Die Menge Pv aller Pfade von v zu dem terminalen Knoten mit Label 1 kann in zwei
disjunkte Teilmengen Plow(v) und Phigh(v) unterteilt werden. Plow(v) enthalt alle Pfade, deren erste Kante low(v) ist, d.h. Plow(v) = f(e1; e2; : : : ; ep) 2 Pv je1 = low(v)g.
Entsprechend enthalt Phigh(v) alle Pfade aus Pv , die high(v) als erste Kante enthalten. Die Menge Plow(v) aller von low(v) ausgehenden 1-Pfade enthalt dann alle Pfade,
die aus den Pfaden in Plow(v) durch Entfernen der ersten Kante low(v) entstehen,
d.h. Plow(v) = f(e2; e3; : : : ; ep)j(low(v); e2; e3; : : : ; ep) 2 Plow(v) g. Entsprechendes gilt
fur Phigh(v) . Damit ergibt sich:
M
2Pv
active() =
=
M
1 2Plow(v)
M
10 2Plow(v)
active(1) M
2 2Phigh(v)
active(2 )
active(low(v)) active(10 ) M
20 2Phigh(v)
active(high(v)) active(20 )
= active(low(v)) active(high(v)) M
10 2Plow(v)
active(10 ) M
20 2Phigh(v)
active(20 )
Da die Lange der Pfade aus Plow(v) und Phigh(v) hochstens k 1 ist, ergibt sich Gleichung
aus der Induktionsannahme folgenden A quivalenzen
L 2.1 direkt 0durch Einsetzen derL
active(1 ) = flow(v) und 0
active(20 ) = fhigh(v) .
0
1 2Plow(v)
Damit folgt direkt das Lemma:
2 2Phigh(v)
Lemma 2.2
Sei K = (G; R; Xn; d) ein KFDD, v ein innerer Knoten und Pv die Menge aller von
Knoten v ausgehenden 1-Pfade. Dann gilt:
Der Funktionswert fv (a) ist genau dann 1, wenn die Anzahl der aktiven Pfade in
Pv ungerade ist.
34
KAPITEL 2. LOGIKSYNTHESE MIT KFDDS
Beispiel 2.2
Die Boolesche Funktion des Knoten v11 des KFDDs in Abbildung 2.2 kann nach Lemma 2.1
als fv = x1x4 x1x3 x4 x1 x2 x4 x1 x2 x3x4 x1 x4 x1 x3x4 x1 x2 x4 x1 x2 x3 x4 dargestellt
werden. In dieser Darstellung berechnet sich der Funktionswert fur die Belegung a =
(0; 1; 1; 0) durch fv (a) = 1 0 1 0 0 0 0 0 = 0.
Lemma 2.1 legt die in Beispiel 2.2 verwendete Darstellung der Booleschen Funktion einer
Wurzel nahe. Zunachst werden die Aktivierungsbedingungen fur jeden kompletten 1-Pfad
bestimmt. Die Boolesche Funktion einer Wurzel wird dann als EXOR-Summe der entsprechenden Aktivierungsbedingungen dargestellt. Diese 2-Level AND/EXOR Darstellung
entspricht den Pseudo Kronecker Expressions [46].
Im Gegensatz dazu beruht das vorgestellte Syntheseverfahren darauf, jeweils die Aktivierungsbedingungen fur alle Pfade zwischen einem Paar von Knoten zu bestimmen.
Zunachst werden nur Paare von Knoten in aufeinanderfolgenden Leveln betrachtet. Die
Bedingungen fur diese Paare werden dann kombiniert, um die Aktivierungsbedingungen
fur jeweils alle Pfade zwischen weiteren Paaren von Knoten zu erhalten. Die Boolesche
Funktion des KFDDs wurde bestimmt, nachdem jedes Paar aus einer Wurzel und dem
terminalen Knoten mit Label 1 bearbeitet wurde.
Die Aktivierungsbedingungen fur alle Pfade zwischen zwei Knoten eines KFDDs werden
als Abhangigkeit der Knoten bezeichnet:
1
1
1
1
Denition 2.3
k;l die Menge aller Pfade von Knoten v k
Sei K = (G; R; Xn; d) ein KFDD und Px;y
x
k von Knoten v l
zu Knoten vyl in G. Dann ist die Abh
angigkeit dk;l
des
Knoten
v
x;y
x
y
durch die Aktivierungsbedingungen aller Pfade zwischen den Knoten deniert:
dk;l
x;y =
M
k;l
2Px;y
active()
Damit folgt zusammen mit Lemma 2.1 folgendes Korollar:
Korollar 2.3
Sei K = (G; R; Xn; d) ein KFDD. Dann entspricht die Boolesche Funktion des
Knoten vxk der Abhangigkeit des Knoten vxk von dem terminalen Knoten mit Label
1, d.h.
+1
fvxk = dk;n
x;1
Fur ein KFDD K werden die Abhangigkeiten dk;lx;y von jedem Paar von Knoten vxk 2
levelk und vyl 2 levell in einer Abhangigkeitsmatrix Dk;l von K zusammengefat (vgl.
Abbildung 2.3).
Da zur Darstellung der Booleschen Funktion des KFDDs die Abhangigkeiten zu dem
terminalen Knoten mit Label 1 ausreichend sind, werden die Abhangigkeiten zu dem
terminalen Knoten mit Label 0 nicht in den Abhangigkeitsmatrizen berucksichtigt. Die
Abhangigkeitsmatrizen Dk;n+1 bestehen dann aus nur einer Spalte mit den Abhangigkeiten

2.1. FUNKTIONSDARSTELLUNG DURCH ABHANGIGKEITEN
IM KFDD
2
66 d1 1
66 d
21
= 6
66 ...
4
d1 2
d2 2
k;l
k;l
;
D
k;l
k;l
;
k;l
;
;
d1 width
d2 width
k;l
;
k;l
;
.
.
.
k;l
k;
l
.
.
.
dwidth 1 dwidth
k;l
l
2
k;
dwidth
k;l
35
3
7
7
7
7
7
7
7
5
widthl
k;
Abbildung 2.3: Abhangigkeitsmatrix Dk;l
zu dem terminalen Knoten mit Label 1. Nach Korollar 2.3 stellt die Abhangigkeitsmatrix
D1;n+1 dann die Boolesche Funktion f = (fv ; fv ; : : : ; fvm ) 2 IBn;m des KFDDs dar als:
1
1
2
6
D1;n+1 = 6
6
4
1
2
1
3
fv
fv
1
1
...
1
2
fvm
7
7
7
5
1
In den folgenden Abschnitten wird zunachst gezeigt, wie die Abhangigkeitsmatrizen fur
aufeinanderfolgende Level eines KFDDs bestimmt werden konnen. Danach wird ein Verfahren vorgestellt, mit dem aus den Abhangigkeitsmatrizen der aufeinanderfolgenden Level die Abhangigkeitsmatrix von Level 1 zu Level n + 1 berechnet werden kann. Da diese
Abhangigkeitsmatrix des KFDDs auch alle Abhangigkeiten der Wurzeln von dem terminalen Knoten mit Label 1 enthalt, wird mit dieser Abhangigkeitsmatrix nach Korollar 2.3
auch die Boolesche Funktion des KFDDs beschrieben.
2.1.2 Abhangigkeiten aufeinanderfolgender Level
Fur einen Knoten vxk aus Level k konnen entweder beide, nur eine oder keine ausgehenden
Kanten zu einem Knoten vyk+1 aus den darauolgenden Level k+1 fuhren. In Abbildung 2.4
ist fur jede Moglichkeit und fur alle Dekompositionstypen die jeweilige Abhangigkeit ank;k+1 aller Pfade von
gegeben. Falls keine Kante von vxk zu vyk+1 fuhrt, ist die Menge Px;y
k
k
+1
+1 = 0. Falls
vx nach vy leer und damit ist nach Denition 2.3 die Abhangigkeit dk;k
x;y
nur die Kante low(vxk ) oder high(vxk ) zu Knoten vyk+1 fuhrt, entspricht die Abhangigkeit
der Aktivierungsbedingung der entsprechenden Kante. Fuhren beide ausgehenden Kanten
von vxk zu vyk+1, dann berechnet sich die Abhangigkeit aus der EXOR-Verknupfung der
beiden Aktivierungsbedingungen.
Aus Abbildung 2.4 folgt direkt folgende Bemerkung fur die Abhangigkeitsmatrizen aufeinanderfolgender Level:
Bemerkung 2.1
In einer Abhangigkeitsmatrix Dk;k+1 fur aufeinanderfolgende Level hat jede Zeile
hochstens zwei von 0 verschiedene Eintrage.
36
KAPITEL 2. LOGIKSYNTHESE MIT KFDDS
Xk
d
k;k
x;y
vkx
Xk
vkx
Xk
vkx
Xk
vkx
+1
Shannon
vk+1
y
x
k
pos. Davio
1
neg. Davio
1
vk+1
y
vk+1
y
x
x
x
k
0
k
0
k
0
vk+1
y
1
x
x
k
k
Abbildung 2.4: Abhangigkeiten von Knoten in aufeinanderfolgenden Leveln
Beispiel 2.3
Fur das KFDD aus Abbildung 2.2 ergeben sich die Abhangigkeitsmatrizen fur aufeinanderfolgende Level folgendermaen:
2
3
2
3
1
x
0
x
0
2
3
x
0
x
x
1
1
4
1
;2
2
;3
3
;4
4
;5
4
5
4
5
D = 0 x x
D = 1 0 x2
D = 1 x3
D = x
4
1 1
0 1 x2
0 x3
2.1.3 Komposition von Abhangigkeiten
Als nachstes wird eine Operation Æ eingefuhrt, mit der zwei Abhangigkeitsmatrizen Dk;s
und Ds;l zu der Abhangigkeitsmatrix Dk;l zusammengefat werden konnen. Dann ist es
moglich, die Abhangigkeitsmatrix D1;n+1 durch iterierte Anwendung der Operation Æ aus
den Abhangigkeitsmatrizen aufeinanderfolgender Level zu berechnen.
Die Elemente der neu berechneten Abhangigkeitsmatrix Dk;l = Dk;s Æ Ds;l sollen wieder
die Belegungen reprasentieren, fur die eine ungerade Anzahl von Pfaden zwischen einem
Paar von Knoten aus levelk und levell aktiv ist. In Abbildung 2.5 wird die Idee dieser
k;l aller Pfade zwischen den Knoten v k
Operation dargestellt. Jeder Pfad aus der Menge Px;y
x
l
s
k;s;l
und vy enthalt genau einen Knoten vz 2 levels, anhand dem der Pfad einer Menge Px;z;y
zugeteilt wird. Damit fur eine gegebene Belegung a insgesamt eine ungerade Anzahl von
k;s;l ,
Pfaden zwischen vxk und vyl aktiv ist, mu die Anzahl der verschiedenen Teilmengen Px;z;y
die fur a eine ungerade Anzahl von aktiven Pfaden haben, ungerade Paritat haben. Eine
k;s;l hat aber genau dann ungerade viele aktive Pfade, wenn sowohl
gegebene Teilmenge Px;z;y
k;s als auch in dem unteren Bereich P s;l die Parit
in dem oberen Bereich Px;z
at der Anzahl
z;y
von aktiven Pfaden fur a ungerade ist.
Damit ergibt sich die in Denition 2.4 formal eingefuhrte Berechnungsvorschrift. Da deren Struktur aus der Matrix Multiplikation durch Ersetzen der OR-Operation durch die
EXOR-Operation hervorgeht, wird die Operation Æ als Parity Matrix Multiplikation bezeichnet.

2.1. FUNKTIONSDARSTELLUNG DURCH ABHANGIGKEITEN
IM KFDD
37
k,l
P x,y
Xk x
k,s
k,s
k,s
P x,1
P x,2
k,s,l
P x,w
k,s,l
P x,1,y
k,s,l
P x,2,y
Xs
1
Xs
P x,w,y
Xs
2
w
s,l
s,l
s,l
P 1,y
P w,y
P 2,y
Xl
y
Abbildung 2.5: Unterteilung der Pfade zwischen zwei Knoten
Denition 2.4
Sei G = (gij ) eine (; )-Matrix und H = (hjk ) eine (; )-Matrix mit Eintragen
aus IBn . Dann ist die Parity Matrix Multiplikation F = G Æ H deniert durch
folgende Berechnungsvorschrift fur die Eintrage von F :
fik =
M
j =1
gij hjk
Zunachst ist zu zeigen, da durch Anwendung der Parity Matrix Multiplikation auf zwei
Abhangigkeitsmatrizen wieder eine Abhangigkeitsmatrix berechnet wird.
Lemma 2.4
Seien Dk;s und Ds;l zwei Abhangigkeitsmatrizen zu einem quasi-reduzierten KFDD
K . Dann wird die Abhangigkeitsmatrix Dk;l von K folgendermaen berechnet:
Dk;l = Dk;s Æ Ds;l
Beweis:
Es wird fur ein beliebiges, aber festes Paar von Knoten vxk und vyl gezeigt, da die
Abhangigkeit dk;lx;y des KFDDs dem durch die Parity Matrix Multiplikation berechneten
Eintrag entspricht.
38
KAPITEL 2. LOGIKSYNTHESE MIT KFDDS
Nach Denition 2.3 ist
dk;l
x;y =
M
k;l
2Px;y
active()
k;l kann als Konkatenation von zwei Teilpfaden in der Form = ( ; )
Jeder Pfad 2 Px;y
1 2
mit 1 = (ek ; ek+1; : : : ; es 1) und 2 = (es; es+1; : : : ; el 1) dargestellt werden, wobei ei =
(vi i ; vi+1
1g und i 2 f1; 2; : : : ; widthig ist. Jeder Pfad aus
i ) mit i 2 fk; k + 1; : : : ; l
k;l
s
k;s;l
Px;y enthalt genau einen Knoten vz 2 levels, anhand dem der Pfad einer Menge Px;z;y
k;s;l (z 2 f1; 2; : : : ; width g) eine
(vgl. Abbildung 2.5) zugeteilt wird. Da die Mengen Px;z;y
s
k;l
k;l
disjunkte Zerlegung von Px;y bilden, kann dx;y folgendermaen dargestellt werden:
+1
=
=
width
Ms
z =1
width
Ms
0
M
@
k;s;l
2Px;z;y
0
active()A
M
@
z =1
1
k;s;l
(1 ;2 )2Px;z;y
active(1) active(2 )
1
A
k;s;l als Konkatenation von jedem Pfad aus P k;s mit jedem
Da die Menge aller Pfade in Px;z;y
x;z
s;l
Pfad aus Pz;y betrachtet werden kann, ergibt sich zusammen mit dem Assoziativgesetz,
dem Distributivgesetz und Denition 2.3 die Behauptung des Lemmas durch:
=
=
=
width
Ms
z =1
width
Ms
0
@
M @
11
M
active(1 ) k;s
1 2Px;z
s;l
dk;s
x;z dz;y
active(1 ) active(2 )
s;l
2 2Pz;y
@
width
Ms 0
k;s
1 2Px;z
0
z =1
z =1
M
M
s;l
2 2Pz;y
AA
1
active(2 )A
Um die Abhangigkeitsmatrizen in beliebiger Reihenfolge kombinieren zu konnen, wird
noch die Assoziativitat der Parity Matrix Multiplikation benotigt.
Lemma 2.5
Die Parity Matrix Multiplikation ist assoziativ.
Beweis:
Sei G = (gij ) eine (; )-Matrix, H = (hjk ) eine (; )-Matrix und Q = (qkl) eine (; Æ)Matrix mit Eintragen aus IBn. Die A quivalenz von (GÆH )ÆQ und GÆ(H ÆQ) folgt fur einen
beliebigen, aber festen Eintrag der Ergebnismatrix einfach mit dem Distributivgesetz fur
die EXOR- und AND-Operation sowie der Assoziativitat beider Operationen:

2.1. FUNKTIONSDARSTELLUNG DURCH ABHANGIGKEITEN
IM KFDD
M
M
k=1
j =1
gij hjk
!
qkl
!
=
=
=
M
M
k=1
M
j =1
M
j =1
M
k=1
j =1
gij gij hjk
qkl
gij hjk qkl
M
k=1
39
!
!
hjk qkl
!!
Damit ist es moglich, die Abhangigkeitsmatrizen der aufeinanderfolgenden Level in beliebiger Reihenfolge zu kombinieren. Zur Beschreibung einer Kompositionssequenz werden
die Indizes aller Abhangigkeitsmatrizen, die zur Berechnung der Abhangigkeitsmatrix
D1;n+1 verwendet werden, in einer Menge D gesammelt. Wird die Abhangigkeitsmatrix
Dk;l = Dk;s Æ Ds;l berechnet, so werden die Tupel (k; l), (k; s) und (s; l) in die Menge D aufgenommen. Formal kann eine Kompositionssequenz folgendermaen beschrieben
werden:
Denition 2.5
Eine Kompositionssequenz
peln, fur die gilt:
D fur n Boolesche Variablen ist eine Menge von Tu-
(1; n + 1) 2 D.
Fur alle k 2 f1; 2; : : : ; ng ist (k; k + 1) 2 D.
Falls (k; l) 2 D fur l > k +1, dann gibt es genau ein s 2 fk +1; k +2; : : : ; l 1g,
fur das (k; s) 2 D und (s; l) 2 D ist.
Beispiel 2.4
In Abbildung 2.6 werden zwei Kompositionssequenzen fur n Boolesche Variablen graphisch veranschaulicht. Auf der linken Seite der Abbildung ist die Kompositionssequenz
f(1;2); (2;3); (3;4); (4;5); (5;6); (6;7); (7;8); (8;9); (1;9); (2;9); (3;9); (4;9); (5;9); (6;9); (7;9)g
dargestellt, die der Klammerung (D1;2 Æ (D2;3 Æ (D3;4 Æ (D4;5 Æ (D5;6 Æ (D6;7 Æ (D7;8 Æ D8;9)))))))
entspricht. Die auf der rechten Seite von Abbildung 2.6 dargestellte Kompositionssequenz
f(1;2); (2;3); (3;4); (4;5); (5;6); (6;7); (7;8); (8;9); (1;3); (3;5); (5;7); (7;9); (1;5); (5;9); (1;9)g
entspricht der Klammerung (((D1;2 Æ D2;3) Æ (D3;4 Æ D4;5)) Æ ((D5;6 Æ D6;7 ) Æ (D7;8 Æ D8;9 ))).
Da eine Kompositionssequenz immer als binarer Baum dargestellt werden kann, werden
fur ein KFDD uber Xn bei jeder Kompositionssequenz n 1 Parity Matrix Multiplikationen benotigt. Die Klammerungstiefe einer Kompositionssequenz entspricht der Tiefe des
zugehorigen binaren Baums und kann deshalb im Bereich von n 1 bis dlog(n)e liegen.
Die folgende Denition beschreibt zwei bereits in Beispiel 2.4 dargestellte Kompositionssequenzen mit maximaler und minimaler Klammerungstiefe.
40
KAPITEL 2. LOGIKSYNTHESE MIT KFDDS
Denition 2.6
a) Die kaskadierte Kompositionssequenz fur n Variablen ist gegeben durch:
DK = f(k; k + 1) j k 2 f1; 2; : : : ; ngg [ f(l; n + 1) j l 2 f1; 2; : : : ; n 1gg.
n
b) Die baumartige Kompositionssequenz fur n Variablen ist gegeben durch:
dlog ne
DnB = S f((i 1) 2l + 1; min(i 2l + 1; n + 1)) j i 2 f1; 2; : : : ; d 2nl egg.
l=0
Die Klammerungstiefe bei der kaskadierten Kompositionssequenz ist n 1, wahrend die
Klammerungstiefe bei der baumartigen Kompositionssequenz nur dlog(n)e ist. Dies wird in
dem vorgestellten Syntheseverfahren ausgenutzt, um Schaltkreise mit geringen Laufzeiten
zu generieren.
D1;9
6
@@
Æ
D2;9
6
@@
Æ
D3;9
6
@@
Æ
D4;9
6
@@
Æ
D1;9
D5;9
6
@@
Æ
6
@@
Æ
D6;9
D 1 ;5
6
@@
Æ
Æ
D7;9
6
@@
Æ
D1;2 D2;3 D3;4 D4;5 D5;6 D6;7 D7;8 D8;9
D1;3 D3;5
Æ
I@@
AA
Æ
AA
JJ
D 5;9
KAA
JJ
Æ
D5;7 D7;9
JJ
Æ
KAA
JJ
Æ
D1;2 D2;3 D3;4 D4;5 D5;6 D6;7 D7;8 D8;9
Abbildung 2.6: Kaskadierte und baumartige Kompositionssequenz
41
2.2. EXOR-BASIERTES SYNTHESEVERFAHREN
Beispiel 2.5
Fur das KFDD aus Abbildung 2.2 berechnen sich die Abhangigkeitsmatrizen fur die
baumartige Kompositionssequenz aus den Abhangigkeitsmatrizen fur aufeinanderfolgende
Level aus Beispiel 2.3 folgendermaen:
D1;5 = (D1;2 Æ D2;3 ) Æ (D3;4 Æ D4;5 ) = D1;3 Æ D3;5
2
3
x
x
3
4
= xx11 x1x2x1 x1 x1 x2x1x2x1x2 Æ 4 x4 x3 x4 5
x3 x4
x
x
x
(
x
x
x
)
(
x
x
x
)
x
x
x
x
1
3
4
1
2
1
4
3
4
1
2
3
4
= x1 x3x4 x1 (x4 x3x4 ) (x1 x2 x1 x2 ) x3 x4
2.2
EXOR-basiertes Syntheseverfahren
Das im letzten Abschnitt vorgestellte Verfahren zur Bestimmung der Booleschen Funktion eines KFDDs mittels Abhangigkeitsmatrizen wird verwendet, um eine Schaltkreisrealisierung fur die Boolesche Funktion zu erzeugen. Dazu wird fur eine Abhangigkeitsmatrix Dk;l ein Teilschaltkreis bestimmt, der jeweils die Booleschen Funktionen dk;lx;y der
Abhangigkeitsmatrix realisiert. Die Ausgangssignale dieses Teilschaltkreises werden dann
als Reprasentation der Abhangigkeiten dk;lx;y direkt in die Abhangigkeitsmatrix eingetragen. Die Ausgangssignale fur eine neue Abhangigkeitsmatrix werden durch einen neuen
Teilschaltkreis erzeugt, der Ausgangssignale bereits existierender Abhangigkeitsmatrizen
so verschaltet, da die Parity Matrix Multiplikation realisiert wird.
2.2.1 Schaltkreisrealisierung der Abhangigkeitsmatrizen
Es wird beschrieben, wie fur ein KFDD K = (G; R; Xn; d) mit G = (V; E ) im Verlauf des
Syntheseverfahrens ein Schaltkreis SK = (G ; typ; I=O) mit G = (V ; E ) fur die durch das
KFDD K dargestellte Boolesche Funktion f = (fv ; fv ; : : : ; fvm ) 2 IBn;m erzeugt wird.
Dabei wird fur jedes erzeugte Signal s eine Markierung tag(s) verwendet, mit der gekennzeichnet wird, ob das Signal direkt bzw. uber einen Inverter mit einem primaren Eingang
verbunden ist.
1
1
1
2
1
Denition 2.7
Sei SK = (G ; typ; I=O) ein Schaltkreis mit G = (V ; E ). S V bezeichnet die Menge
der Signale und PI(i) bezeichnet den i-ten primaren Eingang des Schaltkreises. Die
Abbildung tag : S ! ZZ ordnet jedem Signal s 2 S eine ganze Zahl folgendermaen
zu:
8
<
tag(s) = :
i
i
0
falls s direkt mit PI(i) verbunden ist.
falls s uber einen Inverter mit PI(i) verbunden ist.
sonst.
Um die im folgenden prasentierten Algorithmen uberschaubar zu halten, werden bei dem
Erzeugen des Schaltkreises SK nur solche Zuordnungen explizit angegeben, die nicht eindeutig vorgegeben und fur den weiteren Ablauf des Algorithmus relevant sind. So wird
z.B. nach dem Erzeugen eines Signals s auf die Zuordnung zu den Mengen der Signale
S und der Knoten V des Schaltkreises verzichtet. Ebenso wird der Ausgangsgrad dout (s)
42
KAPITEL 2. LOGIKSYNTHESE MIT KFDDS
nicht deniert, da sich dieser implizit aus der Anzahl der im Verlauf des Algorithmus denierten Kanten ergibt, die von s ausgehen. Schlielich wird fur ein Signal s die Zuordnung
fur die Markierung tag(s) nur dann angegeben, wenn tag(s) 6= 0 ist.
Einen U berblick uber das Gesamtverfahren wird in Algorithmus 2.1 durch die Prozedur
Synthesis gegeben.
Algorithmus 2.1
Synthesis
( KFDD K )
// Berechnet aus dem vollstandigen, quasi-reduzierten KFDD K einen Schaltkreis SK .
(1) for i = 1 to n do
(2)
Erzeuge primaren Eingang pii; Setze PI(i) = pii
(3)
Erzeuge Signal Pi ; Setze tag(Pi ) = i; Erzeuge Kante (pii; Pi )
(4) od
(5) Erzeuge Gatter c0 vom Typ C0; Erzeuge Signal
; Erzeuge Kante (c0 ;
(6) Erzeuge Gatter c1 vom Typ C1; Erzeuge Signal ; Erzeuge Kante (c1 ;
(7) D = ; // Noch zu kombinierende Abhangigkeitsmatrizen
(8) for k = 1 to n do
(9)
D k;k+1 =
( k, k + 1, K , SK )
k;k
+1
(10)
D = D [ fD
g
(11) od
(12) while D 6= fD1;n+1g
(13)
Wahle Dk;s und Ds;l aus D; D = D n fDk;s; Ds;l g
(14)
D k;l =
( K; Dk;s; Ds;l, SK )
(15)
D = D [ fD k;l g
(16) od
(17) for i = 1 to m do
(18)
Erzeuge primaren Ausgang poi; Setze PO(i) = poi
(19)
Erzeuge Kante (D1;n+1[i; 1]; poi )
(20) od
(21) return ( SK )
Zero
One
)
Zero
)
One
DirectDependencyMatrix
ParityMatrixMultiplication
Zunachst werden in den Zeilen (1) bis (4) die primaren Eingange pi1 ; pi2 ; : : : ; pin fur den zu
generierenden Schaltkreises SK erzeugt. An den primaren Eingang pii (i 2 f1; 2; : : : ; ng)
wird das Signal Pi angeschlossen, mit dem die Boolesche Funktion xi reprasentiert wird.
Entsprechend Denition 2.7 wird dieses Signal mit i markiert. Auerdem werden in den
Zeilen (5) und (6) zwei Gatter c0 und c1 erzeugt, um Signale fur die konstanten Funktionen 0 und 1 anschlieen zu konnen. Sollte die durch eines dieser Signale dargestellte
Abhangigkeit im gesamten Verlauf des Algorithmus nicht verwendet werden, mu das Signal zusammen mit dem entsprechenden Gatter und der zugehorigen Kante wieder aus
dem Schaltkreis entfernt werden.
Die zu den primaren Eingangen sowie die zu den Gattern c0 und c1 gehorenden Signale
werden in den Zeilen (8) bis (11) verwendet, um mit der Prozedur DirectDependencyMatrix (siehe Algorithmus 2.2) einen Teilschaltkreis zur Realisierung der Abh
angigkeiten
zwischen Knoten aus aufeinanderfolgenden Leveln zu erzeugen. Die Ausgangssignale jedes
Teilschaltkreises werden in der entsprechenden Abhangigkeitsmatrix Dk;k+1 eingetragen.
In den Zeilen (12) bis (16) werden dann je zwei Abhangigkeitsmatrizen Dk;s und Ds;l mit
der Prozedur ParityMatrixMultiplication (siehe Algorithmus 2.3) zu einer neuen
Abhangigkeitsmatrix Dk;l kombiniert. Dabei wird eine Schaltkreisrealisierung fur die Parity Matrix Multiplikation erzeugt, deren Eingangssignale durch die Eintrage der Abhangigkeitsmatrizen Dk;s und Ds;l gegeben sind. Die Ausgangssignale des neuen Teilschaltkreises
43
2.2. EXOR-BASIERTES SYNTHESEVERFAHREN
reprasentieren die Abhangigkeiten zwischen den Knoten aus levelk und levell und werden
in die neue Abhangigkeitsmatrix Dk;l eingetragen.
In der Menge D werden alle Abhangigkeitsmatrizen verwaltet, die im weiteren Verlauf
von Prozedur Synthesis noch durch Parity Matrix Multiplikation kombiniert werden
mussen. Beginnend mit den Abhangigkeitsmatrizen aufeinanderfolgender Level wird so
lange fortgefahren, bis Abhangigkeitsmatrix D1;n+1 erzeugt wurde. Durch die Auswahl
der als nachstes zu kombinierenden Abhangigkeitsmatrizen in Zeile (13) konnen verschiedene Kompositionssequenzen realisiert werden. Unabhangig von der Kompositionssequenz
wird nach dem Entfernen von zwei Abhangigkeitsmatrizen Dk;s und Ds;l jeweils die neue
Abhangigkeitsmatrix Dk;l zur Menge D hinzugefugt. Deshalb kann die Menge D nur
genau dann aus einem Element bestehen, wenn alle anderen Abhangigkeitsmatrizen bereits kombiniert wurden. In diesem Falle enthalt D nur die Abhangigkeitsmatrix D1;n+1.
Andernfalls existiert bei der Bearbeitung von Zeile (13) immer ein Paar von Abhangigkeitsmatrizen, das durch Parity Matrix Multiplikation kombiniert werden kann.
Abschlieend werden in den Zeilen (17) bis (20) die primaren Ausgange po1 ;1po;n+12; : : : ; pom
erzeugt. Der primare Ausgang poi (i 2 f1; 2; : : : ; mg) wird mit dem Signal di;1 aus der
Abhangigkeitsmatrix D1;n+1 verbunden, durch das die Boolesche Funktion fvi des KFDDs
K realisiert wird.
In Algorithmus 2.2 ist die Prozedur DirectDependencyMatrix gegeben, mit der Teilschaltkreise zur Realisierung der Abhangigkeiten zwischen Knoten aus Level k und l erzeugt werden, die sich direkt aus den Kanten zwischen den jeweiligen Knoten ergeben.
1
Algorithmus 2.2
DirectDependencyMatrix
( Level k, Level l, KFDD K , Schaltkreis SK )
// Bestimmt fur das KFDD K die Abhangigkeitsmatrix D k;l fur alle Kanten,
// die von Knoten aus Level k direkt zu Knoten aus Level l fuhren und
// realisiert Signale D k;l [x; y ] fur die einzelnen Abhangigkeiten dk;l
x;y .
(1) wk = widthk
(2) if l < n + 1 then wl = widthl else wl = 1 (3) Erzeuge wk wl Matrix Dk;l
(4) for x = 1 to wk do
(5)
for y = 1 to wl do
k;l
(6)
if dk;l
x;y = 0 then D [x; y ] =
k;l
k;l
(7)
if dx;y = 1 then D [x; y] =
k;l
k;l
(8)
if dx;y = xk then D [x; y] = Pk (9)
if dk;l
x;y = xk then
(10)
Erzeuge Gatter g vom Typ N OT ; Erzeuge Kante (Pk ; g)
(11)
Erzeuge Signal s; Setze tag(s) = k; Erzeuge Kante (g; s)
(12)
D k;l [x; y ] = s (13)
(14)
od
(15) od
(16) return ( Dk;l )
Zero
One
In Zeile (1) wird die Breite des Levels k entsprechend Denition 1.8 bestimmt. Analog
wird in Zeile (2) die Breite des Levels l bestimmt, wobei fur Level n + 1 die nBreite
immer
auf 1 gesetzt wird, da nur fur die Abhangigkeiten zum terminalen Knoten v1 +1 mit Label
1 eine Schaltkreisrealisierung erzeugt werden soll. Diese Werte geben die Dimension fur
die in Zeile (3) erzeugte Matrix Dk;l an.
44
KAPITEL 2. LOGIKSYNTHESE MIT KFDDS
In den Zeilen (4) bis (15) wird jedes Paar von Knoten vxk 2 levelk und vyl 2 levell betrachtet. Anhand der in Denition 2.3 beschriebenen Abhangigkeit dk;lx;y wird ein Signal
ausgewahlt, das die entsprechende Abhangigkeit realisiert und dieses Signal wird als Element Dk;l[x; y] in Zeile x und Spalte y der Abhangigkeitsmatrix Dk;l eingetragen. Die
Signale Zero, One und Pi wurden bereits in der Prozedur Synthesis erzeugt. Fur die
Abhangigkeit xk wird das entsprechende Signal in den Zeilen (10) und (11) erst bei Bedarf erzeugt. Es ist zu beachten, da fur verschiedene Zeilen der Matrix jeweils eigene
Inverter und Signale fur die Abhangigkeit xk erzeugt werden. All diese Signale werden
nach Denition 2.7 mit k markiert.
Mit Algorithmus 2.3 werden Teilschaltkreise erzeugt, mit denen die Signale aus den
Abhangigkeitsmatrizen Dk;s und Ds;l kombiniert werden, um die Abhangigkeiten der Knoten aus levelk von Knoten aus levell zu realisieren.
Algorithmus 2.3
ParityMatrixMultiplication
( KFDD K , Matrix Dk;s, Matrix Ds;l, Schaltkreis SK )
// Erzeugt eine Schaltkreisrealisierung fur die Parity Matrix Multiplikation mit Eingangs// signalen aus D k;s und D s;l und tragt die Ausgangssignale in eine neue Matrix D k;l ein.
(1) wk = widthk
(2) if l 6= n + 1 then wl = widthl else wl = 1 (3) Erzeuge wk wl Matrix Dk;l
(4) for x = 1 to wk do
(5)
for y = 1 to wl do
(6)
D k;l [x; y ] =
(7)
od
(8) od
(9) return ( Dk;l )
ComposeDependencies
ComposeDependencies
( x, y, Dk;s, Ds;l, SK )
( Position x, Position y, Matrix Dk;s, Matrix Ds;l, Schaltkreis SK )
// Erzeugt eine Schaltkreisrealisierung fur die Berechnung der Abhangigkeit des Knoten vxk
// von Knoten vyl aus den Signalen aus D k;s und D s;l und gibt das Ausgangssignal d zuruck.
(1) A = ; // Eingangssignale fur das EXOR-Gatter
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
= 1 to widths do
Erzeuge Gatter gA mit Typ AN D2
Erzeuge Kanten (Dk;s[x; z]; gA ) und (Ds;l[z; y]; gA )
Erzeuge Signal sA; Erzeuge Kante (gA ; sA); A = A [ fsAg
od
if jAj = 1 then d ist das Element in A if jAj 2 then
Erzeuge Gatter gX mit Typ EXORjAj
for all sA 2 A do Erzeuge Kante (sA ; gX ) od
Erzeuge Signal d; Erzeuge Kante (gX ; d);
return ( d )
for
z
In der Prozedur ParityMatrixMultiplication wird zunachst wieder die neue Matrix
mit der entsprechenden Dimension erzeugt. Danach wird in den Zeilen (4) bis (8) fur
jedes Paar von Knoten vxk 2 levelk und vyl 2 levell ein Signal zur Reprasentation der
Abhangigkeit dk;lx;y erzeugt und in die Abhangigkeitsmatrix Dk;l eingetragen.
45
2.2. EXOR-BASIERTES SYNTHESEVERFAHREN
Die Realisierung des Signals fur die Abhangigkeit eines Paares von Knoten vxk und vyl
erfolgt mit Prozedur ComposeDependencies gema Denition 2.4. Mit der Menge A
werden alle Ausgangssignale der in den Zeilen (2) bis (6) erzeugten AND-Gatter verwaltet.
Falls es in levels nur einen Knoten gibt, dann realisiert das einzige erzeugte Ausgangssignal
bereits die Abhangigkeit des Knoten vxk von vyl . Ansonsten wird in den Zeilen (8) bis
(12) noch ein EXOR-Gatter erzeugt, mit dem alle Ausgangssignale der AND-Gatter
zusammengefat werden.
Beispiel 2.6
Abbildung 2.7 zeigt die durch Prozedur Synthesis erzeugte Schaltkreisrealisierung fur
das KFDD aus Abbildung 2.2 bei baumartiger Kompositionssequenz. Die Realisierung
des Teilschaltkreises mit den Signalen fur eine Abhangigkeitsmatrix ist jeweils durch ein
grau unterlegtes Rechteck gekennzeichnet. Die Signale der Abhangigkeitsmatrix sind dabei
zeilenweise an oberen Rand eines Rechtecks angeordnet.
Durch die Prozedur DirectDependencyMatrix werden die am unteren Rand der
Abbildung gezeigten Teilschaltkreise fur die Abhangigkeitsmatrizen aufeinanderfolgender Level erzeugt. Um den Schaltplan ubersichtlich zu halten, wurden die Gatter fur
die konstanten Funktionen 0 und 1 mehrmals eingezeichnet, obwohl sie in der erzeugten
Schaltkreisrealisierung nur einmal realisiert werden. Durch jeweils einen Aufruf der Prozedur ParityMatrixMultiplication werden die verbleibenden Teilschaltkreise erzeugt,
wobei die einzelnen Ausgangssignale mit den zugehorigen EXOR- und AND-Gattern
jeweils durch einen Aufruf der Prozedur ComposeDependencies erzeugt werden.
Die durch das KFDD dargestellte Boolesche Funktion f = (fv ; fv ) wird durch die
primaren Ausgange realisiert, die mit den Signalen d11;;51 und d12;;51 verbunden sind.
1
1
1
2
2.2.2 Schaltkreisoptimierung mit lokalen Vereinfachungen
Bei der Synthese von Schaltkreisen soll neben anderen Optimierungszielen auch die Flache
weitestgehend minimiert werden. Daher sollten erkennbare Moglichkeiten zur Vereinfachung der Schaltkreisrealisierung ausgenutzt werden, um die Anzahl der Gatter zu reduzieren. Das AuÆnden von allgemeinen Vereinfachungsmoglichkeiten kann jedoch sehr
aufwendig werden. Deshalb werden oft lokale Schaltkreistransformationen (siehe z.B. [44,
32, 43]) verwendet. Dabei wird nach bestimmten Strukturen von jeweils benachbarten
Signalen und Gattern gesucht, die dann durch optimierte Realisierungen ersetzt werden
konnen. Die EÆzienz dieser Verfahren basiert darauf, da keine globalen Abhangigkeiten
in dem untersuchten Schaltkreis berucksichtigt werden mussen.
Im folgenden werden verschiedene Typen von Vereinfachungen beschrieben, deren Anwendbarkeit einfach bestimmt werden kann. Zum einen sind dies Vereinfachungen von
Gattern mit mindestens einem konstanten Eingangssignal. Zum anderen handelt es sich
um Vereinfachungen von Gattern, bei denen beide Eingangssignale gleich sind bzw. sich
nur durch einen Inverter unterscheiden. Schlielich konnen auch mehrere hintereinandergeschaltete Inverter vereinfacht werden. Basierend auf diesen Vereinfachungen wird das
Syntheseverfahren so abgeandert, da bereits wahrend der Generierung der Schaltkreisrealisierung die einfachere Schaltkreisrealisierung verwendet wird.
2.2.2.1 Gatter mit konstanten Eingangssignalen
In Abschnitt 3.2 wird ein Verfahren vorgestellt werden, um in einem mit Prozedur Synerzeugten Schaltkreis alle Signale zu identizieren, die konstante Funktionen dar-
thesis
46
d1,5
2,1= fv1
+
+
1,5
D
d1,3
1,1
1,3
D
d1,3
1,2
+
1,2
1,3
d1,3
2,2
d2,1
+
+
1,2
1,2
1,2
1,2
1,2
d1,1
d1,2
1,2 d1,3 d2,1 d2,2 d2,3
D
1,3
d1,3
1,3
+
2
d3,5
1,1
d2,3
+
3,5
D
+
2,3
2,3
2,3
2,3
2,3
2,3
2,3
2,3
d2,3
1,1 d1,2 d1,3 d2,1 d2,2 d2,3 d3,1 d3,2 d3,3
2,3
0
D
0
x1
1
3,5
d3,5
2,1
+
d3,1
+
+
3,4
3,4
3,4
3,4
3,4
d3,4
1,1 d1,2 d2,1 d2,2 d3,1 d3,2
3,4
0
1
0
0
D
1
x2
4.5
d4,5
1,1 d2,1
4,5
0
1
D
0
x3
x4
KAPITEL 2. LOGIKSYNTHESE MIT KFDDS
Abbildung 2.7: Durch Prozedur Synthesis erzeugte Schaltkreisrealisierung
1,5
d1,1
= fv11
2.2. EXOR-BASIERTES SYNTHESEVERFAHREN
47
stellen. Zunachst sollen jedoch die Grundprinzipien zur Vereinfachung von Gattern mit
konstanten Eingangssignalen vorgestellt werden. Deshalb werden in diesem Abschnitt nur
solche Signale als konstant betrachtet, die direkt an ein Gatter vom Typ C0 oder C1 angeschlossen sind. Die Groe der synthetisierten Schaltkreise kann weiter reduziert werden,
indem zusatzlich die Methoden aus Abschnitt 3.2 verwendet werden.
Zur Vereinfachung von Gattern mit konstanten Eingangssignalen ergeben sich folgende
Methoden, die auf den A quivalenzen f 0 = 0, f 1 = f , f 0 = f und f 1 = f fur die
Verknupfung einer Booleschen Funktion f 2 IBn mit einer konstanten Funktion basieren.
Durch das vorgestellte Syntheseverfahren werden nur AND-Gatter mit Eingangsgrad 2
erzeugt. Daher werden die Vereinfachungen nur fur AND2 -Gatter beschrieben, wahrend
fur EXOR-Gattern ein beliebiger Eingangsgrad zugelassen wird.
Denition 2.8
Sei SK = (G ; typ; I=O) ein Schaltkreis mit G = (V ; E ). Weiterhin sei v 2 V ein
Gatter mit Eingangssignalen s1 ; s2 ; : : : ; sk (k 2 f2; 3; : : :g) und Ausgangssignal o.
a) Falls typ(v ) = AND2 ist und ein Eingangssignal si (i 2 f1; 2g) mit einem
0
C0 -Gatter c0 verbunden ist, dann ist die Vereinfachung VAND
eines ANDGatters mit 0-Eingang folgendermaen deniert:
Entferne das AND -Gatter v und dessen Ausgang O(v; 1) = (v; o). Ersetze
das Ausgangssignal o durch das mit Gatter c0 verbundene Signal si . Losche
weiterhin die Eingange I(v; 1) und I(v; 2) des AND-Gatters. Falls das Signal

sj (j 2 f1; 2g n fig) durch die bisherigen Anderungen
einen Ausgangsgrad
dout (sj ) = 0 erhalten hat, werden rekursiv alle Kanten und Knoten geloscht,
die nur fur Signal sj verwendet werden.
b) Falls typ(v ) = AND2 ist und ein Eingangssignal si (i 2 f1; 2g) mit einem
1
C1 -Gatter c1 verbunden ist, dann ist die Vereinfachung VAND
eines ANDGatters mit 1-Eingang folgendermaen deniert:
Losche das AND-Gatter v , die Eingange I(v; 1) und I(v; 2) sowie den Ausgang
O(v; 1) = (v; o) und ersetze das Ausgangssignal o durch Signal sj (j 2 f1; 2g n
fig). Falls das Signal si dadurch einen Ausgangsgrad dout (si) = 0 erhalt, werden
auch das Signal si , die Kante (c1 ; si) und das Gatter c1 entfernt.
c) Falls typ(v ) = EXORk ist und ein Eingangssignal si (i 2 f1; 2; : : : ; kg) mit
0
einem C0 -Gatter c0 verbunden ist, dann ist die Vereinfachung VEXOR
eines
EXOR-Gatters mit 0-Eingang folgendermaen deniert:
Losche den Eingang I(v; i) = (si ; v ). Falls das Signal si dadurch einen Ausgangsgrad dout (si ) = 0 erhalt, werden auch das Signal si , die Kante (c0 ; si ) und
das Gatter c0 entfernt. Fur k = 2 losche auerdem das EXOR-Gatter v , den
Eingang I(v; j ) = (sj ; v ) (j 2 f1; 2g n fig) sowie den Ausgang O(v; 1) = (v; o)
und ersetze das Ausgangssignal o durch Signal sj . Fur k > 2 ersetze statt
dessen das EXOR-Gatter v durch ein Gatter v 0 mit typ(v 0 ) = EXORk 1 .
d) Falls typ(v ) = EXORk ist und ein Eingangssignal si (i 2 f1; 2; : : : ; kg) mit
1
einem C1 -Gatter c1 verbunden ist, dann ist die Vereinfachung VEXOR
eines
EXOR-Gatters mit 1-Eingang folgendermaen deniert:
Losche den Eingang I(v; i) = (si ; v ). Falls das Signal si dadurch einen Ausgangsgrad dout (si ) = 0 erhalt, werden auch das Signal si , die Kante (c1 ; si ) und
48
KAPITEL 2. LOGIKSYNTHESE MIT KFDDS
das Gatter c1 entfernt. Fur k = 2 ersetze das EXOR-Gatter v durch ein Gatter v 0 mit typ(v 0 ) = NOT . Fur k > 2 ersetze statt dessen das EXOR-Gatter
v durch ein Gatter v 0 mit typ(v 0 ) = EXORk 1 , erzeuge ein Signal s^ sowie ein
Gatter v^ mit typ(^v ) = NOT , ersetze den Ausgang O(v; 1) = (v; o) durch die
Kante (v 0 ; s^) und fuge die Kanten (^s; v^) und (^v; o) ein.
Beispiel 2.7
In der oberen Halfte von Abbildung 2.8 sind Gatter mit konstanten Eingangen dargestellt.
In der unteren Halfte der Abbildung sind jeweils die Schaltkreise angegeben, die aus der
entsprechenden Vereinfachung resultieren.
Bei der Vereinfachung des AND-Gatters mit 0-Eingang kann neben dem AND-Gatter
noch der Teilschaltkreis zur Realisierung von f entfernt werden, da dieser Teilschaltkreis
nur zur Berechnung des linken Eingangssignals des AND-Gatters benotigt wurde. +
0
f
1
f
+
0
f
0
VAND
1
f
1
VAND
V0EXOR
V1EXOR
0
f
f
f
Abbildung 2.8: Vereinfachung von Gattern mit konstanten Eingangssignalen
2.2.2.2 Gatter mit gleichen oder inversen Eingangssignalen
Weitere Moglichkeiten zur Vereinfachung ergeben sich bei Gattern, deren Eingange entweder direkt oder uber einen Inverter mit dem gleichen Signal verbunden sind. Die entsprechenden Methoden basieren auf den A quivalenzen f f = f , f f = 0, f f = 0 und
f f = 1.
Fur die Beschreibung der entsprechenden Vereinfachungen werden im folgenden wieder
AND-Gatter mit 2 Eingangen und EXOR-Gatter mit beliebig vielen Eingangen berucksichtigt.
2.2. EXOR-BASIERTES SYNTHESEVERFAHREN
49
Denition 2.9
Sei SK = (G ; typ; I=O) ein Schaltkreis mit G = (V ; E ). Weiterhin sei v 2 V ein
Gatter mit Eingangssignalen s1 ; s2 ; : : : ; sk (k 2 f2; 3; : : :g) und Ausgangssignal o.
a) Falls typ(v ) = AND 2 ist und die beiden Eingange mit dem gleichen EingangsG
signal s verbunden sind, dann ist die Vereinfachung VAND
eines ANDGatters mit gleichen Eingangen folgendermaen deniert:
Losche das AND-Gatter v , die Eingange I(v; 1) und I(v; 2) sowie den Ausgang
O(v; 1) = (v; o) und ersetze das Ausgangssignal o durch Signal s.
b) Falls typ(v ) = AND2 ist und ein Eingangssignal si (i 2 f1; 2g) von v zusatzlich
uber einem Inverter vN mit dem zweiten Eingangssignal sj (j 2 f1; 2g n fig)
N
von v verbunden ist, dann ist die Vereinfachung VAND
eines AND-Gatters
mit inversen Eingangen folgendermaen deniert:
Entferne das AND-Gatter v , dessen Ausgang O(v; 1) = (v; o) sowie dessen
Eingange I(v; 1) und I(v; 2). Entferne auerdem den Inverter vN mit dessen
Ausgang O(vN ; 1) und Eingang I(vN ; 1) sowie das Signal sj . Falls das Signal

si durch die bisherigen Anderungen
einen Ausgangsgrad dout (si ) = 0 erhalten
hat, werden rekursiv alle Kanten und Knoten geloscht, die nur fur Signal si
verwendet werden. Falls noch kein C0 -Gatter existiert, dann fuge ein neues
Gatter c0 mit typ(c0 ) = C0 sowie ein neues Signal s0 ein und verbinde den
Ausgang mit diesem Signal, d.h. O(c0 ; 1) = (c0 ; s0). Ersetze schlielich das
Ausgangssignal o durch das Ausgangssignal s0 des C0 -Gatters.
c) Falls typ(v ) = EXORk ist und zwei verschiedene Eingange I(v; i) und I(v; j )
(i; j 2 f1; 2; : : : ; kg) mit dem gleichen Eingangssignal s verbunden sind, dann
G
ist die Vereinfachung VEXOR
eines EXOR-Gatters mit gleichen Eingangen folgendermaen deniert:
Entferne die Eingange I(v; i) und I(v; j ). Falls das Signal s dadurch einen Ausgangsgrad dout (s) = 0 erhalten hat, werden rekursiv alle Kanten und Knoten
geloscht, die nur fur Signal s verwendet werden. Falls noch kein C0 -Gatter existiert, dann fuge ein neues Gatter c0 mit typ(c0 ) = C0 sowie ein neues Signal
s0 ein und verbinde den Ausgang mit diesem Signal, d.h. O(c0 ; 1) = (c0 ; s0 ). Fur
k = 2 losche auerdem das EXOR-Gatter v sowie dessen Ausgang O(v; 1) =
(v; o) und ersetze das Ausgangssignal o durch das Ausgangssignal s0 des C0 Gatters. Fur k > 2 ersetze statt dessen das EXOR-Gatter v durch ein Gatter
v 0 mit typ(v 0 ) = EXORk 1 und verbinde das Ausgangssignal s0 des C0 -Gatters
mit dem freien Eingang des EXOR-Gatters v 0 .
d) Falls typ(v ) = EXORk ist und ein Eingangssignal si (i 2 f1; 2; : : : ; kg) von v
zusatzlich uber einem Inverter vN mit einem anderen Eingangssignal sj (j 2
N
f1; 2; : : : ; kg n fig) von v verbunden ist, dann ist die Vereinfachung VEXOR
eines EXOR-Gatters mit inversen Eingangen folgendermaen deniert:
Entferne die Eingange I(v; i) und I(v; j ), den Inverter vN mit dessen Ausgang
O(vN ; 1) und Eingang I(vN ; 1) sowie das Signal sj . Falls das Signal si durch die

bisherigen Anderungen
einen Ausgangsgrad dout (si ) = 0 erhalten hat, werden
rekursiv alle Kanten und Knoten geloscht, die nur fur Signal si verwendet
werden. Falls noch kein C1 -Gatter existiert, dann fuge ein neues Gatter c1 mit
typ(c1 ) = C1 sowie ein neues Signal s0 ein und verbinde den Ausgang mit
50
KAPITEL 2. LOGIKSYNTHESE MIT KFDDS
diesem Signal, d.h. O(c1 ; 1) = (c1 ; s0 ). Fur k = 2 losche auerdem das EXORGatter v sowie dessen Ausgang O(v; 1) = (v; o) und ersetze das Ausgangssignal
o durch das Ausgangssignal des C1 -Gatters. Fur k > 2 ersetze statt dessen das
EXOR-Gatter v durch ein Gatter v 0 mit typ(v 0 ) = EXORk 1 und verbinde das
Ausgangssignal s0 des C1 -Gatters mit dem freien Eingang des EXOR-Gatters
v0.
In dieser Denition konnen die gleichen oder inversen Eingangssignale auch die konstanten
Funktionen 1 oder 0 reprasentieren. In diesen Fallen ist entsprechend Denition 2.8 auch
jeweils eine Vereinfachung von Gattern mit konstanten Eingangssignalen moglich. In den
noch folgenden Algorithmen werden in solchen Situationen immer die Vereinfachung von
Gattern mit konstanten Eingangssignalen bevorzugt. Deshalb kann bei Anwendung von
Vereinfachungen mit gleichen oder inversen Eingangen immer davon ausgegangen werden,
da die entsprechenden Eingange nicht konstant sind.
Weiterhin wird bei den Vereinfachungen von EXOR-Gattern mit gleichen oder inversen
Eingangssignalen jeweils ein konstantes Signal erzeugt. Daher kann nach der Anwendung
einer solchen Vereinfachung auch jeweils eine Vereinfachung eines Gatters mit konstantem
Eingangssignal durchgefuhrt werden. Insbesondere folgt hieraus fur EXOR-Gatter mit
mehr als zwei Eingangen:
Bemerkung 2.2
G
Falls auf ein EXOR-Gatter mit mehr als zwei Eingangen die Vereinfachung VEXOR
N
bzw. VEXOR
angewendet werden kann, dann kann auf das dabei erzeugte EXOR0
1
Gatter die Vereinfachung VEXOR
bzw. VEXOR
angewendet werden.
Beispiel 2.8
In der oberen Halfte von Abbildung 2.9 sind Gatter mit gleichen oder inversen Eingangen
dargestellt. In der unteren Halfte der Abbildung sind jeweils die Schaltkreise angegeben,
die aus der entsprechenden Vereinfachung resultieren.
2.2.2.3 Inverterketten
Eine zusatzliche Moglichkeit zur Vereinfachung der Schaltkreisrealisierung ergibt sich bei
Inverterketten, d.h. bei mehreren hintereinandergeschalteten Gattern vom Typ NOT . Die
entsprechende A quivalenz lautet: f = f .
Denition 2.10
Sei SK = (G ; typ; I=O) ein Schaltkreis mit G = (V ; E ). Weiterhin seien vi 2 V
(i 2 f1; 2g) zwei Gatter vom Typ NOT , wobei Gatter vi das Eingangssignal si und
das Ausgangssignal si+1 hat, d.h. der Ausgang von v1 und der Eingang von v2 sind
mit dem gleichen Signal s2 verbunden.
Dann ist die Vereinfachung VNOT einer Inverterkette folgendermaen deniert: Ersetze Ausgangssignal s3 von Gatter v2 durch Eingangssignal s1 von Gatter v1 . Losche den Ausgang O(v2 ; 1) = (v2 ; s3 ), das NOT -Gatter v2 und den Ein
gang I(v2 ; 1) = (s2 ; v2 ). Falls Signal s2 durch die bisherigen Anderungen
einen Ausgangsgrad dout (s2 ) = 0 erhalten hat, werden weiterhin das Signal s2 , der Ausgang
O(v1; 1) = (v1; s2 ), das NOT -Gatter v1 und der Eingang I(v1 ; 1) = (s1 ; v1) geloscht.
51
2.2. EXOR-BASIERTES SYNTHESEVERFAHREN
+
f
f
f
f
N
VAND
VG
AND
0
+
VG
EXOR
0
VN
EXOR
1
f
Abbildung 2.9: Vereinfachung von Gattern mit gleichen oder inversen Eingangssignalen
Beispiel 2.9
In der oberen Halfte von Abbildung 2.10 sind zwei verschiedene Konstellationen von Inverterketten dargestellt. In der unteren Halfte der Abbildung sind jeweils die Schaltkreise
angegeben, die aus der Anwendung von Vereinfachung VNOT resultieren. Im ersten Fall
konnen beide Inverter geloscht werden. Im zweiten Fall mu der untere Inverter beibehalten werden, da das Ausgangssignal dieses Inverters von weiteren Gattern verwendet wird.
2.2.2.4 Anwendbarkeit in synthetisierten Schaltkreisen
Die vorgestellten Vereinfachungen von Gattern konnen in jedem Schaltkreis angewendet
werden, ohne die durch den Schaltkreis realisierte Boolesche Funktion zu verandern:
Lemma 2.6
Sei SK = (G ; typ; I=O) ein Schaltkreis und SK 0 sei aus SK durch wiederholte Anwendung von Vereinfachungen von Gattern entstanden. Dann realisieren SK und
SK 0 die gleiche Boolesche Funktion.
Der Beweis des Lemmas folgt direkt aus den Denitionen 2.8, 2.9 und 2.10 sowie den
angegebenen A quivalenzen.
In dem Syntheseproze sollen Gatter, die durch Vereinfachungen wieder entfernt werden
konnen, erst gar nicht erzeugt werden. Dazu mu jeweils vor dem Erzeugen eines Gatters uberpruft werden, ob eine der in den Denitionen 2.8, 2.9 und 2.10 beschriebenen
Strukturen vorliegt und gegebenenfalls die vereinfachte Realisierung verwendet werden.
Um den algorithmischen Aufwand hierfur gering zu halten, wird im folgenden untersucht,
52
KAPITEL 2. LOGIKSYNTHESE MIT KFDDS
f
f
VNOT
f
VNOT
f
Abbildung 2.10: Vereinfachung von Inverterketten
welche der Vereinfachungen in den durch das Syntheseverfahren erzeugten Schaltkreisen
uberhaupt moglich sind und welche Vereinfachungen in der erzeugten Schaltkreisstruktur
niemals anwendbar sein konnen.
Dazu wird folgendes Lemma benotigt:
Lemma 2.7
Sei K = (G; R; Xn ; d) ein KFDD, v ein Knoten aus levelk und Y levell eine
Teilmenge der Knoten aus levell , wobei k < l ist. Sei weiterhin Pv;Y 6= ; die Menge
aller Pfade in dem KFDD, die von Knoten v zu den Knoten aus Y fuhren.
Dann gibt es eine Belegung a = (ak ; ak+1 ; : : : ; al 1 ), so da genau ein Pfad aus Pv;Y
aktiv fur die Belegung a ist.
Beweis:
Es wird ein Verfahren zur Bestimmung von Belegung a angegeben:
Falls es mindestens einen Pfad der Form (low(v); ek+1; : : : ; el 1) in Pv;Y gibt, dann kann
entsprechend Denition 2.2 der Wert von ak so gewahlt werden, da low(v) aktiv und
high(v ) nicht aktiv ist. Andernfalls beginnen alle Pfade aus Pv;Y mit der Kante high(v ).
In diesem Fall wird ak so gewahlt, da high(v) aktiv ist. In beiden Fallen ist sichergestellt,
da von den Pfaden in Pv;Y entweder nur Pfade uber low(v) oder nur Pfade uber high(v)
zu den Knoten aus Y aktiv sind. Von dem entsprechenden Nachfolger von v ausgehend
konnen die verbleibenden Werte fur die Belegung ak+1; ak+2; : : : ; al 1 rekursiv bestimmt
werden.
2.2. EXOR-BASIERTES SYNTHESEVERFAHREN
53
Aus Bemerkung 2.1 ergibt sich, da in einer Abhangigkeitsmatrix Dk;k+1 fur aufeinanderfolgende Level in jeder Zeile hochstens zwei Signale nicht die konstante Funktion 0
reprasentieren. Weiterhin kann eines dieser beiden Signale die konstante Funktion 1 darstellen. Durch Anwendung der Vereinfachungen von Gattern mit konstanten Eingangen
in den Teilschaltkreisen aufeinanderfolgender Level oder durch Anwendung der Vereinfachung von Gattern mit gleichen oder inversen Eingangssignalen konnen auch konstante
Eingange an den Gattern der Teilschaltkreise zur Realisierung der Parity Matrix Multiplikation entstehen. Die Vereinfachungen von Gattern mit konstanten Eingangen sind
also vor dem Erzeugen von jedem Gatter zu berucksichtigen.
1
Fur die Anwendbarkeit der Vereinfachung VEXOR
an einem EXOR-Gatter ergibt sich
durch die Schaltkreisstruktur jedoch folgende Einschrankung:
Lemma 2.8
Bei Schaltkreisen, die durch die in Abschnitt 2.2.1 prasentierten Algorithmen zusammen mit den Vereinfachungen aus den Denitionen 2.8, 2.9 und 2.10 erzeugt
1
werden, kann die Vereinfachung VEXOR
an jedem EXOR-Gatter hochstens einmal
angewendet werden.
Beweis:
EXOR-Gatter
werden nur in Prozedur ComposeDependencies erzeugt. Dabei realisiert das Ausgangssignal eines EXOR-Gatters die Abhangigkeit dk;lx;y eines Knoten vxk
von dem Knoten vyl und jedes Eingangssignal des EXOR-Gatters realisiert das Produkt
s;l ur einen Knoten v s 2 level . Da dk;s und ds;l von disjunkten Variablenmengen
dk;s
s
x;z dz;y f
z
x;z
z;y
s;l
abhangen, kann das Produkt nur dann 1 sein, wenn sowohl dk;s
x;z = 1 als auch dz;y = 1 ist.
1
Aus der Annahme, da die Vereinfachung VEXOR mehrmals angewendet werden kann,
folgt, da es mindestens zwei verschiedene Eingangssignale des EXOR-Gatters geben
mu, die die Funktion
1 realisieren. Damit mu es zwei verschiedene Knoten vzs0 ; vzs^ 2 levels
k;s
geben, fur die dk;s
x;z 0 = 1 und dx;z^ = 1 ist.
Sei nun Z = fvzs0 ; vzs^g und Pvxk ;Z die Menge aller Pfade von vxk zu den Knoten vzs0 und vzs^.
Dann gibt es nach Lemma 2.7 eine Belegung a, so da genau ein Pfad aus Pvxk ;Z aktiv fur
a ist. Dieser aktive Pfad fuhre o.B.d.A. zu Knoten vzs0 . Damit ist fur Belegung a kein Pfad
von vxk zu vzs^ aktiv. Dies steht im Widerspruch zu dk;s
x;z^ = 1.
Desweiteren ergeben sich mehrere Einschrankungen fur die Anwendbarkeit der Vereinfachungen von Gattern mit gleichen oder inversen Eingangssignalen in den Schaltkreisstrukturen, die durch die vorgestellten Algorithmen erzeugt werden.
Lemma 2.9
Bei Schaltkreisen, die durch die in Abschnitt 2.2.1 prasentierten Algorithmen zusammen mit den Vereinfachungen aus den Denitionen 2.8, 2.9 und 2.10 erzeugt
werden, ergeben sich fur die Anwendbarkeit der Vereinfachungen von Gattern mit
gleichen bzw. inversen Eingangen1 folgende Einschrankungen:
G , VN
G
i) Die Vereinfachungen VAND
onnen nicht angewendet werAND und VEXOR k
den.
N
ii) Die Vereinfachung VEXOR
kann nur fur EXOR-Gatter angewendet werden, bei
denen das Ausgangssignal eines primaren Eingangs sowohl direkt als auch uber
einen Inverter mit den Eingangen des EXOR-Gatters verbunden ist.
1 Entsprechend
dem Kommentar auf Seite 50 sind diese Eingange nicht konstant.
54
KAPITEL 2. LOGIKSYNTHESE MIT KFDDS
Beweis:
Zu i): AND-Gatter werden
nur in Prozedur ComposeDependencies erzeugt. Dabei
wird jeweils fur ein Tripel von Knoten vxk , vyl und vzs durch ein AND-Gatter mit zwei
s;l
s;l
Eingangen das Produkt dk;s
angigkeiten dk;s
x;z dz;y der Abh
x;z und dz;y berechnet. Da diese
Abhangigkeiten von disjunkten Variablenmengen abhangen, konnen sie weder gleich noch
G
N
invers zueinander sein und damit konnen die Vereinfachungen VAND
und VAND
nicht
angewendet werden.
Analog zum Beweis von Lemma 2.8 ergibt sich fur die Anwendbarkeit der Vereinfachung
G
VEXOR
, da es fur ein Paar von Knoten vxk und vyl zwei verschiedene Knoten vzs0 ; vzs^ 2 levels
s;l
k;s s;l
k;s
geben mu, fur die nun dk;s
angigkeiten dk;s
angen
x;z 0 dz 0;y = dx;z^ dz^;y ist. Die Abh
x;z 0 und dx;z^ h
s;l
wieder von einer Variablenmenge ab, die disjunkt zu der Variablenmenge von dz0;y und
k;s
ds;l
onnen die beiden Produkte nur dann gleich sein, wenn auch dk;s
z^;y ist. Damit k
x;z 0 = dx;z^
ist. Mit Hilfe von Lemma 2.7 folgt wieder, da es eine Belegung a gibt, fur die genau ein
Pfad
von
Knoten
vxk zu einem der Knoten vzs0 oder vzs^ aktiv ist. Fur Belegung a ist damit
k;s
dk;s
ur alle
x;z 0 (a) 6= dx;z^(a). Dies steht wiederum im Widerspruch zu der Voraussetzung, da f
k;s
k;s
Belegungen dx;z0 = dx;z^ sein mu.
N
Zu ii): Um Vereinfachung VEXOR
anwenden zu konnen, mu ein Eingangssignal des
EXOR-Gatters mit einem Inverter verbunden sein. Inverter werden jedoch nur in der
Prozedur DirectDependencyMatrix erzeugt oder sie entstehen durch Anwendung
1
der Vereinfachung VEXOR
. Im folgenden wird die Annahme, da ein durch Vereinfachung
1
N
VEXOR entstandener Inverter zur Anwendbarkeit von Vereinfachung VEXOR
fuhrt, zum
Widerspruch gefuhrt.
In Abbildung 2.11 wird zunachst in SK1 die vereinfachte Schaltkreisstruktur fur die konN
stante Abhangigkeit dk;lx;y gezeigt. Dieser Schaltkreis soll durch Vereinfachung VEXOR
entstanden sein. Dazu mu eine Struktur des durch SK2 dargestellten Schaltkreises vorgelegen haben, bei der die Abhangigkeit dk;lx;y aus einer Abhangigkeit Æ berechnet wird. Ent1
sprechend der Annahme wurde der Inverter durch Vereinfachung VEXOR
erzeugt. Da der
Inverter nicht mit dem Ausgangssignal, sondern mit einem Eingangssignal des EXORGatters X1 verbunden ist, kann der Inverter nicht in dem gleichen Teilschaltkreis zur
Realisierung der Parity Matrix Multiplikation enthalten sein, in dem auch das EXORGatter X1 liegt. Somit mu auch das EXOR-Gatter X2 in einem Teilschaltkreis einer
anderen Parity Matrix Multiplikation liegen. Die entsprechende Schaltkreisstruktur und
die Zugehorigkeit zu den Teilschaltkreisen der einzelnen Parity Matrix Multiplikationen
sind durch SK3 wiedergegeben.
In Schaltkreis SK3 sind nun die Eingange des Teilschaltkreises Dk;l direkt mit den Eingangen des EXOR-Gatters X1 verbunden ohne uber AND-Gatter zu fuhren. Die entspre1
chenden AND-Gatter mussen also durch Vereinfachungen VAND
entfernt worden sein, d.h.
k;l
jedes der in dem Teilschaltkreis D von SK4 dargestellte AND-Gatter mu mit einem
C1 -Gatter verbunden gewesen sein. Da die Ausgange beider AND -Gatter zu dem gleichen
k;s
EXOR-Gatter fuhren, mussen die beiden Eingangssignale dk;s
angigkeiten
x;z und dx;z 0 Abh
k
s
s
des Knoten vx von zwei verschiedenen
Knoten vz und vz0 aus levels darstellen. Mit Lemk;s
k;s
ma 2.7 folgt wieder, da dx;z 6= dx;z0 sein mu. Also konnen diese beiden Abhangigkeiten
nicht beide 1 sein. Somit mussen die Abhangigkeiten ds;lz;y = 1 und ds;lz0;y = 1 gewesen sein
und die in SK3 dargestellten Eingangssignale von Dk;l mussen { wie in SK4 gezeigt {
Ausgangssignale von Dk;s gewesen sein.
55
2.2. EXOR-BASIERTES SYNTHESEVERFAHREN
dk,l
x,y
dk,l
x,y
VN
EXOR
1
k,l
dk,l
x,y
dx,y
k,l
+ X1
D
k,l
+ X1
+ X1
D
1
1
dk,s
x,z
V1EXOR
+ X2
1
k,s
V1AND
dk,s
x,z’
+ X2
D
1
1
1
k,t
dk,t
x,w dx,w’
δ
SK1
SK2
δ
SK3
δ
SK4
N
Abbildung 2.11: Anwendbarkeit von Vereinfachung VEXOR
Desweiteren sind in SK3 die beiden Fanoutzweige von Æ direkt mit dem Eingang des
EXOR-Gatters X2 bzw. mit dem Teilschaltkreis fur Dk;l verbunden ohne uber ANDGatter zu fuhren. Damit folgt wieder, da die beiden in Dk;s von SK4 abgebildeten AND1
Gatter durch Vereinfachungen VAND
entfernt worden sein mussen. Da sowohl dk;s
x;z als auch
k;s
k
dx;z0 Abhangigkeiten des Knoten vx darstellen, folgt analog zu obiger Diskussion, da die
k;t
in SK4 dargestellten Abhangigkeiten dk;t
onnen. Also konnen
x;w und dx;w0 nicht gleich sein k
diese Abhangigkeiten nicht beide 1 sein. k;tSomit mu die in SK4 gezeigte Realisierung
vorliegen. Dabei ist jedoch dk;t
x;w = Æ und dx;w0 = Æ . Dies steht auch im Widerspruch dazu,
k;t
k;t
da dx;w 6= dx;w0 sein mu.
1
Daher mu die Annahme, da der Inverter durch Vereinfachung VEXOR
entstanden ist,
falsch gewesen sein und der Inverter mu in der Prozedur DirectDependencyMatrix
erzeugt worden sein. Damit ist sein Eingangssignal Æ direkt mit einem PI verbunden.
Auch Inverterketten werden durch die vorgestellten Algorithmen nicht an beliebigen Stellen der Schaltkreise erzeugt. Es kann vielmehr gezeigt werden, da Inverterketten durch
die vorgestellten Algorithmen nur an primaren Eingangen entstehen konnen:
Lemma 2.10
Bei Schaltkreisen, die durch die in Abschnitt 2.2.1 prasentierten Algorithmen zusammen mit den Vereinfachungen aus den Denitionen 2.8, 2.9 und 2.10 erzeugt werden, existieren nur Inverterketten, die direkt mit dem Ausgangssignal eines primaren
Eingangs verbunden sind. Die Vereinfachung VNOT kann somit nur an solchen Inverterketten angewendet werden.
56
KAPITEL 2. LOGIKSYNTHESE MIT KFDDS
Beweis:
Alle in der Prozedur DirectDependencyMatrix erzeugten Inverter sind direkt mit
dem Ausgangssignal eines primaren Eingangs verbunden. Ansonsten konnen Inverter nur
1
durch Anwendung der Vereinfachung VEXOR
entstehen. Eine Inverterkette, die nicht direkt
mit dem Ausgangssignal eines primaren Eingangs verbunden ist, konnte somit nur aus
1
zwei NOT -Gattern bestehen, die jeweils durch Vereinfachung VEXOR
entstandenen sind.
Im folgenden wird die Annahme, da eine solche Inverterkette in einem synthetisierten
Schaltkreis existiert, zum Widerspruch gefuhrt.
In Abbildung 2.12 ist durch SK1 die Schaltkreisrealisierung dargestellt, die durch Vereinfachung VNOT aus der in SK2 gezeigten Inverterkette erzeugt wurde, bei der die Abhangigkeit dk;lx;y aus einer Abhangigkeit Æ berechnet wird. Entsprechend der Annahme, sollen die
1
beiden Inverter N1 und N2 jeweils durch Anwendung von Vereinfachung VEXOR
entstande1
nen sein. Da die Vereinfachung VEXOR nach Lemma 2.8 an jedem EXOR-Gatter hochstens
einmal angewendet werden kann, mussen die EXOR-Gatter, aus denen die Inverterkette entstanden ist, zu Teilschaltkreisen von verschiedenen Parity Matrix Multiplikationen
gehoren. Die entsprechende Schaltkreisstruktur und die Zugehorigkeit der EXOR-Gatter
X1 und X2 zu den Teilschaltkreisen der einzelnen Parity Matrix Multiplikationen sind
durch SK3 wiedergegeben.
k,l
k,l
k,l
dx,y
dx,y
k,l
dx,y
k,l
N1
D
k,l
+ X1
1
VEXOR
A1
k,l
1
1
k,s
k,s
dx,z dx,z’
k,s
+ X2
D
1
A3
x2
+
A1
1
VAND
k,s
A4
A3
k,t
k,t
dx,w dx,w’
δ
SK2
δ
δ
SK3
k,s
dx,z’
x2
+
A5
A4
1
1
1
k,t
k,t
k,t
dx,w dx,w’ dx,w
1
δ
SK1
1
dk,s
x,z
D
1
A2
1
1
1
x1
+
D
A2
1
VAND
N2
dx,y
x1
+
D
1
VNOT
k,l
dx,y
1
1
δ
SK4
SK5
Abbildung 2.12: Anwendbarkeit von Vereinfachung VNOT
In Schaltkreis SK3 sind die Eingange des EXOR-Gatters X1 nicht mit AND-Gattern
1
verbunden. Die entsprechenden AND-Gatter mussen also durch Vereinfachungen VAND
entfernt worden sein. Von den in SK4 dargestellten AND-Gattern A1 und A2 kann nur
ein Eingangssignal nicht mit einem C1-Gatter verbunden sein. Da die Ausgange beider
AND-Gatter zu dem gleichen EXOR-Gatter fuhren, mussen die beiden Eingangssignale
k;s
dk;s
angigkeiten des Knoten vxk von zwei verschiedenen Knoten vzs und vzs0 aus
x;z und dx;z 0 Abh
k;s
levels darstellen. Mit Lemma 2.7 folgt wieder, da dk;s
onnen
x;z 6= dx;z 0 sein mu. Somit k
k;s
diese beiden Abhangigkeiten nicht beide 1 sein. Sei also dx;z mit dem Ausgangssignal
des EXOR-Gatters X2 verbunden, das die Abh
angigkeit Æ darstellt. Entsprechend ergibt
k;t
sich, da eine der Abhangigkeiten dk;t
oder
d
x;w
x;w0 ungleich 1 sein mu. In SK4 wird die
k;t
Abhangigkeit Æ durch dx;w reprasentiert.
2.2. EXOR-BASIERTES SYNTHESEVERFAHREN
57
1
Das C1-Gatter fur die Abhangigkeit dk;s
x;z 0 mu durch Vereinfachungen VAND aus einem
AND-Gatter entstanden sein, bei dem wiederum beide Eingangssignale mit C1 -Gattern
verbunden gewesen sind. Dies ist in SK5 durch A5 dargestellt. Ein k;tEingang desk;tANDGatters A5 mu dabei aus Dk;t kommen und stellt die Abhangigkeit dx;wb dar. Da dx;w0 und
dk;t
angigkeiten des Knoten vxk von zwei verschiedenen Knoten vwt 0 und vwtb aus levelt
x;wb Abh
darstellen, folgt wieder mit Lemma 2.7, da diese beidenk;tAbhangigkeiten
nicht gleich sein
k;t
konnen. Dies steht jedoch im Widerspruch dazu, da dx;w0 = dx;wb = 1 sein mu.
Daher mu die Annahme, da beide Inverter einer Inverterkette durch Vereinfachungen
1
VEXOR
entstanden sein konnen, falsch gewesen sein. Jede Inverterkette mu einen Inverter
enthalten, der in Prozedur DirectDependencyMatrix erzeugt wurde, und ist somit
direkt mit dem Ausgangssignal eines primaren Eingangs verbunden.
Um die Groe der erzeugten Schaltkreise zu minimieren, mussen alle moglichen Vereinfachungen von Gattern durchgefuhrt werden. Dabei ist zu beachten, da in einigen Fallen die
Anwendbarkeit einer Vereinfachung erst dadurch ermoglicht wird, da zunachst eine andere Vereinfachung durchgefuhrt wird. Der Aufwand zum AuÆnden von Vereinfachungen
kann durch die in Lemma 2.8, Lemma 2.9 und Lemma 2.10 prasentierten Einschrankungen
erheblich reduziert werden.
2.2.2.5 Angepates Syntheseverfahren
Im folgenden wird ein Verfahren vorgestellt, bei dem die moglichen Vereinfachungen implizit durchgefuhrt werden und bereits wahrend der Synthese des Schaltkreises die vereinfachten Realisierungen eingesetzt werden. Auch dabei werden Vereinfachungen berucksichtigt, die erst durch Anwendung anderer Vereinfachungen anwendbar werden. Damit
wird insbesondere erreicht, da keine Gatter vom Typ C0 und C1 erzeugt werden. Um
den Aufwand zum AuÆnden von moglichen Vereinfachungen zu reduzieren, werden die
Resultate aus Lemma 2.8 und Lemma 2.9 verwendet.
Dazu mussen zunachst in Algorithmus 2.1 die Zeilen (5) und (6) zum Erzeugen der Gatter
c0 und c1 sowie der Signale Zero und One geloscht werden. Auch wenn die Signale Zero
und One im Schaltkreis nicht mehr realisiert werden, werden diese Namen weiterhin in
den Abhangigkeitsmatrizen zur Kennzeichnung von konstanten Abhangigkeiten verwendet. Da in der Prozedur DirectDependencyMatrix nur NOT -Gatter erzeugt werden,
deren Eingangssignale mit primaren Eingangen verbunden werden, und in ParityMatrixMultiplication gar keine Gatter erzeugt werden, k
onnen diese beiden Prozeduren
unverandert weiterverwendet werden.
In der Prozedur ComposeDependencies konnen allerdings AND-Gatter mit konstanten Eingangssignalen erzeugt werden. Deshalb wird diese Prozedur so geandert, da vor
0
1
dem Erzeugen eines AND-Gatters uberpruft wird, ob eine Vereinfachung VAND
oder VAND
auf das neue AND-Gatter anwendbar ware und diese Vereinfachung wird gegebenenfalls
implizit durchgefuhrt. Durch diese Vereinfachungen der AND-Gatter konnen wiederum
EXOR-Gatter entstehen, die konstante Eingangssignale haben oder direkt bzw. uber
einen Inverter mit einem primaren Eingang verbunden sind. Auch hier werden mogliche
Vereinfachungen der EXOR-Gatter implizit durchgefuhrt. Dadurch konnen die erzeugten Teilschaltkreise auch Ausgangssignale enthalten, die konstant sind bzw. mit primaren
Eingangen verbunden sind. Diese werden in den folgenden Aufrufen der Prozedur ComposeDependencies ber
ucksichtigt.
Die geanderte Prozedur ComposeDependencies ist in Algorithmus 2.4 angegeben und
wird im folgenden erlautert.
58
KAPITEL 2. LOGIKSYNTHESE MIT KFDDS
Algorithmus 2.4
ComposeDependencies
( Position x, Position y, Matrix Dk;s, Matrix Ds;l , Schaltkreis SK )
// Erzeugt eine Schaltkreisrealisierung fur die Berechnung der Abhangigkeit des Knoten vxk
// von Knoten vyl aus den Signalen aus D k;s und D s;l und gibt das Ausgangssignal d zuruck,
// wobei alle moglichen Vereinfachungen implizit durchgefuhrt werden.
(1) A = ; // Eingangssignale des EXOR-Gatters mit tag(s) = 0
(2) for i = 1 to n do B [i] = ; od // Eingangssignale des EXOR-Gatters mit jtag(s)j = i
N
(3) B = ; // Indizes der primaren Eingange, fur die VEXOR
anwendbar sein kann
(4) invert = 0 // Ausgangssignal des EXOR-Gatters invertieren?
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
(15)
(16)
(17)
(18)
(19)
(20)
(21)
(22)
(23)
(24)
(25)
(26)
(27)
(28)
(29)
(30)
(31)
(32)
(33)
(34)
(35)
(36)
(37)
(38)
(39)
(40)
(41)
for
z
= 1 to widths do
if (Dk;s[x; z ] 6=
) ^ (Ds;l[z; y] 6=
) then
k;s
s;l
if (D [x; z ] =
) ^ (D [z; y] = ) then invert = 1 if (Dk;s [x; z ] =
) ^ (Ds;l [z; y] 6= ) then A = A [ fDs;l [z; y]g if (Dk;s [x; z ] 6=
) ^ (Ds;l [z; y] = ) then
k;s
t = jtag(D [x; z ])j
if t = 0 then A = A [ fDk;s[x; z ]g
else B [t] = B [t] [ fDk;s[x; z ]g; B = B [ ftg if (Dk;s [x; z ] 6=
) ^ (Ds;l [z; y] 6= ) then
Erzeuge Gatter gA mit Typ AN D2
Erzeuge Kanten (Dk;s[x; z]; gA ) und (Ds;l[z; y]; gA )
Erzeuge Signal sA; Erzeuge Kante (gA ; sA); A = A [ fsAg
Zero
Zero
One
One
One
One
One
One
One
One
od
for all i 2 B do
if jB [i]j = 1 then A = A [ B [i]
else invert = 1 invert od
if (jAj = 0) ^ (invert = 0) then d = Zero if (jAj = 0) ^ (invert = 1) then d = One if jAj = 1 then s0 ist das Element in A if jAj 2 then
Erzeuge Gatter gX mit Typ EXORjAj
for all sA 2 A do Erzeuge Kante (sA ; gX ) od
Erzeuge Signal s0; Erzeuge Kante (gX ; s0);
if (jAj 1) ^ (invert = 0) then d = s0 if (jAj 1) ^ (invert = 1) then
if (tag(s0 ) 0) then
Erzeuge Gatter gN vom Typ N OT ; Erzeuge Kante (s0 ; gN )
Erzeuge neues Signal d; Erzeuge Kante (gN ; d)
if (tag(s0 ) > 0) then tag(d) = tag(s0 ) else d = PI(jtag(s0 )j) return ( d )
2.2. EXOR-BASIERTES SYNTHESEVERFAHREN
59
Mit der Menge A werden alle Eingangssignale fur das EXOR-Gatter verwaltet, die nicht
N
an einer Vereinfachung VEXOR
beteiligt sein konnen und somit in jedem Fall mit einem
Eingang des EXOR-Gatters verbunden werden mussen. Nach Lemma 2.9 sind dies alle
Signale, die nicht direkt oder uber einen Inverter mit einem primaren Eingang verbunden
sind und deshalb entsprechend Denition 2.7 mit tag(s) = 0 markiert sind.
Im Verlauf von Prozedur ComposeDependencies kann jedoch auch ein Eingangssignal
fur das EXOR-Gatter bestimmt werden, das direkt bzw. uber einen Inverter mit einem
primaren Eingang PI(i) verbunden ist. Dieser Eingang des EXOR-Gatters wird nur dann
realisiert, wenn bei der weiteren Abarbeitung des aktuellen Aufrufs der Prozedur nicht
ein weiteres Eingangssignal fur das EXOR-Gatter bestimmt wird, das uber einen Inverter bzw. direkt mit dem gleichen primaren Eingang PI(i) verbunden ist. In diesem Falle
N
ware namlich die Vereinfachung VEXOR
anwendbar und keines der beiden Signale wird an
die Eingange des EXOR-Gatters angeschlossen. Sofern noch weitere Eingangssignale fur
N
das EXOR-Gatter bestimmt wurden, wird das durch Vereinfachung VEXOR
zu erzeugen1
de Gatter vom Typ C1 nach Bemerkung 2.2 direkt durch Vereinfachung VEXOR entfernt.
Ansonsten wird in einen spateren Aufruf von Prozedur ComposeDependencies die entsprechende Vereinfachung durchgefuhrt. Die Eingangssignale fur das EXOR-Gatter, welN
che moglicherweise durch Vereinfachung VEXOR
entfernt werden, konnen dadurch erkannt
werden, da sie mit tag(s) 6= 0 markiert sind. Um fur solche Signale den Aufwand zu vermeiden, jeweils die Menge aller bereits bestimmten Eingangssignale des EXOR-Gatters
nach einem weiteren Signal s0 mit tag(s0) = tag(s) zu durchsuchen, werden diese Signale
zunachst nicht in der Menge A verwaltet. Statt dessen werden fur jeden primaren Eingang
PI(i) die Signale mit jtag(s)j = i separat durch die Menge B [i] verwaltet. Auerdem wird
in der Menge B die Menge aller Indizes i gesammelt, fur die mindestens ein Element in
B [i] eingefugt wurde.
Schlielich wird mit der Variablen invert protokolliert, ob an dem EXOR-Gatter die im1
plizite Anwendung der Vereinfachungen VEXOR
{ entweder direkt oder infolge der AnwenN
dung von Vereinfachung VEXOR { vorgenommen wurde und deshalb das Ausgangssignal
invertiert werden mu.
In den Zeilen (5) bis (24) werden die Eingangssignale des EXOR-Gatters bestimmt und
gegebenenfalls AND-Gatter erzeugt. Falls fur ein AND-Gatter mindestens ein Eingangs0
signal Zero ist, konnte die Vereinfachung VAND
durchgefuhrt werden. Dadurch ware auch
0
das Eingangssignal der EXOR-Gatters Zero und die Vereinfachung VEXOR
konnte angewendet werden, wodurch der Eingang wieder entfernt wurde. Deshalb wird in diesem
Fall weder ein AND-Gatter erzeugt noch wird die Menge A verandert und es gibt keinen
else-Fall fur die Bedingung aus Zeile (6).
Die Falle, da fur ein AND-Gatter kein Eingangssignal Zero ist, werden in den Zeilen
(7) bis (18) behandelt.
Sind beide Eingangssignale fur das AND-Gatter One, ware nach der Vereinfachung
1
1
VAND
ein Eingangssignal des EXOR-Gatters One und die Vereinfachung VEXOR
konnte angewendet werden. In diesem Fall ist kein Eingangssignal fur das EXORGatter zu erzeugen, sondern dessen Ausgangssignal zu invertieren. Dazu wird in
1
Zeile (7) die Variable invert gesetzt. Nach Lemma 2.8 ist die Vereinfachung VEXOR
an jedem EXOR-Gatter hochstens einmal anwendbar. Deshalb kann die Bedingung
aus Zeile (7) fur jeden Aufruf der Prozedur ComposeDependencies hochstens
einmal erfullt sein und die Variable invert kann hochstens einmal gesetzt werden.
60
KAPITEL 2. LOGIKSYNTHESE MIT KFDDS
Falls Dk;s[x; z] = 1 ist, folgt analog zum letzten Absatz des Beweises von Lemma 2.8,
da kein anderer Index z0 2 f1; 2; : : : ; z 1; z + 1; : : : ; widthsg existieren kann, fur
den auch Dk;s[x; z0 ] = 1 ist. Damit kann das Signal Ds;l[z; y] =6 1 nicht wieder
N
durch Vereinfachung VEXOR
entfernt werden und es wird in Zeile (8) direkt als
Eingangssignal des EXOR-Gatters in die Menge A aufgenommen.
Im Gegensatz dazu kann fur Dk;s[x; z] 6= 1 und Ds;l[z; y] = 1 die Anwendbarkeit von
N
Vereinfachung VEXOR
nur dann ausgeschlossen werden, wenn das Signal Dk;s[x; z]
weder direkt noch uber einen Inverter mit einem primaren Eingang verbunden ist.
Ist dies der Fall, wird Ds;l[z; y] in Zeile (11) ebenfalls als Eingangssignal des EXORGatter in die Menge A aufgenommen. Andernfalls wird es zunachst zu der Menge
B [jtag(Dk;s[x; z ])j] hinzugefugt und der entsprechende Index in die Menge B aufgenommen.
Falls schlielich beide Signale Dk;s[x; z] und Ds;l[z; y] nicht konstant sind, wird in
den Zeilen (15) bis (17) wie bisher das AND-Gatter erzeugt, die zugehorigen Signale
angeschlossen und das Ausgangssignal in die Menge A aufgenommen, um spater an
das EXOR-Gatter angeschlossen zu werden.
Nachdem alle moglichen Eingangssignale fur das EXOR-Gatter bestimmt wurden, wird
N
in den Zeilen (21) bis (24) uberpruft, ob die Vereinfachung VEXOR
anwendbar ware. Durch
B ist die Menge aller Indizes i gegeben, fur die mindestens ein Eingangssignal des EXORGatters direkt oder uber einen Inverter mit dem primaren Eingang PI(i) verbunden ist.
Falls in B [i] nur ein Signal enthalten ist, kann die Vereinfachung nicht angewendet werden
und deshalb wird das Signal aus B [i] in Zeile (22) in die Menge A aufgenommen. Andernfalls enthalt B [i] genau zwei2 Signale, wovon ein Signal direkt mit dem primaren Eingang
PI(i) verbunden ist und das andere Signal uber einen Inverter mit PI(i) verbunden ist.
N
1
Es wurde also Vereinfachung VEXOR
gefolgt von Vereinfachung VEXOR
angewendet, wobei
die beiden Eingange des EXOR-Gatters wieder entfernt wurden und das Ausgangssignal
invertiert wurde. Deshalb werden die Signale nicht in die Menge A aufgenommen und der
Wert von invert wird invertiert.
Da nicht mehr fur jeden Knoten z 2 levels ein Signal in A aufgenommen wird, kann
diese Menge auch leer bleiben. Falls fur jeden Knoten entweder Dk;s[x; z] oder Ds;l[z; y]
Zero waren, wird in Zeile (25) auch der Wert f
ur die Abhangigkeit Dk;l[x; y] = Zero
gesetzt. War allerdings fur einen Knoten z 2 levels sowohl Dk;s[x; z] als auch Ds;l[z; y]
One, oder erfolgte f
ur ein EXOR-Gatter mit nur zwei Eingangssignalen die implizite
N
1
Anwendung von Vereinfachung VEXOR
und Vereinfachung VEXOR
, dann wird in Zeile (26)
die Konstante One gesetzt.
Wenn A nur ein Signal enthalt, braucht kein EXOR-Gatter erzeugt werden. Es kann
allerdings noch notig sein, das Signal aus A zu invertieren. Zur weiteren Referenzierung
wird das Signal in Zeile (27) mit s0 bezeichnet.
Falls A mehrere Eingangssignale enthalt, wird in den Zeilen (28) bis (32) ein EXORGatter erzeugt, mit dem alle Signale aus A zusammengefat werden. Das Ausgangssignal
des EXOR-Gatters wird wieder mit s0 bezeichnet und wird in den folgenden Zeilen bei
Bedarf invertiert.
2 W
urde B [i] mehr als zwei Signale enthalten, gabe es zwei verschiedene Eingange des E X OR-Gatters,
die entweder beide direkt oder beide uber einen Inverter mit PI(i) verbunden waren. Der erste Fall steht
G
in direktem Widerspruch zu der Aussage von Lemma 2.9, da Vereinfachung VEX
nicht anwendbar
OR
ist. Der zweite Fall kann analog bewiesen werden.
2.2. EXOR-BASIERTES SYNTHESEVERFAHREN
61
Wird durch die Variable invert angezeigt, da keine Invertierung notwendig ist, reprasentiert das Signal s0 bereits die Abhangigkeit Dk;l[x; y] und kann in Zeile (33) als Resultat
der Prozedur gesetzt werden. Andernfalls wird in den Zeilen (34) bis (40) noch das zu s0
inverse Signal bestimmt.
Falls das Signal s0 nicht uber einen Inverter mit einem primaren Eingang verbunden ist,
wird dazu in den Zeilen (36) und (37) ein NOT -Gatter erzeugt. Dabei kann das erzeugte NOT -Gatter direkt mit einem primaren Eingang verbunden werden. Dieser Fall tritt
dann auf, wenn es drei Eingangssignale fur das EXOR-Gatter gibt, wovon ein Signal
direkt mit einem primaren Eingang PI(i) verbunden ist, ein Signal uber einen Inverter
mit PI(i) verbunden ist und ein weiteres Signal mit einem anderen primaren Eingang
verbunden ist. In Abbildung 2.13 ist ein Ausschnitt aus einem KFDD dargestellt, bei
dem dieser Fall auftritt. Zusatzlich ist der Teilschaltkreis zur Realisierung des Signals d11;;51
angegeben, wobei alle moglichen Vereinfachungen von Gattern mit konstanten Eingangen
bereits durchgefuhrt wurden. Durch die implizite Anwendung von den Vereinfachungen
N
1
VEXOR
und VEXOR
wurden durch Algorithmus 2.4 weiterhin die beiden linken
Eingange
1
;3
nicht an das dargestellte EXOR-Gatter angeschlossen. Da nur das Signal d1;3 verbleibt,
wird kein EXOR-Gatter
erzeugt. Statt dessen mu das mit dem primaren Eingang PI(1)
1
;3
verbundene Signal d1;3 wegen der impliziten Anwendung der Vereinfachungen noch invertiert werden und das Ausgangssignal des Inverters mu entsprechend Denition 2.7
markiert werden. Dies erfolgt in Zeile (38) von Algorithmus 2.4.
In Zeile (39) wird schlielich noch der Fall behandelt, da Signal s0 bereits uber einen
Inverter mit einem primaren Eingang verbunden ist. In diesem Falle konnte nach erneutem
Invertieren von s0 die Vereinfachung VNOT angewendet werden. Deshalb wird kein Inverter
erzeugt und als Resultat der Prozedur wird direkt der entsprechende primare Eingang
gesetzt.
Beispiel 2.10
Abbildung 2.14 zeigt die durch die geanderte Syntheseprozedur erzeugte Realisierung fur
den Schaltkreis aus Beispiel 2.6. Die Gatter vom Typ C0 und C1 werden nicht mehr
realisiert. Auerdem werden alle gestrichelt gezeichneten Gatter und Leitungen mit der
geanderten Prozedur ComposeDependencies nicht realisiert, da sie durch Vereinfachungen von Gattern mit konstanten Eingangssignalen entfernt werden konnten.
2.2.3 Groenreduktion der KFDDs
Das bisher vorgestellte Syntheseverfahren basiert auf vollstandigen, quasi-reduzierten
KFDDs. Wie bereits in Lemma 1.5 gezeigt wurde, kann bei der Umwandlung eines reduzierten KFDDs K = (G; R; Xn; d) in ein vollstandiges, quasi-reduziertes KFDD die Groe
um Faktor n wachsen.
Im folgenden wird jedoch eine Verallgemeinerung des vorgestellten Syntheseverfahrens
eingefuhrt, das auf KFDDs basiert, in denen fur eine Kante eines reduzierten KFDDs
nicht auf jedem Level ein neuer Knoten eingefugt werden mu. Um die Level zu beschreiben, auf denen bei gegebener Kompositionssequenz neue Knoten eingefugt werden
mussen, wird zunachst der Begri des D-vollstandigen KFDDs eingefuhrt. Es wird gezeigt, wie ein reduziertes KFDD in ein D-vollstandiges KFDD uberfuhrt werden kann.
Fur die baumartige Kompositionssequenz DnB wachst die Groe bei der Umwandlung in
ein DnB -vollstandiges, quasi-reduziertes KFDD hochstens um Faktor dlog(n)e.
62
KAPITEL 2. LOGIKSYNTHESE MIT KFDDS
1,5
d1,1
DT
1,5
X1
pD
S
X2
D
+
1
X2
1
1,3
1,3
2
d1,3
1,3
d1,2
d1,1
1,3
nD
pD
X3
X4
1
X3
1
X4
X3
2
X4
2
3
D
3
X4
1,2
4
1,2
S
X5
1
X5
12
X5
d2,3
1,1
d1,2
d2,3
1,2
2,3
D
D
31
x1
x2
Abbildung 2.13: Vereinfachung, bei der Inverter direkt am primarem Eingang erzeugt wird
Anschlieend wird fur D-vollstandige KFDDs vorgestellt, wie die Abhangigkeiten zwischen
den Knoten bestimmt werden konnen und wie das Syntheseverfahren verallgemeinert
werden kann, um Schaltkreisrealisierungen direkt von D-vollstandigen KFDDs abzuleiten.
2.2.3.1 D-vollstandige KFDDs
In dem verallgemeinerten Syntheseverfahren konnen bei der Berechnung einer Abhangigkeitsmatrix Dk;l = Dk;s Æ Ds;l auch Kanten berucksichtigt werden, die von Level k direkt
nach Level l fuhren. Auf welchen Leveln fur die Kanten eines reduzierten KFDDs durch
inverse Reduktionen neue Knoten eingefugt werden mussen, hangt also auch von der
Kompositionssequenz ab, mit der die Abhangigkeitsmatrizen kombiniert werden.
Denition 2.11
Sei K = (G; R; Xn; d) ein KFDD mit G = (V; E ) und D eine Kompositionssequenz
fur n Boolesche Variablen. K heit D-vollst
andig, falls fur jede Kante (vxk ; vyl ) 2 E
folgende Bedingungen gelten:
(k; l) 2 D
Falls vxk S-aquivalent oder0 D-aquivalent zu vyl ist, dann gilt fur alle in Knoten
vxk eingehende Kanten (vxk0 ; vxk ), da (k0 ; l) 2= D ist.
Durch die erste Bedingung wird sichergestellt, da das KFDD nur solche Kanten enthalt,
die mit dem Syntheseverfahren bei der Kompositionssequenz D berucksichtigt werden
konnen. Durch die zweite Bedingung wird erreicht, da in einem D-vollstandigen KFDD
moglichst wenige S-aquivalente oder D-aquivalente Knoten existieren.
d1,5
2,1= fv1
+
+
1,5
D
1,3
d1,3
1,1
d1,3
1,3
d1,2
1,3
D
d1,3
2,1
d1,3
2,2
d1,3
2,3
+
d3,5
1,1
3,5
2,3
1,2
2,3
2,3
2,3
2,3
2,3
2,3
2,3
d2,3
1,1 d1,2 d1,3 d2,1 d2,2 d2,3 d3,1 d3,2 d3,3
2,3
0
D
0
x1
1
3,5
d3,1
d3,5
2,1
D
+
1,2
1,2
1,2
1,2
1,2
d1,2
1,1 d1,2 d1,3 d2,1 d2,2 d2,3
D
2
+
3,4
3,4
3,4
3,4
3,4
d3,4
1,1 d1,2 d2,1 d2,2 d3,1 d3,2
3,4
0
1
0
0
D
1
x2
2.2. EXOR-BASIERTES SYNTHESEVERFAHREN
4.5
d4,5
1,1 d2,1
4,5
0
1
D
0
x3
x4
63
Abbildung 2.14: Schaltkreisrealisierung unter Berucksichtigung von Vereinfachungen
1,5
d1,1= fv11
64
KAPITEL 2. LOGIKSYNTHESE MIT KFDDS
Beispiel 2.11
Auf der linken Seite von Abbildung 2.15 ist ein reduziertes KFDD dargestellt.
Als nachstes wird das zur Kompositionssequenz D1 = f(1; 2); (2; 3); (3; 4); (2; 4); (1; 4)g
gehorige D1-vollstandige, quasi-reduzierte KFDD gezeigt. Die Kompositionssequenz wird
durch die Pfeile auf der linken Seite des KFDDs veranschaulicht, wobei genau dann ein
Pfeil von Level k nach Level l eingefugt wird, wenn (k; l) 2 D1 ist. Da in dem reduzierten
KFDD die Kante high(v1) von Level 1 nach Level 3 fuhrt, aber das Tupel (1; 3) nicht in
D1 enthalten ist, mu fur das D1-vollstandige KFDD der Knoten u in Level 2 eingefugt
werden. Fur die Kante LOW (v2) von Level 2 nach Level 4 darf jedoch kein neuer Knoten
u0 in Level 3 eingefugt werden, da dieser Knoten in dem D1 -vollstandigen KFDD Daquivalent zu v4 ware und es eine eingehende Kante (v2; u0) von Level 2 nach Level 3
gabe. Da (2; 3) aber in D1 enthalten ist, ware die zweite Bedingung aus Denition 2.11
nicht erfullt.
Fur die Kompositionssequenz D2 = f(1; 2); (2; 3); (3; 4); (1; 3); (1; 4)g ist das zugehorige
D2-vollstandige, quasi-reduzierte KFDD auf der rechten Seite von Abbildung 2.15 dargestellt. Fur dieses KFDD ergibt sich entsprechend, da fur die Kante LOW (v2) des
reduzierten KFDDs der Knoten w in Level 3 eingefugt werden mu und fur die Kante
high(v1 ) kein neuer Knoten eingef
ugt werden darf.
D 1 DT
DT
nD
X1
S
X2
pD
v4
X1
nD
v2
X3
0
v1
D 2 DT
S
v3
X2
pD
1
v5
v2
X3
0
v4
v1
X1
nD
X2
u
v3
S
pD
1
v5
X2
X3
0
w
v4
v1
v2
X3
v3
1
v5
Abbildung 2.15: Reduziertes KFDD und zugehorige D1- und D2-vollstandige, quasireduzierte KFDDs
Analog zu Algorithmus 1.1 kann ein D-vollstandiges, quasi-reduziertes KFDD aus einem
reduzierten KFDD erzeugt werden, ohne isomorphe Knoten zu erzeugen. Die ge1anderte
Prozedur MakeComplete ist in Algorithmus 2.5 gegeben. Die Prozeduren Sequi und
1 zum Einfugen von S-aquivalenten bzw. D-aquivalenten Knoten konnen unverandert
Dequi
aus Algorithmus 1.1 ubernommen werden. Auch die Initialisierungen in den Zeilen (1) bis
(7) der Prozedur MakeComplete sowie das Erzeugen von aquivalenten Knoten auf Level
1 fur jede Wurzel in Zeile (8) bleiben unverandert. Da es fur die auf Level 1 erzeugten
Knoten keine eingehenden Kanten gibt, ist die zweite Bedingung aus Denition 2.11 fur
diese neuen Knoten immer erfullt.
2.2. EXOR-BASIERTES SYNTHESEVERFAHREN
65
Algorithmus 2.5
MakeComplete
( KFDD K = (G; R; Xn ; d), Kompositionssequenz D)
// Berechnet aus dem reduzierten KFDD K ein
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
(15)
(16)
for all v 2 V do
for i = 1 to
D-vollstandiges, quasi-reduziertes KFDD.
n + 1 do equiv [i] = Null od
equiv [index(v)] = v
od
for
i
od
for
for
j
i
= 1 to n do
1 else F = D 1 if di = S then Fi = Sequi
i
equi
= 1 to m do Fj (rj ; rj ; 1) od
= 1 to n 1 do
for all v 2 leveli do
l = index(low(v)); while (i; l) 2= D do l = l 1 od
if l 6= index(low(v)) then Fl (low(v);
(v); l) l = index(high(v)); while (i; l) 2= D do l = l 1 od
if l 6= index(high(v)) then Fl (high(v);
(v); l) low
od
od
high
Danach werden die Knoten wieder levelweise bearbeitet und fur jeden Knoten v 2 leveli
wird in den Zeilen (11) und (12) die LOW-Kante sowie in den Zeilen (13) und (14) die
HIGH-Kante bearbeitet. Dabei wird fur die jeweilige Kante (v; v0) zunachst der maximale
Level l bestimmt, auf dem ein zu v0 aquivalenter Knoten u eingefugt werden kann, um
die Bedingungen aus Denition 2.11 zu erfullen. Falls die Bedingungen nicht bereits fur
die ursprungliche Kante gelten, wird mit Hilfe der entsprechenden inversen Reduktion
ein neuer Knoten u in Level l erzeugt bzw. eine legale Kantenersetzung auf den zu v0
aquivalenten Knoten u 2 levell durchgefuhrt. Die Bedingungen aus Denition 2.11 sind
fur die Kante (v; u) erfullt, da in den Zeilen (11) und (13) der Level l so bestimmt wurde,
da (i; l) 2 D ist und durch die Bedingungen in den Zeilen (12) und (14) sichergestellt
wird, da die Kante (v; v0) nur dann durch (v; u) ersetzt wird, wenn (level(v); level(v0))
nicht in der Kompositionssequenz D enthalten ist. Falls Knoten u erzeugt wurde, dann
werden dessen ausgehende Kanten bei Bearbeitung von levell behandelt. Da mit diesem
Verfahren keine isomorphen Knoten erzeugt werden und nach Beendigung der Prozedur
die Bedingungen aus Denition 2.11 fur alle Kanten und Knoten des modizierten KFDDs
gelten, ist das modizierte KFDD sowohl D-vollstandig als auch quasi-reduziert.
Beispiel 2.12
In Abbildung 2.16 wird fur das KFDD aus Beispiel 1.14 der Ablauf der geanderten Prozedur MakeComplete zum Erzeugen des D-vollstandigen, quasi-reduzierten KFDDs fur
die Kompositionssequenz D = f(1; 2); (1; 3); (1; 4); (1; 3); (1; 4)g veranschaulicht.
Die Zeilen (1) bis (8) werden wie in Beispiel 1.14 abgearbeitet. Auf der linken Seite von
Abbildung 2.16 ist das KFDD nach Einfugen der neuen Knoten v6 und v7 in Zeile (8)
dargestellt. Bei der Bearbeitung der Knoten aus level1 in den Zeilen (10) bis (15) bleiben
alle ausgehenden Kanten unverandert, da (1; 2), (1; 3) und (1; 4) in D enthalten sind und
deshalb die Bedingungen in den Zeilen (12) und (14) nicht erfullt sind. Fur die Kante
low(v2 ) mu ein neuer Knoten eingef
ugt werden, da (2; 4) 2= D ist. In Zeile (11) wird
66
KAPITEL 2. LOGIKSYNTHESE MIT KFDDS
Level 3 zum Einf
ugen eines neuen Knoten bestimmt und der neue Knoten v8 wird mit der
1
Prozedur Sequi eingefugt. Die Kante high(v2 ) bleibt wieder unverandert, da (2; 3) 2 D
ist. Die Knoten in Level 3 brauchen nicht betrachtet werden, da diese nur Kanten zu den
terminalen Knoten aus Level 4 haben konnen und (3; 4) 2 D ist.
D DT
nD
D DT
X1
v1
pD
X1
X2
v6
1
v4
v7
nD
v2
X3
S
X1
X1
v1
1
pD
v3
S
0
v5
X1
X2
X3
1
v8
1
v6
X1
2
v7
3
v2
1
X3
v3
2
v4
1
0
v5
2
Abbildung 2.16: Erzeugen eines D-vollstandigen, quasi-reduzierten KFDDs
Bei der U berfuhrung eines reduzierten KFDDs in ein D-vollstandiges, quasi-reduziertes
KFDD mussen weniger Knoten eingefugt werden als bei der U berfuhrung in einen vollstandiges, quasi-reduziertes KFDD. Deshalb gilt Lemma 1.5 fur beliebige D-vollstandige,
quasi-reduzierte KFDDs. Bei der baumartigen Komposition kann allerdings eine bessere
Schranke fur die Laufzeit und die Groe des resultierenden KFDDs angegeben werden:
Lemma 2.11
Jedes reduzierte KFDD K = (G; R; Xn; d) mit G = (V; E ) kann fur die baumartige Kompositionssequenz DnB in Zeit O(jjK jj dlog(n)e2 ) in ein DnB -vollstandiges,
quasi-reduziertes KFDD mit O(jjK jj dlog(n)e) Knoten uberfuhrt werden, das bis
auf Isomorphie eindeutig bestimmt ist.
Beweis:
Auch in Algorithmus 2.5 wird fur jeden Knoten v des reduzierten KFDDs das Feld equiv
verwendet, um das Erzeugen von isomorphen Knoten in einem Level zu vermeiden. Die
Initialisierung dieser Felder in den Zeilen (1) bis (4) benotigt bereits jV j (n +2) Schritte,
wodurch die Gesamtlaufzeit des Algorithmus nicht mehr durch O(jjK jj dlog(n)e) abgeschatzt werden kann. Mit initialisierungsfreien Feldern (z.B. [41]) kann allerdings ein
Feld beliebiger Groe mit konstanter Zugriszeit verwendet werden, ohne die einzelnen
Elemente des Feldes explizit zu initialisieren. Damit konnen die Zeilen (1) bis (4) in O(jV j)
Schritten bearbeitet werden. Da in einem reduzierten KFDD hochstens 2 terminale Knoten existieren, ist dies nach Denition 1.8 durch O(jjK jj) Schritte beschrankt.
Die Berechnung der anzuwendenden inversen Reduktionen fur jeden Level des KFDDs
in den Zeilen (5) bis (7) benotigt n Schritte und ist damit ebenfalls durch O(jjK jj) beschrankt.
67
2.2. EXOR-BASIERTES SYNTHESEVERFAHREN
Das schrittweise Dekrementieren von l in Zeile (11) und Zeile (13) fuhrt fur jeden betrachteten Knoten zu einer Laufzeit von O(n). Die Laufzeit pro Knoten kann jedoch reduziert
werden, indem die Tupel der Kompositionssequenz D geeignet sortiert werden. Dazu wird
der erste Eintrag der Tupel als primarer Sortierschlussel und der zweite Eintrag als sekundarer Sortierschlussel verwendet. Da eine Kompositionssequenz genau 2n 1 Tupel
enthalt, werden fur das einmalige Sortieren O(nlog(n)) Schritte benotigt. Dies kann durch
O(jjK jj dlog(n)e) abgeschatzt werden. Danach kann das in Zeile (11) und Zeile (13) gesuchte Tupel fur jeden Knoten des DnB -vollstandigen, quasi-reduzierten KFDDs jeweils
durch Binarsuche auf den sortierten Tupeln in O(log(n)) Schritten bestimmt werden.
Um die Groe des DnB -vollstandigen, quasi-reduzierten KFDDs und die Gesamtlaufzeit
fur die Zeilen (9) bis (16) abschatzen zu konnen, mu noch untersucht werden, wieviele
Knoten durch Algorithmus 2.5 fur eine Kante des reduzierten KFDDs eingefugt werden,
die dann wahrend der weiteren Abarbeitung in den Zeilen (9) bis (16) bearbeitet werden
mussen.
Im reduzierten KFDD gibt es genau 2 jVI j Kanten und mit Hilfe der Felder equiv wird das
Erzeugen von isomorphen Knoten in einem Level vermieden. Daher genugt es zu zeigen,
da fur eine beliebige Kante (vxk ; vyl ) des reduzierten KFDDs nur O(dlog(n)e) neue Knoten
eingefugt werden. Dies wird in Lemma A.1 in Anhang A gezeigt. Dabei werden sowohl alle
Level aufgefuhrt, auf denen zu vyl aquivalente Knoten eingefugt werden mussen, als auch
alle Level, auf denen Knoten eingefugt werden mussen, die zu dem terminalen Knoten
mit Label 0 aquivalent sind. Mit Lemma A.1 folgt, da hochstens 2 jVI j O(dlog(n)e)
neue Knoten eingefugt werden. Somit hat das DnB -vollstandige, quasi-reduzierte KFDD
insgesamt hochstens O(jVI j dlog(n)e) O(jjK jj dlog(n)e) Knoten. Da die Bearbeitung
von Zeile (11) und Zeile (13) fur jeden Knoten in dem DnB -vollstandigen, quasi-reduzierten
KFDD O(log(n)) Schritte benotigt, kann die Gesamtlaufzeit durch O(jjK jj dlog(n)e2 )
abgeschatzt werden.
Die Eindeutigkeit folgt wieder analog zu dem Beweis der Eindeutigkeit von reduzierten
KFDDs aus [19].
2.2.3.2 Abhangigkeiten in D-vollstandigen KFDDs
Im folgenden wird gezeigt, wie die Abhangigkeiten zwischen den Knoten direkt aus einem
D-vollstandigen, quasi-reduzierten KFDD bestimmt werden konnen.
Dazu wird eine Kante e0 = (vxk ; vykl+l) eines D-vollstandigen, quasi-reduzierten KFDDs
K 0 mit l > 1 und (k; k + l) 2 D betrachtet. Das KFDD K 0 wird zunachst mit einer
Verallgemeinerung von Algorithmus 1.1 in ein vollstandiges, quasi-reduziertes KFDD K
uberfuhrt3 . Dabei werden die Knoten vyk+1; vyk+2; : : : ; vykl+l 1 eingefugt, so da in K der
Knoten vyki+i aquivalent zu vyki+i+1 (i 2 f1; 2; : : : ; l 1g) ist, und die Kante e0 = (vxk ; vykl+l)
wird durch die Kante e = (vxk ; vyk+1) ersetzt (vgl. Abbildung 2.17). In dem vollstandigen,
+l
quasi-reduzierten KFDD K wird die Abhangigkeit dk;k
x;yl untersucht.
1
2
1
+1
1
3 Algorithmus 1.1 ist nur auf reduzierte KFDDs anwendbar. Er ist aber einfach auf D -vollst
andige,
quasi-reduzierte KFDDs ubertragbar. Dazu mussen lediglich bei der Initialisierung der Felder equiv bereits
existierende, aquivalente Knoten berucksichtigt werden.
68
KAPITEL 2. LOGIKSYNTHESE MIT KFDDS
v kx
Pe
e
1
v k+
y
P k,k+l
x,y
l
1
1,k+l
P k+
y1,yl
v k+2
y
2
1
v k+ly
l- 1
v k+l
y
l
Abbildung 2.17: A quivalente Knoten4 fur die Kante eines D-vollstandigen KFDDs
Lemma 2.12
Sei K = (G; R; Xn; d) ein vollstandiges, quasi-reduziertes KFDD, e = (vxk ; vyk1+1 )
eine Kante und fur i 2 f1; 2; : : : ; l 1g (l > 1) sei der Knoten vyki+i aquivalent zu
vyki++1i+1. Sei weiterhin Pe die Menge aller Pfade von Knoten vxk zu vykl+l , die nicht die
Kante e enthalten. Dann gilt:
+l
dk;k
x;yl =
M
2Pe
!
active() active(e)
Beweis:
k;k+l bezeichnet wieder die Menge aller Pfade von v k zu v k+l . Weiterhin sei P die Menge
Px;y
e
x
yl
l
k;k
+
l
aller Pfade in Px;yl , die die Kante e enthalten. Die Mengen Pe und Pe bilden also eine
k;k+l . Nach Denition 2.3 gilt damit:
disjunkte Zerlegung von Px;y
l
+l
dk;k
x;yl
=
=
M
k;k+l
2Px;y
l
M
2Pe
active()
active()
M
0 2Pe
active(0)
4 Es sind nur S-
aquivalente Knoten abgebildet. Bei D-aquivalenten Knoten wurden alle Pfade uber die
HIGH-Kante zum terminalen Knoten mit Label 0 fuhren.
69
2.2. EXOR-BASIERTES SYNTHESEVERFAHREN
Alle Pfade in Pe beginnen mit Kante e und fuhren dann von Knoten vyk+1 zu vykl+l. Pe
besteht also genau aus den Pfaden, die aus der Konkatenation von e mit allen Pfaden aus
Pyk+1;yl;k+l entstehen. Zusammen mit der Aktivierungsbedingung fur Pfade aus Denition 2.2
+l
kann dk;k
x;yl folgendermaen dargestellt und durch erneute Anwendung von Denition 2.3
weiter umgeformt werden:
M
M
+l =
active()
(active(e) active())
dk;k
x;yl
1
1
2Pe
=
=
M
2Pe
M
2Pe
;k+l
2Pyk1+1
;yl
0
1
M
active() active(e) B
@
;k+l
2Pyk1+1
;yl
active( )C
A
active() active(e) dky+1;yl;k+l
1
Da jeder Knoten vykj+j (j 2 f1; 2; : : : ; l 1g) S-aquivalent bzw. D-aquivalent zu vykj+j+1
ist, folgt mit Denition 1.12 und Abbildung 2.4 da dkyj+;yj;kj +j+1 = 1 ist. Da auerdem alle
von einem Knoten vykj+j ausgehenden Pfade entweder uber vykj+j+1 fuhren oder an dem
terminalen Knoten mit Label 0 enden, ist auch dky+1;yl;k+l = 1.
Um die Abhangigkeiten in einem D-vollstandigen, quasi-reduzierten KFDD zu berechnen,
mussen also keine aquivalenten Knoten eingefugt werden. Da aber die Abhangigkeitsmatrizen aufeinanderfolgender Level nicht mehr alle Kanten des KFDDs berucksichtigen,
wird fur jedes Paar (k; l) 2 D eine direkte Abhangigkeitsmatrix Db k;l erzeugt. Die
Eintrage d^k;lx;y werden entsprechend als direkte Abhangigkeit des Knoten vxk von vyl
bezeichnet, und sie werden analog zu Abbildung 2.4 bestimmt.
Fur aufeinanderfolgende Level entsprechen die Abhangigkeitsmatrizen Dk;k+1 den zugehorigen, direkten Abhangigkeitsmatrizen Db k;k+1. Um fur f(k; l); (k; s); (s; l)g D eine Abhangigkeitsmatrix Dk;l zu berechnen, werden wie bisher die Abhangigkeitsmatrizen
Dk;s und Ds;l durch Parity Matrix Multiplikation verknupft. Allerdings mussen noch die
Kanten berucksichtigt werden, die direkt von Knoten aus Level k zu Knoten aus Level
l fuhren. Wie in Lemma 2.12 gezeigt wurde, mu zur Berechnung der Abhangigkeit dk;l
x;y
k
l
k;l
^
des Knoten vx und vy noch die direkte Abhangigkeit dx;y durch die EXOR-Operation mit
der Abhangigkeit uber die anderen Pfade zwischen Knoten vxk und vyl verknupft werden.
Dazu wird jedes Element der Matrix Dk;s Æ Ds;l mit dem entsprechenden Element aus Db k;l
durch die EXOR-Operation verknupft.
Mit Lemma 2.12 folgt direkt:
+1
+1
+1
1
Lemma 2.13
b k;l eine direkte Abh
Seien Dk;s und Ds;l zwei Abhangigkeitsmatrizen und D
angigkeitsmatrix zu einem D-vollstandigen, quasi-reduzierten KFDD K . Dann wird die
Abhangigkeitsmatrix Dk;l von K folgendermaen berechnet:
Dk;l = Dk;s Æ Ds;l
Db k;l
Dabei wird durch die Verknupfung der Matrizen die komponentenweise EXOROperation auf den einzelnen Matrixelementen beschrieben.
70
KAPITEL 2. LOGIKSYNTHESE MIT KFDDS
Beispiel 2.13
Fur das D-vollstandige, quasi-reduzierte KFDD aus Beispiel 2.12 mit Kompositionssequenz D = f(1; 2); (2; 3); (3; 4); (1; 3); (1; 4)g ergeben sich die direkten Abhangigkeitsmatrizen folgendermaen:
3
2
3
2 3
2
x1
0
0
1
1
2
;3
3
;4
1
;
3
1
;
4
1
;2
b
b
b
b
b
5
4
5
4
4
D = 1 x2
D = x
D = 0 0
D = 05
D = 1
3
0
0 1
0
Die Berechnung der Abhangigkeitsmatrizen erfolgt nach Lemma 2.13 folgendermaen:
b 1;2 Æ D
b 2;3 ) D
b 1;3
D1;3 = (D1;2 Æ D2;3 ) Db 1;3 = (D
02
3
1 2
3 2
3
x1
0
0
x
x
x
1
1
2
= @4 1 5 Æ 1 x2 A 4 0 0 5 = 4 1 x2 5
0
0 1
0 1
D1;4
= (0D21;3 Æ D3;4) 3Db 1;4 = (D11;3 Æ 2Db 3;4)3 Db21;4
3
x1 x1 x2
x
x
x
x
1
1
1
1
2
3
= @4 1 x2 5 Æ x13 A 4 0 5 = 4 1 x2 x3 5
0 1
x3
0
2.2.3.3 Verallgemeinertes Syntheseverfahren
Es bleibt noch zu zeigen, wie mit Hilfe von D-vollstandigen, quasi-reduzierten KFDDs
ein Schaltkreis synthetisiert werden kann. Dazu konnen im wesentlichen die Algorithmen
aus den Abschnitten 2.2.1 und 2.2.2 verwendet werden. Die notwendigen A nderungen und
Erweiterungen werden im folgenden detailliert beschrieben. Bei den Algorithmen werden
dabei auch nur die modizierten Bereiche dargestellt. Eine U bersicht mit den vollstandigen
Algorithmen ist in Anhang B zu nden.
In der Prozedur Synthesis aus Algorithmus 2.1 fur vollstandige, quasi-reduzierte KFDDs
brauchen direkte Abhangigkeiten nur zwischen Knoten aufeinanderfolgender Level berucksichtigt werden. Um in einem D-vollstandigen KFDD alle direkten Abhangigkeiten zu
erfassen, mu jedoch fur jedes Tupel (k; l) 2 D eine direkte Abhangigkeitsmatrix Db k;l
berechnet werden. Diese ist in dem angepaten Algorithmus 2.6 in den Zeilen (6) bis (8)
beschrieben. Die in Zeile (7) verwendete Prozedur DirectDependencyMatrix kann
direkt aus Algorithmus 2.2 ubernommen werden, wobei nur die Abhangigkeiten durch
direkte Abhangigkeiten ersetzt werden mussen. Danach werden in den Zeilen (9) bis (12)
die Abhangigkeitsmatrizen der aufeinanderfolgenden Level initialisiert und analog zu Zeile
(10) aus Algorithmus 2.1 wird die Menge D der zu kombinierenden Abhangigkeitsmatrizen
initialisiert.
Weiterhin mu bei einem D-vollstandigen KFDD noch beachtet werden, da die Reihenfolge zur Kombination der Abhangigkeitsmatrizen bereits durch die Auswahl von D
festgelegt wurde. Deshalb wird in Zeile (14) noch die Bedingung eingefugt, da nur solche Abhangigkeitsmatrizen Dk;s und Ds;l zur weiteren Kombination ausgewahlt werden
durfen, fur die (k; l) 2 D ist.
Um die direkten Abhangigkeiten der Knoten aus Level k von den Knoten aus Level l
zu berucksichtigen, mu noch die Prozedur ParityMatrixMultiplication angepat
71
2.2. EXOR-BASIERTES SYNTHESEVERFAHREN
werden. Bei der geanderten Prozedur wird die Matrix der direkten Abhangigkeiten als
zusatzliches Argument Db k;l eingefuhrt. Dieses Argument mu dem Aufruf in Zeile (15)
hinzugefugt werden. Innerhalb der Prozedur ParityMatrixMultiplication wird die
Matrix Db k;l nur an die Prozedur ComposeDependencies weitergegeben. Ansonsten
werden gegenuber Algorithmus 2.3 keine A nderungen vorgenommen.
Algorithmus 2.6
( KFDD K , Kompositionssequenz D )
Synthesis
// Berechnet aus dem D -vollstandigen, quasi-reduzierten KFDD K einen Schaltkreis SK .
// Zeilen (1) bis (4) wie in Algorithmus 2.1
D = ; // Noch zu kombinierende Abhangigkeitsmatrizen
(...)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
(15)
(16)
(17)
(...)
for all
od
for
(k; l) 2 D do
b k;l = DirectDependencyMatrix ( k, l, K , SK
D
k
=1
)
to n do
b k;k+1
D k;k+1 D
D D [ fD k;k+1 g
=
=
D 6= fD 1;n+1 g
Wahle Dk;s und Ds;l aus D, wobei (k; l) 2 D; D = D n fDk;s; Ds;l g
D k;l =
( K, Dk;s; Ds;l , Db k;l, SK )
k;l
D = D [ fD g
od
while
ParityMatrixMultiplication
od
// Weiter, wie in Algorithmus 2.1 ab Zeile (17)
Auch die Prozedur ComposeDependencies aus Algorithmus 2.4 kann weitestgehend
unverandert ubernommen werden. Sie erhalt ebenfalls die direkten Abhangigkeiten Db k;l
als zusatzliches Argument. Um die direkten Abhangigkeiten zu berucksichtigen, mussen
noch folgende Zeilen nach Zeile (20) von Algorithmus 2.4 eingefugt werden:
if (Db k;l [x; y ] = One) then invert = 1 if (Db k;l [x; y ] 6= One) ^ (Db k;l [x; y ] 6= Zero) then
t = jtag(Db k;l [x; y ])j
if t = 0 then A = A [ fDb k;l[x; y ]g
else B [t] = B [t] [ fDb k;l [x; y ]g; B = B [ ftg Im folgenden wird untersucht, welche Auswirkungen die Anpassung des Syntheseverfahrens an D-vollstandige, quasi-reduzierte KFDDs auf die Qualitat der erzeugten Schaltkreise hat.
Lemma 2.14
Sei K = (G; R; Xn; d) ein quasi-reduziertes KFDD und e = (vxk ; vyl ) eine Kante mit
l > k + 1. Sei weiter K 0 = (G0 ; R0 ; Xn ; d) das quasi-reduzierte KFDD, das aus K
entsteht, indem durch inverse S-Reduktion, inverse D-Reduktion oder legale Kantenersetzung die Kante e durch eine Kante e0 = (vxk ; vzs) mit k < s < l ersetzt wird.
Mit f(k; l); (k; s); (s; l)g D sind die fur die KFDDs K und K 0 erzeugten Teilschaltkreise zur Realisierung der Abhangigkeiten dk;l
x;y gleich, falls die in den Denitionen 2.8, 2.9 und 2.10 vorgestellten Vereinfachungen jeweils durchgefuhrt werden.
72
KAPITEL 2. LOGIKSYNTHESE MIT KFDDS
dk = pD
dk = S
K
K’
Xk x
K
Xk x
e
e’
K’
Xk x
e
e’
dk,l
x,y
+
Xl y
e’
Xs z
Xl y
Xl y
k,l
dx,y
SK *
1
xk
+
dk,l
x,y
SK *
1
1
+
1
xk
k,l
dx,y
SK
1
Xk x
e
Xl y
1
dk,l
x,y
K’
Xk x
Xs z
Xl y
SK *
K
Xk x
Xs z
Xl y
dk = nD
xk
dk,l
x,y
SK
xk
SK
xk
Abbildung 2.18: Vereinfachungen beim Einfugen von aquivalenten Knoten
Beweis:
Es werden zunachst zwei Falle unterschieden:
Fall 1): Beide von vxk ausgehenden Kanten fuhren direkt zu vyl .
In diesem Fall ist die Abhangigkeit dk;lx;y direkt durch die letzte Spalte von Abbildung 2.4
gegeben. Abhangig vom Dekompositionstyp dk besteht der Teilschaltkreis zur Realisierung
der Abhangigkeit des Knoten vxk von Knoten vyl nur aus einem Gatter vom Typ C1 oder
aus einem primaren Eingang, der gegebenenfalls noch invertiert wird. In Abbildung 2.18
ist fur jeden Dekompositionstyp dk (k 2 fS; pD; nDg) der entsprechende Teilschaltkreis
SK zur Realisierung der Abhangigkeit dk;l
x;y in KFDD K dargestellt.
Abhangig davon, ob die in dem KFDD K zu ersetzende Kante e eine LOW-Kante oder
eine HIGH-Kante ist, wird Fall 1) weiter unterschieden:
2.2. EXOR-BASIERTES SYNTHESEVERFAHREN
73
Fall 1.a): e = low(vxk )
In dem KFDD K 0 wurde die Kante e durch inverse S-Reduktion, inverse D-Reduktion oder
legale Kantenersetzung durch die Kante e0 = (vxk ; vzs) ersetzt. Daher mu die Abhangigkeit
5
ds;l
ur die Kante e0 = low(vxk ) und die Kante
z;y = 1 sein . Die Aktivierungsbedingungen f
high(vxk ) ergeben sich in Abh
angigkeit von dem Dekompositionstypen dk wieder aus Abbildung 2.4. Die entsprechenden Teilschaltkreise SK , die sich jeweils aus dem KFDD K 0
ohne Anwendung von Vereinfachungen ergeben wurden, sind ebenfalls in Abbildung 2.18
fur jeden Dekompositionstyp dargestellt. Sie bestehen jeweils aus einem EXOR-Gatter
und einem AND-Gatter, das mit einem Eingangssignal des EXOR-Gatters verbunden
ist. Der verbleibende Eingang des EXOR-Gatters sowie die Eingange des AND-Gatters
sind abhangig vom Dekompositionstyp dk mit Gattern vom Typ C1 bzw. direkt oder uber
einen Inverter mit dem primaren Eingang xk verbunden.
Nach obiger Diskussion ist ds;lz;y = 1 und damit ist unabhangig vom Dekompositionstyp
dk ein Eingang des AND-Gatters direkt mit einem Gatter vom Typ C1 verbunden. Da
Gatter mit konstanten Eingangssignalen nicht realisiert werden, wird entsprechend der
1
Vereinfachung VAND
das andere Eingangssignal des AND-Gatters direkt mit dem EXORGatter verbunden.
N
Fur dk = S ist danach die Vereinfachung VEXOR
auf das EXOR-Gatter anwendbar,
wodurch nur ein Gatter vom Typ C1 ubrigbleibt. Dies entspricht der Realisierung des
Teilschaltkreis SK fur dk = S . Fur dk 2 fpD; nDg resultiert die Vereinfachung des
AND-Gatters darin, da ein Eingang des EXOR-Gatters direkt mit einem Gatter vom
Typ C1 verbunden ist. Auch hier wird das EXOR-Gatter nicht realisiert und entspre1
chend Vereinfachung VEXOR
wird das verbleibende Eingangssignal des EXOR-Gatters
durch ein Gatter vom Typ NOT invertiert. Fur dk = pD entspricht die vereinfachte Realisierung bereits dem zugehorigen Teilschaltkreis SK . Fur dk = nD ware der primare
Eingang jedoch mit einer Inverterkette verbunden, die allerdings durch die Vereinfachung
VNOT entfernt wird, so da auch hier eine Realisierung entsteht, die dem zugehorigen
Teilschaltkreis SK entspricht.
Fall 1.b): e = high(vxk )
Falls die Kante e = high(vxk ) ersetzt wird, unterscheiden sich die aus den resultierenden
KFDDs K 0 erzeugten Teilschaltkreise SK nur dadurch von den Teilschaltkreisen aus Fall
1.a), da die AND-Gatter und die direkten Verbindungen zu dem primaren Eingang bzw.
zu dem Gatter vom Typ C1 mit dem jeweils anderen Eingang des EXOR-Gatters verbunden sind. Auch bei diesen AND-Gattern ist jeweils ein Eingang direkt mit einem Gatter
1
vom Typ C1 verbunden. Nach Vereinfachung VAND
entstehen die gleichen Teilschaltkreise,
1
wie nach Vereinfachung VAND in Fall 1.a). Somit folgt mit der Argumentation aus Fall
1.a), da nach Anwendung aller weiteren Vereinfachungen bei jedem Dekompositionstyp
dk ein Teilschaltkreise erzeugt wird, der dem zugehorigen Teilschaltkreis SK entspricht.
Fall 2): Von vxk fuhrt nur die Kante e direkt zu vyl .
k;l die Menge aller Pfade zwischen den Knoten v k und v l in dem KFDD
Sei wieder Px;y
x
y
k;l ) = fv s ; v s ; : : : ; v s g level die Menge aller Knoten aus P k;l , die
K . Weiter sei Vs (Px;y
s
1 2
w
x;y
in Level s enthalten sind (vgl. Abbildung 2.19). Die Abhangigkeiten, die sich durch die
k;l ) (i = 1; 2; : : : ; w ) ergeben, werden jeweils
Pfade von vxk zu vyl uber Knoten vis 2 Vs(Px;y
durch den Teilschaltkreis fi realisiert. Die Realisierung des Teilschaltkreises SK fur die
5 In den Abbildungen 2.18, 2.19 und 2.20 wird in K jeweils nur der Fall dargestellt, da v z S-
aquivalent
s
zu vyl ist.
0
74
KAPITEL 2. LOGIKSYNTHESE MIT KFDDS
K
K’
Xk x
Xk x
e
Xs
1
Xs
e’
Xs
2
Xs
w
Xl
1
Xs
Xs
2
Xl
y
SK *
f1
f2
Xs
z
w
y
dk,l
x,y
+
fw
ae’
1
k,l
dx,y
SK
f1
+
f2
fw
ae=ae’
Abbildung 2.19: Vereinfachungen beim Einfugen von aquivalenten Knoten
gesamte Abhangigkeit dk;lx;y ergibt sich dann durch Verknupfung der Ausgangssignale von
f1 ; f2 ; : : : ; fw durch ein EXOR-Gatter unter zusatzlicher Berucksichtigung der Aktivierungsbedingung active(e) fur die Kante e = (vxk ; vyl ). Dazu erhalt das EXOR-Gatter ein
weiteres Eingangssignal ae (in Schaltkreis SK von Abbildung 2.19 dargestellt), das die
Aktivierungsbedingung active(e) fur die Kante e = (vxk ; vyl ) realisiert.
In dem KFDD K 0 wurde nur die Kante e durch e0 = (vxk ; vzs) ersetzt. Abhangig davon,
k;l ) enthalten war, wird Fall 2) weiter
ob vzs ein neuer Knoten ist oder bereits in Vs(Px;y
unterschieden:
2.2. EXOR-BASIERTES SYNTHESEVERFAHREN
75
k;l )
Fall 2.a): vzs 2= Vs(Px;y
Die Realisierung von f1; f2; : : : ; fw bleibt gleich. Da sich die Eigenschaft, eine LOW-Kante
oder eine HIGH-Kante zu sein, von e auf e0 ubertragt und auch der Dekompositionstyp
dk fur Level k unverandert bleibt, ubertragt sich die Aktivierungsbedingung von e auf e0 ,
d.h. active(e) = active(e0). Auerdem wurde e0 durch inverse S-Reduktion oder inverse
D-Reduktion eingefugt, bzw. durch legale Kantenersetzung, falls der Knoten vzs bereits
existiert, es in K aber keinen Pfad von vxk zu vzs gibt. In jedem Fall mu die Abhangigkeit
ds;l
urde sich fur die Realisierung der Abhangigkeit dk;lx;y zunachst Teilz;y = 1 sein. Damit w
schaltkreis SK ergeben. Die Abhangigkeit, die sich durch die Pfade von vxk zu vyl uber
Knoten vzs ergibt, wurde dabei durch ein AND-Gatter realisiert, bei dem ein Eingang
direkt mit einem Gatter vom Typ C1 verbunden ist. Da Gatter mit konstanten Ein1
gangssignalen nicht realisiert werden, wird entsprechend der Vereinfachung VAND
direkt
0
0
das andere Eingangssignal a des AND-Gatters zur Realisierung von active(e ) an das
EXOR-Gatter angeschlossen. Damit ergibt sich fur beide KFDDs K und K 0 die gleiche
Schaltkreisrealisierung SK , wobei fur active(e) = active(e0 ) = 1 noch die Vereinfachung
1
VEXOR
auf Schaltkreis SK angewendet werden mu.
k;l )
Fall 2.b): vzs 2 Vs(Px;y
Da Knoten vzs bereits existiert, wurde die Kante e0 durch legale Kantenersetzung eingefugt.
Damit mu wieder Abhangigkeit ds;lz;y = 1 sein.
Abhangig davon, ob die zweite von vxk ausgehende Kante direkt zu vzs fuhrt oder ob vzs
von vxk nur uber Pfade mit einer Lange von mindestens 2 erreichbar ist, wird dieser Fall
noch einmal unterschieden:
Fall 2.b.i): In K fuhrt die zweite von vxk ausgehende Kante direkt zu vzs.
k;l ) nur aus dem einen Knoten v s . Abh
In diesem Fall besteht die Menge Vs(Px;y
angig von
z
dem Dekompositionstyp dk und ob e eine LOW-Kante oder eine HIGH-Kante ist, ergeben
sich wieder unterschiedliche Realisierungen der entsprechenden Teilschaltkreise. Fur jeden
Dekompositionstyp dk (k 2 fS; pD; nDg) sind die Falle, in denen e eine HIGH-Kante ist,
in Abbildung 2.20 dargestellt. Dabei entspricht der fur das KFDD K zunachst erzeugte
Teilschaltkreis SK dem Teilschaltkreis fur das KFDD K 0 aus Fall 1.a). Entsprechend
konnen die gleichen Vereinfachungen durchgefuhrt werden und es resultiert der gleiche
Teilschaltkreis SK .
Daher mussen nur noch die Schaltkreise untersucht werden, die in dem aktuellen Fall
aus den KFDDs K 0 erzeugt werden, nachdem die Kante e durch legale Kantenersetzung
durch die Kante e0 ersetzt wurde. In allen Fallen fuhren in dem KFDD K 0 beide von vxk
ausgehenden Kanten direkt zu vzs. Also besteht die Schaltkreisrealisierung SK 0 fur das
KFDD K 0 zunachst jeweils nur aus einem AND-Gatter mit zwei Eingangssignalen. Das
erste Eingangssignal reprasentiert die Abhangigkeit dk;s
angigkeit vom Dekomx;z , die in Abh
positionstyp dk wieder durch die letzte Spalte von Abbildung 2.4 gegeben ist. Die Realisierung des an das erste Eingangssignal des AND-Gatters angeschlossenen Teilschaltkreis
entspricht bereits genau dem Schaltkreis SK .
Da die Kante e0 durch legale Kantenersetzung eingefugt wurde, mu wieder die Abhangigkeit ds;lz;y = 1 sein. Das zweite Eingangssignal des AND-Gatters ist also mit einem Gatter
1
vom Typ C1 verbunden und somit ist Vereinfachung VAND
anwendbar. Dadurch wird das
0
AND-Gatter entfernt und es bleibt fur das KFDD K auch in dem aktuellen Fall bei allen
Dekompositionstypen genau der in Abbildung 2.20 dargestellte Schaltkreis SK ubrig.
Der Fall, da e eine LOW-Kante ist, folgt analog, wobei in dem Schaltkreis SK wieder
die Eingangssignale des EXOR-Gatters vertauscht werden. Das KFDD K 0 und damit der
Teilschaltkreis SK 0 bleibt bei jedem Dekompositionstyp gleich.
76
KAPITEL 2. LOGIKSYNTHESE MIT KFDDS
dk = pD
dk = S
K
K
K’
Xk x
Xk x
Xs z
Xl y
k,l
k,l
d
SK * x,y
SK’
+
1
1
xk
dx,y
e’
Xl y
k,l
k,l
SK’
+
1
1
1
k,l
xk
k,l
dx,y
SK
1
Xs z
Xl y
Xl y
k,l
k,l
d
SK * x,y
SK’
+
1
xk
dx,y
dx,y
e’
Xs z
Xl y
d
SK * x,y
Xk x
e
Xs z
Xs z
Xl y
Xk x
Xk x
e
Xs z
K’
K
K’
Xk x
e’
e
dk = nD
1
1
1
xk
xk
dk,l
x,y
SK
xk
dx,y
SK
xk
Abbildung 2.20: Vereinfachungen beim Einfugen von aquivalenten Knoten
Fall 2.b.ii): In K fuhrt die zweite von vxk ausgehende Kante nicht direkt zu vzs.
In diesem Fall ergibt sich die Gleichheit der aus K und K 0 erzeugten Schaltkreise ahnlich
wie in Fall 2.a). Da die Kante e0 durch legale Kantenersetzung eingefugt wurde, mu die
Abhangigkeit ds;lz;y = 1 gewesen sein.
Deshalb wird in dem Teilschaltkreis fz zur Realisierung der Abhangigkeit, die sich in
k;l ) ergeben, die
dem KFDD K durch die Pfade von vxk zu vyl uber Knoten vzs 2 Vs(Px;y
1
Vereinfachung VAND implizit angewendet. Das Ausgangssignal von fz entspricht also
der Abhangigkeit dk;s
ur die Aktivierungsbex;z und wird zusammen mit dem Signal ae f
dingung der Kante e und den Ausgangssignalen der anderen Teilschaltkreise fi (i =
1; 2; : : : ; z 1; z + 1; : : : ; w) durch ein EXOR-Gatter verknupft, dessen Ausgangssignal
die Abhangigkeit dk;lx;y darstellt.
In dem KFDD K 0 fuhrt neben den Pfaden, die bereits in K von vxk zu vzs fuhrten, auch
noch die Kante e0 zu vzs. Der Teilschaltkreis zur Realisierung von dk;s
x;z besteht also aus
k;l
der EXOR-Verknupfung der Abhangigkeit dx;z , und dem Signal fur die Aktivierungsbedingung der Kante e. Da ds;lz;y = 1 ist, wird fur den Teilschaltkreis zur Realisierung
1
der Abhangigkeit von vxk zu vyk uber vzs implizit die Vereinfachung VAND
durchgefuhrt, so
da auch hier das Ausgangssignal von fz , das Signal ae und die Ausgangssignale von fi
(i = 1; 2; : : : ; z 1; z + 1; : : : ; w) durch ein EXOR-Gatter zu dk;lx;y verknupft werden.
2.3. EXPERIMENTELLE ERGEBNISSE
77
Bisher wurde gezeigt, da jeweils bei inversen Reduktionen bzw. legalen Kantenersetzungen, wie sie bei der U berfuhrung eines D-vollstandigen, quasi-reduzierten KFDDs in
das entsprechende vollstandige, quasi-reduzierte KFDD durchgefuhrt werden mussen, die
Realisierung des aus dem jeweiligen KFDD erzeugten Schaltkreis gleich bleibt.
Damit kann der folgende Satz uber die Gleichheit der Schaltkreise gezeigt werden, die
aus einem D-vollstandigen, quasi-reduzierten KFDD und dem zugehorigen vollstandigen,
quasi-reduzierten KFDD synthetisiert werden.
Satz 2.15
Sei K = (G; R; Xn; d) das D-vollstandige, quasi-reduzierte KFDD fur eine Boolesche Funktion f 2 IBn;m und K 0 = (G0 ; R0 ; Xn; d) das vollstandige, quasi-reduzierte
KFDD fur f . Weiterhin sei SK der Schaltkreis, der mit dem in diesem Abschnitt
vorgestellten Syntheseverfahren aus K erzeugt wird, und sei SK 0 der Schaltkreis, der
mit dem in Abschnitt 2.2.2.5 vorgestellten Syntheseverfahren aus K 0 erzeugt wird.
Dann sind die Schaltkreise SK und SK 0 gleich.
Beweis:
Wie bereits in Abschnitt 2.2.3.2 diskutiert wurde, kann Algorithmus 1.1 auch auf Dvollstandige, quasi-reduzierte KFDDs ubertragen werden. Es genugt also die wiederholte Anwendung von inversen Reduktionen bzw. legalen Kantenersetzungen, um das Dvollstandige, quasi-reduzierte KFDD K in das vollstandige, quasi-reduzierte KFDD K 0
zu uberfuhren Damit folgt die Aussage des Satzes durch wiederholte Anwendung von
Lemma 2.14.
Aus Satz 2.15 ergibt sich, da alle Aussagen fur Schaltkreise, welche aus vollstandigen,
quasi-reduzierten KFDDs synthetisiert werden, genau dann gelten, wenn sie fur Schaltkreise gelten, welche aus D-vollstandigen, quasi-reduzierten KFDDs synthetisiert werden.
Es genugt also, jeweils Schaltkreise eines dieser beiden Typen zu untersuchen.
2.3
Experimentelle Ergebnisse
Um die praktische Anwendbarkeit und die EÆzienz des Verfahrens zur Synthese von
Schaltkreisen aus DDs uberprufen zu konnen, wurden die vorgestellten Algorithmen implementiert. Im folgenden werden die technischen Randbedingungen fur die Durchfuhrung
von Experimenten beschrieben. Anschlieend werden die erzielten Resultate fur die verwendeten DDs und die daraus synthetisierten Schaltkreise prasentiert.
Alle Experimente wurden auf einer SUN Workstation Ultra 1 Modell 170 mit 128 MB
Hauptspeicher durchgefuhrt. Die Implementierung erfolgte in C++. Als Basis fur die Darstellung und Manipulation von DDs wurde das Software-Package PUMA [33] verwendet,
das im Rahmen von [34] entwickelt wurde. Auerdem wurden Erweiterungen an diesem
Software-Package zur Darstellung vollstandiger und D-vollstandiger DDs sowie grundlegende Algorithmen fur die Synthese aus [24] ubernommen. Fur die Reprasentation von
Schaltkreisen wurde die Datenstruktur test circ [37] eingesetzt.
Zur Durchfuhrung der Experimente wurden Beispielschaltkreise verwendet, die sich im
Bereich der Schaltkreissynthese etabliert haben [11, 54]. Von den verfugbaren Beispielschaltkreisen wurden nur diese berucksichtigt, deren Darstellung als reduzierte BDDs mit
komplementierenden Kanten [10] jeweils mindestens 25 Knoten benotigt und fur die alle
78
KAPITEL 2. LOGIKSYNTHESE MIT KFDDS
Arten von DDs mit den zur Verfugung stehenden Ressourcen erzeugt werden konnten.
Bei den nicht betrachteten DDs war es zumeist nicht moglich, die vollstandigen, quasireduzierten DDs zu erzeugen.
2.3.1 Erzeugte Decision Diagrams
In Tabelle 2.1 wird zunachst ein Vergleich von BDDs und KFDDs durchgefuhrt. In der ersten Spalte wird der Name des Beispielschaltkreises angegeben. In der zweiten und dritten
Spalte wird die Anzahl der primaren Eingange jPinj bzw. der primaren Ausgange jPoutj
des Beispielschaltkreises angegeben. Darauf folgen je zwei Spalten mit den Resultaten fur
das Erzeugen eines reduzierten BDDs und eines reduzierten KFDDs bei denen jeweils
komplementierende Kanten verwendet wurden.
Dabei wird jeweils in der ersten der beiden Spalten die Groe des DDs angegeben, die
durch die Anzahl der inneren Knoten bestimmt wird. Da die Groe von DDs sehr stark
von der Variablenordnung und bei KFDDs zusatzlich von der DTL abhangt, wurde in
den Experimenten nicht die naturliche Variablenordnung verwendet, sondern die Groe
der DDs jeweils minimiert. Da die Bestimmung einer optimalen Variablenordnung bereits
fur BDDs NP-hart ist [9], wurde die Variablenordnung und DTL durch eine Heuristik
bestimmt, die auf dynamischer Vertauschung benachbarter Variablen [28] und dem eÆzienten Wechsel des Dekompositionstyps einer Variablen [34, 20] basieren. Bei der klassischen Anwendung von Sifting [45, 23, 34, 20] wird allerdings nur versucht, eine bereits
berechnete Variablenordnung und DTL weiter zu minimieren. Dabei besteht die Gefahr,
als Losung ein lokales Minimum zu erhalten. Um dieses Risiko abzuschwachen, wurde
in den Experimenten zweimal die bereits minimierte Variablenordnung gezielt verandert,
wobei die Auswirkungen auf die Groe des DDs nicht berucksichtigt wurden. Anschlieend wurde die Groe des DDs erneut durch wiederholte Anwendung von Sifting solange
minimiert, bis die Groe des DDs durch eine Anwendung von Sifting nur noch um weniger
als 3% reduziert wurde. Dabei wurde in den meisten Fallen ein anderes lokales Minimum
erreicht. Die Variablenordnung und DTL, die wahrend dem gesamten Vorgang in dem
kleinsten DD resultierte, wurde dann fur die Durchfuhrung der Experimente verwendet.
Bei der gesamten verwendeten Heuristik wurde darauf geachtet, da keine Entscheidungen zufallsbasiert getroen werden, so da fur einen gegebenen Beispielschaltkreis in allen
Experimenten immer die gleiche Variablenordnung und DTL berechnet wurde.
Es zeigt sich, da mit der verwendeten Heuristik die Groe der erzeugten KFDDs fur
alle Beispielschaltkreise auer vg2 kleiner oder gleich der Groe der erzeugten BDDs ist.
Fur die Beispielschaltkreise pcler8 und t481 ist das jeweilige KFDD sogar um die Halfte
kleiner als das BDD. Insgesamt ist die Summe der inneren Knoten fur die BDDs aller
Beispielschaltkreise 4147, wahrend fur KFDDs eine Einsparung von uber 16% auf 3464
innere Knoten erreicht wird. Daher werden im folgenden nur noch KFDDs betrachtet.
In der jeweils zweiten Spalte wird die CPU-Zeit in Sekunden angegeben, die insgesamt
zum Erzeugen des DDs benotigt wurde. Diese Zeit beinhaltet das Einlesen der Schaltkreisbeschreibung sowie das Erzeugen des DDs mit der Berechnung der Variablenordnung und
der DTL. Da bei BDDs nur die Shannon-Dekomposition angewendet werden kann, braucht
nur die Variablenordnung, aber keine DTL optimiert werden. Der zusatzliche Aufwand
zur Optimierung der DTL bei KFDDs ist an den Laufzeiten deutlich zu erkennen. Fur jeden Beispielschaltkreis wurde fur das Erzeugen des KFDDs mehr Zeit benotigt als fur das
Erzeugen des BDDs. Insgesamt wurden fur alle Beispielschaltkreise 27,9 Sekunden zum
Berechnen der BDDs benotigt, wahrend die Berechnung der KFDDs mit 66,1 Sekunden
2.3. EXPERIMENTELLE ERGEBNISSE
79
BDD
KFDD
Name jPinj jPoutj jjK jj CPU jjK jj CPU
5xp1
7 10 41 0,2 28 0,3
add6
12
7 28 0,5 24 0,9
addm4
9
8 163 0,5 125 0,7
alu2
10
6 153 0,5 130 0,7
alu4
14
8 350 1,1 311 1,9
apex6 135 99 541 7,7 402 17,7
apex7
49 37 239 1,5 184 4,8
cc
21 20 45 0,3 39 0,5
cm163a 16
5 25 0,3 21 0,3
cm85a
11
3 27 0,3 20 0,4
cmb
16
4 27 0,3 27 0,3
co14
14
1 26 0,2 26 0,3
dist
8
5 120 0,4 120 0,6
f51m
8
8 38 0,3 26 0,3
frg1
28
3 77 0,6 77 1,3
gary
15 11 293 0,8 291 1,8
in7
26 10 78 0,6 64 1,4
m181
15
9 54 0,3 53 0,4
misg
56 23 70 0,4 70 1,0
mlp4
8
8 134 0,4 107 0,6
my adder 33 17 81 1,1 65 12,1
pcle
19
9 41 0,3 27 0,6
pcler8
27 17 85 0,5 42 0,7
rd73
7
3 30 0,3 21 0,3
rd84
8
4 41 0,3 29 0,4
sao2
10
4 80 0,4 78 0,5
shift
19 16 61 1,4 59 0,5
squar5
5
8 32 0,3 26 0,3
t481
16
1 34 1,2 16 2,4
tial
14
8 571 1,4 440 4,0
vda
17 39 483 1,9 436 4,1
vg2
25 P 8 79 1,6 84 4,0
4147 27,9 3468 66,1
Tabelle 2.1: Groe von reduzierten BDDs und KFDDs mit komplementierenden Kanten
80
KAPITEL 2. LOGIKSYNTHESE MIT KFDDS
mehr als doppelt soviel CPU-Zeit benotigte. Auallig sind die hohen Laufzeiten fur die
Beispielschaltkreise apex6 und my adder. Bei apex6 ist die hohe Laufzeit darauf zuruckzufuhren, da die Laufzeit fur eine Anwendung von Sifting quadratisch mit der Anzahl der
primaren Eingange jPinj wachst [34] und dieser Beispielschaltkreis 135 primare Eingange
besitzt. Bei dem Beispielschaltkreis my adder ergab eine genauere Analyse, da bei der
Berechnung des KFDD die verwendete Heuristik zu einer sehr haugen Wiederholung von
Sifting fuhrte.
Das primare Ziel der vorgestellten Heuristik ist jedoch nicht die Optimierung der Laufzeit,
sondern DDs mit moglichst geringer Groe zu erzeugen, um eine gute Ausgangsbasis fur
das darauf aufbauende Syntheseverfahren zu haben. Zur Beurteilung der Qualitat dient
Tabelle 2.2, in der die Groe der erzeugten KFDDs mit Resultaten aus anderen Arbeiten
verglichen wird.
Die ersten drei Spalten geben wie in Tabelle 2.1 Informationen zu dem Beispielschaltkreis.
In der vierten Spalte wird die Groe des KFDDs wiederholt, die aus der vorgestellten
Heuristik resultiert. In den letzten drei Spalten sind die Groen der KFDDs aus [23]
und [20] sowie die kleinste Groe aus allen Experimenten von [22] aufgefuhrt, sofern in den
entsprechenden Arbeiten die hier betrachteten Beispielschaltkreise untersucht wurden. Bei
den verfugbaren Beispielschaltkreisen sind die Ergebnisse unserer Heuristik oft am besten
und bis auf vg2 hochstens um einen Knoten groer als das Minimum uber alle Ergebnisse
der anderen Arbeiten.
In Tabelle 2.3 wird die Groe von reduzierten, vollstandigen und D-vollstandigen KFDDs
verglichen. Fur jeden Typ von KFDDs wird wieder die Groe und die Laufzeit angegeben.
In den Spalten fur reduzierte KFDDs werden die Ergebnisse aus Tabelle 2.1 fur reduzierte
KFDDs mit komplementierenden Kanten wiederholt. Die Spalten fur vollstandige KFDDs
geben die Resultate fur die KFDDs an, die aus den reduzierten KFDDs erzeugt wurden, indem zunachst die komplementierenden Kanten entfernt wurden und anschlieend mit der
Prozedur MakeComplete aus Algorithmus 1.1 vollstandige, quasi-reduzierte KFDDs
erzeugt wurden. Fur D-vollstandige KFDDs wurden die Experimente fur die kaskadierte
und die baumartige Kompositionssequenz (vgl. Denition 2.6) durchgefuhrt. Auch hierzu
wurden aus den reduzierten KFDDs zunachst die komplementierenden Kanten entfernt.
Anschlieend wurde jedoch die Prozedur MakeComplete aus Algorithmus 2.5 verwendet, um fur die jeweilige Kompositionssequenz die entsprechenden D-vollstandigen, quasireduzierten KFDDs zu erzeugen. Fur alle Typen ist das Erzeugen des reduzierten KFDDs
mit der Optimierung der Variablenordnung und der DTL in der angegebenen Laufzeit
enthalten.
Die Groe der vollstandigen KFDDs wachst im Vergleich zu den reduzierten KFDDs
mit komplementierenden Kanten stark an. Auch hier ist zu beobachten, da der Eekt
bei den Beispielschaltkreisen mit vielen primaren Eingangen besonders deutlich ist. Fur
apex6 mit 135 primaren Eingangen steigt die Groe von 402 um mehr als das 27-fache
auf 11032 Knoten fur das vollstandige, quasi-reduzierte KFDD an. Insgesamt werden fur
die Darstellung als vollstandige, quasi-reduzierte KFDDs etwa sechsmal mehr Knoten
benotigt.
Fur D-vollstandige KFDDs ist der Anstieg der Groe moderater. Jedoch ist auch hier der
Anstieg fur den Schaltkreis apex6 mit der groen Anzahl primarer Eingange wieder am
groten. Insgesamt wird bei der kaskadierten Kompositionssequenz noch etwas mehr als
die vierfache Anzahl innerer Knoten benotigt, und bei der baumartigen Kompositionssequenz wird weniger als die doppelte Anzahl innerer Knoten benotigt.
81
2.3. EXPERIMENTELLE ERGEBNISSE
Name jPinj jPoutj
5xp1
7 10
add6
12
7
addm4
9
8
alu2
10
6
alu4
14
8
apex6 135 99
apex7
49 37
cc
21 20
cm163a 16
5
cm85a
11
3
cmb
16
4
co14
14
1
dist
8
5
f51m
8
8
frg1
28
3
gary
15 11
in7
26 10
m181
15
9
misg
56 23
mlp4
8
8
my adder 33 17
pcle
19
9
pcler8
27 17
rd73
7
3
rd84
8
4
sao2
10
4
shift
19 16
squar5
5
8
t481
16
1
tial
14
8
vda
17 39
vg2
25
8
Tabelle 2.2: Verschiedene Heuristiken fur
Kanten
KFDD
jjK jj [23] [20] [22]
28 | | |
24 44 | 40
125 | | 146
130 | | |
311 | | 1435
402 | | |
184 266 | |
39 | 38 |
21 | | |
20 | | |
27 | | |
26 | | |
120 | | |
26 25 | 43
77 | 77 |
291 | | |
64 | | |
53 | | |
70 | | |
107 106 | 113
65 | | |
27 | | |
42 | | |
21 | | 21
29 | | |
78 | | |
59 | | |
26 | | |
16 | | |
440 479 | 1441
436 | | |
84 | 76 |
reduzierte KFDDs mit komplementierenden
82
KAPITEL 2. LOGIKSYNTHESE MIT KFDDS
KFDD
reduziert vollstandig
D-vollstandig
kaskadiert baumartig
Name jPinj jPoutj jjK jj CPU jjK jj CPU jjK jj CPU jjK jj CPU
5xp1
7 10 28 0,3
74 0,4
41 0,3 51 0,3
add6
12
7 24 0,9
85 0,9
34 0,9 48 0,9
addm4
9
8 125 0,7 186 0,7 171 0,7 156 0,7
alu2
10
6 130 0,7 234 0,8 210 0,8 204 0,8
alu4
14
8 311 1,9 559 2,0 527 2,0 444 1,9
apex6 135 99 402 17,7 11032 17,9 7577 17,7 1673 17,7
apex7
49 37 184 4,8 1556 4,8 1292 4,8 544 4,8
cc
21 20 39 0,5 357 0,5 181 0,5 130 0,5
cm163a 16
5 21 0,3 115 0,3
68 0,3 58 0,3
cm85a
11
3 20 0,4
53 0,4
32 0,4 40 0,4
cmb
16
4 27 0,3
85 0,3
51 0,3 49 0,3
co14
14
1 26 0,3
39 0,3
27 0,3 33 0,3
dist
8
5 120 0,6 179 0,6 168 0,6 165 0,6
f51m
8
8 26 0,3
80 0,3
41 0,3 48 0,3
frg1
28
3 77 1,3 400 1,3 345 1,3 221 1,3
gary
15 11 291 1,8 471 1,8 445 1,8 372 1,8
in7
26 10 64 1,4 328 1,4 235 1,4 174 1,4
m181
15
9 53 0,4 210 0,4 164 0,4 117 0,4
misg
56 23 70 1,0 922 1,0 365 1,0 222 1,0
mlp4
8
8 107 0,6 164 0,6 147 0,6 139 0,6
my adder 33 17 65 12,1 405 12,1 101 12,1 161 12,1
pcle
19
9 27 0,6 148 0,6
79 0,6 68 0,6
pcler8
27 17 42 0,7 368 0,7 190 0,7 111 0,7
rd73
7
3 21 0,3
42 0,3
31 0,3 35 0,3
rd84
8
4 29 0,4
56 0,4
43 0,4 47 0,4
sao2
10
4 78 0,5 109 0,6
93 0,5 99 0,6
shift
19 16 59 0,5 279 0,5 252 0,5 142 0,5
squar5
5
8 26 0,3
47 0,3
36 0,3 39 0,3
t481
16
1 16 2,4
74 2,4
50 2,4 42 2,4
tial
14
8 440 4,0 607 4,0 578 4,0 517 4,1
vda
17 39 436 4,1 1612 4,4 1594 4,4 843 4,3
vg2
25 P 8 84 4,0 244 4,0 188 4,0 159 4,0
3468 66,1 21120 67,0 15356 66,6 7151 66,6
Tabelle 2.3: Groe von reduzierten, vollstandigen und D-vollstandigen KFDDs
2.3. EXPERIMENTELLE ERGEBNISSE
83
Aus dem Vergleich der Laufzeiten ergibt sich, da der Aufwand fur das U berfuhren der reduzierten KFDDs mit komplementierenden Kanten in die vollstandigen bzw. D-vollstandigen KFDDs nur einen vernachlassigbar geringen Einu hat. Da die geringe Groe der
KFDDs in weniger Speicherplatzbedarf resultiert und nach Satz 2.15 die aus vollstandigen
und D-vollstandigen synthetisierten Schaltkreise gleich sind, werden bei den Experimenten zum Erzeugen der Schaltkreise nur D-vollstandige KFDDs verwendet.
Fur alle Typen von KFDDs wurde die Variablenordnung und DTL auf Basis der reduzierten KFDDs mit komplementierenden Kanten optimiert. Diese Variablenordnung und
DTL wird wahrend dem Erzeugen der vollstandigen und D-vollstandigen KFDDs und
damit auch fur die darauf aufbauende Synthese beibehalten. Grundsatzlich kann aber fur
die vollstandigen und D-vollstandigen KFDDs eine andere Variablenordnung und DTL
in einer gunstigeren Groe resultieren. In [24] wurden bereits weitere Heuristiken fur die
Optimierung der Variablenordnung und DTL untersucht, die nicht nur auf der Groe der
reduzierten KFDDs basieren. Da die Ergebnisse jedoch nicht zu einer allgemein besseren
Strategie fuhrten, wird hier nur die oben beschriebene Heuristik auf Basis der Groe der
reduzierten KFDDs eingesetzt.
2.3.2 Synthetisierte Schaltkreise
Basierend auf den im letzten Abschnitt beschriebenen KFDDs wurde das verallgemeinerte
Syntheseverfahren fur D-vollstandige KFDDs (vgl. Anhang B) angewendet. Die Ergebnisse sind in Tabelle 2.4 zusammengestellt, wobei die Informationen fur die kaskadierte
und die baumartige Kompositionssequenz in jeweils vier Spalten prasentiert werden.
In der jeweils ersten Spalte wird die Groe des entsprechenden D-vollstandigen KFDDs
wiederholt. In den folgenden beiden Spalten wird jeweils die Groe und die Tiefe des synthetisierten Schaltkreises entsprechend Denition 1.5 angegeben. Der Einu von Gattern
mit mehreren Eingangen auf die Groe und die Tiefe wurde dadurch berucksichtigt, da
fur die Realisierung der synthetisierten Schaltkreise nur Gatter mit 2 Eingangen verwendet wurden. Bei der Berechnung der Tiefe wurde auerdem die zusatzliche Verzogerung
durch Fanoutzweige mit d = 0; 2 berucksichtigt. In der jeweils vierten Spalte wird die
CPU-Zeit in Sekunden angegeben, die fur die Synthese des Schaltkreises bei gegebenem
D-vollstandigem KFDD benotigt wurde.
Die Groe der synthetisierten Schaltkreise ist bei der baumartigen Kompositionssequenz
in allen Fallen groer als bei der kaskadierten Kompositionssequenz, obwohl die Groe der
entsprechenden KFDDs in vielen Fallen kleiner ist. Dies lat sich dadurch erklaren, da
bei der kaskadierten Kompositionssequenz in jedem Kompositionsschritt eine Abhangigkeitsmatrix aufeinanderfolgender Level beteiligt ist. Nach Bemerkung 2.1 haben diese
Abhangigkeitsmatrizen in jeder Zeile hochstens zwei von 0 verschiedene Eintrage. Damit
wird die Bedingung aus Zeile (6) der Prozedur ComposeDependencies in Algorithmus B.4 in den meisten Fallen nicht erfullt. Dies hat wiederum zur Folge, da nur wenige
Eingangssignale erzeugt werden, fur die in Zeile (29) ein EXOR-Gatter mit entsprechend geringem Eingangsgrad erzeugt wird. Im Gegensatz dazu, werden bei der baumartigen Kompositionssequenz mehr EXOR-Gatter mit hohem Eingangsgrad erzeugt. Diese
EXOR-Gatter werden nach Denition 1.5 entsprechend hoch bewertet. Insgesamt ist die
Groe aller synthetisierten Schaltkreise bei der baumartigen Kompositionssequenz etwa
doppelt so gro wie bei der kaskadierten Kompositionssequenz.
Da bei der baumartigen Kompositionssequenz die Klammerungstiefe nur logarithmisch
mit der Anzahl der primaren Eingange wachst (vgl. Abbildung 2.6), ist insbesondere bei
84
KAPITEL 2. LOGIKSYNTHESE MIT KFDDS
KFDD
D-vollstandig
kaskadiert
baumartig
Name jPinj jjK jj jjSK jjd d (SK ) CPU jjK jj jjSK jjd d (SK ) CPU
5xp1
7
41
69
16,2 0,1 51
119
14,4 0,1
add6
12
34
56
26,0 0,1 48
117
15,2 0,1
addm4
9 171
268
27,6 0,1 156
459
30,2 0,2
alu2
10 210
325
29,2 0,1 204
509
36,8 0,3
alu4
14 527
712
45,8 0,3 444 1157
56,0 0,9
apex6 135 7577
789
38,8 1,8 1673 1068
32,0 5,0
apex7
49 1292
342
35,6 0,3 544
716
25,2 0,7
cc
21 181
61
11,8 0,1 130
74
11,0 0,1
cm163a 16
68
42
12,6 0,1 58
43
8,8 0,1
cm85a
11
32
41
16,8 0,1 40
80
13,6 0,1
cmb
16
51
61
16,8 0,1 49
61
10,0 0,1
co14
14
27
65
32,8 0,1 33
72
11,4 0,1
dist
8 168
380
29,4 0,1 165
540
36,8 0,2
f51m
8
41
78
21,0 0,1 48
114
16,4 0,1
frg1
28 345
303
52,0 0,1 221
555
27,2 0,2
gary
15 445
602
41,6 0,2 372
865
38,6 0,6
in7
26 235
141
30,8 0,1 174
236
22,2 0,2
m181
15 164
123
17,8 0,1 117
139
12,2 0,1
misg
56 365
140
31,8 0,1 222
188
19,4 0,2
mlp4
8 147
237
24,4 0,1 139
336
29,6 0,2
my adder 33 101
183
74,4 0,1 161
526
23,2 0,2
pcle
19
79
46
18,8 0,1 68
51
10,0 0,1
pcler8
27 190
67
23,0 0,1 111
84
11,2 0,1
rd73
7
31
52
12,6 0,1 35
63
10,2 0,1
rd84
8
43
69
15,4 0,1 47
80
12,8 0,1
sao2
10
93
179
23,0 0,1 99
294
22,6 0,1
shift
19 252
163
15,2 0,1 142
360
22,6 0,2
squar5
5
36
45
11,6 0,1 39
61
10,6 0,1
t481
16
50
48
17,8 0,1 42
62
12,6 0,1
tial
14 578 1051
55,0 0,4 517 2119
66,4 1,5
vda
17 1594
969
43,8 0,7 843 1663
57,8 3,5
vg2
25 188
186
37,2 0,1 159
367
21,4 0,2
P
15356 7893 906,6 6,3 7151 13178 748,4 15,9
Tabelle 2.4: Aus D-vollstandigen KFDDs synthetisierte Schaltkreise
2.3. EXPERIMENTELLE ERGEBNISSE
85
Schaltkreisen mit vielen primaren Eingangen eine geringere Tiefe als bei der kaskadierten
Kompositionssequenz zu erwarten, bei der die Klammerungstiefe linear mit der Anzahl
der primaren Eingange anwachst. Im Gegensatz dazu haben die EXOR-Gatter mit hohem Eingangsgrad bei der baumartigen Kompositionssequenz einen hoheren Einu auf
die Tiefe als die EXOR-Gatter mit weniger Eingangssignalen bei der kaskadierten Kompositionssequenz. Beide Eekte spiegeln sich in den Resultaten fur die synthetisierten
Schaltkreise wieder. Einerseits ist die Tiefe bei Schaltkreisen mit mehr als 20 primaren
Eingangen fur die baumartige Kompositionssequenz immer geringer als fur die kaskadierte Kompositionssequenz. Andererseits ist bei den Schaltkreisen mit weniger primaren
Eingangen oft dann die Tiefe fur die baumartige Kompositionssequenz hoher, wenn auch
die Groe der entsprechenden Schaltkreise wesentlich groer ist.
Die von dem Syntheseverfahren benotigte Laufzeit ist fur die meisten Schaltkreise sehr
gering. Lediglich fur die Beispielschaltkreise apex6, tial und vda wird mehr als eine CPUSekunde benotigt. In diesen Fallen ist entweder das zugrundeliegende KFDD oder der
erzeugte Schaltkreis gro. Auerdem ist zu erkennen, da die Laufzeit fur die baumartige
Kompositionssequenz immer hoher ist als fur die kaskadierte Kompositionssequenz. Dies
resultiert zum einen daraus, da die erzeugten Schaltkreise groer sind.
Es ist allerdings auch noch zu berucksichtigen, da bei der Abarbeitung der kaskadierten Kompositionssequenz in jedem Kompositionsschritt nur eine Abhangigkeitsmatrix
mit dem bisherigen Zwischenergebnis Dl+1;n+1 und die direkten Abhangigkeitsmatrizen
Dl;l+1 sowie Db l;n+1 benotigt werden. Das Ergebnis Dl;n+1 der Berechnung wird direkt im
nachsten Kompositionsschritt wieder benotigt und die anderen Abhangigkeitsmatrizen
werden nicht mehr benotigt. Bei der baumartigen Kompositionssequenz hingegen mussen
mehrere Zwischenergebnisse zwischengespeichert werden, und es wird eine aufwendigere
Verwaltung der Abhangigkeitsmatrizen notig.
Kapitel 3
Testbarkeit der Schaltkreise
Bei den Verfahren zur Herstellung von hochintegrierten Halbleiterbausteinen werden immer kleinere Strukturbreiten erreicht. Dadurch wird eine wirtschaftliche Herstellung immer komplexerer Designs auf einem Chip moglich, wobei zusatzlich die Performance verbessert und die Leistungsaufnahme reduziert wird. Allerdings sind diese Bausteine auch
sehr empndlich gegenuber Produktionsmangeln, wie z.B. winzigen Staubpartikeln oder
geringsten Unregelmaigkeiten in der Kristallstruktur des Siliziums. Aufgrund solcher
Defekte ist ein groer Anteil der produzierten Chips nicht funktionsfahig. Um die funktionsfahigen und die unbrauchbaren Chips zu trennen, mu fur jeden einzelnen Chip ein
Test durchgefuhrt werden.
Analog zur Beschreibung eines Schaltkreises auf Gatterebene wird von der Vielzahl der
moglichen physikalischen Defekte mittels Fehlermodellen abstrahiert. In dieser Arbeit wird
das stuck-at Fehlermodell betrachtet, bei dem logische Fehler auf Gatterebene modelliert
werden. Ein vollstandiger Test fur einen Schaltkreis mu fur jeden modellierten Fehler ein
Testmuster enthalten. Dies bringt insbesondere bei komplexen Designs folgende Probleme
mit sich:
1. Es kann redundante Fehler geben, fur die kein Testmuster existiert.
2. Die automatische Testmustergenerierung fur einen Fehler kann sehr aufwendig werden.
Diese beiden Probleme sind zentrale Themen einer Vielzahl von Arbeiten im Bereich des
Testens von Schaltkreisen. Ausfuhrliche Abhandlungen sind in [29, 1, 53] zu nden.
Fur das erste Problem gibt es im wesentlichen zwei Losungsansatze. Einerseits wird versucht, in einem gegebenen Schaltkreisdesign die redundanten Fehler zu identizieren und
zu entfernen. Dazu werden entweder zusatzliche primare Eingange und Ausgange eingefugt oder Teile des Designs werden durch eine Resynthese optimiert. Das Identizieren
der redundanten Fehler ist jedoch CoNP-vollstandig. Daher konnen hierzu nur Heuristiken eingesetzt werden, mit denen moglichst viele Redundanzen erkannt werden. Die
bekannten Algorithmen zur Identikation von Redundanzen sind sehr laufzeitintensiv.
Schlielich konnen durch das Entfernen von Redundanzen wahrend der Resynthese neue
Redundanzen erzeugt werden. Bei dem anderen Losungsansatz werden bereits in dem
Syntheseverfahren Entwurfsregeln und Manahmen berucksichtigt, um die Testbarkeit
der erzeugten Schaltkreise zu erhohen oder zu garantieren.
Das zweite Problem der automatischen Testmustergenerierung ist sehr nah mit dem Identizieren von redundanten Fehlern verwandt und ist ebenfalls NP-vollstandig. Fur dieses
86
3.1. STUCK-AT FEHLER
87
Problem wurden eine Vielzahl ausgefeilter Algorithmen entwickelt, die auf unterschiedlichen Ansatzen basieren. Die Performance dieser Algorithmen wurde uber die Jahre hinweg zwar erheblich verbessert, aber die Testmustergenerierung ist bis heute ein kritischer
Schritt bei der Schaltkreisentwicklung.
Die beiden beschriebenen Probleme treten auch bei den Schaltkreisen auf, die mit dem in
Kapitel 2 vorgestellten Syntheseverfahren erzeugt werden. Es kann jedoch gezeigt werden,
da redundante stuck-at Fehler nur an konstanten Signalen auftreten. Durch eine Analyse der Graphstruktur des zur Synthese verwendeten KFDDs konnen diese konstanten
Signale bereits wahrend der Synthese erkannt und deren Erzeugung durch eine Anpassung in dem Syntheseverfahren vermieden werden. Fur die so erzeugten Schaltkreise kann
bereits wahrend der Synthese durch eine einfache Analyse der Graphstruktur des KFDDs
ein vollstandiger Test eÆzient berechnet werden. Damit konnen Schaltkreisrealisierungen
ohne redundante stuck-at Fehler zusammen mit vollstandigen Tests auf Basis einer Darstellung als KFDD eÆzient bestimmt werden. Im Gegensatz zu [35] ist es dabei nicht
notig, die aufwendige 2-rail Logik zu verwenden, bei der die Anzahl der Eingange und
Ausgange des Schaltkreises verdoppelt werden mu.
In den folgenden Abschnitten wird zunachst das stuck-at Fehlermodell vorgestellt. Danach wird eine Erweiterung des Syntheseverfahrens prasentiert, durch die sichergestellt
wird, da keine konstanten Signale erzeugt werden. Auerdem wird gezeigt, wie fur jeden stuck-at Fehler in den synthetisierten Schaltkreisen ein Testmuster erzeugt werden
kann. Abschlieend werden noch experimentelle Ergebnisse prasentiert, um die praktische
Anwendbarkeit und die EÆzienz der Verfahren zu uberprufen.
3.1
Stuck-at Fehler
Wegen der Vielzahl der moglichen physikalischen Fehler werden bestimmte Aspekte in
speziellen Fehlermodellen abgebildet. Ein Fehlermodell sollte so gewahlt werden, da einerseits die Anzahl der Fehler handhabbar bleibt, andererseits aber von dem Fehlermodell
ausgehend reprasentative Aussagen uber die Zuverlassigkeit des getesteten Chips gemacht
werden konnen. In dem stuck-at Fehlermodell werden Fehler auf der Gatterebene des
Schaltkreises beschrieben. Ein stuck-at Fehler bewirkt dabei, da die Schaltkreisbelegung
fur einen Fanoutstamm oder Fanoutzweig unabhangig von der Eingangsbelegung permanent den logischen Wert 0 oder 1 annimmt. Die Basis fur dieses Fehlermodell wurde
bereits in [25] gegeben. Eine grundlegende Beschreibung ist in [14] zu nden. Durch das
stuck-at Fehlermodell konnen viele verschiedene physikalische Defekte erfat werden. Die
Beziehung zwischen realen Fehlern und den modellierten stuck-at Fehlern wird in [53]
detailliert dargestellt. Obwohl es viele physikalische Defekte gibt, die durch das stuck-at
Fehlermodell nicht direkt modelliert werden konnen, hat sich in der Praxis gezeigt, da mit
Tests fur stuck-at Fehler noch aussagekraftige Vorhersagen uber die Funktionsfahigkeit
eines Schaltkreises gemacht werden konnen. Dabei kann zusatzlich noch die Einzelfehlerannahme getroen werden, bei der davon ausgegangen wird, da jeweils nur ein stuck-at
Fehler in dem gesamten Schaltkreis existiert. Dieses heute weit verbreitete Modell ist als
single-stuck-at oder als einfaches stuck-at Fehlermodell bekannt und hat sich auch in der
Industrie durchgesetzt.
88
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
Denition 3.1
Sei SK = (G ; typ; I=O) ein Schaltkreis mit G
Fanoutzweig und f 2 f0; 1g.
= (V ; E ), e 2 E ein Fanoutstamm oder
Ein stuck-at-f Fehler an der Kante e bewirkt, da die Schaltkreisbelegung fur
den Fanoutzweig oder Fanoutstamm e unabhangig von der Eingangsbelegung
fur die primaren Eingange des Schaltkreises permanent den logischen Wert f
annimmt.
Als Kurzbezeichnung fur einen stuck-at-f Fehler an Kante e wird sa(f; e) verwendet. Falls aus dem Kontext klar ist, an welcher Kante der Fehler auftritt,
kann auch die Schreibweise sa-f verwendet werden.
f wird als Fehlertyp bezeichnet.
Die Kante e wird als Fehlerort bezeichnet.
Durch einen stuck-at Fehler F = sa(f; e) wird zunachst nur die Schaltkreisbelegung an
dem Fehlerort e festgelegt. Entspricht der Fehlertyp f dabei fur eine Eingangsbelegung a
nicht dem durch Denition 1.6 festgelegten Wert vala (e), dann kann sich diese A nderung
uber nachfolgende Gatter und Signale
fortsetzen. Die daraus resultierende fehlerbehafF
tete Schaltkreisbelegung vala kann analog zu Denition 1.6 bestimmt werden, wobei
lediglich die Fallunterscheidung um den Fall erweitert werden mu, in dem die aktuelle
Kante e dem Fehlerort f entspricht.
Im folgenden werden die wichtigsten Begrie aus dem Bereich des Testens deniert und
einige wesentliche Probleme bei der Bestimmung von Tests fur das stuck-at Fehlermodell
kurz beschrieben, sofern sie fur das Verstandnis dieser Arbeit wichtig sind. Anhand von
einfachen Beispielen werden die Begrie und Methoden verdeutlicht. Eine detaillierte
Beschreibung ist in [29, 1, 53] zu nden.
Denition 3.2
Sei SK = (G ; typ; I=O) ein Schaltkreis mit G = (V ; E ), e0 2 E eine Kante, F
sa(f; e) ein stuck-at Fehler und a eine Eingangsbelegung. Dann gilt:
=
Fur den Fehler F liegt an der Kante e0 bei Eingangsbelegung a ein Unterschied
an, falls vala (e0 ) 6= valFa (e0 ) ist.
Der Fehler F ist einstellbar, falls es mindestens eine Eingangsbelegung gibt,
bei der fur F ein Unterschied an dem Fehlerort e anliegt.
Ein Propagationspfad P = (ek ; ek+1 ; : : : ; el ) ist ein Teil eines Pfades, fur
den an allen Kanten ei (i 2 fk; k + 1; : : : ; lg) ein Unterschied anliegt.
Die Eingangsbelegung a ist ein Testmuster fur den Fehler F , falls bei a ein
Unterschied an dem Eingang von mindestens einem primaren Ausgang anliegt.
F heit dann entdeckbar bei Eingangsbelegung a.
Die Testmenge T (F ) fur einen Fehler F ist durch die Menge aller moglichen
Testmuster fur Fehler F gegeben.
Der Fehler F heit redundant, wenn es kein Testmuster fur F gibt, d.h. falls
T (F ) = ; ist. Ansonsten heit F nicht-redundant oder testbar.
Eine Menge von Testmustern T (SK ) heit vollst
andiger Test fur den Schaltkreis SK , falls T (SK ) ein Testmuster fur jeden stuck-at Fehler enthalt.
89
3.1. STUCK-AT FEHLER
Zur gleichzeitigen Darstellung der Schaltkreisbelegung und der
fehlerbehafteten SchaltF
kreisbelegung einer Kante e wird die Schreibweise vala (e)=vala (e) verwendet. Falls an der
Kante e kein Unterschied anliegt, kann vereinfachend nur vala (e) geschrieben werden.
Um ein Testmuster fur einen stuck-at Fehler F = sa(f; e) zu bestimmen, mussen folgende
beiden Bedingungen erfullt werden:
1. Der Fehler mu eingestellt werden.
2. Der Unterschied am Fehlerort mu zu einem primaren Ausgang propagiert werden.
Nach Anlegen einer Eingangsbelegung, die beide Bedingungen erfullt, kann die Prasenz
des stuck-at Fehlers in einem produzierten Schaltkreis uberpruft werden, indem die vom
Schaltkreis erzeugten Werte an den primaren Ausgangen mit der korrekten Ausgangsbelegung verglichen werden.
Zur Erfullung der zweiten Bedingung mu der Unterschied von dem Fehlerort uber einen
Propagationspfad zu einem primaren Ausgang gebracht werden. Fur die Propagation eines
Unterschiedes uber ein Gatter mit mehreren Eingangen ist die Schaltkreisbelegung der
Eingange des Gatters von Bedeutung.
Denition 3.3
Sei SK = (G ; typ; I=O) ein Schaltkreis mit G = (V ; E ) und z 2 Z ein Gatter mit
mehreren Eingangen e1 ; e2 ; : : : ; edin (z) und einem Ausgang e0 . Weiterhin sei a eine
Eingangsbelegung.
Der Wert x 2 f0; 1g heit kontrollierender Wert fur den i-ten Eingang von z ,
falls vala (ei ) = x unabhangig von den Werten fur vala (ej ) (j 6= i) die Schaltkreisbelegung vala (e0 ) bestimmt. Andernfalls heit x propagierender Wert.
Fur die Gatter mit mehreren Eingangen sind die kontrollierenden und propagierenden
Werte in Tabelle 3.1 zusammengestellt. Wahrend die Gatter vom Typ AND, NAND,
OR und NOR jeweils einen kontrollierenden und einen propagierenden Wert haben, hat
das EXOR-Gatter nur propagierende Werte. Die Belegung des Ausgangs eines EXORGatters ist also immer von der Belegung jedes einzelnen Eingangs abhangig.
AND / OR/
Grundfunktion
EXOR
NAND NOR
kontrollierende Werte
0
1
|
propagierende Werte
1
0
0, 1
Tabelle 3.1: Propagation bei Gattern mit mehreren Eingangen
Nach Denition 3.2 mu ein vollstandiger Test ein Testmuster fur jeden stuck-at Fehler
des Schaltkreises enthalten. Allerdings gibt es fur die meisten Fehler mehrere verschiedene Testmuster. Andererseits konnen mit einem Testmuster in den meisten Fallen mehrere
verschiedene Fehler getestet werden. Basierend auf den Testmengen konnen die stuck-at
Fehler eines Schaltkreises in A quivalenzklassen eingeteilt werden bzw. Dominanzbeziehungen zwischen den Fehlern aufgestellt werden ([39, 47]).
90
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
Denition 3.4
Sei SK = (G ; typ; I=O) ein Schaltkreis und seien F1 und F2 zwei stuck-at Fehler mit
den Testmengen T (F1 ) und T (F2 ).
Die Fehler F1 und F2 sind 
aquivalent (F1 $ F2 ), falls die Testmengen fur
beide Fehler gleich sind, d.h. falls T (F1 ) = T (F2 ) ist.
Der Fehler F1 dominiert den Fehler F2 (F1 ! F2 ), falls jedes Testmuster fur
Fehler F1 auch ein Testmuster fur Fehler F2 ist, d.h. falls T (F1 ) T (F2 ) ist.
Oensichtlich braucht ein vollstandiger Test nur jeweils ein Testmuster fur alle aquivalenten Fehler zu enthalten. Fur einen Fehler, der dominiert wird, braucht kein eigenes
Testmuster aufgenommen werden, da in einem vollstandigen Test bereits ein Testmuster
fur den dominierenden Fehler enthalten sein mu.
Aus [31] ist bekannt, da die Entscheidung, ob zwei Fehler in einer A quivalenz- oder
Dominanzbeziehung stehen, ein coNP-vollstandiges Problem ist. Allerdings gibt es fur
die stuck-at Fehler an den Eingangen und Ausgangen der Grundzellen aus ST D einige
sehr einfache A quivalenz- oder Dominanzbeziehungen. Fur ein Gatter v 2 V in einem
Schaltkreis uber der Bibliothek ST D werden lokale Fehlerbeziehungen fur stuck-at
Fehler an einem Eingang ei = I (v; i) (i 2 f1; 2; : : : ; din(v)g) und dem Ausgang e0 = O(v; 1)
in Tabelle 3.2 angegeben ([47]).
A quivalenz
typ(v )
Dominanz
0
AND sa(0; ei ) $ sa(0; e ) sa(1; ei ) ! sa(1; e0 )
OR
sa(1; ei) $ sa(1; e0) sa(0; ei) ! sa(0; e0)
NAND sa(0; ei ) $ sa(1; e0 ) sa(1; ei ) ! sa(0; e0 )
NOR sa(1; ei ) $ sa(0; e0 ) sa(0; ei ) ! sa(1; e0 )
sa(1; e1 ) $ sa(0; e0)
NOT sa(0; e ) $ sa(1; e0 )
1
Tabelle 3.2: Lokale Fehlerbeziehungen an Gattern
Beispiel 3.1
Der linke Schaltkreis aus Abbildung 3.1 hat einen sa-1 Fehler an Kante (s2; z3 ). Die
Eingangsbelegung (0; 0) stellt den Fehler an Kante (s2; z3 ) ein. Der Unterschied 0/1 wird
uber den fett gezeichneten Propagationspfad ((s2; z3); (z3 ; s5); (s5; z4); (z4 ; s6); (s6; o1)) zu
dem primaren Ausgang propagiert, da an den weiteren Eingangen der Gatter z3 und z4
propagierende Werte anliegen. Die Eingangsbelegung (0; 0) ist also ein Testmuster fur den
Fehler.
Der rechte Schaltkreis aus Abbildung 3.1 hat einen sa-0 Fehler an Kante (s4; z4 ). Um den
Fehler einzustellen, mu eine Eingangsbelegung a gewahlt werden, fur die vala (s4; z4 ) = 1
ist. Da dies nicht durch einen kontrollierenden Wert an dem AND-Gatter z2 erreicht
werden kann, mussen beide Eingange des AND-Gatters durch die Eingangsbelegung a
auf den propagierenden Wert 1 gesetzt werden. Damit folgt, da der sa-0 Fehler nur
durch die Eingangsbelegung a = (1; 0) eingestellt werden kann. Dies wiederum bewirkt,
91
3.1. STUCK-AT FEHLER
da die Schaltkreisbelegung vala (s5; z4 ) auf den fur das OR-Gatter z4 kontrollierenden
Wert 1 festgelegt wird, wodurch die Propagation des Unterschiedes uber das OR-Gatter
verhindert wird. Da auch fur die einzige den Fehler einstellende Eingangsbelegung kein
Unterschied an einem primaren Ausgang erzeugt wird, ist der sa-0 Fehler in dem rechten
Schaltkreis redundant.
o1
s6
z4
s4
0
z2
0
s3
s6
s5
z3
1
o1
0/1
0/1
+
0
0
1
s2
0
i2
z4
s4 1/0 s5
1
s3
z3
1
1
+
1
0
z1
sa-1
0
i1
z2
0/1
z1
s1
sa-0
1
0
s1
1
i1
s2
0
i2
Abbildung 3.1: Schaltkreise mit stuck-at Fehlern
In den bisher betrachteten Beispielen wurde der Unterschied immer nur uber einen Propagationspfad propagiert. Durch die Verzweigung eines Fanoutstammes auf mehrere Fanoutzweige kann ein Unterschied aber auch uber mehrere Propagationspfade gleichzeitig
geleitet werden. Bei der Rekonvergenz fuhren mehrere Propagationspfade zu verschiedenen Eingangen eines Gatters. Dabei kann es zur Ausloschung von Unterschieden kommen. Im folgenden werden Beispiele fur rekonvergierende Propagationspfade mit und ohne
Ausloschung angegeben.
Beispiel 3.2
Im linken Schaltkreis aus Abbildung 3.2 hat die Kante (i2; s2) einen sa-0 Fehler. Fur
die Eingangsbelegung (1; 1) wird der Unterschied 1=0 an dem Fanoutstamm eingestellt
und es gibt zwei Propagationspfade uber die Fanoutstamme (s2; z2 ) und (s2; z3). An dem
OR-Gatter z4 rekonvergieren die beiden Propagationspfade. Die beiden Unterschiede 1=0
und 1=0 loschen sich jedoch an dem OR-Gatter nicht aus, so da der Unterschied uber
die Propagationspfade bis zum primaren Ausgang propagiert wird. Die Eingangsbelegung
(1; 1) ist also ein Testmuster fur den sa-0 Fehler im linken Schaltkreis.
Analog wird der sa-0 Fehler im rechten Schaltkreis aus Abbildung 3.2 auch durch die Eingangsbelegung a = (1; 1) eingestellt und uber zwei Propagationspfade zu den Eingangen
des OR-Gatters z4 propagiert. Durch den zusatzlichen Inverter z1 wird allerdings an einem Eingang des OR-Gatters z4 der Unterschied 0=1 erzeugt, wahrend an dem anderen
Eingang wieder der Unterschied 1=0 anliegt. Dies beiden Unterschiede loschen sich aus, da
sowohl fur die Schaltkreisbelegung ohne Fehler vala(z4 ; s6) = 1 als auch fur die fehlerbehaftete Schaltkreisbelegung valaF (z4 ; s6) = 1 resultiert. Die Eingangsbelegung a = (1; 1)
ist somit kein Testmuster fur den sa-0 Fehler in dem rechten Schaltkreis.
92
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
o1
s6
z4
s4
1/0
z2
1
1/0
o1
1/0
s6
z4
s4
s5
1/0
z3
1
1
0/1
z2
1/0
1
s3
0/1
s5
1/0
z3
1
1/0
z1
s1
s2
1
i1
1/0
sa-0
i2
1/0
s1
1
i1
s2
1/0
sa-0
i2
Abbildung 3.2: Schaltkreise mit rekonvergierenden Propagationspfaden
3.2
Konstante Signale
In Abschnitt 2.2.2.1 wurde bereits beschrieben, wie Gatter mit konstanten Eingangssignalen vereinfacht werden konnen. Dabei wurden nur solche Signale als konstant betrachtet,
die direkt an ein Gatter vom Typ C0 oder C1 angeschlossen sind. In einer Schaltkreisrealisierung konnen aber auch die Ausgange von anderen Gattern immer den gleichen Wert
berechnen:
Denition 3.5
Sei SK = (G ; typ; I=O) ein Schaltkreis mit G = (V ; E ), und (z; s)
ein Fanoutstamm, der die Zelle z mit dem Signal s verbindet.
2 (Z [ Pin) S
Dann ist s ein konstantes Signal, falls die Schaltkreisbelegung fur den Fanoutstamm (z; s) bei jeder Eingangsbelegung den gleichen Wert c 2 f0; 1g annimmt, d.h.
vala(z; s) = c fur alle a 2 IBjPinj.
Konstante Signale werden nicht nur durch Gatter vom Typ C0 oder C1 verursacht. In
Abschnitt 2.2.2.2 wurde bereits gezeigt, da auch durch Gatter mit gleichen oder inversen
Eingangssignalen konstante Signale erzeugt werden konnen. Diese einfach zu erkennenden Situationen werden bereits in der Prozedur ComposeDependencies aus Algorithmus B.4 berucksichtigt, indem durch die implizite Durchfuhrung von Vereinfachungen das
Erzeugen von konstanten Signalen vermieden wird.
Da das Identizieren von konstanten Signalen in allgemeinen Schaltkreisen jedoch NPvollstandig ist, kann bei den meisten Syntheseverfahren nicht garantiert werden, da die
erzeugten Schaltkreise keine konstanten Signale enthalten. Bei Vorliegen eines konstanten Signals kann immer die Schaltkreisrealisierung weiter optimiert werden. Auerdem
impliziert ein konstantes Signal s, das immer den Wert c 2 f0; 1g annimmt, redundante
sa-c Fehler an allen zu s adjazenten Kanten, da diese Fehler nicht einstellbar sind. Daher
sollten konstante Signale moglichst vermieden werden.
In folgendem Lemma wird gezeigt, da es in dem vorgestellten Syntheseverfahren genugt,
die Ausgangssignale der Teilschaltkreise zur Realisierung der Abhangigkeiten zu untersuchen:
93
3.2. KONSTANTE SIGNALE
k,l
D
+
e1
sA
gA
s,l
dk,s
x,z
k,s
D
xk-2 xk-1 xk xk+1
e2
dz,y
s,l
D
xs-1 xs xs+1
xl-1 xl
xl+1
Abbildung 3.3: Durch Prozedur ComposeDependencies erzeugtes AND-Gatter
Lemma 3.1
Sei SK = (G ; typ; I=O) ein durch das Syntheseverfahren aus Anhang B erzeugter
Schaltkreis. Dann gilt:
Falls die Ausgangssignale der Teilschaltkreise zur Realisierung der Abhangigkeiten
nicht konstant sind, dann gibt es in dem synthetisierten Schaltkreis SK keine konstanten Signale.
Beweis:
In den Algorithmen des Syntheseverfahren aus Anhang B werden Signale an verschiedenen
Stellen erzeugt:
In Zeile (3) von Prozedur Synthesis werden Signale zur Reprasentation der primaren
Eingange erzeugt. Da an einem primaren Eingang sowohl der Wert 0 als auch 1 angelegt
werden kann, sind diese Signale nicht konstant. Entsprechend sind die dazu invertierten
Signale, die in Zeile (11) von Prozedur DirectDependencyMatrix erzeugt werden,
auch nicht konstant.
In den Zeilen (37) und (43) von Prozedur ComposeDependencies werden gerade die
Ausgangssignale der Teilschaltkreise zur Realisierung der Abhangigkeiten und gegebenenfalls die entsprechenden invertierten Signale erzeugt. Diese Signale sind nach Voraussetzung nicht konstant.
Schlielich werden in Zeile (17) von Prozedur ComposeDependencies noch weitere
Signale erzeugt. Ein solches Signal sA ist jeweils durch den Fanoutstamm (gA; sA) mit
einem Gatter gA vom Typ AND2 verbunden (vgl. Abbildung 3.3). Die Eingange e1 =
(Dk;s[x; z]; gA) und e2 = (Ds;l[z; y]; gA) des AND-Gatters sind dabei mit Signalen zur
s;l
Realisierung der Abhangigkeiten dk;s
x;z und dz;y verbunden. Somit sind auch die Signale e1
und e2 nach Voraussetzung nicht konstant.
Daraus folgt einerseits, da es mindestens eine Belegung a 2 IBjPinj gibt, bei der die
Schaltkreisbelegung vala (e1) = 0 ist. Aus der Funktionsbeschreibung fur AND-Gatter
94
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
folgt dann, da auch vala (gA; sA) = 0 sein mu. Somit kann sA kein konstantes 1-Signal
sein.
Andererseits folgt, da es zwei Belegungen a1 ; a2 2 IBjPinj gibt, fur die vala (e1 ) = 1
und vala (e2) = 1 ist. Da die von e1 reprasentierte Abhangigkeit dk;s
x;z und die von e2
s;l
reprasentierte Abhangigkeit dz;y von disjunkten Variablenmengen abhangen, ist fur die
Belegung a^ = (a11 ; a12; : : : ; a1s 1; a2s ; a2s+1; : : : ; a2jPinj) sowohl vala^ (e1) = 1 als auch vala^ (e2 ) =
1. Aus der Funktionsbeschreibung fur AND-Gatter folgt dann, da auch vala^ (gA; sA) = 1
sein mu und sA somit auch kein konstantes 0-Signal sein kann.
Es genugt also, in den synthetisierten Schaltkreisen sicherzustellen, da die Ausgangssignale der Teilschaltkreise zur Realisierung der Abhangigkeiten nicht konstant sind. Jedes
dieser Ausgangssignale stellt eine Abhangigkeit im zugrundeliegenden KFDD dar. Das
Ausgangssignal des Teilschaltkreises ist somit genau dann konstant, wenn auch die entsprechende Abhangigkeit im KFDD konstant ist. Dies wiederum kann durch Analyse der
Abhangigkeiten in dem Graphen des KFDD bestimmt werden.
1
2
3.2.1 Konstante 0-Abhangigkeiten
Zunachst wird gezeigt, da konstante 0-Abhangigkeiten in dem KFDD sehr einfach anhand
des zugrundeliegenden Graphen zu erkennen sind:
Lemma 3.2
Sei K = (G; R; Xn; d) ein KFDD und seien vxk ; vyl 2 V zwei Knoten des Graphen
G = (V; E ). Dann gilt:
k
l
Die Abhangigkeit dk;l
x;y des Knoten vx von Knoten vy ist genau dann eine konstante
0-Abhangigkeit, wenn in dem Graphen G kein Pfad von Knoten vxk zu Knoten vyl
existiert.
Beweis:
" =) \
k;l von Pfaden, die von Knoten
Angenommen es gabe in G eine nicht leere Menge Px;y
k
l
vx zu Knoten vy fuhren. Dann gibt es nach Lemma 2.7 eine Belegung a, fur die gek;l aktiv ist. Nach Denition 2.3 ist die Abh
nau ein Pfad aus Px;y
angigkeit dk;lx;y als die
k;l deniert.
EXOR-Verknupfung uber die Aktivierungsbedingungen aller Pfade aus Px;y
Da fur Belegung a genau eine dieser Aktivierungsbedingungen erfullt ist, berechnet sich
die Abhangigkeit dk;lx;y fur Belegung a zu dk;lx;y (a) = 1. Somit kann dk;lx;y keine konstante
0-Abhangigkeit gewesen sein.
" (= \
Falls es keinen Pfad von Knoten vxk zu Knoten vyl gibt, wird die Abhangigkeit dk;lx;y nach
Denition 2.3 durch die EXOR-Verknupfung uber die leere Menge als die konstante
Funktion 0 bestimmt.
Die U berprufung der Existenz einer konstanten 0-Abhangigkeit kann damit auf bekannte
und eÆziente Graphenalgorithmen zuruckgefuhrt werden.
Lemma 3.3
Sei K = (G; R; Xn; d) ein KFDD, vxk ein Knoten aus levelk und l > k. Dann gilt:
In Zeit O(jjK jj) konnen alle Knoten aus Level l bestimmt werden, fur die eine
konstante 0-Abhangigkeit zu dem Knoten vxk besteht.
3.2. KONSTANTE SIGNALE
95
Beweis:
Nach Lemma 3.2 braucht nur die Existenz eine Pfades von Knoten vxk zu den Knoten aus
levell in dem Graphen G = (V; E ) uberpruft zu werden. Dies kann durch eine von Knoten
vxk aus gestartete depth rst search- oder breath rst search-Traversierung geschehen, bei
der alle erreichten Knoten aus levell markiert werden. Eine konstante 0-Abhangigkeit
besteht dann zu allen Knoten aus levell , die nicht markiert sind. Die Laufzeit fur eine
Traversierung wachst linear mit der Groe jjGjj = jV j + jE j des Graphen G (z.B. [40]).
Da jeder innere Knoten des KFDD K genau zwei ausgehende Kanten hat, ist die Groe
des Graphen G beschrankt durch jjGjj < 3 jV j = O(jjK jj).
Damit konnte in dem Syntheseverfahren vor dem Erzeugen eines Signals fur die Abhangigkeit dk;lx;y uberpruft werden, ob die Abhangigkeit und damit das entsprechende Signal den
konstanten Wert 0 hat. Das folgende Lemma zeigt jedoch, da dieser Aufwand nicht notwendig ist, da in dem vorgestellten Syntheseverfahren bereits alle konstanten 0-Abhangigkeiten erkannt werden.
Lemma 3.4
Sei K = (G; R; Xn; d) ein KFDD und SK = (G ; typ; I=O) der durch das Syntheseverfahren aus Anhang B erzeugte Schaltkreis. Dann gilt:
Fur den synthetisierten Schaltkreis SK werden keine konstanten 0-Signale erzeugt.
Beweis:
Nach Lemma 3.1 genugt es zu zeigen, da in jedem Teilschaltkreis zur Realisierung einer
Abhangigkeitsmatrix Dk;l kein Ausgangssignal erzeugt wird, das ein konstantes 0-Signal
ist. Es mu also sichergestellt sein, da in Dk;l jede konstante 0-Abhangigkeit durch den
Eintrag Zero markiert wird.
Der Beweis kann durch vollstandige Induktion uber = l k gefuhrt werden.
Fur = 1 ist l = k + 1 und der Teilschaltkreis fur Dk;k+1 wird durch die Prozedur
DirectDependencyMatrix erzeugt. Analog zum Beweis von Lemma 3.1 folgt, da
in dieser Prozedur keine konstanten Signale { insbesondere keine konstanten 0-Signale
{ erzeugt werden. Statt dessen werden die Eintrage fur konstante 0-Abhangigkeiten mit
Zero markiert.
Fur > 1 wird die Prozedur ParityMatrixMultiplication verwendet. Dabei wird
der Teilschaltkreis fur jedes Ausgangssignal Dk;l[x; y] durch einen Aufruf der Prozedur
b k;l erzeugt. Nach LemComposeDependencies aus den Signalen von D k;s, D s;l und D
k;l
k;l
ma 3.2 ist die durch D [x; y] realisierte Abhangigkeit dx;y nur dann konstant 0, wenn es
in G keine Pfade von Knoten vxk zu Knoten vyl gibt. Das ist jedoch nur der Fall, wenn es
fur jeden Knoten vzs aus Level s entweder keinen Pfad von vxk zu vzs gibt oder keinen Pfad
s;l
von vzs zu vyl gibt. Damit folgt wieder mit Lemma 3.2, da entweder dk;s
x;z = 0 oder dz;y = 0
ist. Nach Induktionsannahme wurde aber fur kein Signal aus Dk;s und Ds;k ein konstantes
0-Signal erzeugt. Also ist fur jeden Knoten vzs 2 levels entweder der Eintrag Dk;s[x; z]
oder der Eintrag fur Ds;l[z; y] mit Zero markiert. Da es in G keine Pfade von Knoten vxk
zu Knoten vyl gibt, wurde auch Db k;l[x; y] in Prozedur DirectDependencyMatrix mit
Zero markiert.
Damit werden die Zeilen (6) bis (19) sowie (21) bis (26) von Prozedur ComposeDependencies nicht durchlaufen, und die Mengen A und B bleiben leer. Auerdem bleibt die
Variable invert unverandert. Bei einer leeren Menge B werden auch die Zeilen (27) bis
96
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
(30) nicht durchlaufen. Daher bleibt die Menge A weiterhin leer und die Variable invert
wird nicht invertiert. Somit ist in den verbleibenden Zeilen nur die Bedingung fur Zeile
(31) erfullt. Dort wird kein Signal erzeugt, sondern der Eintrag Dk;l[x; y] mit Zero markiert.
3.2.2 Konstante 1-Abhangigkeiten
Es gibt Situationen, in denen die in Abschnitt 2.2.2 vorgestellten lokalen Vereinfachungen
nicht ausreichen, um eine konstante 1-Abhangigkeit zu erkennen. In diesen Fallen erzeugt
das Syntheseverfahren aus Anhang B konstante 1-Signale durch komplexe Teilschaltkreise.
Ein solcher Fall wird im folgenden Beispiel gezeigt.
Beispiel 3.3
Auf der linken Seite von Abbildung 3.4 ist ein Ausschnitt aus einem KFDD dargestellt.
In diesem KFDD ergibt sich die Abhangigkeit des Knoten v11 von Knoten v15 als d11;;51 =
x1 x2 (x1 x2 x1 x2 ) x1 x2 = 1. Auf der rechten Seite von Abbildung 3.4 ist der Teil
des synthetisierten
Schaltkreises dargestellt, der fur die Realisierung der konstanten 1Abhangigkeit d11;;51 erzeugt wird.
d1,5
1,1=1
X1
S
S
X2
1,5
D
1
X2
1
2
+
d1,3
1,1
1,3
D
X3
nD
pD
X4
1
X3
1
X4
2
X3
2
X4
3
d1,3
1,2
3,5
D
+
3
X4
4
d1,2
1,1
d1,2
1,2
1,2
S
X5
1
X5
2
X5
3
1,3
d1,3
X5
2,3
d2,3
1,1 d1,2
2,3
d2,3
2,2 d2,3
2,3
D
3,4
D
D
4
x1
x2
Abbildung 3.4: Konstante Abhangigkeit
Nach Denition 2.3 ist die Abhangigkeit zwischen zwei Knoten in einem KFDD durch
die EXOR-Verknupfung der Aktivierungsbedingungen aller Pfade zwischen den Knoten
deniert. Bei einer konstanten 1-Abhangigkeit mu demnach fur jede Belegung eine ungerade Anzahl der Pfade zwischen den Knoten aktiv sein. Diese Situation kann in dem
Graph des KFDDs als eine spezielle Dominatorbeziehung charakterisiert werden.
3.2. KONSTANTE SIGNALE
97
Denition 3.6
Sei K = (G; R; Xn; d) ein KFDD mit einer DTL d = (d1 ; d2 ; : : : ; dn). Weiterhin
sei Pxk;l die Menge aller Pfade in G, die an Knoten vxk beginnen und die entweder
zu einem Knoten aus levell fuhren oder deren letzte Kante von einem Knoten aus
levelq zu einem Knoten aus levelr fuhrt, wobei k q < l < r n + 1 ist1 .
Eine Kante e = high(v ) heit DH-Kante, falls der Knoten v den Dekompositionstypen pD oder nD hat, d.h. falls dindex(v) 2 fpD; nDg ist.
Ein Knoten vyl 2 levell heit DH-Dominator von vxk , falls die folgenden beiden
Bedingungen gelten:
a) Alle Pfade aus Pxk;l, die keine DH-Kante enthalten, fuhren zu vyl .
b) Alle Pfade aus Pxk;l, die wenigstens eine DH-Kante enthalten, fuhren nicht
zu vyl .
Beispiel 3.4
In dem KFDD aus der linken Seite von Abbildung 3.4 sind alle DH-Kanten durch gestrichelte Linien dargestellt. Alle von Knoten v11 ausgehenden Pfade, die keine DH-Kante
enthalten, fuhren zu Knoten v15. Alle anderen von v11 ausgehenden Pfade, die mindestens
eine DH-Kante enthalten, fuhren zu einem von v15 verschiedenen Knoten aus Level 5.
Damit ist v15 nach Denition 3.6 ein DH-Dominator von v11.
Das folgende Lemma zeigt, da es in einem KFDD genau dann konstante 1-Abhangigkeiten gibt, wenn es in dem zugrundeliegenden Graphen DH-Dominatoren gibt.
Lemma 3.5
= (G; R; Xn; d) ein KFDD mit einer DTL d = (d1; d2; : : : ; dn) und seien
2 V zwei Knoten des Graphen G = (V; E ). Dann gilt:
Sei K
vxk ; vyl
k
l
Die Abhangigkeit dk;l
x;y des Knoten vx von Knoten vy ist genau dann eine konstante
1-Abhangigkeit, wenn der Knoten vyl ein DH-Dominator von vxl ist.
Beweis:
" (= \
Nach Denition 2.2 konnen nur dann beide ausgehenden Kanten des Knoten vxk gleichzeitig
aktiv sein, wenn vxk den Dekompositionstyp pD oder nD hat. In diesem Fall ist die Kante
low(vxk ) immer aktiv und die Kante high(vxk ) ist bei entsprechender Belegung aktiv. Da
high(vxk ) bei dk 2 fpD; nD g eine DH-Kante ist, f
uhren nach Denition 3.6 alle von Knoten
k
l
high(vx ) ausgehenden Pfade nicht zu vy . Fur den Fall, da vxk den Dekompositionstyp
S hat, ist fur jede Belegung genau eine der von vxk ausgehenden Kanten low(vxk ) oder
high(vxk ) aktiv. Damit ist f
ur jeden Dekompositionstyp
und bei jeder Belegung genau eine
k+j
k
k
von Knoten vx ausgehende Kante (vx ; vz0 ) aktiv, die keine DH-Kante ist. Falls k + j < l
ist, mussen fur Knoten vzk0+j wieder alle Pfade aus Pzk0+j;l, die keine DH-Kante enthalten,
zu vyl fuhren und alle Pfade aus Pzk0+l;l, die wenigstens eine DH-Kante enthalten, durfen
nicht zu vyl fuhren. Nach Denition 3.6 ist vyl also auch ein DH-Dominator von vzk0+j . Durch
1 In einem vollst
andigen KFDD entspricht Pxk;l den Pfaden, die an Knoten vxk beginnen und zu einem
Knoten aus levell fuhren.
98
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
vollstandige Induktion folgt, da fur jede Belegung a 2 IBn genau ein Pfad von vxk zu vyl
aktiv ist. Damit ist dk;lx;y nach Denition 2.3 eine konstante 1-Abhangigkeit.
" =) \
Es wird gezeigt, da es wenigstens eine Belegung a 2 IBn gibt, fur die eine gerade Anzahl von Pfaden zwischen vxk und vyl aktiv ist, falls vyl kein DH-Dominator von vxk ist.
Abhangig davon, welche Bedingung aus Denition 3.6 nicht erfullt ist, werden zwei Falle
unterschieden.
Fall 1: Wenigstens ein Pfad aus Pxk;l, der mindestens eine DH-Kante enthalt, fuhrt zu vyl .
Sei DHk;lx;y die Menge aller Pfade von Knoten vxk zu vyl , die wenigstens eine DH-Kante
enthalten. Analog zu dem Beweis von Lemma 2.7 kann gezeigt werden, da eine Belegung
a = (ak ; ak+1 ; : : : ; as 1 ; as; as+1 ; : : : ; al 1 ) existiert, fur die genau ein Pfad in DHk;l
x;y aktiv
s
ist. Sei dieser aktive Pfad, der eine DH-Kante high(vz ) enthalt. Fur die Belegung
a = (ak ; ak+1; : : : ; as 1 ; as ; as+1 ; : : : ; al 1 ) wird im folgenden gezeigt, da der einzige
Pfad ist, der bei dem Wechsel von a auf a inaktiv wird:
Da high(vzs) eine DH-Kante ist, haben alle Knoten aus levels den Dekompositionstyp
pD oder nD. Daher sind alle Pfade, die keine von einem Knoten in levels ausgehende
DH-Kante enthalten, genau dann aktiv fur Belegung a, wenn sie fur Belegung a aktiv
sind. Alle Pfade, die eine von einem Knoten in levels ausgehende DH-Kante enthalten,
konnen fur Belegung a nicht aktiv sein, da die jeweilige DH-Kante fur as nicht aktiv ist.
Fur Belegung a hingegen war von diesen Pfaden genau der eine Pfad aktiv. Somit ist
entweder eine gerade Anzahl von Pfaden aktiv fur Belegung a oder eine gerade Anzahl
von Pfaden ist aktiv fur die aus a abgeleitete Belegung a. Somit kann die Abhangigkeit
dk;l
x;y nicht konstant 1 sein.
Fall 2: Wenigstens ein Pfad aus Pxk;l, der keine DH-Kante enthalt, fuhrt nicht zu vyl .
Sei 0 = (e1; e2 ; : : : ; ep) ein solcher Pfad aus Pxk;l , der keine DH-Kante enthalt und der
nicht zu vyl fuhrt. Im folgenden wird angegeben, wie eine Belegung a0 bestimmt werden
kann, bei der von den Pfaden aus Pxk;l nur der Pfad 0 aktiv ist:
8
1 falls ei = high(vzsii ) und dsi = S
>
>
<
falls ei = low(vzsii ) und dsi = S
a0si = 10
falls ei = low(vzsii ) und dsi = nD
>
>
:
0 falls ei = low(vzsii ) und dsi = pD
Da der Pfad 0 nicht zu vyl fuhrt und kein anderer Pfad aus Pxk;l bei der Belegung a0 aktiv
ist, ist bei Belegung a0 kein Pfad von vxk zu vyl aktiv. Somit kann die Abhangigkeit dk;lx;y
nicht konstant 1 sein.
Die Existenz einer konstanten 1-Abhangigkeit kann also durch eine Analyse der Graphstruktur des KFDDs uberpruft werden. Die Existenz eines DH-Dominators fur einen Knoten vxk kann ebenfalls auf bekannte Algorithmen zur Graphtraversierung zuruckgefuhrt
werden. Dabei werden zunachst alle Knoten aus Pxk;l markiert, die von vxk aus uber Pfade
ohne DH-Kanten erreichbar sind. Dabei darf kein Knoten erreicht werden, dessen Level
groer als l ist, da sonst nicht alle Pfade aus Pxk;l, die keine DH-Kante enthalten, zu vyl
fuhren und somit Bedingung a) aus Denition 3.6 nicht erfullt ist. Anschlieend werden
alle Knoten mit einer zweiten Markierung gekennzeichnet, die von vxk aus uber Pfade mit
DH-Kanten erreichbar sind. Danach mu noch uberpruft werden, ob nur ein Knoten aus
Level l mit der ersten Markierung gekennzeichnet ist und dieser Knoten nicht auch durch
die zweite Markierung gekennzeichnet ist.
3.2. KONSTANTE SIGNALE
99
Der oben skizzierte Algorithmus mu nicht fur jedes Paar von Knoten aus Level k und
Level l angewendet werden. Es reicht vielmehr aus, fur jeden Knoten aus Level k einmal
zu uberprufen, ob es in dem gesamten Level l einen DH-Dominator gibt.
In dem oben beschriebenen Verfahren zur U berprufung auf DH-Dominatoren werden die
Bedingungen aus Denition 3.6 zum groen Teil erst uberpruft, nachdem die Markierung
der Knoten vollstandig abgeschlossen ist. In der Praxis treten DH-Dominatoren jedoch
nur selten auf. Daher sind die im folgenden Lemma formulierten Bedingungen, mit denen die Existenz eines DH-Dominators fruhzeitig ausgeschlossen werden kann, fur eine
Performanceoptimierung der Implementierung sehr wichtig.
Lemma 3.6
= (G; R; Xn; d) ein KFDD und sei vxk 2 V ein Knoten des Graphen G =
(V; E ). Weiterhin sei Pxk;l die Menge aller Pfade in G, die an Knoten vxk beginnen
und die entweder zu einem Knoten aus levell fuhren oder deren letzte Kante von
einem Knoten aus levelq zu einem Knoten aus levelr fuhrt, wobei k q < l < r n + 1 ist. Schlielich sei V (Pxk;l ) V die Menge aller Knoten, die auf mindestens
einem der Pfade aus Pxk;l liegen. Dann gilt:
Falls es einen Knoten v 2 V (Pxk;l ) gibt, fur den es einen Pfad 1 von vxk nach v gibt,
der eine DH-Kante enthalt, und fur den es einen Pfad 2 von vxk nach v gibt, der
keine DH-Kante enthalt, dann gibt es in levell keinen DH-Dominator von vxk .
Sei K
Beweis:
Es wird eine Fallunterscheidung entsprechend dem Level = index(v) vorgenommen, in
dem Knoten v liegt:
Fall 1: l < n + 1
Nach Bedingung a) von Denition 3.6 kann ein Knoten vyl 2 levell nur dann ein DHDominator von vxk sein, wenn alle Pfade aus Pxk;l , die keine DH-Kante enthalten, zu vyl
fuhren. Da der Pfad 2 nach Voraussetzung keine DH-Kante enthalt und wegen > l aus
Pxk;l sein mu, kann Bedingung a) von Denition 3.6 fur keinen Knoten aus levell erfullt
sein.
Fall 2: = l
Da 1 mindestens eine DH-Kante enthalt und 1 zu Knoten v fuhrt, kann der Knoten
v nach Bedingung b) von Denition 3.6 kein DH-Dominator von vxk sein. Jeder andere
Knoten v0 2 levell n fvg kann nach Bedingung a) von Denition 3.6 kein DH-Dominator
von vxk sein, weil der Pfad 2 keine DH-Kante enthalt und zu v fuhrt.
Fall 3: k < < l
Sei der Pfad, der von Knoten v ausgeht, nur aus LOW-Kanten besteht und zu einem
Knoten aus levell fuhrt, bzw. dessen letzte Kante von einem Knoten aus levelq zu einem
Knoten aus levelr fuhrt, wobei q < l < r n + 1 ist. Dann entsteht durch die
Konkatenation 1 = (1 ; ) ein Pfad aus Pxk;l , der mindestens eine DH-Kante enthalt.
Analog entsteht durch die Konkatenation 2 = (2 ; ) ein Pfad aus Pxk;l, der keine DHKante enthalt. Die Pfade 1 und 2 fuhren beide zu einem Knoten aus einem Level ,
mit l. Damit folgt aus Fall 1 und Fall 2, da es in levell keinen DH-Dominator von
vxk gibt.
100
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
Beispiel 3.5
In Abbildung 3.5 ist ein Ausschnitt aus einem KFDD dargestellt, bei dem alle Knoten
aus Level 1 keinen DH-Dominator in Level 4 haben.
Entsprechend Fall 1 aus Beweis von Lemma 3.6 kann der Knoten v11 keinen DH-Dominator
in Level 4 haben, da der Pfad (low(v11); low(v12)) keine DH-Kanten hat und zu dem
Knoten v15 aus Level 5 fuhrt.
Wie in Fall 2 beschrieben, kann Knoten v21 keinen DH-Dominator haben, da der Knoten
v34 in Level 4 einmal uber den Pfad (low(v21 ); low(v22 ); low(v13 )) ohne DH-Kante erreicht wird und zum anderen uber den Pfad (low(v12); low(v22); high(v13)) mit DH-Kante
erreicht wird.
Schlielich trit fur den Knoten v31 Fall 3 zu. Der Knoten v33 ist uber den Pfad 1 =
(low(v31 ); high(v32)) mit DH-Kante und uber den Pfad 2 = (high(v31); low(v42)) ohne
DH-Kante erreichbar. Der Knoten v74 aus Level 4 ist dann mit (1 ; low(v33)) uber einen
Pfad mit DH-Kante erreichbar und mit (2 ; low(v33)) uber einen Pfad ohne DH-Kante
erreichbar. Somit kann weder v74 noch ein anderer Knoten aus Level 4 ein DH-Dominator
von v31 sein.
DT Level
S
1
pD
2
nD
3
S
4
pD
5
X1
X2
X2
1
X4
X5
X1
1
1
X4
1
X5
2
2
X5
X1
2
X2
2
X3
1
X3
2
X4
3
X4
4
3
X3
X4
5
X4
6
X4
3
X2
4
X4
8
3
7
X4
9
3
Abbildung 3.5: Knoten aus Level 1 ohne DH-Dominator
Im Algorithmus 3.1 wird ein Verfahren zur U berprufung auf DH-Dominatoren angegeben,
bei dem die beiden Graphtraversierungen zur Markierung der Knoten aus Pxk;l miteinander
verzahnt sind. Bei einem Aufruf der Prozedur FindDHDominator fur Knoten vxk und
Level l kann fruhzeitig erkannt werden, wenn die Bedingungen aus Lemma 3.6 erfullt
werden. In diesem Fall kann die Traversierung unmittelbar abgebrochen werden. Sofern
tatsachlich ein DH-Dominator existiert, werden alle notigen Markierungen im Rahmen
von nur einer Traversierung gesetzt. Auerdem werden die Bedingungen aus Denition 3.6
bereits wahrend der Traversierung uberpruft.
3.2. KONSTANTE SIGNALE
101
Die Zeilen (1) bis (5), (12) bis (15) und (19) bis (21) von Prozedur FindDHDominator
sowie die Zeilen (1) bis (5) und (10) bis (12) von Prozedur MarkWithDH Edge realisieren eine rekursive Implementierung des depth rst search-Algorithmus. Dabei wird in Zeile
(2) von Prozedur FindDHDominator zusatzlich der aktuelle Knoten v auf Level l durch
die Zuweisung dom[v] = v als ein Kandidat fur einen DH-Dominator markiert. Im Gegensatz zu den konventionellen Implementierungen fur den depth rst search-Algorithmus
werden jedoch zwei verschiedene Markierungen und zwei Prozeduren verwendet. In der
Prozedur FindDHDominator wird die Markierung NoDHEdge verwendet, um die Knoten zu markieren, fur die es von vxk ausgehende Pfade ohne DH-Kanten gibt. Durch die
Bedingung in Zeile (13) von Prozedur FindDHDominator wird ein Wechsel zur Prozedur MarkWithDH Edge ermoglicht, falls eine DH-Kante vorliegt. U ber diese DHKante sind dann alle Knoten erreichbar, die in der weiteren Bearbeitung durch Prozedur
MarkWithDH Edge besucht werden. Dementsprechend werden alle diese Knoten mit
DHEdge markiert.
In den weiteren Zeilen der beiden Prozeduren aus Algorithmus 3.1 wird versucht, moglichst
fruh zu erkennen, wenn kein DH-Dominator zu vxk existieren kann.
In den Zeilen (7), (17) und (23) von Prozedur FindDHDominator sowie in den Zeilen
(7) und (14) von Prozedur MarkWithDH Edge werden die Bedingungen aus Lemma 3.6 uberpruft. Die in den Zeilen (7) und (17) von Prozedur FindDHDominator
untersuchten Knoten waren in dem aktuellen Aufruf der Prozedur uber Pfade ohne DHKanten erreichbar. Die Markierung DHEdge an diesen Knoten zeigt jedoch an, da es
auch einen Pfad mit DH-Kante zu diesen Knoten gibt. Analog existieren in den restlichen
Fallen Pfade mit DH-Kanten zu den betrachteten Knoten. Fur diese Knoten ist aber anhand der Markierung NoDHEdge zu erkennen, da es auch von vxk ausgehende Pfade ohne
DH-Kanten gibt.
In den Zeilen (10) und (27) von Prozedur FindDHDominator wird auerdem uberpruft,
ob es in Pxk;l einen Pfad ohne DH-Kante gibt, der zu einem Knoten fuhrt, dessen Level
groer als l ist. In diesem Fall kann ebenfalls abgebrochen werden, da dann Bedingung a)
aus Denition 3.6 nicht erfullt ist.
Schlielich wird durch Zeile (29) noch uberpruft, ob alle Pfade ohne DH-Kanten zu dem
gleichen Knoten aus levell fuhren. Ist dies nicht der Fall, kann ebenfalls wegen Bedingung
a) aus Denition 3.6 keiner der beiden Knoten ein DH-Dominator sein. In Zeile (30) wird
der bis dahin bestimmte Kandidat fur einen DH-Dominator noch an dem aktuellen Knoten
gespeichert, um die Information verfugbar zu haben, falls bei der weiteren Abarbeitung
von Prozedur FindDHDominator der gleiche Knoten noch uber eine andere Kante
erreicht wird.
Beispiel 3.6
Bei Anwendung der Prozedur FindDHDominator auf den Knoten v11 in dem KFDD aus
Abbildung 3.5 werden die Knoten v11 und v12 bearbeitet und dabei jeweils mit NoDHEdge
markiert. Wahrend der Abarbeitung von FindDHDominator fur v12 wird bereits in
Zeile (3) festgestellt, da der Level des uber die LOW-Kante erreichbaren Knoten v15
groer als 4 ist. Deshalb wird die Suche nach einem DH-Dominator in Zeile (10) beendet.
Fur den Knoten v21 werden zunachst die uber LOW-Kanten erreichbaren Knoten v22, v13 und
v34 mit NoDHEdge markiert. Nachdem der Aufruf von FindDHDominator fur den Knoten v34 beendet ist, wird bei der weiteren Bearbeitung von Prozedur FindDHDominator
fur Knoten v13 in Zeile (23) festgestellt, da der uber die DH-Kante high(v13) erreichbare
Knoten v34 bereits mit NoDHEdge markiert ist, und die Suche nach einem DH-Dominator
wird abgebrochen.
102
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
Algorithmus 3.1
FindDHDominator
( KFDD K , Knoten v, Level l )
// Markiert Knoten mit NoDHEdge, fur die es von v ausgehende Pfade ohne DH-Kanten gibt
// und bestimmt ggf. auf Level l existierenden DH-Dominator fur v .
(1) Markiere v mit NoDHEdge
(2) if (index(v) = l) then dom[v] = v ; return(dom[v]) (3) if (index(low(v)) l) then
(4)
if (low(v) ist nicht markiert) then
(5)
if (
(K; low(v); l) = Abort) return(Abort) (6)
else
(7)
if (low(v) ist mit DHEdge markiert) return(Abort) (8)
(9) else // index(low(v)) > l
(10)
return(Abort)
(11) (12) if (index(high(v)) l) then
(13)
if (dindex(v) = S ) then
(14)
if (high(v) ist nicht markiert) then
(K; high(v); l) = Abort) return(Abort) (15)
if (
(16)
else
(17)
if (high(v) ist mit DHEdge markiert) return(Abort) (18)
(19)
else // dindex(v) 2 fpD; nDg)
(20)
if (high(v) ist nicht markiert) then
(21)
if (
(K; high(v); l) = Abort) return(Abort) (22)
else
(23)
if (high(v) ist mit NoDHEdge markiert) return(Abort) (24)
(25)
(26) else // index(high(v)) > l
(27)
if (dindex(v) = S ) return(Abort) (28) (29) if (dindex(v) = S ) ^ (dom[low(v)] 6= dom[high(v)]) return(Abort) (30) dom[v] = dom[low(v)]
(31) return(dom[v])
( KFDD K , Knoten v, Level l )
// Markiert Knoten mit DHEdge, fur die es von v ausgehende Pfade mit DH-Kanten gibt.
(1) Markiere v mit DHEdge
(2) if (index(v) = l) return(True) (3) if (index(low(v)) l) then
(4)
if (low(v) ist nicht markiert) then
(5)
if (
(K; low(v); l) = Abort) return(Abort) (6)
else
(7)
if (low(v) ist mit NoDHEdge markiert) return(Abort) (8)
(9) (10) if (index(high(v)) l) then
(11)
if (high(v) ist nicht markiert) then
(12)
if (
(K; high(v); l) = Abort) return(Abort) (13)
else
(14)
if (high(v) ist mit NoDHEdge markiert) return(Abort) (15)
(16) (17) return(True)
FindDHDominator
FindDHDominator
MarkWithDH Edge
MarkWithDH Edge
MarkWithDH Edge
MarkWithDH Edge
3.2. KONSTANTE SIGNALE
103
Bei dem Aufruf fur Knoten v31 werden zunachst die Knoten v31, v32 und v64 mit NoDHEdge
markiert. Nach der Ruckkehr aus dem Aufruf fur Knoten v64 wird bei der weiteren Bearbeitung von Prozedur FindDHDominator fur Knoten v32 in Zeile (21) die Prozedur
MarkWithDH Edge f
ur den uber die DH-Kante high(v32 ) erreichbaren Knoten v33 aufgerufen. Dadurch wird dieser Knoten v33 mit DHEdge markiert und durch die rekursiven
Aufrufe von Prozedur MarkWithDH Edge werden auch die Knoten v74 und v84 mit
DHEdge markiert. Nach Abarbeitung aller uber low(v31 ) erreichbaren Knoten erfolgt in
Zeile (15) ein Aufruf von FindDHDominator fur Knoten v42 . In diesem Aufruf wird in
Zeile (7) festgestellt, da der uber low(v42) erreichbare Knoten v33 bereits mit DHEdge
markiert ist. Damit wird die Suche nach einem DH-Dominator auch fur Knoten v31 abgebrochen.
Durch das sofortige Abbrechen nachdem erkannt wurde, da kein DH-Dominator existieren kann, wird die Performance von Algorithmus 3.1 fur die haugen Situationen
optimiert, in denen kein DH-Dominator vorhanden ist. Falls jedoch ein DH-Dominator
existiert, werden durch Algorithmus 3.1 alle Knoten aus Pxk;l markiert. Daher ist die
asymptotische Laufzeit dieses Algorithmus durch die Groe des KFDDs gegeben.
Lemma 3.7
= (G; R; Xn; d) ein KFDD, vxk ein Knoten aus levelk und l > k. Dann gilt:
Zeit O(jjK jj) konnen alle Knoten aus Level l bestimmt werden, fur die eine
Sei K
In
konstante 1-Abhangigkeit zu dem Knoten vxk besteht.
Beweis:
Die Prozeduren FindDHDominator und MarkWithDH Edge werden nur fur Knoten
aufgerufen, die nicht markiert sind. In beiden Prozeduren wird der aktuelle Knoten jeweils
in Zeile (1) direkt nach dem Aufruf markiert. Damit konnen die beiden Prozeduren nur
einmal fur jeden Knoten aus Pxk;l V aufgerufen werden. Da die Laufzeit fur einen Aufruf
jeweils konstant ist, folgt die Laufzeitschranke von O(jV j) O(jjK jj).
3.2.3 Angepates Syntheseverfahren
In Abschnitt 3.2.1 wurde gezeigt, da in den synthetisierten Schaltkreisen keine konstanten 0-Signale erzeugt werden. Es kann in dem bisher vorgestellten Syntheseverfahren
jedoch vorkommen, da konstante 1-Signale erzeugt werden. In Abschnitt 3.2.2 wurde ein
Algorithmus vorgestellt, mit dem konstante 1-Abhangigkeiten bestimmt werden konnen.
Damit kann fur die Teilschaltkreise zur Realisierung der Abhangigkeiten das Erzeugen
von konstanten Ausgangssignalen vermieden werden. Mit Lemma 3.1 folgt dann, da es
in dem gesamten synthetisierten Schaltkreis keine konstanten Signale gibt.
Um das Erzeugen der Signale fur konstante 1-Abhangigkeiten zu vermeiden, mu in der
Prozedur ParityMatrixMultiplication aus Algorithmus B.3 vor jedem Aufruf der
Prozedur ComposeDependencies uberpruft werden, ob ein DH-Dominator vorliegt. Die
geanderte Prozedur ist in Algorithmus 3.2 angegeben. In Zeile (5) wird fur jeden Knoten
vxk aus Level k die Prozedur FindDHDominator aufgerufen, um einen gegebenenfalls
existierenden DH-Dominator auf Level l zu bestimmen. Anhand des dadurch berechneten
Ergebnisses dom wird in Zeile (7) fur jeden Knoten vyl uberpruft, ob der aktuelle Knoten
104
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
Algorithmus 3.2
ParityMatrixMultiplication
( KFDD K, Matrix Dk;s, Matrix Ds;l, Matrix Db k;l,
Schaltkreis SK )
// Erzeugt eine Schaltkreisrealisierung fur die Parity Matrix Multiplikation mit Eingangsb k;l und tragt die Ausgangssignale in eine neue Matrix Dk;l ein.
// signalen aus D k;s, D s;l und D
(1) wk = widthk
(2) if l 6= n + 1 then wl = widthl else wl = 1 (3) Erzeuge wk wl Matrix Dk;l
(4) for x = 1 to wk do
(5)
dom =
(K; vxk ; l)
(6)
for y = 1 to wl do
(7)
if (vyl = dom) then
(8)
D k;l [x; y ] =
(9)
else
(10)
D k;l [x; y ] =
(11)
(12)
od
(13) od
(14) return ( Dk;l )
FindDHDominator
One
ComposeDependencies
( x, y, Dk;s, Ds;l, Db k;l, SK )
ein DH-Dominator ist. Falls dies der Fall ist, wird in Zeile (8) der Eintrag Dk;l[x; y] mit
One markiert. Andernfalls wird in Zeile (10) der entsprechende Teilschaltkreis durch die
Prozedur ComposeDependencies erzeugt.
Damit ergibt sich folgender Zusatzaufwand, um sicherzustellen, da die synthetisierten
Schaltkreise keine konstanten Signale enthalten:
Satz 3.8
= (G; R; Xn; d) ein KFDD, bei dem der breiteste Level w Knoten enthalt, d.h.
w = maxfwidthi j 1 i n +1g. Weiterhin sei SK = (G ; typ; I=O) der Schaltkreis,
der aus K mit dem Syntheseverfahren aus Anhang B erzeugt wird. Dann gilt:
In Zeit O(n w jjK jj) kann sichergestellt werden, da in SK keine konstanten
Sei K
Signale erzeugt werden.
Beweis:
In Abschnitt 2.1.3 wurde bereits beschrieben, da fur ein KFDD uber Xn bei jeder Kompositionssequenz n 1 Parity Matrix Multiplikationen benotigt werden, da jede Kompositionssequenz als binarer Baum dargestellt werden kann. Bei jedem der n 1 Aufrufe
der geanderten Prozedur ParityMatrixMultiplication aus Algorithmus 3.2 mu die
Prozedur FindDHDominator fur jeden der maximal w Knoten aus levelk aufgerufen
werden, um das Erzeugen konstanter Signale zu vermeiden. Die Laufzeit der Prozedur
FindDHDominator ist nach Lemma 3.7 durch O (jjK jj) bestimmt. Damit ergibt sich
die Laufzeitschranke von O(n w jjK jj).
3.3
Bestimmung von Belegungen fu
 r aktive Pfade
Die Bestimmung von Testmustern fur die Fehler in den synthetisierten Schaltkreisen basiert in weiten Teilen darauf, da anhand des Graphen des KFDDs Belegungen bestimmt

3.3. BESTIMMUNG VON BELEGUNGEN FUR
AKTIVE PFADE
105
werden konnen, fur die entweder eine gerade oder eine ungerade Anzahl von Pfaden zwischen zwei Knoten aktiv ist. Fur einen Knoten v und eine Menge von Pfaden, die von
v ausgehen, wurde die Existenz einer Belegung, bei der genau einer der Pfade aktiv ist,
bereits in Lemma 2.7 gezeigt. In dem Beweis des Lemmas wurde eine Methode angegeben, mit der eine entsprechende Belegung bestimmt werden kann. Dabei wurde jedoch
die EÆzienz des Verfahrens nicht betrachtet.
Zunachst wird eine praktische Realisierung des Verfahrens zur Bestimmung einer Belegung
vorgestellt, fur die genau ein Pfad { also eine ungerade Anzahl von Pfaden{ zwischen zwei
Knoten aktiv ist. Falls eine solche Belegung nicht existiert, wird dies ebenfalls erkannt.
Da die Realisierung auf einer depth rst search-Traversierung des Graphen basiert, kann
die EÆzienz des Verfahrens durch geeignete Markierungen gewahrleistet werden.
Anschlieend wird ein Verfahren vorgestellt, bei dem eine Belegung bestimmt wird, fur
die entweder kein Pfad oder genau zwei Pfade { also eine gerade Anzahl von Pfaden {
zwischen zwei Knoten aktiv sind. Auch hierbei wird erkannt, falls eine solche Belegung
nicht existiert, d.h. falls ein Knoten ein DH-Dominator des anderen Knoten ist, bei dem fur
jede Belegung genau ein Pfad aktiv ist. Das zweite Verfahren basiert ebenfalls auf einer
depth rst search-Traversierung, bei der jedoch eine Verzahnung mit der Traversierung
durch das erste Verfahren entstehen kann.
Im folgenden werden die Prozeduren zur Realisierung der beiden Verfahren vorgestellt
und an Beispielen verdeutlicht. Auerdem wird die Laufzeit der Algorithmen untersucht.
Die Anwendung der vorgestellten Algorithmen bei der Bestimmung von Testmustern wird
danach in Abschnitt 3.4 beschrieben.
3.3.1 Belegung fu
r genau einen aktiven Pfad
In Lemma 2.7 wurde bereits gezeigt, da es moglich ist, eine Belegung zu bestimmen, fur
die genau ein Pfad von einem Knoten v 2 levelk zu einer Menge von Knoten Y levell
aktiv ist, wenn es mindestens einen solchen Pfad gibt. In dem Beweis wurde zum Festlegen
der jeweiligen Belegung die Information verwendet, ob es noch wenigstens einen Pfad uber
den low-Nachfolger des aktuellen Knoten zu einem Knoten aus Y gibt.
In Algorithmus 3.3 wird die Prozedur CheckOnePathAssignment vorgestellt, mit der
fur den Fall, da Y nur aus einem Knoten v0 besteht, zunachst diese Information berechnet
und durch entsprechende Markierungen an den jeweiligen low-Nachfolgern abgelegt wird.
Anschlieend werden diese Markierungen benutzt, um mit der in Algorithmus 3.4 vorgestellten Prozedur SetOnePathAssignment die Belegung entsprechend dem Verfahren
aus dem Beweis von Lemma 2.7 zu bestimmen.
In Prozedur CheckOnePathAssignment erfolgt die U berprufung, ob es eine Belegung gibt, bei der genau ein Pfad von Knoten v zu Knoten v0 aktiv ist, nach Lemma 2.7 indem die Existenz von mindestens einem Pfad von v nach v0 untersucht wird.
Dazu wird eine depth rst search-Traversierung von Knoten v gestartet. Der Knoten v
wird dabei nur dann mit NoPath markiert, wenn nach Abarbeitung beider Nachfolger
low(v) und high(v) festgestellt wird, da es von v aus keinen Pfad zu Knoten v0 gibt.
Da in diesem Fall bei keiner Belegung ein Pfad von Knoten v zu Knoten v0 aktiv sein
kann, wird der aktuelle Aufruf der Prozedur mit dem Ruckgabewert False beendet. Sobald sichergestellt ist, da ein Pfad von Knoten v zu Knoten v0 existiert, wird Prozedur
CheckOnePathAssignment mit True beendet. Auerdem wird bei dem ersten Aufruf
von Prozedur CheckOnePathAssignment fur den Knoten v0 die Markierung OnePath
gesetzt. Diese Markierung konnte innerhalb von Algorithmus 3.3 leicht vermieden werden.
106
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
Allerdings wird sie im Zusammenspiel von Prozedur CheckOnePathAssignment mit
der spater in Algorithmus 3.5 beschriebenen Prozedur CheckEvenPathAssignment
benotigt.
Algorithmus 3.3
CheckOnePathAssignment
//
//
//
( KFDD K , Knoten v, Knoten v0 )

Uberpr
uft, ob es eine Belegung gibt, bei der genau ein Pfad von v zu v 0 aktiv ist.
Dazu wird uberpruft, ob es mindestens einen Pfad von v nach v 0 gibt.
Falls es keinen Pfad von v nach v 0 gibt, wird v mit NoPath markiert.
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
(15)
(16)
(17)
(18)
(19)
(20)
(21)
(22)
(23)
(24)
(25)
(26)
(27)
(28)
(29)
(30)
(31)
(32)
(33)
(index(v) = index(v0 )) then
if (v = v0 ) then Markiere v mit OnePath; return(True)
else Markiere v mit NoPath; return(False) if (index(low(v)) index(v0 )) then
if (low(v) ist nicht markiert) then
f ound =
(K; low(v); v0 )
else
if (low(v) ist mit OnePath markiert) then f ound = True
else f ound = False if
CheckOnePathAssignment
else
if
= False
(f ound = False) then
// Es gibt keinen Pfad von low(v ) zu v 0
if (index(high(v)) index(v0 )) then
if (high(v) ist nicht markiert) then
f ound =
(K; high(v); v0 )
else
if (high(v) ist mit OnePath markiert) then f ound = True
else f ound = False f ound
CheckOnePathAssignment
else
if
f ound
= False
(f ound = True) then
return(True)
else
Markiere v mit NoPath
return(False)
In den Zeilen (1) bis (4) wird der Fall untersucht, in dem die beiden betrachteten Knoten
aus dem selben Level sind. Sind die Knoten dabei gleich, wird der Knoten in Zeile (2)
mit OnePath markiert und die Prozedur erfolgreich beendet. Sind die Knoten nicht gleich,
kann es keinen Pfad von v zu v0 geben. Dementsprechend wird v in Zeile (3) mit NoPath
markiert, und die Prozedur mit dem Ruckgabewert False beendet.
Sind die Knoten v und v0 aus verschiedenen Leveln, wird in den Zeilen (5) bis (14) der
uber die LOW-Kante von v erreichte Knoten untersucht. Mit der Variablen found wird

3.3. BESTIMMUNG VON BELEGUNGEN FUR
AKTIVE PFADE
107
protokolliert, ob bereits veriziert oder widerlegt werden konnte, da ein Pfad uber die
Kante low(v) zu v0 existiert. Ist der Level von low(v) kleiner oder gleich dem Level von v0,
dann erfolgt ein rekursiver Aufruf der Prozedur CheckOnePathAssignment in Zeile
(7), sofern es keine Markierung an low(v) gibt. Ist die Markierung OnePath vorhanden,
wird die Variable found in Zeile (9) auf True gesetzt, da die Markierung OnePath in
Prozedur CheckOnePathAssignment nur fur Knoten v0 gesetzt wird. Andernfalls mu
die Markierung NoPath vorhanden sein. Es gibt also keinen Pfad von low(v) zu v0. Damit
kann es auch keinen Pfad uber die Kante low(v) zu v0 geben. Die Variable found wird
in Zeile (10) dementsprechend auf False gesetzt. Ist der Level von low(v) groer als der
Level von v0, dann kann es ebenfalls keinen Pfad von low(v) zu v0 geben, und die Variable
found wird in Zeile (13) entsprechend auf False gesetzt.
Die Variable found wird in den Zeilen (5) bis (14) dann auf False gesetzt, falls es keinen
Pfad von low(v) zu v0 gibt. Wahrend die HIGH-Kante von v untersucht wird, kann es
demnach nicht vorkommen, da eine Belegung gefunden wird, bei der auch ein Pfad uber
low(v ) aktiv ist. Daher entsprechen die Zeilen (17) bis (26) genau den Zeilen (5) bis (14),
wobei lediglich high(v) statt low(v) betrachtet wird.
In den Zeilen (28) bis (33) erfolgt die Auswertung der Variablen found. Falls entweder
ein Pfad uber die LOW-Kante oder uber die HIGH-Kante von v gefunden wurde, dann
wird in Zeile (29) der Erfolg durch den Ruckgabewert True signalisiert. Ansonsten wird
v in Zeile (31) mit NoPath markiert und in Zeile (32) der Wert False zuruckgegeben.
Die Belegung selbst wird nicht direkt in Prozedur CheckOnePathAssignment, sondern durch Prozedur SetOnePathAssignment bestimmt. Diese Trennung ist notig,
um die Komplexitat von Algorithmen begrenzen zu konnen, die spater noch vorgestellt
werden. Vor einem Aufruf von Prozedur SetOnePathAssignment mu immer sichergestellt werden, da die Prozedur CheckOnePathAssignment mit den gleichen Parametern aufgerufen und mit dem Ruckgabewert True abgeschlossen wurde.
Algorithmus 3.4
SetOnePathAssignment
( KFDD K , Knoten v, Knoten v0 )
// Setzt notwendige Eintrage in Belegung a, so da genau ein Pfad von v zu v 0 aktiv ist.
// Die Prozedur CheckOnePathAssignment mu vorher aufgerufen worden sein.
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
while (index(v) < index(v0 )) do
if (low(v) ist nicht mit NoPath markiert) ^ (index(low(v)) index(v0 )) then
if (dindex(v) = nD) then a[index(v)] = 1 else a[index(v)] = 0 else
od
= low(v)
if (dindex(v) = nD) then a[index(v)] = 0 else a[index(v)] = 1 v = high(v )
v
Entsprechend dem im Beweis von Lemma 2.7 vorgestellten Verfahren wird in Prozedur
solange zu einem Nachfolger des aktuellen Knoten gewechselt, bis der Level von Knoten v0 erreicht wird. Fur jeden Knoten wird in Zeile (2) zunachst
uberpruft, ob es noch einen Pfad von dem low-Nachfolger zu v0 gibt. Falls dem so ist, wird
in Zeile (3) die Belegung so gewahlt, da nur die LOW-Kante aktiv ist, und es wird zu
low(v) gewechselt. Gibt es uber die LOW-Kante keine Pfade zu v0, mu es einen Pfad
uber die HIGH-Kante geben, da sonst bereits der aktuelle Knoten mit NoPath markiert
SetOnePathAssignment
108
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
DT
X1
S
pD
X2
X2
1
nD
X3
1
S
X4
1
pD
OnePath
X5
X1
1
1
NoPath
X2
2
X3
X5
2
2
X5
3
X1
1
X2
1
NoPath
X3
1
NoPath
X4
1
X2
2
X3
OnePath
NoPath
NoPath
X5
X5
X5
1
2
3
X2
1
X3
1
OnePath
X4
1
2
X5
1
X1
1
NoPath
X2
2
X3
X5
2
2
X5
3
1
X2
1
NoPath
X3
1
NoPath
X4
1
2
NoPath
NoPath
X5
X5
1
2
X3
2
X5
3
Abbildung 3.6: Bestimmen von Belegungen fur genau einen aktiven Pfad
gewesen ware. Daher wird in Zeile (6) die Belegung so gewahlt, da die HIGH-Kante
aktiv ist. Falls der aktuelle Knoten nach einer Davio-Dekomposition zerlegt wurde, ist
dabei zwar auch die LOW-Kante aktiv. Aber uber diese Kante kann der Knoten v0 nicht
erreicht werden. Schlielich wird in Zeile (7) noch zu high(v) gewechselt und die weitere
Bestimmung der Belegung von diesem Knoten aus fortgesetzt.
Beispiel 3.7
In Abbildung 3.6 ist ein Ausschnitt eines KFDDs mehrmals abgebildet. Dabei werden jeweils fur die grau dargestellten Knoten die durch Prozedur CheckOnePathAssignment
bestimmten Markierungen und die durch Prozedur SetOnePathAssignment bestimmten aktiven Pfade dargestellt.
In dem ersten KFDD wird eine Belegung gesucht, bei der genau ein Pfad von Knoten v11
zu Knoten v15 aktiv ist. Zunachst wird die Prozedur CheckOnePathAssignment fur
Knoten v11 aufgerufen. Dadurch werden jeweils in Zeile (7) die rekursiven Aufrufe fur
die Knoten v12 und v15 verursacht. Bei dem Aufruf von CheckOnePathAssignment
fur Knoten v15 sind die Bedingungen aus den Zeilen (1) und (2) erfullt. Der Knoten v15
wird deshalb mit OnePath markiert (vgl. Abbildung 3.6) und die Prozedur direkt mit
True beendet. Dadurch brauchen bei der weiteren Bearbeitung des Aufrufs von Prozedur
CheckOnePathAssignment f
ur Knoten v12 die Zeilen (17) bis (26) nicht bearbeitet
werden, und die Prozedur wird in Zeile (29) ebenfalls mit True verlassen. Analog wird
der Aufruf fur Knoten v11 mit True beendet. Damit kann SetOnePathAssignment fur
Knoten v11 aufgerufen werden. Da in der vorausgehenden Bearbeitung kein Knoten mit
NoPath markiert wurde, wird die Belegung so gewahlt, da immer nur die LOW-Kante
aktiv ist. Bei der vorgegebenen DTL bedeutet dies, da a[1] = 0 und a[2] = 0 gesetzt
wird. Unabhangig von den anderen Eintragen von a ist damit gesichert, da nur der im
ersten KFDD von Abbildung 3.6 fett gezeichnete Pfad von v11 zu v15 aktiv ist.

3.3. BESTIMMUNG VON BELEGUNGEN FUR
AKTIVE PFADE
109
Bei der Berechnung einer Belegung fur einen aktiven Pfad zwischen Knoten v11 und Knoten v35 werden alle uber die LOW-Kante von v11 erreichbaren Knoten durch Prozedur
CheckOnePathAssignment mit NoPath markiert und die jeweiligen Aufrufe mit False
beendet. Dadurch wird auch die HIGH-Kante von v11 untersucht. Bei den dadurch erfolgenden Aufrufen fur die Knoten v22 und v23 ist jeweils der low-Nachfolger mit NoPath markiert
und es wird die jeweilige HIGH-Kante untersucht. Der Knoten v35 erfullt schlielich die
Bedingungen aus den Zeilen (1) und (2). Damit wird dieser Knoten mit OnePath markiert
und alle in Bearbeitung bendlichen Aufrufe von CheckOnePathAssignment werden
mit True beendet. Bei den anschlieenden Aufrufen von SetOnePathAssignment ist
ebenfalls jeweils der low-Nachfolger mit NoPath markiert, so da fur die Belegung a[1] = 1,
a[2] = 1 und a[3] = 0 bestimmt wird, wodurch die HIGH-Kanten aktiv werden.
Im dritten KFDD aus Abbildung 3.6 ist der Fall dargestellt, da bei dem Aufruf von
CheckOnePathAssignment f
ur Knoten v12 zu Knoten v14 bereits der Knoten low(v12) =
5
v1 in einem Level liegt, der groer ist als der Level des gesuchten Knoten v14 , zu dem
ein aktiver Pfad bestimmt werden soll. Daher wird in Zeile (13) der Wert False gesetzt, und in Zeile (19) wird Prozedur CheckOnePathAssignment fur den Knoten
high(v12) aufgerufen. Dabei wird der gesuchte Knoten v14 erreicht, und die Aufrufe von
CheckOnePathAssignment werden alle mit True abgeschlossen. Bei der anschlieenden Berechnung der Belegung mit Prozedur SetOnePathAssignment wird entsprechend die HIGH-Kante von v12 durch a[2] = 1 aktiviert, und die LOW-Kante von v13 wird
durch a[3] = 1 aktiviert.
In dem letzten KFDD wird eine Belegung gesucht, die in einem aktiven Pfad von v12 zu
v35 resultiert. Da es zwischen den beiden Knoten keinen Pfad gibt, werden v12 und alle
von diesem Knoten aus erreichbaren Knoten mit NoPath markiert, und alle Aufrufe von
CheckOnePathAssignment werden mit F alse beendet. Da auch der Aufruf f
ur den
2
Knoten v1 das Ergebnis False liefert, kann es die gesuchte Belegung nicht geben, und die
Prozedur SetOnePathAssignment wird nicht aufgerufen.
Die Komplexitat fur die Bestimmung einer Belegung fur einen aktiven Pfad zwischen zwei
Knoten wird in dem folgenden Lemma beschrieben.
Lemma 3.9
Sei K = (G; R; Xn; d) ein KFDD und seien vxk ; vyl 2 V zwei Knoten des Graphen
G = (V; E ).SWeiterhin sei V k;l V die Menge aller Knoten aus den Leveln k bis l,
d.h. V k;l = li=k leveli . Dann gilt:
In Zeit O(jV k;l j) O(jjK jj) kann eine Belegung bestimmt werden, fur die genau
ein Pfad von vxk zu vyl aktiv ist, bzw. es kann nachgewiesen werden, da eine solche
Belegung nicht existieren kann.
Beweis:
Falls von einem rekursiven Aufruf der Prozedur CheckOnePathAssignment aus Algorithmus 3.3 der Wert True zuruckgegeben wird, dann wird in der aufrufenden Instanz
kein weiterer rekursiver Aufruf mehr gestartet, und die aufrufende Instanz wird ebenfalls mit True beendet. Damit werden alle weiteren in Bearbeitung bendlichen Aufrufe
der Prozedur CheckOnePathAssignment mit True beendet, ohne weitere rekursive
Aufrufe zu starten.
Auerdem wird Prozedur CheckOnePathAssignment nur dann mit False beendet,
wenn der aktuell bearbeitete Knoten mit NoPath markiert wurde. Nur in diesem Fall
110
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
kann in den aufrufenden Instanzen ein weiterer Aufruf von CheckOnePathAssignment
gestartet werden. Allerdings wird vor jedem moglichen rekursiven Aufruf uberpruft, ob
der zu bearbeitende Knoten bereits markiert ist. In diesem Fall wird kein rekursiver Aufruf
gestartet.
Da ein rekursiver Aufruf auerdem nur fur Knoten moglich ist, deren Level kleiner oder
gleich dem Level l von Knoten vyl ist, folgt die Laufzeitschranke von O(jV k;lj) fur die Abarbeitung des Aufrufs von CheckOnePathAssignment(K; vxk ; vyl ). Sofern dieser Aufruf mit True beendet wurde, wird die Belegung durch einen anschlieenden Aufruf von
SetOnePathAssignment(K; vxk ; vyl ) gesetzt. Dabei wird in der while-Schleife jeder Knoten aus V k;l ebenfalls hochstens einmal besucht. Die Laufzeitschranke von O(jV k;lj) bleibt
also erhalten. Da weiterhin V k;l eine Teilmenge von V ist, ergibt sich auch die Schranke
von O(jjK jj).
Falls kein Pfad von vxk zu vyl existiert, wird die Prozedur CheckOnePathAssignment
einmal fur jeden von vxk aus erreichbaren Knoten aus V k;l aufgerufen. Dadurch werden
diese Knoten alle mit NoPath markiert. Auerdem werden alle Aufrufe mit False beendet. Insbesondere wird der Aufruf von CheckOnePathAssignment fur vxk mit False
beendet, wodurch signalisiert wird, da die gesuchte Belegung nicht existieren kann.
3.3.2 Belegung fu
r eine gerade Anzahl aktiver Pfade
Zur U berprufung, ob es eine Belegung gibt, bei der entweder kein Pfad oder zwei Pfade
von Knoten v zu Knoten v0 aktiv sind, wird die Prozedur CheckEvenPathAssignment
in Algorithmus 3.5 vorgestellt. Die Markierung OnePath wird verwendet, um den Knoten
v zu markieren, falls festgestellt wird, da bei jeder Belegung genau ein Pfad von v zu v 0
aktiv ist. In diesem Fall kann namlich bei keiner Belegung kein Pfad oder zwei Pfade von
Knoten v zu Knoten v0 aktiv sein.
Aus der hier benotigten Eigenschaft, da fur einen mit OnePath markierten Knoten v
bei jeder Belegung genau ein Pfad von v zu Knoten v0 aktiv ist, ergeben sich auerdem
zwei weitere interessanten Eigenschaften. Oensichtlich ist die Abhangigkeit des Knoten
v von Knoten v 0 eine konstante 1-Abhangigkeit. Mit Lemma 3.5 ergibt sich dann, da der
Knoten v0 ein DH-Dominator von allen mit OnePath markierten Knoten ist.
Wenn der Knoten v mit OnePath markiert wurde, wird der aktuelle Aufruf von Prozedur CheckEvenPathAssignment mit dem Ruckgabewert False beendet. Erst wenn
sichergestellt ist, da v0 kein DH-Dominator von dem aktuell untersuchten Knoten v ist,
wird Prozedur CheckEvenPathAssignment mit True beendet.
In Analogie zu Prozedur CheckOnePathAssignment wird auerdem bei dem ersten
Aufruf von Prozedur CheckEvenPathAssignment fur den Knoten v0 die Markierung
NoPath gesetzt, die fur das Zusammenspiel mit Prozedur CheckOnePathAssignment
benotigt wird.
Da die Prozeduren CheckEvenPathAssignment und CheckOnePathAssignment
sehr ahnlich aufgebaut sind, werden im folgenden nur die Unterschiede zwischen den
beiden Prozeduren aufgezeigt.
In den Zeilen (2) und (3) wird wieder der Fall untersucht, da die beiden betrachteten
Knoten aus dem selben Level sind. Da die Bedingung in Zeile (2) negiert ist, werden auch
die Markierungen NoPath und OnePath vertauscht, so da der Knoten v weiterhin mit
NoPath markiert wird, wenn die Knoten nicht gleich sind und die Markierung OnePath
gesetzt wird, wenn die Knoten gleich sind. Da jetzt eine Belegung gesucht wird, bei der

3.3. BESTIMMUNG VON BELEGUNGEN FUR
AKTIVE PFADE
Algorithmus 3.5
CheckEvenPathAssignment
111
( KFDD K , Knoten v, Knoten v0 )

// Uberpr
uft, ob es eine Belegung gibt, bei der eine gerade Anzahl Pfade von v zu v 0 aktiv ist.
// Falls es keinen Pfad von v zu v 0 gibt, wird v mit NoPath markiert.
// Falls immer genau ein Pfad von v zu v 0 aktiv ist, wird v mit OnePath markiert.
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
(15)
(16)
(17)
(18)
(19)
(20)
(21)
(22)
(23)
(24)
(25)
(26)
(27)
(28)
(29)
(30)
(31)
(32)
(33)
(34)
(35)
(36)
(37)
(38)
(39)
(40)
(41)
(42)
(43)
(44)
(45)
(46)
(index(v) = index(v0 )) then
if (v 6= v0 ) then Markiere v mit NoPath; return(True)
else Markiere v mit OnePath; return(False) if (index(low(v)) index(v0 )) then
if (low(v) ist nicht markiert) then
f ound =
(K; low(v); v0 )
else
if (low(v) ist mit NoPath markiert) then f ound = True
else f ound = False if
CheckEvenPathAssignment
else
= True
if (f ound = False) then
// Fur alle Belegungen ist genau ein Pfad von low(v ) zu v 0 aktiv
if (dindex(v) = S ) then
if (index(high(v)) index(v0 )) then
if (high(v) ist nicht markiert) then
f ound =
(K; high(v); v0 )
else
if (high(v) ist mit NoPath markiert) then f ound = True
else f ound = False f ound
CheckEvenPathAssignment
else
f ound
= True
else // dindex(v) 2 fpD; nDg
if (index(high(v)) index(v0 )) then
if (high(v) ist nicht markiert) then
else
else
if
=
(K; high(v); v0 )
if (high(v) ist mit OnePath markiert) then f ound = True
else f ound = False f ound
f ound
= False
(f ound = True) then
return(True)
else
Markiere v mit OnePath
return(False)
CheckOnePathAssignment
112
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
eine gerade Anzahl von Pfaden zwischen den Knoten aktiv ist, wird der Ruckgabewert
gegenuber Prozedur CheckOnePathAssignment vertauscht.
In Zeile (7) wird der Aufruf von CheckOnePathAssignment durch einen Aufruf der
Prozedur CheckEvenPathAssignment ersetzt. Ansonsten unterscheiden sich die Zeilen (5) bis (14) nur dadurch, da der fur die Variable found zu setzende Wert jeweils
invertiert ist.
In den Zeilen (5) bis (14) gibt es nur zwei Falle, in denen die Variable found auf den
Wert False gesetzt wird. Zum einen in Zeile (7), wenn der rekursive Aufruf von Prozedur
CheckEvenPathAssignment f
ur den low-Nachfolger False zuruckliefert. Zum anderen
in Zeile (10), wenn der low-Nachfolger bereits mit OnePath markiert ist. Aus beiden Fallen
ergibt sich, da es fur jede Belegung genau einen aktiven Pfad von low(v) zu v0 gibt.
Insgesamt wird die Variable found in den Zeilen (5) bis (14) also nur dann auf False
gesetzt, falls v0 ein DH-Dominator von low(v) ist.
Bei der Untersuchung der HIGH-Kante in den Zeilen (17) bis (39) wird das anzuwendende
Verfahren je nach Dekompositionstyp von Knoten v unterschieden.
Hat Variable v den Dekompositionstyp S , dann ist bei einer Belegung, mit der die Kante
high(v ) aktiv ist, die Kante low(v ) nicht aktiv. Daher entsprechen die Zeile (18) bis (27)
genau den Zeilen (5) bis (14), wobei lediglich high(v) statt low(v) betrachtet wird.
Wird Variable v jedoch nach einer Davio-Dekomposition zerlegt, dann ist die Kante
low(v ) immer aktiv. Da es von Knoten low(v ) aus bei jeder Belegung genau einen
aktiven Pfad zu v0 gibt, ist auch immer genau ein Pfad von v uber die Kante low(v)
zu v0 aktiv. Eine gerade Anzahl von aktiven Pfaden kann dann erreicht werden, indem
die Belegung so gewahlt wird, da neben dem aktiven Pfad uber low(v) zusatzlich
noch ein Pfad uber high(v) aktiv ist. Daher entsprechen die Zeilen (29) bis (38) aus
Prozedur CheckEvenPathAssignment genau den Zeilen (17) bis (26) aus Prozedur
CheckOnePathAssignment, mit denen eine Belegung gesucht wird, f
ur die genau ein
0
Pfad von high(v) zu v aktiv ist.
In den Zeilen (41) bis (46) von CheckEvenPathAssignment erfolgt die Auswertung
von Variable found analog zu den Zeilen (28) bis (33) von CheckOnePathAssignment.
Dabei wird lediglich in Zeile (44) die Markierung OnePath gesetzt, falls nur Belegungen
existieren, bei denen jeweils genau ein Pfad von Knoten v zu v0 aktiv ist.
Bei dem Zusammenspiel von den beiden Prozeduren CheckEvenPathAssignment und
CheckOnePathAssignment werden auch solche Markierungen genutzt, die durch die
Aufrufe der jeweils anderen Prozedur gesetzt wurden.
Auch in der Prozedur CheckEvenPathAssignment wird die Belegung nicht direkt
berechnet, sondern durch die Prozedur SetEvenPathAssignment aus Algorithmus 3.6
bestimmt. Da diese Prozedur ahnlich zu der Prozedur SetOnePathAssignment aus
Algorithmus 3.4 ist, werden wieder nur die Unterschiede zwischen den beiden Prozeduren
aufgezeigt.
In Prozedur SetEvenPathAssignment wird zunachst versucht, eine Belegung zu bestimmen, fur die kein Pfad zu Knoten v0 aktiv ist. Deshalb wird in Zeile (2) uberpruft, ob
es eine Belegung gibt, bei der von dem Knoten low(v) nicht genau ein Pfad zu Knoten v0
aktiv ist. Ist die Bedingung erfullt, wird in Zeile (3) die Belegung so gewahlt, da nur die
LOW-Kante aktiv ist, und es wird zu low(v) gewechselt.
Andernfalls wird die Belegung in Zeile (6) so gewahlt, da die HIGH-Kante aktiv ist.
Abhangig vom Dekompositionstyp des aktuellen Knoten wird eine Fallunterscheidung
vorgenommen. Bei Shannon-Dekomposition wird in Zeile (8) zu high(v) gewechselt und
in der while-Schleife mit der Suche nach einer Belegung fortgesetzt, bei der kein Pfad

3.3. BESTIMMUNG VON BELEGUNGEN FUR
AKTIVE PFADE
113
Algorithmus 3.6
SetEvenPathAssignment
//
//
//
//
( KFDD K , Knoten v, Knoten v0 )
Setzt notwendige Eintrage in Belegung a, so da entweder kein Pfad von v zu v 0 aktiv ist
oder zwei Pfade von v zu v 0 aktiv sind.
Liefert den Knoten zuruck, zu dem aktive Pfade fuhren.
Die Prozedur CheckEvenPathAssignment mu vorher aufgerufen worden sein.
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
(15)
while (index(v) < index(v0 )) do
if (low(v) ist nicht mit OnePath markiert) then
if (dindex(v) = nD) then a[index(v)] = 1 else
else
v
= low(v)
if (dindex(v) = nD) then a[index(v)] = 0 else
if (dindex(v) = S ) then
else
v
a
[index(v)] = 0 a
[index(v)] = 1 = high(v)
(K; high(v); v0 )
SetOnePathAssignment
od
return(v)
v = v0
zu Knoten v0 aktiv ist. Bei Davio-Dekomposition ist fur jede Belegung ein Pfad uber
die Kante low(v) aktiv. Deshalb wird in Zeile (10) mit einem Aufruf von Prozedur
SetOnePathAssignment eine Belegung gesucht, bei der von Knoten high(v ) aus ein
zweiter Pfad aktiv ist.
Zusatzlich wird von Prozedur SetEvenPathAssignment noch der Knoten zuruckgegeben, zu dem bei der berechneten Belegung ein Pfad aktiv ist. Falls kein Pfad zu Knoten
v 0 aktiv ist, wird der in Zeile (4) oder (8) bestimmte Knoten zuruckgegeben. Falls eine
Belegung bestimmt wird, bei der zwei Pfade von Knoten v zu v0 aktiv sind, wird der in
Zeile (11) zugewiesene Knoten v0 zuruckgegeben. Durch diese Zuweisung in Zeile (11) wird
zusatzlich erreicht, da die while-Schleife in Prozedur SetEvenPathAssignment nach
dem Aufruf von Prozedur SetOnePathAssignment in Zeile (10) abgebrochen wird.
Beispiel 3.8
In Abbildung 3.7 ist wieder ein Ausschnitt eines KFDDs mehrmals abgebildet. Dabei
werden wie in Beispiel 3.7 jeweils fur die grau dargestellten Knoten die durch Prozedur CheckEvenPathAssignment bestimmten Markierungen und die durch Prozedur
SetEvenPathAssignment bestimmten aktiven Pfade dargestellt.
In dem ersten KFDD aus Abbildung 3.7 wird eine Belegung gesucht, bei der eine gerade Anzahl von Pfaden zwischen Knoten v11 und Knoten v15 aktiv ist. Zunachst wird die
Prozedur CheckEvenPathAssignment fur die Knoten v11, v12 und v15 aufgerufen. In
dem Aufruf fur Knoten v15 wird dieser Knoten in Zeile (3) mit OnePath markiert, und die
Prozedur wird mit dem Ruckgabewert False beendet, da fur jede Belegung genau der aus
der Kante low(v12) bestehende Pfad zu Knoten v15 aktiv ist. Dadurch ist in der weiteren
Bearbeitung von dem Aufruf von CheckEvenPathAssignment fur Knoten v12 die Bedingung in Zeile (15) erfullt, und da d2 = pD ist, werden die Zeilen (29) bis (38) bearbeitet.
Dabei wird in Zeile (31) die Prozedur CheckOnePathAssignment fur Knoten v13 aufge-
114
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
DT
X1
S
X2
pD
X2
1
X3
nD
S
X4
1
X5
1
X1
1
X2
2
X3
1
X3
OnePath
pD
X2
1
2
X4
1
X5
1
X1
1
X2
2
X3
1
X2
1
X3
2
X4
1
X5
1
X1
1
X2
2
X3
1
2
X5
3
OnePath
X4
1
OnePath
X5
2
X5
3
OnePath
X2
1
2
OnePath
NoPath
X3
X3
1
2
2
NoPath
X5
1
X5
2
X5
3
X5
NoPath
X5
1
2
NoPath
X5
3
Abbildung 3.7: Bestimmen von Belegungen fur eine gerade Anzahl aktiver Pfade
rufen, um eine Belegung zu nden, bei der noch ein weiterer Pfad uber die Kante high(v12 )
zu Knoten v15 aktiv ist. Dies wird durch einen weiteren rekursiven Aufruf von Prozedur
CheckOnePathAssignment f
ur Knoten v14 erreicht, bei dem in Zeile (9) anhand der
Markierung OnePath von Knoten v15 festgestellt wird, da ein aktiver Pfad zu v15 existiert.
Damit werden alle Instanzen von CheckOnePathAssignment mit True beendet. Dies
wiederum bewirkt, da auch die Aufrufe der Prozedur CheckEvenPathAssignment
fur die Knoten v12 und v11 mit True beendet werden. Die anschlieende Berechnung der
Belegung mit Prozedur SetEvenPathAssignment setzt in Zeile (3) den Wert a[1] = 0.
Somit ist nur die Kante low(v11) aktiv. Entsprechend wird zu Knoten v12 gewechselt. Da
dessen low-Nachfolger v15 mit OnePath markiert ist, wird in Zeile (6) die Belegung a[2] = 1
gesetzt, so da beide von v12 ausgehenden Kanten aktiv sind. Da der aktuelle Dekompositionstyp d2 = pD ist, wird in Zeile (10) die Prozedur SetOnePathAssignment fur den
uber die HIGH-Kante erreichten Knoten v13 aufgerufen. Darin wird durch die Belegung
a[3] = 1 und a[4] = 0 jeweils nur die LOW-Kante aktiviert. In der weiteren Bearbeitung
von Prozedur SetEvenPathAssignment fur Knoten v12 wird dann nur noch in Zeile
(11) der Knoten v15 gesetzt. Dieser Knoten wird in Zeile (15) als der Knoten zuruckgegeben, der uber die beiden in Abbildung 3.7 fett gezeichneten aktiven Pfade erreichbar
ist.
In dem zweiten KFDD wird eine Belegung bestimmt, bei der kein Pfad von Knoten v11 zu
Knoten v35 aktiv ist. Dazu wird die Prozedur CheckEvenPathAssignment wieder fur
die Knoten v11, v12 und v15 aufgerufen. In dem Aufruf fur Knoten v15 wird dieser Knoten in
Zeile (2) mit NoPath markiert, und die Prozedur wird mit True beendet. Dadurch werden
auch die noch in Bearbeitung bendlichen Aufrufe von CheckEvenPathAssignment
fur die Knoten v12 und v11 mit True beendet, ohne weitere rekursive Aufrufe zu starten.
Bei dem anschlieenden Aufruf von Prozedur SetEvenPathAssignment werden jeweils die Zeilen (3) und (4) bearbeitet, wobei mit der Belegung a[1] = 0 und a[2] = 0

3.3. BESTIMMUNG VON BELEGUNGEN FUR
AKTIVE PFADE
115
jeweils nur die LOW-Kante aktiviert wird. Als Ergebnis wird der uber den aktiven Pfad
(low(v11 ); low(v12)) erreichte Knoten v15 zuruckgegeben.
Ein Fall, in dem eine Kante zu einem Knoten aus einem Level fuhrt, der groer ist als
der Level des Knoten v0, wird im dritten KFDD aus Abbildung 3.7 dargestellt. Bei dem
Aufruf von Prozedur CheckEvenPathAssignment fur Knoten v12 zu Knoten v14 wird
in Zeile (5) festgestellt, da der Level von dem low-Nachfolger v15 bereits groer ist als
der Level von v14. Damit wird die Variable found in Zeile (13) auf True gesetzt und die
Prozedur ebenfalls mit True beendet. In Prozedur SetEvenPathAssignment wird die
while-Schleife einmal fur Knoten v12 durchlaufen. In Zeile (3) wird die Belegung a[2] = 0
gesetzt. Anschlieend wird in Zeile (3) zu v15 gewechselt. Dadurch wird die Bedingung der
while-Schleife nicht mehr erfullt und der Knoten v15 wird in Zeile (15) zuruckgegeben.
In dem letzten KFDD wird der Ablauf von Prozedur CheckEvenPathAssignment
noch fur den Fall untersucht, in dem versucht wird, eine Belegung mit einer geraden Anzahl von aktiven Pfaden von Knoten v22 zu dessen DH-Dominator v15 zu nden. Zunachst
wird die Prozedur CheckEvenPathAssignment fur die Knoten v22 , v13, v14 und v15 aufgerufen. In dem letzten Aufruf wird Knoten v15 in Zeile (3) mit OnePath markiert und der
Wert False zuruckgegeben. Im weiteren Verlauf des Aufrufs fur Knoten v14 wird noch die
HIGH-Kante untersucht. Da d4 = S ist, wird in den Zeilen (18) bis (27) untersucht, ob eine
passende Belegung uber die Kante high(v14) gefunden werden kann. Da diese Kante jedoch
zu dem bereits mit OnePath markierten Knoten v15 fuhrt, wird dies in Zeile (23) durch den
Wert False signalisiert. In Zeile (44) wird dann auch v14 mit OnePath markiert und die
Prozedur in Zeile (45) verlassen. In dem Aufruf fur Knoten v13 wird ebenfalls untersucht,
ob uber die HIGH-Kante eine passende Belegung bestimmt werden kann. Da d3 = nD ist
und immer ein Pfad uber low(v13 ) zu v15 aktiv ist, kann dies nur durch einen weiteren aktiven Pfad uber high(v13) erreicht werden. Der Aufruf von CheckOnePathAssignment
in Zeile (31) wird jedoch auch mit False beendet, nachdem der Knoten v25 mit NoPath
markiert wurde. Dadurch wird auch der Aufruf von CheckEvenPathAssignment fur
Knoten v13 mit False beendet, nachdem v13 mit OnePath markiert wurde. Somit wird in
dem Aufruf fur Knoten v22 fortgefahren. Da d2 = pD ist, wird auch hier versucht, einen
weiteren Pfad uber die Kante HIGH (v22) zu aktivieren. Die dazu gestarteten Aufrufe von
CheckOnePathAssignment f
ur die Knoten v23 und v35 werden jedoch auch beide mit
False beendet, wobei beide Knoten mit NoPath markiert werden. Damit wird in dem
Aufruf von CheckEvenPathAssignment fur Knoten v22 dieser Knoten mit OnePath
markiert und die Prozedur liefert False. Damit wird signalisiert, da es keine Belegung
gibt, bei der eine gerade Anzahl von Pfaden zwischen v22 und v15 aktiv ist. Folglich wird
die Prozedur SetEvenPathAssignment nicht aufgerufen.
Die Komplexitat fur die Bestimmung einer Belegung, bei der eine gerade Anzahl von
Pfaden zwischen zwei Knoten aktiv ist, wird in dem folgenden Lemma beschrieben.
Lemma 3.10
= (G; R; Xn; d) ein KFDD und seien vxk ; vyl 2 V zwei Knoten des Graphen
G = (V; E ).SWeiterhin sei V k;l V die Menge aller Knoten aus den Leveln k bis l,
d.h. V k;l = li=k leveli . Dann gilt:
In Zeit O(jV k;l j) O(jjK jj) kann eine Belegung bestimmt werden, fur die entweder
Sei K
kein Pfad oder zwei Pfade von vxk zu vyl aktiv sind, bzw. es kann nachgewiesen werden,
da eine solche Belegung nicht existieren kann.
116
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
Beweis:
Falls wahrend der Bearbeitung von Prozedur CheckEvenPathAssignment aus Algorithmus 3.5 ein rekursiver Aufruf der Prozedur CheckEvenPathAssignment oder
CheckOnePathAssignment den Wert True zur
uckgibt, dann wird kein weiterer Aufruf mehr gestartet, und die aufrufende Instanz von CheckEvenPathAssignment wird
ebenfalls mit True beendet. Damit werden auch alle weiteren in Bearbeitung bendlichen
Aufrufe der Prozedur CheckEvenPathAssignment mit True beendet, ohne weitere
rekursive Aufrufe zu starten.
Auerdem werden sowohl Prozedur CheckEvenPathAssignment als auch Prozedur
CheckOnePathAssignment nur dann mit False beendet, wenn der aktuell bearbeitete Knoten markiert wurde. Nur in diesem Fall kann in den aufrufenden Instanzen
ein weiterer rekursiver Aufruf gestartet werden. Allerdings wird vor jedem moglichen
rekursiven Aufruf uberpruft, ob der zu bearbeitende Knoten bereits markiert ist. In
diesem Fall wird kein rekursiver Aufruf gestartet. Da rekursive Aufrufe auerdem nur
fur solche Knoten moglich sind, deren Level kleiner oder gleich dem Level l von Knoten vyl ist, folgt die Laufzeitschranke von O(jV k;lj) fur die Abarbeitung des Aufrufs von
CheckEvenPathAssignment(K; vxk ; vyl ) inklusive allen rekursiven Aufrufen von den
Prozeduren CheckEvenPathAssignment und CheckOnePathAssignment.
Sofern der Aufruf fur Knoten vxk mit True beendet wurde, wird die Belegung anschlieend
durch Prozedur SetEvenPathAssignment(K; vxk ; vyl ) gesetzt. Falls bei dieser Bearbeitung die Prozedur SetOnePathAssignment nicht aufgerufen wird, dann wird in der
while-Schleife jeder Knoten aus V k;l hochstens einmal besucht. Andernfalls wird Prozedur
SetOnePathAssignment in Zeile (10) f
ur einen Knoten vzs (k < s l) aufgerufen.
Wahrend
Ss 1 der Bearbeitung von SetEvenPathAssignment wurden dann nur Knoten
aus i=k leveli besucht. Bei der Bearbeitung von ProzedurS SetOnePathAssignment
fur Knoten vzs werden nach Lemma 3.9 nur Knoten aus li=s leveli besucht. In beiden
Fallen wird also jeder Knoten aus V k;l hochstens einmal betrachtet. Somit bleibt auch
hier die Laufzeitschranke von O(jV k;lj) erhalten. Die Schranke von O(jjK jj) ergibt sich
wieder, da V k;l eine Teilmenge von V ist.
In dem Fall, da der Knoten vyl ein DH-Dominator von vxk ist, werden durch den Aufruf von
SetEvenPathAssignment(K; vxk ; vyl ) und den daraus resultierenden rekursiven Aufrufen von CheckEvenPathAssignment und CheckOnePathAssignment alle von vxk
erreichbaren Knoten markiert. Sofern ein Knoten nur uber Pfade ohne DH-Kante erreichbar ist, wird er von CheckEvenPathAssignment mit OnePath markiert. Bei einem
Knoten, der nach einer Davio-Dekomposition zerlegt wird und dessen low-Nachfolger mit
OnePath markiert ist, werden alle uber die DH-Kante dieses Knoten erreichbaren Knoten von CheckOnePathAssignment mit NoPath markiert. Durch die Ruckgabe von
False durch den Aufruf von SetEvenPathAssignment fur vxk wird signalisiert, da die
gesuchte Belegung zu dem DH-Dominator vyl nicht existieren kann.
3.4
Vollst
andige Testbarkeit
Durch die in Abschnitt 3.2.3 beschriebene Anpassung des Syntheseverfahrens wird sichergestellt, da die synthetisierten Schaltkreise keine konstanten Signale enthalten. Generell
konnen aber auch in Schaltkreisen ohne konstante Signale redundante stuck-at Fehler
vorkommen. Im folgenden wird jedoch gezeigt, da ein Testmuster fur jeden stuck-at Fehler in einem synthetisierten Schaltkreis bestimmt werden kann. Die dabei bestimmten
Testmuster bilden einen vollstandigen Test.
117

3.4. VOLLSTANDIGE
TESTBARKEIT
Dazu werden die stuck-at Fehler eines synthetisierten Schaltkreises entsprechend ihren
Fehlerorten in verschiedene Klassen eingeteilt. Durch Ausnutzung von A quivalenz- und
Dominanzbeziehungen werden Fehlerklassen identiziert, fur deren Fehler kein eigenes
Testmuster bestimmt werden braucht. Fur die Fehler aus den verbleibenden Klassen wird
dann jeweils ein Verfahren angegeben, mit dem ein Testmuster bestimmt werden kann.
Alle diese Verfahren basieren wieder auf einer Analyse der Graphstruktur des zur Synthese
verwendeten KFDDs. Dabei werden die im letzten Abschnitt vorgestellten Verfahren zur
Bestimmung von aktivierenden Belegungen verwendet.
Die Aufteilung der stuck-at Fehler in verschiedene Klassen wird anhand der Fehlerorte in
den synthetisierten Schaltkreisen vorgenommen. In Abbildung 3.8 sind mogliche Fehlerorte fur einen mit dem vorgestellten Syntheseverfahren erzeugten Schaltkreis dargestellt.
Die Fanoutstamme und Fanoutzweige sind jeweils mit einer Beschriftung versehen, die im
folgenden auch fur die Bezeichnung der entsprechenden Klassen verwendet wird.
fj
F
SK
k,l
dx,y
O
k,l
D
+
E
Ak
Al
Ik
Il
s,l
k,s
dx,z
i,i+1
D
dz,y
N
I
k,l
dx,y
P
U
X
xi
Abbildung 3.8: Klassizierung der Fehlerorte in synthetisierten Schaltkreisen
Alle stuck-at Fehler an den Fanoutstammen, die mit primaren Eingangen verbunden sind,
bilden die X -Klasse. Ein Verfahren zum Bestimmen von Testmustern fur diese Fehler wird
in Abschnitt 3.4.1 vorgestellt.
In einem Teilschaltkreis Di;i+1 zur Realisierung der Abhangigkeiten zwischen Knoten aus
aufeinanderfolgenden Leveln wird das Ausgangssignal eines primaren Eingangs entweder
direkt weitergeleitet oder invertiert. Die Fehler der P -Klasse an den Signalen, die direkt
weitergeleitet werden, brauchen nicht gesondert betrachtet werden, da jeder Fehler dieser
Klasse einem Fehler an einem Eingang eines Teilschaltkreises zur Realisierung der Parity
Matrix Multiplikation entspricht.
118
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
Weiterhin ergibt sich aus Tabelle 3.2, da die Fehler der U -Klasse aquivalent zu Fehlern
aus der N -Klasse sind. Somit mu auch fur die Fehler der U -Klasse kein eigenes Testmuster
bestimmt werden.
Die Fehler der N -Klasse mussen analog zu den Fehlern der P -Klasse auch nicht berucksichtigt werden, da Testmuster hierfur bei der Betrachtung der Eingange eines Teilschaltkreises zur Realisierung der Parity Matrix Multiplikation bestimmt werden.
In einem Teilschaltkreis Di;i+1 zur Realisierung der Abhangigkeiten zwischen Knoten aus
aufeinanderfolgenden Leveln braucht somit fur keinen Fehler ein eigenes Testmuster erzeugt werden. Analog folgt, da auch kein Fehler aus einem Teilschaltkreis Db k;l zur Realisierung der direkten Abhangigkeiten zwischen Knoten aus Level k und l > k +1 betrachtet
werden mu.
Fur einen Teilschaltkreis Dk;l zur Realisierung einer Parity Matrix Multiplikation werden
die Eingange danach unterteilt, ob sie aus Dk;s, Ds;l oder Db k;l kommen. Fur jeden Fehler
aus der Ik -Klasse, Il -Klasse und Ib-Klasse mu ein Testmuster berechnet werden. Dazu
geeignete Verfahren werden in Abschnitt 3.4.2 prasentiert.
Entsprechend werden die Fehler an den Eingangen der AND-Gatter in die Ak -Klasse
und die Al -Klasse unterteilt. Diese Fanoutzweige sind mit den gleichen Signalen verbunden, wie die Fanoutstamme der Fehler aus der zugehorigen Ik -Klasse bzw. Il -Klasse. Bei
den Fehlern an den Fanoutstammen konnen aufgrund von zusatzlich moglichen Rekonvergenzen andere Testmuster existieren als an den Fanoutzweigen. Daher mu auch fur
die Fehler aus der Ak -Klasse und der Al -Klasse jeweils ein Testmuster bestimmt werden.
Eine Beschreibung der dazu notwendigen Verfahren ist in Abschnitt 3.4.3 zu nden.
Der Ausgang jedes AND-Gatters ist nur mit dem Eingang eines EXOR-Gatters verbunden. Die Fehler an diesen Kanten sind in der E -Klasse enthalten. Aus Tabelle 3.2 folgt,
da ein Fehler an dem Ausgang eines AND-Gatters durch den Fehler vom gleichen Typ an
einem Eingang des AND-Gatters dominiert wird. Da fur die Fehler aus der Ak -Klasse und
Al -Klasse bereits Testmuster aufgenommen werden, brauchen die Fehler aus der E -Klasse
bei der Bestimmung eines vollstandigen Tests nicht berucksichtigt werden.
Ein zusatzlicher Eingang fur das EXOR-Gatter kann durch eine direkte Abhangigkeit
d^k;l
angen werden aber bereits in der Ib-Klasse
x;y verursacht werden. Fehler an solchen Eing
berucksichtigt.
Schlielich ist noch der Ausgang jedes EXOR-Gatters zu untersuchen. Es werden zwei
Falle unterschieden. Im ersten Fall entspricht der Ausgang eines EXOR-Gatters dem
Eingang eines anderen Teilschaltkreises zur Realisierung einer Parity Matrix Multiplikation. Dann wird ein Testmuster fur den Fehler der O-Klasse im Rahmen der Bearbeitung
der Ik -Klasse und Il -Klasse aufgenommen. Im zweiten Fall ist der Ausgang eines EXORGatters direkt mit dem Eingang eines primaren Ausgangs verbunden. Dann ist der Fehler
aquivalent zu einem Fehler aus der F -Klasse. Insgesamt mu also fur keinen Fehler aus
der O-Klasse ein eigenes Testmuster bestimmt werden.
Die Fehler an den Eingangen der primaren Ausgange sind in der F -Klasse enthalten. Zum
Erzeugen von Testmustern fur diese Fehler konnen die Methoden aus Abschnitt 3.4.4
verwendet werden.
Bei allen im folgenden vorgestellten Verfahren werden bei der Bestimmung einer Belegung
a = (a1 ; a2 ; : : : ; an ) nur die Eintrage gesetzt, die fur das aktuelle Testmuster notwendig
sind. Falls an den Wert a[i] (i 2 f1; 2; : : : ; ng) keine Anforderungen gestellt werden, ist
die Belegung a sowohl fur a[i] = 0 als auch fur a[i] = 1 ein Testmuster. In diesem Fall hat
a[i] ein don't care, das durch a[i] = X reprasentiert wird.
119

3.4. VOLLSTANDIGE
TESTBARKEIT
dk = S
dk {pD, nD}
X1 j
X1 j
1,k
1,k
P j,x
1,k
Pj
Xk x
1
Xs z
s,n+1
s,n+1
P z,1
s’,n+1
P z’,1
1,k
Pj
Xk x
Xs z
Xs’ z’
P j,x
1
P z,1
1
1
Abbildung 3.9: Bestimmung von Testmustern fur Fehler an primaren Eingangen
3.4.1 Fehler an primaren Eingangen
Ein stuck-at Fehler F = sa(f; e) an dem Ausgang e eines primaren Eingang PI(k) 2 Pin
hat die gleiche Wirkung, als wenn bei jeder Eingangsbelegung, die an den Schaltkreis
angelegt wird, der Wert fur den k-ten primaren Eingang auf f gesetzt wird. Fur eine
Eingangsbelegung a = F(a1; a2 ; : : : ; ak 1; ak ; ak+1; : : : ajPinj) entspricht die fehlerbehaftete
Schaltkreisbelegung vala also genau der Schaltkreisbelegung
fur die Eingangsbelegung
F
a^ = (a1 ; a2 ; : : : ; ak 1 ; f; ak+1 ; : : : ajPin j), d.h. vala = vala^ . Die Einstellbarkeit des Fehlers ist
somit fur jedes Testmuster gesichert, bei dem der Wert fur den k-ten primaren Eingang
auf f gesetzt wird. Um die Propagation sicherzustellen, mu noch dafur gesorgt werden,
da der Unterschied von e zu einem primaren Ausgang PO(F j ) 2 Pout propagiert wird, d.h.
fur den Eingang ej des j -ten primaren Ausgangs mu vala (ej ) = vala^ (ej ) 6= vala (ej ) sein.
In einem KFDD K = (G; R; Xn; d) bedeutet dies, da es von dem Knoten, der die Funktion
des j -ten primaren Ausgangs darstellt, entweder bei Belegung a eine gerade Anzahl aktiver
Pfade und bei Belegung a^ eine ungerade Anzahl aktiver Pfade zu dem terminalen Knoten
mit Label 1 gibt, oder genau umgekehrt. Zur Bestimmung einer solchen Belegung kann
folgendermaen vorgegangen werden (vgl. Abbildung 3.9):
Zunachst mu eine Wurzel vj1 2 R des KFDDs bestimmt werden, fur die es mindestens
einen Pfad zu einem Knoten vxk aus Level k gibt. Dabei ist zu berucksichtigen, da es
einerseits nicht von jeder Wurzel ein Pfad zu einem Knoten aus Level k gibt. Andererseits
120
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
kann aber auch ein Pfad zu einem Knoten aus Level k bestimmt werden, dessen Funktion
nicht von der Variablen xk abhangt. Dies ist dann der Fall, wenn der Knoten S-aquivalent
oder D-aquivalent zu seinem low-Nachfolger ist. In diesem Fall mu ein 1weiterer
Knoten
bestimmt werden, der von der aktuellen Wurzel vj1 uber einen Pfad aus Pj ;k erreichbar ist.
Falls es einen solchen Knoten nicht mehr gibt, wird die nachste Wurzel betrachtet. Nachdem ein passender Knoten vxk in Level1;kk gefunden wurde, mu eine Belegung bestimmt
werden, bei der genau ein Pfad aus Pj;x aktiv ist.
Fur den Fall, da dem Knoten aus Level k der Dekompositionstyp S zugeordnet ist, mu
eine Belegung bestimmt werden, bei der von einem Nachfolger von vxk eine gerade Anzahl
von Pfaden zu dem terminalen Knoten mit Label 1 aktiv ist, wahrend von dem anderen
Nachfolger eine ungerade Anzahl von Pfaden aktiv ist. Damit ist insgesamt einmal eine
gerade Anzahl von Pfaden von vj1 zu dem terminalen Knoten mit Label 1 aktiv und durch
Invertieren von a[k] wird eine ungerade Anzahl von Pfaden aktiv.
Ist dagegen dk 2 fpD; nDg, mu eine Belegung bestimmt werden, bei der von vzs =
high(vxk ) aus genau ein Pfad zu dem terminalen Knoten mit Label 1 aktiv ist. Durch
Wechsel der Belegung fur a[k] von dem Wert, bei dem high(vxk ) nicht aktiv ist, zu dem
Wert, bei dem diese Kante aktiv ist, wird1;kgenau der zusatzliche Pfad aktiv, der aus der
Konkatenation des aktiven Pfades aus Pj , der Kante high(vxk ) und dem aktiven Pfad
aus Pz;s;n1 +1 besteht. Da es keine weiteren aktive Pfade von vj1 zu Knoten aus Level k gibt,
die von xk abhangen, wird durch diesen Wechsel kein anderer Pfad zwischen vj1 und dem
terminalen Knoten mit Label 1 aktiv. Somit andert sich die Gesamtzahl der aktiven Pfade
genau um 1, d.h. war vorher eine gerade Anzahl von Pfaden aktiv, ist nach dem Wechsel
eine ungerade Anzahl von Pfaden aktiv und umgekehrt.
Eine Realisierung des Verfahrens wird in Prozedur TestsForPI aus Algorithmus 3.7
vorgestellt.
In Zeile (1) werden einige Variablen initialisiert. Durch j wird festgelegt, welche Wurzel
des KFDDs aktuell betrachtet wird. v enthalt den jeweils betrachteten Knoten aus Level k.
Durch die Variable found wird protokolliert, ob fur den aktuellen Knoten v eine passende
Belegung gefunden wurde. In Zeile (2) wird eine Belegung a = (a1; a2 ; : : : ; an) mit don't
care Werten initialisiert.
In den Zeilen (3) bis (6) werden die Knoten der Wurzelliste R = (v11; v21; : : : ; vm1 ) 2 V m
(m 2 IN) durchlaufen, bis ein Knoten gefunden wird, von dem es einen Pfad zu einem
Knoten aus Level k gibt. Dabei wird in Zeile (5) die Prozedur FindFirstNode verwendet,
um einen solchen Knoten jeweils fur die aktuelle Wurzel vj1 zu suchen. Die Prozedur
liefert den Wert Null zuruck, falls kein Knoten in Level k erreicht wird. Eine eÆziente
Realisierung fur die Prozedur FindFirstNode wird spater zusammen mit der Prozedur
FindNextNode pr
asentiert.
In den Zeilen (8) bis (19) wird versucht, fur den aktuellen Knoten v eine passende Belegung zu nden. In den Zeilen (9) bis (13) wird der Fall fur dk = S betrachtet, bei
dem eine Belegung bestimmt werden soll, fur die von einem Nachfolger eine gerade Anzahl von Pfaden und von dem anderen Nachfolger eine ungerade Anzahl von Pfaden
zu dem terminalen Knoten mit Label 1 aktiv ist. Dazu wird in Zeile (10) die Prozedur SetDifferentPathAssignment verwendet, die im Anschlu vorgestellt wird.
Falls die beiden Nachfolger von v gleich sind, ist naturlich auch die Anzahl der aktiven
Pfade von den beiden Nachfolgern fur jede Belegung gleich. Dies wird in Zeile (12) direkt durch False signalisiert. Fur dk 2 fpD; nDg wird in Zeile (15) mit der Prozedur
CheckOnePathAssignment u
berpruft, ob es eine Belegung gibt, bei der genau ein
Pfad von high(v) zu dem terminalen Knoten mit Label 1 aktiv ist. Falls diese U berprufung
121

3.4. VOLLSTANDIGE
TESTBARKEIT
Algorithmus 3.7
TestsForPI
( KFDD K , Level k )
// Bestimmt Testmuster fur beide stuck-at Fehler an dem k -tem primaren Eingang
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
(15)
(16)
(17)
(18)
(19)
(20)
(21)
(22)
(23)
(24)
(25)
(26)
(27)
(28)
(29)
(30)
(31)
(32)
(33)
(34)
(35)
(36)
j
= 0; v = Null; f ound = False
for i = 1 to n do a[i] = X od
while (v = Null) ^ (j < jRj) do
j
v
=j+1
=
(K; vj1 ; k)
FindFirstNode
od
while (f ound = False) ^ (v 6= Null) do
if (dk = S ) then
if (low(v) 6= high(v)) then
else
=
f ound = False
f ound
else // dk 2 fpD; nDg)
=
(K; low(v); high(v))
SetDifferentPathAssignment
( high( )
( high( ) )
f ound CheckOnePathAssignment K;
v ; v1n+1
if f ound True then
SetOnePathAssignment K;
v ; v1n+1
(
if
=
)
(f ound = False) then
v=
(K; k)
while (v = Null) ^ (j < jRj) do
j = j +1
v=
(K; vj1 ; k)
FindNextNode
od
FindFirstNode
od
if (f ound = True) then
(K; vj1 ; v)
(K; vj1 ; v)
CheckOnePathAssignment
SetOnePathAssignment
[ ] = 0; T = T [ fag
[ ] = 1; T = T [ fag
return(True)
return(False)
ak
ak
else
)
122
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
erfolgreich abgeschlossen wurde, konnen die notwendigen Eintrage durch den Aufruf von
Prozedur SetOnePathAssignment in Zeile (17) gesetzt werden.
Sofern fur den aktuellen Knoten v keine passende Belegung gefunden wurde, wird in den
Zeilen (21) bis (25) ein neuer Knoten auf Level k bestimmt. Dazu wird in Zeile (21) mit
der Prozedur FindNextNode versucht, einen weiteren Knoten zu nden, der von der
aktuellen Wurzel aus erreichbar ist. Falls dies nicht gelingt, wird in den Zeilen (22) bis
(25) analog zu den Zeilen (3) bis (6) uberpruft, ob von einer anderen Wurzel ein weiterer
Knoten aus Level k erreichbar ist. Dabei werden Knoten, die bereits von anderen Wurzeln
erreicht wurden, nicht erneut zuruckgeliefert.
Solange keine passende Belegung gefunden wurde und es einen weiteren Knoten aus Level
k gibt, wird die while-Schleife von Zeile (7) bis Zeile (27) wiederholt.
Ein Abbruch der while-Schleife erfolgt entweder, nachdem eine passende Belegung fur
den aktuellen Knoten v gefunden wurde. Dann wird in den Zeilen (29) und (30) noch eine
Belegung bestimmt, bei der genau ein Pfad von der aktuellen Wurzel vj1 zu v aktiv ist. Die
Testmuster fur den stuck-at-0 und den stuck-at-1 Fehler an dem primaren Eingang ergeben
sich durch Setzen von a[k] = 0 und a[k] = 1. In den Zeilen (31) und (32) werden diese
Testmuster in eine Menge T aufgenommen, in der alle Testmuster fur einen vollstandigen
Test des Schaltkreises gesammelt werden.
Wurde die while-Schleife abgebrochen, weil kein Knoten aus Level k mehr existiert, der
noch nicht untersucht wurde, mussen alle durch das KFDD dargestellten Funktionen von
xk unabhangig sein. Dieser Fall sollte jedoch bereits vor dem Beginn der Synthese uberpruft werden und entsprechende Variablen gegebenenfalls entfernt werden. In dem vorgestellten Syntheseverfahren wird ansonsten nur der primare Eingang und ein zugehoriges
Signal erzeugt. Da in Level k entweder keine Knoten existieren oder die Abhangigkeiten
aller Knoten aus Level k zu anderen Knoten konstant 0 bzw. konstant 1 sind, wird das
Signal an keinem Gatter als Eingang verwendet.
Bevor die Komplexitat von Prozedur TestsForPI analysiert wird, werden zunachst die
Prozeduren FindFirstNode, FindNextNode und SetDifferentPathAssignment
untersucht.
In Algorithmus 3.8 werden die beiden Prozeduren FindFirstNode und FindNextNode
prasentiert, mit denen alle Knoten aus Level k aufgezahlt werden konnen, die von einer
vorgegebenen Menge an Startknoten aus erreichbar sind.
Dazu wird ein Stack verwendet, der jeweils die Knoten des Pfades enthalt, uber die der
aktuelle Knoten erreicht wurde. Der Stack wird in der Prozedur FindFirstNode initialisiert. Dabei wird ein Knoten in Zeile (2) nur dann in den Stack aufgenommen, wenn der
Knoten nicht bereits in einem Level liegt, der groer als k ist, und wenn der Knoten noch
nicht markiert wurde. Falls ein Knoten in den Stack eingefugt wurde, wird in Zeile (3)
direkt mit Prozedur FindNextNode der erste erreichbare Knoten bestimmt. Ansonsten
wird durch die Ruckgabe von Null in Zeile (5) signalisiert, da von dem Knoten r aus
kein neuer Knoten aus Level k mehr erreicht werden kann.
In der Prozedur FindNextNode wird zunachst uberpruft, ob noch ein Knoten in dem
Stack enthalten ist. Falls dies der Fall ist, wird dieser Knoten in Zeile (2) zugewiesen
und die Suche nach einem weiteren Knoten aus Level k von diesem Knoten aus gestartet.
Durch die while-Schleife in Zeile (3) wird die Suche so lange fortgesetzt, bis ein Knoten aus
Level k erreicht wird. Dazu wird in den Zeilen (4) bis (10) uberpruft, ob ein Nachfolger
von dem aktuellen Knoten existiert, dessen Level nicht groer als k ist und der noch
nicht besucht wurde. Wird ein solcher Knoten gefunden, wird er in Zeile (6) bzw. (10)
zugewiesen und die Suche von diesem Knoten aus fortgesetzt. Andernfalls kann von dem
123

3.4. VOLLSTANDIGE
TESTBARKEIT
Algorithmus 3.8
FindFirstNode
( KFDD K , Knoten r, Level k )
// Initialisiert den Stack mit r und sucht den ersten Knoten aus Level k ,
// der von r aus erreichbar ist und bisher noch nicht besucht wurde.
(1)
(2)
(3)
(4)
(5)
(6)
if
(index(r) k) ^ (r ist nicht mit Visited markiert) then
(r )
return(
(K; k))
Stack.Push
else
FindNextNode
return(Null)
FindNextNode
( KFDD K , Level k )
// Sucht den nachsten Knoten aus Level k , der von dem obersten Knoten
// des Stacks erreichbar ist und bisher noch nicht besucht wurde.
(1) if (
()) then return(Null)
(2)
else v =
() (3) while (index(v) < k) do
(4)
if (index(low(v)) k) ^ (low(v) ist nicht mit Visited markiert) then
(5)
(low(v))
(6)
v = low(v )
(7)
else
(8)
if (index(high(v)) k) ^ (high(v) ist nicht mit Visited markiert) then
(9)
(high(v))
(10)
v = high(v )
(11)
else
(12)
()
(13)
Markiere v mit Visited
(14)
if (
()) then return(Null)
(15)
else v =
() (16)
(17)
(18) od
(19)
()
(20) Markiere v mit Visited
(21) return(v)
Stack.IsEmpty
Stack.Top
Stack.Push
Stack.Push
Stack.Pop
Stack.IsEmpty
Stack.Top
Stack.Pop
aktuellen Knoten kein neuer Knoten auf Level k mehr erreicht werden. Deshalb wird der
Knoten selbst in Zeile (12) aus dem Stack entfernt und in Zeile (13) markiert. In den
Zeilen (14) und (15) wird analog zu den Zeilen (1) und (2) uberpruft, ob der Stack einen
weiteren Knoten enthalt, von dem aus die Suche fortgesetzt werden kann.
Wird in der while-Schleife ein Knoten auf Level k gefunden, so wird dieser in Zeile (19)
aus dem Stack entfernt und in Zeile (20) markiert, damit er bei dem nachsten Aufruf von
FindNextNode nicht erneut betrachtet wird. Schlielich wird dieser Knoten in Zeile
(21) an die aufrufende Prozedur zuruckgegeben.
Falls der Stack zu einem Zeitpunkt leer ist, liefert die Prozedur den Wert Null zuruck.
Damit wird signalisiert, da kein neuer Knoten aus Level k mehr erreicht werden kann.
Mit einem weiteren Aufruf von FindFirstNode kann die Suche jedoch mit einem neuen
Startknoten fortgesetzt werden.
124
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
Die Komplexitat fur die Aufzahlung aller Knoten aus einem Level, die von einer vorgegebenen Menge an Startknoten aus erreichbar ist, wird durch das folgende Lemma
beschrieben.
Lemma 3.11
Sei K = (G; R; Xn; d) ein KFDD und sei fv1 ; v2 ; : : : ; vm g V eine Teilmenge der
Knoten des Graphen G = (V; E ) sowie k 2 f1; 2; : : : ; n + 1g. Dann gilt:
In Zeit O(jjK jj) konnen die Knoten aus Level k aufgezahlt werden, die von einem
Knoten aus fv1 ; v2 ; : : : ; vm g erreichbar sind.
Beweis:
Da in den Zeilen (5) und (9) von Prozedur FindNextNode nur Nachfolger des aktuellen
Knoten in den Stack eingefugt werden, enthalt der Stack immer nur Knoten mit steigendem Index. Deshalb kann zu einem Zeitpunkt ein Knoten nicht zweimal in dem Stack
enthalten sein. Auerdem werden alle Knoten, die aus dem Stack entfernt werden, durch
Visited markiert. Da nur unmarkierte Knoten in den Stack eingefugt werden, kann ein
Knoten also auch nicht zweimal hintereinander in den Stack eingefugt werden. Damit kann
die while-Schleife uber alle Aufrufe der Prozedur FindNextNode nur O(jV j) O(jjK jj)
mal durchlaufen werden.
In Zeile (10) von TestsForPI wird die Prozedur SetDifferentPathAssignment
verwendet, um fur zwei Nachfolger eines Knoten mit Dekompositionstyp S eine Belegung
zu bestimmen, bei der von einem Nachfolger eine gerade Anzahl von Pfaden und von
dem anderen Nachfolger eine ungerade Anzahl von Pfaden zu dem terminalen Knoten
mit Label 1 aktiv ist. Diese Prozedur ist in Algorithmus 3.9 angegeben.
Innerhalb dieser Prozedur wird die Markierung Zero verwendet, mit der alle Knoten des
KFDDs markiert sind, mit denen die konstante Funktion 0 dargestellt wird. Aus Denition 1.11 ergibt sich, da ein Knoten genau dann die konstante Funktion 0 darstellt, wenn
seine beiden Nachfolger ebenfalls die konstante Funktion 0 darstellen. Das Markieren der
Knoten mit Zero kann also durch eine einfache depth rst search-Traversierung erfolgen.
Bei einem Aufruf der Prozedur SetDifferentPathAssignment durch die Prozedur
TestsForPI k
onnen als Parameter zwei Knoten aus unterschiedlichen Leveln ubergeben werden. Bei den rekursiven Aufrufen in den Zeilen (17) und (40) hingegen sind die
beiden Knoten immer aus dem gleichen Level. Dementsprechend wird in den Zeilen (1)
bis (8) unterschieden, wie die Knoten voben und vunten bestimmt werden. Sind die Knoten
bereits aus unterschiedlichen Leveln, dann wird in den Zeilen (2) und (3) der Knoten aus
dem kleineren Level durch voben und der Knoten mit dem groeren Level durch vunten
bezeichnet. Andernfalls werden in Zeile (4) zunachst die Falle uberpruft, in denen zwei
terminale Knoten aus Level n + 1 ubergeben wurden und die Prozedur mit dem entsprechenden Ruckgabewert beendet. Falls innere Knoten ubergeben wurden, wird in Zeile (5)
die Belegung zunachst so gewahlt, da jeweils nur die LOW-Kante von den beiden ubergebenen Knoten aktiv ist. In den Zeilen (6) und (7) wird der Knoten von low(v1 ) und
low(v2 ) mit dem kleineren Level durch voben und der andere Knoten durch vunten bezeichnet. Hierbei ist es jedoch auch moglich, da die beiden low-Nachfolger in dem gleichen
Level liegen.
In den Zeilen (9) bis (27) wird versucht, fur die beiden Knoten voben und vunten die gesuchte
Belegung zu nden. Dazu wird in Zeile (9) zunachst anhand der Markierung Zero uberpruft, ob der Knoten vunten nicht die konstante Funktion 0 darstellt. Ist dies gewahrleistet,
wird in Zeile (10) durch den Aufruf von CheckEvenPathAssignment weiterhin uber-

3.4. VOLLSTANDIGE
TESTBARKEIT
125
Algorithmus 3.9
SetDifferentPathAssignment
( KFDD K , Knoten v1 , Knoten v2 )
// Setzt Eintrage in Belegung a, so da von einem Knoten genau ein Pfad und von dem anderen
// Knoten eine gerade Anzahl von Pfaden zu dem terminalen Knoten mit Label 1 aktiv ist.
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
(15)
(16)
(17)
(18)
(19)
(20)
(21)
(22)
(23)
(24)
(25)
(26)
(27)
(28)
(29)
(30)
(31)
(32)
(33)
(34)
(35)
(36)
(37)
(38)
(39)
(40)
(41)
(42)
(43)
(44)
(45)
(46)
(47)
(index(v1 ) 6= index(v2 )) then
if (index(v1 ) < index(v2 )) then voben = v1 ; vunten = v2
else voben = v2 ; vunten = v1 else if (index(v1 )= n + 1) then if (v1 = v2 ) then return(False) else return(True) if (dindex(v ) = nD) then a[index(v1 )] = 1 else a[index(v1 )] = 0 if (index(low(v1 )) index(low(v2 ))) then voben = low(v1 ); vunten = low(v2 )
else voben = low(v2 ); vunten = low(v1 ) if (vunten ist nicht mit
markiert) then
if (
(K; voben ; vunten) = True) then
vende =
(K; voben ; vunten )
if (vende = vunten ) then
(K; vunten ; vn1 +1 )
(K; vunten ; vn1 +1 )
return(True)
else
(K; vende ; vunten )
return(True)
if
1
Zero
CheckEvenPathAssignment
SetEvenPathAssignment
CheckOnePathAssignment
SetOnePathAssignment
SetDifferentPathAssignment
else
if
(voben ist nicht mit
Zero
markiert) then
(K; voben ; vn1 +1 )
(K; voben ; vn1 +1)
CheckOnePathAssignment
SetOnePathAssignment
if
if
if
return(True)
(index(v1 ) 6= index(v2 )) return(False)
(dindex(v ) = nD) then a[index(v1 )] = 0 else a[index(v1 )] = 1 (index(high(v1 )) index(high(v2))) then voben = high(v1 ); vunten = high(v2 )
else voben = high(v2 ); vunten = high(v1 ) if (vunten ist nicht mit
markiert) then
(K; voben ; vunten )
vende =
(K; voben ; vunten)
if (vende = vunten ) then
(K; vunten ; vn1 +1 )
(K; vunten ; vn1 +1)
return(True)
else
(K; vende ; vunten )
return(True)
1
Zero
CheckEvenPathAssignment
SetEvenPathAssignment
CheckOnePathAssignment
SetOnePathAssignment
SetDifferentPathAssignment
else
(K; voben ; vn1 +1 )
(K; voben ; vn1 +1)
CheckOnePathAssignment
SetOnePathAssignment
return(True)
126
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
pruft, ob es eine Belegung gibt, bei der eine gerade Anzahl von Pfaden von voben zu vunten
aktiv ist. Falls auch diese U berprufung erfolgreich abgeschlossen wurde, wird die zugehorige Belegung in Zeile (11) bestimmt. Dabei konnen die zwei Falle auftreten, da entweder
zwei Pfade von voben zu vunten aktiv sind, oder kein Pfad aktiv ist. Der erste Fall ist daran
zu erkennen, da der in Zeile (11) gelieferte Knoten vende gleich dem Knoten vunten ist.
Da Knoten vunten nicht mit Zeronmarkiert
ist, ist sichergestellt, da es mindestens einen
+1
Pfad zu dem terminalen Knoten v1 mit Label 1 gibt. In Zeile (13) werden die notwendigen Markierungen durch Prozedur CheckOnePathAssignment gesetzt. In Zeile (14)
werden anschlieend in der Belegung die notwendigen Eintrage durch einen Aufruf von
SetOnePathAssignment gesetzt, um sicherzustellen, da genau ein Pfad von vunten zu
dem Knoten
v1n+1 aktiv ist. Damit ist von vunten genau ein Pfad und von voben sind zwei
Pfade zu v1n+1 aktiv. Somit kann die Prozedur SetDifferentPathAssignment in Zeile
(15) beendet werden.
In dem Fall, da bei der in Zeile (11) bestimmten Belegung kein Pfad von voben zu vunten
aktiv ist, wird durch vende der Knoten geliefert, zu dem genau ein Pfad von Knoten voben
aktiv ist. Fur die in Zeile (10) von Prozedur TestsForPI betrachteten Knoten low(v)
und high(v) ist bei der bisher festgelegten Belegung also entweder genau ein Pfad von
low(v) zu vunten und genau ein Pfad von high(v) zu vende aktiv oder aber es ist genau ein
Pfad von low(v) zu vende und genau ein Pfad von high(v) zu vunten aktiv. Durch einen
rekursiven Aufruf von SetDifferentPathAssignment in Zeile (17) fur die beiden
Knoten vunten und vende wird dann eine Belegung bestimmt, bei der von einem Knoten
eine gerade Anzahl
von Pfaden und von dem anderen Knoten eine ungerade Anzahl von
n+1
Pfaden zu v1 aktiv ist. Da die beiden Knoten vunten und vende aus dem gleichen Level
sind, mussen sie unterschiedliche Funktionen darstellen. Damit mu es eine Belegung
geben, bei der es von dem einen Knoten eine
gerade Anzahl und von dem anderen Knoten
eine ungerade Anzahl aktiver Pfade zu v1n+1 gibt. Daher wird der rekursive Aufruf von
SetDifferentPathAssignment in Zeile (17) erfolgreich abgeschlossen, und in Zeile
(18) kann der aktuelle Aufruf von SetDifferentPathAssignment ebenfalls mit True
beendet werden.
Falls die Knoten voben und vunten bei dem Aufruf von CheckEvenPathAssignment
in Zeile (10) die gleiche Funktion darstellen, wird dieser Aufruf der Prozedur mit False
beendet. Da in diesem Fall keine Belegung existiert, bei der von dem einen Knoten eine
gerade Anzahl und von dem anderen Knoten eine ungerade Anzahl von Pfaden zu v1n+1
aktiv ist, gibt es hierfur keinen else-Fall.
Wurde in Zeile (9) festgestellt, da der Knoten vunten die konstante Funktion 0 reprasentiert und es somit keinen Pfad von vunten zu dem terminalen Knoten mit Label 1 gibt,
dann kann die gesuchte Belegung einfach so bestimmt werden, da genau ein Pfad von
voben zu dem terminalen Knoten mit Label 1 aktiv ist. Die Existenz einer solchen Belegung
ist naturlich nur dann gewahrleistet, wenn Knoten voben nicht auch die konstante Funktion
0 reprasentiert. Dies wird in Zeile (22) u
berpruft. Falls voben nicht die konstante Funktion
0 reprasentiert, dann werden in Zeile (23) die notwendigen Markierungen durch Prozedur CheckOnePathAssignment gesetzt, und in Zeile (24) wird die Belegung durch
einen Aufruf von SetOnePathAssignment gesetzt. Danach wird der aktuelle Aufruf
von SetDifferentPathAssignment in Zeile (25) mit True beendet. Ist auch der Knoten voben mit Zero markiert, dann
gibt es sowohl von dem Knoten voben als auch von dem
Knoten vunten keinen Pfadn+1zu v1n+1. Damit kann von keinem Knoten aus eine ungerade
Anzahl von Pfaden zu v1 aktiv werden, so da es auch fur die Abfrage in Zeile (22)
keinen else-Fall gibt.

3.4. VOLLSTANDIGE
TESTBARKEIT
127
Entsprechend der Unterscheidung in Zeile (1) nach den Leveln der ubergebenen Knoten
v1 und v2 werden die Zeilen (9) bis (27) entweder direkt fur diese Knoten, oder aber
fur deren low-Nachfolger bearbeitet. Wurden die Knoten direkt bearbeitet und bisher
noch keine passende Belegung bestimmt, dann wird der aktuelle Aufruf von Prozedur
SetDifferentPathAssignment in Zeile (28) mit False beendet.
Sofern in den Zeilen (9) bis (27) die low-Nachfolger der ubergebenen Knoten bearbeitet
wurden und noch keine Belegung gefunden wurde, kann die gesuchte Belegung fur die
Knoten bestimmt werden, die uber die HIGH-Kanten von v1 und v2 erreichbar sind. In
Zeile (29) wird dazu die vorher in Zeile (5) gesetzte Belegung so geandert, da jeweils
die HIGH-Kante aktiv ist. Anschlieend werden in den Zeilen (30) und (31) die beiden
high-Nachfolger analog zu den Zeilen (6) und (7) entsprechend ihrem Level den Knoten
voben und vunten zugewiesen.
Die Zeilen (32) bis (47) sind gleich zu den Zeilen (9) bis (27), wobei fur den Aufruf von
Prozedur CheckEvenPathAssignment in Zeile (33) keine U berprufung des Ruckgabewertes vorgenommen wird und die U berprufung, ob voben mit Zero markiert ist, vor dem
Aufruf von Prozedur CheckOnePathAssignment in Zeile (44) entfallt. Dies ist nicht
notig, da die Zeilen (9) bis (27) nur dann ohne gultige Belegung fur die low-Nachfolger
der ubergebenen Knoten v1 und v2 beendet werden, wenn die beiden low-Nachfolger die
gleiche Funktion darstellen. Da die Prozedur SetDifferentPathAssignment aber nur
dann fur Knoten aus dem gleichen Level aufgerufen wird, wenn diese nicht identisch sind,
mussen die durch die high-Nachfolger von v1 und v2 dargestellten Funktionen unterschiedlich sein.
Der Aufwand fur die Abarbeitung der Prozedur SetDifferentPathAssignment fur
zwei Knoten kann durch die Groe des KFDDs abgeschatzt werden.
Lemma 3.12
Sei K = (G; R; Xn ; d) ein KFDD und seien v1 ; v2 2 V zwei unterschiedliche Knoten
des Graphen G = (V; E ). Dann gilt:
In Zeit O(jjK jj) kann eine Belegung bestimmt werden, bei der:
Beweis:
entweder eine gerade Anzahl von Pfaden von v1 und eine ungerade Anzahl von
Pfaden von v2 zu dem terminalen Knoten mit Label 1 aktiv ist
oder eine ungerade Anzahl von Pfaden von v1 und eine gerade Anzahl von
Pfaden von v2 zu dem terminalen Knoten mit Label 1 aktiv ist.
Nach einem rekursiven Aufruf der Prozedur SetDifferentPathAssignment in Zeile
(17) bzw. in Zeile (40) wird der aktuelle Aufruf der Prozedur jeweils direkt in Zeile (18)
bzw. in Zeile (41) mit True beendet. Damit werden auch alle weiteren zu dieser Zeit
in Bearbeitung bendlichen Instanzen von SetDifferentPathAssignment mit True
beendet, ohne weitere Prozeduren zu starten. Es mu demnach nur gezeigt werden, da
die Rekursionstiefe beschrankt ist.
Bei dem ersten Aufruf von Prozedur SetDifferentPathAssignment konnen die zwei
ubergebenen Knoten v1 und v2 aus verschiedenen Leveln sein. Bei allen daraus resultierenden rekursiven Aufrufen von SetDifferentPathAssignment in Zeile (17) bzw. in
Zeile (40) sind die dabei ubergebenen Knoten vende und vunten aus dem gleichen Level, da
Knoten vende durch den Aufruf von SetEvenPathAssignment(K; voben; vunten) in Zeile
128
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
(11) bzw. in Zeile (34) bestimmt wird. Wird SetDifferentPathAssignment jedoch
mit zwei Knoten v1 und v2 aufgerufen, die aus dem gleichen Level l sind, dann werden die
Knoten voben und vunten entweder als die low-Nachfolger oder als die high-Nachfolger von
den Knoten v1 und v2 bestimmt. In beiden Fallen ist der Level von voben und vunten echt
groer als l. Damit ist auch der Level von Knoten vende echt groer als l. Da der Level
der ubergebenen Knoten also mit der Rekursionstiefe ansteigt und in jeder Rekursionsstufe nur hochstens ein weiterer rekursiver Aufruf erfolgt, kann kein Knoten mehrmals als
Argument fur die Prozedur SetDifferentPathAssignment ubergeben werden. Somit
sind die rekursiven Aufrufe mit der Anzahl der Knoten durch O(jjK jj) begrenzt.
Innerhalb der Prozedur SetDifferentPathAssignment werden einerseits die beiden
Prozeduren CheckOnePathAssignment und SetOnePathAssignment verwendet.
Allerdings wird der aktuelle Aufruf von SetDifferentPathAssignment nach einem
Aufruf dieser Prozeduren immer mit True beendet. Damit werden auch alle weiteren zur
Zeit in Bearbeitung bendlichen Instanzen von SetDifferentPathAssignment mit
True beendet, ohne weitere Aufrufe einer der Prozeduren CheckOnePathAssignment,
SetOnePathAssignment oder SetDifferentPathAssignment zu starten. Somit
kann in der gesamten Bearbeitung eines Aufrufs von SetDifferentPathAssignment
mit allen darin gestarteten rekursiven Aufrufen hochstens einmal ein Aufruf der Prozeduren CheckOnePathAssignment und SetOnePathAssignment gestartet werden.
Nach Lemma 3.4 ist die Laufzeit dafur durch O(jjK jj) gegeben.
Auerdem werden noch die Prozedur CheckEvenPathAssignment und die Prozedur
SetEvenPathAssignment in der Realisierung von SetDifferentPathAssignment
verwendet. In einem Aufruf von SetDifferentPathAssignment konnen diese Prozeduren jeweils zweimal aufgerufen werden. Dabei werden nach Lemma 3.10 nur die Knoten
aus den Leveln besucht, die zwischen dem Level von Knoten voben und dem Level von
Knoten vunten liegen. Bei einem weiteren Aufruf der Prozeduren innerhalb eines rekursiven
Aufrufs von Prozedur SetDifferentPathAssignment ist der Level von voben aber mindestens so gro wie der Level von vunten in der vorherigen Rekursionsstufe. Daher ist auch
der Gesamtaufwand fur alle Aufrufe der Prozeduren CheckEvenPathAssignment
und SetEvenPathAssignment, die wahrend der gesamten rekursiven Bearbeitung eines Aufrufs von Prozedur SetDifferentPathAssignment gestartet werden, durch
O(jjK jj) begrenzt.
Da der Aufwand fur die depth rst search-Traversierung zum Markieren der Knoten mit
Zero auch durch Zeit O (jjK jj) beschr
ankt ist, folgt die Laufzeitschranke von O(jjK jj)
fur den Gesamtaufwand zur Bestimmung der gesuchten Belegung.
In dem folgenden Satz wird die Komplexitat von Prozedur TestsForPI untersucht. Da
bisher keine Eigenschaften der synthetisierten Schaltkreise ausgenutzt wurden, gilt dieser
Satz fur beliebige Schaltkreisrealisierungen.
Satz 3.13
= (G; R; Xn; d) ein KFDD mit der Wurzelliste R = (v11; v21; : : : ; vm1 ) und sei
SK = (G ; typ; I=O) ein Schaltkreis, der die von K dargestellte Boolesche Funktion
f = (fv ; fv ; : : : ; fvm ) 2 Bn;m realisiert. Dann gilt:
In Zeit O(jjK jj) kann ein Testmuster fur den stuck-at-0 Fehler und ein Testmuster
fur den stuck-at-1 Fehler an dem Fanoutstamm bestimmt werden, der mit dem k-ten
primaren Eingang (k 2 f1; 2; : : : ; ng) von SK verbunden ist, falls wenigstens eine
Funktion fvj (j 2 f1; 2; : : : ; mg) von Variable xk abhangt.
Sei K
1
1
1
2
1
1
129

3.4. VOLLSTANDIGE
TESTBARKEIT
Beweis:
In der Prozedur TestsForPI aus Algorithmus 3.7 benotigt das Setzen der Variablen
in Zeile (1) konstante Zeit. Die Initialisierung der Belegung in Zeile (2) benotigt weitere
O(n) O(jjK jj) Schritte.
Danach werden alle von den Knoten der Wurzelliste R aus erreichbaren Knoten aus Level
k aufgezahlt. Der erste erreichbare Knoten wird dabei in den Zeilen (3) bis (6) bestimmt.
Alle weiteren Knoten werden durch die Zeilen (21) bis (25) aufgezahlt. Nach Lemma 3.11
ist der Gesamtaufwand dafur durch Zeit O(jjK jj) beschrankt.
Falls dk = S ist, dann wird in Zeile (9) fur jeden der durch die while-Schleife aufgezahlten
Knoten uberpruft, ob die LOW-Kante und die HIGH-Kante zum gleichen Knoten fuhren.
Ist dies der Fall, wird mit der Aufzahlung fortgefahren. Da mindestens eine Funktion fvj
von xk abhangt, wird ein Knoten v erreicht, bei dem die beiden ausgehenden Kanten zu
unterschiedlichen Knoten low(v) und high(v) fuhren. Fur diese beiden Knoten wird in
Zeile (10) die Prozedur SetDifferentPathAssignment aufgerufen, um eine Belegung
zu bestimmen, bei der von einem Knoten aus eine gerade Anzahl von Pfaden und von
dem anderen Knoten aus eine ungerade Anzahl von Pfaden zu dem terminalen Knoten mit
Label 1 aktiv ist. Durch die Abfrage in Zeile (9) wird bereits sichergestellt, da die beiden
Knoten low(v) und high(v) unterschiedlich sind und sie somit nicht die gleiche Funktion
reprasentieren konnen, falls sie aus dem gleichen Level sind. Auerdem existiert in einem
D-vollstandigen, quasi-reduzierten KFDD kein Knoten v, bei dem die beiden Nachfolger
low(v) und high(v) in verschiedenen Leveln liegen aber die gleiche Funktion reprasentieren.
Daher ist sichergestellt, da der Aufruf von Prozedur SetDifferentPathAssignment
in Zeile (10) mit True beendet und somit die while-Schleife beendet wird. Der Aufwand
zum Bestimmen der Belegung in Zeile (10) ist nach Lemma 3.12 ebenfalls durch O(jjK jj)
beschrankt.
Fur den Fall, da dk 2 fpD; nDg ist, wird in Zeile (15) fur jeden der aufgezahlten Knoten
die Prozedur CheckOnePathAssignment aufgerufen. Dadurch wird uberpruft, ob es
eine Belegung gibt, bei der genau ein Pfad von dem high-Nachfolger zu dem terminalen Knoten mit Label 1 aktiv ist. Nach Lemma 3.9 kann aber bereits ein Aufruf dieser
Prozedur O(jjK jj) Schritte benotigen. Der Gesamtaufwand fur alle Aufrufe von Prozedur
CheckOnePathAssignment, die w
ahrend der gesamten Bearbeitung eines Aufrufs von
Prozedur TestsForPI aufgerufen werden, kann jedoch durch O(jjK jj) begrenzt werden.
Da bei den Aufrufen von CheckOnePathAssignment in Zeile (15) jeweils solche Belegungen gesucht werden, bei denen genau ein Pfad zu dem terminalen Knoten mit Label 1
aktiv ist, konnen anstelle der Markierungen NoPath und OnePath die Markierungen Zero
und One verwendet werden, die wahrend der Bearbeitung der while-Schleife in Prozedur
TestsForPI nicht gel
oscht werden. Wie bereits in dem Beweis von Lemma 3.9 beschrieben wurde und spater im Rahmen von Lemma 3.17 noch diskutiert werden wird, ist damit sichergestellt, da fur jeden Knoten des KFDDs hochstens ein rekursiver Aufruf von
CheckOnePathAssignment gestartet wird, der mit False beendet wird. Nachdem Prozedur CheckOnePathAssignment in Zeile (15) einmal den Wert True zuruckliefert,
wird in Zeile (17) noch die entsprechende Belegung durch SetOnePathAssignment
gesetzt. Auch dies ist nach Lemma 3.9 in Zeit O(jjK jj) moglich. Das Erreichen eines
passenden Knoten ist wieder gewahrleistet, weil mindestens eine Funktion fvj von xk
abhangt. Nachdem die Zeilen (15) bis (18) fur diesen Knoten durchlaufen wurden, wird
die while-Schleife wieder abgebrochen.
Nachdem die while-Schleife beendet ist, werden in den Zeilen (29) und (30) noch die
Prozeduren CheckOnePathAssignment und SetOnePathAssignment aufgerufen,
1
1
130
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
um die Belegung zu bestimmen, bei der genau ein Pfad von einer Wurzel zu dem aktuellen
Knoten aktiv ist. Aus Lemma 3.9 ergibt sich, da der Zeitbedarf auch hierfur durch
O(jjK jj) beschrankt ist.
Der Ablauf der vorgestellten Algorithmen zur Bestimmung von Testmustern fur die stuckat Fehler an den primaren Eingangen wird an folgendem Beispiel veranschaulicht.
Beispiel 3.9
In Abbildung 3.10 ist ein KFDD und der daraus synthetisierte Schaltkreis dargestellt.
Bei dem Aufruf von Prozedur TestsForPI fur Level 1 wird durch den Aufruf von
FindFirstNode in Zeile (5) direkt die Wurzel v11 aus Level 1 zur
uckgegeben. Da d1 = S
ist und der uber die LOW-Kante erreichbare Knoten v13 ungleich dem uber die HIGHKante erreichbaren Knoten v12 ist, wird in Zeile (10) von TestsForPI die Prozedur
SetDifferentPathAssignment f
ur diese beiden Knoten aufgerufen.
Innerhalb dieses Aufrufs von SetDifferentPathAssignment wird in Zeile (9) festgestellt, da v13 nicht die konstante Funktion 0 darstellt. Deshalb wird in Zeile (10) uberpruft,
ob es eine Belegung gibt, bei der eine gerade Anzahl von Pfaden von v12 zu v13 aktiv ist. Da
dies der Fall ist, wird in Zeile (11) durch die Prozedur SetEvenPathAssignment die
Belegung a[2] = 1 gesetzt, wodurch nur die LOW-Kante zu Knoten v23 aktiv wird. Dieser
Knoten wird als vende zuruckgeliefert. Da er von v13 verschieden ist, erfolgt in Zeile (17)
ein rekursiver Aufruf von Prozedur SetDifferentPathAssignment mit den beiden
Knoten v13 und v23.
Wahrend dieses rekursiven Aufrufs werden zunachst die beiden uber die LOW-Kanten
erreichbaren Knoten untersucht. Da d3 = pD ist, wird in Zeile (5) der Wert fur die Belegung a[3] = 0 gesetzt. Fur Knoten v13 und v23 fuhren diese Kanten beide zu Knoten
v14 , so da sowohl voben = v14 als auch vunten = v14 ist. Nach der erfolgreichen U berprufung in Zeile (9), da v14 nicht die konstante Funktion 0 darstellt, wird der Aufruf
von CheckEvenPathAssignment in Zeile (10) fur die zwei gleichen Knoten direkt mit
False beendet. Danach werden die HIGH-Kanten von den Knoten v13 und v23 untersucht.
Dazu wird der Eintrag a[3] in Zeile (29) auf den Wert a[3] = 1 geandert. U ber die HIGHKanten werden die Knoten vunten = v25 und voben = v24 erreicht. Da vunten der terminale
Knoten mit Label 0 ist, wird die Bedingung aus Zeile (32) nicht erfullt und zu Zeile (44)
verzweigt. Dort wird in den Zeilen (44) und (45) die Belegung a[4] = 0 bestimmt, bei der
die LOW-Kante von v24 zu dem terminalen Knoten v15 mit Label 1 aktiv ist.
In Zeile (46) wird der rekursive Aufruf von SetDifferentPathAssignment beendet,
der in Zeile (17) gestartet wurde. In Zeile (18) wird auch dieser Aufruf der Prozedur mit
True beendet, wodurch in Zeile (10) von Prozedur TestsForPI der Wert fur Variable
found auf True gesetzt wird. Damit wird die while-Schleife in Prozedur TestsForPI
beendet und die Zeilen (29) bis (33) bearbeitet. Da die Wurzel v11 bereits aus dem untersuchten Level 1 ist, wird in den Zeilen (29) und (30) kein weiterer Wert in der Belegung
gesetzt. In den Zeilen (31) und (32) wird dann noch die bisher bestimmte Belegung mit den
Werten 0 und 1 fur a[1] zu den Testmustern (0; 1; 1; 0) und (1; 1; 1; 0) fur den vollstandigen
Test erganzt.
Die daraus resultierende Belegung ist in dem Schaltkreis aus Abbildung 3.10 jeweils durch
den oberen der beiden angegebenen Werte fur den stuck-at-1 Fehler dargestellt. Der Unterschied 0=1 an dem primaren Eingang von x1 wird bei der Belegung (0; 1; 1; 0) uber d11;;21
und d11;;32 zu dem Ausgang d11;;51 propagiert. Dem entspricht in dem KFDD, da die bei der
Belegung eigentlich nicht aktive Kante high(v11) durch den Fehler aktiv wird, wodurch
insgesamt der Pfad (high(v11); low(v12); high(v23); low(v24)) aktiv wird.
131

3.4. VOLLSTANDIGE
TESTBARKEIT
X1
S
1
nD
X2
pD
X3
S
X4
X3
1
X4
0
1
0/1
x/x
1,5
3
2
2
1,5
d1,1
+
D
0 0/1 0
0 x 1/0
1/0
0
1/0
0
X3
2
1
1
1
0
x
1,3
d1,1
0/1
1
0/1
1
1,3
d1,2
0
1/0
1
x
1,3
0
x
d1,3
1,3
3,5
1
x
d1,1
3,5
D
D
1/0
0
1,3
D
d1,3
1,1
0/1
1
d1,2
1,1
0
1/0
1,2
x1
1
0/1
1
0
d3,4
2,2
1
0
1
0
3,4
3,5
d3,1
1
x
1
0
0
x
d4,5
1,1
1
x
1
x
d4.5
2,1
0
x
x4
4,5
D
x2
1
0
d3,2
3,4
D
0
1
1
0
d2,3
1,3
2,3
D
0/1
1
0
1/0
3,5
d2,1
+
0
x
0/1
1
0
1
0
1/0
D
1
0
x3
Abbildung 3.10: Testmuster fur primare Eingange x1 und x2
132
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
Der Test fur den stuck-at-0 Fehler ist aquivalent, wobei jeweils der invertierte Unterschied
anliegt.
Wird Prozedur TestsForPI fur Level 2 aufgerufen, wird zunachst durch den Aufruf
von FindFirstNode in Zeile (5) ein von der Wurzel v11 erreichbarer Knoten aus Level
2 bestimmt. Da die LOW-Kante zu einem Knoten in Level 3 fuhrt, wird der Knoten
v12 zuruckgeliefert. Wegen d2 = nD wird eine Belegung gesucht, bei der ein Pfad von
high(v12) = v33 zu dem terminalen Knoten v1n+1 aktiv ist. Die Existenz einer solchen Belegung wird in Zeile (15) zunachst bestatigt und in Zeile (17) wird die Belegung a[3] = 0
gesetzt, fur die nur low(v33) aktiv ist. Damit wird die while-Schleife beendet und in den
Zeilen (29) und (30) noch die Belegung a[1] = 1 gesetzt, mit der die Kante high(v11) zu
Knoten v12 aktiviert wird. Da fur a[4] kein Wert festgelegt wurde, enthalten die berechneten Testmuster (1; 0; 0; X ) und (1; 1; 0; X ) an dieser Stelle ein don't care.
In dem Schaltkreis aus Abbildung 3.10 ist die Belegung fur diese Testmuster durch den
unteren Wert dargestellt. Dabei ist zu bemerken, da auch an einem Eingang des EXORGatters des Teilschaltkreises D1;5 ein don't care anliegt, d.h. es kann sowohl der Wert 0
als auch der Wert 1 anliegen. Welcher Wert tatsachlich anliegt, hangt von der konkreten
Wahl fur a[4] ab. Allerdings wird der Unterschied, der am rechten Eingang des EXORGatters anliegt, bei beiden Belegungen propagiert. Dies wird durch x=x reprasentiert. Fur
die Belegung von x mit dem Wert 0 liegt der Unterschied 1=0 am Ausgang an, wahrend
fur x = 1 der Unterschied 0=1 am Ausgang anliegt.
Fur die stuck-at Fehler an den letzten beiden primaren Eingangen werden durch Prozedur
TestsForPI die Testmuster (1; 1; 0; 0) und (1; 1; 1; 0) sowie (0; X; 0; 0) und (0; X; 0; 1)
berechnet.
3.4.2 Fehler an Eingangen der Teilschaltkreise
Auch bei der Bestimmung eines Testmusters fur einen stuck-at Fehler an einem Eingang
eines Teilschaltkreises zur Realisierung der Parity Matrix Multiplikation mu sichergestellt
werden, da der Fehler durch das Testmuster eingestellt und zu einem primaren Ausgang
propagiert wird.
Um die Einstellbarkeit fur einen Eingang sicherzustellen, durch den eine Abhangigkeit d
zwischen zwei Knoten v und v0 realisiert wird, mu fur einen stuck-at-1 Fehler eine gerade
Anzahl von Pfaden und fur einen stuck-at-0 Fehler eine ungerade Anzahl von Pfaden
zwischen den beiden Knoten aktiv sein. Die Propagation wird dadurch gesichert, da eine
Belegung bestimmt wird, fur die genau ein Pfad von
einer Wurzel r zu v aktiv ist und
n+1
0
genau ein Pfad von v zu dem terminalen Knoten v1 mit Label 1 aktiv ist.
Bei einer wie oben beschriebenen Belegung a1 fur den stuck-at-1 Fehler ist dann in dem
KFDD eine gerade Anzahln+1von Pfaden von der Wurzel r uber die Knoten v und v0 zu
dem terminalen Knotennv+11 aktiv. Zusatzlich konnen bei Belegung a1 noch weitere Pfade
1 ; 2 ; : : : ; q von r zu v1 aktiv sein, die allerdings keinen Teilpfad zwischen den Knoten
v und v 0 enthalten. Abhangig von der Anzahl q dieser zusatzlich aktiven Pfade, wird der
Wert bestimmt, der bei Belegung a1 an dem primaren Ausgang or anliegt, mit dem die von
r dargestellte Boolesche Funktion in dem Schaltkreis realisiert wird. Ist q gerade, dann
hat der primare Ausgang or den Wert 0, ansonsten den Wert 1. Durch den stuck-at-1
Fehler nimmt der Eingang des Teilschaltkreises zur Realisierung von d unabhangig von
der aktuellen Belegung den Wert 1 an. In dem KFDD entspricht der Eekt dieses stuckat-1 Fehlers, da immer eine ungerade Anzahl von Pfaden zwischen
den Knoten v und v0
n+1
0
aktiv ist. Da die Teilpfade von Wurzel r zu v und von v zu v1 dadurch nicht betroen

3.4. VOLLSTANDIGE
TESTBARKEIT
133
sind, entspricht dem stuck-at-1 Fehler in dem KFDD eine ungerade Anzahl von Pfaden,
dien+1bei Belegung a1 von der Wurzel r uber die Knoten v und v0 zu dem terminalen Knoten
v1 aktiv sind. Da die Pfade 1 ; 2 ; : : : ; q keinen Teilpfad zwischen den Knoten v und
v 0 enthalten, bleiben auch diese Pfade von dem Eekt des stuck-at-1 Fehlers unberuhrt.
Somit hat der primare Ausgang or den Wert 1, falls q gerade war, und den Wert 0, falls
q ungerade war. In beiden Fallen liegt ein Unterschied am primaren Ausgang or an, und
der stuck-at-1 Fehler ist entdeckbar.
Fur eine wie oben beschriebene Belegung a0 fur den stuck-at-0 Fehler ist in dem KFDD
eine ungerade Anzahln+1von Pfaden von der Wurzel r uber die Knoten v und v0 zu dem
terminalen Knoten v1 aktiv. Der Eekt des stuck-at-0 Fehlers entspricht in dem KFDD
einer geraden Anzahl aktiver Pfade zwischen den Knoten v und v0. Damit ist neine
gerade Anzahl von Pfaden zwischen der Wurzel r und dem terminalen Knoten v1 +1 aktiv.
Analog der Argumentation fur den stuck-at-1 Fehler folgt, da fur die Belegung a0 an
dem primaren Ausgang or ein Unterschied erzeugt wird, so da der stuck-at-0 Fehler
entdeckbar ist.
Fur einen Teilschaltkreis zur Realisierung von Dk;l konnen nach diesem Verfahren Testmuster fur die stuck-at Fehler aus den Ik -Klassen und Il -Klassen erzeugt werden. Naturlich
konnen Testmuster nur dann erzeugt werden, wenn die Abhangigkeit d nicht konstant 0
oder konstant 1 ist. In diesem Fall wird jedoch durch das Syntheseverfahren sichergestellt,
da auch kein Fanoutstamm fur d realisiert wird. Weiterhin werden fur die Realisierung
von Dk;l noch die direkten Abhangigkeiten aus Db k;l verwendet. Auch fur die Fehler der
Ib-Klasse an diesen Fanoutstammen werden Testmuster nur dann benotigt, wenn die jeweilige direkte Abhangigkeit nicht konstant ist.
In Algorithmus 3.10 ist die Prozedur TestsForInputsOfSubcircuit angegeben, mit
der uberpruft wird, ob ein Testmuster berechnet werden mu. Die einzelnen Situationen
fur Fehler aus den Ik -Klassen, Il -Klassen und Ib-Klassen sind in Abbildung 3.11 veranschaulicht. Die jeweils aufgerufenen Prozeduren zur Berechnung von Testmustern werden
im Anschlu vorgestellt.
In Zeile (1) von Prozedur TestsForInputsOfSubcircuit wird zunachst uberpruft, ob
Abhangigkeiten zu terminalen Knoten untersucht werden. In diesem Fall wird wl auf 1
statt auf die Breite des Levels l gesetzt, nda
in dem synthetisierten Schaltkreis nur die
+1
Abhangigkeiten zum terminalen Knoten v1 realisiert werden. Anschlieend wird in den
k
Zeilen (2) bis (8) fur jede Abhangigkeit dk;s
x;z eines Knoten vx 2 levelk von einem Knoten
vzs 2 levels uberpruft, ob die Abhangigkeit nicht konstant ist und damit ein Fanoutstamm
zur Realisierung dieser Abhangigkeit erzeugt wird, fur den wiederum Testmuster erzeugt
werden mussen. Dazu werden die Eintrage der Matrix Dk;s verwendet, in der bereits
fur jeden DH-Dominator der Eintrag One gesetzt ist. Die eigentliche Berechnung der
Testmuster fur den stuck-at-0 Fehler und den stuck-at-1 Fehler erfolgt durch die Prozedur
TestsForDependency, die in Algorithmus 3.11 vorgestellt wird.
Entsprechend werden in den Zeilen (9) bis (15) die Abhangigkeiten zwischen den Knoten
aus Level s und den Knoten aus Level l betrachtet. Schlielich werden in den Zeilen (16)
bis (22) die direkten Abhangigkeiten untersucht und gegebenenfalls Testmuster mit der
in Algorithmus 3.12 vorgestellten Prozedur TestsForDirectDependency bestimmt.
Das zu Beginn dieses Abschnitts erlauterte Verfahren zur Berechnung von Testmustern fur
stuck-at Fehler an den Eingangen von Teilschaltkreisen zur Realisierung der Parity Matrix Multiplikation wird durch Prozedur TestsForDependency aus Algorithmus 3.11
umgesetzt.
134
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
Algorithmus 3.10
TestsForInputsOfSubcircuit
( KFDD K , Matrizen Dk;s, Ds;l, Db k;l )
// Bestimmt Testmuster fur die stuck-at Fehler an den Eingangen von
// dem Teilschaltkreis zur Realisierung von D k;l .
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
(15)
(16)
(17)
(18)
(19)
(20)
(21)
(22)
if l < n + 1 then wl = widthl else wl = 1 for x = 1 to widthk do
for z = 1 to widths do
if (Dk;s [x; z ] 6= One) ^ (Dk;s [x; z ] 6= Zero) then
od
for
od
for
od
od
z
= 1 to widths do
for y = 1 to wl do
if (Ds;l [z; y] 6=
od
x
(K; vxk ; vzs )
TestsForDependency
) ^ (Ds;l[z; y] 6=
) then
(K; vzs ; vyl )
One
= 1 to widthk do
y = 1 to wl do
if (Db k;l [x; y] 6=
for
od
Zero
TestsForDependency
) ^ (Db k;l [x; y] 6=
One
) then
(K; vxk ; vyl )
Zero
TestsForDirectDependency
Algorithmus 3.11
( KFDD K , Knoten v, Knoten v0 )
// Bestimmt Testmuster fur den stuck-at-0 Fehler und den stuck-at-1 Fehler an dem Eingang
TestsForDependency
// zur Realisierung der Abhangigkeit zwischen den Knoten v und v 0 .
(1) for i = 1 to n do a[i] = X od
(2) j = 1
(3) while (
(K; vj1 ; v) = False) do j = j + 1 od
1
(4)
(K; vj ; v)
(5)
(K; v; v0 );
(K; v; v0 )
n
+1
0
(6)
(K; v ; v1 );
(K; v0 ; v1n+1 )
(7) T = T [ fag
(8) for i = index(v) to index(v0 ) 1 do a[i] = X od
(9)
(K; v; v0 );
(K; v; v0 )
(10) T = T [ fag
CheckOnePathAssignment
SetOnePathAssignment
CheckOnePathAssignment
SetOnePathAssignment
CheckOnePathAssignment
SetOnePathAssignment
CheckEvenPathAssignment
SetEvenPathAssignment
135

3.4. VOLLSTANDIGE
TESTBARKEIT
I k - Klasse
I l - Klasse
X1 j
X1 j
Xk x
I - Klasse
X1 j
Xk x
Xk’ x’
Xs z
Xs z
Xl y
1
1
1
1
Xl y
1
1
Abbildung 3.11: Bestimmung von Testmustern fur Fehler aus der Ik -, Il - und Ib-Klasse
In Zeile (1) wird eine Belegung a = (a1; a2 ; : : : ; an) mit don't care Werten initialisiert. Als
nachstes wird ein Knoten aus der Wurzelliste gesucht, von dem es einen Pfad zu Knoten
v gibt. In einem D-vollstandigen KFDD liegen alle Wurzeln in Level 1. Dementsprechend
werden in den Zeilen (2) und (3) die Knoten aus Level 1 untersucht. Nachdem eine Wurzel
vj1 erreicht wurde, von der aus mindestens ein Pfad zu Knoten v existiert, wird in Zeile
(4) die Belegung soweit bestimmt, da genau ein Pfad von der aktuellen Wurzel vj1 zu
v aktiv ist. Um ein Testmuster fur den stuck-at-0 Fehler zu erhalten, wird in Zeile (5)
mit den Prozeduren CheckOnePathAssignment und SetOnePathAssignment eine
Belegung bestimmt, fur die genau ein Pfad von Knoten v zu v0 aktiv ist. Schlielich wird
in Zeile (6) noch sichergestellt, da von Knoten v0 aus genau ein Pfad zu dem terminalen
Knoten mit Label 1 aktiv ist. Das so bestimmte Testmuster fur den stuck-at-0 Fehler wird
in Zeile (7) fur den vollstandigen Test hinzugefugt.
Da sich das Testmuster fur den stuck-at-1 Fehler nur dadurch von dem Testmuster fur
den stuck-at-0 Fehler unterscheidet, da zwischen Knoten v und v0 eine gerade Anzahl
von Pfaden aktiv sein mu, wird in den Zeilen (8) bis (10) nur dieser Teil der Belegung
neu bestimmt. In Zeile (8) werden zunachst wieder alle relevanten Eintrage auf don't care
zuruckgesetzt. In Zeile (9) werden die Prozeduren CheckEvenPathAssignment und
SetEvenPathAssignment verwendet, um die entsprechende Belegung zu bestimmen.
Das resultierende Testmuster fur den stuck-at-1 Fehler wird in Zeile (10) in die Menge T
aufgenommen.
136
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
Um die Testmuster fur die stuck-at Fehler aus der Ib-Klasse zu bestimmen, kann obiges
Verfahren nicht angewendet werden. Es wird zwar auch wieder dafur gesorgt,
da genau
n+1
0
ein Pfad von einer Wurzel zu v und von v zu dem terminalen Knoten v1 aktiv ist.
Allerdings sind die Bedingungen, um eine gerade und eine ungerade Anzahl von Pfaden
zwischen v und v0 zu aktivieren, anders zu erfullen. Abhangig von dem Dekompositionstyp, nach dem die Knoten aus Level k zerlegt werden, ergibt sich das Verfahren zur
Bestimmung von Testmustern fur die Fehler aus der Ib-Klasse durch die im folgenden
beschriebenen U berlegungen.
Zunachst wird der Fall dk = S betrachtet. In dem rechten Teil von Abbildung 3.11 ist
die Situation dargestellt, da nur die LOW-Kante von vxk direkt zu vyl fuhrt. Es kann
jedoch auch der symmetrische Fall vorkommen, da nur die HIGH-Kante von vxk zu vyl
fuhrt. In dem Fall, da beide von vxk ausgehenden Kanten direkt zu vyl fuhren, ist die
direkte Abhangigkeit nach Abbildung 2.4 konstant 1. Demnach wird kein Signal erzeugt,
und in Zeile (19) von Prozedur TestsForInputsOfSubcircuit wird die Prozedur
TestsForDirectDependency nicht aufgerufen. Sei also (vxk ; vyl ) die Kante, aus der
die direkte Abhangigkeit d^k;lx;y0 resultiert, und sei vxk00 der Knoten, der uber die andere von
vxk ausgehende Kante (vxk ; vxk0 ) erreicht wird. Der Eekt des stuck-at-0 Fehlers an dem
Fanoutstamm, durch den die direkte Abhangigkeit
in dem Schaltkreis realisiert wird, ent0
k
k
spricht in dem KFDD, da die Kante (vx ; vx0 ) immer inaktiv ist, bzw. bei dem stuck-at-1
Fehler immer aktiv ist. Fur den stuck-at-0 Fehler kann die Einstellbarkeit sehr einfach
gewahrleistet werden, indem der Wert von a[k] so gewahlt wird, da die Kante (vxk ; vyl )
aktiv ist. Der Eekt des stuck-at-0 Fehlers entspricht in dem
KFDD, da diese Kante inaktiv wird. Da kein anderer Pfad zwischen vxk und vxk000 diese Kante benutzt, bleibt
die Anzahl der weiteren aktiven Pfade zwischen vxk und vxk0 unverandert. Somit wird die
Gesamtzahl der aktiven Pfade genau um 1 verringert. Entsprechend folgt, da bei der
Belegung von a[k] fur die (vxk ; vyl ) inaktiv0 ist, der stuck-at-1 Fehler darin resultiert, da
die Gesamtzahl der zwischen vxk und vxk0 aktiven Pfade genau um 1 erhoht wird. Damit
wird die Anzahl der aktiven Pfade von der Wurzel zu dem terminalen Knoten mit Label
1 durch den stuck-at-0 Fehler und den stuck-at-1 Fehler genau um 1 verandert.
In dem Fall, da dk 2 fpD; nDg ist, wird die Prozedur TestsForDirectDependency
nicht aufgerufen, falls nur die LOW-Kante von vxk zu vyl fuhrt. In dem Fall, da nur die
HIGH-Kante von vxk direkt zu vyl fuhrt, kann diese Kante durch die Wahl des Wertes
fur a[k] aktiviert oder deaktiviert werden. Die Einstellbarkeit und die Propagation folgen
dann analog zur Diskussion bei der Shannon-Dekomposition. Der verbleibende Fall ist,
da beide von vxk ausgehende Kanten direkt zu vyl fuhren. Durch die Wahl von Belegung
a[k] kann die HIGH-Kante von vxk aktiviert werden, womit beide Kanten {also eine gerade
Anzahl{ aktiv sind. Der Wert von a[k] kann aber auch so gewahlt werden, da die HIGHKante inaktiv ist und damit nur die LOW-Kante {also eine ungerade Anzahl{ aktiv ist.
Damit ist die Einstellbarkeit der beiden stuck-at Fehler gewahrleistet. Da beide ausgehenden Kanten von Knoten vxk direkt zu vyl fuhren, kann es keine weiteren Pfade zwischen
diesen beiden Knoten geben. Somit ist der Eekt des stuck-at-0 Fehlers, da eine gerade
Anzahl von Pfaden zwischen vxk und vyl aktiv ist, und der Eekt des stuck-at-1 Fehlers ist,
da eine ungerade Anzahl von Pfaden aktiv ist.
In allen Fallen genugt es also, den Wert von a[k] einmal auf 0 und einmal auf 1 zu setzen,
damit der Eekt von jedem der beiden stuck-at Fehler die Anzahl der aktiven Pfade
zwischen den Knoten vxk und vyl von gerade auf ungerade bzw. von ungerade auf gerade
Durch das Aktivieren von genau einem Pfad zwischen einer Wurzel und Knoten
andert.
vxk und zwischen vyl und dem terminalen Knoten mit Label 1 setzt sich dieser Eekt auch
137

3.4. VOLLSTANDIGE
TESTBARKEIT
fur die Gesamtzahl aktiver Pfade zwischen der Wurzel und dem terminalen Knoten v1n+1
fort. Damit ist in allen Fallen ein Unterschied an dem entsprechenden primaren Ausgang
des Schaltkreises erkennbar, und die stuck-at Fehler sind somit testbar.
Die Realisierung von Prozedur TestsForDirectDependency in Algorithmus 3.12 entspricht Prozedur TestsForDependency aus Algorithmus 3.11. Dabei wird lediglich die
Berechnung einer Belegung fur eine ungerade bzw. gerade Anzahl von aktiven Pfaden in
den Zeilen (5) bzw. (9) von Prozedur TestsForDependency durch die Zuweisung der
Werte 0 bzw. 1 fur die Belegung a[k] in Prozedur TestsForDirectDependency ersetzt. Zusatzlich kann das Zurucksetzen der Eintrage a[k]; a[k + 1]; : : : ; a[s 1] auf don't
care entfallen, da in Prozedur TestsForDirectDependency jeweils nur der Eintrag
fur a[k] gesetzt wird.
Algorithmus 3.12
( KFDD K , Knoten v, Knoten v0 )
// Bestimmt Testmuster fur den stuck-at-0 Fehler und den stuck-at-1 Fehler an dem Eingang
TestsForDirectDependency
// zur Realisierung der direkten Abhangigkeit zwischen den Knoten v und v 0 .
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
= 1 to n do a[i] = X od
while (
(K; vj1 ; v) = False) do j = j + 1 od
1
(K; vj ; v)
a[index(v )] = 0
(K; v0 ; v1n+1 );
(K; v0 ; v1n+1 )
T = T [ fag
a[index(v )] = 1
T = T [ fag
for
j
i
=1
CheckOnePathAssignment
SetOnePathAssignment
CheckOnePathAssignment
SetOnePathAssignment
Die Komplexitat zur Berechnung von Testmustern fur alle erzeugten Eingange eines Teilschaltkreises zur Realisierung der Parity Matrix Multiplikation wird durch den folgenden
Satz beschrieben.
Satz 3.14
Sei K = (G; R; Xn; d) ein KFDD, bei dem der breiteste Level w Knoten enthalt,
d.h. w = maxfwidthi j 1 i n + 1g. Sei weiterhin SK = (G ; typ; I=O) der durch
das Syntheseverfahren erzeugte Schaltkreis, in dem keine konstanten Signale erzeugt
wurden. Dann gilt:
In Zeit O(w2 jjK jj) konnen Testmuster fur die stuck-at-0 und stuck-at-1 Fehler an
den erzeugten Eingangen eines Teilschaltkreises zur Realisierung der Parity Matrix
Multiplikation bestimmt werden.
Beweis:
Fur jeden Teilschaltkreis zur Realisierung einer Parity Matrix Multiplikation wird ein
Aufruf der Prozedur TestsForInputsOfSubcircuit benotigt. Innerhalb eines Aufrufs
wird fur jedes Paar von Knoten aus den Leveln k und s sowie fur jedes Paar von Knoten
aus den Leveln s und l hochstens einmal die Prozedur TestsForDependency aufgerufen. Auerdem wird fur jedes Paar von Knoten aus den Leveln k und l hochstens einmal
die Prozedur TestsForDirectDependency aufgerufen. Es werden also hochstens 3w2
Aufrufe der beiden Prozeduren gestartet, deren Komplexitat entsprechend der nachfolgenden Diskussion jeweils durch O(jjK jj) gegeben ist. Insgesamt ergibt sich damit die
Laufzeitschranke von O(w2 jjK jj).
138
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
In der Prozedur TestsForDependency werden fur die Initialisierung der Belegung in
Zeile (1) und das Zurucksetzen in Zeile (8) nur O(n) O(jjK jj) Schritte benotigt.
In Zeile (3) wird eine while-Schleife durchlaufen, in der jeweils einmal die Prozedur
CheckOnePathAssignment aufgerufen wird. Dabei wird allerdings jeweils u
berpruft,
ob eine Belegung existiert, fur die eine ungerade Anzahl von Pfaden zu dem gleichen
Knoten v aktiv ist. Wie bereits im Beweis von Satz 3.13 gezeigt wurde, kann der Gesamtaufwand fur alle Aufrufe durch O(jjK jj) begrenzt werden, wenn anstelle der Markierungen
NoPath und OnePath neue Markierungen verwendet werden, die wahrend der Bearbeitung
der while-Schleife nicht geloscht werden.
Der Aufruf von Prozedur SetOnePathAssignment in Zeile (4), sowie die Aufrufe von
den beiden Prozeduren CheckOnePathAssignment und SetOnePathAssignment
in den Zeilen (5) und (6) sind nach Lemma 3.9 jeweils durch O(jjK jj) beschrankt. Nach
Lemma 3.10 sind auch die Aufrufe der Prozeduren CheckEvenPathAssignment und
SetEvenPathAssignment in Zeile (9) durch O (jjK jj) beschr
ankt.
Da in Prozedur TestsForDirectDependency zwar einige Aufrufe weniger gestartet
werden, als in Prozedur TestsForDependency, aber in den Zeilen (3), (4) und (6)
ebenfalls die Prozeduren CheckOnePathAssignment und SetOnePathAssignment
aufgerufen werden, benotigt auch TestsForDirectDependency Zeit O(jjK jj).
Beispiel 3.10
Fur das KFDD und den daraus erzeugten Schaltkreis aus Beispiel 3.9 sind die durch die
Prozedur TestsForInputsOfSubcircuit berechneten Testmuster in Abbildung 3.12
angegeben. Fur jeden Aufruf von TestsForInputsOfSubcircuit gibt es eine Tabelle,
in der die Testmuster fur die Fehler aus den Ik -Klassen, Il -Klassen und Ib-Klassen angegeben sind. Dabei werden fur jedes Eingangssignal entweder die beiden durch die Prozedur
TestsForDependency bzw. TestsForDirectDependency berechneten Testmuster
eingetragen oder es wird durch den Eintrag One bzw. Zero dargestellt, warum die entsprechende Prozedur fur diesen Eingang nicht aufgerufen wird.
Der Ablauf von Prozedur TestsForDependency wird beispielhaft fur den Aufruf mit
den Argumenten v13 und v15 (vgl. Abbildung 3.10) erlautert. In Zeile (1) von Prozedur
TestsForDependency wird zun
achst die Belegung initialisiert. In Zeile (3) wird durch
die Prozedur CheckOnePathAssignment festgestellt, da es eine Belegung gibt, bei
der genau ein Pfad von der Wurzel v11 zu Knoten v13 aktiv ist. In Zeile (4) wird durch
Prozedur SetOnePathAssignment der Wert a[1] = 0 gesetzt, wodurch nur die LOWKante von v11 zu v13 aktiviert wird. In Zeile (5) wird eine Belegung gesucht, bei der genau
ein Pfad von v13 zu v15 aktiv ist. Durch Setzen der Werte a[3] = 0 und a[4] = 1 wird
dies fur den Pfad (low(v13); high(v14)) erreicht. Da der Knoten v15 bereits der terminale
Knoten mit Label 1 ist, wird in den Aufrufen in Zeile (6)3;5kein weiterer Wert fur die
Belegung gesetzt. Somit wird fur den stuck-at-0 Fehler an d1;1 das Testmuster (0; X; 0; 1)
in Zeile (7) zu dem vollstandigen Test hinzugefugt. In Zeile (8) werden die Werte von
a[3] und a[4] wieder auf den don't care Wert zuruckgesetzt und in Zeile (9) wird eine
Belegung bestimmt, bei der eine gerade Anzahl von Pfaden zwischen den Knoten v13 und
v15 aktiv ist. Darin wird die Belegung a[3] = 0 und a[4] = 0 bestimmt, fur die der von
Knoten v13 ausgehende Pfad (low(v13 ); low(v14)) aktiv ist, 3der
nicht
zu
v15 fuhrt. Damit
ist das Testmuster (0; X; 0; 0) fur den stuck-at-1 Fehler an d1;;51 bestimmt, das in Zeile (10)
ebenfalls zu T hinzugefugt wird.
139

3.4. VOLLSTANDIGE
TESTBARKEIT
TestsForInputsOfSubcircuit
(D1;3; D3;5; Db 1;5)
Ik -Klasse Il -Klasse
Ib-Klasse
d11;;31 0X01 d31;;51 0X01 d^11;;51 Zero
1101
1101
0X01
100X
0X0X
d11;;32
d11;;33
d32;;51
d33;;51
TestsForInputsOfSubcircuit
Zero
Zero
d32;;41
Ik -Klasse
Il -Klasse
Ib-Klasse
1101 2;3
d11;;12 0101
d1;1 Zero d^11;;31 0X01
1X01
One
d21;;33
100X
110X
d^11;;32
d^11;;33
TestsForInputsOfSubcircuit
(D3;4; D4;5; Db 3;5)
Ik -Klasse Il -Klasse
Ib-Klasse
d31;;41 One d41;;51 0X01
d^31;;51 Zero
0X00
d31;;42 Zero d42;;51 1110 d^32;;51 Zero
(D1;2; D2;3; Db 1;3)
d21;;32
0X00
1101
1100
100X
1010
1111
One
d32;;42 1110
1100
d33;;41
Zero
d33;;42 1010
1000
Abbildung 3.12: Testmuster fur stuck-at Fehler an den Eingangen von D1;5, D1;3 und D3;5
Die Belegung in dem Schaltkreis fur diese beiden Testmuster ist in Abbildung 3.13 dargestellt. Dabei gibt der obere Wert die Belegung fur den stuck-at-0 Fehler und der untere
Wert die Belegung
fur den stuck-at-1 Fehler an. Durch die entsprechenden stuck-at Fehler
wird an d31;;51 jeweils ein Unterschied erzeugt, der zu d11;;51 propagiert wird.
3.4.3 Fehler an Eingangen der AND-Gatter
Bei dem im letzten Abschnitt vorgestellten Verfahren zur Bestimmung von Testmustern
fur die stuck-at Fehler an den Eingangen der Teilschaltkreise wurde die Propagation dadurch gesichert, da eine Belegung bestimmt wurde, bei der genau ein Pfad von einer
Wurzel und genau ein Pfad zu dem terminalen Knoten mit Label 1 aktiv ist. Dabei kann
allerdings keine Aussage daruber getroen werden, uber welchen Fanoutzweig und damit
uber welches AND-Gatter der Unterschied zu einem primaren Ausgang propagiert wird.
Die Fehler aus den Ak -Klassen und Al -Klassen wirken sich jedoch nur an dem Fanoutzweig aus, der den Eingang des AND-Gatters bildet. Daher mu bei der Bestimmung
der Testmuster zusatzlich berucksichtigt werden, da ein Unterschied uber das aktuelle
AND-Gatter propagiert wird. Dies wird durch weitere Bedingungen erreicht, die an die
Pfade gestellt werden.
140
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
1/0
0/1
1,5
+
D
1/0 0
0/1 0
1
1
1
1
1,5
d1,1
1/0
0/1
0
0
1,3
0
0
d1,1
1,3
0
0
d1,2
1,3
d1,3
1,3
0
0
1
0
1/0
0/1
3,5
1
0
d1,1
3,5
D
D
1
1
1,3
D
d1,3
1,1
0
0
1,2
d2,3
1,3
2,3
D
0
0
x
x
x1
x
x
0
0
d3,4
2,2
0
0
0
0
3,5
d3,1
0
1
0
0
1
0
d4,5
1,1
0
1
0
1
d4.5
2,1
1
0
x4
4,5
D
x2
0
0
d3,4
3,2
3,4
D
1
1
0
0
x
x
d1,2
1,1
3,5
d2,1
+
1
0
0
0
1
1
0
0
D
0
0
x3
Abbildung 3.13: Testmuster fur stuck-at-0 und stuck-at-1 Fehler an d31;;51
Sei g ein AND-Gatter aus dem Teilschaltkreis Dk;l, dessen linker Eingang mit dk;s
x;z verbuns;l
den ist und dessen rechter Eingang mit dz;y verbunden ist. Dann kann die Einstellbarkeit
der stuck-at Fehler an dem linken Eingang des AND-Gatters {wie bereits im letzten Abschnitt fur den Eingang des Teilschaltkreises beschrieben{ dadurch sichergestellt werden,
da fur den stuck-at-0 Fehler eine ungerade Anzahl von Pfaden und fur den stuck-at-1
Fehler eine gerade Anzahl von Pfaden zwischen den Knoten vxk und vzs aktiviert wird (vgl.
Abbildung 3.14). Um die Propagation uber das AND-Gatter g sicherzustellen, mu nach
Tabelle 3.1 gleichzeitig an dem rechten Eingang des AND-Gatters der Wert 1 anliegen.
Dies kann dadurch erreicht werden, da eine Belegung gewahlt wird, bei der eine ungerade
Anzahl von Pfaden zwischen Knoten vsz und vyl aktiv ist.
Analog ergibt sich, da fur einen stuck-at Fehler an dem rechten Eingang des ANDGatters die Anzahl der aktiven Pfade zwischen Knoten vzs und vyl einmal gerade und
einmal ungerade sein mu, wahrend die Anzahl der aktiven Pfade zwischen Knoten vxk
und vzs ungerade ist.
Die Propagation bis zu einem primaren Ausgang des gesamten Schaltkreises kann dann
genau wie im letzten Abschnitt dadurch gewahrleistet werden, da eine Belegung bestimmt wird, bei der genau ein Pfad von einer Wurzel zu vxk und genau ein Pfad von vyl
zu dem terminalen Knoten mit Label 1 aktiv ist.
141

3.4. VOLLSTANDIGE
TESTBARKEIT
Ak - Klasse
Al - Klasse
X1 j
X1 j
Xk x
Xk x
Xs z
Xs z
Xl y
Xl y
1
1
1
1
Abbildung 3.14: Bestimmung von Testmustern fur Fehler aus der Ak - und Al -Klasse
Im Gegensatz zu dem Verfahren, mit dem die Testmuster fur die stuck-at Fehler aus
der Ik -Klasse bestimmt werden, wird bei den Fehlern aus der Ak -Klasse somit
zusatzlich
gefordert, da der aktive Pfad von Knoten vzs zu dem terminalen Knoten v1n+1 uber den
Knoten vyl fuhrt. Analog besteht fur die Fehler aus der Al -Klasse im Vergleich zu den
Fehlern aus der Il -Klasse die zusatzliche Anforderung an den Pfad von einer Wurzel zu
dem Knoten vzs darin, da dieser Pfad uber den Knoten vxk fuhren mu.
Um Testmuster fur die stuck-at Fehler aus den Ak -Klassen und Al -Klassen zu erhalten,
mussen also fur jede Kombination von Knoten vxk 2 levelk , vyl 2 levell und vzs 2 levels
folgende Belegungen bestimmt werden:
1. Eine Belegung, bei der eine ungerade Anzahl von Pfaden zwischen den Knoten vxk
und vzs sowie eine ungerade Anzahl von Pfaden zwischen den Knoten vzs und vyl aktiv
ist, um den stuck-at-0 Fehler an dem linken Eingang und den stuck-at-0 Fehler an
dem rechten Eingang des AND-Gatters zu testen.
2. Eine Belegung, bei der eine gerade Anzahl von Pfaden zwischen den Knoten vxk und
vzs sowie eine ungerade Anzahl von Pfaden zwischen den Knoten vzs und vyl aktiv ist,
um den stuck-at-1 Fehler an dem linken Eingang des AND-Gatters zu testen.
3. Eine Belegung, bei der eine ungerade Anzahl von Pfaden zwischen den Knoten vxk
und vzs sowie eine gerade Anzahl von Pfaden zwischen den Knoten vzs und vyl aktiv
ist, um den stuck-at-1 Fehler an dem rechten Eingang des AND-Gatters zu testen.
142
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
Die Testmuster konnen also wieder direkt von dem Graphen des KFDDs abgeleitet werden.
Dabei kann es vorkommen, da die geforderten Belegungen mit einer ungeraden bzw.
geraden Anzahl aktiver Pfade zwischen den Knoten nicht existieren, d.h. es kann keinen
Pfad zwischen zwei Knoten geben oder ein Knoten ist ein DH-Dominator des anderen
Knoten. Durch das Syntheseverfahren aus Anhang B in Verbindung mit der angepaten
Realisierung von Prozedur ParityMatrixMultiplication aus Algorithmus 3.2 wird
jedoch sichergestellt, da in diesen Fallen der entsprechende Eingang nicht erzeugt wird.
In Algorithmus 3.13 wird durch Prozedur TestsForAndsOfSubcircuit eine Realisierung des oben beschriebenen Verfahrens angegeben, mit dem Testmuster fur die stuck-at-0
Fehler und die stuck-at-1 Fehler an den Eingangen der AND-Gatter in dem Teilschaltkreis
zur Realisierung von Dk;l erzeugt werden.
In Zeile (1) von Prozedur TestsForAndsOfSubcircuit wird wieder die Breite fur den
Level mit den terminalen Knoten auf 1 gesetzt,n+1da in dem synthetisierten Schaltkreis nur
die Abhangigkeiten zum terminalen Knoten v1 realisiert werden.
Durch die for-Schleifen in den Zeilen (2), (7) und (11) wird erreicht, da alle Kombinationen von Knoten vxk 2 levelk , vyl 2 levell und vzs 2 levels bearbeitet werden.
Dabei wird eine Belegung, die fur einen Teilpfad zwischen Knoten aus zwei Leveln bestimmt wurde, solange beibehalten, bis der Teilpfad von bzw. zu einem anderen Knoten
des entsprechenden Levels untersucht wird. Dementsprechend wird die Belegung a nicht
auf einmal auf don't care zuruckgesetzt, sondern in den Zeilen (3), (8), (14), (18), (23) und
(28) werden jeweils nur die Teile zuruckgesetzt, fur die anschlieend neue Werte gesetzt
werden.
Genau wie in den Zeilen (2) bis (4) von Prozedur TestsForDependency aus Algorithmus 3.11 wird in den Zeilen (4) bis (6) von TestsForAndsOfSubcircuit eine Wurzel
vj1 bestimmt, von der aus mindestens ein Pfad zu Knoten vxk existiert und die Belegung
soweit bestimmt, da genau ein Pfad von dieser Wurzel vj1 zu vkk aktiv ist. Auerdem wird
in den Zeilen (9) und (10) genau wie in Zeile (9) von Prozedur TestsForDependency
eine Belegung bestimmt, fur die genau ein Pfad von vyk zu dem terminalen Knoten v1n+1
mit Label 1 aktiv ist. Die soweit bestimmte Belegung wird bei der Bearbeitung aller
Knoten aus Level s beibehalten.
In den Zeilen (12) bis (31) werden die zu Beginn des Abschnitts beschriebenen Belegungen
bestimmt, sofern in dem Teilschaltkreis fur Dk;l ein entsprechender Fanoutzweig erzeugt
wurde. Fur die U berprufung, ob ein Fanoutzweig erzeugt wurde, werden wieder die Matrizen Dk;s und Ds;l verwendet. Da fur die direkten Abhangigkeiten in keinem Fall ein
AND-Gatter erzeugt wird und die Testmuster fur einen eventuell existierenden Eingang
des EXOR-Gatters bereits in Abschnitt 3.4.2 besprochen wurden, spielt die Matrix der
direkten Abhangigkeiten Db k;l hier keine Rolle.
Mit Zeile (12) wird der Fall abgefragt, da es keinen Pfad zwischen vxk und vzs oder zwischen
vzs und vyl gibt. In diesem Fall ist die Bestimmung von Testmustern nicht notig, weil dann
auch in Prozedur ComposeDependencies aus Algorithmus B.4 weder ein AND-Gatter
erzeugt wird, noch ein Eingang fur das EXOR-Gatter bestimmt wird.
In Zeile (13) wird weiterhin uberpruft, ob wenigstens zwischen einem Paar der Knoten
keine DH-Dominator Beziehung existiert. Wenn namlich der Knoten vzs ein DH-Dominator
von Knoten vxk ist und der Knoten vyl ein DH-Dominator von vzs ist, dann braucht kein
Testmuster erzeugt werden, weil in diesem Fall durch Prozedur ComposeDependencies
in dem Teilschaltkreis nur der Ausgang des EXOR-Gatters invertiert wird.
In den Zeilen (15) und (16) wird zunachst eine Belegung bestimmt, bei der genau ein Pfad
zwischen vzs und vyl aktiv ist. Die Existenz einer solchen Belegung ist durch die Bedingung
143

3.4. VOLLSTANDIGE
TESTBARKEIT
Algorithmus 3.13
TestsForAndsOfSubcircuit
( KFDD K , Matrizen Dk;s, Ds;l )
// Bestimmt Testmuster fur die stuck-at Fehler an den Eingangen der AN D -Gatter
// in dem Teilschaltkreis zur Realisierung von D k;l .
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
(15)
(16)
(17)
(18)
(19)
(20)
(21)
(22)
(23)
(24)
(25)
(26)
(27)
(28)
(29)
(30)
(31)
(32)
(33)
(34)
(35)
(36)
(37)
if l < n + 1 then wl = widthl else wl = 1 for x = 1 to widthk do
for i = 1 to k 1 do a[i] = X od
j
=1
while
(
(K; vj1 ; vxk ) = False) do j = j + 1 od
CheckOnePathAssignment
(K; vj1 ; vxk )
SetOnePathAssignment
for
y
= 1 to wl do
for i = l to n do a[i] = X od
(K; vyl ; v1n+1 )
(K; vyl ; v1n+1 )
for z = 1 to widths do
if (Dk;s[x; z ] 6=
) ^ (Ds;l[z; y] 6=
) then
k;s
s;l
if (D [x; z ] 6=
) _ (D [z; y] 6= ) then
for i = s to l 1 do a[i] = X od
(K; vzs ; vyl )
(K; vzs ; vyl )
k;s
if (D [x; z ] 6=
) then
for i = k to s 1 do a[i] = X od
(K; vxk ; vzs)
(K; vxk ; vzs )
T = T [ fag
for i = k to s 1 do a[i] = X od
(K; vxk ; vzs)
(K; vxk ; vzs )
T = T [ fag
if (Ds;l [z; y] 6=
) then
for i = s to l 1 do a[i] = X od
(K; vzs ; vyl )
(K; vzs ; vyl )
T = T [ fag
CheckOnePathAssignment
SetOnePathAssignment
Zero
Zero
One
One
CheckOnePathAssignment
SetOnePathAssignment
One
CheckEvenPathAssignment
SetEvenPathAssignment
CheckOnePathAssignment
SetOnePathAssignment
One
CheckEvenPathAssignment
SetEvenPathAssignment
od
od
od
144
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
in Zeile (12) gesichert. Mit dieser Belegung ist bereits eine Bedingung an die Testmuster
fur die beiden stuck-at Fehler an dem linken Eingang des AND-Gatters erfullt.
In Zeile (17) wird die Existenz einer Belegung uberpruft, bei der eine gerade Anzahl von
Pfaden zwischen den Knoten vxk und vzs aktiv ist und eine solche Belegung wird in den
Zeilen (19) und (20) bestimmt. Damit ist auch die zweite Bedingung fur das Testmuster
des stuck-at-1 Fehlers an dem linken Eingang des AND-Gatters erfullt, und die aktuelle
Belegung wird in Zeile (21) zu dem vollstandigen Test hinzugefugt.
In den Zeilen (24) und (25) wird die Belegung so gewahlt, da genau ein Pfad zwischen
den Knoten vxk und vzs aktiv ist. Da an den Werten fur a[s]; a[s + 1]; : : : ; a[l 1] seit der
Bestimmung der Belegung fur einen aktiven Pfad zwischen vzs und vyl in den Zeilen (15)
und (16) nichts geandert wurde, sind die beiden Bedingungen fur das Testmuster der
stuck-at-0 Fehler an dem linken und dem rechten Eingang des AND-Gatters erfullt und
in Zeile (26) wird die Menge T um diese Belegung erganzt.
Schlielich wird in Zeile (27) uberpruft, ob es eine Belegung gibt, bei der zwischen den
Knoten vzs und vyl eine gerade Anzahl von Pfaden aktiv ist. Diese Belegung wird gegebenenfalls in den Zeilen (29) und (30) berechnet. Da fur die Belegung immer noch genau
ein Pfad zwischen den Knoten vxk und vzs aktiv ist, sind nun beide Bedingungen fur das
Testmuster des stuck-at-1 Fehlers an dem rechten Eingang des AND-Gatters erfullt und
diese Belegung wird als weiteres Testmuster in T aufgenommen.
Bei obiger Betrachtung wurde der Fall nicht explizit diskutiert, in dem durch Prozedur
ComposeDependencies kein AND -Gatter erzeugt wird, weil ein Eingang den konstan1
ten Wert 1 hat. In diesem Fall wird die Vereinfachung VAND
implizit angewendet, wodurch
der nicht konstante Eingang direkt an das EXOR-Gatter angeschlossen wird. Die beiden
Testmuster, die in dieser Situation in Prozedur TestsForAndsOfSubcircuit berechnet werden, sind notig, um die Testbarkeit fur die stuck-at Fehler an dem Eingang des
EXOR-Gatters zu garantieren, da diese Fehler nicht durch andere Fehler dominiert werden bzw. nicht zu bereits betrachteten Fehlern aquivalent sind.
Sofern Prozedur ComposeDependencies kein AND-Gatter erzeugt und zusatzlich nur
einen Eingang fur das EXOR-Gatter bestimmt, wird auch das EXOR-Gatter nicht erzeugt und der nicht konstante Eingang direkt als Ausgang des Teilschaltkreises verwendet.
Entsprechend der Diskussion uber die Fehler der O-Klasse in der Einleitung von Abschnitt 3.4 brauchte in diesem Fall kein eigener Test berechnet werden, da der Ausgang
des Teilschaltkreises entweder dem Eingang eines anderen Teilschaltkreises entspricht oder
direkt mit dem Eingang eines primaren Ausgangs verbunden ist. Diese Konstellation wird
in Prozedur TestsForAndsOfSubcircuit jedoch nicht gesondert abgepruft, und somit werden in diesem Fall Testmuster fur die gleichen stuck-at Fehler bestimmt, fur die
auch an anderer Stelle Testmuster berechnet werden.
Die Berechnung der Testmuster fur die stuck-at Fehler an den Eingangen der ANDGatter in einem Teilschaltkreis zur Realisierung der Parity Matrix Multiplikation hat
dann folgende Komplexitat:
Satz 3.15
Sei K = (G; R; Xn ; d) ein KFDD bei dem der breiteste Level w Knoten enthalt,
d.h. w = maxfwidthi j 1 i n + 1g. Sei weiterhin SK = (G ; typ; I=O) der durch
das Syntheseverfahren erzeugte Schaltkreis, in dem keine konstanten Signale erzeugt
wurden. Dann gilt:
In Zeit O(w3 jjK jj) konnen Testmuster fur die stuck-at-0 und stuck-at-1 Fehler
an den Eingangen der AND -Gatter in den Teilschaltkreisen zur Realisierung der
Parity Matrix Multiplikation bestimmt werden.

3.4. VOLLSTANDIGE
TESTBARKEIT
145
Beweis:
Der Beweis kann analog zu dem Beweis von Satz 3.14 gefuhrt werden, wobei zu berucksichtigen ist, da in Prozedur TestsForAndsOfSubcircuit alle Kombinationen von
Knoten aus drei Leveln betrachtet werden. Die Gesamtlaufzeit folgt wieder daraus, da
der Aufwand fur jede dieser O(w3) Kombinationen durch O(jjK jj) beschrankt ist.
Beispiel 3.11
Die durch Prozedur TestsForAndsOfSubcircuit berechneten Testmuster fur das
KFDD und den daraus erzeugten Schaltkreis aus Beispiel 3.9 sind in Abbildung 3.15
angegeben. Es gibt fur jeden Aufruf von Prozedur TestsForAndsOfSubcircuit eine
Tabelle, in der jede Zeile die Testmuster fur die links angegebene Kombination von Knoten
enthalt. Dabei gibt die erste Belegung das Testmuster fur den stuck-at-1 Fehler am linken
Eingang des AND-Gatters an, also fur den Fehler aus der Ak -Klasse. In der nachsten
Spalte wird das Testmuster angegeben, mit dem die stuck-at-0 Fehler an dem linken und
rechten Eingang des AND-Gatters getestet werden konnen. In der letzten Spalte wird
schlielich noch das Testmuster fur den stuck-at-1 Fehler an dem rechten Eingang des
AND-Gatters, also aus der Al -Klasse, angegeben.
Falls fur ein Paar von Knoten eine Abhangigkeit konstant 0 ist, wird kein AND-Gatter
erzeugt und es braucht kein Testmuster erzeugt werden. In diesem Fall ist die Zeile der
Tabelle mit Zero gekennzeichnet. In dem Fall, da die Abhangigkeit zwischen einem
Paar von Knoten konstant 1 ist, wird ebenfalls kein AND-Gatter erzeugt und fur den
konstanten Eingang brauchen keine Testmuster bestimmt werden. Allerdings wird der
andere Eingang direkt an das EXOR-Gatter angeschlossen bzw. als Ausgang des Teilschaltkreises verwendet. Deshalb mussen noch die Testmuster fur den anderen Eingang
bestimmt werden. In der Tabelle ist dies dadurch gekennzeichnet, da der Eintrag fur den
konstanten Eingang mit One markiert wird. Der Eintrag fur den stuck-at-0 Fehler gilt in
diesem Fall naturlich nur fur den Fehler an dem Eingang, der nicht konstant ist.
Der Ablauf von Prozedur TestsForAndsOfSubcircuit wird wieder beispielhaft erlautert. Dazu wird die Kombination der Knoten v23, v14 und v15 aus dem Aufruf fur D3;4
und D4;5 betrachtet (vgl. Abbildung 3.10).
In den Zeilen (5) und (6) wurde die Belegung a[1] = 1 und a[2] = 1 bestimmt, fur die der
Pfad (high(v11); low(v12 )) von der Wurzel v11 zu dem Knoten v23 aktiv ist. In den Zeilen
(9) und (10) wird eine Belegung fur eine ungerade Zahl von aktiven Pfaden zwischen v15
und dem terminalen Knoten mit Label 1 bestimmt. Da dieser mit v15 identisch ist, wird in
der Belegung kein Wert gesetzt. In Zeile (12) wird anhand der Eintrage in Dk;s und Ds;l
bestatigt, da sowohl zwischen Knoten v23 und v14 als auch zwischen v14 und v15 mindestens
ein Pfad existiert. Auerdem wird in Zeile (13) uberpruft, da fur wenigstens eines der
beiden Paare von Knoten eine Belegung existiert, bei der eine gerade Anzahl von Pfaden
aktiv ist.
In den Zeilen (15) und (16) wird dann eine Belegung bestimmt, fur die genau ein Pfad
zwischen Knoten v14 und v15 aktiv ist. Dies wird durch Setzen von a[4] = 1 erreicht, wodurch
nur die Kante high(v14 ) zu v15 aktiv ist. Da die Abhangigkeit zwischen v23 und v14 konstant 1
ist, werden die Zeilen (18) bis (21) nicht bearbeitet. Aus der Tatsache, da die Bedingung
aus Zeile (17) nicht erfullt ist, folgt auch, da das entsprechende AND-Gatter in dem
Teilschaltkreis fur D3;5 nicht erzeugt wird. Die im folgenden noch bestimmten Testmuster
werden dann fur die stuck-at Fehler an dem Eingang des EXOR-Gatters verwendet. In
den Zeilen (24) und (25) wird die Belegung a[3] = 0 gesetzt, wodurch nur die Kante
low(v23 ) zu Knoten v14 aktiv ist. Dadurch ist ein Testmuster (1; 1; 0; 1) f
ur den stuck-at-0
146
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
TestsForAndsOfSubcircuit
v11 ;v13 ;v15
v11 ;v23 ;v15
v11 ;v33 ;v15
(D1;3; D3;5)
sa-1 sa-0
links beide
1101
0X01
0X0X
TestsForAndsOfSubcircuit
(D1;2; D2;3)
v11 ;v12 ;v13
v11 ;v12 ;v23
v11 ;v12 ;v33
sa-1
links
sa-0
beide
sa-1
rechts
Zero
0101
000X
1101
100X
One
110X
0X01
1101
100X
sa-1
rechts
0X00
1100
1010
TestsForAndsOfSubcircuit
v13 ;v14 ;v15
v13 ;v24 ;v15
v23 ;v14 ;v15
v23 ;v24 ;v15
v33 ;v14 ;v15
v33 ;v24 ;v15
(D3;4; D4;5)
sa-1 sa-0
links beide
One
0X01
sa-1
rechts
0X00
Zero
One
1100
1101
1110
1100
1111
Zero
1000
1010
1011
Abbildung 3.15: Testmuster fur stuck-at Fehler an den Eingangen von D1;5, D1;3 und D3;5
Fehler bestimmt, welches in Zeile (26) zu der Menge T der Testmuster hinzugefugt wird.
Da die Abhangigkeit zwischen Knoten v41 und v15 nicht konstant 1 ist, wird in den Zeilen
(29) und (30) die Belegung auf a[4] = 0 geandert, so da nur die Kante low(v41) aktiv
ist und somit kein aktiver Pfad von v14 zu v15 besteht. Damit ergibt sich die Belegung
(1; 1; 0; 0), die in Zeile (31) als Testmuster fur den stuck-at-1 Fehler fur die Menge des
vollstandigen Tests erganzt wird.
Fur diese beiden Testmuster ist die Belegung in dem Schaltkreis in Abbildung 3.16 dargestellt. Das Testmuster fur den stuck-at-0 Fehler wird durch den oberen Wert und fur den
stuck-at-1 durch den unteren Wert angegeben. In dem Teilschaltkreis fur D3;5 entspricht
der Eingang e des EXOR-Gatters dem rechten Eingang eines AND-Gatters, das durch
implizite Vereinfachung entfernt wurde. Die durch die entsprechenden stuck-at Fehler an
diesem Eingang erzeugten Unterschiede werden bei den berechneten Belegungen zu dem
Ausgang des Schaltkreises propagiert.
3.4.4 Fehler an primaren Ausgangen
Bei einem stuck-at Fehler an dem Eingangssignal eines primaren Ausgangs ist ein erzeugter Unterschied direkt an dem primaren Ausgang sichtbar. Somit braucht durch ein
Testmuster nur die Einstellbarkeit gewahrleistet werden. Fur den stuck-at-0 Fehler mu
also eine Belegung bestimmt werden, fur die der primare Ausgang den Wert 1 annimmt.
Entsprechend ist der stuck-at-1 Fehler fur jede Belegung testbar, fur die der primare
Ausgang den Wert 0 annimmt.
Fur eine Wurzel vj1 (j 2 f1; 2; : : : ; mg), mit der die Funktion des j -ten primaren Ausgangs
reprasentiert wird, kann ein Testmuster fur den stuck-at-0 Fehler dadurch bestimmt werden, da eine Belegung berechnet wird, bei der genau ein Pfad von der Wurzel vj1 zu dem
147

3.4. VOLLSTANDIGE
TESTBARKEIT
1/0
0/1
1,5
1,5
d1,1
+
D
0 1/0 0
0 0/1 0
0
0
0
0
1
0
1
1
1,3
1
1
d1,1
1,3
1,3
0
0
d1,2
1
0
d1,3
1,3
0
0
1/0
0/1
3,5
1/0
0/1
d1,1
3,5
D
D
0
0
d1,3
1,1
1,3
D
1
1
1,2
d2,3
1,3
2,3
D
1
1
0
0
x1
1
1
0
0
d3,4
2,2
0
0
e
0
0
0
0
d3,4
3,2
3,4
D
1
1
0
0
0
0
d1,2
1,1
3,5
d2,1
0
1
0
0
1
0
d4,5
1,1
0
1
0
1
d4.5
2,1
1
0
x4
4,5
D
x2
3,5
d3,1
+
1/0
0/1
1
1
1
1
D
0
0
x3
Abbildung 3.16: Testmuster fur stuck-at-0 und stuck-at-1 Fehler an Fanoutzweig e
terminalen Knoten mit Label 1 aktiv ist. Fur den stuck-at-1 Fehler mu dagegen eine Belegung bestimmt werden, bei der eine gerade Anzahl von Pfaden zwischen der Wurzel vj1
und dem terminalen Knoten mit Label 1 aktiv ist.
Damit ergibt sich direkt die Realisierung von Prozedur TestsForPO aus Algorithmus 3.14, mit der Testmuster fur den stuck-at-1 Fehler und fur den stuck-at-0 Fehler
an einem primaren Ausgang bestimmt werden.
Algorithmus 3.14
TestsForPO
( KFDD K , Wurzel vj1 )
// Bestimmt Testmuster fur beide stuck-at Fehler an dem j -tem primaren Ausgang,
// falls dieser Ausgang keine konstante Funktion realisiert.
(1) for i = 1 to n do a[i] = X od
(2)
(K; vj1 ; v1n+1)
(3)
(K; vj1 ; v1n+1 )
(4) T = T [ fag
(5) for i = 1 to n do a[i] = X od
(6)
(K; vj1 ; v1n+1 )
(7)
(K; vj1 ; v1n+1)
(8) T = T [ fag
CheckOnePathAssignment
SetOnePathAssignment
CheckEvenPathAssignment
SetEvenPathAssignment
148
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
Mit den bisherigen Ergebnissen ergibt sich folgende Komplexitat fur die Berechnung von
Testmustern, mit denen die stuck-at Fehler an einem primaren Ausgang getestet werden
konnen. Wie bei der Berechnung der Testmuster fur die stuck-at Fehler an den primaren
Eingangen, werden keine Eigenschaften der synthetisierten Schaltkreise ausgenutzt. Daher
gilt der Satz fur beliebige Schaltkreisrealisierungen.
Satz 3.16
= (G; R; Xn; d) ein KFDD mit der Wurzelliste R = (v11; v21; : : : ; vm1 ) und sei
SK = (G ; typ; I=O) ein Schaltkreis, der die von K dargestellte Boolesche Funktion
f = (fv ; fv ; : : : ; fvm ) 2 Bn;m realisiert. Dann gilt:
In Zeit O(jjK jj) kann ein Testmuster fur den stuck-at-0 Fehler und ein Testmuster
fur den stuck-at-1 Fehler an dem Fanoutzweig bestimmt werden, der mit dem j ten primaren Ausgang (j 2 f1; 2; : : : ; mg) von SK verbunden ist, falls fvj keine
Sei K
1
1
1
2
1
1
konstante Funktion ist.
Beweis:
In den Zeilen (1) und (5) erfolgt die Initialisierung der Belegung mit don't care Werten.
Wie bereits in den vorhergehenden Beweisen ausgefuhrt wurde, ist der Aufwand dafur
durch O(jjK jj) beschrankt.
Daneben werden in den Zeilen (2) und (3) die Prozeduren CheckOnePathAssignment
und SetOnePathAssignment aufgerufen. Weiterhin werden in den Zeilen (6) und (7)
die Prozeduren CheckEvenPathAssignment und SetEvenPathAssignment aufgerufen. Der Aufwand dafur wird nach Lemma 3.9 und Lemma 3.10 ebenfalls jeweils mit
O(jjK jj) begrenzt.
Beispiel 3.12
Fur das KFDD aus Beispiel 3.9 wird in den Zeilen (2) und (3) von Prozedur TestsForPO
die Belegung (0; X; 0; 1) bestimmt, bei der genau ein Pfad (low(v11); low(v13); high(v14))
von v11 zu v15 aktiv ist. Diese Belegung wird in Zeile (4) als Testmuster fur den stuck-at-0
Fehler zu der Menge T der Testmuster hinzugefugt. In den Zeilen (6) und (7) wird
die Belegung (0; X; 0; 0) bestimmt, bei der nur der von der Wurzel v11 ausgehende Pfad
(low(v11 ); low(v13); low(v14)) aktiv ist, der jedoch zu dem terminalen Knoten v25 mit Label 0 fuhrt. Damit ist kein Pfad von v11 zu v15 aktiv und die Belegung ist ein Testmuster
fur den stuck-at-1 Fehler. Dementsprechend wird auch diese Belegung in Zeile (8) zu T
hinzugefugt.
In Abbildung 3.17 ist das Testmuster fur den stuck-at-0 Fehler durch den oberen Wert
und fur den stuck-at-1 Fehler durch den unteren Wert angegeben.
Die Komplexitat fur die Bestimmung eines Testmusters ist nach den bisher prasentierten Ergebnissen jeweils durch O(jjK jj) beschrankt. Fur die Bestimmung einer Belegung,
fur die ein primarer Ausgang des Schaltkreises den Wert 1 oder 0 annimmt, kann allerdings eine kleinere Schranke bestimmt werden. Damit kann zwar eine Verbesserung
der Laufzeitschranke aus Satz 3.16 erreicht werden, aber auf die Gesamtkomplexitat der
Berechnung eines vollstandigen Tests hat diese Verbesserung keinen Einu. Dennoch
wird im folgenden dargelegt, warum nicht alle Knoten eines KFDDs betrachtet werden
mussen, um eine Belegung zu bestimmen, fur die ein primarer Ausgang den Wert 1 bzw.
149

3.4. VOLLSTANDIGE
TESTBARKEIT
1/0
0/1
1,5
+
D
1
0
1
1
1
1
1,5
d1,1
1
0
0
0
1,3
0
0
d1,1
1,3
0
0
d1,2
0
0
0
0
1
0
1,3
1
0
d1,3
1,3
0
0
3,5
1
0
d1,1
3,5
D
D
1
1
1,3
D
d1,3
1,1
0
0
1,2
X
X
x1
X
X
0
0
d3,4
2,2
0
0
0
0
3,5
d3,1
0
1
0
0
1
0
d4,5
1,1
0
1
0
1
d4.5
2,1
1
0
x4
4,5
D
x2
0
0
d3,4
3,2
3,4
D
1
1
0
0
d2,3
1,3
2,3
D
0
0
X
X
d1,2
1,1
3,5
d2,1
+
1
0
0
0
1
1
D
0
0
x3
Abbildung 3.17: Testmuster fur die stuck-at Fehler an dem primaren Ausgang
0 annimmt. Dabei wird kein neues Verfahren verwendet, sondern nur die Analyse der
Prozeduren CheckOnePathAssignment und CheckEvenPathAssignment erneut
fur den Fall betrachtet, da eine Belegung nicht
zu einem beliebigen Knoten aus einem
Level l, sondern zu dem terminalen Knoten v1n+1 mit Label 1 bestimmt wird.
Fur die genauere Analyse der Komplexitat von Prozedur CheckOnePathAssignment
aus Algorithmus 3.3 wird das folgende Lemma benotigt.
Lemma 3.17
Sei K = (G; R; Xn; d) ein KFDD und sei vxk 2 V ein beliebiger Knoten des Graphen
G = (V; E ) sowie v1n+1 der terminale Knoten mit Label 1. Dann gilt:
Ein Aufruf von CheckOnePathAssignment(K; vxk ; v1n+1 ) wird genau dann mit
False beendet, wenn der Knoten vxk die konstante Funktion 0 darstellt.
Beweis:
Der Beweis wird mittels Induktion uber die Anzahl der Level zwischen vxk und dem terminalen Knoten gefuhrt:
Die Induktionsverankerung ergibtn+1sich, falls der Knoten vxk ein terminaler Knoten ist.
Falls vxk der terminale Knoten v2 mit Label 0 ist, stellt dieser Knoten die konstante
150
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
Funktion 0 dar, und Prozedur CheckOnePathAssignment
wird in Zeile (3) mit False
n+1
k
beendet. Andernfalls ist vx der terminale Knoten v1 mit Label 1. Dieser Knoten stellt
nicht die konstante Funktion 0, sondern die konstante Funktion 1 dar, und Prozedur
CheckOnePathAssignment wird in Zeile (2) mit True beendet.
Falls vxk ein beliebiger Knoten aus Level k ist, der die konstante Funktion 0 darstellt, folgt
aus Denition 1.11, da fur jeden Dekompositionstyp sowohl low(vxk ) als auch high(vxk ) die
konstante Funktion 0 darstellen mussen. Der Level dieser beiden Knoten ist jeweils groer
als k. Abhangig davon, ob der Knoten low(vxk ) bei der Bearbeitung der LOW-Kante in dem
Aufruf von CheckOnePathAssignment fur Knoten vxk schon markiert ist, wird in Zeile
(6) entweder zu Zeile (7) oder zu den Zeilen (9) und (10) verzweigt. Wurde der Knoten
low(vxk ) noch nicht markiert, wird in Zeile (7) die Prozedur CheckOnePathAssignment
fur den Knoten low(vxk ) aufgerufen. Mit der Induktionsbehauptung folgt, da dieser Aufruf
mit False beendet wird und dementsprechend die Variable found auf False gesetzt wird.
Wurde der Knoten low(vxk ) bereits markiert, kann dies nur durch einen fruheren Aufruf von
CheckOnePathAssignment erfolgt sein. Nach Induktionsvoraussetzung wurde auch
dieser Aufruf mit False beendet. In diesem Aufruf von CheckOnePathAssignment
mu der Knoten low(vxk ) in Zeile (3) oder Zeile (31) mit NoPath markiert worden sein.
Also wird auch in Zeile (10) des aktuellen Aufrufs die Variable found auf False gesetzt.
Analog folgt, da bei der Bearbeitung der HIGH-Kante entweder in Zeile (19) oder in
Zeile (22) die Variable found auf False gesetzt wird. Damit wird die Bedingung in Zeile
(28) nicht erfullt und der aktuelle Aufruf der Prozedur fur den Knoten vxk wird in Zeile
(32) mit False beendet.
In dem Fall, da der Knoten vxk nicht die konstante Funktion 0 darstellt, folgt wieder
aus Denition 1.11, da mindestens einer der beiden Knoten low(vxk ) oder high(vxk ) nicht
die konstante Funktion 0 darstellen kann. Der Level dieser beiden Knoten ist jeweils
groer als k. Falls low(vxk ) nicht die konstante Funktion 0 darstellt, wird abhangig davon, ob der Knoten low(vxk ) bei der Bearbeitung der LOW-Kante in dem Aufruf von
CheckOnePathAssignment f
ur Knoten vxk schon markiert ist, in Zeile (6) entweder
zu Zeile (7) oder zu den Zeilen (9) und (10) verzweigt. Wurde der Knoten low(vxk ) noch
nicht markiert, wird in Zeile (7) die Prozedur CheckOnePathAssignment fur den
Knoten low(vxk ) aufgerufen. Mit der Induktionsbehauptung folgt, da dieser Aufruf nicht
mit False beendet wird. Demnach wird die Variable found auf True gesetzt. Wurde
der Knoten low(vxk ) bereits markiert, kann dies nur durch einen fruheren Aufruf von
CheckOnePathAssignment erfolgt sein. Nach Induktionsvoraussetzung kann auch dieser Aufruf nicht mit False beendet worden sein. Somit kann der Knoten low(vxk ) in diesem
Aufruf von CheckOnePathAssignment nur in Zeile (2) mit OnePath markiert worden
sein. Also wird in Zeile (9) des aktuellen Aufrufs die Variable found auf True gesetzt. Die
Zeilen (17) bis (26) werden damit nicht durchlaufen und in Zeile (29) wird der aktuelle
Aufruf der Prozedur fur den Knoten vxk mit True beendet. Falls low(vxk ) die konstante
Funktion 0 darstellt, kann high(vxk ) nicht die konstante Funktion 0 darstellen. Dann folgt
analog, da bei der Bearbeitung der HIGH-Kante entweder in Zeile (19) oder in Zeile (21)
die Variable found auf True gesetzt wird, und der aktuelle Aufruf der Prozedur fur den
Knoten vxk in Zeile (29) mit True beendet wird.
Da in einem quasi-reduzierten KFDD jeder Knoten aus dem gleichen Level eine andere
Funktion darstellt, kann es in dem gesamten KFDD nur maximal n Knoten geben, mit
denen die konstante Funktion 0 dargestellt wird. Mit dem Resultat aus Lemma 3.17 ergibt
sich, da die Prozedur CheckOnePathAssignment nur n-mal mit False beendet werden kann. In dem folgenden Lemma wird gezeigt, da im Rahmen der maximal n Aufrufe
151

3.4. VOLLSTANDIGE
TESTBARKEIT
von Prozedur CheckOnePathAssignment fur die Knoten, mit denen die konstante
Funktion 0 dargestellt wird, hochstens n rekursive Aufrufe der Prozedur erfolgen, so da
die Gesamtlaufzeit nur linear mit der Anzahl der Eingange wachst.
Lemma 3.18
= (G; R; Xn;nd+1) ein KFDD und sei vxk 2 V ein beliebiger Knoten des Graphen
G = (V; E ) sowie v1 der terminale Knoten mit Label 1. Dann gilt:
In Zeit O(n) kann eine Belegung bestimmt werden, fur die genau ein Pfad von vxk
n+1
Sei K
zu v1 aktiv ist, bzw. es kann nachgewiesen werden, da eine solche Belegung nicht
existieren kann.
Beweis:
Wird eine Belegung gesucht, fur die genau ein Pfad von vxk zu v1n+1 aktiv ist, dann wird
zunachst der von vxk ausgehende Pfad untersucht,spder nur
aus LOW-Kanten besteht. Sei
dieser Pfad durch = ((vzs ; vzs ); (vzs ; vszis ); : : : ; (vzp ; vzspp )) mit vzs = vxk und sp = n + 1
beschrieben,
wobei jeweils low(vzsii ) = vzi (i 2 f1; 2; : : : ; p 1g) ist.
sp
Falls vzp der terminale Knoten mit Label 1 ist, dann wird der Aufruf von Prozedur
CheckOnePathAssignment f
ur diesen Knoten in Zeile (2) mit True beendet. Damit wird in den verbleibenden p 1 n k +1 n in Bearbeitung
bendlichen Aufrufen
sp
s
s
von CheckOnePathAssignment fur die Knoten vz ; vz ; : : : ; vzp kein weiterer Aufruf
von CheckOnePathAssignment
gestartet und alle Aufrufe werden mit True
beendet.
sp
sp
Andernfalls mu vzp der terminale Knoten mit Label 0 sein. Der Knoten vzp stellt also die konstante Funktion 0 dar und CheckOnePathAssignment wird in Zeile (3)
mit False beendet. Nach Lemma 3.17 gilt, da fur neinen
beliebigen Knoten v 2 V
+1
ein Aufruf von CheckOnePathAssignment(K; v; v1 ) genau dann mit False beendet wird, wenn der Knoten v die konstante Funktion 0 darstellt. Da die betrachteten
KFDDs alle quasi-reduziert sind, kann es in jedem Level nur einen Knoten geben, der
die konstante Funktion 0 darstellt. Damit kann es neben den p n k + 2 n + 1
Aufrufen der Prozedur CheckOnePathAssignment fur die Knoten auf Pfad nur
noch hochstens n k + 1 n + 1 weitere Aufrufe fur jeweils einen Knoten aus leveli
(i 2 fk + 1; k + 2; : : : ; n + 1g) geben, die mit False beendet werden.
Um die Werte fur die Belegung tatsachlich zu bestimmen, mu noch ein Aufruf der Prozedur SetOnePathAssignment aus Algorithmus 3.4 gestartet werden. In jedem Durchlauf der while-Schleife in einem Aufruf von SetOnePathAssignment wird entweder zu
dem high-Nachfolger oder zu dem low-Nachfolger des aktuellen Knoten gewechselt. Damit
wird der Index des aktuellen Knoten jeweils um mindestens 1 erhoht, so da es hochstens
n Durchlaufe der while-Schleife geben kann.
Analog zu Lemma 3.17 kann fur die Prozedur CheckEvenPathAssignment aus Algorithmusn+13.6 gezeigt werden, da ein Aufruf mit einem Knoten vxk und dem terminalen
Knoten v1 genau dann mit False beendet wird, wenn der Knoten vxk die konstante Funktion 1 darstellt. Fur einen Aufruf von Prozedur CheckEvenPathAssignment ergibt
sich dann, da nur 2 n rekursive Aufrufe von CheckEvenPathAssignment gestartet
werden konnen, von denen hochstens n Aufrufe mit False beendet werden. Auerdem
konnen durch die Prozedur CheckEvenPathAssignment auch Aufrufe der Prozedur
CheckOnePathAssignment gestartet werden, deren Anzahl ebenfalls durch 2 n beschrankt ist. Damit ergibt sich Lemma 3.19, auf dessen formalen Beweis hier verzichtet
wird.
1
1
2
2
2
2
3
3
+1
+1
1
1
1
1
1
1
2
2
1
1
152
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
Lemma 3.19
= (G; R; Xn;nd+1) ein KFDD und sei vxk 2 V ein beliebiger Knoten des Graphen
G = (V; E ) sowie v1 der terminale Knoten mit Label 1. Dann gilt:
In Zeit O(n) kann eine Belegung bestimmt werden, fur die eine gerade Anzahl von
n+1
Sei K
Pfaden von vxk zu v1 aktiv ist, bzw. es kann nachgewiesen werden, da eine solche
Belegung nicht existieren kann.
3.4.5 Komplexitat der vollstandigen Testberechnung
Fur die Berechnung eines vollstandigen Tests brauchen nach der Diskussion zu Beginn
von Abschnitt 3.4 nur stuck-at Fehler aus den folgenden Klassen betrachtet werden:
Die X -Klasse mit den Fehlern an dem primaren Eingangen
Die Ik -, Il - und Ib-Klassen mit den Fehlern an den Eingangen der Teilschaltkreise
zur Realisierung der Parity Matrix Multiplikation
Die Ak - und Al -Klassen mit den Fehlern an den Eingangen der AND-Gatter
Die F -Klasse mit den Fehlern an den primaren Ausgangen
Die Komplexitat fur die Berechnung der Testmuster fur die stuck-at Fehler der einzelnen
Klassen wurde in den letzten Abschnitten detailliert untersucht. Zusammenfassend ergibt
sich fur den Gesamtaufwand zur Bestimmung eines vollstandigen Tests folgendes Korollar:
Korollar 3.20
Sei K = (G; R; Xn; d) ein KFDD, bei dem der breiteste Level w Knoten enthalt,
d.h. w = maxfwidthi j 1 i n + 1g. Sei weiterhin SK = (G ; typ; I=O) der durch
das Syntheseverfahren erzeugte Schaltkreis, in dem keine konstanten Signale erzeugt
wurden. Dann gilt:
In Zeit O(n w3 jjK jj) kann auf Basis des Graphen des KFDDs ein vollstandiger Test
berechnet werden, mit dem alle stuck-at Fehler in dem synthetisierten Schaltkreis
getestet werden.
Beweis:
Da jede Kompositionssequenz als binarer Baum dargestellt werden kann, folgt analog
zu der Diskussion aus dem Beweis von Satz 3.8, da es genau n 1 Teilschaltkreise zur
Realisierung von jeweils einer Parity Matrix Multiplikationen gibt.
Fur jeden dieser Teilschaltkreise konnen die Testmuster fur die stuck-at Fehler aus der
Ak - und Al -Klasse nach Satz 3.15 jeweils in Zeit O(w3 jjK jj) bestimmt werden. Daraus
ergibt sich bereits die Schranke O(n w3 jjK jj).
Weiterhin mussen fur jeden Teilschaltkreis noch Testmuster fur die stuck-at Fehler aus
der Ik -, Il - und Ib-Klasse berechnet werden. Fur die n 1 Teilschaltkreise wird dafur nach
Satz 3.14 hochstens Zeit O(n w2 jjK jj) benotigt.
Fur die Testmuster der stuck-at Fehler an jedem der n primaren Eingangen wird nach
Satz 3.13 jeweils O(jjK jj) benotigt. Also ist der Gesamtaufwand hierfur durch O(n jjK jj)
begrenzt.
3.5. EXPERIMENTELLE ERGEBNISSE
153
Schlielich mussen noch Testmuster fur die stuck-at Fehler an den m primaren Ausgangen
bestimmt werden. Der Aufwand fur einen primaren Ausgang ist nach Satz 3.16 ebenfalls
durch O(jjK jj) beschrankt. Da alle Wurzeln in level1 enthalten sind, mu m w sein und
der Gesamtaufwand fur die Testmuster der stuck-at Fehler an den primaren Ausgangen
ist durch O(w jjK jj) beschrankt.
3.5
Experimentelle Ergebnisse
Die Algorithmen zur Bestimmung von DH-Dominatoren und fur die Berechnung von
Testmustern wurden in die Implementierung des Syntheseverfahrens (vgl. Abschnitt 2.3)
integriert und auf die Beispielschaltkreise angewendet.
Die Ergebnisse fur D-vollstandige, quasi-reduzierte KFDDs sind in Tabelle 3.3 fur die kaskadierte Kompositionssequenz und in Tabelle 3.4 fur die baumartige Kompositionssequenz
angegeben.
In der ersten Spalte wird jeweils der Name des Beispielschaltkreises angegeben. Die
nachsten drei Spalten enthalten die in den Komplexitatsbetrachtungen verwendeten Kenngroen der D-vollstandigen, quasi-reduzierten KFDDs, die fur die entsprechende Kompositionssequenz erzeugt werden.
Um sicherzustellen, da die synthetisierten Schaltkreise keine konstanten Signale enthalten, wird bei der betrachteten Kompositionssequenz D fur jedes Paar (k; l) 2 D und
jeweils alle Knoten vxk 2 levelk uberpruft, ob es fur Knoten vxk einen DH-Dominator aus
Level l gibt. In den beiden Tabellen ist die Anzahl der identizierten DH-Dominatoren
angegeben, wobei DH-Dominatoren aus aufeinanderfolgenden Leveln nicht berucksichtigt
werden, da diese DH-Dominatoren bereits in den Abhangigkeitsmatrizen fur aufeinanderfolgende Level durch den Eintrag 1 gekennzeichnet sind. Die Werte aus den Tabellen 3.3
und 3.4 entsprechen also nicht der Gesamtzahl der DH-Dominatoren in dem jeweiligen
KFDD, sondern nur der Anzahl der DH-Dominatoren, die bei der aktuellen Kompositionssequenz fur das Syntheseverfahren relevant sind. Die CPU-Zeit fur die Berechnung der
DH-Dominatoren ist ebenfalls angegeben.
In den letzten beiden Spalten der Tabellen 3.3 und 3.4 sind die Resultate fur die Berechnung eines vollstandigen Tests mit den Verfahren aus Abschnitt 3.4 aufgefuhrt. Neben
der Anzahl der Testmuster fur alle stuck-at Fehler wird die CPU-Zeit angegeben, die fur
die Berechnung des vollstandigen Tests benotigt wird.
Neben den Paaren (k; k + 1) (k 2 f1; 2; : : : ; ng), fur die keine explizite Berechnung von
DH-Dominatoren durchgefuhrt wird, sind in der kaskadierten Kompositionssequenz nur
noch die Paare (l; n + 1) (l 2 f1; 2; : : : ; n 1g enthalten, bei denen fur die Knoten aus
Level l die Existenz eines DH-Dominators auf Level n + 1 uberpruft wird. Entsprechend
der zweiten Bedingung von Denition 3.6 durfen alle Pfade mit einer DH-Kante nicht zu
dem Knoten fuhren, der uber die Pfade ohne DH-Kante erreicht wird. Da Level n +1 nur
die beiden terminalen Knoten enthalt, ist die Bedingung fur DH-Dominatoren aus Level
n + 1 gleichbedeutend dazu, da auch alle Pfade mit DH-Kante zu nur einem Knoten
fuhren. Daher werden bei der kaskadierten Kompositionssequenz nur sehr wenige DHDominatoren gefunden, was sich auch in den Ergebnissen in Tabelle 3.3 widerspiegelt. Da
die Level, in denen nach einem DH-Dominator gesucht wird, bei der baumartigen Kompositionssequenz in den meisten Fallen eine hohere Breite haben, werden auch deutlich
mehr DH-Dominatoren identiziert. Dies ist an den Resultaten aus Tabelle 3.4 ebenfalls
zu erkennen.
154
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
KFDD
DH-Dominatoren Testmuster
Name
n w jjK jj Anzahl
CPU jT j CPU
5xp1
7 8 41
0 <0,1 246 <0,1
add6
12 4 34
1 <0,1 204 <0,1
addm4
9 35 171
0
0,1 829 0,1
alu2
10 47 210
1 <0,1 997 0,1
alu4
14 75 527
5 <0,1 2134 0,1
apex6 135 95 7577
4
0,7 2523 28,2
apex7 49 39 1292
2
0,1 1045 0,6
cc
21 16 181
2
0,1 207 0,1
cm163a 16 7 68
0
0,1 137 <0,1
cm85a 11 5 32
0
0,1 139 <0,1
cmb
16 4 51
0 <0,1 187 0,1
co14
14 2 27
0 <0,1 168 0,1
dist
8 47 168
1 <0,1 1050 0,1
f51m
8 8 41
0 <0,1 257 <0,1
frg1
28 27 345
3 <0,1 826 0,1
gary
15 57 445
1 <0,1 1765 0,1
in7
26 15 235
0 <0,1 439 0,1
m181 15 17 164
0 <0,1 361 <0,1
misg
56 11 365
8 <0,1 415 0,1
mlp4
8 39 147
1 <0,1 757 0,1
my adder 33 4 101
0 <0,1 670 0,1
pcle
19 6 79
0 <0,1 177 <0,1
pcler8 27 12 190
0
0,1 269 0,1
rd73
7 6 31
0 <0,1 194 <0,1
rd84
8 7 43
0 <0,1 258 0,1
sao2
10 17 93
1 <0,1 503 <0,1
shift
19 18 252
1
0,1 455 0,1
squar5
5 13 36
0 <0,1 154 <0,1
t481
16 6 50
0 <0,1 139 <0,1
tial
14 111 578
2 <0,1 3104 0,1
vda
17 133 1594
1
0,1 2952 0,8
vg2
25 15 188
3
0,1 532 0,1
Tabelle 3.3: Schaltkreise mit vollstandigem Test bei kaskadierter Kompositionssequenz
3.5. EXPERIMENTELLE ERGEBNISSE
KFDD
155
DH-Dominatoren Testmuster
Name
n w jjK jj Anzahl
CPU jT j CPU
5xp1
7 10 51
25 <0,1 314 <0,1
add6
12 6 48
16 <0,1 338 <0,1
addm4
9 36 156
22 <0,1 1184 0,1
alu2
10 49 204
57 <0,1 1261 0,1
alu4
14 70 444
121 <0,1 3046 0,2
apex6 135 105 1673 1803
0,1 2927 6,4
apex7 49 37 544
327
0,1 1955 0,5
cc
21 21 130
99 <0,1 225 0,1
cm163a 16 9 58
44 <0,1 126 0,1
cm85a 11 7 40
17 <0,1 235 0,1
cmb
16 5 49
12 <0,1 187 0,1
co14
14 3 33
8 <0,1 163 <0,1
dist
8 49 165
9 <0,1 1383 0,1
f51m
8 11 48
15 <0,1 295 <0,1
frg1
28 26 221
89
0,1 1418 0,1
gary
15 48 372
51 <0,1 2222 0,2
in7
26 16 174
104 <0,1 604 0,1
m181 15 17 117
58 <0,1 393 0,1
misg
56 17 222
160
0,1 548 0,1
mlp4
8 40 139
32 <0,1 808 0,1
my adder 33 17 161
66 <0,1 1509 0,1
pcle
19 9 68
48 <0,1 180 0,1
pcler8 27 12 111
96 <0,1 292 0,1
rd73
7 7 35
16 <0,1 205 <0,1
rd84
8 9 47
21 <0,1 280 <0,1
sao2
10 19 99
15 <0,1 768 0,1
shift
19 18 142
89 <0,1 929 0,1
squar5
5 14 39
12 <0,1 177 <0,1
t481
16 8 42
26 <0,1 166 <0,1
tial
14 90 517
51 <0,1 5353 0,3
vda
17 134 843
570 <0,1 3994 1,0
vg2
25 16 159
61 <0,1 944 0,1
Tabelle 3.4: Schaltkreise mit vollstandigem Test bei baumartiger Kompositionssequenz
156
KAPITEL 3. TESTBARKEIT DER SCHALTKREISE
Allerdings fuhrt die Bestimmung von DH-Dominatoren und die Anwendung der gefundenen Dominatorbeziehungen wahrend der Synthese bei keinem der untersuchten Beispielschaltkreise zu einer Veranderung der synthetisierten Schaltkreise. Es werden also alle
konstanten Abhangigkeiten bereits durch die implizite Anwendung der in Abschnitt 2.2.2
prasentierten lokalen Vereinfachungen erkannt. Selbst bei den konstruierten Beispielen
(z.B. aus Abbildung 3.4) auert sich der Eekt nur bei vorgegebener Variablenordnung
und DTL. Nach Berechnung einer optimierten Variablenordnung und DTL werden auch
in den konstruierten Beispielen alle konstanten Abhangigkeiten durch Anwendung von
lokalen Vereinfachungen erkannt. Die Berechnung von DH-Dominatoren ist jedoch weiterhin notig, um garantieren zu konnen, da in den synthetisierten Schaltkreisen keine
konstanten Signale existieren.
Dies ist insofern unproblematisch, da fur die Berechnung der DH-Dominatoren bei fast allen Schaltkreisen 1=10 CPU-Sekunde ausreicht. Lediglich fur apex6 wird bei der kaskadierten Kompositionssequenz mit 0; 7 CPU-Sekunden vergleichsweise viel CPU-Zeit benotigt.
Dies ist auf die hohe Anzahl von primaren Eingangen und die groe Anzahl von Knoten
zuruckzufuhren. Bei der kaskadierten Kompositionssequenz wird der Einu dieser beiden
Groen deshalb verstarkt, weil bei jeder Suche nach einem DH-Dominator fur einen Knoten aus Level l (l 2 f1; 2; : : : ; n 1g jeweils die Pfade bis zu den terminalen Knoten aus
Level n +1 untersucht werden mussen. Dagegen ist bei der baumartigen Kompositionssequenz der Abstand der Level bei der Suche nach DH-Dominatoren in den meisten Fallen
geringer, so da auch die in Tabelle 3.4 angegebenen Zeiten fur alle Beispielschaltkreise
durch 1=10 CPU-Sekunde begrenzt sind.
Bei den Resultaten fur die Berechnung der vollstandigen Tests wird einerseits bestatigt,
da die Anzahl der berechneten Testmuster mit der Schaltkreisgroe wachst. Dabei ist
bei Schaltkreisen mit wenigen primaren Eingangen die Anzahl der berechneten Testmuster zum Teil groer als die Gesamtzahl von 2n unterschiedlichen Testmustern, die fur
einen Schaltkreis mit n primaren Eingangen existieren. Dies ist darauf zuruckzufuhren,
da die Testmuster fur verschiedene stuck-at Fehler gleich sein konnen, bzw. da durch
ein Testmuster mehrere stuck-at Fehler getestet werden konnen. In Abschnitt 4.1 werden
noch Verfahren vorgestellt, mit denen aus den berechneten Testmengen die Testmuster
ausgewahlt werden, die fur die praktische Durchfuhrung der Tests relevant sind. Dabei bilden die vollstandigen Tests insbesondere bei Schaltkreisen mit vielen primaren Eingangen
die notige Voraussetzung, um die Anwendung von automatischer Testmustergenerierung
zu vermeiden.
Die Laufzeiten fur die Berechnung der vollstandigen Tests sind ebenfalls fur die meisten
Beispielschaltkreise sehr klein. Nennenswerte CPU-Ressourcen werden lediglich fur die
Beispielschaltkreise apex6, apex7 und vda verbraucht. Die sehr hohe Laufzeit fur apex6
ergibt sich aus der Kombination der hohen Werte fur alle Kenngroen des KFDDs. Der
Beispielschaltkreis apex7 hat eine vergleichsweise hohe Anzahl von primaren Eingangen
und in dem KFDD fur vda gibt es sehr breite Level.
Kapitel 4
Optimierungen
Im folgenden werden Methoden vorgestellt, mit denen die durch das Syntheseverfahren
erzeugten Ergebnisse weiter optimiert werden konnen.
Zum einen wurde bei der Bestimmung des vollstandigen Tests nicht auf die Groe der
Testmenge geachtet. Es wurden zwar A quivalenz- und Dominanzbeziehungen zwischen
Fehlern ausgenutzt, aber fur jeden zu untersuchenden Fehler wurde ein neues Testmuster
zu dem vollstandigen Test hinzugefugt. Daher werden verschiedene Verfahren vorgestellt,
mit denen die Groe der Testmenge nachtraglich reduziert werden kann, wobei gewahrleistet ist, da weiterhin fur jeden stuck-at Fehler aus dem synthetisierten Schaltkreis ein
Testmuster enthalten ist.
Zum anderen werden in den synthetisierten Schaltkreisen Gatter erzeugt, mit denen die
gleiche Funktion berechnet wird. Es wird eine Methode aufgezeigt, mit der solche Gatter
wahrend der Synthese identiziert werden. In dem synthetisierten Schaltkreis wird dann
nur jeweils ein Vertreter realisiert. Dadurch kann die Groe und die Tiefe der synthetisierten Schaltkreise zum Teil drastisch reduziert werden. Leider kann nicht garantiert werden,
da die wahrend der Synthese erzeugten Testmuster weiterhin einen vollstandigen Test
bilden. Durch Fehlersimulation zeigt sich jedoch, da auch nach der Optimierung bei allen
Beispielschaltkreisen jeder stuck-at Fehler entdeckt wird.
4.1
Optimierung des vollst
andigen Tests
In Kapitel 3 wurden Verfahren fur die Bestimmung von Testmustern fur stuck-at Fehler vorgestellt. Dabei wurden bereits A quivalenz- und Dominanzbeziehungen zwischen
verschiedenen stuck-at Fehlern ausgenutzt, um die Anzahl der Fehler zu reduzieren, fur
die ein Testmuster bestimmt wird. Allerdings wurden bei der Berechnung eines neuen
Testmusters fur den aktuellen stuck-at Fehler die bereits bestimmten Testmuster nicht
betrachtet. Dadurch kann es einerseits vorkommen, da das gleiche Testmuster mehrmals
zu dem vollstandigen Test hinzugefugt wird. Auerdem kann in der bereits berechneten
Testmenge schon ein Testmuster enthalten sein, mit dem der aktuelle stuck-at Fehler getestet werden kann. Durch Anwendung des vorgestellten Verfahrens wird aber ein anderes
Testmuster berechnet, das ebenfalls zu dem vollstandigen Test hinzugefugt wird.
Auerdem wurden bei der Bestimmung von Testmustern zunachst alle Positionen mit
dem don't care Wert initialisiert und wahrend der Berechnung des Testmusters moglichst
wenige Positionen mit dem Wert 0 oder 1 belegt. Um einen Test durchzufuhren, mussen
jedoch konkrete Wert fur die Positionen mit don't care bestimmt werden. Dabei resultiert
jede beliebige Zuweisung in einem Testmuster, mit dem der stuck-at Fehler getestet werden
157
158
KAPITEL 4. OPTIMIERUNGEN
kann, fur den das Testmuster ursprunglich bestimmt wurde. Durch die Zuweisung von
konkreten Werten fur die don't cares in verschiedenen Testmustern konnen wiederum
gleiche Testmuster entstehen.
Im folgenden werden verschiedene Methoden aufgezeigt, mit denen die Anzahl der Testmuster reduziert werden kann. Dazu wird einerseits uberpruft, inwieweit mit einem Testmuster auch stuck-at Fehler entdeckbar sind, fur die das Testmuster ursprunglich nicht
bestimmt wurde. Andererseits wird durch geeignetes Festlegen der don't care Werte der
Testmuster erreicht, da moglichst viele gleiche Testmuster entstehen. In der kompaktierten Testmenge konnen Duplikate eines Testmusters entfernt werden.
4.1.1 Fehlersimulation
Ein weit verbreitetes Verfahren zur Bestimmung von Testmengen ist die Fehlersimulation [1, 53], bei der fur eine Eingangsbelegung die Belegung des Schaltkreises berechnet
wird und anschlieend uberpruft wird, ob der Eekt eines stuck-at Fehlers bei dieser
Belegung an einem primaren Ausgang entdeckbar ist. Die klassische Anwendung der Fehlersimulation besteht darin, fur zufallig gewahlte Eingangsbelegungen die Fehler zu bestimmen, die durch dieses Zufallsmuster entdeckt werden. Jede Eingangsbelegung, mit der
wenigstens ein neuer stuck-at Fehler entdeckt werden kann, wird in die Testmenge aufgenommen. Die durch dieses Testmuster entdeckbaren Fehler werden markiert. Fur die
verbleibenden stuck-at Fehler konnen entweder weitere Zufallsmuster bestimmt werden
oder es konnen explizit Testmuster durch automatische Testmustergenerierung berechnet
werden.
Durch Fehlersimulation kann aber auch eine gegebene Testmenge reduziert werden, indem
die Testmuster in umgekehrter Reihenfolge simuliert werden (siehe z.B. [49]). Dabei wird
ausgenutzt, da durch die Testmuster, die zum Schlu fur die gegenuber Zufallsmustern
resistenten Fehler berechnet werden, auch viele Fehler entdeckt werden, die zu Beginn
durch Zufallsmuster entdeckt wurden.
Analog zu diesem Verfahren konnen die berechneten vollstandigen Tests einfach reduziert werden, indem die Belegungen der ursprunglichen Testmenge simuliert werden. Dazu
mussen allerdings die don't care Werte durch konkrete Werte ersetzt werden. Nach der
Fehlersimulation wird die aktuelle Belegung als Testmuster in die neue Testmenge aufgenommen, falls wenigstens ein neuer Fehler entdeckt wurde. Ansonsten wird die aktuelle
Belegung verworfen und mit der nachsten Belegung aus der ursprunglichen Testmenge
fortgefahren. Dadurch wird unter anderem erreicht, da gleiche Testmuster nur einmal
in die neue Testmenge aufgenommen werden. Sobald alle Fehler als entdeckbar markiert
wurden, kann die Fehlersimulation abgebrochen werden, und weitere Belegungen brauchen
nicht untersucht werden.
Da es sich bei der ursprunglichen Testmenge um einen vollstandigen Test handelt, ist
sichergestellt, da fur alle Fehler ein Testmuster enthalten ist. Somit braucht keine automatische Testmustergenerierung verwendet werden.
4.1.2 Statische Kompaktierung
In der statischen Testmusterkompaktierung [1] wird versucht, in einer vorgegebenen Menge von Testmustern mit don't care Werten die don't care Werte so zu belegen, da gleiche
Testmuster entstehen. Im Gegensatz dazu wird bei der dynamischen Testmusterkompaktierung versucht, die automatische Testmustergenerierung so zu steuern, da mit jedem
erzeugten Testmuster moglichst viele Fehler entdeckt werden.
159

4.1. OPTIMIERUNG DES VOLLSTANDIGEN
TESTS
Zur Beschreibung der statischen Testmusterkompaktierung werden folgende Begrie verwendet:
Denition 4.1
Sei Z = f0; 1; X g die Menge der Booleschen Werte 0 und 1 sowie dem don't care
Wert X . Seien weiterhin a = (a1 ; a2 ; : : : ; an ) und b = (b1 ; b2 ; : : : ; bn ) zwei Belegungen
aus Z n .
a) Belegung a heit unvollst
andig speziziert, wenn sie mindestens einen don't
care Wert enthalt, d.h. wenn es mindestens ein i 2 f1; 2; : : : ; ng mit ai = X
gibt.
Andernfalls heit a vollst
andig speziziert.
b) Belegung a ist kompatibel zu Belegung b (a ./ b), wenn an keiner Position
widerspruchliche Werte gesetzt sind, d.h. wenn es kein i 2 f1; 2; : : : ; ng gibt,
fur das entweder ai = 0 und bi = 1 oder fur das ai = 1 und bi = 0 ist.
c) Belegung a ist eine Generalisierung von Belegung b (a.b), wenn a kompatibel
zu b ist und mindestens fur die Positionen, die in b don't care sind, auch die
entsprechenden Positionen in a don't care sind, d.h. fur alle i 2 f1; 2; : : : ; ng
folgt aus bi = X auch ai = X .
Belegung b heit dann Spezialisierung von a (b / a).
d) Belegung a ist eine Instanz von Belegung b, wenn a eine vollstandig spezizierte Spezialisierung von b ist.
e) Die Kombination von kompatiblen Belegungen a und b (a b) ist fur jede
Position i 2 f1; 2; : : : ; ng deniert durch:
(a b)i =
ai
bi
falls bi = X
falls ai = X
Es ist zu beachten, da die Begrie nur deniert sind, falls die Testmuster jeweils die
gleiche Lange haben. Die Symbole fur Generalisierung und Spezialisierung sind so gewahlt,
da jeweils das Testmuster mit der kleineren Anzahl von don't care Werten auf der Seite
mit der Spitze des Dreiecks steht, da es fur diese Testmuster jeweils weniger Instanzen
gibt. Die Begrie werden an einem Beispiel verdeutlicht.
Beispiel 4.1
Rechts sind 5 unvollstandig spezizierte Testmuster angegeben.
Testmuster a1 und a4 sind nicht kompatibel, da a12 = 1 und a42 = 0 ist.
Auerdem ist Testmuster a5 nicht kompatibel zu den Testmustern a3 und
a4 , da fur die 4. Position widerspruchliche Werte gesetzt sind.
Testmuster a4 ist eine Spezialisierung von a3. Testmuster a4 ist weder eine
Spezialisierung noch eine Generalisierung von a2, da a21 = 0 und a41 = X
bzw. a22 = X und a42 = 0 ist.
Die Kombination von Testmuster a1 und a2 resultiert in O11X. Auerdem
resultiert die Kombination des Testmusters a4 mit dem Testmuster a3 in
einem Testmuster, das wieder gleich zu a4 ist.
a1
a2
a3
a4
a5
=
=
=
=
=
01XX
0X1X
XX11
X011
0XX0
160
KAPITEL 4. OPTIMIERUNGEN
4.1.2.1 Entfernen von generalisierten Testmustern
In einer kompaktierten Testmenge sollte kein Testmuster a enthalten sein, das eine Generalisierung eines anderen Testmusters b ist. Denn fur die Durchfuhrung eines Tests mussen
vollstandig spezizierte Testmuster verwendet werden. Es mu also eine Instanz von b in
den vollstandigen Test aufgenommen werden. Da jede Instanz von b auch eine Instanz des
generalisierten Testmusters a ist, enthalt der vollstandige Test bereits eine Instanz von a
und es braucht keine eigene Instanz von a hinzugefugt werden.
Ein einfaches Verfahren zum Entfernen von Generalisierungen ist in Algorithmus 4.1 angegeben.
Algorithmus 4.1
EntferneGeneralisierungen
// Entfernt Testmuster aus
( Testmenge T )
T , die Generalisierungen von anderen Testmustern aus T
(1) Tneu = ;
(2) for all a 2 T do
(3)
f ound = False
(4)
for all b 2 Tneu do
(5)
if a . b then f ound = True; break ; (6)
if a / b then Tneu = Tneu [ fag n fbg
(7)
f ound = True; break ; (8)
od
(9)
if f ound = False then Tneu = Tneu [ fag (10) od
sind.
Der Ablauf von Prozedur EntferneGeneralisierungen wird an der Testmenge aus
Beispiel 4.1 aufgezeigt.
Beispiel 4.2
In Beispiel 4.1 ist nur a3 eine Generalisierung von a4. Sofern die Testmuster durch Prozedur EntferneGeneralisierungen in der angegebenen
Reihenfolge bearbeitet werden, wird a3 zunachst in Tneu aufgenommen, da
es weder eine Generalisierung noch eine Spezialisierung der Testmuster
a1 und a2 ist, die zum Zeitpunkt der Bearbeitung von a3 bereits in Tneu
enthalten sind.
Bei der Bearbeitung von a4 ist die Bedingung aus Zeile (6) fur a3 erfullt, da
a4 eine Spezialisierung von a3 ist. Damit wird a3 wieder aus Tneu entfernt
und statt dessen a4 in Tneu eingefugt. Danach wird die innere Schleife in
Zeile (7) beendet und die auere Schleife mit dem Testmuster a5 fortgesetzt. Die entstehende Testmenge enthalt 4 Testmuster.
a1
a2
a4
a5
=
=
=
=
01XX
0X1X
X011
0XX0
Die Laufzeit von Prozedur EntferneGeneralisierungen ist durch O(njT j2) gegeben,
da jedes Paar von Knoten aus T miteinander verglichen werden mu und ein Vergleich von
zwei n-stelligen Testmustern O(n) benotigt. Auf einem k-Bit Prozessor, der die bitweise
Verknupfungen in Maschinenwortbreite unterstutzt, kann die Laufzeit verbessert werden,
indem jeweils k Positionen eines Testmusters durch zwei Maschinenworter kodiert werden.
Dann konnen die Operationen /, ., ./ und durch entsprechende bitweise Verknupfungen
auf der Kodierung der Testmuster durchgefuhrt werden. Die Auswertung einer Operation,
die durch c Verknupfungen auf der jeweiligen Kodierung realisiert wird, benotigt dann fur
n-Bit lange Testmuster nur c dn=ke Verknupfungen.

4.1. OPTIMIERUNG DES VOLLSTANDIGEN
TESTS
161
4.1.2.2 Kombination von kompatiblen Testmustern
Mit dem Entfernen von Generalisierungen werden nur die Testmuster entfernt, die fur
eine Testmenge mit vollstandig spezizierten Testmustern keine neue Instanz liefern. Jedoch konnen auch fur ein Paar von Testmustern a und b, die zwar keine Generalisierung
voneinander sind, aber zumindest kompatibel zueinander sind, solche Instanzen gebildet
werden, die eine Spezialisierung fur a und fur b bilden. Dies wird durch die Kombination
c = a b der beiden Testmuster erreicht. Da das neue Testmuster c eine Spezialisierung von
a und b ist, konnen diese beiden Testmuster in der Testmenge durch das eine Testmuster
c ersetzt werden.
In Prozedur GreedyTestmusterKombination aus Algorithmus 4.2 ist ein einfaches
Greedy-Verfahren angegeben, bei dem ein Testmuster jeweils mit dem ersten kompatiblen
Testmuster aus der neuen Testmenge kombiniert wird.
Algorithmus 4.2
GreedyTestmusterKombination
// Ersetzt kompatible Testmuster aus
( Testmenge T )
T
durch deren Kombination
(1) Tneu = ;
(2) for all a 2 T do
(3)
f ound = False
(4)
for all b 2 Tneu do
(5)
if a ./ b then Tneu = Tneu [ fa bg n fbg
(6)
f ound = True; break ; (7)
od
(8)
if f ound = False then Tneu = Tneu [ fag (9) od
Die Realisierung von Prozedur GreedyTestmusterKombination erfolgt analog zu
Prozedur EntferneGeneralisierungen, wobei nicht mehr auf Generalisierung bzw.
Spezialisierung, sondern auf Kompatibilitat zwischen zwei Testmustern uberpruft wird.
Entsprechend wird das durch Kombination erzeugte Testmuster in die neue Testmenge
aufgenommen.
Beispiel 4.3
Bei der Anwendung von GreedyTestmusterKombination auf
Beispiel 4.1 werden zunachst die beiden kompatiblen Testmuster
a1 und a2 zu 011X kombiniert. Da dieses Testmuster wiederum zu
a3 kompatibel ist, wird es durch die Kombination von 011X und
a3 ersetzt. Das daraus resultierende Ergebnis 0111 ist zu keinem
der folgenden Testmuster a4 oder a5 mehr kompatibel, so da die
entstehende Testmenge 3 Testmuster enthalt.
a1 a2 a3 = 0111
a4 = X011
a5 = 0XX0
Da auch in Prozedur GreedyTestmusterKombination jedes Paar von Knoten aus T
miteinander verglichen wird und gegebenenfalls die Kombination berechnet wird, ist die
Laufzeit ebenfalls durch O(n jT j2) gegeben. Die Ausnutzung von bitparallelen Operationen auf Maschinenwortbreite ist auch in Prozedur GreedyTestmusterKombination
moglich.
Bei der Greedy-Strategie ist das Resultat von der Reihenfolge abhangig, in der die einzelnen Testmuster bearbeitet werden. In der linken Tabelle aus Abbildung 4.1 ist eine
162
KAPITEL 4. OPTIMIERUNGEN
Testmenge dargestellt, die kompaktiert werden soll. In den nachsten beiden Tabellen sind
die Ergebnisse dargestellt, die von Prozedur GreedyTestmusterKombination bei der
jeweils angegebenen Reihenfolge erzeugt werden. Bei der Reihenfolge aus der mittleren
Tabelle wird die optimale Losung mit 2 Testmustern gefunden, wahrend bei der Reihenfolge aus der rechten Tabelle eine Losung mit insgesamt 4 Testmustern berechnet wird.
Original
a1 = 0X0 a2 = X1X
a3 = 00X a4 = XX1
a5 = 000 a6 = 111
Reihenfolge:
a1 ; a3 ; a5 ; a2 ; a4 ; a6
a1 a3 a5 = 000
a2 a4 a6 = 111
Reihenfolge:
a1 ; a2 ; a3 ; a4 ; a5 ; a6
a1 a2 = 010
a3 a4 = 001
a5 = 000
a6 = 111
Tabelle 4.1: Einu der Reihenfolge bei der Greedy-Strategie
Das Problem der Optimierung von Testmengen kann auch als Cliquen-Problem formuliert
werden, das folgendermaen deniert ist (siehe z.B. [30]):
Gegeben:
Ein ungerichteter Graph G = (V; E ) und eine naturliche Zahl k jV j.
Gesucht:
Kann V in k disjunkte Cliquen C1; C2; : : : ; Ck partitioniert werden, so da fur jede Clique
Ci V (i 2 f1; 2; : : : ; kg) gilt, da jedes Paar von Knoten aus Ci durch eine Kante aus
E verbunden ist.
Das Cliquen-Problem ist zwar NP-vollstandig, allerdings gibt es eÆziente Heuristiken, mit
denen in den meisten Fallen gute Losungen bestimmt werden konnen, d.h. es kann eine
Zerlegung gefunden werden, bei der die Anzahl der Cliquen nicht zu gro wird.
Um die Anzahl von Testmustern in einer gegebenen Testmenge zu optimieren, kann ein
Graph G = (V; E ) konstruiert werden, bei dem fur jedes Testmuster a 2 T ein Knoten
v erzeugt, der als Markierung m(v ) das Testmuster a enthalt. Indem Kanten zwischen
den Knoten genau dann eingefugt werden, wenn die zugehorigen Testmuster kompatibel
zueinander sind, wird gewahrleistet, da die Testmuster von allen Knoten einer Clique
miteinander kombiniert werden konnen.
In Prozedur TestmusterOptimierung aus Algorithmus 4.3 ist eine Umsetzung dieses
Vorgehens angegeben.
In den Zeilen (1) bis (7) wird der Graph konstruiert. In Zeile (8) erfolgt die eigentliche
Optimierung durch eine beliebige Realisierung CliqueCover fur das Cliquen-Problem.
Fur jede von dieser Prozedur bestimmte Clique wird in den Zeilen (10) bis (14) die
Kombination aller zugehorigen Testmuster berechnet und diese Kombination in die neue
Testmenge aufgenommen.
163

4.1. OPTIMIERUNG DES VOLLSTANDIGEN
TESTS
Algorithmus 4.3
TestmusterOptimierung
( Testmenge T )
// Zerlegt die Testmenge in moglichst wenig Cliquen, wobei alle Testmuster einer Clique
// kompatibel zueinander sind und anschlieend kombiniert werden.
(1) V = ;; E = ;
(2) for all a 2 T do
(3)
Fuge neuen Knoten v mit m(v) = a in V ein
(4)
for all w 2 V n fvg do
(5)
If a ./ m(w) then Fuge Kante (v; w) in E ein (6)
od
(7) od
(8) fC1 ; C2 ; : : : ; Ck g =
(V; E )
(9) Tneu = ;
(10) for i = 1 to k do
(11)
a = XX: : :X
(12)
for all v 2 Ci do a = a m(v) od
(13)
Tneu = Tneu [ fag
(14) od
CliqueCover
Beispiel 4.4
In Abbildung 4.1 ist der von Prozedur TestmusterOptimierung
erzeugte Graph fur die 5 Testmuster aus Beispiel 4.1 angegeben.
Durch eine Realisierung der Prozedur CliqueCover wird z.B. die
durch die grau unterlegten Flachen dargestellte Partitionierung in 2
Cliquen C1 und C2 bestimmt. Damit werden die Testmuster a1 und
a5 sowie die Testmuster a2 , a3 und a4 jeweils zu einem Testmuster
kombiniert, so da die entstehende Testmenge 2 Testmuster enthalt.
a1 a5 = 01X0
a2 a3 a4 = 0011
C1
a1
C2
a3
a2
a5
a4
Abbildung 4.1: Zerlegung des Graphen fur kompatible Testmuster in Cliquen
Die Komplexitat von Prozedur TestmusterOptimierung wird einerseits durch das
Erzeugen des Graphen bestimmt. Fur das Einfugen der Kanten mu wieder jedes Paar
164
KAPITEL 4. OPTIMIERUNGEN
von Testmustern miteinander verglichen werden, so da hierfur wieder O(n jT j2) Schritte
benotigt werden. Bei der Berechnung der neuen Testmenge braucht jedes Testmuster nur
einmal mit dem bisherigen Zwischenergebnis kombiniert zu werden, so da hierfur nur
O(n jT j) Schritte notwendig sind. Die Komplexitat der eigentlichen Berechnung der
Cliquen hangt von der gewahlten Implementierung fur Prozedur CliqueCover ab.
Eine Realisierungsmoglichkeit besteht darin, das Cliquen-Problem auf das GraphfarbeProblem zuruckzufuhren. Damit konnen Heuristiken zur Farbung von Graphen eingesetzt
werden. Eine solche Heuristik ist der Algorithmus von Brelaz [13], fur den eine Realisierung
mit Laufzeit von O(jV j + jE j) = O(jT j2) existiert [42]. Auch dabei handelt es sich um
eine Greedy-Strategie, die allerdings robust gegen die Ordnung der Testmuster ist.
4.1.3 Experimentelle Ergebnisse
Die vorgestellten Verfahren zur Reduktion von Testmengen wurden auf die vollstandigen
Tests angewendet, die wahrend der Synthese auf Basis des KFDDs fur den erzeugten
Schaltkreis bestimmt werden.
Fur die Fehlersimulation wurde eine Weiterentwicklung der Implementierung von [8] verwendet, bei der vollstandig spezizierte Testmuster verwendet werden. Dazu werden alle
don't care Werte durch den Wert 0 ersetzt, um die hier vorgestellten Ergebnisse zu erhalten. Es wurde auch der Einu untersucht, den die Festlegung auf 0 auf die Groe
der erzeugten Testmengen hat. Allerdings konnten auch bei Verwendung von 1 oder bei
zufallsgesteuerter Auswahl zwischen 0 und 1 keine markanten Unterschiede festgestellt
werden.
Fur die Zerlegung in Cliquen wurde eine Realisierung von [13, 42] verwendet, die im Rahmen von [48] implementiert wurde. Im Umfang dieser Implementierung ist eine weitere
Heuristik verfugbar, bei der jeweils eine maximale Clique gesucht und diese Clique aus
dem Graph entfernt wird. Durch iterierte Anwendung dieses Verfahrens kann ebenfalls
eine Zerlegung in Cliquen bestimmt werden. Allerdings ist die Performance dieses Verfahrens auer bei sehr kleinen Graphen schlechter, als bei dem Verfahren nach [13, 42]. In
einigen Fallen wurde das Verfahren nach mehreren Stunden ohne Ergebnis abgebrochen.
Auerdem liefert das Verfahren jeweils eine Zerlegung, bei der die Anzahl der Cliquen mit
der durch [13, 42] bestimmten Zerlegung ubereinstimmt. Daher werden die Resultate hier
nicht aufgefuhrt.
In Tabelle 4.2 sind die Ergebnisse der verschiedenen Methoden zusammengestellt. In den
ersten beiden Spalten wird der Name des Beispielschaltkreises und die Anzahl der Testmuster in dem durch das Syntheseverfahren fur die baumartige Kompositionssequenz
bestimmten vollstandigen Test angegeben. Fur jedes Verfahren wird die Groe der reduzierten Testmengen sowie die benotigte CPU-Zeit in Sekunden angegeben.
Zunachst werden die Resultate fur Prozedur GreedyTestmusterKombination angegeben. Die Groe der Testmenge kann bereits durch diese einfache Strategie stark reduziert
werden.
Zum Vergleich sind in den letzten beiden Spalten die Resultate fur das Entfernen von
Generalisierungen mit Prozedur EntferneGeneralisierungen und fur die auf der
Heuristik fur das Cliquen-Problem aufbauende Prozedur TestmusterOptimierung
angegeben. Die Groe, die durch Entfernen von Generalisierungen erreicht wird, sollte
durch Prozedur GreedyTestmusterKombination mindestens erreicht werden. Dagegen bilden die Resultate des Cliquen-basierten Verfahrens aus der letzten Spalte sehr gute
Losungen.

4.1. OPTIMIERUNG DES VOLLSTANDIGEN
TESTS
165
Greedy& General.
Greedy Simulation Simulation
entfernen Cliquen
Name jT j jT j CPU jT j CPU jT j CPU jT j CPU jT j CPU
5xp1
314 50 0,3 83 0,1 49 0,3 50 0,4 50 1,0
add6
338 70 0,5 107 0,1 61 0,5 86 1,0 64 2,2
addm4 1184 243 6,8 158 0,1 117 6,9 258 11,1 240 15,9
alu2 1261 255 6,2 236 0,2 175 6,3 283 11,3 253 17,7
alu4 3046 625 38,9 512 0,4 392 39,1 776 83,1 611 138,3
apex6 2927 273 10,5 689 0,9 230 10,8 989 100,8 258 149,8
apex7 1955 273 10,2 475 0,3 242 10,4 537 44,9 260 64,6
cc
225 32 0,3 84 0,1 32 0,3 84 0,9 31 2,1
cm163a 126 25 0,1 48 0,1 25 0,1 40 0,3 23 1,0
cm85a 235 51 0,3 74 0,1 50 0,3 56 0,5 51 1,1
cmb
187 39 0,2 64 0,1 35 0,3 51 0,4 39 1,0
co14
163 47 0,2 77 0,1 47 0,2 47 0,3 47 0,8
dist 1383 138 3,9 200 0,1 131 4,0 140 5,5 138 3,4
f51m
295 62 0,4 79 0,1 50 0,4 65 0,6 62 1,3
frg1 1418 412 17,5 492 0,2 363 17,7 467 34,9 409 52,8
gary 2222 298 14,7 340 0,3 255 14,9 329 25,4 291 33,1
in7
604 108 1,8 133 0,1 93 1,9 167 4,6 104 7,9
m181 393 64 0,6 90 0,1 59 0,7 97 1,4 64 0,6
misg
548 115 1,7 214 0,1 110 1,8 195 6,1 115 9,0
mlp4 808 148 2,5 122 0,1 80 2,6 149 3,7 148 5,8
my adder 1509 268 6,3 272 0,2 167 6,4 345 12,0 266 19,5
pcle
180 35 0,3 55 0,1 35 0,3 64 0,6 35 1,5
pcler8 292 46 0,5 78 0,1 37 0,5 105 1,6 44 3,2
rd73
205 37 0,2 63 0,1 35 0,2 38 0,3 37 0,6
rd84
280 43 0,3 88 0,1 43 0,3 45 0,4 43 0,9
sao2
768 126 2,2 135 0,1 103 2,3 125 3,2 125 4,8
shift
929 58 1,0 145 0,1 55 1,1 159 4,7 54 7,8
squar5 177 27 0,2 39 0,1 27 0,2 27 0,2 27 0,5
t481
166 44 0,3 74 0,1 44 0,3 46 0,4 44 0,9
tial 5353 1092 130,6 897 1,6 686 131,1 1139 237,9 1086 305,1
vda 3994 171 16,8 222 0,8 148 17,1 234 33,9 168 33,8
vg2
944 224 6,1 302 0,2 224 6,2 296 14,6 223 6,1
Tabelle 4.2: Reduktion der fur die baumartige Kompositionssequenz bestimmten Tests
166
KAPITEL 4. OPTIMIERUNGEN
Fur das einfache Greedy-Verfahren liegt die erzielte Testgroe in fast allen Fallen zwischen
diesen beiden Werten. Fur viele Beispielschaltkreise wird sogar das gleiche Resultat wie fur
das Cliquen-basierte Verfahren erreicht. Dies ist insbesondere fur die Beispielschaltkreise
zu erwarten, bei denen auch die Resultate fur das Entfernen von Generalisierungen gleich
oder nur geringfugig groer als fur das Cliquen-basierte Verfahren sind. Allerdings gibt
es auch Beispielschaltkreise, wie z.B. cc, cmb oder vda, bei denen das Greedy-Verfahren
sehr gute Resultate liefert, obwohl durch Entfernen von Generalisierungen eine deutlich
groere Testmenge ubrig bleibt. Bemerkenswert ist noch, da die Testmenge des Beispielschaltkreis sao2 bereits durch das Entfernen von Generalisierungen auf 125 Testmuster
kompaktiert wird, wahrend das Greedy-Verfahren in einer Testmenge resultiert, die ein
Testmuster mehr enthalt. Hier mu also eine ahnliche Situation wie in dem Beispiel aus
Abbildung 4.1 vorliegen.
Die benotigte Laufzeit ist in fast allen Fallen fur das Greedy-Verfahren am geringsten. Im
Vergleich zu dem Verfahren zur Entfernung von Generalisierungen ist dies im wesentlichen
dadurch bedingt, da die neue Testmenge kleiner ist, so da ein weiteres zu untersuchendes
Testmuster mit weniger Testmustern verglichen werden mu. Bei dem Cliquen-basierten
Verfahren wird die Anzahl der Testmuster beim Aufbauen des Graphen uberhaupt nicht
reduziert, so da bereits hierfur ein groer Teil der Laufzeit benotigt wird.
Bei der Reduktion der Testgroe durch Fehlersimulation wird in den meisten Fallen nicht
einmal die Groe erreicht, die nur durch Entfernen der Generalisierungen moglich ist.
Dies ist moglich, wenn ein Testmuster ein anderes Testmuster generalisiert, aber der don't
care Wert widerspruchlich zu dem Wert des spezialisierten Testmusters festgelegt wird.
Andererseits kann die bestimmte Testmenge auch kleiner werden, als durch das Cliquenbasierte Verfahren. Dabei kommt das Prinzip der Fehlersimulation zum Tragen, nach
dem fur ein gegebenes Testmuster uberpruft wird, welche anderen Fehler noch alle von
diesem Testmuster entdeckt werden. Die Laufzeiten fur die Fehlersimulation sind fur alle
Beispielschaltkreise sehr gering.
Um die Vorteile der beiden Ansatze zu nutzen, wurden in einem weiteren Experiment
zunachst mit dem Greedy-Verfahren die Testmengen weitestgehend kompaktiert. Damit
wird erreicht, da die don't care Werte in den unvollstandig spezizierten Testmustern
zunachst durch Werte ersetzt werden, die wenig Widerspruche zu anderen Testmustern
erzeugen. Anschlieend werden die verbleibenden don't care Werte auf 0 festgesetzt und
mittels Fehlersimulation uberpruft, ob aus der kompaktierten Testmenge noch weitere
Testmuster entfernt werden konnen, mit denen keine weiteren Fehler mehr entdeckt werden. Im Vergleich zu dem reinen Greedy-Verfahren werden die Testmengen dadurch in
vielen Fallen nochmals erheblich reduziert und Groen erreicht, die zum Teil erheblich
kleiner oder zumindest sehr nahe an den Resultaten des Cliquen-basierten Verfahrens
sind. Die Kombination mit der Fehlersimulation bietet sich insbesondere deshalb an, weil
die Laufzeiten fur die Fehlersimulation wieder vernachlassigbar klein sind. Die in der Tabelle angegebenen Werte entsprechen der kumulierten Laufzeit fur das Greedy-Verfahren
und die Fehlersimulation.
4.2
Optimierung der synthetisierten Schaltkreise
4.2.1 Verschmelzen aquivalenter Gatter
Eine Abhangigkeitsmatrix Dk;k+1 fur aufeinanderfolgende Level kann nur die Werte xk ,
xk , 1 und 0 enthalten, da es fur ein Paar von Knoten vxk 2 levelk und vyk+1 2 levelk+1 nur 4
4.2. OPTIMIERUNG DER SYNTHETISIERTEN SCHALTKREISE
167
verschiedene Moglichkeiten gibt, welche der von einem Knoten vxk ausgehenden Kanten zu
vyk+1 fuhren (vgl. Abbildung 2.4). Da in den synthetisierten Schaltkreisen keine konstanten
Signale erzeugt werden, sind die Ausgange des Teilschaltkreises Dk;k+1 dadurch realisiert,
da sie entweder direkt oder uber einen Inverter mit dem primaren Eingang verbunden
werden.
Entsprechend gibt es nur eine begrenzte Anzahl von Moglichkeiten dafur, wie in einem
Teilschaltkreis Dk;l die Abhangigkeit zwischen einem Knoten vxk 2 levelk und vyl 2 levell
realisiert wird. In dem bisherigen Verfahren wird jedoch jedes Paar von Knoten unabhangig voneinander bearbeitet. Dadurch ist es moglich, da verschiedene AND-Gatter
erzeugt werden, deren Eingange jeweils mit den gleichen Signalen verbunden sind. Da
die Ausgangssignale dieser AND-Gatter alle die gleiche Boolesche Funktion realisieren,
genugt es, ein solches AND-Gatter zu realisieren und die Fanoutbranches aller ursprunglichen Ausgangssignale mit dem Ausgangssignal des einen AND-Gatters zu verbinden.
Dadurch kann es wiederum vorkommen, da auch verschiedene EXOR-Gatter mit gleichen Eingangssignalen verbunden sind, so da auch hierfur nur ein Reprasentant realisiert
werden mu.
Denition 4.2
Sei SK = (G ; typ; I=O) ein Schaltkreis und seien g; g 0 2 Z zwei Gatter mit Eingangsgrad d = din (g ) = din (g 0 ) und Ausgangsgrad 1. Weiterhin seien s1 ; s2 ; : : : ; sd bzw.
s01 ; s02 ; : : : ; s0d die Eingangssignale von g bzw. g 0 und o bzw. o0 die Ausgangssignale.
g und g0 heien aquivalente Gatter, falls sie den gleiche Typ haben, die zu
diesem Typ gehorige Grundfunktion symmetrisch ist und sie mit den gleichen
Eingangssignalen verbunden sind, d.h. typ(g ) = typ(g 0 ) und fs1 ; s2 ; : : : ; sd g =
fs01 ; s02; : : : ; s0dg.
Falls g und g 0 aquivalente Gatter sind, dann heien die Ausgangssignale o und
o0 aquivalente Signale.
Falls g und g 0 aquivalente Gatter sind, dann ist die Verschmelzung von g
und g 0 folgendermaen deniert:
Entferne das Gatter g , alle Eingange I(g; i) = (si ; g ) (i 2 f1; 2; : : : ; dg) sowie
den Ausgang O(g; 1) = (g; o) und das Ausgangssignal o. Ersetze alle Fanoutzweige bj = O(o; j ) (j 2 f1; 2; : : : ; dout (o)g) des Signals o durch neue Fanoutzweige (o0 ; drain(bj )) von Signal o0 zu allen Eingangen mit denen Signal o
verbunden war.
Beispiel 4.5
In Abbildung 4.2 ist ein Ausschnitt aus einem KFDD und die durch das bisherige Syntheseverfahren erzeugte Schaltkreisrealisierung dargestellt. Dabei werden die gestrichelt
dargestellten Verbindungen und Gatter realisiert, wahrend die fett eingezeichneten Verbindungen nicht existieren.
In dem Schaltkreis sind einerseits alle Inverter aus D2;3 aquivalent. Auerdem sind die
AND-Gatter A1 und A01 aquivalent, da sie jeweils mit den Signalen fur die primaren
Eingange x1 und x2 verbunden sind. Analog sind die AND-Gatter A2 und A02 aquivalent,
da sie jeweils mit 2dem
Signal fur den primaren Eingang x1 sowie mit dem Signal zur
Realisierung von d4;;32 verbunden sind.
Diese aquivalenten Gatter konnen jeweils verschmolzen werden. Dadurch
werden die
Eingange des EXOR-Gatters E mit dem Signal zur Realisierung von d32;;33 und mit dem
168
KAPITEL 4. OPTIMIERUNGEN
X1
pD
nD
X2
1
S
1,3
1,3
d1,1
1,3
X1
1
X2
2
X3
1
X1
2
X2
X1
3
X2
3
X3
4
2
1,3
4
X2
5
X3
3
1,3
d2,1 d2,2 d3,1
1,3
1,3
d3,2 d3,3 d4,3
1,3
D
E
+
A2
A1
1,2
d1,2
d1,2
2,4
1,2
2,3
1,2
d3,4 d4,5
1,2
2,3
E
A2
A1
2,3
d3,3 d2,3
5,3
d1,1 d2,1 d4,2
2,3
2,3
D
D
x1
x2
Abbildung 4.2: Verschmelzen von aquivalenten Gattern
Ausgang von A01 verbunden, wodurch es aquivalent zu dem EXOR-Gatter E 0 wird. Nachdem auch diese beiden Gatter verschmolzen werden, entsteht der Schaltkreis, in dem die
in Abbildung 4.2 gestrichelte dargestellten Verbindungen und Gatter durch die fett dargestellten Verbindungen ersetzt wurden.
Es kann ebenfalls anhand des KFDDs untersucht werden, ob die Abhangigkeit fur zwei
Paare von Knoten gleich ist. Dabei mu jedoch jede Kombination von zwei Paaren untersucht werden. Da es bereits O(w2) verschiedene Paare von Knoten aus zwei Leveln gibt,
wurde dieses Verfahren in O(w4) Vergleichen resultieren, in denen jeweils die Knoten
zwischen den entsprechenden Leveln betrachtet werden mussen.
Da in dem vorgestellten Syntheseverfahren die Gatter von den primaren Eingangen zu
den primaren Ausgangen erzeugt werden, kann statt dessen vor dem Erzeugen eines neuen Gatters g uberpruft werden, ob bereits ein aquivalentes Gatter g0 existiert. Falls noch
kein aquivalentes Gatter existiert, wird es zusammen mit seinem Ausgangssignal erzeugt.
Andernfalls wird das Verschmelzen des bereits existierenden Gatters und des neu zu erzeugenden Gatters wahrend der Synthese implizit durchgefuhrt, d.h. es wird kein neues
169
4.2. OPTIMIERUNG DER SYNTHETISIERTEN SCHALTKREISE
Gatter erzeugt, sondern einfach das Ausgangssignal des aquivalenten Gatters verwendet.
Um entscheiden zu konnen, ob zu dem aktuell zu erzeugenden Gatter bereits ein aquivalentes Gatter existiert, und um das Ausgangssignal des aquivalenten Gatters zu nden,
wird jedes Gatter mit seinem Typ, den Eingangssignalen und einem Verweis auf das zugehorige Ausgangssignal in eine Hash-Tabelle (z.B. [41]) eingetragen. Zur Berechnung der
Hash-Funktion werden der Typ des Gatters sowie die eindeutigen Namen der Eingangssignale verwendet.
Neben der Optimierung der Schaltkreisgroe bewirkt die Verschmelzung von Gattern auch
noch eine Veranderung der Tiefe. Nach Denition 1.5 wird die Tiefe des Schaltkreises
durch die Lange des langsten Pfades bestimmt. Die Anzahl der Gatter auf einem Pfad
bleibt bei der Verschmelzung gleich. Jedoch kann sich die Verzogerung dadurch andern,
da sich die Anzahl der Fanoutzweige auf dem langsten Pfad verandert. Dies wird an
einem Beispiel verdeutlicht.
Beispiel 4.6
In Abbildung 4.3 ist je ein Beispiel dargestellt, bei dem die Tiefe des Schaltkreises durch
Verschmelzen von Gattern einmal verringert und einmal erhoht wird.
Verringerung
Erhöhung
s
+
+
s
s
+
+
s
+
+
s
s
+
+
s
s
Abbildung 4.3: A nderung der Schaltkreistiefe durch Verschmelzen von Gattern
In dem linken Beispiel ist eine Situation dargestellt, in der die Tiefe verringert wird. Sei
der fett eingezeichnete Pfad ein Teil des Pfades in dem Schaltkreis, durch den die Tiefe
des Schaltkreises bestimmt wird. Die Lange des fett eingezeichneten Teilpfades ist durch
3 0; 2 + 1; 0 + 1 0; 2 = 1; 8 gegeben, da das Signal s drei Fanoutzweige und das Signal s0
nur einen Fanoutzweig hat. Nach dem Verschmelzen der zwei linken EXOR-Gatter wird
die Lange auf 2 0; 2 + 1; 0 + 1 0; 2 = 1; 6 reduziert.
In dem rechten Beispiel wird die Lange des fett dargestellten Pfades erhoht. Vor dem
Verschmelzen der Gatter ist die Lange durch 2 0; 2+1; 0+2 0; 2 = 1; 8 bestimmt. Durch
die Verschmelzung wird zwar der Fanout von Signal s um eins verringert, dafur wird aber
der Fanout von Signal s0 um zwei erhoht, so da insgesamt die Lange des Pfades auf
1 0; 2 + 1; 0 + 4 0; 2 = 2; 0 ansteigt.
Leider kann durch das Verschmelzen von Gattern ein fur den ursprunglichen Schaltkreis
bestimmter vollstandiger Test ungultig fur den neuen Schaltkreis werden, d.h. es kann
stuck-at Fehler in den neuen Schaltkreis geben, fur den in der gegebenen Testmenge kein
Testmuster enthalten ist. Dies resultiert daraus, da die Testmuster jeweils fur singlestuck-at Fehler bestimmt wurden. Nach dem Verschmelzen von Gattern entspricht ein
stuck-at Fehler an dem Eingang eines Gatters jedoch zwei gleichzeitig auftretenden stuckat Fehlern in dem ursprunglich synthetisierten Schaltkreis.
170
KAPITEL 4. OPTIMIERUNGEN
Beispiel 4.7
Auf der linken Seite von Abbildung 4.4 wird ein Ausschnitt aus einem Schaltkreis gezeigt.
Die beiden stuck-at-1 Fehler an den Fanoutzweigen e und e0 konnen mit der angegebenen
Belegung getestet werden. Durch den oberen Wert wird der Eekt des stuck-at-1 Fehlers
an e dargestellt, bei dem der Unterschied nur zu dem linken Eingang des EXOR-Gatters
propagiert wird. Entsprechend zeigt der untere Wert den Eekt des Fehlers an e0, bei dem
der Unterschied nur zu dem rechten Eingang des EXOR-Gatters propagiert wird.
1
1/0
1/0
+
1
1
1
1
0/1
0
1
1
0/1
0
0
0
+
1
1/0
0/1
0
1
1
0/1
1
1/0
0/1
0
1
1/0
0/1
0
0
0/1
e
1
1
0
0/1
e
0/1
1
1
1
1/0
1
0/1
1/0
1/0
0/1
1
1
1
1
0/1
0
e
1
1
Abbildung 4.4: Testbarkeit von stuck-at Fehlern nach dem Verschmelzen von Gattern
Der Schaltkreis auf der rechten Seite von Abbildung 4.4 entsteht aus dem linken Schaltkreis, indem die beiden unteren AND-Gatter verschmolzen werden. Bei der gleichen Belegung, mit der die beiden stuck-at-1 Fehler an e und e0 in dem linken Schaltkreis getestet
werden, wird auch in dem rechten Schaltkreis fur den stuck-at-1 Fehler an e0 ein Unterschied erzeugt. Dieser Unterschied wird allerdings gleichzeitig uber die beiden Fanoutzweige des Ausgangssignals von dem verschmolzenen AND-Gatter propagiert. Dadurch
kommt es bei der Rekonvergenz an dem EXOR-Gatter zu einer Ausloschung des Unterschieds. Damit ist die angegebene Belegung kein Testmuster fur den stuck-at Fehler an e0
in dem Schaltkreis mit verschmolzenem Gatter.
4.2.2 Experimentelle Ergebnisse
Das implizite Anwenden von Verschmelzungen aquivalenter Gatter wurde in das Syntheseverfahren integriert und auf die Beispielschaltkreise angewendet. In Tabelle 4.3 wird ein
Vergleich zu den Ergebnissen ohne Verschmelzen von aquivalenten Gattern aus Tabelle 2.4
gegeben.
4.2. OPTIMIERUNG DER SYNTHETISIERTEN SCHALTKREISE
Synthesis
kaskadiert
jjSK jjd
d(SK )
baumartig
jjSK jjd
d (SK )
Name jPinj ohne mit ohne mit ohne mit ohne mit
5xp1
7 69 63 16,2 16,2 119 104 14,4 13,4
add6
12 56 48 26,2 25,6 117 101 15,2 15,2
addm4
9 268 225 27,6 23,8 459 261 30,2 19,0
alu2
10 325 282 29,2 27,8 509 355 36,8 25,8
alu4
14 712 617 45,8 40,2 1157 655 56,0 33,4
apex6 135 789 761 38,8 38,2 1068 970 32,0 30,6
apex7
49 342 328 35,6 36,2 716 616 25,2 24,6
cc
21 61 59 11,8 11,8
74 69 11,0 11,2
cm163a 16 42 39 12,6 12,6
43 41 8,8 8,8
cm85a
11 41 37 16,8 16,2
80 75 13,6 13,4
cmb
16 61 60 16,8 16,8
61 58 10,0 10,0
co14
14 65 65 32,8 32,8
72 65 11,4 11,2
dist
8 380 316 29,4 25,0 540 266 36,8 18,4
f51m
8 78 66 21,0 20,4 114 93 16,4 14,8
frg1
28 303 280 52,0 51,6 555 443 27,2 24,0
gary
15 602 521 41,6 36,8 865 479 38,6 25,2
in7
26 141 127 30,8 30,4 236 190 22,2 15,6
m181
15 123 114 17,8 17,2 139 116 12,2 11,6
misg
56 140 133 31,8 31,4 188 175 19,4 19,2
mlp4
8 237 201 24,4 21,4 336 220 29,6 18,0
my adder 33 183 158 74,7 73,8 526 478 23,2 23,2
pcle
19 46 46 18,8 18,8
51 51 10,0 10,0
pcler8
27 67 62 23,0 22,8
84 75 11,2 12,4
rd73
7 52 49 12,6 12,4
63 48 10,2 10,6
rd84
8 69 64 15,4 14,8
80 59 12,8 12,4
sao2
10 179 153 23,0 22,6 294 172 22,6 17,6
shift
19 163 162 15,2 15,2 360 260 22,6 17,0
squar5
5 45 41 11,6 11,4
61 42 10,4 10,0
t481
16 48 48 17,8 17,8
62 60 12,6 12,6
tial
14 1051 834 55,0 41,2 2119 1031 66,4 31,0
vda
17 969 751 43,8 35,8 1663 687 57,8 28,4
vg2
25 186 178 37,2 36,8 367 342 21,4 22,2
P
7893 6880 907,1 855,8 13178 8657 748,2 570,8
Tabelle 4.3: Verschmelzen von Gattern in synthetisierten Schaltkreisen
171
172
KAPITEL 4. OPTIMIERUNGEN
Sowohl fur die kaskadierte als auch fur die baumartige Kompositionssequenz ist jeweils
die Groe und die Tiefe der Schaltkreise aufgefuhrt, die ohne und mit Verschmelzen von
Gattern erzeugt wird. Die benotigten CPU-Zeiten werden erst in Tabelle 5.1 angegeben.
Da die Zeiten fur die Synthese der Schaltkreise mit Verschmelzen von Gattern nur minimal
von der Summe der Zeiten abweicht, die fur die Synthese ohne Verschmelzen von Gattern
(vgl. Tabelle 2.4) und fur das Bestimmen der DH-Dominatoren (vgl. Tabellen 3.3 und 3.4)
benotigt wird, wird hier auf eine separate Angabe der Zeiten verzichtet.
Durch das Verschmelzen von aquivalenten Gattern wird die Groe der synthetisierten
Schaltkreise verringert. Bei der baumartigen Kompositionssequenz ist die Einsparung erheblich hoher als bei der kaskadierten Kompositionssequenz. Fur die Beispielschaltkreise
dist, tial und vda wird die Groe sogar halbiert. Die starkere Reduktion der Groe fur die
baumartige Kompositionssequenz resultiert daraus, da hierbei viele Teilschaltkreise fur
Abhangigkeiten zwischen Knoten aus Leveln erzeugt werden, die nur einen geringen Abstand haben. In diesem Fall ist die Wahrscheinlichkeit, da die Schaltkreisrealisierungen
fur verschiedene Paare von Knoten gleich sind, hoher als bei der kaskadierten Kompositionssequenz, bei der relativ haug die Abhangigkeit zwischen Knoten realisiert wird,
deren Level einen groen Abstand haben.
Bei den synthetisierten Schaltkreisen uberwiegt klar die Verringerung der Tiefe. Es ist wieder deutlich, da bei der baumartigen Kompositionssequenz die Tiefe durch Verschmelzen
von Gattern starker reduziert wird, als bei der kaskadierten Kompositionssequenz. Auch
hier ist die Reduktion wieder fur die Beispielschaltkreise dist, tial und vda mit uber 50%
am groten. Dagegen gibt es insgesamt nur funf Falle, in denen die Tiefe geringfugig
erhoht wird: bei der kaskadierten Kompositionssequenz fur Beispielschaltkreis apex7 und
bei der baumartigen Kompositionssequenz fur die Beispielschaltkreise cc, pcler8, rd73 und
vg2.
Obwohl nicht mehr garantiert werden kann, da die von dem KFDD abgeleiteten Testmengen auch fur die neuen Schaltkreise vollstandige Tests bilden, hat eine Fehlersimulation
mit den wahrend dem Syntheseverfahren bestimmten Testmengen ergeben, da auch nach
dem Verschmelzen der Gatter alle stuck-at Fehler entdeckt werden. Dies gilt auch fur die
kompaktierten bzw. bereits durch Fehlersimulation auf dem ursprunglichen Schaltkreis
reduzierten Testmengen.
Kapitel 5
Vergleich mit anderen Verfahren
Die vorgestellten Verfahren zur Synthese von Schaltkreisen und zur Bestimmung von
vollstandigen Tests werden mit anderen Verfahren verglichen. Zunachst werden zwei Verfahren zur Synthese von mehrstugen Schaltkreisen betrachtet. Das erste Verfahren basiert ebenfalls auf KFDDs, wahrend in dem zweiten Verfahren keine DDs verwendet
werden, um die Schaltkreisstruktur abzuleiten. Schlielich wird ein ausgereifter Testmustergenerator verwendet, um fur die durch das vorgestellte Syntheseverfahren erzeugten
Schaltkreise einen vollstandigen Test zu bestimmen.
Fur die zum Vergleich verwendeten Verfahren ist die Implementierung verfugbar, so da
alle Programme mit dem gleichen Compiler erzeugt und die Experimente auf dem gleichen
Rechner (vgl. Abschnitt 2.3) durchgefuhrt werden konnten.
5.1
Knotenersetzung
Aus der Darstellung einer Booleschen Funktion als DD kann eine Schaltkreisrealisierung
auch erzeugt werden, indem jeder Knoten des DDs durch einen Teilschaltkreis ersetzt wird,
der die Dekompositionsfunktion des Knotens realisiert. Die Verbindungen zwischen den
einzelnen Teilschaltkreisen werden durch die Kanten des DDs bestimmt. Entsprechende
Verfahren wurden in [3] fur BDDs vorgestellt und in [6] auf KFDDs verallgemeinert.
Fur jeden inneren Knoten v 2 levelk eines KFDDs K wird dabei ein Teilschaltkreis mit
einem Ausgang und drei Eingangen erzeugt. Der Ausgang des Teilschaltkreises realisiert
die durch den Knoten v im KFDD K dargestellte Boolesche Funktion. Ein Eingang des
Teilschaltkreises ist mit dem primaren Eingang fur die Variable xk verbunden und die beiden anderen Eingange sind mit den Ausgangen der Teilschaltkreise fur low(v) und high(v)
verbunden. Abhangig von dem Dekompositionstyp dk des Knoten v wird eine Realisierung
fur den Teilschaltkreis entsprechend Denition 1.11 verwendet. Terminale Knoten werden
einfach durch Gatter vom Typ C0 oder C1 ersetzt, mit denen die konstanten Funktionen
0 und 1 realisiert werden.
Beispiel 5.1
In Abbildung 5.1 ist ein KFDD und die durch Knotenersetzung erzeugte Schaltkreisrealisierung dargestellt. Die Teilschaltkreise fur die Knoten aus Level 1 realisieren mit
flow(v) xk fhigh(v) die positive Davio-Dekomposition und sind mit dem primaren Eingang
fur x1 verbunden. Da der Dekompositionstyp fur Level 2 negativ Davio ist, realisieren die
entsprechenden Teilschaltkreise flow(v) xk fhigh(v) und sind mit dem primaren Eingang
fur x2 verbunden. Die Teilschaltkreise fur die Knoten aus Level 3 realisieren schlielich
173
174
KAPITEL 5. VERGLEICH MIT ANDEREN VERFAHREN
die Shannon-Dekomposition xk flow(v) + xk fhigh(v) und sind mit dem primaren Eingang
fur x3 verbunden. Fur die terminalen Knoten werden die Gatter vom Typ C0 und C1
verwendet.
f1
f2
+
pD
+
X1
X1
x1
+
nD
X2
+
X2
x2
S
X3
X3
x3
0
1
0
1
Abbildung 5.1: KFDD und durch Knotenersetzung erzeugter Schaltkreis
A hnlich zu dem vorgestellten Syntheseverfahren werden konstante Signale nicht realisiert.
Statt dessen werden Gatter mit konstanten Eingangen vereinfacht. Weiterhin kann durch
einfache Operationen auf den KFDDs uberpruft werden, ob Belegungen existieren, fur
die an den Nachfolgern low(v) und high(v) eines Knoten v des KFDDs die Kombinationen 00, 01, 10 und 11 erzeugt werden. Sofern nur einige der Kombinationen auftreten,
kann die Realisierung des Teilschaltkreises fur v ebenfalls vereinfacht werden. Z.B. kann
bei positiver Davio-Dekomposition die Realisierung des Teilschaltkreises zu flow(v) + xk
vereinfacht werden, falls bei allen Belegungen nur die beiden Kombinationen 01 und 10
erzeugt werden.
Auch fur die durch Knotenersetzung erzeugten Schaltkreise konnen Testbarkeitseigenschaften untersucht werden. Fur BDDs wurde in [3] die Testbarkeit bzgl. des gate-delay
Fehlermodells untersucht. Auerdem wurden die Testbarkeitseigenschaften der aus BDDs
erzeugten Schaltkreise in [5] fur das stuck-at Fehlermodell sowie das Zellenfehlermodell
und das path-delay Fehlermodell analysiert. In [6] wurden die Schaltkreise untersucht, die
durch Knotenersetzung aus KFDDs synthetisiert werden.
Bei allen Experimenten wurde die gleiche Variablenordnung und DTL verwendet (vgl.
Abschnitt 2.3.1). In den angegebenen CPU-Zeiten ist die Bestimmung der Variablenordnung und DTL sowie das Erzeugen des entsprechenden KFDDs nicht enthalten. Es wird
nur die Zeit berucksichtigt, um die Schaltkreisrealisierung von einem gegebenen KFDD
abzuleiten.
Fur die Schaltkreise, die durch Knotenersetzung erzeugt werden, ist die Groe in den meisten Fallen am schlechtesten. Insbesondere fur den Beispielschaltkreis vda ist die Groe des
175
5.1. KNOTENERSETZUNG
kaskadiert
Synthesis
baumartig
Knotenersetzung
Name jPinj jjSK jjd d(SK ) CPU jjSK jjd d(SK ) CPU jjSK jjd d(SK )
5xp1
7
63 16,2 0,1 104 13,4 0,1
59 19,4
add6 12
48 25,6 0,1 101 15,2 0,1
48 26,2
addm4 9 225 23,8 0,1 261 19,0 0,2 301 27,2
alu2 10 282 27,8 0,1 355 25,8 0,3 364 30,2
alu4 14 617 40,2 0,2 655 33,4 0,9 815 44,8
apex6 135 761 38,2 2,4 970 30,6 5,1 1043 48,4
apex7 49 328 36,2 0,3 616 24,6 0,6 363 46,0
cc
21
59 11,8 0,1
69 11,2 0,1
75 16,8
cm163a 16
39 12,6 0,1
41
8,8 0,1
43 17,2
cm85a 11
37 16,2 0,1
75 13,4 0,1
46 22,2
cmb 16
60 16,8 0,1
58 10,0 0,1
40 15,8
co14 14
65 32,8 0,1
65 11,2 0,1
87 34,0
dist
8 316 25,0 0,1 266 18,4 0,2 392 27,4
f51m
8
66 20,4 0,1
93 14,8 0,1
55 19,6
frg1 28 280 51,6 0,1 443 24,0 0,2 201 47,8
gary 15 521 36,8 0,2 479 25,2 0,5 745 42,4
in7
26 127 30,4 0,1 190 15,6 0,2 162 34,0
m181 15 114 17,2 0,1 116 11,6 0,1 126 22,2
misg 56 133 31,4 0,1 175 19,2 0,2 133 30,4
mlp4
8 201 21,4 0,1 220 18,0 0,1 294 26,6
my adder 33 158 73,8 0,1 478 23,2 0,2 137 80,8
pcle 19
46 18,8 0,1
51 10,0 0,1
61 23,6
pcler8 27
62 22,8 0,1
75 12,4 0,1
95 25,4
rd73
7
49 12,4 0,1
48 10,6 0,1
60 15,4
rd84
8
64 14,8 0,1
59 12,4 0,1
74 16,8
sao2 10 153 22,6 0,1 172 17,6 0,1 208 26,8
shift 19 162 15,2 0,1 260 17,0 0,2 210 17,6
squar5 5
41 11,4 0,1
42 10,0 0,1
54 14,2
t481 16
48 17,8 0,1
60 12,6 0,1
36 16,2
tial
14 834 41,2 0,3 1031 31,0 1,3 1206 49,8
vda
17 751 35,8 0,7 687 28,4 3,2 1236 49,6
vg2 P25 178 36,8 0,1 342 22,2 0,2 206 38,2
6888 855,8 6,7 8657 570,8 15,2 8975 973,0
Tabelle 5.1: Vergleich des Syntheseverfahrens mit Knotenersetzung
CPU
0,1
0,1
0,2
0,2
0,4
0,6
0,2
0,1
0,1
0,1
0,1
0,1
0,2
0,1
0,2
0,4
0,2
0,1
0,1
0,2
0,1
0,1
0,1
0,1
0,1
0,2
0,1
0,1
0,1
0,8
0,6
0,2
6,4
176
KAPITEL 5. VERGLEICH MIT ANDEREN VERFAHREN
durch Knotenersetzung erzeugten Schaltkreises fast doppelt so gro wie fur die Schaltkreise, die durch das vorgestellte Syntheseverfahren bei kaskadierter und baumartiger
Kompositionssequenz bestimmt werden. Fur einige Beispielschaltkreise erzeugt die Knotenersetzung Realisierungen, deren Groe zwischen oder unter den Werten fur die Groe
der Schaltkreise liegt, die bei der kaskadierten oder baumartigen Kompositionssequenz erzielt werden. Allerdings wird das Minimum der Groe fur die kaskadierte und baumartige
Kompositionssequenz nur bei den Beispielschaltkreisen cmb und frg1 deutlich unterschritten. Insgesamt ist die Anzahl der Gatter mit 2 Eingangen, die fur die Realisierung aller
Beispielschaltkreise benotigt werden, bei der Knotenersetzung am groten.
Die Tiefe der durch Knotenersetzung erzeugten Schaltkreise ist bei allen Beispielschaltkreisen schlechter als fur die Schaltkreise, die mit der baumartigen Kompositionssequenz
synthetisiert werden. Verglichen mit der kaskadierten Kompositionssequenz gibt es nur
wenige Beispielschaltkreise, bei denen die Tiefe der durch Knotenersetzung erzeugten
Schaltkreise geringfugig kleiner ist.
Die benotigte CPU-Zeit ist fur die Knotenersetzung bei allen Beispielschaltkreisen unter
einer Sekunde. Auch fur Beispielschaltkreis apex6 werden nur 0; 6 CPU-Sekunden benotigt,
wahrend das vorgestellte Syntheseverfahren bei der kaskadierten 2; 4 CPU-Sekunden und
bei der baumartigen Kompositionssequenz sogar 5; 1 CPU-Sekunden braucht. Insgesamt
verbraucht die Bestimmung der Schaltkreisrealisierungen bei gegebenen KFDDs fur alle
Beispielschaltkreise bei der Knotenersetzung am wenigsten CPU-Zeit.
5.2
SIS
Neben den DD-basierten Syntheseverfahren gibt es machtige Methoden zur Synthese von
Schaltkreisen, die auf der schrittweisen Verbesserung von gegebenen Schaltkreisrealisierungen beruhen. Dabei wird die Struktur einer Schaltkreisrealisierung analysiert, und
durch geeignete Sequenzen von regelbasierten Transformationen wird eine verbesserte
Realisierung bestimmt. Das Resultat dieses Syntheseverfahrens hangt von der initialen
Reprasentation des Schaltkreises ab. Auerdem haben die moglichen Transformationstypen und die Strategien zur Auswahl des aktuellen Transformationstyps sowie der Bewertung und Auswahl verschiedener Transformationsmoglichkeiten groen Einu auf die
bestimmte Realisierung.
An der Universitat von Berkeley wurde ein entsprechendes Software-Package Mis [12]
fur die Synthese von Schaltkreisen entwickelt, in dem eine Vielzahl von Verfahren und
Methoden zur Verfugung stehen. Dieses Package wird standig um weitere Anwendungsgebiete und neue Methoden aus aktuellen Forschungsergebnissen erweitert. Das aus Mis
hervorgegangene Synthesetool Sis [50] hat sich als Standard fur die mehrstuge Synthese
von AND/OR-basierten Schaltkreisen etabliert. Auch in Sis werden mittlerweile DDs
eingesetzt, um Boolesche Funktionen darzustellen und eine gegebene Schaltkreisrealisierung zu analysieren. Allerdings wird die Struktur des Graphen nicht dazu verwendet, um
eine Schaltkreisrealisierung abzuleiten.
Die Anwendung der verschiedenen Methoden und Strategien in Sis wird uber Skripte
gesteuert. Im Umfang der Basisinstallation von Sis ist unter anderem das Skript rugged
enthalten, das sich bewahrt hat, um kleine Schaltkreisrealisierungen zu bestimmen.
Die Synthese von Schaltkreisen durch Anwendung des Skriptes rugged in dem SoftwarePackage Sis wird in Tabelle 5.2 mit dem in dieser Arbeit vorgestellte Verfahren verglichen. Analog zu Tabelle 5.1 werden zunachst die Ergebnisse bei dem Verschmelzen von
177
5.2. SIS
aquivalenten Gattern sowohl fur die kaskadierte als auch fur die baumartige Kompositionssequenz wiederholt. In den letzten drei Spalten werden die Ergebnisse von Sis fur das
Skript rugged angegeben. Es wird wieder jeweils die Groe und Tiefe des Schaltkreises
sowie die benotigte CPU-Zeit aufgefuhrt.
Die Groe der durch Sis erzeugten Schaltkreise ist zum Teil groer und zum Teil kleiner
als fur die Schaltkreise, die durch das vorgestellte Syntheseverfahren fur die kaskadierte
und baumartige Kompositionssequenz bestimmt werden. Besonders auallig sind die Unkaskadiert
Synthesis
baumartig
Sis
Name jPinj jjSK jjd d(SK ) CPU jjSK jjd d (SK ) CPU jjSK jjd d(SK ) CPU
5xp1
7
63 16,2 0,1 104 13,4 0,1 131 36,8 1,7
add6 12
48 25,6 0,1 101 15,2 0,1
57 29,4 5,8
addm4 9 225 23,8 0,1 261 19,0 0,2 347 64,4 29,8
alu2 10 282 27,8 0,1 355 25,8 0,3 334 55,2 59,7
alu4 14 617 40,2 0,2 655 33,4 0,9 621 61,2 217,2
apex6 135 761 38,2 2,4 970 30,6 5,1 679 36,6 9,2
apex7 49 328 36,2 0,3 616 24,6 0,6 201 22,8 2,6
cc
21
59 11,8 0,1
69 11,2 0,1
43
9,2 0,5
cm163a 16
39 12,6 0,1
41
8,8 0,1
37 17,2 0,3
cm85a 11
37 16,2 0,1
75 13,4 0,1
42
8,6 0,4
cmb 16
60 16,8 0,1
58 10,0 0,1
46 10,6 0,2
co14 14
65 32,8 0,1
65 11,2 0,1
67 13,4 0,4
dist
8 316 25,0 0,1 266 18,4 0,2 275 52,4 10,6
f51m
8
66 20,4 0,1
93 14,8 0,1
94 34,8 1,5
frg1 28 280 51,6 0,1 443 24,0 0,2 195 23,6 6,1
gary 15 521 36,8 0,2 479 25,2 0,5 452 79,8 46,9
in7
26 127 30,4 0,1 190 15,6 0,2 105 19,6 1,5
m181 15 114 17,2 0,1 116 11,6 0,1
90 16,8 0,7
misg 56 133 31,4 0,1 175 19,2 0,2 103 12,6 0,8
mlp4
8 201 21,4 0,1 220 18,0 0,1 294 49,4 8,1
my adder 33 158 73,8 0,1 478 23,2 0,2 145 55,8 2,1
pcle 19
46 18,8 0,1
51 10,0 0,1
64 15,2 0,5
pcler8 27
62 22,8 0,1
75 12,4 0,1
80 16,8 0,7
rd73
7
49 12,4 0,1
48 10,6 0,1
58 28,4 1,5
rd84
8
64 14,8 0,1
59 12,4 0,1 171 28,2 9,7
sao2 10 153 22,6 0,1 172 17,6 0,1 159 30,6 3,1
shift 19 162 15,2 0,1 260 17,0 0,2 197 11,4 2,7
squar5 5
41 11,4 0,1
42 10,0 0,1
53 25,8 0,6
t481 16
48 17,8 0,1
60 12,6 0,1 681 34,2 177,6
tial
14 834 41,2 0,3 1031 31,0 1,3 221 36,0 430,1
vda 17 751 35,8 0,7 687 28,4 3,2 479 23,8 58,4
vg2 P25 178 36,8 0,1 342 22,2 0,2
96 15,2 1,2
6888 855,8 6,7 8657 570,8 15,2 6617 975,8 1092,2
Tabelle 5.2: Vergleich des Syntheseverfahrens mit Skript rugged des Synthesetools Sis
178
KAPITEL 5. VERGLEICH MIT ANDEREN VERFAHREN
terschiede fur die Beispielschaltkreise t481 und tial. Einerseits ist die von Sis bestimmte
Schaltkreisrealisierung fur den Beispielschaltkreis t481 mehr als 10-mal so gro wie fur die
kaskadierte und baumartige Kompositionssequenz. Andererseits wird durch Sis fur den
Beispielschaltkreis tial eine Realisierung berechnet, die nur ungefahr ein Viertel so gro
ist wie die durch das vorgestellte Syntheseverfahren bestimmten Schaltkreisrealisierungen.
Insgesamt benotigt Sis fur die Realisierung aller Beispielschaltkreise sogar etwas weniger
Gatter als das Syntheseverfahren bei der kaskadierten Kompositionssequenz.
Bei der Tiefe gibt es ebenfalls einige Beispielschaltkreise, bei denen Sis bessere Resultate erzielt als das vorgestellte Syntheseverfahren, wahrend die Tiefe fur viele andere
Beispielschaltkreise deutlich schlechter ist. Dabei ist die Tiefe der durch Sis erzeugten
Schaltkreise oft mehr als doppelt so hoch wie die Tiefe der entsprechenden Schaltkreise,
die fur die kaskadierte und baumartige Kompositionssequenz bestimmt werden. Insgesamt
ist die Tiefe fur die durch Sis erzeugten Schaltkreisrealisierungen etwas schlechter, als bei
der kaskadierten Kompositionssequenz und deutlich schlechter, als bei der baumartigen
Kompositionssequenz.
Die benotigten CPU-Zeiten sind bei allen Beispielschaltkreisen fur Sis am hochsten. Fur
die Beispielschaltkreise alu4, t481 und tial werden mehrere CPU-Minuten benotigt. Selbst
bei Berucksichtigung der Zeiten zur Berechnung der Variablenordnung und DTL sowie
fur das Erzeugen der KFDDs (vgl. Tabelle 2.3) liegen diese Zeiten um ein Vielfaches uber
den Laufzeiten fur das vorgestellte Syntheseverfahren.
5.3
Automatische Testmustergenerierung
In dem Software-Package Sis sind neben den im letzten Abschnitt erwahnten Syntheseverfahren auch Methoden fur die automatische Testmustergenerierung fur stuck-at Fehler
verfugbar. Dieser Testmustergenerator nutzt einerseits die A quivalenz- und Dominanzbeziehungen (vgl. Denition 3.4) aus, um die Menge der stuck-at Fehler zu reduzieren,
fur die ein Testmuster bestimmt werden mu. Auerdem wird an mehreren Stellen die
Fehlersimulation entsprechend den in Abschnitt 4.1.1 beschriebenen Verfahren eingesetzt,
um die Testmustergenerierung weitestgehend zu vermeiden. Fur einen Groteil der zu
untersuchenden stuck-at Fehler wird bereits vor der eigentlichen Testmustergenerierung
ein Testmuster durch Fehlersimulation von Zufallsmustern bestimmt. Die eigentliche Testmustergenerierung basiert auf einer Analyse der Schaltkreisstruktur und erfolgt mit einem
Backtracking-Verfahren, dessen Laufzeitverhalten exponentiell werden kann. Fur jedes
durch Testmustergenerierung bestimmte Testmuster wird mittels Fehlersimulation uberpruft, welche der bis dahin nicht entdeckten stuck-at Fehler mit diesem Testmuster noch
entdeckt werden. Schlielich wird die Groe der gesamten Testmenge nach Abschlu der
Berechnung aller Testmuster durch Simulation der Testmuster in umgekehrter Reihenfolge
minimiert.
In Tabelle 5.3 werden die Resultate von verschiedenen Methoden zur Bestimmung von
Testmengen fur die Schaltkreise angegeben, die durch das vorgestellte Syntheseverfahren
bei baumartiger Kompositionssequenz erzeugt wurden.
Zunachst werden die Ergebnisse fur zwei der in Abschnitt 4.1 beschriebenen Verfahren
angegeben. Dabei werden die Tests wahrend der Synthese durch eine Analyse der Graphstruktur des KFDDs bestimmt. Die bestimmte Menge von Testmustern wird anschlieend
entweder nur durch Fehlersimulation oder durch das Greedy-Verfahren zur Kombination
von kompatiblen Testmustern und anschlieender Fehlersimulation optimiert. Die Groe
179
5.3. AUTOMATISCHE TESTMUSTERGENERIERUNG
Synthesis
Sis
Greedy&
Simulation Simulation
Atpg
Name jPinj jT j CPU jT j CPU jT j CPU
5xp1
7 83 0,1 49 0,3 18 0,1
add6
12 107 0,1 61 0,5 20 0,1
addm4
9 158 0,3 117 7,1 37 0,6
alu2
10 236 0,2 175 6,4 70 1,9
alu4
14 512 0,6 392 39,3 132 6,9
apex6 135 689 8,0 230 17,9 145 23,4
apex7 49 475 0,9 242 11,0 171 7,2
cc
21 84 0,3 32 0,5 19 <0,1
cm163a 16 48 0,3 25 0,3 17 <0,1
cm85a 11 74 0,3 50 0,5 26 0,1
cmb
16 64 0,2 35 0,4 36 0,2
co14
14 77 0,1 47 0,2 43 0,4
dist
8 200 0,2 131 4,1 82 0,6
f51m
8 79 0,1 50 0,4 19 0,1
frg1
28 492 0,3 363 17,8 225 18,5
gary
15 340 0,5 255 15,1 125 6,1
in7
26 133 0,2 93 2,0 63 0,7
m181 15 90 0,2 59 0,8 33 0,1
misg
56 214 0,2 110 1,9 60 1,0
mlp4
8 122 0,2 80 2,7 35 0,3
my adder 33 272 0,3 167 6,5 72 8,3
pcle
19 55 0,2 35 0,4 22 0,1
pcler8 27 78 0,3 37 0,7 29 0,2
rd73
7 63 0,1 35 0,2 14 <0,1
rd84
8 88 0,1 43 0,3 20 <0,1
sao2
10 135 0,2 103 2,4 54 1,1
shift
19 145 0,3 55 1,3 29 0,2
squar5
5 39 0,1 27 0,2 10 <0,1
t481
16 74 0,1 44 0,3 24 <0,1
tial
14 897 1,9 686 131,4 165 14,8
vda
17 222 1,9 148 18,2 100 9,8
vg2 P25 302 0,4 224 6,4 93 2,4
6647 19,2 4200 297,5 2008 105,2
Tabelle 5.3: Vergleich mit automatischer Testmustergenerierung
180
KAPITEL 5. VERGLEICH MIT ANDEREN VERFAHREN
der vollstandigen Tests entspricht den Werten fur die entsprechenden Verfahren aus Tabelle 4.2. Die angegebenen Laufzeiten ergeben sich aus der Summe der CPU-Zeiten zur
Berechnung des vollstandigen Tests fur die stuck-at Fehler (vgl. Tabelle 3.4) und der
anschlieenden Optimierung der berechneten Testmenge (vgl. Tabelle 4.2). Bei der Optimierung nur durch Fehlersimulation wird die Groe der Testmengen am wenigsten reduziert. Dafur wird aber auch sehr wenig CPU-Zeit benotigt. Bei der Optimierung durch
das Greedy-Verfahren mit anschlieender Fehlersimulation wird die Groe der Testmengen auf Kosten hoherer Laufzeiten weiter reduziert. Insbesondere ist die CPU-Zeit fur die
Optimierung der Testmenge von Schaltkreis tial sehr hoch.
Im Vergleich dazu werden Resultate angegeben, die durch den in Sis integrierten Testmustergenerator (Atpg) erzielt werden. Auch hierbei wird fur jeden Schaltkreis, der durch
das vorgestellte Syntheseverfahren bei baumartiger Kompositionssequenz erzeugt wurde,
ein vollstandiger Test fur die stuck-at Fehler berechnet. Bei der angegebenen Groe der
Testmenge und der benotigten CPU-Zeit sind alle oben beschriebenen Techniken ausgenutzt worden.
Die Groe der Testmengen ist fur die in Sis integrierte Testmustergenerierung deutlich
kleiner als fur die optimierten Testmengen des Syntheseverfahrens. Fur die Schaltkreise
add6, addm4 und alu4 betragt die Groe der Testmenge etwa ein Drittel der Testmenge,
die durch das Greedy-Verfahren und anschlieender Fehlersimulation bestimmt wird. Fur
Schaltkreis tial wird durch die automatische Testmustergenerierung sogar eine Testmenge
bestimmt, die weniger als ein Viertel so viele Testmuster enthalt. Lediglich fur cmb enthalt
der vollstandige Test nach Optimierung durch das Greedy-Verfahren und anschlieender
Fehlersimulation ein Testmuster weniger als die durch Testmustergenerierung bestimmte
Testmenge.
Die fur die automatische Testmustergenerierung benotigte CPU-Zeit ist sehr unterschiedlich. Zum Teil kann ein vollstandiger Test in wenigen zehntel CPU-Sekunden bestimmt
werden. Dagegen ist die Laufzeit der Testmustergenerierung fur die Schaltkreise apex6,
frg1 und my adder sogar groer als fur die Optimierung durch das Greedy-Verfahren mit
anschlieender Fehlersimulation. Insgesamt ist die benotigte CPU-Zeit zwar etwa 5-mal so
hoch wie fur die Optimierung durch Fehlersimulation, aber immer noch um einen Faktor
3 kleiner als fur die Optimierung durch das Greedy-Verfahren mit anschlieender Fehlersimulation. Auch wenn das Verfahren zur automatischen Testmustergenerierung aus Sis
in den meisten Fallen sehr schnell ist, besteht bei diesem Verfahren die Gefahr, da es
bei komplizierten Situationen ein exponentielles Verhalten zeigt. Dagegen ist das vorgestellte Verfahren zur Berechnung von vollstandigen Testmengen polynomiell beschrankt,
wodurch eine bessere Vorhersagbarkeit fur den Aufwand fur die Berechnung der Testmuster gewahrleistet ist.
Kapitel 6
Schlubemerkungen
Es wurde ein Verfahren zur Synthese von mehrstugen Schaltkreisen entwickelt, das auf
der Darstellung der zu realisierenden Booleschen Funktion als KFDD basiert. Zur Optimierung der erzeugten Schaltkreise wurde eine Reihe von lokalen Vereinfachungen vorgestellt, die wahrend der Synthese implizit angewendet werden. Auerdem wurde gezeigt,
wie das Syntheseverfahren auf D-vollstandige KFDDs erweitert werden kann. Dadurch
konnen KFDDs mit kleinerer Groe eingesetzt werden.
Experimentelle Ergebnisse haben gezeigt, da die mit diesem Verfahren synthetisierten
Schaltkreise insbesondere fur die baumartige Kompositionssequenz in Realisierungen resultieren, deren Tiefe fur die meisten untersuchten Beispielschaltkreise geringer ist als
bei anderen Syntheseverfahren. Dafur konnen mit den anderen Syntheseverfahren oftmals
Schaltkreisrealisierungen bestimmt werden, die mit einer geringeren Anzahl von Gattern auskommen. Durch das Verschmelzen von aquivalenten Gattern kann die Anzahl der
benotigten Gatter in dem vorgestellten Verfahren jedoch deutlich reduziert werden.
Weiterhin wurde gezeigt, da konstante Signale in den synthetisierten Schaltkreisen eÆzient anhand des Graphen des zugrundeliegenden KFDDs identiziert werden konnen. Dadurch ist es moglich, das Syntheseverfahren soweit anzupassen, da die erzeugten Schaltkreise keine konstanten Signale enthalten.
Daruberhinaus wurden Verfahren angegeben, mit denen fur alle stuck-at Fehler in den synthetisierten Schaltkreisen Testmuster bestimmt werden konnen. Diese Verfahren basieren
ebenfalls auf eÆzienten Algorithmen, die auf die Graphen der KFDDs angewendet werden. Damit wurde einerseits die vollstandige Testbarkeit der synthetisierten Schaltkreise
nachgewiesen. Andererseits kann mit den vorgestellten Verfahren ein vollstandiger Test
bestimmt werden, so da keine automatische Testmustergenerierung angewendet werden
braucht.
Experimentelle Resultate haben die EÆzienz der vorgestellten Verfahren fur den praktischen Einsatz bestatigt. Die erzeugten Testmengen sind jedoch sehr gro. Daher wurden
einige Verfahren zur Reduktion der Testgroen entwickelt. Diese Verfahren werden in der
praktischen Anwendung von einem ausgereiften Testmustergenerator zwar oft ubertroen.
Allerdings konnen diese Testmustergeneratoren bei komplizierten Situationen ein exponentielles Verhalten zeigen. Dieses Risiko besteht bei dem vorgestellten Verfahren nicht,
da dessen Laufzeit polynomiell beschrankt ist.
Insgesamt eignet sich das vorgestellte Verfahren fur die Integration in ein CAD-Werkzeug
fur den Schaltkreisentwurf, da bei einer gegebenen Beschreibung der zu realisierenden
Booleschen Funktion sowohl der Schritt der Logiksynthese als auch die Testmustergenerierung weitestgehend automatisiert werden konnen. Insbesondere fur Anwendungen mit
181
182
KAPITEL 6. SCHLUSSBEMERKUNGEN
hohen Qualitatsanspruchen bietet die Gewahrleistung der vollstandigen Testbarkeit einen
groen Vorteil.
Da sich das Verfahren jedoch auf KFDDs abstutzt, ist eine Anwendung nur dann moglich,
wenn fur die gegebene Funktion ein KFDD mit vertretbarer Groe erzeugt werden kann.
Dazu konnen zum einen die Methoden zur Optimierung der Variablenordnung und DTL
weiter verbessert und fur das vorgestellte Syntheseverfahren angepat werden. Da es
jedoch Boolesche Funktionen gibt, die durch KFDDs nicht eÆzient dargestellt werden
konnen (siehe z.B. [21]), mussen in jedem Fall andere Ansatze fur die Synthese berucksichtigt werden.
Eine Kombination von dem vorgestellten Syntheseverfahren mit anderen Ansatzen erscheint insbesondere fur Schaltkreise mit einer sehr groen Anzahl von primaren Eingangen sinnvoll. Dazu kann einerseits eine Dekomposition des Gesamtschaltkreises in mehrere Teilschaltkreise erfolgen und das Syntheseverfahren fur jeden Teilschaltkreis separat
durchgefuhrt werden. Andererseits kann ahnlich zu dem Verfahren aus [17] die Zerlegung
auf Basis der Darstellung als decomposed KFDD erfolgen. In beiden Fallen konnen die synthetisierten Teilschaltkreise einfach zu dem Gesamtschaltkreis zusammengesetzt werden.
Allerdings mussen geeignete Verfahren entwickelt werden, bei denen die Testmengen der
Teilschaltkreise sinnvoll eingesetzt werden, um die Testbarkeit des Gesamtschaltkreises
sicherzustellen.
Auch eine iterative Anwendung von verschiedenen Syntheseverfahren bietet Moglichkeiten, das vorgestellte Verfahren mit anderen Methoden zu erganzen. Einerseits konnen die
von dem vorgestellten Verfahren erzeugten Schaltkreise als Ausgangspunkt fur strukturbasierte Verfahren verwendet werden, wie sie z.B. in dem Synthesetool Sis [50] realisiert
sind. Andererseits konnen innerhalb solcher strukturbasierter Verfahren kritische Regionen bestimmt werden, die z.B. die geforderten Verzogerungszeiten nicht erfullen. Fur
diese Bereiche konnen dann gezielt mit dem vorgestellten Syntheseverfahren neue Realisierungen bestimmt werden und anschlieend wieder in den Gesamtschaltkreis eingesetzt
werden.
Es ist allerdings zu beachten, da bei dem kombinierten Einsatz von verschiedenen Verfahren die Testbarkeit des Gesamtschaltkreises nicht automatisch gewahrleistet ist.
Literaturverzeichnis
[1] M. Abramovici, M.A. Breuer und A.D. Friedman. Digital Systems Testing and Testable Design. Computer Science Press, 1990.
[2] S.B. Akers. Binary decision diagrams. IEEE Transactions on Computers, 27:509{516,
1978.
[3] P. Ashar, S. Devadas und K. Keutzer. Gate-delay-fault testability properties of
multiplexor-based networks. In International Test Conference, S. 887{896, 1991.
[4] R.I. Bahar, E.A. Frohm, C.M. Gaona, G.D. Hachtel, E. Macii, A. Pardo und F. Somenzi. Algebraic decision diagrams and their application. In International Conference on CAD, S. 188{191, 1993.
[5] B. Becker. Synthesis for testability: Binary decision diagrams. In Symposium on
Theoretical Aspects of Computer Science, Band 577 aus Lecture Notes in Computer
Science (LNCS), S. 501{512. Springer Verlag, 1992.
[6] B. Becker und R. Drechsler. Synthesis for testability: Circuits derived from ordered
Kronecker functional decision diagrams. In European Design & Test Conference,
S. 592, 1995.
[7] B. Becker, R. Drechsler und M. Theobald. OKFDDs versus OBDDs and OFDDs. In
Automata, Languages, and Programming, International Colloquium, Band 944 aus
Lecture Notes in Computer Science (LNCS), S. 475{486. Springer Verlag, 1995.
[8] B. Becker, R. Hahn und R. Krieger. Fast fault simulation in combinational circuits:
An eÆcient data structure, dynamic dominators and rened check-up. In European
Design Automation Conference, S. 436{441, 1992.
[9] B. Bollig, P. Savicky und I. Wegener. On the improvement of variable orderings for
OBDDs. In Workshop on Logic and Architecture Synthesis, S. 71{80, 1994.
[10] K.S. Brace, R.L. Rudell und R.E. Bryant. EÆcient implementation of a BDD package.
In Design Automation Conference, S. 40{45, 1990.
[11] R.K. Brayton, G.D. Hachtel, C. McMullen und A.L. Sangiovanni-Vincentelli. Logic
Minimization Algorithms for VLSI Synthesis. Kluwer Academic Publishers, 1984.
[12] R.K. Brayton, R. Rudell, A.L. Sangiovanni-Vincentelli und A.R. Wang. MIS: A
multiple-level logic optimization system. IEEE Transactions on Computers, 6:1062{
1081, 1987.
183
184
LITERATURVERZEICHNIS
[13] D. Brelaz. New methods to color vertices of a graph. Communications of the ACM,
22:251{256, 1979.
[14] M.A. Breuer und A.D. Friedman. Diagnosis & Reliable Design of Digital Systems.
Computer Science Press, 1976.
[15] R.E. Bryant. Graph-based algorithms for Boolean function manipulation. IEEE
Transactions on Computers, 35:677{691, 1986.
[16] R.E. Bryant. On the complexity of VLSI implementations and graph representations
of Boolean functions with application to integer multiplication. IEEE Transactions
on Computers, 40:205{213, 1991.
[17] P. Buch, A. Narayan, A.R. Newton und A.L. Sangiovanni-Vincentelli. Logic synthesis
for large pass transistor circuits. In International Conference on CAD, S. 663{670,
1997.
[18] E. Clarke, M. Fujita, P. McGeer, K.L. McMillan, J. Yang und X. Zhao. Multi terminal
binary decision diagrams: An eÆcient data structure for matrix representation. In
International Workshop on Logic Synthesis, S. P6a:1{15, 1993.
[19] R. Drechsler. Ordered Kronecker Functional Decision Diagrams und ihre Anwendungen. Modell Verlag, Dissertation, Johann Wolfgang Goethe-Universitat, Frankfurt
am Main, 1995.
[20] R. Drechsler und B. Becker. Dynamic minimization of OKFDDs. In International
Conference on Computer Design, S. 602{607, 1995.
[21] R. Drechsler und B. Becker. Graphenbasierte Funktionsdarstellung. B.G. Teubner,
Stuttgart, 1998.
[22] R. Drechsler, B. Becker und A. Jahnke. On variable ordering and decomposition type
choice in OKFDDs. IEEE Transactions on Computers, 12:1398{1403, 1998.
[23] R. Drechsler, A. Sarabi, M. Theobald, B. Becker und M.A. Perkowski. EÆcient
representation and manipulation of switching functions based on ordered Kronecker
functional decision diagrams. In Design Automation Conference, S. 415{419, 1994.
[24] S. Eckrich und T. Pfeier. U ber die multi-level Synthese von EXOR-Schaltkreisen.
Diplomarbeit, Johann Wolfgang Goethe-Universitat, Frankfurt am Main, April 1996.
[25] R.D. Eldred. Test routines based on symbolic logical statements. Journal of the
ACM, 6:33{36, 1959.
[26] H. Engesser, Hrsg. Duden "Informatik". Dudenverlag, 1988.
[27] H. Fujii, G. Ootomo und C. Hori. Interleaving based variable ordering methods for
ordered binary decision diagrams. In International Conference on CAD, S. 38{41,
1993.
[28] M. Fujita, Y. Matsunaga und T. Kakuda. On variable ordering of binary decision
diagrams for the application of multi-level synthesis. In European Conference on
Design Automation, S. 50{54, 1991.
LITERATURVERZEICHNIS
185
[29] H. Fujiwara. Logic Testing and Design for Testability. The MIT Press, 1985.
[30] M.R. Garey und D.S. Johnson. Computers and Intractability - A Guide to NPCompleteness. Freeman, 1979.
[31] R. Hahn. Methoden zur Fehlersimulation kombinatorischer Schaltkreise. Diplomarbeit, Universitat des Saarlandes, Juli 1989.
[32] H. Hengster, R. Drechsler und B. Becker. On local transformations and path delay
fault testability. Journal of Electronic Testing: Theory and Applications (JETTA),
7:173{191, 1995.
[33] A. Hett, R. Drechsler und B. Becker. The DD Package PUMA - An Online Documentation. http://ira.informatik.uni-freiburg.de/software/puma/, 1996.
[34] A. Hett und K. Nowak. EÆziente Reprasentation und Manipulation Boolescher Funktionen durch Entscheidungsdiagramme. Diplomarbeit, Johann Wolfgang GoetheUniversitat, Frankfurt am Main, November 1995.
[35] N. Ishiura. Synthesis of multi-level logic circuits from binary decision diagrams. In
Synthesis and System Integration of Mixed Technologies, S. 74{83, 1992.
[36] U. Kebschull, E. Schubert und W. Rosenstiel. Multilevel logic synthesis based on
functional decision diagrams. In European Conference on Design Automation, S. 43{
47, 1992.
[37] R. Krieger, R. Hahn und B. Becker. test circ: Ein abstrakter Datentyp zur Reprasentation von hierarchischen Schaltkreisen. Technischer Bericht, Johann Wolfgang
Goethe-Universitat, Frankfurt am Main, 1993.
[38] C.Y. Lee. Representation of switching circuits by binary decision diagrams. Bell
System Technical Journal, 38:985{999, 1959.
[39] E.J. McCluskey und F.W. Clegg. Fault equivalence in combinational logic networks.
IEEE Transactions on Computers, 20:1286{1293, 1971.
[40] K. Mehlhorn. Data Structures and Algorithms 2: Graph Algorithms and NPCompleteness. Springer Verlag, 1984.
[41] K. Mehlhorn. Datenstrukturen und eÆziente Algorithmen - Band 1 Sortieren und
Suchen. B.G. Teubner, 1988.
[42] C. Morgenstern. A new backtracking heuristic for rapidly four-coloring large planar
graphs. Technischer Bericht, Texas Christian University, Fort Worth, Texas, 1992.
[43] I. Pomeranz und S.M. Reddy. On the number of tests to detect all path delay faults
in combinational logic circuits. IEEE Transactions on Computers, 45:50{62, 1996.
[44] J. Rajski und J. Vasudevamurthy. The testability-preserving concurrent decomposition and factorization of Boolean expressions. IEEE Transactions on CAD, 11:778{793,
1992.
[45] R. Rudell. Dynamic variable ordering for ordered binary decision diagrams. In
International Conference on CAD, S. 42{47, 1993.
186
LITERATURVERZEICHNIS
[46] T. Sasao. AND-EXOR expressions and their optimization. In T. Sasao, Hrsg., Logic
Synthesis and Optimization, S. 287{312. Kluwer Academic Publisher, 1993.
[47] D.R. Schertz und G. Metze. A new representation for faults in combinational digital
circuits. IEEE Transactions on Computers, 21:858{866, 1972.
[48] C. Scholl, S. Melchior, G. Hotz und P. Molitor. Minimizing ROBDD sizes of incompletely specied functions by exploiting strong symmetries. In European Design &
Test Conference, S. 229{234, 1997.
[49] M. Schulz, E. Trischler und T. Sarfert. SOCRATES: A highly eÆcient automatic test
pattern generation system. In International Test Conference, S. 1016{1026, 1987.
[50] E. Sentovich, K. Singh, L. Lavagno, C. Moon, R. Murgai, A. Saldanha, H. Savoj,
P. Stephan, R. Brayton und A. Sangiovanni-Vincentelli. SIS: A system for sequential
circuit synthesis. Technischer Bericht, University of Berkeley, 1992.
[51] D. Sieling und I. Wegener. Reduction of BDDs in linear time. Information Processing
Letters, 48:139{144, 1993.
[52] A. Srinivasan, T. Kam, S. Malik und R.E. Brayton. Algorithms for discrete function
manipulation. In International Conference on CAD, S. 92{95, 1990.
[53] H.J. Wunderlich. Hochintegrierte Schaltungen: Prufgerechter Entwurf und Test.
Springer Verlag, 1991.
[54] S. Yang. Logic synthesis and optimization benchmarks user guide. Technischer
Bericht, Microelectronic Center of North Carolina, 1991.
Anhang A
Zur Groe DnB -vollstandiger KFDDs
Fur den Beweis von Lemma 2.11 wird folgendes Lemma verwendet:
Lemma A.1
Fur eine Kante (vxk ; vyl ) eines reduzierten KFDDs K = (G; R; Xn; d) mit G = (V; E )
werden bei baumartiger Kompositionssequenz DnB mit Algorithmus 2.5 durch inverse
S-Reduktionen und inverse D-Reduktionen nur O(log(n)) neue Knoten eingefugt.
Zunachst wird die Beweisidee erlautert:
Fur jede Kante (vxk ; vyl ) des reduzierten KFDDs werden drei verschiedene Bereiche von
neuen Knoten unterschieden, die in Abbildung A.1 grau unterlegt sind. Sei M der Level
fur den die Tupel (M 2d; M ) und (M; M + 2d) in DnB existieren, so da M 2d k <
M < l M + 2d fur ein minimales d ist. Damit ist sowohl der Abstand Æa = M k von
Level k zu Level M als auch der Abstand Æb = l M von Level M zu Level l durch 2d
beschrankt.
Der erste Bereich besteht aus den Teilbereichen (L.1) bis (L.3). Dort werden jeweils Knoten eingefugt, die S-aquivalent oder D-aquivalent zu vyl sind. Dabei werden in (L.1) die
Level der neu einzufugenden Knoten anhand der Binardarstellung von Æa bestimmt, wobei der Abstand eines neu eingefugten Knotens zum zuletzt eingefugten Knoten jeweils
mindestens verdoppelt wird. In (L.3) werden die Level mittels der Binardarstellung von
Æb bestimmt und der Abstand zwischen neuen Knoten wird jeweils mindestens halbiert.
Da d < dlog(n)e ist und in (L.2) nur ein neuer Knoten erzeugt wird, kann die Anzahl der
in (L.1) bis (L.3) erzeugten Knoten durch O(log(n)) beschrankt werden.
Falls in (L.1) bis (L.3) ein neuer Knoten v in Level i eingefugt wurde, dann fuhrt die Kante
low(v ) nach vollst
andiger Bearbeitung von Algorithmus 2.5 immer zu dem nachsten in
(L.1) bis (L.3) eingefugten Knoten w bzw. zu vyk . Die HIGH-Kante von v fuhrt nur dann
zu w bzw. zu vyk , wenn Level i die Shannon-Dekomposition zugeordnet ist, d.h. wenn
di = S ist. In diesen Fallen brauchen die ausgehenden Kanten der neuen Knoten nicht
weiter bearbeitet werden, da die Level fur die neuen Knoten in den Bereichen (L.1) bis
(L.3) jeweils so gewahlt werden, da das Tupel (index(v); index(w)) 2 DnB ist.
Fnu+1r di 2 fpD; nDg fuhrt die Kante high(v) zunachst direkt zu dem terminalen Knoten
v2 mit Label 0. Im Gegensatz zu dem Beweis von Lemma 1.5 uber die Groe von
vollstandigen KFDDs,
erlaubt die Gesamtgroe des DnB -vollstandigen KFDDs es nicht,
n+1
die Anzahl der zu v2 aquivalenten Knoten ndurch
O(n) abzuschatzen. Da in (L.1) bis
+1
(L.3) auerdem mehrere HIGH-Kanten zu v2 erzeugt werden konnen, mu vielmehr
gezeigt werden, da fur alle diese HIGH-Kanten insgesamt nur O(log(n)) neue Knoten
187
188

ANHANG A. ZUR GROSSE

DnB -VOLLSTANDIGER
KFDDS
D Level
M-2
d
k1 = k
vkx
vkx
kµ
d
2
L.1
O.1
L.2
kσ = M
O.2
L.3
kφ
2d
kτ= l
vly
vly
O.3
s1
U.1
M+2d
U.2
U.3
n+1
0
Abbildung A.1: Neue Knoten in DnB -vollstandigem KFDD
189
erzeugt werden. Dazu werden in (O.1) bis n(O.3)
O(log(n)) neue Knoten erzeugt, die
+1
jeweils S-aquivalent oder D-aquivalent zu v2 sind. Im Gegensatz zu den in (L.1) bis
(L.3) erzeugten Knoten fuhrt hier unabhangig vom Dekompositionstyp sowohl die LOWKante als auch die HIGH-Kante zu dem gleichen Nachfolger.
Falls in (L.1) mindestens ein neuer Knoten mittels inverser D-Reduktion eingefugt wurde,
sei w 2 levelk der entsprechende Knoten auf kleinstem Level k. Dann werden in (O.1)
neue Knoten auf genau den Leveln aus fk + 1; k + 2; : : : ; M 1g erzeugt, in denen
auch schon unter (L.1) Knoten eingefugt wurden. Fur alle weiteren in (L.1) durch inverse
D-Reduktion erzeugten Knoten auf den Leveln aus fk + 1; k + 2; : : : ; M 1g fuhrt die
HIGH-Kante direkt zu einem der gerade beschriebenen Knoten, so da in (O.1) auch nur
O(log(n)) Knoten eingefugt werden. Auerdem werden noch die Knoten in (O.2) und
(O.3) auf Leveln aus fM; M +1; : : : ; ng erzeugt, die zu dem terminalen Knoten mit Label
0 aquivalent sind. Da der Abstand Æc = (n + 1) M von Level M zu dem Level n + 1 der
terminalen Knoten kleiner als n + 1 ist, werden analog zu (L.1) bis (L.3) nur O(log(n))
Knoten benotigt.
Falls in (L.2) oder (L.3) mindestens ein neuer Knoten mittels inverser D-Reduktion eingefugt wurde, werden in den Teilbereichen (U.1) bis (U.3) noch neue Knoten
eingefugt,
n+1
die wiederum S-aquivalent oder D-aquivalent zu dem terminalen Knoten v2 sind. Sei
z 2 levelk der entsprechende Knoten auf grotem Level k . Dann werden in (U.1) fur
ein s1 > l neue Knoten auf den Leveln aus fs1; s1 + 1; : : : ; M + 2d 1g eingefugt. Fur
alle anderen in (L.3) durch inverse D-Reduktion erzeugten Knoten auf den Leveln aus
fM +1; M +2; : : : ; k 1g fuhrt die HIGH-Kante direkt zu den gerade beschriebenen Knoten, so da fur (U.1)n+1ebenfalls nur O(log(n)) Knoten erzeugt werden. In (U.2) und (U.3)
werden weitere zu v2 aquivalente Knoten auf den Leveln aus fM +2d; M +2d +1; : : : ; ng
erzeugt. Da auerdem der Abstand Æd = (n + 1) (M + 2d ) durch n + 1 beschrankt ist,
werden auch in diesen Schritten nur O(log(n)) Knoten benotigt. Schlielich fuhrt auch die
HIGH-Kante des Knotens aus (L.2) direkt zu einem Knoten aus (U.2) oder (U.3), falls
der Knoten in (L.2) mittels inverser D-Reduktion erzeugt wurde.
Esn+1ist zu bemerken, da die Level, auf denen in (O.1) bis (O.3) und (U.1) bis (U.3) zu
v2 aquivalente Knoten eingefugt werden, nicht disjunkt sein mussen. Durch das Feld
equivn werden die entsprechenden Knoten allerdings nur jeweils einmal erzeugt.
Da die Anzahl der neuen Knoten in jedem der 9 Teilbereiche durch O(log(n)) bzw. O(1)
beschrankt ist, wird auch die Gesamtzahl der durch Algorithmus 2.5 fur eine Kante des
reduzierten KFDDs neu erzeugten Knoten durch O(log(n)) begrenzt.
Die technischen Details werden in dem formalen Beweis gegeben:
2
+1
Beweis:
Ohne Beschrankung der Allgemeinheit kann vorausgesetzt werden, da n = 2N fur eine
naturliche Zahl N 2 IN ist. Ein reduziertes KFDD mit n0 Booleschen Variablen, bei dem
2N 1 < n0 < 2N ist, kann namlich zunachst durch Verschieben der terminalen Knoten
nach Level 2N + 1 und Einfugen von leeren Leveln n0 + 1; n0 + 2; : : : ; 2N in ein KFDD
uber 2N Booleschen Variablen uberfuhrt werden. Auf dieses KFDD wird dann Algorithmus 2.5 angewendet. Danach stellen alle Knoten aus den Leveln n0 + 1; n0 + 2; : : : ; 2N die
konstanten Funktionen 0 und 1 dar. Abschlieend konnen diese Knoten entfernt werden,
deren eingehende Kanten durch Kanten auf die terminalen Knoten ersetzt werden und
die terminalen Knoten wieder nach Level n0 verschoben werden.
Sein nun also n = 2N . Falls fur die Kante (vxk ; vyl ) bereits (k; l) 2 DnB ist, bleibt diese Kante
unverandert. Sei also (k; l) 2= DnB und der Abstand zwischen den Leveln k und l sei Æ = l k.
190

DnB -VOLLSTANDIGER
KFDDS

ANHANG A. ZUR GROSSE
Dann gibt d = dlog(Æ)e 1 den Exponenten fur die kleinste Zweierpotenz 2d an, die groer
oder gleich dem halben Abstand 2Æ ist. Da nach Denition 2.6 fur alle j 2 f1; 2; : : : ; ng
das Tupel (j; j + 1) 2 DnB ist, mu d 0 sein und fur r = d 2kd e 2 f1; 2; : : : ; d 2nd e 1g gilt:
(r 1) 2d +1 k < r 2d +1 < l (r +1) 2d +1 (vgl. Abbildung A.1). Mit M = r 2d +1
wird der Level zwischen den Leveln k und l bezeichnet. Dann sind nach Konstruktion die
Tupel (M 2d; M ) und (M; M + 2d) in DnB enthalten.
Zunachst werden die neuen Knoten betrachtet, die zu vyl S-aquivalent oder D-aquivalent
sind.

Aquivalente
Knoten fur LOW-Kanten
Im folgenden werden fur die Kante (vxk ; vyl ) des reduzierten KFDDs die Level angegeben,
auf denen durch Algorithmus 2.5 neue Knoten in den Teilbereichen (L.1) bis (L.3) erzeugt
werden. Diese Knoten werden mit vxkii (i 2 f2; 3; : : : ; 1g) bezeichnet. Mit vxk = vxk und
vxk = vyl ist dann fur i 2 f1; 2; : : : ; 1g jeweils vxkii S-aquivalent bzw. D-aquivalent zu
vxkii , d.h. low(vxkii ) = vxkii und fur dki = S ist auch high(vxkii ) = vxkii .
Der Abstand
Æa = M k 2d von Level k zu M lat sich in Binardarstellung als
Pd
Æa = i=0
a 2i schreiben. Ebenso kann der Abstand Æb = l M 2d von Level M zu l
Pd i
als Æb = i=0 bi 2i dargestellt werden.
Durch Algorithmus 2.5 werden fur die Kante (vxk ; vyl ) die jeweils zu vyl aquivalenten Knoten
vxkii (i 2 f2; 3; : : : ; 1g) genau auf den folgenden Leveln eingefugt:
1
1
+1
+1
+1
+1
+1
+1
dP1
(L.1)
Fur j = 0; 1; : : : ; d 1 auf Level M
(L.2)
Auf Level M .
(L.3)
Fur j = d 1; d 2; : : : ; 0 auf Level M + P bi 2i genau dann, wenn bj = 1 ist.
i=j
ai 2i genau dann, wenn aj = 1 ist.
d
1
i=j
Zu (L.1)
Ist der Abstand Æa = M k von Level k zu M gleich 2d, so ist (k; M ) = (M 2d; M )
nach Konstruktion bereits in DnB enthalten und ein neuer Knoten wird erst unter (L.2)
auf Level M eingefugt. Somit braucht hier nur der Fall M k < 2d untersucht werden,
fur den ad = 0 gilt. Sei P
also fur ein jp 2 f0; 1; : : : ; d 1g mit ajp = 1 zuletzt der Knoten
kp
d 1
i
vxp auf Level kp = M
ugt worden, bzw. sei vxkpp = vxk = vxk der Knoten
i=jp ai 2 eingef
auf Level k = M Æa . Fur ein jq > jp sei weiterhin ajp+1 = ajp+2 = : : : = ajq 1 = 0 und
ajq = 1. Level kq kann also durch kq = kp + 2jp beschrieben werden.
Zunachst wird gezeigt, da das Tupel (kp; kq ) 2 DnB ist. Dazu wird Level kp nach Einsetzen
von M = r 2d + 1 folgendermaen dargestellt:
1
1
kp
=
d 1
X
M
i=jp
= 2jp (r 2d
|
ai 2
jp
i
=r2 +1
d 1
X
i=jp
{z
= rp
d
ai 2i
jp
d 1
X
i=jp
)+1
}
ai 2i
191
Da nach KonstruktionP(M 2d; M ) 2 DnB ist, mu M n +1 sein. Zusammen mit ajp = 1
kann rp = r 2d jp di=j1p ai 2i jp folgendermaen abgeschatzt werden:
r 2d
d 1
X
= 2jp ajp 2
ai 2i jp
i=jp +1
d
r 2 2+jp1 1 1 = M2jp 1 1 n +21jp 1 1 = 2njp 1
Das Tupel n(rp 2jp +1; (rp +1) 2jp +1) ist also in der Menge f(i 2jp +1; (i +1) 2jp +1) j i 2
f0; 1; : : : ; 2jp 1gg enthalten. Wegen jp d 1 log(n) ist diese Menge nach Denition 2.6
wiederum eine Teilmenge von DnB . Schlielich folgt mit kp = rp 2jp + 1 und kq = kp + 2jp ,
da das Tupel (rp 2jp + 1; (rp + 1) 2jp + 1) gleich (kp; kp + 2jp ) = (kp; kq ) ist. Also ist
das Tupel (kp; kq ) in DnB enthalten und wird deshalb in den Zeilen (11) und (13) von
Algorithmus 2.5 gefunden. Es bleibt noch zu zeigen, da dies das erste Tupel aus DnB ist,
welches in den Zeilen (11) und (13) gefunden werden kann.
Dazu wird die0 Annahme,
da es ein j 0 > jp gibt, fur das das Tupel (kp; kp + 2j0 ) in
0
f((r0 1) 2j + 1; r0 2j + 1) j r0 2 f1; 2; : : : ; 2nj0 gg DnB enthalten ist, zum Widerspruch
gefuhrt. Einerseits folgt aus0 der genannten0 Annahme,
da es ein r0 2 f1; 2; : : : ; 2nj0 g geben
0
mu, fur das kp = (r0 1) 2j +1 und kp +2j = r0 2j +1 ist. Aus beiden Gleichungen ergibt
sich durch Einsetzen von kp = rp 2jp +1 und einfache Umformungen, da rp = (r0 1)2j0 jp
ist. Da j 0 > jp ist,
mu rp gerade sein. Andererseits folgt mit jp < d und ajp = 1, da
Pd 1
d
j
i jp ungerade sein mu. Da r nicht gleichzeitig gerade und
p
rp = r 2
p
i=jp ai 2
ungerade sein kann, mu die
Annahme
falsch
gewesen
sein,
d.h. fur jedes j 0 > jp ist
0
0
j
j
j
j
B
(rp 2 p + 1; rp 2 p + 1 + 2 ) = (kp; kp + 2 ) 2= Dn .
rp
jp jp
Zu (L.2)
Sei jp 2 f0; 1; : : : ; d
1g so gewahlt, da ajp = 1 und ajp+1 = ajp+2 = : : : = ad 1 = 0 ist.
Dann wurde unter (L.1) der letzte Knoten auf Level kp = M 2jp eingefugt. Analog zu
(L.1) kann kp als kp = rp 2jp + 1 dargestellt werden, wobei sich
jetzt
rp zu r 2d jp 1
vereinfachen lat. Mit M n + 1 kann rp direkt durch rp 2njp 1 abgeschatzt werden.
Damit folgt wieder, da (rp 2jp + 1; (rp + 1) 2jp + 1) = (kp; kp + 2jp ) = (kp; M ) in DnB
enthalten ist.
Weiterhin kann die Annahme, da es ein j 0 > jp gibt, fur das das Tupel
0
(kp; kp +2j ) 2 DnB ist, auch mit rp = r 2d jp 1 zum Widerspruch gefuhrt werden. Damit
ist sichergestellt, da in den Zeilen (11) und (13) von Algorithmus 2.5 genau das Tupel
(kp; M ) gefunden wird. Der auf Level k = M eingefugte Knoten wird mit vxk bezeichnet.
Zu (L.3)
Ist der Abstand Æb = l M von Level M zu l gleich 2d, so ist (M; l) = (M; M + 2d )
nach Konstruktion in DnB enthalten und fur die LOW-Kante des unter (L.2) auf Level
M eingefugten Knotens braucht kein weiterer Knoten eingefugt werden. Somit braucht
wieder nur der Fall l M < 2d untersucht werden, fukpr den bd = 0 ist. Sei also
fur ein
Pd 1
jp 2 f0; 1; : : : ; d 1g mit bjp = 1 zuletzt der Knoten vxp auf Level kp = M + i=jp bi 2i
eingefugt worden. Fur ein jq < jp sei weiterhin bjp 1 = bjp 2 = : : : = bjq +1 = 0 und
bjq = 1, bzw. bjp 1 = bjp 2 = : : : = bj = 0, falls zuletzt in (L.2) der Knoten vxkpp auf Level
kp = M eingefugt wurde. Level kq kann also durch kq = kp + 2jq beschrieben werden.
0
192

DnB -VOLLSTANDIGER
KFDDS

ANHANG A. ZUR GROSSE
Es wird wieder gezeigt, da das Tupel (kp; kq ) 2 DnB ist. Dazu wird Level kq nach Einsetzen
von M = r 2d + 1 folgendermaen dargestellt:
kq
=
M+
d 1
X
i=jq
bi 2i = r 2d + 1 +
= 2jq (r 2d jq +
d 1
X
i=jq
bi 2i
jq
{z
|
d 1
X
i=jq
bi 2i
)+1
}
= rq
B
Nach Konstruktion enth
(M; M + 2d ) undPdamit
mu M + 2d n + 1
Pd a1lt Dn idas Tupel
d
1
d
d
j
sein. Zusammen mit i=jq bi 2 < 2 kann rq = r 2 q + i=jq bi 2i jq folgendermaen
abgeschatzt werden:
d 1
X
1
rq = jq (r 2d + bi 2i)
2
i=jq
d
r 2 + 1 1 + 2d M + 2d 1 n + 1 1 n
= 2jq 2jq = 2jq
<
2jq
Das Tupel ((rq 1) 2jq +1; rq 2jq +1) ist also in der Menge f((i 1) 2jq +1; i 2jq +1) j i 2
f1; 2; : : : ; 2njq gg enthalten und wegen jq d 1 log(n) auch Element von DnB . Mit
kq = rq 2jq + 1 und kp = kq 2jq folgt, da das Tupel ((rq 1) 2jq + 1; rq 2jq + 1) gleich
(kq 2jq ; kq ) = (kp; kq ) ist. Also ist das Tupel (kp; kq ) in DnB enthalten und wird deshalb
in den Zeilen (11) und (13) von Algorithmus 2.5 gefunden.
Fur ein j 0 > jq kann in den Zeilen (11) und (13) kein Tupel (kp; kp +2j0 ) aus DnB bestimmt
werden, da die Suche mit l = index(vyl ) beginnt0 und nur kleiner werdende Werte betrachtet
werden. Fur ein beliebiges j 0 > jq ist kp + 2j jedoch immer groer als l. DiesPergibt sich
wegen bjp 1 = bjp 2 = : : : = bjq +1 = 0 und nach Einsetzen von kp = M + di=j1p bi 2i
entsprechend folgender Abschatzung:
j0
kp + 2
kp + 2
jq +1
> kp +
=
M+
jq
X
i=0
d 1
X
i=jp
bi 2
i
bi 2
i
= kp +
+
jX
p 1
i=0
jX
p 1
i=0
bi 2
bi 2i
i
=M+
d 1
X
i=0
bi 2i = l
Neue Knoten fur HIGH-Kanten zum 0-Knoten
In den Bereichen (L.1) bis (L.3) wurden neue Knoten vxkii (i 2 f2; 3; : : : ; 1g) erzeugt, so
da vxkii S-aquivalent oder D-aquivalent zu vxkii ist. Falls jeder Knoten vxkii durch inverse
+1
+1
S-Reduktion
erzeugt wurde, dann fuhrt die jeweilige LOW-Kante und HIGH-Kante zu
Knoten vxkii , und nach (L.1) bis (L.3) brauchen diese Kanten nicht weiter betrachtet
werden. Es sei also mindestens ein Knoten aus (L.1) bis (L.3) durch inverse D-Reduktion
unmittelbar
entstanden. Fur die Knoten vxkii mit dki 2 fpD; nDg fuhren die HIGH-Kanten
nach der inversen D-Reduktion jeweils zu dem terminalen Knoten v2n+1 mit Label 0.
Fur diese HIGH-Kanten werden im weiteren Verlauf von Algorithmus
2.5 neue Knoten
eingefugt, die jeweils S-aquivalent oder D-aquivalent zu v2n+1 sind. Die neuen Knoten
+1
+1
193
werden in zwei Bereichen eingefugt.l Der obere Bereich besteht aus den Teilbereichen (O.1)
bis (O.3) und enthalt die Knoten wyjj (j 2 f1; 2; : : : ; 0g) fur die HIGH-Kanten der Knoten
vxkii mit dki 2 fpD; nDg und ki < M . Der untere Bereich setzt sich entsprechend aus den
Teilbereichen (U.1) bis (U.3) zusammen und enthalt die Knoten uszjj (j 2 f1; 2; : : : ; g)
fur die HIGH-Kanten der Knoten vxkii mit dki 2 fpD; nDg und ki M .
Oberer Bereich:
Fur = minfi j (2 i 1) ^ (dki 2 fpD; nDg)g bezeichnet k den kleinsten Level
mit Dekompositionstyp dk 2 fpD; nDg, der einen Knoten vxk aus (L.1) bis (L.3) enthalt.
Falls k k = M ist, dann ist fur jeden Knoten vxkii mit i < der Dekompositionstyp
dki = S und die jeweilige HIGH-Kante fuhrt zu Knoten vxkii . Nach (L.1) brauchen diese
+1
+1
Kanten nicht weiter betrachtet werden, und fur (O.1) bis (O.3) werden keine neuen Knoten
erzeugt.
Falls k <PM ist, kann der Abstand Æ = M k von Level k zu M in Binardarstellung
als Æ = di=01 i 2i geschrieben werden. Da der Knoten vxk in (L.1) erzeugt wurde,
unterscheidet sich die Binardarstellung von Æa und Æ nur in den j = blog(Æa Æ)c + 1
niederwertigsten Bits.1 In der Binardarstellung von Æ haben diese Bits alle den Wert 0,
d.h. 0 = 1 = : : : = j 1 = 0. Fur alle anderen Bits i 2 fjP; j + 1; : : : ; d 1g ist
i = ai . Somit kann der Abstand von Level k zu M als Æ = di=j1 ai 2i dargestellt
werden. Weiterhin wird der Abstand von Level M zu dem Level n + 1 der terminalen
Knoten mitPÆc 0 = (n + 1) M bezeichnet. Die Binardarstellung ist mit d0 = dlog(Æc)e
durch Æc = di=0 ci 2i gegeben.
Wenn k < M ist, dann werden durch Algorithmus 2.5 fur die Kante (vxk ; vyl ) die jeweils
zu v2n+1 aquivalenten Knoten wylii (i 2 f1; 2; : : : ; 0g) genau auf den folgenden Leveln
eingefugt:
(O.1)
Fur j = j+1; j+2; : : : ; d 1 auf Level M
(O.2)
Auf Level M .
(O.3)
Fur j = 0; 1; : : : ; d0 auf Level (n + 1)
d0
P
i=j
dP1
i=j
ai 2i genau dann, wenn aj = 1 ist.
ci 2i genau dann, wenn cj = 1 ist.
Zu (O.1)
Mit vxk wird derPerste Knoten bezeichnet, der in (L.1) durch inverse D-Reduktion auf
Level k = M di=j1 ai 2i erzeugt wurde. Fur den nachsten in (L.1) erzeugten Knoten
vxk ist aj = 1 und aj 1 = aj 2 = : : : = aj +1 = 0. Level k+1 kann also durch
k+1 = k + 2j beschrieben werden. Analog zu (L.1) kann gezeigt werden, da
das Tupel
0
B
0
j
(k; k+1) in Dn enthalten ist und fur jedes j > j das Tupel (k; k + 2 ) 2= DnB nist.
Damit wird in Zeile (13) von Algorithmus 2.5 der erste kzu dem terminalen Knoten v2 +1
mit Label 0 aquivalente Knoten wyl fur die Kante high(vx ) auf Level l1 = k+1 eingefugt.
Da fur die Kante low(vxk ) in (L.1) ebenfalls ein Knoten auf Level k+1 eingefugt wurde,
+1
+1
+1
+1
+1
1
1
werden alle weiteren Knoten aus (O.1) auf den gleichen Leveln eingefugt, wie
die Knoten
li aus (L.1), d.h. fur alle i 2 f + 1; + 2; : : : ; 1g wird der Knoten wyi auf Level
li = ki eingefugt.
1 F
ur
eine reele Zahl x bezeichnet die untere Gau-Klammer bxc die grote ganze Zahl k mit bxc k .
194

ANHANG A. ZUR GROSSE

DnB -VOLLSTANDIGER
KFDDS
Falls ein weiterer Knoten vxk durch inverse D-Reduktion auf Level k = M Pdi=j1 ai 2i
in (L.1) eingefugt wurde, dann mu k < k < M sein. Der Level des in (L.1) oder
(L.2) eingefugten Knoten low(vxk ) = vxk ist k+1. Falls dieser Knoten in (L.1) eingefugt
wurde, ist k+1 < M . In diesem Fall wurde in (O.1) der Knoten
wyl auf Level l +1 =
k +1 eingefugt, der aquivalent zu dem terminalen Knoten v2n+1 ist. Analog zu (L.1) kann
gezeigt werden, da dieser Level auch bei der Bearbeitung der HIGH-Kante von Knoten
vxk in Zeile (13) von Algorithmus 2.5 bestimmt wird. Unter Zuhilfenahme des Feldes
equivn wird dann erreicht, da die HIGH-Kante von vxk zu Knoten wyl fuhrt. Der
verbleibende Fall k+1 = M wird unter (O.2) betrachtet.
+1
+1
+1
+1
2
+1
+1
+1
Zu (O.2)
Falls der Knoten vxk in (L.1) durch inverse D-Reduktion eingefugt wurde und low(vxk )
in (L.2) auf Level k+1 = M erzeugt wurde, dann mu wegen k = M auch + 1 = sein. Der Knoten vxk kann dann auch als vxk dargestellt werden, wobei aj = 1 und
aj +1 = aj +2 = : : : = ad 1 = 0 ist. Es mu noch gezeigt werden, da high(vxk ) zu
einem Knoten aus Level k = M fuhrt. Dies folgt wie unter (O.1) daraus, da bereits die
LOW-Kante von vxk zu Knoten vxk aus Level k = M fuhrt.
Falls < 1 ist, dann wurde in (O.1) bereits ein Knoten
wyl auf Level l 1 = k 1
erzeugt, der aquivalent zu dem terminalen Knoten v2n+1 ist. Analog zu (L.2) kann gezeigt
werden, da das Tupel (l 1 ; l 1 + 02j ) = (k 1 ; M ) 2 DnB ist und fur jedes
j 0 > j 1 das Tupel (l 1 ; l 1 + 2j ) 2= DnB ist. Damit wird in den Zeilen (11) und
(13) von Algorithmus 2.5 fur die LOW-Kante und die HIGH-Kante von wyl der neue
Knoten wyl auf Level l = k = M eingefugt.
1
1
1
1
1
1
1
1
1
1
1
1
1
1
Zu (O.3)
Analog zu (L.1) folgt, da in den Zeilen (11) und (13) von Algorithmus 2.5 genau in den
angegebenen Leveln zu v2n+1 aquivalente Knoten eingefugt werden. Dabei wird der erste
Knoten in (O.3) auf Level M eingefugt, Pda 0 fur das jp 2Pf00 ; 1; : : : ; d0g mit cjp = 1 und
c0 = c1 = : : : = cjp 1 = 0 die Summe di=jp ci 2i = di=0 ci 2i = Æc ist und damit
(n + 1) Pdi=0 jp ci 2i = (n + 1) Æc = M ist. Da der Knoten in (O.2) auch auf Level M
eingefugt wurde, wird der Teilbereich (O.2) in der Implementierung nicht realisiert. Zur
Gliederung des Beweises ist es jedoch sinnvoll, den Teilbereich (O.2) beizubehalten.
Unterer Bereich:
Fur = maxfi j (2 i 1) ^ (dki 2 fpD; nDg)g bezeichnet k den groten Level mit
Dekompositionstyp dk 2 fpD; nDg, der einen Knoten vxk aus (L.1) bis (L.3) enthalt.
Falls k k = M ist, dann ist fur jeden Knoten vxkii mit i > der Dekompositionstyp
dki = S und die jeweilige HIGH-Kante fuhrt zu Knoten vxkii . Nach (L.3) brauchen diese
+1
+1
Kanten nicht weiter betrachtet werden, und fur (U.1) bis (U.3) werden keine neuen Knoten
erzeugt.
Falls k > M ist, folgt mit der gleichen Argumentation wie fur den
oberen Bereich, da
Pd 1
der Abstand Æ = k M mit j = blog(Æb Æ)c + 1 als Æ = i=j bi 2i dargestellt
werden kann. Weiterhin wird der Abstand von Level M + 2d zu dem Level n + 1 der
terminalen Knoten mit Æe P
= d(n + 1) (M + 2d) bezeichnet. Die Binardarstellung ist mit
d = dlog(Æe )e durch Æe = i=0 ei 2i gegeben.
195
Wenn k > M ist, dann werden durch Algorithmus 2.5 fur die Kante (vxk ; vyl ) die jeweils
zu v2n+1 aquivalenten Knoten uszii (i 2 f1; 2; : : : ; g) genau auf den folgenden Leveln
eingefugt:
(U.1)
Fur j = j; j+1; : : : ; d 1 auf Level (M +2d)
(U.2)
Auf Level M + 2d.
(U.3) Fur j = 0; 1; : : : ; d
d
P
auf Level (n + 1)
i=j
dP1
i=j
bi 2i genau dann, wenn bj =0 ist.
ei 2i genau dann, wenn ej = 1 ist.
Zu (U.1)
Ist bj = bj+1 = : : : = bd 1 = 1, dann wird der erste Knoten fur die HIGH-Kante von vxk
in (U.2) eingefugt. Andernfalls sei jp = minfi j (j i Pd 1) ^ (bi = 0)g. Dann wird
in (U.1) der erste Knoten usz auf Level s1 = (M + 2d) di=j1p bi 2i eingefugt.
Zunachst wird gezeigt, da das Tupel (k; s1) 2 DnB ist. Da bj = bj+1 = : : : = bjp 1 = 0
ist, kann s1 folgendermaen dargestellt und umgeformt werden:
1
1
s1
=
M +2
=
M +2
=
M +2
=
M +2
d
d 1
X
i=j
d
d 1
X
i=j
d
d 1
X
i=j
d
bi 2i
(1
bi ) 2i
2+
i
d 1
X
i=j
2 +2 +
d
j
bi 2i
d 1
X
i=j
j
bi 2i
= M + Æ + 2 = k + 2
Da vxk in (L.3) erzeugt wurde, ist das Tupel (k; k + 2j ) = (k; s1) 2 DnB enthalten
und wird deshalb in Zeile (13) von Algorithmus 2.5 gefunden. Analog
zu (L.3) kann die
0
0
j
Annahme, da es ein j > j gibt, fur das das Tupel (k; k + 2 ) in DnB enthalten ist,
zum Widerspruch gefuhrt werden. Damit ist sichergestellt, da kein groerer Level als s1
gefunden wird.
Mit den gleichen U berlegungen wie in (L.3) folgt, da fur die ausgehenden Kanten von
usz weitere Knoten in den unter (U.1) angegebenen Leveln eingefugt werden.
Falls ein weiterer Knoten vxk durch inverse D-Reduktion auf Level k = M + Pdi=j1 bi 2i in
(L.3) eingefugt wurde, dann mu M < k < k sein. Der Fall bj = bj +1 = : : : = bd 1 = 1
wird wieder in (U.2) behandelt. Sei also jq = minfi j (j i d 1) ^ (bi = 0)g. Dann
kann mit den gleichen Umformung,
ur die Darstellung von s1 verwendet wurden,
Pd 1 die f
d
gezeigt werden, da (M + 2 ) i=jq bi 2i = k + 2j ist. Auerdem kann wieder gezeigt
werden, da es in DnB kein Tupel (k ; k + 2j0 ) fur j 0 > j geben kann. Mit Hilfe des
k
Feldes equiP
vn wird dann erreicht, da die HIGH-Kante von vx zu dem Knoten auf Level
(M +2d) di=j1q bi 2i fuhrt, der auch fur die ausgehenden Kanten von usz eingefugt wird.
j
1
1
2
+1
1
1
196

ANHANG A. ZUR GROSSE

DnB -VOLLSTANDIGER
KFDDS
Zu (U.2)
Falls der Knoten vxk in (L.3) auf Level k = M + Pdi=j1 bi 2i mit bj = bj+1 = : : : = bd 1 =1
eingefugt wurde, dann ist k = M + Pdi=j1 2i = M + 2d 2j . Fur die Kante high(vxk )
mu gezeigt werden, da sie zu einem Knoten aus Level M + 2d = k + 2j fuhrt. Nach
Einsetzen von M = r 2d +1 kann die Darstellung von M +2d wegen j d folgendermaen
umgeformt werden:
M + 2d = r 2d + 1 + 2d = ((r + 1) 2d j ) 2j + 1
Das Tupel (M +2d 2j ; M +2d) = (((r +1) 2d j 1) 2j +1; ((r +1) 2d j ) 2j +1),
ist also in der Menge f((i 1) 2j + 1; i 2j + 1)) j i 2 f1; 2; : : : ; 2nj gg enthalten. Mit
j d log(n) ergibt sich aus Denition 2.6, da diese Tupel auch in DnB enthalten
sind.
0
0
j
Schlielich folgt wieder analog zu (L.1), da fur jedes j > j das Tupel (k; k +2 ) 2= DnB
ist.
Zu (U.3)
Der Beweis folgt analog zu (O.3). Der erste Knoten wird fur das jp 2 f0; 1; : : : ; dg mit
ejp = 1 und e0 = e1 = : : : = ejp 1 = 0 entsprechend auf Level (n + 1) Æe = M + 2d
eingefugt, so da auch der Teilbereich (U.2) in einer Implementierung nicht realisiert
werden braucht.
Anhang B
Verallgemeinertes Syntheseverfahren
In den Abschnitten 2.2.1 und 2.2.2 wurde ein Syntheseverfahren vorgestellt, um eine
Schaltkreisbeschreibung von einem vollstandigen, quasi-reduzierten KFDD abzuleiten. Die
Verallgemeinerung dieses Verfahrens fur D-vollstandige, quasi-reduzierte KFDDs wurde
in Abschnitt 2.2.3 vorgestellt. Die A nderungen und Erweiterungen der entsprechenden
Algorithmen wurden in Abschnitt 2.2.3.3 detailliert beschrieben.
Die modizierten Algorithmen fur D-vollstandige, quasi-reduzierte KFDDs sind im folgenden zusammengestellt:
Algorithmus B.1
Synthesis
( KFDD K , Kompositionssequenz D )
// Berechnet aus dem
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
(15)
(16)
(17)
(18)
(19)
(20)
(21)
(22)
for
od
i
D-vollstandigen, quasi-reduzierten KFDD K einen Schaltkreis SK .
= 1 to n do
Erzeuge primaren Eingang pii; Setze PI(i) = pii
Erzeuge Signal Pi ; Setze tag(Pi ) = i; Erzeuge Kante (pii; Pi )
= ; // Noch zu kombinierende Abhangigkeitsmatrizen
(k; l) 2 D do
b
D k;l =
( k, l, K , SK )
od
for k = 1 to n do
b k;k+1
D k;k+1 = D
D = D [ fD k;k+1 g
od
while D 6= fD1;n+1 g
Wahle Dk;s und Ds;l aus D, wobei (k; l) 2 D; D = D n fDk;s; Ds;l g
D k;l =
( K , Dk;s; Ds;l , Db k;l, SK )
k;l
D = D [ fD g
od
for i = 1 to m do
Erzeuge primaren Ausgang poi; Setze PO(i) = poi
Erzeuge Kante (D1;n+1[i; 1]; poi )
od
return ( SK )
D
for all
DirectDependencyMatrix
ParityMatrixMultiplication
197
198
ANHANG B. VERALLGEMEINERTES SYNTHESEVERFAHREN
Algorithmus B.2
DirectDependencyMatrix
( Level k, Level l, KFDD K , Schaltkreis SK )
b k;l fur alle Kanten,
// Bestimmt fur das KFDD K die direkte Abhangigkeitsmatrix D
// die von Knoten aus Level k direkt zu Knoten aus Level l fuhren und
b k;l [x; y] fur die einzelnen direkten Abhangigkeiten d^k;l
// realisiert Signale D
x;y .
(1) wk = widthk
(2) if l < n + 1 then wl = widthl else wl = 1 (3) Erzeuge wk wl Matrix Db k;l
(4) for x = 1 to wk do
(5)
for y = 1 to wl do
b k;l [x; y] =
(6)
if d^k;l
x;y = 0 then D
k;l
k;l
^
b
(7)
if dx;y = 1 then D [x; y] =
k;l
k;l
^
b
(8)
if dx;y = xk then D [x; y] = Pk (9)
if d^k;l
x;y = xk then
(10)
Erzeuge Gatter g vom Typ N OT ; Erzeuge Kante (Pk ; g)
(11)
Erzeuge Signal s; Setze tag(s) = k; Erzeuge Kante (g; s)
b k;l [x; y] = s (12)
D
(13)
(14)
od
(15) od
(16) return ( Db k;l )
Zero
One
Algorithmus B.3
ParityMatrixMultiplication
( KFDD K , Matrix Dk;s, Matrix Ds;l, Matrix Db k;l,
Schaltkreis SK )
// Erzeugt eine Schaltkreisrealisierung fur die Parity Matrix Multiplikation mit Eingangsb k;l und tragt die Ausgangssignale in eine neue Matrix Dk;l ein.
// signalen aus D k;s, D s;l und D
(1) wk = widthk
(2) if l 6= n + 1 then wl = widthl else wl = 1 (3) Erzeuge wk wl Matrix Dk;l
(4) for x = 1 to wk do
(5)
for y = 1 to wl do
(6)
D k;l [x; y ] =
(7)
od
(8) od
(9) return ( Dk;l )
ComposeDependencies
( x, y, Dk;s, Ds;l, Db k;l, SK )
199
Algorithmus B.4
ComposeDependencies
( Position x, Position y, Matrix Dk;s, Matrix Ds;l , Matrix Db k;l,
Schaltkreis SK )
// Erzeugt eine Schaltkreisrealisierung fur die Berechnung der Abhangigkeit des Knoten vxk
b k;l und gibt das Ausgangssignal d
// von Knoten vyl aus den Signalen aus D k;s , D s;l und D
// zuruck, wobei alle moglichen Vereinfachungen implizit durchgefuhrt werden.
(1) A = ; // Eingangssignale des EXOR-Gatters mit tag(s) = 0
(2) for i = 1 to n do B [i] = ; od // Eingangssignale des EXOR-Gatters mit jtag(s)j = i
N
(3) B = ; // Indizes der primaren Eingange, fur die VEXOR
anwendbar sein kann
(4) invert = 0 // Ausgangssignal des EXOR-Gatters invertieren?
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
(15)
(16)
(17)
(18)
(19)
(20)
(21)
(22)
(23)
(24)
(25)
(26)
(27)
(28)
(29)
(30)
(31)
(32)
(33)
(34)
(35)
(36)
(37)
(38)
(39)
(40)
(41)
(42)
(43)
(44)
(45)
(46)
(47)
for
z
= 1 to widths do
if (Dk;s[x; z ] 6=
) ^ (Ds;l[z; y] 6=
) then
k;s
if (D [x; z ] =
) ^ (Ds;l [z; y] = ) then invert = 1 if (Dk;s [x; z ] =
) ^ (Ds;l [z; y] 6= ) then A = A [ fDs;l [z; y]g k;s
if (D [x; z ] 6=
) ^ (Ds;l [z; y] = ) then
k;s
t = jtag(D [x; z ])j
if t = 0 then A = A [ fDk;s[x; z ]g
else B [t] = B [t] [ fDk;s[x; z ]g; B = B [ ftg if (Dk;s [x; z ] 6=
) ^ (Ds;l [z; y] 6= ) then
Erzeuge Gatter gA mit Typ AN D2
Erzeuge Kanten (Dk;s[x; z]; gA ) und (Ds;l[z; y]; gA )
Erzeuge Signal sA; Erzeuge Kante (gA ; sA); A = A [ fsAg
Zero
Zero
One
One
One
One
One
One
One
One
od
if (Db k;l [x; y] = One) then invert = 1 if (Db k;l [x; y] 6= One) ^ (Db k;l [x; y] 6= Zero) then
= jtag(Db k;l [x; y])j
if t = 0 then A = A [ fDb k;l [x; y]g
else B [t] = B [t] [ fDb k;l [x; y]g; B = B [ ftg t
for all i 2 B do
if jB [i]j = 1 then A = A [ B [i]
else invert = 1 invert od
if (jAj = 0) ^ (invert = 0) then d = Zero if (jAj = 0) ^ (invert = 1) then d = One if jAj = 1 then s0 ist das Element in A if jAj 2 then
Erzeuge Gatter gX mit Typ EXORjAj
for all sA 2 A do Erzeuge Kante (sA ; gX ) od
Erzeuge Signal s0; Erzeuge Kante (gX ; s0);
if (jAj 1) ^ (invert = 0) then d = s0 if (jAj 1) ^ (invert = 1) then
if (tag(s0 ) 0) then
Erzeuge Gatter gN vom Typ N OT ; Erzeuge Kante (s0 ; gN )
Erzeuge 0neues Signal d; Erzeuge Kante0 (gN ; d)
if (tag(s ) > 0) then tag(d) = tag(s ) else d = PI(jtag(s0 )j) return ( d )
Herunterladen