Einführung in die Logikminimierung In diesem Kapitel soll

Werbung
Einführung in die Logikminimierung
In diesem Kapitel soll die Grundlage für das Verständnis des Inhalts der entwickelten
Lernsoftware gebildet werden. Das Thema Logikminimierung wird in einen Gesamtkontext eingeordnet, sowie einige wichtige Begriffe und natürlich der ESPRESSOAlgorithmus vorgestellt. Dieses Kapitel soll lediglich einen Überblick geben und hat
nicht den Anspruch, ausführlich in den Entwurf Integrierter Schaltungen bzw. Verfahren zur Logikminimierung einzuführen, auch wenn der Kapitelname dies vielleicht vermuten lassen könnte.
Das Kapitel orientiert sich im wesentlichen an Ausführungen in [Eschermann 93]
und [Nebel 98]. Die Informationen über den ESPRESSO-Algorithmus wurden im
wesentlichen [Brayton 84] und [DeMicheli 93] entnommen.
1.1Einleitung
Integrierte Schaltungen (englisch Integrated Circuits, abgekürzt ICs) haben seit
ihren Anfängen in den 60er Jahren eine rasante Entwicklung erfahren und sind aus
unserer heutigen Zivilisation nicht mehr wegzudenken. Meistens spricht man von
Chips, und meint damit fertige, in einem kleinen Gehäuse untergebrachte Integrierte
Schaltungen; der Begriff Chip bezeichnet jedoch ursprünglich nur ein Plättchen aus
dem Halbleitermaterial Silizium, auf dem Integrierte Schaltungen realisiert werden
[INF 93]. Je schneller und kleiner Integrierte Schaltungen wurden, desto mehr Anwendungsfelder wurden für sie erschlossen. Anfangs wurden sie nur in teuren Großrechnern und der Forschung eingesetzt, heute befinden sie sich in fast jedem Haushalt und sogar im Kinderzimmer, steuern Motoren oder regulieren Kühlschränke.
Je nach Anzahl Transistoren, den kleinsten „Bauteilen“, aus denen Integrierte
Schaltungen bestehen, unterscheidet man die folgenden Integrationsstufen:
Anzahl
Integrationsstufe
Transistoren
SSI (Small Scale Integration)
bis zu 10
MSI (Medium Scale Integration)
10 bis 1000
LSI (Large Scale Integration)
1000 bis 20000
VLSI (Very Large Scale Integration) 20000 bis 500000
ULSI (Ultra Large Scale Integration) über 500000
Realisierbar seit (Jahr)
1961
1966
1971
1980
1985
Tabelle 1: Integrationsstufen in der Chiptechnologie
Abbildung 1 illustriert die Entwicklung der Transistorzahlen noch einmal anhand der
Intel-Prozessor-Generationen für den heimischen PC.
Abbildung 1: Transistorzahlen der Intel-Prozessor-Generationen [OFFIS 97]
Durch immer fortschrittlichere Technologien konnten Transistoren im Laufe der Zeit
immer kleiner realisiert werden, so daß immer mehr Transistoren auf der gleichen
Chipfläche untergebracht werden konnten. Gleichzeitig ließen sich immer größere
Chips unter akzeptablem Aufwand herstellen, da die Wahrscheinlichkeit für einen
Fehler auf dem Chip, die ja mit der Größe des Chips ansteigt, durch fortschrittlichere
Fertigungstechniken reduziert werden konnte. Die wachsende Integrationsdichte bei
gleichzeitiger Reduzierung der Fehlerwahrscheinlicheit ist mit ein Grund dafür, daß
Integrierten Schaltungen für immer neue Anwendungen interessant wurden und
werden.
1.2Entwurf Integrierter Schaltungen
Aufgrund der Komplexität Integrierter Schaltungen sind strukturierte Verfahren zu
deren Entwurf notwendig.
Als „kleinste Einheiten“ einer Integrierten Schaltung können Verbindungsleitungen
und sogenannte Transistoren betrachtet werden. Sehr einfach ausgedrückt kann
durch Transistoren reguliert werden, wann und wo wieviel Strom fließt. Transistoren
und Verbindungsleitungen lassen sich funktional in sogenannten logischen Gattern
gruppieren. Dadurch können elektrische Vorgänge durch das Zusammenspiel
logischer Komponenten (z.B. UND und ODER) abstrahiert werden. Diese logischen
Gatter lassen sich weiter zu größeren funktionalen Blöcken (z.B. Register zum
Speichern von Werten) gruppieren, welche sich wiederum gruppieren lassen. Am
Ende dieser Abstraktionsfolge befindet sich der Chip, der ebenfalls eine bestimmte
Funktion realisiert.
Diese Technik der Beschreibung einer Integrierten Schaltung auf verschiedenen
Abstraktionsebenen wird beim strukturierten Entwurf eingesetzt: Eine Schaltung
wird zunächst sehr abstrakt und ohne viele Details modelliert und dann schrittweise
in immer konkretere Teilsysteme aufgeteilt, bis schließlich eine direkt implementierbare Struktur aus Transistoren und Leitungen entstanden ist (siehe Abbildung 2).
Abbildung 2: Abstraktionsebenen beim Schaltungsentwurf
Die meisten Übergänge zwischen den Abstraktionsebenen lassen sich mittlerweile
durch Computer automatisieren. Dadurch können die Entwurfszeit und somit auch
die Entwurfskosten für eine Schaltung reduziert werden. Eine Automatisierung des
Entwurfs ist jedoch nur dann möglich, wenn standardisierte Bauteile einheitlicher
Größe bzw. regulärer Struktur verwendet werden, die sich z.B. automatisch plazieren
und verdrahten lassen. Diese Standardlösungen sind in den meisten Fällen jedoch
nicht optimal, da sie z.B. mehr Fläche benötigen oder langsamer sind, als eine speziell auf die zu realisierende Schaltung zugeschnittene Lösung. Ist also eine optimale
Realisierung für das Anwendungsziel einer speziellen Schaltung notwendig, wie z.B.
in der Raumfahrttechnik oder für Supercomputer, so lassen sich höhere Entwurfskosten nicht vermeiden und müssen akzeptiert werden. Soll eine Schaltung in hoher
Stückzahl hergestellt werden, kann es sich ebenfalls lohnen, auf Seite der Entwurfskosten mehr zu investieren, d.h. mehr Entwurfsschritte manuell durchzuführen, da
die Entwurfskosten auf die Anzahl der produzierten Schaltungen verteilt werden
können.
Man unterscheidet die folgenden typischen Entwurfsverfahren, die je nach Anwendung bzw. zu akzeptierender Entwurfskosten eingesetzt werden:
• Vollkundenentwurf (Full-Custom Design)
Vollkundenschaltungen werden vollkommen neu entwickelt, so daß sie sowohl
vom Flächenbedarf, als auch vom Zeitverhalten her optimiert werden können.
Aufgrund des sehr hohen Zeit- und Kostenaufwands lohnt sich dieses Verfahren
nur für hohe Fertigungsstückzahlen.
• Standardzellen
Standardzellen sind sozusagen vorgefertigte kleine Schaltungen, die jeweils eine
bestimmte Funktion realisieren. Sie können einer Standardzellenbibliothek entnommen werden und realisieren durch geeignete Kombination und Verdrahtung
eine gewünschte Schaltung. Da Standardzellen in der Regel alle die gleiche Höhe
besitzen, lassen sie sich in regelmäßigen Reihen platzsparend anordnen. Der
Entwurfsaufwand reduziert sich hier auf die Auswahl, Plazierung und Verdrahtung der Zellen. Es gibt zwar keine redundanten Transistoren, wie z.B. im nachfolgenden Entwurfsverfahren der Fall, jedoch sind Flächenbedarf und Zeitverhalten aufgrund der vorgefertigten Funktionsblöcke nicht so optimal, wie bei
Vollkundenschaltungen. Können Flächenbedarf und Zeitverhalten bei der
Zielanwendung einer Schaltung vernachlässigt werden, lohnen sich Standardzellen aufgrund des reduzierten Entwurfsaufwands auch für nicht ganz so hohe
Fertigungsstückzahlen.
• Gate-Arrays
Bei Gate-Arrays handelt es sich um in regelmäßigen Reihen angeordnete Transistoren, denen durch geeignete Verdrahtung eine Funktion zugeordnet werden
kann. Der Entwurfsaufwand reduziert sich hier also auf diese Verdrahtung. GateArrays werden jedoch nur in einem groben Raster von Größen angeboten, so daß
sie meistens nicht optimal ausgenutzt werden, d.h. viele Transistoren des
Gate-Arrays werden nicht benutzt. Gate-Arrays lohnen sich für einfache Schaltungen mit geringeren Fertigungsstückzahlen.
• PLDs (Programmable Logic Devices)
Bei PLDs handelt es sich um Schaltungen, die in großen Stückzahlen vorgefertigt
werden und erst vor ihrem Einsatz beim Anwender durch einen Programmiervorgang ihre Funktion erhalten. Bei diesem Programmiervorgang werden durch
gezielt angelegte elektrische Spannungen z.B. Kapazitäten erzeugt oder Sicherungen durchgebrannt. Der Entwurfsaufwand reduziert sich hier auf das verhältnismäßig einfache Programmieren, so daß PLDs bei sehr geringen Fertigungsstückzahlen kostengünstig eingesetzt werden können. Wie Gate-Arrays werden
auch PLDs meistens nicht optimal ausgenutzt. Außerdem werden sie nur in kleineren Größen angeboten, so daß sich nur Schaltungen mit bis zu etwa 1000
Gattern realisieren lassen.
• FPGAs (Field Programmable Gate Arrays)
FPGAs bestehen aus regelmäßig angeordneten, programmierbaren Zellen, die
sich untereinander verdrahten lassen. Man könnte sie als „große Art“ von PLDs
bezeichnen, da hier Schaltungen mit 20000 bis 30000 Gattern realisierbar sind.
Zusätzlich zum Programmieraufwand kommt hier jedoch noch der Entwurfsaufwand für die Zuordnung von Funktionen an die verschiedenen Zellen sowie für
die Verdrahtung hinzu. Es sind also etwas höhere Fertigungsstückzahlen als bei
PLDs erforderlich, um die höheren Entwurfskosten verteilen zu können.
Während der Entwicklung einer Schaltung werden häufig PLDs und besonders
FPGAs eingesetzt, da sich diese relativ einfach löschen und neu programmieren
lassen. Für die entgültige Serienproduktion finden häufig Gate-Arrays oder Standardzellen Verwendung.
1.3Optimierungsziele
Wie im letzten Kapitel schon mehrfach angedeutet wurde, spielen beim Entwurf
Integrierter Schaltungen ein optimaler Flächenbedarf und ein optimales Zeitverhalten
eine wichtige Rolle. Je nachdem, zu welchem Zweck eine Schaltung entworfen
wird, sind jedoch weitere Optimierungsziele möglich, wie z.B. Chipkosten,
Leistungsaufnahme oder Testbarkeit.
In vielen Fällen gibt es Konflikte zwischen diesen Zielen: Die Geschwindigkeit
vieler Schaltungen läßt sich z.B. nur erhöhen, indem mehr Bauteile eingesetzt
werden, d.h. die Chipfläche vergrößert wird.
Je nach geplantem Entwurfsverfahren können die Optimierungsziele auf verschiedene Art erreicht werden, wie am Beispiel einer möglichst minimalen Chipgröße in
Tabelle 2 deutlich werden soll:
Entwurfsverfahren:
Minimale Chipgröße durch:
Vollkundenentwurf
Reduzierung von Transistorzahl und Verdrahtungsfläche.
Standardzellen
Reduzierung der benötigten Anzahl Zellen.
Gate-Arrays
Reduzierung der benötigten Anzahl Transistoren.
PLDs
Reduzierung der Anzahl Produktterme der Schaltfunktion.
FPGAs
Reduzierung der benötigten Anzahl Programmierzellen.
Tabelle 2: Verschiedene Optimierungsverfahren für eine minimale Chipgröße
Damit nicht für jedes Entwurfsverfahren ein neues Optimierungssverfahren entwickelt werden muß, zerlegt man die Optimierung in einen technologieunabhängigen und einen technologieabhängigen Teil. Im technologieunabhängigen
Teil wird ein abstraktes Optimierungsziel verfolgt, das gemeinsames Ziel aller
Entwurfsverfahren ist, so daß das Ergebnis je nach technologieabhängigem Teil nur
noch den jeweiligen technologiespezifischen Eigenschaften angepaßt werden muß.
Heutzutage kommen im wesentlichen zwei abstrakte Ziele zum Einsatz: Basiert die
zu realisierende Schaltfunktion auf einer zweistufigen Struktur, so lautet das Ziel, die
Anzahl der Produktterme zu minimieren, handelt es sich um eine mehrstufige
Struktur, so wird in der Regel versucht, die Anzahl Literale bzw. Eingänge der
Schaltung zu minimieren [Eschermann 93].
Diese Diplomarbeit und die zugehörige Lernsoftware beschäftigen sich mit der technologieunabhängigen Optimierung zweistufiger Logik, d.h. das Ziel lautet „Minimierung der Anzahl Produkterme einer Schaltfunktion“. Wird im folgenden von
Logikminimierung gesprochen, so ist dieses Ziel damit gemeint.
1.4Begriffe und Notationen
Grundsätzlich lassen sich zwei Arten von Schaltungen unterscheiden: Schaltwerke
und Schaltnetze. Die Ausgangswerte eines Schaltwerks werden durch die aktuellen
Eingangswerte sowie durch gespeicherte Werte bestimmt. Bei den gespeicherten
Werten handelt es sich um Ein- oder Ausgangswerte eines vergangenen Zeitpunkts,
also z.B. um einen im letzten Schritt bestimmten Ausgangswert. Von einem Schaltnetz spricht man, wenn die Ausgangswerte nur direkt aus den aktuellen Eingangswerten berechnet werden. Schaltwerke bezeichnet man auch als sequentielle, Schaltnetze als kombinatorische Schaltungen. Im Rahmen dieser Diplomarbeit werden nur
Schaltnetze betrachtet.
Die Funktion eines Schaltnetzes wird durch eine Schaltfunktion beschrieben, die jeder Kombination von Eingangswerten eindeutig einen Ausgangswert zuordnet. In
manchen Fällen wird nicht jede dieser Kombinationen für die Funktion eines Schaltnetzes benötigt. Die Kombinationen von Eingangswerten, um die man sich „nicht
kümmern“ muß, bezeichnet man als don’t-care-conditions. Da eine Schaltfunktion
auch für diese Eingangwerte definiert sein muß, ordnet man ihnen sogenannte don’tcare-Ausgangswerte zu. Diese lassen sich bei der Logikminimierung miteinbeziehen.
1.4.1Notationen
Eine Schaltfunktion läßt sich auf unterschiedliche Arten darstellen. Im folgenden
werden einige gängige Notationen und damit verbundene Begriffe vorgestellt. Ein
Grundwissen um Elemente der Logik, speziell der Schaltlogik, wird hier vorausgesetzt.
Funktionstabelle
In einer Funktionstabelle wird jeder Kombination von Eingangswerten einer Schaltfunktion ein bestimmter Funktionswert zugeordnet (siehe Abbildung 3). Manchmal spricht
man hier auch von Wahrheitstafel. Dieser Begriff ist von der
Aussagenlogik übernommen, wo die 1 mit der Aussage
„wahr“ und die 0 mit der Aussage „falsch“ identifiziert wird.
Abbildung 3:
Funktionstabelle
Boolesche Gleichung
Die Darstellung als Funktionstabelle wird bei einer größeren Anzahl von Schaltungseingängen zu mühselig: Schon bei 6 Eingängen besitzt die Tabelle 64 Zeilen. Bei
einer Booleschen Gleichung wird eine Schaltfunktion durch einen Booleschen
Ausdruck beschrieben, was neben dem geringeren Schreibaufwand den entscheidenden Vorteil hat, daß zur Vereinfachung bzw. Minimierung die Rechenregeln der
Booleschen Algebra verwendet werden können. Für diese Vereinfachung bringt man
den gegebenen Ausdruck zunächst in eine eindeutige Normalform, welche sich am
einfachsten mit Hilfe der Funktionstabelle erklären läßt: Entweder werden alle
Einsstellen der Schaltfunktion durch die sogenannte Kanonisch Disjunktive
Normalform (ADN, Ausgezeichnete Disjunktive Normalform) als Disjunktion
(ODER) von Konjunktionen (UND), oder alle Nullstellen der Schaltfunktion durch
die sogenannte Kanonisch Konjunktive Normalform (AKN, Ausgezeichnete
Konjunktive Normalform) als Konjunktion von Disjunktionen dargestellt (siehe
Abbildung 4). Die durch Disjunktion verknüpften Terme der ADN werden als
Minterme, die durch Konjunktion verknüpften Terme der AKN als Maxterme
bezeichnet.
Abbildung 4: ADN und AKN
Anmerkung: Eine allgemeine Disjunktion von Konjunktionen wird auch als
Disjunktive Normalform (DNF), eine allgemeine Konjunktion von Disjunktionen als
Konjunktive Normalform (KNF) bezeichnet. Nach der Vereinfachung einer kanonischen Normalform darf man bei der ADN nur noch von DNF, bei der AKN nur noch
von KNF sprechen. Ich verwende im folgenden nur noch die allgemeinen Bezeichnungen DNF und KNF.
Grafische Notationen
Neben Tabellen und Booleschen Gleichungen besteht auch die Möglichkeit der
grafischen Darstellung von Schaltfunktionen durch sogenannte Karnaugh-VeithDiagramme (kurz KV-Diagramme) oder Hyperwürfel (siehe Abbildung 5 und
Abbildung 6).
Abbildung 5: KV-Diagramm und Hyperwürfel für drei Variablen
Abbildung 6: KV-Diagramm und Hyperwürfel für vier Variablen
(Bemerkung: Der Ursprung des Hyperwürfels befindet sich hier an der Stelle „0“;
die Variable d wird auf dem großen, äußeren Würfel bzw. Quader abgetragen)
In die Felder eines KV-Diagramms werden die Minterme einer Schaltfunktion als
Einsen eingetragen. Im KV-Diagramm benachbarte Felder unterscheiden sich in
genau einer Koordinate. Felder am Rand besitzen genau soviele Nachbarfelder, wie
Zellen in der Mitte: Dazu muß man sich das Diagramm zyklisch über die Ränder
hinweg geschlossen denken (in Abbildung 5 und Abbildung 6 durch die gestrichelten
Linien angedeutet). Die Beschriftung am Rand des Diagramms gibt an, für welche
Felder ein Schaltungseingang bzw. eine Variable einen positiven oder negierten Wert
annimmt.
Beim Hyperwürfel werden die Minterme einer Schaltfunktion an den Ecken abgetragen, ein Koordinatensystem definiert den Wert jeder Ecke. In Abbildung 5 und
Abbildung 6 sollte die Verbindung zwischen Boolescher Gleichung, KV-Diagramm
und Hyperwürfel deutlich werden. Die acht klein dargestellten Zahlen ermöglichen
die Verbindung der Felder des KV-Diagramms mit den entsprechenden Ecken des
Hyperwürfels: Man kann sich ein KV-Diagramm offensichtlich auch als „aufgeklappten“ Hyperwürfel vorstellen. Sowohl KV-Diagramm als auch Hyperwürfel
lassen sich prinzipiell um beliebig viele Schaltungseingänge bzw. Variablen
erweitern, diese Erweiterbarkeit wird jedoch durch die damit verbundene Unübersichtlichkeit der Darstellung begrenzt (siehe dazu Kapitel ).
1.4.2 Weitere Begriffe
Die durch Disjunktion miteinander verknüpften Terme der DNF werden auch als
Produktterme bezeichnet. Da eine Boolesche Gleichung genau dann wahr ist bzw.
den Wert „1“ annimmt, wenn mindestens ein Produktterm der DNF wahr ist bzw.
den Wert „1“ annimmt, d.h. diese Produktterme die Schaltfunktion implizieren,
bezeichnet man diese Produktterme auch als Implikanten. Ziel der Logikminimierung
ist die Reduzierung der Anzahl Implikanten, die zur Spezifikation einer Schaltfunktion notwendig sind. Jede Implikantenmenge, die eine Schaltfunktion vollständig
spezifiziert, wird als Überdeckung dieser Schaltfunktion bezeichnet, da sie alle
Minterme der zugehörigen Booleschen Gleichung über- bzw. abdeckt. Ein Implikant
einer Überdeckung, der als einziges einen oder mehrere Minterme überdeckt, wird
auch als essentiell bezeichnet.
Durch Regeln der Booleschen Algebra lassen sich Implikanten so zusammenfassen,
daß wenige, größere Implikanten entstehen. Die Angabe „groß“ bezieht sich hierbei
nicht auf die Größe eines geschriebenen Produktterms (diese wird kleiner), sondern
auf die Anzahl Minterme, die ein Produktterm überdeckt. Dies läßt sich am einfachsten anhand der Größe der sogenannten Schleifen im KV-Diagramm bzw. der
Würfeldarstellung nachvollziehen. Diese Schleifen entsprechen einer grafischen
Darstellung der Zusammenfassung von Implikanten (siehe Abbildung 7 und
Abbildung 8).
Das Zusammenfassen von Implikanten läßt sich als Vergrößerung eines der beteiligten Implikanten auffassen, d.h. ein Implikant wird so vergrößert, daß er einen, oder
sogar mehrere andere Implikanten überdeckt. Die zugehörige Schleife wird dabei
größer, der geschriebene Produktterm dagegen kleiner.
Abbildung 7: Zusammenfassung von Implikanten im KV-Diagramm
Abbildung 8: Zusammenfassung von Implikanten im Hyperwürfel
Überdeckte Implikanten sind zur Spezifikation einer Schaltfunktion nicht mehr
notwendig, man bezeichnet sie als redundant und entfernt sie aus der Überdeckungsmenge. Kann ein Implikant nicht weiter vergrößert werden, so wird er als
Primimplikant bezeichnet. Ziel der Logikminimierung ist also das Auffinden einer
minimalen Anzahl von Primimplikanten, die zur Überdeckung einer Schaltfunktion
notwendig ist.
1.4.3Positional Cube Notation
Zur rechnerinternen Verarbeitung von Schaltfunktionen sind die gängigen Notationen eher ungeeignet. Hier verwendet man effizientere Datenstrukturen, wie z.B. die
sogenannte Positional Cube Notation, die auch im ESPRESSO-Algorithmus benutzt
wird.
In der Positional Cube Notation wird ein Produktterm binär codiert und so als Vektor
aus Nullen und Einsen repräsentiert. Diesen Vektor erhält man, indem man alle
Literale des Produktterms einzeln codiert und die Ergebnisse aneinanderfügt. Die
folgende Abbildung zeigt in der linken Tabelle die Codierung eines Literals und in
der rechten Tabelle die dementsprechende Codierung einer Reihe von Produkttermen
(DC = don’t-care-Wert). Jeder Produktterm wird als Zeilenvektor repräsentiert, so
daß die ganze Schaltfunktion als Matrix repräsentiert werden kann:
Abbildung 9: Positional Cube Codierung
Die fehlende Literal-Codierung "00" würde man nach diesem System so interpretieren, daß die entsprechende Variable einen ungültigen Wert annimmt. Ein Implikant,
der so eine Variable enthielt, wäre ungültig und müßte aus der die Schaltfunktion
spezifizierenden Implikantenmenge entfernt werden. Für die Codierung wird "00"
nicht benötigt.
Mit Hilfe dieser Codierung lassen sich Operationen auf Implikanten effizient als
einfache Matrizen-Operationen realisieren.
1.5Logikentwurf
Der Ansatzpunkt für eine Logikminimierung ist die Abstraktionsebene des Entwurfs,
auf der eine Schaltung durch logische Gatter realisiert wird. Die Beschreibung einer
Schaltung auf dieser Gatterebene bezeichnet man als Logikentwurf.
Ausgangspunkt der Gatterebene ist die Beschreibung des Verhaltens einer Schaltung,
z.B. in Form einer Funktionstabelle oder Booleschen Gleichung. Diese Beschreibung
läßt sich direkt in eine strukturelle Beschreibung in Form von logischen Gattern
übertragen. In der Regel ist diese Gatterstruktur jedoch nicht optimal, so daß vor der
Realisierung dieser Struktur durch Transistoren und Verbindungsleitungen eine
Logikminimierung durchzuführen ist (siehe Abbildung 10).
Abbildung 10: Schaltnetz vor und nach der Minimierung
Beim manuellen Logikentwurf wird die Logikminimierung entweder mittels
Axiomen und Sätzen der Booleschen Algebra, oder grafisch mit KV-Diagrammen
oder Hyperwürfeln durchgeführt. Beim automatisierten Logikentwurf, den man auch
als Logiksynthese bezeichnet, übernimmt eine spezielle Logiksynthese-Software die
Logikminimierung. Es genügt die Eingabe einer Schaltungsspezifikation mittels
einer geeigneten Eingabesprache. Vor allem bei der Minimierung großer
Schaltungen ist eine Rechnerunterstützung nicht mehr wegzudenken, da die
grafischen Notationen hier unbrauchbar werden.
1.6Minimierungsalgorithmen
Man unterscheidet zwischen exakten und heuristischen Minimierungsalgorithmen.
Exakte Algorithmen haben ihren Ursprung in in den 50er Jahren stattgefundenen
Arbeiten zu Logikdesign von W.V. Quine [Quine 52] und E.J. McCluskey
[McCluskey 56]. Beim klassischen Quine-McCluskey-Algorithmus werden zunächst
alle möglichen Primimplikanten einer Schaltfunktion berechnet. Aus dieser Menge
wird im zweiten Schritt eine minimale Teilmenge ermittelt, die die Schaltfunktion
vollständig überdeckt. Auf diese Weise lassen sich auch größere Probleme lösen, die
mittels grafischer Verfahren nicht mehr übersichtlich darstellbar wären.
Der Quine-McCluskey-Algorithmus war ursprünglich ein tabellarisches Verfahren
für das Minimieren von Hand, eignete sich aber aufgrund seiner eindeutigen Formulierung sehr gut für die computergestützte Logikminimierung. Dadurch ließ er sich
auch auf Probleme anwenden, denen man von Hand nicht mehr mächtig wurde.
Leider steigt bei Quine-McCluskey und anderen exakten Verfahren der Bedarf an
Speicherplatz und Rechenzeit im schlimmsten Fall exponentiell mit der Anzahl der
Schaltungseingänge.
In den frühen 70er Jahren stieß man mit den durch die LSI realisierbaren Schaltungskomplexitäten (mehr als 30 Ein- und Ausgänge) an die Grenzen der klassischen,
exakten Minimierungstechniken, so daß man sich neuen Techniken zuwandte. Der
Quine-McCluskey-Algorithmus wurde dennoch stetig durch immer neue, effizientere
Implementierungen drastisch verbessert, so daß er heute sogar für Design-Probleme
realistischer Größe anwendbar geworden ist [Rudell 87][Dagenais 86][Coudert 92]
[McGeer 93]. Nichtsdestominder bleibt sein Aufwand im schlimmsten Fall
exponentiell.
Eine Technik, der man sich in den frühen 70er Jahren zuwandte, war die heuristische
Logikminimierung. Darunter versteht man die direkte Generierung einer Lösung
mittels
bestimmter
Taktiken,
Strategien,
Regeln,
sogenannter
Heuristiken.
Heuristiken entstehen aus Experimenten und Erfahrungen und liefern mit hoher
Wahrscheinlichkeit (je nach Qualität der Heuristik) eine gute wenn nicht sogar die
beste Lösung. Heuristiken entscheiden bei der Logikminimierung z.B., in welcher
Reihenfolge welche Implikanten zusammengefaßt werden sollten, um eine möglichst
gute Lösung zu erreichen.
Da bei der heuristischen Minimierung eine Lösung auf direktem Weg berechnet
wird, d.h. ohne Umweg über alle Primimplikanten, lassen sich Speicherplatzbedarf
und Rechenzeit reduzieren. Da der Lösungsweg jedoch durch Heuristiken bestimmt
wird, die nur mit einer gewissen Wahrscheinlichkeit die richtigen Entscheidungen
treffen und so in Spezialfällen „versagen“ können, gibt es keine Garantie dafür, daß
die erreichte Lösung die bestmögliche ist. Die Abweichung von der bestmöglichen
Lösung ist jedoch im Verhältnis zur Größe der Lösung und vor allem zur
Rechenzeitersparnis vernachlässigbar klein.
Ein frühes Beispiel für einen heuristischen Algorithmus zur Logikminimierung ist
der in den 70er Jahren von IBM entwickelte MINI-Algorithmus [Hong 74], der für
die meisten Probleme der damaligen Zeit eine sehr gute Lösung in akzeptabler
Rechenzeit lieferte. Es folgte mit dem PRESTO-Algorithmus [Brown 81] Anfang der
80er Jahre ein ähnlich gutes Verfahren. Der bekannteste Algorithmus, der seit
Anfang der 80er Jahre, als sich mit der nächsten, VLSI-Integrationsstufe die
Komplexität Integrierter Schaltungen noch weiter erhöhte, auch in kommerziellen
Logiksynthese-Werkzeugen eingesetzt wird (z.B. in [ISDATA 97]), ist der von IBM
und der University of California at Berkeley entwickelte ESPRESSO-Algorithmus.
Er ist Thema der zu dieser Diplomarbeit gehörenden Lernsoftware.
Die auf der nächsten Seite folgende Tabelle 3 zeigt für sechs Beispiele die Ergebnisse eines exakten sowie eines heuristischen Verfahrens [vereinfacht aus
Eschermann 93]. Die Ergebnisse wurden mit Hilfe des Programms espresso [OCT
90] erzielt, welches sowohl die heuristische Minimierung durch den ESPRESSOAlgorithmus, als auch die exakte Minimierung mittels einer effizienten Implementierung des Quine-McCluskey-Algorithmus (in der Literatur oft als ESPRESSOEXACT bezeichnet) ermöglicht. Als Platform diente ein SPARC-Arbeitsplatzrechner
mit 12.5 MIPS.
Anzahl
EingabeTerme
87
167
305
1848
1459
1227
Ausgabe
(heuristisch
minimiert)
22
120
197
690
336
1088
CPU-Zeit
(sec)
3
7
61
225
123
710
Ausgabe
(exakt
minimiert)
22
117
?
?
334
?
CPU-Zeit
(sec)
4
14
>100000
>100000
2530
>100000
Tabelle 3: Vergleich heuristischer und exakter Logikminimierung
Die linke Spalte der Tabelle zeigt jeweils die Anzahl Eingabeterme. Die jeweils
nächsten zwei Spalten zeigen das Ergebnis des heuristischen und des exakten
Verfahrens sowie die benötigte Rechenzeit. Man erkennt, daß das heuristische
Verfahren mit steigender Problemgröße bei der Rechenzeit weitaus besser abschneidet. Die Fragezeichen beim exakten Verfahren bedeuten, daß die Berechnung
hier nach einer Rechenzeit von 100000 Sekunden (also mehr als 27 Stunden) ohne
Ergebnis abgebrochen wurde. Für diese Beispiele benötigte das heuristische Verfahren dagegen lediglich einige Minuten. Man erkennt außerdem, daß die Lösung des
heuristischen Verfahrens nicht garantiert minimal ist. Im Verhältnis zur Gesamtgröße
der Lösung und besonders zur Rechenzeitersparnis ist diese Abweichung jedoch
vernachlässigbar klein. Oder anders ausgedrückt: Ob nun 2 Gatter mehr oder weniger
benötigt werden, fällt hier einfach nicht mehr ins Gewicht.
1.7ESPRESSO
Der bekannteste heuristische Algorithmus zur Logikminimierung, der seit den 80er
Jahren auch in kommerziellen Logiksynthese-Werkzeugen eingesetzt wird (z.B. in
[ISDATA 97]), ist der ESPRESSO-Algorithmus. Dieser wurde Anfang der 80er Jahre
von IBM und der University of California at Berkeley entwickelt und ist Thema der
im Rahmen dieser Diplomarbeit entwickelten Lernsoftware.
Bevor die Konzepte dieses Algorithmus vorgestellt werden, zunächst ein kurzer
Überblick über die verschiedenen Versionen von ESPRESSO, die in der Literatur
unterschieden werden:
• Bei ESPRESSO-I [Brayton 82] handelte es sich um eine anfängliche Testumgebung, in der die im Jahre 1981 bekanntesten heuristischen Strategien des
MINI- und des PRESTO-Algorithmus, sowie einige neu entwickelte Ideen
miteinander verglichen werden konnten.
• Die Ergebnisse der Tests wurden 1982 in einem eigenständigen Algorithmus
zusammengefaßt: ESPRESSO-II [Brayton 84], der zunächst in APL1 implementiert wurde.
• 1984 implementierte Richard Rudell, ein Absolvent der University of California
at Berkeley, eine Version in C: ESPRESSO-IIC.
• Für vergleichende Testzwecke wurde auf Grundlage der ESPRESSO-IIC Implementierung eine effiziente Implementierung des Quine-McCluskey-Algorithmus
realisiert: ESPRESSO-EXACT.
• 1986 wurde ESPRESSO-IIC so modifiziert, daß neben binären Schaltfunktionen
nun auch eine mehrwertige Logik unterstützt wurde: ESPRESSO-MV [Rudell 87].
Dieser Algorithmus hat heute die binäre Version ersetzt, da er selbst für binäre
Fälle effizienter arbeitet. Meistens wird jedoch immer noch von ESPRESSO-II
gesprochen, falls nur binäre Logik betrachtet wird. Auf der Grundlage von
ESPRESSO-MV wurde eine neue ESPRESSO-EXACT-Version für mehrwertige
Logik realisiert.
• ESPRESSO-MV und ESPRESSO-EXACT wurden in dem Program espresso
zusammengefaßt [OCT 90].
Die im Rahmen dieser Diplomarbeit entwickelte Lernsoftware beschäftigt sich mit
den allen Versionen zugrundeliegenden Prinzipien des ESPRESSO-Algorithmus für
binäre Logik, also sozusagen mit ESPRESSO-II, jedoch ohne Betrachtung irgendwelcher Implementierungsdetails. Aus diesem Grund wird die allgemeine
Bezeichnung „ESPRESSO“ verwendet.
Im folgenden wird der Ablauf des ESPRESSO-Algorithmus kurz vorgestellt. Da der
Algorithmus relativ komplex ist, würde eine detailliertere Beschreibung den Rahmen
1
Auszug aus dem Informatik-Duden [INF 93]: „APL (Abk. für ‚A Programming Language‘):
Bezeichnung für eine Anfang der 60er Jahre entwickelte Programmiersprache, die sich durch eine
mathematisch orientierte, sehr knapp gefaßte Notation auszeichnet. [...] Sie wird von Ingenieuren
geschätzt, da man relativ komplexe Sachverhalte kurz formulieren und ‚mal rasch‘ durchrechnen
kann. Die interpretative Verarbeitung führt jedoch zu sehr hohen Rechenzeiten. [...]“.
dieser Ausarbeitung sprengen. Aus diesem Grund möchte ich für Details auf die
entwickelte Lernsoftware verweisen.
Als Eingabe erhält ESPRESSO eine Menge von Implikanten. Diese Menge wird als
erste „Lösung“ (wenn auch eine wahrscheinlich recht schlechte Lösung) initialisiert
und iterativ immer weiter verbessert, d.h. die Anzahl Implikanten wird verringert, bis
keine Verbesserung mehr erreicht werden kann. Dieser Vorgang wird als iterative
Verbesserungsstrategie bezeichnet. Da der ESPRESSO-Algorithmus, wie gesagt,
relativ komplex ist, faßt man seine Schritte und Phasen in sogenannten Operatoren
zusammen. Der Ablauf des Algorithmus kann so als Anwendung von Operatoren in
einer bestimmten Reihenfolge auf bestimmte Eingabedaten verstanden werden.
Heuristische Minimierer lassen sich allgemein auf
Basis ihrer Operatoren und deren Anwendungsreihenfolge charakterisieren. Die frühen heuristischen
Minimierer MINI [Hong 74] und PRESTO [Brown
81] bestanden aus drei bzw. einem Operator,
ESPRESSO verwendet insgesamt sechs.
Abbildung 11 illustriert die Anwendungsreihenfolge
dieser Operatoren in Form eines Flußdiagramms.
Folgende Funktionen werden durch die einzelnen
Operatoren realisiert:
• COMPLEMENT berechnet das Komplement der
die Schaltfunktion spezifizierenden Implikantenmenge. Dieses wird vom EXPAND-Operator
benötigt.
Abbildung 11: ESPRESSO
• EXPAND versucht, die vorhandenen Implikanten in einer geeigneten Reihenfolge zu vergrößern, so daß jeweils möglichst viele andere Implikanten überdeckt
werden (engl. to expand: (sich) vergrößern). Überdeckte Implikanten werden
gelöscht. Abbildung 12 zeigt beispielhaft das Zusammenfassen zweier Implikanten, was, wie schon erwähnt, auch als Vergrößerung eines der beiden Implikanten
interpretiert werden kann.
Abbildung 12: EXPAND
• EXPAND löscht nur die Implikanten, die direkt von einem anderen Implikanten
überdeckt werden. Es gibt jedoch eventuell noch solche, die von zwei oder mehr
Implikanten gemeinsam überdeckt werden, und somit redundant sind (siehe
Abbildung
13).
IRREDUNDANT
versucht,
die
größtmögliche
Anzahl
redundanter Implikanten zu entfernen.
Abbildung 13: IRREDUNDANT
An dieser Stelle des Flußdiagramms bzw. des Algorithmus entspricht die aktuelle
Implikantenmenge schon einer möglichen Endlösung, d.h. jeder Implikant läßt sich
weder weiter vergrößern noch in dieser Form aus der Lösung entfernen. Da die
Lösung jedoch heuristisch ermittelt wurde, existiert möglicherweise eine andere,
bessere Lösung. Diese wird im folgenden zu ermitteln versucht.
• ESSENTIALS bestimmt alle Implikanten, die in jeder möglichen Lösung enthalten sein müssen, da sie als einzige einen oder mehrere Minterme überdecken.
Diese Implikanten werden geeignet gekennzeichnet, so daß die Menge der in
folgenden Durchläufen der Iterationsschleife zu berücksichtigenden Implikanten
verkleinert werden kann, was bei größeren Problemen eine effizientere Iteration
ermöglicht. Die folgende Abbildung 14 zeigt beispielhaft alle Lösungen einer
Schaltfunktion (in diesem Fall zwei). Die dunkel markierten Implikanten sind
essentiell, da sie offensichtlich in jeder Lösung enthalten sind.
Abbildung 14: ESSENTIALS
• Um eine möglicherweise bessere Lösung zu finden, muß die derzeitige lokale
Lösung „verlassen“ werden, d.h. die Implikanten müssen geeignet verkleinert
werden, so daß sie eventuell in eine neue Richtung wieder vergrößert werden
können. REDUCE löst geeignete Zusammenfassungen auf, ohne dabei jedoch die
Anzahl Implikanten zu erhöhen (siehe Abbildung 15). Dadurch soll vermieden
werden, am Ende eine möglicherweise schlechtere Lösung, als vorher zu
erhalten. Ziel von REDUCE ist eine Verringerung der Anzahl Implikanten in
einem der Folgeschritte des Algorithmus (engl. to reduce: verringern).
Nach REDUCE können die Operatoren EXPAND und IRREDUNDANT wieder
angewandt werden, um eine neue mögliche lokale Lösung zu ermitteln. Diese wird
mit der vorherigen Lösung verglichen. Konnte eine Verbesserung erreicht werden,
erfolgt eine erneute Verbesserungsiteration, indem zurück zum REDUCE-Operator
verzweigt wird. Konnte keine Verbesserung erreicht werden, so liegt dies eventuell
daran, daß die verwendeten Heuristiken, nach denen z.B. die Reihenfolge bestimmt
wird, in der Implikanten verkleinert bzw. vergrößert werden, „falsche“ bzw.
ungünstige Entscheidungen getroffen haben.
Abbildung 15 illustriert beispielhaft eine REDUCE-EXPAND Abfolge.
Abbildung 15: REDUCE-EXPAND Abfolge
• LAST_GASP repräsentiert die Durchführung einer weiteren, vollständigen
Verbesserungsiteration unter Verwendung anderer Heuristiken als in der Hauptiterationsschleife (engl. last gasp: "zum letzten Mal nach Luft schnappen"). Falls
die vorherigen Heuristiken sich in einer Art "Sackgasse" befunden haben, so
besteht eine hohe Wahrscheinlichkeit dafür, daß diese Sackgasse durch die Verwendung anderer Heuristiken aufgelöst werden kann. Oder anders formuliert: Die
Wahrscheinlichkeit, daß zwei verschiedene Heuristiken beide an derselben Stelle
scheitern, ist sehr klein. Falls also doch eine weitere Verbesserung der Lösung
möglich ist, so wird sie mit hoher Wahrscheinlichkeit im LAST_GASP-Schritt
gefunden.
Im Fall einer Verbesserung durch den LAST_GASP-Operator besteht wieder die
Möglichkeit weiterer Verbesserungen durch die eigentliche Iterationsschleife, d.h. es
wird an ihren Anfang zurückverzweigt. Konnte immer noch keine Verbesserung zur
vorherigen Lösung erreicht werden, so handelt es sich bei dieser sehr wahrscheinlich
um die bestmögliche bzw. eine annähernd bestmögliche, so daß kein erneuter Verbesserungversuch mehr unternommen wird.
Durch LAST_GASP kommen zwei unterschiedliche Mengen von Heuristiken zum
Einsatz. Nur bei Problemen, bei denen beide Mengen „versagen“, wird ESPRESSO
nicht die bestmögliche Lösung liefern. In der Praxis kommt dies nur bei verhältnismäßig großen Problemen vor, bei denen sich dann die jeweils erzielte Lösung
vernachlässigbar wenig von der bestmöglichen Lösung unterscheidet. Die schon auf
Seite 20 vorgestellte Tabelle 3 vergleicht einige Lösungen samt benötigter Rechenzeit mit den Lösungen eines exakten Logikminimierungsverfahrens.
Abschließend sei noch kurz auf den Namen „ESPRESSO“ eingegangen. Hinweise
für diese Namensgebung gibt es z.B. im Vorwort der von den Autoren des
ESPRESSO-Algorithmus als Buch verfaßten Dokumentation [Brayton 84]: „It is
hoped that the strength and speed of our minimizer warrant its Italian name, which
denotes both express delivery and a special-brewed black coffee“ und „Finally we
thank our families for their kind support during the years devoted to this effort, and
give a special thank you to ‚our Italian wife‘ whose pizza and espresso were an
inspiration for this book.“.
Herunterladen