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 )