Digitaltechnik VHDL
Digitaltechnik VHDL
Marco Winzker
Klaus Urbanski
Roland Woitowitz
Digitaltechnik
Grundlagen, VHDL, FPGAs, Mikrocontroller
7. Auflage
Springer-Lehrbuch
Digitaltechnik
Grundlagen, VHDL, FPGAs, Mikrocontroller
7., berarbeitete und aktualisierte Auflage
Winfried Gehrke
Osnabrck, Deutschland
Klaus Urbanski
Osnabrck, Deutschland
Marco Winzker
St. Augustin, Deutschland
Roland Woitowitz
Osnabrck, Deutschland
Vorwort
Die Digitaltechnik ist ein integraler Bestandteil unseres tglichen Lebens geworden.
Vielfach begegnet sie uns in Form von Desktop-PCs, Laptops, Tablets, Fernsehgerten
oder Smartphones. Wenn wir ein solches Gert nutzen, ist klar: Wir verwenden ein digitales System. Darber hinaus ist die Digitaltechnik aber auch in Bereiche eingezogen,
bei der sie nicht sofort offensichtlich ist. In einem modernen Auto arbeiten beispielsweise zahlreiche digitale Komponenten. Sie steuern den Motor, helfen beim Einparken
und untersttzen beim Fahren durch Fahrspurassistenten, ABS und ESP. Diese Form der
digitalen Systeme werden hufig, weil sie in einem greren System integriert sind, als
eingebettete Systeme bezeichnet. Man findet sie in vielen Bereichen des Alltags, wie
zum Beispiel in Hausgerten, Uhren, Heizungssteuerungen oder in Fotoapparaten. Auch
in industriellen Anwendungen geht nichts ohne die Digitaltechnik. So wre beispielsweise die Vernetzung industriell genutzter Maschinen, die vierte industrielle Revolution,
ohne entsprechende digitale Komponenten undenkbar.
Was ist Digitaltechnik? Welche Prinzipien liegen ihr zugrunde? Wie werden digitale
Systeme realisiert?Diese und andere Fragen werden in diesem Lehrbuch beantwortet.
Das Buch beschreibt die wichtigen Themenfelder der Digitaltechnik und wendet sich
vorrangig an Studierende der Studiengnge Elektrotechnik, Informatik, Mechatronik
sowie verwandter Studiengnge. Es wird der Bogen von den Grundlagen der Digitaltechnik ber Schaltungsstrukturen und Schaltungstechnik bis hin zu den Komponenten
digitaler Systeme, wie programmierbare Logikbausteine, Speicher, AD/DA-Umsetzer
und Mikrocontroller gespannt. Zahlreiche Beispiele erleichtern das Verstndnis fr den
Aufbau und die Funktion moderner digitaler Systeme.
Mit dieser 7.Auflage und dem auf vier Autoren gewachsenen Team wurde das Lehrbuch grundlegend berarbeitet und modernisiert. Hierbei waren uns die folgenden
Aspekte wichtig:
Ein besonderes Merkmal dieses Lehrbuches ist die Breite der behandelten Themen
von Grundlagen ber Komponenten bis zu digitalen Systemen.
Der Entwurf mit einer Hardwarebeschreibungssprache ist Standard in der Industrie.
Auf die verstndliche, schrittweise Erluterung von VHDL wird daher besonderer
V
VI
Vorwort
Wert gelegt. Nach einer Einfhrung in VHDL wird bei vielen Themen Bezug auf
VHDL-Konstrukte genommen. In einem Vertiefungskapitel werden weiterfhrende
Sprachkonstrukte erlutert.
Ein neues Einleitungskapitel gibt eine bersicht ber die Digitaltechnik, um die Einordnung von Grundlagenwissen zu ermglichen.
Inhalte, die keine Praxisrelevanz mehr haben, wurden weggelassen, zum Beispiel
asynchrone Zhler oder obsolete RAM-Bausteine.
Im Gegenzug werden praxisrelevante Inhalte ausfhrlicher behandelt, darunter:
Zeitverhalten, Pipelining
Schaltungssimulation und -verifikation
Verlustleistung
Moderne Speichertechnologien
Die ersten sechs Kapitel legen die wesentlichen Grundlagen zum Verstndnis digitaler
Komponenten. Kap.1 bietet eine Einfhrung in die Thematik und stellt wichtige Grundprinzipien im berblick dar.
Kap.2 widmet sich der digitalen Darstellung von Informationen, wobei der Schwerpunkt auf der Darstellung von Zahlen liegt. Kap.3 fhrt in die Hardwarebeschreibungssprache VHDL ein, die weltweit fr den Entwurf digitaler Schaltungen verwendet wird.
Digitale Systeme lassen sich als Kombination von kombinatorischen und sequenziellen
Schaltungen auffassen. Beide Konzepte werden in den Kapiteln 4 und 5 vorgestellt, whrend sich Kap.6 den aus diesen Konzepten abgeleiteten Schaltungsstrukturen widmet. In
diesen Kapiteln wird kontinuierlich die Implementierung in der Sprache VHDL thematisiert und vertieft.
In den Kapiteln7 bis 14 werden vertiefende Themen aufgegriffen: Kap.7 stellt unterschiedliche Konzepte zur Realisierung digitaler Systeme im berblick vor. In Kap.8
werden erweiterte Aspekte der Schaltungsbeschreibung in VHDL, wie zum Beispiel
Testbenches fr die Verifikation aufgegriffen. Die praktische Umsetzung von VHDLBeschreibungen erfolgt heute hufig mithilfe von programmierbaren Logikbausteinen
(FPGAs), welche in Kap.9 vertieft vorgestellt werden. Das Verstndnis der technologischen Grundlagen moderner Digitalschaltungen wird durch eine Einfhrung in die
Halbleitertechnologie in Kap.10 ermglicht. Eine zentrale Systemkomponente ist der
Speicher. Dieser kann mithilfe unterschiedlicher Technologien realisiert werden, die in
Kap.11 vorgestellt werden. Fr Ein-/Ausgabe analoger Gren werden Analog-Digitalund Digital-Analog-Umsetzer bentigt, deren Aufbau und Funktionsweise in Kap.12
nher erlutert werden. Kap.13 und 14 widmen sich digitalen Rechnersystemen. In
Kap.13 wird der Aufbau und die Funktionsweise von Rechnern vorgestellt. Kap.14
greift diese Aspekte auf und vertieft sie anhand eines konkreten Beispiels, einem Mikrocontroller der AVR-Familie. In Kap.11 bis 14 werden ebenfalls Bussysteme zur Kommunikation innerhalb eines digitalen Systems vorgestellt.
Vorwort
VII
Am Ende aller Kapitel befinden sich bungsaufgaben, die wichtige Aspekte aufgreifen und zur selbststndigen Lernkontrolle herangezogen werden knnen. Die Lsungen
der Aufgaben sind am Ende des Buches zu finden.
Ergnzendes Material steht im Internet unter www.springer.com/de/
book/9783662497302 oder www.hs-osnabrueck.de/buch-digitaltechnik zur Verfgung.
Fr die Rckmeldungen zu den Lehrinhalten bedanken wir uns bei den Studierenden
der Hochschule Osnabrck und der Hochschule Bonn-Rhein-Sieg. Besonderer Dank
geht an alle Kolleginnen und Kollegen, die uns seit der ersten Auflage durch ihre Hilfe
und Rckmeldungen begleitet haben. In der aktuellen Auflage war dies insbesondere
Dipl.-Ing. Andrea Schwandt. Nicht zuletzt mchten wir uns bei allen an dieser Ausgabe
beteiligten Mitarbeiterinnen und Mitarbeitern des Springer-Verlages bedanken. Ohne
ihre professionelle Arbeit wre das vorliegende Buch nicht realisierbar gewesen.
Das Lehrbuch soll natrlich Leserinnen und Leser gleichermaen ansprechen und wir
haben uns bemht, dass alle Formulierungen auch so verstanden werden.
im Oktober 2016
Winfried Gehrke
Marco Winzker
Klaus Urbanski
Roland Woitowitz
Die Digitaltechnik hat seit der Einfhrung der ersten digitalen integrierten Halbleiterschaltungen im Jahre 1958 einen vehementen Aufschwung genommen. Mageblich
daran beteiligt war der technologische Fortschritt in der Mikroelektronik. Mittlerweile
lassen sich integrierte Schaltungen mit mehr als 100Mio. aktiven Elementen realisieren.
Anfnglich konzentrierte sich diese Technik einerseits auf niedrigintegrierte logische
Grundschaltungen und andererseits auf hochintegrierte kundenspezifische Schaltungen
(Full Custom ICs), aber bereits 1971 kamen die Mikroprozessoren als neuartige programmierbare Universalschaltungen hinzu.
Seit einigen Jahren erweitert sich das Anwendungsspektrum zunehmend in Richtung
der sog. Semi Custom ICs. Hierbei handelt es sich um hochintegrierte Standardschaltungen, bei denen wesentliche Designschritte mittels Computeruntersttzung vom Anwender selbst bernommen werden.
Das Buch widmet sich all diesen Grundlagen der Digitaltechnik unter besonderer
Bercksichtigung der zurzeit gltigen Normen fr Schaltsymbole und Formelzeichen.
Der Darstellung grundlegender Logikbausteine, wie NAND, NOR, Flipflops und Zhler sowie programmierbarer Bausteine, wie PAL, PLA, LCA schliet sich eine Einfhrung in die Mikroprozessor- und Mikrocontroller-Technik an.
Einen besonderen Schwerpunkt bildet der systematische Entwurf von Schaltnetzen und Schaltwerken unter Einsatz programmierbarer Bausteine. Zahlreiche Beispiele
hierzu erleichtern das Verstndnis fr Aufbau und Funktion dieser modernen digitalen
Systeme.
Zu allen Kapiteln werden bungsaufgaben mit ausfhrlichen Musterlsungen angeboten. Daher eignet sich dieses Buch besonders zum Selbststudium. Es wendet sich
damit sowohl an Hochschulstudenten der Elektrotechnik oder Informationstechnik im
Hauptstudium, als auch an den in der Berufspraxis stehenden Ingenieur, der seinen Wissensstand auf diesem Gebiet aktualisieren will.
IX
Besonderer Dank gebhrt Herrn Dr.-Ing. H. Kopp, der dieses Buch durch wertvolle
Anregungen und vielfltige Untersttzung bereichert hat. Auch den Studenten der Fachhochschule Osnabrck gilt unser Dank fr ihre Mitarbeit und mannigfache Hilfestellung.
Bedanken mchten wir uns ebenfalls beim Verlag fr die gute Zusammenarbeit.
Osnabrck, Deutschland, Dezember 1992
Klaus Urbanski
Roland Woitowitz
Inhaltsverzeichnis
1 Einfhrung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 Arbeitsweise digitaler Schaltungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.1 Darstellung von Informationen . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.2 Logik-Pegel und Logik-Zustand . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.3 Verarbeitung von Informationen . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.4 Beispiel: Einfacher Grafikcontroller . . . . . . . . . . . . . . . . . . . . . . 4
1.1.5 Beispiel: Zhler im Grafikcontroller . . . . . . . . . . . . . . . . . . . . . . 6
1.2 Technische Realisierung digitaler Schaltungen. . . . . . . . . . . . . . . . . . . . 7
1.2.1 Logikbausteine. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.2 Kundenspezifische Integrierte Schaltung. . . . . . . . . . . . . . . . . . . 8
1.2.3 Standardbauelemente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.4 Programmierbare Schaltung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2.5 Mikrocontroller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3 Digitale und analoge Informationen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.3.1 Darstellung von Informationen . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.3.2 Vor- und Nachteile der Darstellungen. . . . . . . . . . . . . . . . . . . . . 11
1.3.3 Wert- und zeitdiskret . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.4 bungsaufgaben. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2
XI
XII
Inhaltsverzeichnis
Einfhrung inVHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.1 Designmethodik im berblick. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
3.2 Grundstruktur eines VHDL-Moduls . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
3.2.1 Bibliotheken. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
3.2.2 Entity und Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3.2.3 Bezeichner. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.3 Grundlegende Datentypen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.3.1 Integer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.3.2 Std_logic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.3.3 Std_logic_vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.3.4 Signed und Unsigned. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
3.3.5 Konstanten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
3.3.6 Umwandlung zwischen Datentypen. . . . . . . . . . . . . . . . . . . . . . . 63
3.3.7 Datentyp Bit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
3.4 Operatoren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.5 Signale. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.5.1 Definition und Verwendung von Signalen. . . . . . . . . . . . . . . . . . 67
3.5.2 Signalzuweisungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
3.6 Prozesse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
3.6.1 Syntaktischer Aufbau von Prozessen. . . . . . . . . . . . . . . . . . . . . . 70
3.6.2 Ausfhrung von Prozessen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Inhaltsverzeichnis
XIII
3.6.3 Variablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
3.6.4 Signalzuweisungen inProzessen. . . . . . . . . . . . . . . . . . . . . . . . 73
3.6.5 Wichtige Sprachkonstrukte inVHDL-Prozessen. . . . . . . . . . . . 75
3.7 Hierarchie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
3.8 bungsaufgaben. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
4
Kombinatorische Schaltungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
4.1 Schaltalgebra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
4.1.1 Schaltfunktion und Schaltzeichen . . . . . . . . . . . . . . . . . . . . . . . 86
4.1.2 Funktionstabelle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
4.1.3 Funktionstabelle mit Dont-Care. . . . . . . . . . . . . . . . . . . . . . . . 87
4.2 Funktionen der Schaltalgebra. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
4.2.1 UND-Verknpfung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
4.2.2 ODER-Verknpfung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
4.2.3 Negation, Inverter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
4.2.4 NAND-Verknpfung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
4.2.5 NOR-Verknpfung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
4.2.6 XOR-Verknpfung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
4.2.7 XNOR-Verknpfung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
4.2.8 Weitere Verknpfungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
4.2.9 Logikstufen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
4.2.10 US-amerikanische Logiksymbole . . . . . . . . . . . . . . . . . . . . . . . 94
4.3 Rechenregeln der Schaltalgebra. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
4.3.1 Vorrangregeln. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
4.3.2 Rechenregeln. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
4.4 Schaltungsentwurf durch Minimieren. . . . . . . . . . . . . . . . . . . . . . . . . . . 98
4.4.1 Minterme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
4.4.2 Schaltungsentwurf mit Mintermen. . . . . . . . . . . . . . . . . . . . . . . 98
4.4.3 Minimierung von Mintermen. . . . . . . . . . . . . . . . . . . . . . . . . . . 99
4.4.4 Maxterme. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
4.4.5 Schaltungsentwurf mit Maxtermen . . . . . . . . . . . . . . . . . . . . . . 100
4.4.6 Minimierung von Maxtermen . . . . . . . . . . . . . . . . . . . . . . . . . . 100
4.5 Schaltungsminimierung mit Karnaugh-Diagramm . . . . . . . . . . . . . . . . . 101
4.5.1 Grundstzliche Vorgehensweise. . . . . . . . . . . . . . . . . . . . . . . . . 101
4.5.2 Karnaugh-Diagramm fr zwei Variablen. . . . . . . . . . . . . . . . . . 102
4.5.3 Karnaugh-Diagramm fr drei Variablen. . . . . . . . . . . . . . . . . . . 103
4.5.4 Karnaugh-Diagramm fr vier Variablen. . . . . . . . . . . . . . . . . . . 104
4.5.5 Auswahl der erforderlichen Terme. . . . . . . . . . . . . . . . . . . . . . . 106
4.5.6 Ermittlung der minimierten Funktion . . . . . . . . . . . . . . . . . . . . 106
4.5.7 Karnaugh-Diagramm mit Dont-Care . . . . . . . . . . . . . . . . . . . . 107
4.5.8 Karnaugh-Diagramm fr mehr als vier Variablen. . . . . . . . . . . 109
4.5.9 Karnaugh-Diagramm der konjunktiven Normalform. . . . . . . . . 109
XIV
Inhaltsverzeichnis
4.6
6 Schaltungsstrukturen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
6.1 Grundstrukturen digitaler Schaltungen . . . . . . . . . . . . . . . . . . . . . . . . . . 173
6.1.1 Top-down Entwurf. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
6.1.2 Darstellung von Schaltungsstrukturen. . . . . . . . . . . . . . . . . . . . . 174
6.2 Kombinatorische Grundstrukturen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
6.2.1 Multiplexer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
6.2.2 Demultiplexer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
6.2.3 Addierer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
6.3 Sequenzielle Grundstrukturen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
6.3.1 Zhler. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
6.3.2 Schieberegister. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
6.3.3 Rckgekoppeltes Schieberegister. . . . . . . . . . . . . . . . . . . . . . . . . 183
6.4 Zeitverhalten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
Inhaltsverzeichnis
XV
XVI
Inhaltsverzeichnis
8 VHDL-Vertiefung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
8.1 Weitere Datentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
8.1.1 Natural und Real . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
8.1.2 Boolean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
8.1.3 Time. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
8.1.4 Std_ulogic, Std_ulogic_vector. . . . . . . . . . . . . . . . . . . . . . . . . . . 227
8.1.5 Benutzerdefinierte Datentypen. . . . . . . . . . . . . . . . . . . . . . . . . . . 227
8.1.6 Zeichen und Zeichenketten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
8.1.7 Subtypes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
8.1.8 Arrays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
8.1.9 Records. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
8.2 Sprachelemente zur Code-Strukturierung . . . . . . . . . . . . . . . . . . . . . . . . 231
8.2.1 Function. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
8.2.2 Procedure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
8.2.3 Entity-Deklaration mit Generics . . . . . . . . . . . . . . . . . . . . . . . . . 234
8.2.4 Generate-Anweisung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
8.2.5 Attribute. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
8.2.6 Instanziierung mit der Component-Anweisung. . . . . . . . . . . . . . 240
8.2.7 Pakete. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
8.2.8 Einbindung von Spezialkomponenten. . . . . . . . . . . . . . . . . . . . . 243
8.3 Sprachelemente zur Verifikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
8.3.1 Binre Ein-/Ausgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
8.3.2 Ein-/Ausgabe mit Textdateien . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
8.3.3 Wait-Anweisungen inTestbenches . . . . . . . . . . . . . . . . . . . . . . . 253
8.3.4 Testbench mit interaktiver berprfung . . . . . . . . . . . . . . . . . . . 254
8.3.5 Testbench mit Assert-Anweisungen. . . . . . . . . . . . . . . . . . . . . . . 255
8.3.6 Testbench mit Dateiein-/-ausgabe . . . . . . . . . . . . . . . . . . . . . . . . 256
8.4 bungsaufgaben. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
9
Inhaltsverzeichnis
XVII
10 Halbleitertechnik. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
10.1 CMOS-Technologie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
10.1.1 Prinzipieller Aufbau. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
10.1.2 Feldeffekttransistoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
10.1.3 Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
10.2 Grundschaltungen inCMOS-Technik. . . . . . . . . . . . . . . . . . . . . . . . . . . 296
10.2.1 Inverter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
10.2.2 Logikgatter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
10.2.3 Transmission-Gate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
10.2.4 Flip-Flop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
10.3 Verlustleistung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
10.3.1 Statische Verlustleistung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
10.3.2 Dynamische Verlustleistung. . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
10.3.3 Entwurf energieeffizienter Schaltungen. . . . . . . . . . . . . . . . . . . 303
10.4 Integrierte Schaltungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
10.4.1 Logiksynthese und Layout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
10.4.2 Herstellung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
10.4.3 Packaging. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
10.4.4 Gehuse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
10.5 Miniaturisierung der Halbleitertechnik . . . . . . . . . . . . . . . . . . . . . . . . . . 310
10.5.1 Mooresches Gesetz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
10.5.2 FinFET-Transistoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
10.5.3 Weitere Technologieentwicklung. . . . . . . . . . . . . . . . . . . . . . . . 312
10.6 bungsaufgaben. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
11 Speicher. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
11.1 bersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
11.1.1 Begriffe und Abkrzungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
11.1.2 Grundstruktur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
11.1.3 Physikalisches Interface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
11.2 Speichertechnologien. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
11.2.1 SRAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
11.2.2 DRAM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
11.2.3 ROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
11.2.4 OTP-Speicher. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
11.2.5 EEPROM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
11.2.6 Innovative Speichertechniken . . . . . . . . . . . . . . . . . . . . . . . . . . 326
11.3 Eingebetteter Speicher. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
11.3.1 SRAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
11.3.2 DRAM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
11.3.3 ROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
11.3.4 NVRAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
XVIII
Inhaltsverzeichnis
Inhaltsverzeichnis
XIX
XX
Inhaltsverzeichnis
Abkrzungsverzeichnis
ADC
Analog Digital Converter
ADU Analog-Digital-Umsetzer
AHG Abtast-Halte-Glied
ALM
Adaptive Logic Module
ALU
Arithmetic Logical Unit
ASCII
American Standard Code for Information Interchange
ASIC
Application Specific Integrated Circuit
ASSP
Application Specific Standard Product
BCD
Binary Coded Decimal
BGA
Ball Grid Array
CISC
Complex Instruction Set Computer
CLB
Complex Logic Block
CMOS
Complementary Metal Oxide Semiconductor
CNT
Carbon Nano Tube
COB
Capacitor over Bitline
CPLD
Complex Programmable Logic Device
CPU
Central Processing Unit
DAC
Digital Analog Converter
DAU Digital-Analog-Umsetzer
DCE
Data Communication Equipment
DDR
Double Data Rate
DIL
Dual In-Line Package
DNF
Disjunktive Normalform
DRAM
Dynamic Random Access Memory
DSP
Digital Signal Processing, Digital Signal Processor
DTE
Data Terminal Equipment
ECC
Error Correcting Code
EDA
Electronic Design Automation
EEPROM Electrically Erasable Programmable Read Only Memory
FET
Field Effect Transistor
FFT
Fast Fourier Transform
FIFO
First In First Out
XXI
XXII
FPGA
FRAM
GPU
I2C
IC
IEC
IEEE
INL
IOB
ISP
ISR
JTAG
KNF
LE
LSB
LUT
LVDS
LVTTL
MLC
MOS
MRAM
MSB
NVRAM
OSR
OTP
PC
PCRAM
PLA
PLCC
PLD
PLL
PWM
QDR
QFP
QLC
RAM
RISC
ROM
RRAM
RTL
SAR
SDRAM
SINAD
SNR
SPI
Abkrzungsverzeichnis
Abkrzungsverzeichnis
SPLD
Simple Programmable Logic Device
SRAM
Static Random Access Memory
THD
Total Harmonic Distortion
THS
Total Hold Slack
TLC
Triple Level Cell
TNS
Total Negative Slack
TTL Transistor-Transistor-Logik
TWI
Two Wire Interface
UART
Universal Asynchronous Receiver Transmitter
USART
Universal Synchronous Asynchronous Receiver Transmitter
VCO
Voltage Controlled Oscillator
VHDL
Very High Speed Integrated Circuit Hardware Description Language
VLIW
Very Long Instruction Word
WHS
Worst Hold Slack
WNS
Worst Negative Slack
XXIII
Einfhrung
Digitaltechnik steckt heutzutage in vielen technischen Gerten. Wenn Sie dieses Buch
lesen, haben Sie vermutlich den Tag ber schon etliche digitale Schaltungen benutzt. Der
Rauchmelder im Schlafzimmer, der nachts auf Sie aufpasst, hat einen kleinen digitalen
Mikrocontroller, genau wie der Radiowecker, der Sie geweckt hat. Mit dem Smartphone
voller Digitaltechnik haben Sie vermutlich Ihre Emails und sozialen Netzwerke nach
Neuigkeiten abgefragt. Und egal ob Sie mit dem Auto oder der Straenbahn in die Hochschule gefahren sind, wieder waren digitale Schaltungen fr Sie ttig. Nur falls Sie mit
dem Fahrrad unterwegs waren, verlief dieser Teil des Tages ohne Digitaltechnik es sei
denn, Sie haben einen Fahrradtacho.
Digitale Schaltungen bernehmen in vielen technischen Gerten Aufgaben zur Steuerung und Regelung. Das heit, sie fragen Informationen ab und treffen anhand von
Regeln Entscheidungen. Dieses Grundprinzip wird beispielsweise beim Antiblockiersystem (ABS) im Auto deutlich. Die Digitalschaltung bekommt die Informationen, ob die
Bremse bettigt ist und die Rder blockieren. Wenn dies der Fall ist, wird die Bremskraft
leicht reduziert, damit die Rder wieder Haftung zur Strae bekommen und man bessere
Bremswirkung sowie Manvrierbarkeit erhlt.
Der besondere Vorteil von digitalen Schaltungen liegt darin, dass Berechnungen und
Entscheidungen sowie das Speichern und bertragen von Informationen sehr einfach
mglich sind. Prinzipiell knnte ein Antiblockiersystem auch mit einer Analogschaltung
und eventuell sogar mechanisch oder hydraulisch aufgebaut werden. Aber ein digitales
System kann die Informationen wesentlich prziser verarbeiten, also beispielsweise die
Geschwindigkeit vor dem Bremsen, die Stellung des Lenkrads und die Drehgeschwindigkeit aller Rder auswerten und alle Bremsen individuell ansteuern.
1Einfhrung
Prinzipiell ist auch eine umgekehrte Zuordnung mglich, die als negative Logik bezeichnet wird. Diese Zuordnung wird in der Praxis jedoch kaum verwendet.
Abb.1.1 Symbole fr
Logikgatter
Inverter
UND-Gatter
&
ODER-Gatter
XOR-Gatter
=1
1Einfhrung
die Bezeichnung 1, dass mindestens eine 1 am Eingang anliegen muss, damit der
Ausgang 1 wird. Entsprechend bedeutet =1 bei XOR, dass von zwei Eingngen exakt
eine 1 vorhanden sein muss.
Mit diesen Grundelementen knnen Informationen miteinander verknpft werden.
Auerdem mssen in einer Digitalschaltung auch Informationen gespeichert werden und
das Grundelement hierfr ist das D-Flip-Flop (D-FF). Dabei steht D fr Daten und FlipFlop symbolisiert das Hin- und Herschalten zwischen 0 und 1.
Das D-Flip-Flop arbeitet mit einem Takt, (engl. Clock), also einem periodischen Signal, welches die Arbeitsgeschwindigkeit einer Digitalschaltung vorgibt. Der Takt ist
Ihnen mglicherweise von Ihrem PC bekannt. Eine moderne CPU arbeitet mit einem
Takt von 2 bis 3 GHz, das heit 2 bis 3Milliarden mal pro Sekunde wechselt das Taktsignal von 0 auf 1. Schaltungen, die eine nicht ganz so hohe Rechengeschwindigkeit
wie eine CPU haben, verwenden einen Takt mit geringerer Frequenz, beispielsweise
100MHz.
Das Schaltsymbol des D-Flip-Flop (D-FF) ist in Abb. 1.2 dargestellt. Das Taktsignal
ist am Eingang C1 (wie Clock) angeschlossen. Bei jeder Taktflanke, also einem Wechsel
des Takts von 0 auf 1 wird der Wert am Dateneingang 1D gespeichert und unmittelbar
darauf am Datenausgang ausgegeben. Diese Information wird fr den Rest der Taktperiode gespeichert.
Logikgatter und D-FF werden aus Transistoren aufgebaut. Fr ein Logikgatter sind
rund 10, fr ein D-FF rund 20 Transistoren erforderlich. In einer Digitalschaltung finden
sich natrlich viele dieser Grundelemente.
Dateneingang
Takt
1D
C1
Datenausgang
Damit passen 40 Zeilen mit je 80 Zeichen auf den Bildschirm. Ein Bild wird 60-mal je
Sekunde also mit einer Frequenz von 60 Hz dargestellt.
Fr die Zeichen gibt es einen festen Zeichensatz mit 128 Zeichen, darunter Buchstaben in Klein- und Groschreibung, Ziffern, Sonderzeichen und Symbole. Abb.1.3 zeigt
beispielhaft den Buchstaben A und die Ziffer 1 als 10 mal 15 Grafik.
Ein Prozessor teilt dem Grafikcontroller fr jede Position mit, welches Zeichen dargestellt werden soll. Auerdem kann das Zeichen normal und invers dargestellt werden, das
heit bei invers ist der Hintergrund schwarz und das Zeichen wei. Mit sieben Stellen
wird eines der 128 Zeichen ausgewhlt. Die achte Stelle gibt normale oder inverse Darstellung an. Damit ist fr jedes Zeichen auf dem Bildschirm ein Byte, also ein Datenwort
mit acht Stellen erforderlich.
Die Digitalschaltung des Grafikcontrollers bentigt einen Speicher fr den aktuellen
Bildschirminhalt, einen Speicher fr die Grafiken der 128 Zeichen sowie zwei Zhler
fr die Zeile und Spalte, welche gerade dargestellt wird. Diese Schaltungsstruktur zeigt
Abb.1.4.
Der aktuelle Bildschirminhalt wird in einem Speicher abgelegt. Eine CPU schreibt fr
jede der 40 mal 80 Positionen ein Byte und bestimmt damit das darzustellende Zeichen.
von Prozessor
Daten
Addr.
RAM
40x80 Byte
Takt
an Display
Daten
Addr.
ROM
128 Zeichen,
10x15 Pixel
Zhler
Spalte
Zhler
Zeile
=1
1Einfhrung
Dieser Speicher mit der Kurzbezeichnung RAM (Random Access Memory) braucht also
3200 Speicherstellen zu jeweils einem Byte. Ein Festwertspeicher, Kurzbezeichnung
ROM (Read-Only-Memory), enthlt die 128 Zeichen zu je 10 mal 15 Bildpunkten, also
19.200 Speicherstellen zu jeweils einem Bit.
Der Grafikcontroller gibt das Bild zeilenweise aus. Die aktuell dargestellte Position
wird durch zwei Zhler bestimmt, wobei ein erster Zhler die Spalte zhlt. Wenn der
Zhler an der letzten Spalte angekommen ist, wird der zweite Zhler aktiviert und so
die nchste Zeile aufgerufen. Aus den Zhlerwerten von Spalte und Zeile wird bestimmt,
welches Zeichen gerade dargestellt wird.
Die Zhlerwerte rufen zunchst das aktuelle Zeichen aus dem RAM auf. Dort steht
zum Beispiel, dass der Buchstabe A angezeigt werden soll. Jetzt muss noch beachtet
werden, welcher Bildpunkt des aktuellen Zeichens angezeigt wird, denn jedes Zeichen
besteht ja aus 10 mal 15 Bildpunkten. Diese Information wird im ROM verarbeitet. Das
ROM bekommt vom RAM das aktuelle Zeichen und von den Zhlern die Information
ber die Position innerhalb des Zeichens. Fr die linke obere Ecke des Buchstabens A
wird dann zum Beispiel die Information weier Bildpunkt ausgegeben (siehe Abb.1.3).
Fr die Auswahl des Zeichens sind sieben Stellen eines Byte vorgesehen. Die achte
Stelle kann durch ein XOR-Gatter den Helligkeitswert umdrehen, sodass eine inverse
Darstellung entsteht.
Die Geschwindigkeit des Takts muss zu der Anzahl der Bildpunkte und der Bilder pro
Sekunde passen. Aus 800 mal 600 Bildpunkten und 60 Bilder pro Sekunde berechnet
sich theoretisch eine Frequenz von 28,8MHz. In der Realitt sind allerdings in horizontaler und vertikaler Richtung noch Abstnde zwischen den aktiven Bildbereichen erforderlich, sogenannte Austastlcken. Daher wird bei der genannten Auflsung ein Takt von
40MHz verwendet.
Abb.1.5 Zhler im
Grafikcontroller
1D
z (0 )
C1
=1
&
1D
z (1 )
z (3 :0 )
C1
=1
&
&
1D
C1
&
1D
C1
z (2 )
z (3 )
Takt
bei Aktivierung bernehmen die vier Flip-Flops den neuen Zhlerstand und schalten so
eine Zahl weiter.
Die Flip-Flops dienen also zur Speicherung von Informationen, hier dem aktuellen
Zhlerstand. Die Gatter fhren Rechnungen durch, ermitteln hier also den nchsten Wert
des Zhlers. Wie eine solche Schaltung entworfen wird, erfahren Sie in den folgenden
Kapiteln.
1.2.1 Logikbausteine
Logikgatter und Flip-Flops sind als einzelne Bauelemente verfgbar. Eine Digitalschaltung kann aus diesen einzelnen Logikbausteinen aufgebaut werden. Es wird eine Vielzahl
1Einfhrung
1.2.3 Standardbauelemente
Fr viele Aufgabenstellungen existieren fertige Digitalschaltungen, welche direkt eingesetzt werden knnen. Diese ICs werden als ASSP bezeichnet (Application Specific
1A
14
VDD
1B
13
4B
1Y
12
4A
2A
11
4Y
2B
10
3B
2Y
3A
GND
3Y
7408
1A
1B
&
1Y
2A
2B
&
2Y
3A
3B
&
3Y
4A
4B
&
4Y
Abb.1.7Minicomputer Raspberry Pi
10
1Einfhrung
Ein-/
Ausgnge
Logik
A
B
C
D
Verbindungsnetzwerk
&
1D
C1
Takt
1.2.5 Mikrocontroller
Zur Implementierung einer Digitalschaltung kann auch ein Mikrocontroller eingesetzt
werden. Dabei handelt es sich um einen kleinen Computer, der komplett auf einem einzigen IC aufgebaut ist. Platzbedarf und Kosten sind viel geringer als bei einem PC; dafr
ist allerdings auch die Rechenleistung beschrnkt.
11
Ein Mikrocontroller kann genau wie ein FPGA fr eine Anwendung programmiert
werden. Anders als bei einem FPGA werden durch die Programmierung aber keine
Logikgatter und Flip-Flops verschaltet. Die Funktion wird beim Mikrocontroller schrittweise als Computerprogramm ausgefhrt. Leistungsfhigkeit und Flexibilitt sind
dadurch geringer als beim FPGA, aber fr viele Anwendungen ausreichend.
12
1Einfhrung
Abnutzung allerdings in der Realitt eher schlechter als bei der CD sein. Natrlich drfen Fans der Schallplatte trotzdem ihrem Medium treu bleiben.
Die Verarbeitung analoger Signale war in der Vergangenheit oft einfacher als bei digitalen Schaltungen. Durch die Leistungsfhigkeit moderner Digitalschaltungen haben sich
die Verhltnisse umgedreht. Heutzutage ist die Verarbeitung digitaler Signale fast immer
einfacher. Hinzu kommt die problemlose Speicherung und bertragung digitaler Informationen, die Vorteile gegenber der analogen Darstellung bietet.
Als Beispiel nehmen wir an, dass ein aktuelles Bild von einer Sportveranstaltung fr
einen Zeitungsartikel bentigt wird. Ein analoges Foto auf Filmmaterial wurde frher
zunchst chemisch entwickelt, das passende Bild wurde ausgewhlt und persnlich oder
per Kurier in die Redaktion gebracht. Heute kann auf einer Digitalkamera sofort das passende Bild ausgewhlt und per Mobiltelefon als Email in die Redaktion geschickt werden. Innerhalb von Minuten ist eine Verffentlichung auf der Homepage mglich.
Digitale Systeme haben in vielen Anwendungen die analogen Techniken abgelst:
Audiosignale werden nicht mehr analog auf Schallplatte und Musikkassette, sondern
digital auf CD und als MP3 gespeichert.
Videosignale werden nicht mehr analog auf VHS-Band, sondern digital als MPEG auf
Festplatten, DVD und Blu-Ray gespeichert.
Das analoge Telefon wurde zunchst durch digitales ISDN und mittlerweile durch
Voice-over-IP ersetzt.
Fotos werden kaum noch auf chemischem Filmmaterial, sondern meist als digitale
JPEG-Datei gemacht.
Allerdings sind noch nicht alle Anwendungen digital. Fr Radio gibt es zwar digitale
bertragung, das analoge UKW-Radio wird aber weiter verwendet. Grnde fr die Beibehaltung von UKW-Radio sind die ausreichende Qualitt, der einfache Aufbau analoger
Radios sowie die Vielzahl von vorhandenen Gerten.
1.4bungsaufgaben
Abb.1.9 Verlauf eines
analogen und digitalen Signals
13
f(t)
f(t)
analog
digital
1.4 bungsaufgaben
Haben Sie den Inhalt des Kapitels verstanden? Prfen Sie sich mit den Fragen am Kapitelende. Die Antworten finden Sie am Ende des Buches.
Bei allen Auswahlfragen ist immer genau eine Antwort korrekt.
Aufgabe 1.1
Was gilt IMMER fr Binrdaten?
14
1Einfhrung
1.4bungsaufgaben
Aufgabe 1.7
Was gilt fr ein ODER-Gatter?
a) Wenn mindestens ein Eingang 0 ist, ist der Ausgang 0
b) Nur wenn alle Eingnge 0 sind, ist der Ausgang 0
c) Nur wenn genau ein Eingang 0 ist, ist der Ausgang 0
Aufgabe 1.8
Was gilt fr ein XOR-Gatter (mit zwei Eingngen)?
a) Wenn mindestens ein Eingang 0 ist, ist der Ausgang immer 1
b) Nur wenn alle Eingnge 0 sind, ist der Ausgang 1
c) Nur wenn genau ein Eingang 0 ist, ist der Ausgang 1
Aufgabe 1.9
Was gilt fr ein D-Flip-Flop (D-FF)?
a) Wenn Daten und Takt den gleichen Wert haben, wechselt der Ausgang
b) Wenn Daten und Takt einen ungleichen Wert haben, wechselt der Ausgang
c) Daten werden bei einer Taktflanke gespeichert
d) Daten werden bei Takt gleich 1 gespeichert
e) Daten werden bei Takt gleich 0 gespeichert
Aufgabe 1.10
Welche Eigenschaften hat ein digitales Signal?
a) wertdiskret und zeitkontinuierlich
b) wertdiskret und zeitdiskret
c) wertkontinuierlich und zeitkontinuierlich
d) zeitdiskret und wertkontinuierlich
15
Genau wie wir Menschen verarbeiten auch digitale Systeme Informationen, die sie aus
ihrer Umgebung erhalten.
Lesen Sie zum Beispiel den Wetterbericht in der Tageszeitung und erhalten die Information, dass mit Regen zu rechnen ist, nehmen Sie einen Schirm mit, wenn Sie das Haus
verlassen. Wird dagegen wolkenloses Sommerwetter angekndigt, ist die Mitnahme
einer Sonnenbrille vermutlich die bessere Entscheidung.
Um als Mensch eine Information aufnehmen und verarbeiten zu knnen, muss sie in
einer fr uns zugnglichen Form vorliegen. Der Wetterbericht in der Zeitung besteht aus
einzelnen Zeichen, die wir zu Wrtern und Stzen zusammenfgen. Die in den Stzen
enthaltene, man kann auch sagen codierte, Information extrahieren wir und reagieren
entsprechend. Allerdings htten wir groe Schwierigkeiten den Wetterbericht zu verstehen, wenn er in einer uns unbekannten Sprache verfasst wre. Da wir die Regeln nicht
kennen, die beschreiben wie die Information durch die Aneinanderreihung der Buchstaben codiert ist, knnten wir mit dem scheinbaren Buchstabensalat nichts anfangen.
Wie lassen sich diese berlegungen auf ein digitales System bertragen? Zunchst
ist es selbstverstndlich wichtig, dass die zu verarbeitenden Informationen in digitaler
Form, also als Bits, vorliegen. Darber hinaus mssen aber auch Regeln vereinbart sein,
die die Bedeutung der Bits beschreiben. Andernfalls kann ein digitales System die in
den Bits enthaltene Information nicht extrahieren es kann mit dem Bitsalat nichts
anfangen.
In diesem Kapitel werden einige Regeln zur digitalen Codierung von Informationen
vorgestellt, die die Grundlage fr die Realisierung vieler digitaler Schaltungen darstellen. Da in vielen praktischen Anwendungsfllen Zahlenwerte verarbeitet werden, liegt
der Schwerpunkt dieses Kapitels auf der binren Codierung von Zahlen. In diesem Kapitel werden darber hinaus einige gebruchliche Codes vorgestellt, die sich zur Codierung
sowohl numerischer als auch nicht-numerischer Informationen eignen.
Springer-Verlag GmbH Deutschland 2016
W. Gehrke et al., Digitaltechnik, Springer-Lehrbuch,
DOI10.1007/978-3-662-49731-9_2
17
18
2.1 Grundlagen
Fr die binre Codierung einer Information werden Codewrter definiert, die aus Bits
zusammengesetzt sind. Je mehr Bits zur Anwendung kommen, desto mehr Codewrter knnen definiert werden: Wird ein Bit verwendet, ergeben sich die zwei mglichen
Codierungen 0 und 1. Mit 2 Bits ergeben sich bereits 4 Mglichkeiten, 00, 01,
10 und 11. Allgemein gilt, dass die maximale Anzahl der Codewrter eine Zweierpotenz ist. Mit n Bits lassen sich 2n unterschiedliche binre Codierungen darstellen. Ausgewhlte Zweierpotenzen sind in Tab.2.1 dargestellt.
Fr Zehnerpotenzen sind Vorstze klar definiert. Zum Beispiel steht k (Kilo) fr 103, M
(Mega) fr 106 oder G (Giga) fr 109. Als die Vorstze fr Zweierpotenzen eingefhrt wurden, orientierte man sich an den bekannten Vorstzen fr Zehnerpotenzen. Da 210103
ist, setzte man den Zehnerpotenzvorsatz Kilo auch fr die Zweierpotenz ein. Zur Unterscheidung wurde teilweise der Zweierpotenzvorsatz K anstelle von k verwendet. Weiterhin
sind dann die Abkrzungen M fr 220106, G fr 230109 und T fr 2401012 eingefhrt worden. Hier war jedoch eine Unterscheidung mittels Gro- und Kleinschreibung
nicht mehr mglich und es gibt das Problem einer mglichen Zweideutigkeit. Gibt zum
Beispiel ein Hersteller die Kapazitt einer Festplatte mit 5,0 TByte an, so meint er in der
Regel 51012 Byte und nicht 5240 Byte. Die Differenz betrgt immerhin fast 10%.
Weitere Probleme entstehen bei der Kennzeichnung von bertragungsgeschwindigkeiten. In Datenbertragungsnetzen sind die Bezeichnungen kbit/s, Mbit/s und Gbit/s
blich. Hier sind die blichen Abkrzungen fr Zehnerpotenzen gemeint. Um die Zweideutigkeit der Vorstze zu vermeiden hat das internationale Normierungsgremium IEC
Tab.2.1Ausgewhlte Zweierpotenzen
n
16
20
30
2n
16
32
64
128
256
512
65.536
1.048.576
1.073.741.824
210
Ki (Kibi)
Kilobinr
Kibit
KiB (=8Kibit)
220
Mi (Mebi)
Megabinr
Mibit
MiB (=8Mibit)
230
Gi (Gibi)
Gigabinr
Gibit
GiB (=8Gibit)
240
Ti (Tebi)
Terabinr
Tibit
TiB (=8Tibit)
250
Pi (Pebi)
Petabinr
Pibit
PiB (=8Pibit)
260
Ei (Exbi)
Exabinr
Eibit
EiB (=8Eibit)
270
Zi (Zebi)
Zettabinr
Zibit
ZiB (=8Zibit)
280
Yi (Yobi)
Yottabinr
Yibit
YiB (=8Yibit)
19
2.2.1 Stellenwertsysteme
Wenn Sie die Ziffernfolge 123 sehen, werden Sie diese vermutlich sofort mit dem Zahlenwert Einhundertdreiundzwanzig verbinden. Wir haben in unseren ersten Schuljahren gelernt, dass Zahlen durch einzelne Zeichen dargestellt werden, die hintereinander
geschrieben einen Zahlenwert reprsentieren. Die am weitesten rechts stehende Ziffer
ist die Einerstelle. Diese wird gefolgt von der Zehnerstelle und der Hunderterstelle. Sollen grere Zahlenwerte dargestellt werden, werden einfach weitere Stellen hinzugefgt. Diese Vereinbarung legen wir im Alltag bei der Decodierung einer Ziffernfolge
zugrunde.
Man kann die im Alltag verwendete Vereinbarung auch mathematisch als Formel darstellen. Der Zahlenwert Z10 einer Folge von N Ziffern, die aus den Ziffern zN1 bis z0
besteht, ergibt sich aus der Formel:
Z10 =
N1
zi 10i
i=0
Als Ziffernzeichen werden die zehn Symbole 0,1, 8,9 verwendet, denen jeweils ein
Zahlenwert im Bereich von Null bis Neun zugeordnet ist.
Diese Form der Zahlendarstellung nennt man Stellenwertsystem. Jeder Stelle einer
Ziffernfolge ist ein Stellengewicht zugeordnet. Im Dezimalsystem ist dies eine Zehnerpotenz. Die Summe der einzelnen Produkte aus Stellenwert und Stellengewicht ergibt den
dargestellten Zahlenwert.
Dass wir im Alltag zehn unterschiedliche Symbole zur Darstellung der Ziffern verwenden, ist eine willkrliche Festlegung. Man kann zum Beispiel auch die Vereinbarung
treffen, ein Siebener-System zu verwenden. Dann wrden die Symbole 7, 8 und 9 nicht
bentigt und es glte die Rechenregel:
20
Z7 =
N1
zi 7i
i=0
ZB =
N1
zi Bi
i=0
Der Wert B wird als Basis des jeweiligen Zahlensystems bezeichnet und man spricht von
einer Zahlendarstellung zur Basis B oder von einem B-adischen Zahlensystem. Um
die verwendete Basis explizit deutlich zu machen, kann sie als Index an die Ziffernfolge
angefgt werden. Zum Beispiel gilt:
Z2 =
N1
zi 2i
i=0
Selbst bei relativ kleinen Zahlen ergibt sich hierbei schnell eine groe Stellenzahl. So
kann der dezimale Wert 9810 im Dezimalsystem mit zwei Ziffern dargestellt werden. Im
Dualsystem werden dagegen mindestens 7 Stellen bentigt: 9810=11000102.
21
Tab.2.3Darstellung
der Zahlen 0 bis 18 im
Dezimal-, Dual-, Oktal- und
Hexadezimalsystem
Dezimal
B =10
0
Dual
B =2
Oktal
B =8
0
Hexadezimal
B =16
0
10
11
100
101
110
111
1000
10
1001
11
10
1010
12
11
1011
13
12
1100
14
13
1101
15
14
1110
16
15
1111
17
16
10000
20
10
17
10001
21
11
18
10010
22
12
22
Z=
N1
zi B1i
i=0
Hierbei muss die Berechnung zur Basis B2 erfolgen. Das Rechnen in einem anderem als
dem dezimalen Zahlensystem ist jedoch gewhnungsbedrftig, sodass es sich empfiehlt
zunchst eine Umwandlung der Zahl in das Dezimalsystem vorzunehmen. In einem
zweiten Schritt erfolgt dann die Umwandlung des Dezimalwertes in das gewnschte
Zahlensystem zur Basis B2.
Die Umrechnung aus dem Dezimalsystem in ein anderes Zahlensystem kann mithilfe
der Divisionsmethode erfolgen, die im Folgenden vorgestellt wird.
Die Divisionsmethode basiert auf einem iterativen Vorgehen, bei dem zunchst die
Ausgangszahl ganzzahlig durch die Basis B2 des Zielsystems dividiert wird. Der Rest der
Division ergibt eine Stelle der zu berechnenden Zahl. Anschlieend wird der Quotient
der Division wiederum durch B2 dividiert. Dieses Vorgehen wird so lange wiederholt,
bis der berechnete Quotient Null ist. Die gesuchte Zahlendarstellung ergibt sich aus den
berechneten Resten, wobei der zuerst berechnete Rest die Einerstelle reprsentiert.
Die Umwandlung einer Zahl zur Basis B1 in eine Zahl zur Basis B2 kann wie folgt als
iteratives Vorgehen formuliert werden:
1. Umwandlung der Ausgangzahl in das Dezimalsystem (Summenformel anwenden).
2. Ganzzahl-Division durch B2.
3. Rest der Division ergibt eine Stelle der gesuchten Zahl.
4. Falls Quotient ungleich Null: Zurck zu Schritt 2. Der Dividend der erneuten Division
ist der zuvor berechnete Quotient.
Z=
N1
zi 2i = 1 21 + 1 24 + 1 25 = 2 + 16 + 32 = 50
i=0
23
Beispiel 2
Die Zahl 8910 soll in eine binre Zahl umgewandelt werden. Mit der Divisionsmethode
ergibt sich die in Tab.2.4 dargestellte Rechnung und damit die gesuchte binre Reprsentation 10110012.
Beispiel 3
Die Zahl 83ED16 soll in eine Dualzahl berfhrt werden. Die Umrechnung zwischen
dem Dualzahlensystem und dem Hexadezimalsystem kann sehr einfach erfolgen, da
4Bit einer Dualzahl exakt einer Stelle der Hexadezimalzahl entsprechen. Man bentigt
lediglich die Zuordnung einer hexadezimalen Ziffer zu ihrem dualen quivalent (vgl.
Tab.2.3) und kann die Umwandlung direkt durch Ablesen aus der Tabelle durchfhren.
Die einzelnen Hexadezimalstellen werden sukzessive durch ihre binren Entsprechungen
ersetzt und es ergibt sich:
145056 = 234510
Anschlieend erfolgt die Umwandlung in das Zielsystem mithilfe der Divisionsmethode
(vgl. Tab.2.5) Die gesuchte Oktalzahl lautet 44518.
Tab.2.4Umwandlung
der Dezimalzahl 89 in eine
Dualzahl
Iteration
Dividend
Divisor
Quotient
Rest
89
44
44
22
22
11
11
24
Tab.2.5Umwandlung der
Dezimalzahl 2345 in eine
Oktalzahl
Dividend
Divisor
Quotient
Rest
2345
293
293
36
36
25
26
Abb.2.1 Zahlenkreis fr
positive Zahlen mit einer
Wortbreite von 4bit
6XEWUDNWLRQV
ULFKWXQJ
$GGLWLRQV
ULFKWXQJ
27
Eingabewerte
Ausgabewerte
1. Summand 2. Summand bertragsbit Summenbit bertragsbit
0
+
bertrag:
0011
1001
0011
1100
28
Tab.2.7bersicht ber die
einstellige binre Subtraktion
bertrag
Ausgabewerte
Differenz
bertrag
bertrag:
1100
0111
0111
0101
Wie bei der Addition kann im Anschluss an die Berechnung berprft werden, ob das
ausgegebene Ergebnis korrekt ist. Bei der Subtraktion vorzeichenloser Zahlen entsteht
ein Unterlauf, wenn der Minuend kleiner als der Subtrahend ist. In diesem Fall ist das
wahre Ergebnis negativ und lsst sich nicht als vorzeichenlose Zahl darstellen. Fr die
Detektion eines Unterlaufs knnen wieder zwei alternative Mglichkeiten eingesetzt
werden:
Unterlaufsdetektion bei der vorzeichenlosen Subtraktion
Variante 1: Betrachtung des hchstwertigen bertragsbits
Ist das hchstwertige bertragsbit bei der Subtraktion zweier natrlicher Zahlen 0,
ist das Ergebnis korrekt. Andernfalls ist ein Unterlauf aufgetreten und das ausgegebene
Ergebnis nicht korrekt.
Mglichkeit 2: Betrachtung der hchstwertigen Bits der Operanden und des
Ergebnisses
Sind beide hchstwertigen Bits der Operanden identisch, tritt bei der Addition ein
Unterlauf auf, wenn das hchstwertige Ergebnisbit gleich 1 ist. Ebenfalls tritt ein Unterlauf auf, wenn das hchstwertige Bit des Minuenden 0 und das des Subtrahenden 1 ist.
In allen anderen Fllen tritt kein Unterlauf auf und das Ergebnis ist korrekt.
29
0101 * 1011
+
+
+
+
0101
0101
0000
0101
0001000
00110111
30
2.3.1 Vorzeichen-Betrag-Darstellung
In der blichen Dezimaldarstellung werden vorzeichenbehaftete Zahlenwerte als eine
Kombination von Vorzeichen und Betrag dargestellt. Es handelt sich um die VorzeichenBetrag-Darstellung. Dieses Prinzip lsst sich auch auf Dualzahlen bertragen. Es bietet
sich an, das Vorzeichen durch ein einzelnes Bit zu codieren. blicherweise verwendet
man eine fhrende 0 um einen positiven Zahlenwert darzustellen und eine fhrende 1 fr
31
negative Zahlen. Die restlichen Bits entsprechen dem Betrag der dargestellten Zahl, welcher als vorzeichenlose Dualzahl codiert ist.
Genauso wie fr vorzeichenlose Zahlen kann als grafische Darstellung ein Zahlenkreis verwendet werden. Abb.2.6 zeigt den Zahlenkreis fr eine Wortbreite von 4bit.
Betrachtet man den Zahlenkreis in Abb.2.6 genauer, fallen mehrere Besonderheiten
auf:
1. Es existieren zwei Reprsentationen der Null, +0 und 0.
2. Es gibt zwei Stellen, an denen berlufe bzw. Unterlufe auftreten knnen, nmlich
zwischen 7 und +0 sowie zwischen +7 und 0
3. Die Additionsrichtung im Bereich positiver Zahlen entspricht der Subtraktionsrichtung im Bereich negativer Zahlen.
Alle drei Beobachtungen sind Nachteile, die das Rechnen in dieser Zahlendarstellung
erschweren bzw. die Implementierung arithmetischer Schaltungen aufwendiger machen.
Um beispielsweise eine Addition durchzufhren, knnen verschiedene Vorgehensweisen definiert werden. Am einfachsten ist es, wenn das Vorzeichen der Operanden fr die
eigentliche arithmetische Operation unbercksichtigt bleibt und eine Operation wie fr
vorzeichenlose Zahlen durchgefhrt wird. Um dabei das korrekte Ergebnis zu erhalten,
ist eine Fallunterscheidung auf Basis der Vorzeichen der Operanden erforderlich. Je nach
vorliegendem Fall, wird gegebenenfalls eine Vertauschung der Operanden vorgenommen, statt einer Addition eine Subtraktion durchgefhrt oder das Vorzeichen des Ergebnisses invertiert (Tab.2.8).
quivalent zur Addition knnen auch fr andere Grundoperationen Rechenregeln
formuliert werden, wobei eine geeignete Fallunterscheidung vorzusehen ist. Dies stellt
Abb.2.6 Zahlenkreis fr
vorzeichenbehaftete Zahlen in
Vorzeichen-Betrag-Darstellung
0000
1111
1110
1101
1100
1011
-7
+0
0001
-6
+2
Additionsrichtung
im Bereich
[-0;-7]
-5
-4
0010
+1
Additionsrichtung
im Bereich
[+0;+7]
+4
-3
+5
-2
1010
0011
+3
+6
-1
1001
-0
1000
+7
0110
0111
0100
0101
32
Vorzeichen des
Ergebnisses
invertieren
nein
Addition
nein
nein
Subtraktion
nein
ja
Subtraktion
nein
nein
Addition
ja
einen wesentlichen Nachteil fr den Einsatz der Vorzeichen-Betrag-Darstellung in digitalen Systemen dar, da die Fallunterscheidungen in Hardware implementiert werden mssten, wodurch sich der schaltungstechnische Aufwand erhht.
2.3.2 Zweierkomplement-Darstellung
Aus den berlegungen des vorangegangenen Abschnitts lassen sich Forderungen formulieren, die fr eine Darstellung vorzeichenbehafteter Zahlen gelten sollten. So ist es wnschenswert, dass
1. nur eine Codierung dem Zahlenwert Null entspricht,
2. die Additionsrichtung fr den gesamten Zahlenbereich identisch ist,
3. nur an einer Position im Zahlenkreis ein berlauf bzw. Unterlauf auftritt.
Eine Zahlendarstellung die diese Forderungen erfllt, ist die sogenannte Zweierkomplement-Darstellung. Die Codierung der Zahlen im Zweierkomplement ergibt sich aus den
ersten beiden Forderungen: Zwischen den Zahlenwerten 1 und +1 darf nur eine Codierung existieren, die den Wert 0 reprsentiert. Setzt man voraus, dass die positiven Zahlen wie bei der Vorzeichen-Betrag-Darstellung durch eine fhrende 0 zu identifizieren
sind und legt zugrunde, dass die selbstverstndliche Gleichung12=1 gelten soll,
lsst sich die Codierung der Zahl 1 wie folgt anhand des Zahlenkreises bestimmen:
Als Startpunkt whlt man auf dem Zahlenkreis die Codierung 0001, was der Zahl +1
entspricht. Luft man auf dem Zahlenkreis einen Schritt in Subtraktionsrichtung, muss
sich die Codierung der Zahl 0 ergeben. Diese entspricht bei einer Wortbreite von 4bit
der Codierung 0000 und entspricht somit der Darstellung der Null fr vorzeichenlose
Zahlen. Ein weiterer Schritt in Subtraktionsrichtung muss zwangslufig zur Codierung
der Zahl 1 fhren. Fr eine Wortbreite von 4bit ergibt sich fr 1 also die Codierung
1111. Die Codierungen aller weiteren negativen Zahlen knnen durch weitere Schritte in
Subtraktionsrichtung gefunden werden.
33
Fr die Zweierkomplement-Darstellung gilt, dass alle Codierungen mit einer fhrenden 1 als negative Zahlen zu interpretieren sind. Dies hat den Vorteil, dass sich der
Wert einer Zweierkomplement-Zahl durch eine einfache Summenformel angeben lsst.
Als einziger Unterschied zu der Formel fr vorzeichenlose Zahlen ist bei Zweierkomplement-Zahlen beim hchstwertigen Bit ein negatives Stellengewicht zu bercksichtigen:
Z = zN1 2N1 +
N2
zi 2i
i=0
So ergibt sich fr eine Wortbreite von 4bit die Zahl 8 als kleinste darstellbare negative
Zahl, welche durch die Bitfolge 1000 codiert wird. Der Zahlenkreis fr Zweierkomplement-Zahlen mit einer Wortbreite von 4bit ist in Abb.2.7 dargestellt.
Abb.2.7 Zahlenkreis fr
vorzeichenbehaftete Zahlen in
Zweierkomplement-Darstellung
0000
1111
1110
-1
0001
-2
1101
1100
-3
0010
+1
+2
Subtraktionsrichtung
Additionsrichtung
-4
+4
-5
1011
+5
+6
-6
1010
0011
+3
-7
1001
-8
1000
+7
0110
0111
0100
0101
34
0111012 = 16 + 8 + 4 + 1 = 29
1000112 = 32 + 2 + 1
= 29
2.3.2.2Vorzeichenerweiterung
In einigen praktischen Anwendungsfllen ist es erforderlich die Wortbreite einer Zahl zu
vergrern und zum Beispiel aus einer 8bit breiten Zahl eine Zahl mit der Wortbreite 16bit
zu generieren. Fr vorzeichenlose Zahlen ist es lediglich erforderlich die Zahl mit fhrenden
Nullen aufzufllen. Im Fall der Zweierkomplement-Darstellung werden die zustzlichen
Stellen dagegen mit dem hchstwertigen Bit (Vorzeichenbit) der Ausgangszahl aufgefllt.
35
Unterlauf aufgetreten. In allen anderen Fllen ist keine berschreitung des darstellbaren Zahlenbereichs aufgetreten und das Ergebnis ist korrekt codiert.
ber-/Unterlaufsdetektion bei der vorzeichenbehafteten Subtraktion
Sind beide hchstwertigen Bits der Operanden unterschiedlich und ist das hchstwertige
Ergebnisbit ungleich dem hchstwertigen Operandenbit des Minuenden, ist ein berlauf
bzw. Unterlauf aufgetreten. In allen anderen Fllen ist keine berschreitung des darstellbaren Zahlenbereichs aufgetreten und das Ergebnis ist korrekt codiert.
36
2.3.5 Bias-Darstellung
Eine weitere Mglichkeit vorzeichenbehaftete Zahlen darzustellen, ist die sogenannte
Bias-Darstellung (bzw. Excess-Darstellung). Der Begriff Bias stammt aus dem Englischen und bedeutet in etwa Vorbeaufschlagung oder Vorspannung. Bei dieser Darstellung kann der Zahlenwert mithilfe der Summenformel fr vorzeichenlose Zahlen
bestimmt werden, wobei nach der Summenbildung eine Konstante B subtrahiert wird.
Durch die Subtraktion der Konstanten knnen auch negative Zahlenwerte dargestellt
werden. Der Wert der Konstanten kann im Prinzip beliebig gewhlt werden. Da man in
der Regel einen symmetrischen Zahlenbereich anstrebt (Absolutwert der kleinsten negativen Zahl entspricht etwa dem Wert der grten positiven Zahl), wird B im Allgemeinen
entsprechend der Wortbreite N der Zahlendarstellung gewhlt:
B=
2N
1 = 2N1 1
2
Betrachten wir die Bitfolge 100101, welche eine Zahl in Bias-Darstellung reprsentiert.
Welcher Zahlenwert wird durch die Bitfolge dargestellt?
Mit N =6 ergibt sich
Z=
N1
zi 2i B = 25 + 22 + 20 25 1 = 6
i=0
Zahlendarstellung
Vorzeichenlos
Vorzeichen-Betrag
Zweierkomplement
Bias (B=2N11)
Kleinster Wert
0
2N1+1
2N1
2N1+1
Grter Wert
2N1
2N11
2N11
2N1
37
2.4.1 Festkomma-Darstellung
Fr die Darstellung von ganzen Zahlen wurde die Vereinbarung getroffen, dass das niederwertigste Bit die Einerstelle darstellt, also mit 20 gewichtet wird. Diese Vereinbarung
ist zwar fr ganze Zahlen sinnvoll, aber letztlich willkrlich. Genauso gut kann als Stellengewicht des niederwertigsten Bits einer binren Zahl auch eine Zweierpotenz mit
negativem Exponenten gewhlt werden. Um den Wert einer solchen Zahl zu bestimmen,
muss die Summenformel fr ganze Zahlen geringfgig modifiziert werden und lautet nun
Z=
M1
zi 2i
i=L
Z = zM1 2M1 +
M2
zi 2i
i=L
fr vorzeichenbehaftete Zahlen.
Die bentigte Wortbreite N einer derartigen Zahl ergibt sich aus der Summe der
Anzahl der Vorkommastellen M und der Nachkommastellen L:
N =M +L
Vereinbart man beispielsweise, dass zwei Nachkommastellen (L =2) verwendet werden.
Welchem Zahlenwert wrde dann die binre Ziffernfolge 10111 als vorzeichenlose
Zahl entsprechen? Welcher Zahlenwert ergibt sich als vorzeichenbehaftete Zahl?
Mithilfe der obigen Summenformeln ist die Lsung leicht zu bestimmen. Werden die
Bits als vorzeichenlose Zahl interpretiert ergibt sich
Zvorzeichenlos = 22 + 20 + 21 + 22 = 5, 75
Wenn die Bits eine vorzeichenbehaftete Zahl in Festkommadarstellung reprsentieren
ergibt sich der dargestellte Zahlenwert zu
38
Zzweierkomplement = 22 + 20 + 21 + 22 = 2, 25
Fr die arithmetischen Grundoperationen ergeben sich keine bzw. lediglich geringe
nderungen. Besitzen beide Operanden die gleiche Anzahl an Nachkommastellen L,
kann die Addition und Subtraktion genauso wie fr ganze Zahlen durchgefhrt werden.
Das Ergebnis besitzt ebenfalls L Nachkommastellen. Bei der Multiplikation besitzt das
Ergebnis dagegen 2L Nachkommastellen. Um bei der Division die gewnschte Genauigkeit des Quotienten zu erhalten, knnen die Nachkommastellen des Dividenden vor
Ausfhrung der Division mit Nullen erweitert werden.
Mssen dagegen Zahlen mit unterschiedlichen Wortbreiten verarbeitet werden, sind
beispielsweise bei der Addition und Subtraktion Korrekturschritte erforderlich um die
Stellengewichte der einzelnen Bits anzupassen.
Nehmen wir an, die Zahl 01001 mit zwei Nachkommastellen und die Zahl 10110 mit
drei Nachkommastellen sollen addiert werden. Das niederwertigste Bit der ersten Zahl
besitzt das Gewicht 22 und das der zweiten Zahl 23. Diese beiden Bits drfen also
nicht einfach addiert werden, da die bekannten Regeln zur binren Addition darauf basieren, dass immer Bits mit gleichem Stellengewicht betrachtet werden. Also mssen die
Zahlen zunchst so erweitert werden, dass die Stellengewichte der einzelnen Bits bereinstimmen: Die erste Zahl wird rechts um eine Stelle mit dem Wert 0 erweitert, whrend bei der zweiten Zahl auf der linken Seite eine 0 angefgt wird (in Abb. 2.9 kursiv
dargestellt). Anschlieend kann die Addition wie gewohnt ausgefhrt werden. Sofern
erforderlich, kann die Wortbreite des Ergebnisses durch Weglassen der niederwertigsten
Nachkommastelle anschlieend wieder auf 5 reduziert werden.
2.4.2 Gleitkomma-Darstellung
Insbesondere in digitalen Rechnersystemen, hat sich die Gleitkomma-Darstellung, wie
sie in der internationalen Norm IEEE 754 definiert ist, durchgesetzt. Solche Rechnersysteme sollen sowohl kleine als auch groe Datenwerte verarbeiten knnen und genau
dies ermglicht die Gleitkomma-Darstellung. Eine detaillierte Beschreibung dieser Zahlendarstellung wrde den Rahmen dieses Buches sprengen. Daher wird im Folgenden
lediglich das Grundprinzip der Gleitkomma-Darstellung betrachtet.
Bei Verwendung dieser Gleitkomma-Darstellung wird der Zahlenwert durch eine
Mantisse M und einen Exponenten E dargestellt. Sowohl M als auch E werden hierbei
als ganze Zahlen codiert, wobei fr M die Vorzeichen-Betrag-Darstellung und fr E die
2.5Codes
39
Bias-Darstellung gewhlt wird. Zustzlich wird ein Vorzeichenbit S angeben. Der Zahlenwert ZGK einer Gleitkommazahl kann wie folgt bestimmt werden:
ZGK = (1)S M 2E
Die verwendeten Wortbreiten fr die Mantisse und den Exponenten sind der Norm IEEE
754 festgelegt, die unterschiedliche Genauigkeiten spezifiziert. Fr die einfache Genauigkeit (C-Datentyp float) werden insgesamt 32Bit verwendet, die sich in 24 Bit fr die
Mantisse inklusive Vorzeichenbit und 8 Bit fr den Exponenten aufteilen. Fr die sogenannte doppelte Genauigkeit (C-Datentyp double) werden die Mantisse mit 53Bit und
der Exponent mit 11Bit codiert.
2.5 Codes
In diesem Abschnitt werden gebruchliche Mglichkeiten vorgestellt, um Informationen in digitaler Form darzustellen. Diese Informationen mssen nicht zwangslufig
Zahlenwerte reprsentieren. Einer Bitfolge knnen auch beliebige andere Bedeutungen
zugeordnet werden. So kann man mit Codes zum Beispiel Farben oder auch die Fehlerzustnde einer Maschine darstellen.
40
2.5.1 BCD-Code
Der BCD-Code (Binary Coded Digit) dient der Codierung der zehn Dezimalziffern. Fr
die Codierung jeder Ziffer werden 4Bit verwendet, die auch als Tetraden bezeichnet
werden. Die verwendeten Bitfolgen entsprechen der dualen Darstellung der vorzeichenlosen Zahlen 0 bis 9. Da bei der Verwendung von 4Bits 16 verschiedene Bitkombinationen mglich sind, jedoch nur 10 hiervon zur Codierung der Ziffern bentigt werden,
werden 6 Bitkombinationen nicht verwendet. Diese nicht verwendeten Kombinationen
werden als Pseudotetraden bezeichnet. In Tab.2.10 ist die Codierung einer Dezimalziffer in Form einer BCD-Tetrade dargestellt.
Der BCD-Code wird zum Teil in Digitaluhren und fr digitale Displays (zum Beispiel in Multimetern) eingesetzt. Der BCD-Code kann auch fr die Implementierung von
Rechnersystemen eingesetzt werden. Hierbei kann es vorkommen, dass das Ergebnis
einer Addition zu einer Pseudotetrade fhrt. Um ein Ergebnis, das eine Pseudotetrade
enthlt, wieder in eine gltige BCD-Darstellung umzuwandeln, sind Korrekturschritte
erforderlich, die die Implementierung der BCD-Arithmetik komplizieren. Darber hinaus ist die BCD-Darstellung nicht speichereffizient, da mit einer Tetrade nur 10 statt der
sonst 16 mglichen Codierungen verwendet werden. So knnen beispielsweise mit 8Bit
nur die Zahlen von 0 bis 99 dargestellt werden, whrend mit der Darstellung als vorzeichenlose Dualzahl der Bereich von 0 bis 255 abgedeckt ist.
Tab.2.10Codierung einer
Dezimalziffer auf Basis des
BCD-Codes
a3
a2
a1
a0
Codierte Dezimalziffer
Pseudotetraden
2.5Codes
Abb.2.10 Beispiel fr die
BCD-Addition
41
3VHXGR7HWUDGH
.RUUHNWXUVFKULWW
Nehmen wir an, die beiden BCD-Zahlen 37 und 55 sollen addiert werden. Auch das
Ergebnis soll in BCD-Darstellung vorliegen. Die Addition kann ohne weitere Beachtung
der BCD-Codierung durchgefhrt werden. Man erhlt dann das Ergebnis in der blichen
binren Darstellung. In diesem Beispiel ergibt sich fr die untere Hlfte des Ergebnisses
die Pseudotetrade 1100.
Zur Korrektur des Ergebnisses kann zunchst die nchsthhere BCD-Stelle um 1
erhht werden, was der binren Addition des Wertes 16 entspricht. Interpretiert man die
so erhaltenen Ergebnisbits als BCD-Zahl, wre das Ergebnis um 10 zu gro. Dies kann
korrigiert werden, indem die untere BCD-Stelle um 10 verringert wird.
Das zweischrittige Vorgehen (16 addieren und anschlieend 10 subtrahieren) kann
natrlich auch in einem Schritt durch die Addition des Wertes 6 realisiert werden.
Die Korrektur muss sukzessive, beginnend mit den niederwertigsten Bits, immer dann
durchgefhrt werden, wenn der BCD-Stellen eine Pseudotetrade enthlt (Abb.2.10).
2.5.2 Gray-Code
Stellen Sie sich vor, Sie sollen einen Temperaturwarner realisieren, der aus einem digitalen Thermometer und einer Einheit zur Temperaturberprfung besteht. Sinkt die
Temperatur unter einen bestimmten Wert, soll ein Alarm ausgegeben werden. Die Temperaturberprfung fragt die aktuelle Temperatur, die vom Thermometer als Dualzahl
bertragen wird, in regelmigen Abstnden ab und gibt gegebenenfalls einen Alarm
aus. Wrden Sie das System so realisieren, knnten sporadische Fehlalarme auftreten.
Wie kann das sein? Nehmen wir vereinfachend an, dass das Thermometer die aktuelle Temperatur mit einer Wortbreite von 4bit ausgibt und Temperaturen zwischen 0und
15C messen kann. Steigt die Temperatur zum Beispiel von 7C auf 8C, wrde das
Thermometer zunchst 0111 und anschlieend 1000 ausgeben. Alle vier vom Thermometer ausgegebenen Bits mssen sich in diesem Fall ndern. In einem realen System
werden die Bitwechsel auf Grund von zeitlichen Toleranzen bei der Messwertausgabe
aber nicht exakt gleichzeitig stattfinden. In Abb.2.11 ist ein mglicher zeitlicher Verlauf
der Thermometerausgabe fr den Wechsel von 7C auf 8C dargestellt, wobei ts0, ts1,
ts2 und ts3 die einzelnen Bits des Temperatursignals und TSdual die duale Interpretation
der Bits reprsentiert.
42
Es ist zu erkennen, dass zwischen den tatschlich gltigen Zahlenwerten 7 und 8 auch
ungltige Werte, die nicht der wahren Temperatur entsprechen, an die Einheit zur Temperaturberprfung gesendet werden. Wird die Temperatur in einem Moment abgefragt,
in dem ein ungltiger Wert ausgegeben wird, kann dies zu einem Fehlalarm fhren.
Mglicherweise werden Sie einwenden, dass diese ungltigen Werte nur fr sehr
kurze Zeiten auftreten und in den meisten Fllen ein korrekter Wert ausgegeben wird.
Obwohl dies sicher richtig ist, verschlimmert diese Tatsache die Lage eher noch: Da das
System nur selten Fehlalarme ausgeben wrde, gestaltet sich eine systematische Fehlersuche extrem schwierig.
Das Kernproblem der oben beschriebenen Temperaturberwachung liegt darin, dass
bei einer nderung der Temperatur mehrere Bits invertiert werden mssen. Wre es
da nicht eine einfache Lsung des Problems, wenn bei einer Temperaturnderung nur
ein einzelnes Bit zu modifizieren wre? Genau dieser Ansatz wird vom Gray-Code, der
nach seinem Erfinder Frank Gray benannt ist, aufgegriffen. Der Gray-Code zeichnet sich
dadurch aus, dass sich zwei benachbarte Codierungen nur in einer Stelle unterscheiden.
Der Gray-Code fr eine Wortbreite von 4bit ist in Tab.2.11 dargestellt.
Wird der Gray-Code fr das Beispiel der Temperaturberwachung eingesetzt, kme
es zu keiner unbeabsichtigten Ausgabe ungltiger Werte und Fehlalarme wrden vermieden. Der zeitliche Verlauf des Temperatursignals ist fr den Wechsel von 7C nach 8C
in Abb.2.12 dargestellt.
Der Gray-Code kann immer dann sinnvoll eingesetzt werden, wenn zwischen zwei
digitalen Komponenten Werte bertragen werden sollen, deren nderung stetig ist. So
wird der Gray-Code unter anderem auch fr die Positions- oder Winkelbestimmung eingesetzt. Ein weiteres Einsatzgebiet ist die bertragung von Speicherfllstnden innerhalb digitaler Systeme. Fr die Implementierung arithmetischer Operationen ist der
Gray-Code dagegen nicht gut geeignet.
ts3
ts2
ts1
ts0
TSdual
8
t
2.5Codes
Tab.2.11Gray-Code fr eine
Wortbreite von 4bit
43
Codierter Wert
a3
a2
a1
a0
10
11
12
13
14
15
ts3
ts2
ts1
ts0
TSGray
8
t
2.5.3 1-aus-N-Code
Der 1-aus-N-Code stellt eine weitere Alternative zur binren Codierung von Informationen dar. Dieser Code zeichnet sich dadurch aus, dass in jedem Codewort mit der Wortbreite N bit nur ein einzelnes Bit auf 1 gesetzt ist; alle anderen Bits besitzen den Wert 0.
Der 1-aus-N-Code ist ein sogenannter redundanter Code, da sich mit N Bits 2N unterschiedliche binre Wrter darstellen lassen, von denen jedoch nur N als gltige Codewrter genutzt werden. Der Code geht also verschwenderisch mit der Wortbreite um.
Dies wird durch den Vorteil aufgewogen, dass sich die Codewrter relativ leicht codieren
bzw. decodieren lassen.
Eine mgliche Codierung der Zahlenwerte 0 bis 5 mit einem 1-aus-6-Code ist exemplarisch in Tab.2.12 dargestellt.
44
Tab.2.12Codierung der
Werte 0 bis 5 mithilfe eines
1-aus-6-Codes
a5
a4
a3
a2
a1
a0
2.5.4 ASCII-Code
Mit dem ASCII-Code (American Standard Code for Information Interchange) werden
ausschlielich Zeichen, also Buchstaben, Ziffern und Sonderzeichen, codiert. Jedes Zeichen wird durch 7Bit reprsentiert. Der ASCII-Code entspricht nahezu dem 7-Bit-Code
nach DIN 66003, welcher im Gegensatz zum ASCII-Code unter anderem auch deutsche
Umlaute abdeckt.
Die Zeichencodierung gem dem ASCII-Code ist in Tab.2.13 dargestellt. Die Bits
a4, a5 und a6 dienen in dieser Tabelle der Auswahl der Spalten und die Bits a0, a1, a2 und
a3 der Zeilenauswahl. Bei der bertragung wird fr ein ASCII-Zeichen im Allgemeinen
ein Byte (8bit) verwendet. In der Datentechnik wird hufig auch das achte Bit zu einer
Erweiterung des Zeichenvorrats herangezogen. Dadurch kann die Anzahl der codierten
Zeichen verdoppelt werden.
Da der ASCII-Code nur einen sehr eingeschrnkten Zeichensatz von 128 bzw. 256
unterschiedlichen Zeichen bietet, wird in vielen Rechnersystemen auch der sogenannte
Unicode zur Codierung von Zeichen eingesetzt. Ziel des Unicodes ist es, alle existierenden Zeichen codieren zu knnen. Hierzu werden in Unicode Ebenen (planes) definiert,
die bis zu 65535 Zeichen enthalten knnen. Der Vorteil, alle gebruchlichen Zeichen
codieren zu knnen, wird allerdings durch den Nachteil erkauft, dass pro Zeichen eine
deutlich hhere Anzahl an Bits vorgesehen werden muss. Daher wird in einfachen
Anwendungsfllen (zum Beispiel Status- und Fehlermeldungen eines digitalen Systems)
in der Regel auf den Einsatz von Unicode verzichtet und auf den weniger komplexen
ASCII-Code zurckgegriffen.
2.5.5 7-Segment-Code
Der 7-Segment-Code wird ausschlielich zur Codierung von Zahlen verwendet, die
mithilfe einer einfachen Anzeige dargestellt werden sollen. Sehr weit verbreitet sind
7-Segment-Anzeigen in digitalen Weckern, in denen sie zur Anzeige der Uhrzeit dienen. Auch bei einfachen Taschenrechnern kommen Segment-Anzeigen zum Einsatz. Ein
Beispiel einer solchen Anzeige auf einer Platine fr digitaltechnische Experimente ist in
Abb.2.13 dargestellt.
2.5Codes
45
Tab.2.13Siebenstelliger
ASCII-Code
a6
a5
a4
0
0
0
0
0
1
0
1
0
0
1
1
1
0
0
1
0
1
1
1
0
1
1
1
@ P
a3 a2 a1 a0
0
NUL DLE SP
SOH DC1 !
A Q
STX DC2
ETX DC3 #
EOT DC4 $
D T
ENQ NAK %
BEL ETB
G W
BS
CAN (
H X
HT
EM
LF
SUB *
VT
ESC
K [
FF
FS
< L
CR
GS
SO
RS
= M ]
SIX
US2
Abb.2.13Vierstellige 7-Segment-Anzeige
m }
> N ^
? O _
DEL
46
Die Darstellung der Ziffern wird hufig durch Leuchtdioden realisiert, die in Form
einer eckigen 8 angeordnet sind. Durch Einschalten ausgewhlter Leuchtdioden knnen
nicht nur die Ziffern 0 bis 9, sondern auch die Hexadezimalziffern A bis F (zum Teil
als Kleinbuchstaben) angezeigt werden. Auf diese Weise kann pro Ziffer einer solchen
Anzeige der Wert von jeweils 4 Bits visualisiert werden.
Um Hexadezimalziffern mithilfe einer 7-Segment-Anzeige darstellen zu knnen, mssen die 4 Bits einer Hexadezimalziffer in geeigneter Weise in 7Bits zur Ansteuerung der
Leuchtdioden der Anzeige umgewandelt werden. In Tab.2.14 ist eine hierfr geeignete
Codierung dargestellt, wobei davon ausgegangen wird, dass eine 1 einer leuchtenden
LED entspricht. Tab.2.14 zeigt die Zuordnung zwischen den Bits des Codewortes (a bis
g) und den LEDs der Anzeige (Abb.2.14).
Tab.2.14Codierung einer
Hexadezimalziffer fr die
Ausgabe auf einer 7-SegmentAnzeige
Abb.2.14 Kennzeichnung
der LEDs einer 7-SegmentAnzeige mit den Buchstaben
a bis g
Hex-Ziffer
D
I
E
F
H
G
2.6bungsaufgaben
47
2.6 bungsaufgaben
Prfen Sie sich selbst mithilfe der folgenden Aufgaben. Am Ende dieses Buches finden
Sie die Lsungen.
Aufgabe 2.1
Stellen Sie die Dezimalzahl 5710 in anderen Zahlensystemen dar:
a) binr
b) oktal
c) hexadezimal
Aufgabe 2.2
Welchen dezimalen Wert reprsentiert die Bitfolge 10010111, wenn es sich
a) um eine vorzeichenlose Dualzahl handelt?
b) um eine Zweierkomplement-Zahl handelt?
c) um eine BCD-codierte Zahl handelt?
Aufgabe 2.3
Wie viele Bits sind fr die Darstellung des Wertes 3210 erforderlich, wenn als
Zahlendarstellung
a) die vorzeichenlose Dualzahlen-Darstellung gewhlt wird?
b) die binre Vorzeichen-Betrag-Darstellung gewhlt wird?
c) die Zweierkomplement-Darstellung gewhlt wird?
Aufgabe 2.4
Welcher Zahlenbereich kann mit 8Bits dargestellt werden, wenn die folgenden Darstellungen gewhlt werden?
a) vorzeichenlos
b) Vorzeichen-Betrag
c) Zweierkomplement
Aufgabe 2.5
Die nachfolgenden 6-Bit-Zahlen sollen addiert werden. Bestimmen Sie jeweils das (6bit
breite) Ergebnis fr den Fall, dass es sich um vorzeichenlose Dualzahlen handelt und
ermitteln Sie, ob bei der Addition ein berlauf auftritt.
a) 110011+001010
b) 100010+101001
48
c) 010111+101101
d) Wie wrden sich die Ergebnisse ndern, wenn die Operanden und das Ergebnis die
Zweierkomplement-Darstellung verwenden?
e) Was wrde sich im Hinblick auf Bereichsberschreitungen (berlauf) ndern, wenn
die Operanden und das Ergebnis die Zweierkomplement-Darstellung verwenden?
Aufgabe 2.6
Nachfolgend sind 8-Bit-Zahlen in Hexadezimal-Darstellung angegeben. Diese Zahlen
sollen addiert werden. Bestimmen Sie jeweils das Ergebnis in Hexadezimal-Darstellung und ermitteln Sie, ob Bereichsberschreitungen auftreten. Die Zahlenwerte sollen
sowohl als vorzeichenlose Dualzahlen als auch als Zweierkomplement-Zahlen interpretiert werden.
Hinweis: Sie knnen die Zahlen zunchst in eine binre Darstellung berfhren,
eine binre Addition durchfhren und anschlieend das binre Ergebnis in einer hexadezimale Darstellung berfhren. Einfacher ist es, wenn Sie die Subtraktion direkt in
der Hexadezimal-Darstellung durchfhren. Wenden Sie hierzu die Rechenregeln aus der
Grundschule an und beachten Sie, dass der 10er-bergang des Dezimalsystems einem
16er-bergang im Hexadezimalsystem entspricht. Beide Wege fhren zum Ziel.
a) 27+33
b) 9A+89
c) DE+CD
Aufgabe 2.7
Nachfolgend sind 8-Bit-Zahlen in Hexadezimal-Darstellung angegeben. Diese Zahlen
sollen subtrahiert werden. Bestimmen Sie jeweils das (8bit breite) Ergebnis in Hexadezimal-Darstellung und ermitteln Sie, ob Bereichsberschreitungen auftreten. Die
Zahlenwerte sollen sowohl als vorzeichenlose Dualzahlen als auch als Zweierkomplement-Zahlen interpretiert werden.
Hinweis: Wie bei der Addition ist auch hier ist die Berechnung im Hexadezimalsystem einfacher.
a) A942
b) 8337
c) 5CBF
Aufgabe 2.8
Welche besondere Eigenschaft besitzt der Gray-Code?
2.6bungsaufgaben
49
Aufgabe 2.9
Welche der folgenden Bitfolgen sind Pseudotetraden des BCD-Codes? (mehrere Antworten knnen richtig sein)
a) 1000
b) 1011
c) 1100
d) 1001
Aufgabe 2.10
Es wird ein 1-aus-8 Code betrachtet.
a) Welche Wortbreite besitzt ein Codewort?
b) Wie viele unterschiedliche Codewrter lassen sich darstellen?
Aufgabe 2.11
Achtung, Transferleistung erforderlich: Man kann theoretisch auch fr das Dezimalsystem eine Komplementdarstellung whlen, also eine Zahlendarstellung im Zehnerkomplement. Wie wrden in dieser Zahlendarstellung die folgenden Werte dargestellt
werden, wenn 3 Dezimalstellen zur Verfgung stehen?
a) 0
b) 1
c) 2
d) 10
Einfhrung inVHDL
51
52
3 Einfhrung in VHDL
Beschreibungssprachen eingesetzt: Verilog und VHDL (Very High Speed Integrated Circuits Hardware Description Language). VHDL bietet gegenber Verilog einen greren
Funktionsumfang und wird daher meist als bevorzugte Sprache zur Beschreibung digitaler Systeme eingesetzt.
In diesem Kapitel werden die Grundlagen der Sprache VHDL vorgestellt. Nachdem
Sie dieses Kapitel gelesen haben, kennen Sie die wichtigsten Sprachelemente und sind in
der Lage eigene digitale Schaltungen in VHDL zu beschreiben. Praktische Hinweise fr
die Durchfhrung eigener VHDL-Experimente finden Sie auch auf der im Vorwort angegebenen Internetseite zum Buch.
53
Testbench
(VHDL)
Testsignal
Generator
Prfling
Stimuli
(VHDL)
Reaktion
Auswertung
und
Ergebnisanzeige
Abb.3.2Waveform Viewer
54
3 Einfhrung in VHDL
VHDLHardwareModule
VHDLTestbench
. vhd
. vhd
VHDL-Code
verbessern
(bzgl. HW-Aufwand
oder Zeitverhalten)
VHDL-Code
korrigieren
Simulation
ok?
nein
Synthese
Synthese
durchfhren
nein
ok?
ja
weitere
Fertigungsschritte
Digitales System
Abb.3.3VHDL-basierter Entwurfsprozess
55
3.2.1 Bibliotheken
VHDL-Beschreibungen mssen vor ihrer Verwendung (in einer Simulation oder fr die
Synthese) zunchst kompiliert werden. Die durch den bersetzungsvorgang erzeugte
binre Beschreibung wird in einer sogenannten Bibliothek abgelegt und kann anschlieend mit anderen kompilierten VHDL-Beschreibungen zu einer Simulationsdatei bzw.
der zu realisierenden Hardware zusammengefgt werden.
Es ist freigestellt, ob man fr jedes VHDL-Modul eine eigene Bibliothek anlegt oder
ob mehrere VHDL-Dateien in einer gemeinsamen Bibliothek abgelegt werden. Insbesondere fr kleinere Systeme ist es hufig vllig ausreichend, eine gemeinsame Bibliothek
fr alle bersetzten VHDL-Dateien zu whlen.
Ein Aufruf eines VHDL Compilers zum bersetzen der VHDL-Datei my_module.vhd
kann wie folgt aussehen:
vcom -work my_work_lib my_module.vhd
56
3 Einfhrung in VHDL
all einfach alle vorhandenen Elemente aus. Im nachfolgenden VHDL-Code stehen dann
alle Elemente des jeweiligen Bibliothekspakets zur Verfgung.
Die folgenden Beispiele verdeutlichen die Syntax zur Verwendung von Bibliotheken:
-- Die Bibliotheken std und work bentigen keine Library-Anweisung
-- mithilfe einer Use-Anweisung werden die Teile der Bibliothek bekannt
-- gemacht, die in der nachfolgenden VHDL-Beschreibung verwendet
-- werden
-- Verwendung von Ein-/Ausgabe-Funktionen aus der Bibliothek std
use std.textio.all;
-- Verwendung von Funktionen eines eigenen Paketes, welches bereits
-- in der aktuellen Arbeitsbibliothek abgelegt (bersetzt) worden ist
use work.my_package.all;
-- Verwendung von Datentypen, Funktionen etc.
-- wie sie im IEEE-Standard 1164 festgelegt worden sind
library ieee;
use ieee.std_logic_1164.all;
57
Darber hinaus muss fr die Anschlsse ein Datentyp angegeben werden. In der Praxis hat sich fr die Beschreibungen einzelner Bits der Datentyp std_logic (gesprochen:
standard logic) durchgesetzt, welcher durch die Norm IEEE 1164 definiert ist. Um
diesen Datentyp verwenden zu knnen, muss das Paket std_logic_1164 aus der IEEEBibliothek hinzugefgt werden.
Betrachten wir das Beispiel eines UND-Gatters mit zwei Eingngen. Die Entity kann
in VHDL wie folgt realisiert werden:
library ieee;
use ieee.std_logic_1164.all;
entity and_2 is
port (a : instd_logic;
b : instd_logic;
q : out std_logic);
end;
Gro- und Kleinschreibung wird in VHDL nicht unterschieden und daher kann fr
alle Sprachelemente sowohl Gro- als auch Kleinschrift verwendet werden. Selbst
Mischformen sind erlaubt und syntaktisch korrekt. So kann das Schlsselwort entity
auch Entity oder eNTiTy geschrieben werden.
Die Architecture-Beschreibung startet mit dem Schlsselwort architecture, gefolgt
von einem Namen der Architecture. Welcher Entity die Architecture zuzuordnen ist, wird
direkt danach mit of festgelegt. Zwischen den Schlsselwrtern begin und end wird der
VHDL-Code eingefgt, der die Funktion des Moduls beschreibt. Die Architecture eines
UND-Gatters ist recht bersichtlich. Die Zuweisung der UND-Verknpfung der beiden
Eingnge an den Ausgangsport bentigt nur eine Codezeile.
architecture behave of and_2 is
begin
q <= a and b;
end;
3.2.3 Bezeichner
Namen von VHDL-Elementen wie zum Beispiel Entity-, Architecture-, oder Signalnamen usw. beginnen immer mit einem Buchstaben. Anschlieend sind sowohl Buchstaben
als auch Zahlen oder der Unterstrich _ erlaubt. Die Verwendung von Schlsselwrtern
ist nicht erlaubt. In Tab.3.1 sind die VHDL-Schlsselwrter zusammengefasst.
Es ist nicht unbedingt notwendig die Bedeutung aller Schlsselwrter zu verstehen.
Einige der reservierten Wrter werden selbst von Experten nur selten verwendet.
58
Tab.3.1bersicht ber reservierte Wrter der Hardwarebeschreibungssprache VHDL
3 Einfhrung in VHDL
abs
downto
library
postponed
srl
access
else
linkage
procedure
subtype
after
elsif
literal
process
then
alias
end
loop
pure
to
all
entity
map
range
transport
and
exit
mod
record
type
architecture
file
nand
register
unaffected
array
for
new
reject
units
assert
function
next
rem
until
attribute
generate
nor
report
use
begin
generic
not
return
variable
block
group
null
rol
wait
body
guarded
of
ror
when
buffer
if
on
select
while
bus
impure
open
severity
with
case
in
or
signal
xnor
component
inertial
others
shared
xor
configuration inout
out
sla
constant
is
package
sll
disconnect
label
port
sra
3.3.1 Integer
Mithilfe des Datentyps integer knnen ganze Zahlen im Bereich von 231 bis +2311
dargestellt werden, also der Zahlenbereich, welcher mit einer 32 bit breiten Zweierkomplementzahl dargestellt werden kann.
59
3.3.2 Std_logic
Der Datentyp std_logic wurde bereits weiter vorne in diesem Kapitel zur Beschreibung
einzelner Bits eingefhrt. Dieser Datentyp reprsentiert ein einzelnes Bit, das die Werte
0 oder 1 annehmen kann. Der Datentyp std_logic bietet darber hinaus noch weitergehende Mglichkeiten.
So wird zur Beschreibung des Einschaltzustands eines Signals, welcher zufllig 0
oder 1 sein kann, ein weiterer Wert bentigt. Der Datentyp std_logic bietet hierfr den
Wert Undefined an, welcher mit dem Buchstaben U abgekrzt wird.
Neben 0, 1, und U bietet der Datentyp noch sechs weitere Werte. Eine bersicht ber
die neunwertige Logik des Datentyps std_logic ist in Tab.3.2 dargestellt.
Nicht alle neun mglichen Werte sind gleichermaen praxisrelevant. Einige knnen
zum Beispiel verwendet werden, wenn Ausgnge mehrerer Gatter auf eine gemeinsame
Leitung gefhrt werden. Hierzu zhlen die Werte Z, L, H und W. Die Mglichkeit, mehrere Gatterausgnge an eine gemeinsame physikalische Leitung anzuschlieen, ist jedoch
ein Sonderfall.
Es verbleiben neben der 0 und der 1 also noch die Werte U, X und (Dont-Care).
Obwohl Sie diese Werte in einer realen Schaltung nicht beobachten werden, da die
Tab.3.2Werte des Datentyps
std_logic
Wert
Bedeutung
Logische 0
Logische 1
Undefiniert
Unbekannt
Hochohmig
Schwache logische 0
Schwache logische 1
Schwach unbekannt
60
3 Einfhrung in VHDL
Leitungen entweder den Wert 0 oder den Wert 1 besitzen, sind die zustzlichen Signalzustnde hilfreich. Die Werte U und X werden Ihnen bei der Simulation eines VHDLModells begegnen. Der Wert U deutet darauf hin, dass sich in der simulierten Schaltung
Signale befinden, die noch nicht auf einen definierten Wert initialisiert worden sind. Insbesondere zu Beginn einer Simulation werden Sie viele Signale mit dem Wert U beobachten knnen. Aufgrund von VHDL-Zuweisungen werden diese Signale meist relativ
schnell einen definierten Wert (meist 0 oder 1) erhalten. Ist ein Signal mit dem Wert U
lnger zu beobachten, sollte der Grund fr dieses Verhalten analysiert werden. Es kann
sein, dass die fehlende Zuweisung eines Wertes an dieses Signal einen Fehler darstellt,
der zu einem Fehlverhalten der Hardware fhren kann.
Der Wert X tritt auf, wenn unbeabsichtigt zwei Ausgnge mit unterschiedlichen logischen Werten auf das gleiche Signal gefhrt werden. Darber hinaus kann der Wert X
in der Simulation entstehen, wenn undefinierte oder unbekannte Signale in logischen
Verknpfungen verwendet werden. Werden in einer Simulation Signale mit dem Wert
X beobachtet, muss die Ursache fr dieses Verhalten untersucht werden. In den meisten Fllen liegt ein Fehler im VHDL-Code vor, welcher vor dem Umsetzen der VHDLBeschreibung in Hardware behoben werden muss.
Mithilfe des Wertes Dont-Care kann in einer VHDL-Beschreibung zum Ausdruck
gebracht werden, dass der Wert eines bestimmten Signals unerheblich fr die Funktion
der Schaltung ist und somit dieses Signal fr die Berechnung der Ausgangswerte nicht
beachtet werden muss. Meist kann diese Information bei der Optimierung der synthetisierten Hardware verwendet werden, sodass eine schnellere oder weniger aufwendige
Hardware erzeugt werden kann.
3.3.3 Std_logic_vector
Viele digitale Systeme lassen sich einfacher und bersichtlicher in VHDL beschreiben,
wenn man die Mglichkeit nutzt, einzelne Bits zu gruppieren. Hierzu kann der Datentyp
std_logic_vector (beziehungsweise std_ulogic_vector) verwendet werden.
Die Indexgrenzen des Vektors werden in Klammern angegeben. Meist wird hierbei
eine absteigende Indizierung verwendet, zum Beispiel (7 downto 0).
Nehmen wir an, Sie mchten eine Schaltung realisieren, die vier UND-Gatter mit
jeweils zwei Eingngen enthalten soll. Selbstverstndlich kann man diese Schaltung mithilfe von 8 Eingngen und 4 Ausgngen vom Datentyp std_logic realisieren. Allerdings
wrde in diesem Fall die Entity-Beschreibung des Moduls 12 Ports enthalten und in der
Architecture mssten vier Signalzuweisungen, fr jeden der vier Ausgnge der Schaltung, vorgenommen werden.
Die Problemstellung lsst sich bei Verwendung des Datentyps std_logic_vector deutlich bersichtlicher lsen:
61
library ieee;
use ieee.std_logic_1164.all;
entity and_2x4 is
port (a : in std_logic_vector (3 downto 0);
b : in std_logic_vector (3 downto 0);
q : out std_logic_vector (3 downto 0));
end;
architecture behave of and_2x4 is
begin
q <= a and b;
end;
VHDL untersttzt Operatoren, die auf Vektoren angewendet werden. In der Codezeile
q <= a and b wird dies ausgenutzt. Diese Zeile fhrt eine bitweise UND-Verknpfung
der einzelnen Komponenten der Vektoren a und b aus und weist das Ergebnis den jeweiligen Bits des Ausgangs q zu. Es wre auch mglich, diese Zuweisungen explizit auszufhren, indem auf die einzelnen Elemente der Vektoren zugegriffen wird:
architecture behave_2 of and_2x4 is
begin
q(0) <= a(0) and b(0);
q(1) <= a(1) and b(1);
q(2) <= a(2) and b(2);
q(3) <= a(3) and b(3);
end;
Diese Schreibweise wrde zum gleichen Ergebnis fhren wie die UND-Verknpfung
auf Basis von Vektoren. Es ist eine Frage des Coding-Styles welche der beiden Varianten bevorzugt wird. Im Allgemeinen sollte jedoch aus Grnden der bersichtlichkeit die
vektorielle Schreibweise vorrangig verwendet werden.
Im Zusammenhang mit Vektoren wird hufig die Frage gestellt, ob es mglich ist, die
Elemente eines Vektors zu vertauschen indem ein Vektor mit absteigender Indizierung
(zum Beispiel 7 downto 0) einem Vektor mit aufsteigender Indizierung (zum Beispiel 0
to 7) zugewiesen wird. Obwohl die Elementanzahl in den Vektoren bereinstimmt, ist
eine solche Zuweisung nicht zulssig. Die beiden Vektoren besitzen unterschiedliche
Datentypen und drfen daher nicht direkt einander zugewiesen werden.
62
3 Einfhrung in VHDL
nicht eindeutig definiert. Es knnten vllig unabhngige Bits sein, die aus Grnden der
bersichtlichkeit gruppiert wurden. Genauso gut knnte die Zusammenfassung der Bits
einen Zahlenwert darstellen. Im letzteren Fall wre es wnschenswert, dass fr die Vektoren nicht nur logische Funktionen, sondern auch arithmetische Operationen wie Addition oder Subtraktion definiert wren.
VHDL verwendet im Hinblick auf den Datentyp std_logic_vector eine strikte Philosophie: Der Datentyp std_logic_vector beschreibt die Zusammenfassung einzelner Bits.
Dass diese Bits gemeinsam betrachtet einen Zahlenwert darstellen knnten, wird von
VHDL ausgeschlossen und es werden im Sprachstandard keine arithmetischen Operationen dafr zur Verfgung gestellt.
Soll in VHDL die Kombination einzelner Bits als eine Zahl interpretiert werden,
werden die Datentypen signed und unsigned verwendet. hnlich wie beim Datentyp
std_logic_vector knnen mit signed und unsigned beliebig groe Vektoren gebildet werden. Die Bits werden als eine Zweierkomplementzahl beziehungsweise als vorzeichenlose Dualzahl interpretiert werden.
Diese Datentypen sind ebenfalls vom IEEE standardisiert worden und stehen im Paket
numeric_std der IEEE-Bibliothek zur Verfgung. Fr diese Datentypen sind arithmetische Operationen wie die Addition definiert und eine Addiererschaltung fr vorzeichenlose Zahlen mit der Wortbreite 4 bit kann wie folgt implementiert werden:
library ieee;
use ieee.numeric_std.all;
entity addu_4 is
port (a : in unsigned (3 downto 0);
b : in unsigned (3 downto 0);
q : out unsigned (3 downto 0));
end;
architecture behave of addu_4 is
begin
q <= a + b;
end;
3.3.5 Konstanten
Mchte man einem Signal eine Konstante zuweisen, muss hierbei auf den Datentyp geachtet werden. Bei Signalen vom Datentyp integer erfolgt die Zuweisung wie
in einer Software-Programmiersprache in Form einer dezimalen Zahl. Mchte man
dagegen den Zahlenwert in hexadezimaler, binrer oder einer anderen nicht-dezimalen
Schreibweise angeben, muss vor der Zahl der Radix der Zahlendarstellung angegeben
werden. Die nachfolgende Zahl wird durch Doppelkreuze (#) eingerahmt. So wrde die
Hexadezimalzahl BEEF im VHDL-Code als 16#BEEF# angegeben werden.
63
Sehr ntzlich ist die Zuweisung mithilfe der Others-Funktion. Diese ermglicht es
einzelnen Elementen eines Vektors Werte zuzuweisen und den restlichen Elementen
(others) einen anderen Wert. Die Syntax wird durch die folgenden Beispiele verdeutlicht:
-- Diese Zeilen knnen
sv1 <= "01000001";
sv2 <= "00111101";
sv3 <= "00000000";
-- mit Hilfe von "others" auch so formuliert werden:
sv1 <= (0,6=>'1', others=>'0');
sv2 <= (7,6,1 =>'0', others=>'1');
sv3 <= (others=>'0');
64
3 Einfhrung in VHDL
unsigned
std_logic_vector (x)
unsigned (x)
to_integer (x)
std_logic_vector
integer
to_integer (x)
signed (x)
std_logic_vector (x)
to_unsigned (x,N)
signed
to_signed (x,N)
x: umzuwandelnder Wert
N: Wortbreite
Eine Umwandlung vom Datentyp integer in den Datentyp std_logic_vector kann nicht
direkt erfolgen, sondern erfordert immer einen Zwischenschritt ber den Datentypen signed bzw. unsigned.
Einige Beispiele fr die Umwandlung der VHDL-Datentypen sind im Folgenden
dargestellt.
-- Exemplarische Typumwandlungen
i<= to_integer(s8);-- signed -> integer
u8<= to_unsigned(i,8);-- integer -> unsigned
s8<= to_signed(-123,8);-- Ganzzahlige Konstante: Datentyp Integer
slv8 <= std_logic_vector(u8); -- unsigned -> std_logic_vector
i<= to_integer(unsigned(slv8));-- std_logic_vector -> integer
slv8 <= std_logic_vector(to_signed(i,8)); -- integer -> std_logic_vector
3.4Operatoren
65
3.4 Operatoren
Die UND-Verknpfung wurde bereits in den vorangegangenen Abschnitten eingefhrt. In diesem Abschnitt werden nun weitere wichtige Operatoren vorgestellt, die zur
Beschreibung der Funktion einer Schaltung eingesetzt werden knnen. Nicht alle Operatoren lassen sich mit allen Datentypen verwenden. So ist es zum Beispiel nicht mglich
zwei Werte vom Datentyp std_logic_vector zu addieren.
In den Tab. 3.3, 3.4 und 3.5 folgenden Tabellen sind wichtige VHDL-Operatoren
zusammengestellt. Die Datentypen integer, signed und unsigned werden hierbei unter
dem Begriff numerisch zusammengefasst.
Die folgenden Beispiele sollen den Einsatz der Operatoren in VHDL verdeutlichen:
-- Beispiele fr die Verwendung von VHDL-Operatoren
a<= b or c;-- Bitweises ODER
sig1 <= not sig2;-- Bitweise Invertierung
u8_1 <= u8_2 + "00000011"; -- Addition
u8<= to_unsigned(2**7,8); -- Potenzierung
if s8 = to_signed(3,8) then-- Vergleich
slv5_1 = slv5_2 nand slv5_3; -- NAND (Nicht-UND)
end if;
Bei den arithmetischen Operatoren ist zu beachten, dass die Wortbreite des Ergebnisses mit der Wortbreite der Operanden identisch sein muss. Sie mgen vielleicht
spontan einwenden wollen, dass dies zu Problemen fhren kann: Wenn beispielsweise
zwei 8 Bit breite vorzeichenlose Zahlen (Wertebereich: 0 255) addiert werden
Tab.3.3Logische VHDL-Operatoren
Schreibweise
Bedeutung
Datentypen
Synthetisierbar?
and
UND-Verknpfung
Ja
or
ODER-Verknpfung
std_logic, std_logic_vector,
signed, unsigned
nand
Nicht-UND-Verknpfung
nor
Nicht-ODER-Verknpfung
xor
Exklusiv-ODER-Verknpfung
not
Invertierung
66
3 Einfhrung in VHDL
Tab.3.4Arithmetische VHDL-Operatoren
Schreibweise Bedeutung
Datentypen
Synthetisierbar?
Numerisch
Ja
Addition
Subtraktion
Multiplikation
Division
mod
rem
**
Potenzierung
Integer
Falls Konstanten
abs
Absolutwert
Numerisch
Ja
Tab.3.5VHDL-Operatoren
fr Vergleiche
Schreibweise Bedeutung
=
Gleich
/=
Ungleich
>
Grer
<
Kleiner
>=
Grer-gleich
<=
Kleiner-gleich
Datentypen
Synthetisierbar?
Beliebig
Ja
Numerisch
sollen, wrde das Ergebnis in einem Bereich von 0 bis 510 liegen knnen. Es wren
also zur Darstellung des Ergebnisses 9 Bit erforderlich. Dieser Einwand ist vllig korrekt und in VHDL wrde das 8 Bit breite Ergebnis der Addition tatschlich nur die
untersten Bits des wahren Ergebnisses enthalten. Wrden beispielsweise die Zahlen
65 und 250 addiert (65+250=315=1001110112), wrde dem Ergebnissignal der
binre Wert 00111011 zugewiesen die fhrende 1 ginge verloren. Soll bei der Addition das korrekte 9 Bit breite Ergebnis berechnet werden, muss die Addition mit 9 Bit
breiten Operanden ausgefhrt werden. Dies lsst sich erreichen, indem die Wortbreite
der Operanden um 1 bit vergrert wird. Eine mgliche Realisierung in VHDL zeigt
der nachfolgende Code:
-- Addition mit vorheriger Erweiterung der Operanden
sum <= '0' & op1 + '0' & op2;-- fr Datentyp unsigned
sum <= op1(7) & op1 + op2(7) & op2; -- fr Datentyp signed
Dieser VHDL-Code verwendet den Operator & mit dem zwei Vektoren zu einem
neuen Vektor mit grerer Wortbreite zusammengefgt werden knnen. Der Operator
lsst sich mit allen vektoriellen Datentypen, also signed, unsigned und std_logic_vector
verwenden. Die folgenden Beispiele verdeutlichen die Funktionsweise des Operators:
3.5Signale
67
3.5 Signale
Die Ausgangswerte komplexerer Schaltungen lassen sich normalerweise nicht durch
eine ausschlieliche Verknpfung der Eingangssignale beschreiben. Hufig mchte man
zunchst Zwischenergebnisse berechnen, deren anschlieende Verknpfung weitere Zwischenergebnisse oder die Werte der Ausgangssignale ergeben. Diese Zwischenergebnisse
sind letztlich nichts anderes als digitale Signale, die nur innerhalb des Moduls verwendet
werden und nicht von auen sichtbar sind. Fr die Definition solcher Signale steht in
VHDL das Schlsselwort signal zur Verfgung.
a
b
c
&
z
1
68
3 Einfhrung in VHDL
Die VHDL Beschreibung des Moduls wrde also wie folgt realisiert werden:
library ieee;
use ieee.std_logic_1164.all;
entity and_or is
port (a : instd_logic;
b : instd_logic;
c : instd_logic;
q : out std_logic);
end;
architecture behave of and_or is
-- Hier ist der Deklarationsteil der Architecture
-- Signale werden hier definiert
-- und knnen nach "begin" verwendet werden
signal z : std_logic;
begin
z <= a and b;
q <= z or c;
end;
3.5.2 Signalzuweisungen
In dem obigen Beispiel ist die Reihenfolge der Zuweisungen an das Signal z bzw. den Port
q unerheblich. Anders als in einer Programmiersprache fr die Softwareentwicklung wird
der Code innerhalb einer Architecture nicht sequenziell, Zeile fr Zeile, ausgefhrt, sondern
alle Zuweisungen sind zeitgleich aktiv. Der Fachbegriff hierfr ist nebenlufige Zuweisung.
Es wre also ebenso korrekt, den Code wie folgt umzustellen:
architecture behave_2 of and_or is
signal z : std_logic;
begin
q <= z or c;-- zuerst die Zuweisung an q
z <= a and b; -- dann erst an z
end;
3.6Prozesse
69
wird immer dann einen neuen Wert ausgeben, wenn sich einer der beiden Eingnge a
oder b gendert hat, whrend eine nderung von z oder c zu einer Neuberechnung des
Ausgangs q fhrt. Um dieses Verhalten beschreiben zu knnen, mssen auch die VHDLZuweisungen kontinuierlich und unabhngig voneinander aktiv sein. Wrde dagegen
eine Zuweisung von der Ausfhrung einer vorangegangenen Zuweisung abhngen,
ergbe sich eine Abhngigkeit, die nicht dem Verhalten der Hardware entsprche.
Selbstverstndlich htte diese recht einfache Schaltung brigens auch mithilfe einer
einzelnen Zuweisung in der Form
q <= (a and b) or c;
realisiert werden knnen, wobei dann auf die Definition des Signals Z verzichtet werden kann.
In welchem Umfang Signale eingesetzt werden ist auch eine Frage der bersichtlichkeit
des Codes. Werden mehr als zwei oder drei Operatoren in einer Zuweisung verwendet, empfiehlt sich in der Regel der Einsatz von Signalen, um die Lesbarkeit des Codes zu verbessern.
3.6 Prozesse
In den vorangegangenen Beispielen wurden Signalen oder Ports Werte zugewiesen.
Hierzu wurden einfache Zuweisungen verwendet. Mithilfe der vorgestellten Operatoren kann man unter Verwendung dieser einfachen Zuweisungen theoretisch beliebig komplexe Schaltungen in VHDL realisieren. Dieses Vorgehen kann allerdings ein
recht mhseliges und fehlerbehaftetes Abenteuer werden: Die logische Funktion, die es
zu realisieren gilt, msste zunchst manuell so umgewandelt werden, dass sie mithilfe
der vorgestellten Operatoren darstellbar ist. Erst danach kann die Eingabe des VHDLCodes erfolgen. Selbst wenn die Umwandlung der Funktion fehlerfrei gelingt, wre der
anschlieend formulierte VHDL-Code in vielen Fllen schlecht lesbar. Sptere nderungen der Funktion wren damit schwierig.
Geht es also vielleicht auch etwas eleganter und bersichtlicher? Kann man vielleicht
auch in VHDL die aus Programmiersprachen bekannten Konstrukte wie Schleifen oder
Verzweigungen zur Beschreibung einer digitalen Funktion verwenden? Alle Signal- oder
Portzuweisungen werden zeitgleich (parallel, nebenlufig) ausgefhrt. Mit zunehmender
Komplexitt eines VHDL-Moduls kann dies die Verstndlichkeit des Codes weiter verringern. Wre es daher nicht angenehmer, wenn VHDL-Code sequenziell (wie ein Programm einer Software-Programmiersprache) ausgefhrt wrde?
Fr die Lsung der skizzierten Problematik existiert in VHDL das Sprachkonstrukt
eines Prozesses. Prozesse sind eines der wichtigsten Elemente zur Beschreibung von
Hardware in VHDL. Ein VHDL-Prozess kann als Erweiterung der Zuweisungen aufgefasst werden. Genauso wie eine nebenlufige Zuweisung beschreibt ein VHDL-Prozess
das Verhalten einer Teilschaltung des Systems und wird innerhalb einer Architecture
eingesetzt.
70
3 Einfhrung in VHDL
Prozesse zeichnen sich unter anderem durch die folgenden Eigenschaften aus:
Ein Prozess wird nebenlufig zu anderen Prozessen oder Signalzuweisungen ausgefhrt.
VHDL-Code innerhalb eines Prozesses wird sequenziell ausgefhrt.
Innerhalb eines Prozesses knnen Konstrukte wie sie aus Software-Programmiersprachen bekannt sind, zum Beispiel If-Else-Anweisungen oder Variablen, zur Beschreibung der Funktion des Prozesses eingesetzt werden.
Genauso wie nebenlufige Signalzuweisungen reprsentiert ein Prozess ein Stck
Hardware, welches einen Teil der digitalen Gesamtfunktion des Systems zur Verfgung stellt.
Im Folgenden werden einige wichtige Aspekte von Prozessen nher beleuchtet und
vertieft.
Es soll eine Schaltung beschrieben werden, welche die Signale bzw. Eingnge a, b
und c verknpft und das Ergebnis q zuweist. Da q von a, b und c abhngt, muss eine
Neuberechnung von q immer dann erfolgen, wenn sich eines der Eingangssignale ndert.
Daher werden die drei Signale in die Sensitivittsliste aufgenommen. Zwischen begin
und end wird die Prozessbeschreibung eingefgt, die in diesem einfachen Beispiel nur
eine einzelne Zuweisung umfasst.
3.6Prozesse
71
Es wre vllig berechtigt, wenn Sie jetzt Zweifel an der Sinnhaftigkeit von Prozessen
bekmen: Im Prinzip beschreibt der Prozess keine andere Funktion als die, die man bereits
mit einer einfachen Signalzuweisung realisieren kann. Eine nebenlufige Signalzuweisung
wre fr dieses Beispiel tatschlich krzer und bersichtlicher als die Verwendung eines
Prozesses. Aber Prozesse knnen mehr! Einige Aspekte werden bereits in diesem Kapitel
vorgestellt. Andere Aspekte werden Sie beim Lesen der weiteren Kapitel dieses Buches
entdecken und sukzessive die Behauptung nachvollziehen knnen, dass ohne Prozesse
eine sinnvolle und bersichtliche Beschreibung digitaler Systeme nicht mglich ist.
Mglicherweise werden Sie bei der Lektre dieses Buches auch entdecken, dass
nebenlufige Signalzuweisungen und Prozesse zwei unterschiedliche Herangehensweisen reprsentieren: Beschreibt man ein digitales Hardware-Modul ausschlielich mit
Signalzuweisungen, bentigt man eine gute Vorstellung darber, wie die Schaltung aus
digitalen Grundelementen (UND-, ODER-Gatter, usw.) aufgebaut sein soll. Bei Verwendung von Prozessen steht eher die digitale Funktion im Vordergrund. Wie diese Funktion
spter durch das Syntheseprogramm mithilfe der verfgbaren Grundelemente realisiert
wird, ist von nachrangiger Bedeutung. Daher lassen sich mithilfe von VHDL-Prozessen
auch komplexe digitale Funktionen elegant und bersichtlich realisieren.
Der Beispielcode zeigt auch, dass Prozessen Namen erhalten knnen, wenn dies sinnvoll erscheint. Der Prozessname ist optional und wird vor dem Schlsselwort process
eingefgt. Der dem Namen folgende Doppelpunkt ist obligatorisch.
72
3 Einfhrung in VHDL
3.6.3 Variablen
Als Alternative zu Signalen knnen in Prozessen auch Variablen eingesetzt werden.
VHDL-Variablen sind mit statischen Variablen vergleichbar, wie sie zum Beispiel in der
Programmiersprache C zur Verfgung stehen: Sie sind nur in dem Prozess sichtbar, in
dem sie definiert wurden und behalten den zugewiesenen Wert auch dann, wenn der Prozess unterbrochen wird.
Die Definition einer Variablen geschieht im Deklarationsteil des Prozesses (vor begin)
und werden mit dem Schlsselwort variable eingeleitet. Fr Zuweisungen an Variablen
wird := verwendet, whrend bei Signalen die bereits erwhnte Zeichenkombination <=
zum Einsatz kommt.
Ein einfaches Beispiel verdeutlicht die Verwendung von Variablen in
VHDL-Prozessen:
3.6Prozesse
73
74
3 Einfhrung in VHDL
ein Lesezugriff auf ein Signal vor einer Prozessunterbrechung den alten Wert liefern
wird unabhngig davon, ob der Prozess das Signal zuvor beschrieben hat oder nicht.
Nicht wenige, die VHDL lernen, haben zuvor eine Programmiersprache erlernt. In
diesen Sprachen gilt die Regel, dass eine Zuweisung sofort Wirkung zeigt. Wird einer
Variablen ein neuer Wert zugewiesen, kann bereits mit dem nchsten Befehl auf den
neuen Wert zugegriffen werden. Auch hier gilt: VHDL hat zwar viele hnlichkeiten
mit klassischen Programmiersprachen, aber VHDL ist nicht fr die Entwicklung eines
sequenziellen Rechnerprogramms, sondern fr die Beschreibung von parallel arbeitenden Hardwarekomponenten gedacht.
Die zweite Regel ergibt sich als Konsequenz aus der ersten. Es ist erlaubt einem Signal in einem Prozess mehrfach einen Wert zuzuweisen. Wenn die Signalzuweisungen
aber zunchst gesammelt werden und erst bei einer Prozessunterbrechung wirklich ausgefhrt werden, kann hierbei nur der zuletzt zugewiesene Wert Bercksichtigung finden.
Ihnen wird der nachfolgende VHDL-Code vorgelegt. Es handelt sich um ein Modul
mit den Eingngen a und b sowie dem Ausgang q.
signal s : std_logic;
-- Hier ggf. weiterer Code
process (a,b,s)
begin
s <= a and b;
s <= a or b;
s <= a;
q <= s;
s <= a xor b;
end process;
Welche Hardware wird durch diesen Code beschrieben? Ein UND-Gatter oder ein
ODER-Gatter? Oder ist es nur ein einfacher Draht; wird also q immer direkt der Wert
von a zugewiesen? Oder handelt es sich um ein Exklusiv-ODER-Gatter?
Analysiert man dieses Beispiel Schritt fr Schritt, kann man sich der, in diesem Beispiel recht verklausulierten, Funktion des Codes nhern.
Offensichtlich ist, dass die ersten beiden Zuweisungen an das Signal s keine Wirkung
haben, da sie durch sptere Zuweisungen berschrieben werden. Diese kann man also
aus dem Code streichen und der Prozess kann auch wie folgt formuliert werden.
process (a,b,s)
begin
s <= a;
q <= s;
s <= a xor b;
end process;
3.6Prozesse
75
Werfen wir in dem verbleibenden Code einen Blick auf die Zuweisung an den Ausgang q. q wird der Wert von s zugewiesen. Aber was liefert der Lesezugriff auf s zurck?
Vielleicht sind Sie geneigt ad hoc a zu sagen, da vor der Zuweisung an q dem Signal
s der Wert von a zugewiesen wird. Dies wre die korrekte Antwort, wenn es sich bei s
um eine VHDL-Variable handeln wrde. Da s jedoch ein Signal ist, muss der Code noch
etwas genauer analysiert werden.
Bei der Ausfhrung des Prozesses wird die Zuweisung des Wertes von a an das Signal s noch nicht sofort ausgefhrt. Die Zuweisung an q wrde also den Wert des Signals s sehen, der bei einem vorangegangenen Aufruf des Prozesses zugewiesen wurde.
Da das Signal s in dem Prozess zweimal geschrieben wird und nur die letzte Signalzuweisung zur Ausfhrung kommt, wird s also die Exklusiv-ODER-Verknpfung der Eingnge a und b zugewiesen. Also beschreibt der Prozess letztlich eine
Exklusiv-ODER-Verknpfung.
Die Reihenfolge der Zuweisungen an s und q ist, wie bei nebenlufigen Signalzuweisungen irrelevant. Der Prozess kann daher auch wie folgt formuliert werden.
process (a,b,s)
begin
s <= a xor b;
q <= s;
end process;
Diese Variante ist deutlich besser lesbar, da sie auch bei einer sequenziellen Interpretation des Codes auf das korrekte Verstndnis der beschriebenen Funktionalitt fhrt.
Sofern das Signal s nicht in anderen Prozessen der Architecture verwendet wird, kann
der Code auf die Zuweisung q <= a xor b reduziert werden.
Ein nicht seltener Fehler, der bei Signalzuweisungen in Prozessen auftritt, ist die
Zuweisung eines Signals aus unterschiedlichen Prozessen heraus. Dies wrde bedeuten,
dass zwei Prozesse gleichzeitig den Wert des Signals festlegen knnten. Abgesehen von
wenigen Spezialfllen, ist dies in der Regel nicht gewollt und wrde auch beim Synthesevorgang zu Fehlermeldungen fhren. Daher mssen bei der Erstellung von VHDLProzessen die beiden folgenden Regeln beachtet werden:
1. Signale drfen in beliebig vielen Prozessen gelesen werden.
2. Signale drfen nur in einem Prozess geschrieben werden.
76
3 Einfhrung in VHDL
3.6.5.1If-Anweisung
Die If-Anweisung ermglicht die bedingte Ausfhrung von Code innerhalb eines
VHDL-Prozesses. Zwischen den Schlsselwrtern if und then wird eine Bedingung, beispielsweise ein Vergleich zweier Signale, eingefgt. Anschlieend folgt der Code, der
ausgefhrt werden soll, wenn die Bedingung wahr ist. Abgeschlossen wird die Anweisung mit end if;
Optional knnen zustzlich mit elsif weitere Bedingungen eingefgt werden, die dann
berprft werden, wenn die voranstehenden Bedingungen unwahr waren.
Mit dem Schlsselwort else wird der Code eingeleitet, der ausgefhrt werden soll,
wenn alle Bedingungen der If-Anweisung unwahr waren. Auch dies ist eine Option, die
bei Bedarf weggelassen werden kann.
Bei der Verwendung von elsif ist die Schreibweise als ein einzelnes Wort zu beachten.
Viele VHDL-Anfnger, insbesondere wenn sie bereits Programmierkenntnisse besitzen,
neigen dazu, statt elsif die Formulierung else if zu whlen. Die beiden Varianten sind
nicht quivalent. Mit else if wird in dem Else-Zweig der Anweisung eine neue If-Anweisung geffnet, die ihrerseits durch end if geschlossen werden muss.
Der folgende Pseudocode zeigt den prinzipiellen Aufbau der If-Anweisung, wobei
optionale Elemente in geschweiften Klammern dargestellt sind.
if <Bedingung> then
<Anweisungen>
{elsif <Bedingung> then
<Anweisungen>}
{else
<Anweisungen>}
end if;
Ein Beispiel fr die Anwendung der If-Anweisung zeigt der folgende Code.
if a = b then
q <= a and c;
v := '1';
elsif a = c and b = '1' then
q <= d;
v := '1';
else
q <= '0';
v := '0';
end if;
3.6.5.2Case-Anweisung
Wie die If-Anweisung ermglicht auch die Case-Anweisung die bedingte Ausfhrung von Codeteilen. Nach dem Schlsselwort case wird ein auszuwertender Ausdruck
3.6Prozesse
77
angegeben. Mit dem Schlsselwort when wird angegeben, welcher Code fr ein konkretes Ergebnis des Ausdrucks ausgefhrt werden soll. Durch die Verwendung von |
knnen mehrere Werte angegeben werden, die zur Ausfhrung des nachfolgenden Codes
fhren sollen. Ist keiner der angegebenen Werte identisch mit dem Ergebnis des Ausdrucks, knnen Default-Anweisungen spezifiziert werden, die in diesem Fall ausgefhrt
werden sollen. Hierzu wird statt eines Wertes das Schlsselwort others angegeben.
Der folgende Pseudocode zeigt den Aufbau der Case-When-Anweisung.
case <Ausdruck> is
when <Wert>=>
{when <Wert> =>
<Anweisungen>
<Anweisungen>}
<Anweisungen>}
<Anweisungen>}
Mit einer Case-Anweisung kann ein einzelner Ausdruck mit verschiedenen mglichen
(konstanten) Werten verglichen werden. In vielen Fllen kann mit der Case-Anweisung
ein sehr kompakter und bersichtlicher Code erzielt werden. Sind die Vergleichswerte
nicht konstant oder sind Vergleiche mit unterschiedlichen Ausdrcken gewnscht, kann
die If-Anweisung verwendet werden.
3.6.5.3For-Schleife
VHDL untersttzt auch Schleifen. Zuerst wird hier die For-Schleife vorgestellt.
78
3 Einfhrung in VHDL
Nach dem Schlsselwort for wird ein Bezeichner fr die Schleifenvariable eingefgt.
Der Schleifenbereich folgt nach dem Schlsselwort in. Der Bereich kann aufsteigend (zum
Beispiel 1 to 8) oder absteigend (zum Beispiel 15 downto 0) durchlaufen werden.
Nach der Angabe des Schleifenbereichs folgt das Schlsselwort loop, welches von
den Anweisungen des Schleifenkerns gefolgt wird. Die Schleife wird mit end loop
abgeschlossen.
Schleifen drfen optional mit einem Namen (Label) versehen werden.
{loop_label:} for <Bezeichner> in <Bereich> loop
<Anweisungen>
end loop {loop_label};
Ein Beispiel fr die Verwendung einer For-Schleife zeigt das nachfolgende Codefragment, das den Vektor x spiegelt und das Ergebnis dem Vektor y zuweist. y(0) erhlt
den Wert von x(9), y(1) den Wert von x(8) usw.
my_loop: for i in 0 to 9 loop
y(9-i) := x(i); -- x und y sind Vektoren
end loop my_loop;
Die For-Schleifen sind abweisende Schleifen. Beispielsweise wrde der Kern der
nachfolgenden Schleife nie ausgefhrt werden, da es sich um eine abwrtszhlende
Schleife handelt, deren untere Grenze grer ist als die obere.
another_loop: for i in 0 downto 5 loop
y(i) := x(i); -- was auch immer hier steht - es wird nicht ausgefhrt!
end loop;
Schleifen sind synthesefhig, wenn die Schleifengrenzen statisch sind, sich die
Schleifengrenzen also nicht erst zur Laufzeit des VHDL-Codes ergeben.
Darber hinaus ist zu beachten, dass Schleifen von Syntheseprogrammen ausgerollt werden. Man kann sich dies so vorstellen, dass die Schleife aufgelst wird und der
Schleifenkern wiederholt in den Code eingefgt wird. Fr jedes Durchlaufen des Schleifenkerns wird also eine eigene Hardwarekomponente generiert.
3.6.5.4While-Schleife
Neben For-Schleifen knnen in VHDL auch While-Schleifen eingesetzt werden. Hierbei
wird zunchst die nach dem Schlsselwort while angegebene Bedingung geprft. Ergibt
diese den Wert true, wird der Schleifenkern ausgefhrt und anschlieend die Bedingung
erneut geprft. Auch die While-Schleifen sind also abweisende Schleifen.
Die Struktur einer while-Schleife zeigt der folgende Pseudocode.
3.7Hierarchie
79
3.7 Hierarchie
Werden komplexere Schaltungen entworfen, ist es sinnvoll, die gesamte Schaltung
in kleinere Module aufzuspalten, die zunchst separat in VHDL beschrieben werden.
In einer weiteren VHDL-Beschreibung knnen diese Module dann zur gewnschten
Gesamtschaltung kombiniert werden. Um dieses Vorgehen zu untersttzen, bietet VHDL
die Mglichkeit Module innerhalb von Modulen aufzurufen. In der Praxis spricht man
hierbei nicht von aufrufen, sondern von instanziieren. Ein instanziiertes Modul wird
auch als Instanz dieses Moduls bezeichnet.
Es ist auch mglich eine neu geschaffene Komponente, welche Instanzen enthlt, wiederum in einem anderen Modul zu instanziieren und so eine hierarchische Beschreibung
einer Schaltung in mehreren Stufen/Ebenen zu realisieren.
Im Folgenden wird die Vorgehensweise zur Instanziierung von Modulen in VHDL
anhand des Beispiels einer Komponente beschrieben, die drei 8-Bit-Operanden addiert.
Nehmen wir an, dass bereits das folgende Entity-Architecture-Paar zur Beschreibung
eines 8-Bit-Addierers fr zwei Operanden in VHDL beschrieben wurde.
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity add_2
port (op1
op2
sum
end;
is
: in std_logic_vector(7 downto 0);
: instd_logic_vector(7 downto 0);
: out std_logic_vector(7 downto 0));
80
3 Einfhrung in VHDL
Um diese Beschreibung des Addierers in einer anderen VHDL-Architecture zu instanziieren, wird die Entity angegeben, die fr diese Instanziierung verwendet werden soll.
Darber hinaus muss die Bibliothek angegeben werden, in der das Modul abgelegt wurde.
Die Instanziierung eines Moduls beginnt mit einem eindeutigen Namen fr diese Instanz.
Nach einem Doppelpunkt folgen das Schlsselwort entity, die Bibliothek (im nachfolgenden Beispiel die Arbeitsbibliothek work) und der Name des zu instanziierenden Moduls.
Abschlieend wird die Zuordnung der Anschlsse der Instanz zu den Ein- und Ausgngen
oder den Signalen der instanziierenden Architecture angegeben. Die Zuordnung wird mit
den Schlsselwrtern port map eingeleitet.
Auf Basis des Addierers fr zwei Operanden kann ein Addierer fr 3 Operanden
realisiert werden. Das Blockschaltbild dieses 3-Operanden-Addierers ist in Abb.3.6
dargestellt.
Dieser Addierer lsst sich in VHDL wie folgt beschreiben:
library ieee;
use ieee.std_logic_1164.all;
entity add_3 is
port (a : instd_logic_vector (7 downto 0);
b : instd_logic_vector (7 downto 0);
Abb.3.6 Blockschaltbild
eines Addierers fr 3
Operanden
ADD_2
tmp
ADD_2
3.8bungsaufgaben
81
Das Beispiel zeigt die Zuordnung der Anschlsse der add_2-Module zu den Ein- und
Ausgngen des Moduls add_3, wobei eine namensbasierte Zuordnung (engl. named
association) mithilfe des Zuordnungsoperators => verwendet wird. Eher selten findet
man positionsbasierte Zuordnung (engl. positional association), bei der lediglich die
Ports und Signale der instanziierenden Architecture angegeben werden. Das erste angegebene Signal wird dann an den ersten Port der instanziierten Architecture angeschlossen. Das zweite Signal an den zweiten Port, usw.
3.8 bungsaufgaben
Haben Sie den Inhalt des Kapitels verstanden? Prfen Sie sich mit den folgenden Aufgaben. Die Antworten finden Sie am Ende des Buches.
Sofern nicht anders vermerkt, ist nur eine Antwort richtig.
Aufgabe 3.1
Welche der folgenden Aussagen zum VHDL-basierten Entwurfsprozess ist richtig?
a) Eine Testbench ist eine VHDL-Datei, die nur in der Simulation zum Einsatz kommt.
b) Wurde mithilfe von Simulationen die korrekte Funktionsweise einer VHDL-Beschreibung nachgewiesen, mssen im weiteren Verlauf des Entwurfsprozesses keine nderungen an dem VHDL-Code vorgenommen werden.
c) Ein digitales System muss immer in einer einzelnen VHDL-Datei beschrieben
werden.
d) Eine syntaktisch korrekt beschriebenes Entity-/Architecture-Paar ist sowohl simulierbar als auch synthetisierbar.
Aufgabe 3.2
Welche Aussagen zu VHDL-Bibliotheken sind richtig? (Mehrere Antworten sind richtig)
a) Das Ergebnis der bersetzung einer VHDL-Datei wird immer in einer Bibliothek
abgelegt.
82
3 Einfhrung in VHDL
b) Zur Verwendung der Inhalte einer Bibliothek muss diese mithilfe einer LibraryAnweisung bekannt gemacht werden (Ausnahmen work, std).
c) Die Bibliothek work enthlt wichtige vordefinierte Datentypen.
d) Bei der Verwendung des Datentyps std_logic muss die Bibilothek ieee bekannt
gemacht werden.
e) Die Datentypen signed, unsigned und integer sind vordefinierte Datentypen, die auch
ohne Angabe einer Bibliothek verwendet werden knnen.
Aufgabe 3.3
Welche Aussagen sind richtig? (Mehrere Antworten sind richtig)
a) In VHDL wird Gro- und Kleinschreibung nicht unterschieden: MY_SIG und my_sig
bezeichnen das gleiche Signal.
b) Anhand der Entity einer VHDL-Beschreibung knnen die Ein- und Ausgnge eines
Moduls identifiziert werden.
c) Signale vom Datentyp std_logic knnen nur die Werte 0, 1 und U annehmen.
d) Im Deklarationsteil einer Architecture (= vor begin) knnen sowohl Signale als auch
Variablen definiert werden.
e) Numerische Konstanten knnen nicht in hexadezimaler Darstellung angegeben
werden.
Aufgabe 3.4
Welche Aussagen zu VHDL-Prozessen sind richtig? (Mehrere Antworten sind richtig)
a) Der Code innerhalb eines Prozesses wird sequenziell ausgefhrt.
b) Alle Signale auf die innerhalb eines Prozesses schreibend zugegriffen wird, mssen in
der Sensitivittsliste erscheinen.
c) Innerhalb eines Prozesses ist nur die zuletzt ausgefhrte Zuweisung an ein Signal relevant. Alle vorangegangenen Zuweisungen an das gleiche Signal haben keine Wirkung.
d) Fr die Zuweisung eines Wertes an eine Variable wird die Zeichenkombination <=
verwendet.
Aufgabe 3.5
Der nachfolgend dargestellte VHDL-Code ist syntaktisch nicht korrekt. Korrigieren Sie
die Fehler.
library ieee.std_logic_1164.all;
entity my_module is
port (a : instd_logic_vector;
b : ininteger;
c : instd_logic;
3.8bungsaufgaben
83
q : out std_logic_vector;)
end;
architecture of my_module is
begin
signal tmp : unsigned (7 downto 0);
process (a,b,tmp)
variable vi : unsigned (7 downto 0);
begin
tmp <= to_unsigned(A);
vi<= to_unsigned(B,8);
if c == 1
q <= vi - tmp;
else
q <= vi + tmp;
end;
end process;
end;
Aufgabe 3.6
Erstellen Sie ein VHDL-Modul (Entity und Architecture), das die im Folgenden
beschriebene Funktion realisiert:
Das Modul besitzt die Eingnge a (Wortbreite 8 bit), b (8 Bit) und c (2 Bit) und den
Ausgang q (8 Bit)
Der Ausgang q wird in Abhngigkeit vom Eingang c aus den Werten der Eingnge a
und b berechnet. Es soll gelten:
c = 00: q = a
c = 01: q = a & b
c = 10: q = a b
c = 11: q = a b( bezeichnet eine Exklusiv-ODER-Verknpfung)
Verwenden Sie fr die Fallunterscheidung (Werte von c) eine If-Anweisung
Aufgabe 3.7
Ersetzen Sie die If-Anweisung aus Aufgabe 3.6 durch eine Case-Anweisung. Welche
Codenderungen sind erforderlich?
Aufgabe 3.8
Auf Basis des Moduls aus Aufgabe 3.6 soll ein Modul entworfen werden, das fr eine
Wortbreite von 16 Bit ausgelegt ist (Ports a,b und q) aber ansonsten die identische Funktion ausfhrt.
Schreiben Sie ein geeignetes Entity/Architecture-Paar in VHDL. Instanziieren Sie das
Modul aus Aufgabe 3.6.
Kombinatorische Schaltungen
85
86
Abb.4.1 Kombinatorische
Schaltung als einfache
Alarmanlage
4 Kombinatorische Schaltungen
A
S
F1
F2
S
T
F1
F2
&
noch mit dem Schalter S UND-verknpft werden. Nur wenn der Schalter auf 1 ist, wird
der Alarm A ausgelst. Die kombinatorische Schaltung ist ebenfalls in Abb.4.1 dargestellt.
4.1 Schaltalgebra
Die Rechenregeln der Digitaltechnik werden als Schaltalgebra bezeichnet. Der Begriff
Algebra ist aus der Schulmathematik bekannt und beschreibt dort die Rechenregeln fr
Zahlen. Die Zahlen in der elementaren Algebra, also der Schulmathematik, knnen dabei
unendlich viele Werte einnehmen, also eins, zwei, drei, siebenundvierzig, fnftausend
und so weiter.
Die Schaltalgebra ist eine besondere Form der Algebra, bei der Variablen nur zwei
mgliche Werte haben, nmlich 0 und 1. Das heit fr alle Eingangswerte und das
Ergebnis einer Rechenoperation sind nur diese beiden Werte mglich. Manchmal werden
fr die Werte auch die Begriffe Falsch (entspricht 0) und Wahr (entspricht 1) verwendet.
Funktionen, bei denen Eingangs- und Ausgangswerte nur die Werte 0 und 1 annehmen knnen, bezeichnet man als binre Schaltfunktionen, boolesche Schaltfunktionen
oder einfach Schaltfunktionen. Die Bezeichnung boolesch weist darauf hin, dass die
Funktion nach der Booleschen Algebra berechnet wird, die nach dem englischen Mathematiker George Boole benannt ist.
Die Schaltalgebra ist also die mathematische Beschreibung der Funktionen in der
Digitaltechnik. Die Schaltung selber wird dann als kombinatorische Schaltung bezeichnet. Darin fhren Schaltglieder eine logische Verknpfung von Eingangswerten zu einem
Ausgangswert durch. Die Schaltglieder bezeichnet man auch als Gatter.
Physikalische Eigenschaften wie Spannungspegel oder Umschaltzeiten werden in der
Schaltalgebra nicht bercksichtigt. Ob ein digitales Signal den Wert 0V oder 0,1V hat
ist unbedeutend. Beide Spannungspegel werden durch den Wert 0 dargestellt. Somit ist
die Schaltalgebra eine Abstrahierung zur vereinfachten Schaltungsbeschreibung.
4.1Schaltalgebra
Abb.4.2 Schaltfunktion und
Schaltzeichen
87
Y = f(A,B,C)
A
B
C
4.1.2 Funktionstabelle
Da jede Eingangsvariable nur zwei mgliche Werte haben kann, ist es mglich, smtliche Kombinationen der Eingangswerte aufzuzhlen und als Funktionstabelle anzugeben.
Bei n Eingngen sind 2n Kombinationen mglich. Fr die Funktionstabelle wird auch
der Begriff Wahrheitstabelle benutzt; er bezieht sich auf die Bezeichnungen Falsch und
Wahr.
Somit gibt es bei zwei Eingangsvariablen A und B vier verschiedene Kombinationen
der Eingangswerte, nmlich 00, 01, 10, 11. Drei Eingangsvariablen ergeben acht, vier
Eingangsvariablen 16 Kombinationen.
Fr die elementare Algebra wre eine Funktionstabelle nicht mglich, da unendlich
viele Eingangswerte mglich sind. Die Tabelle wrde also unendlich gro werden. Trotzdem gibt es auch dort ein Beispiel fr eine Funktionstabelle, nmlich das Kleine Einmaleins. Fr das Produkt zweier Zahlen von 1 bis 10 gibt es 100 Mglichkeiten und die
100 Ergebnisse werden in der Grundschule auswendig gelernt.
Funktionstabellen dienen zum Beschreiben vorhandener Schaltungen oder zur Spezifikation einer Schaltung, die entworfen werden soll. Beim Schaltungsentwurf, der
Schaltungssynthese wird die Aufgabe meist als Text beschrieben und daraus die Funktionstabelle erstellt.
Als Beispiel soll eine Schaltung spezifiziert werden, welche die Mehrheit aus drei
Eingangswerten bildet. Die Eingnge A, B, C sind digitale Werte und knnen die Werte 0
und 1 annehmen. Wenn zwei oder drei Eingnge 1 sind, soll auch der Ausgang Y 1 sein.
Ansonsten ist der Ausgang 0.
Eine solche Mehrheitsschaltung oder Majorittsschaltung kann als Sicherheitsschaltung fr redundante Systeme dienen. Eine Fabrikhalle hat drei Rauchmelder und
nur wenn zwei Rauchmelder auslsen, wird ein Alarm gemeldet und die Fabrikation
gestoppt. Ein Fehler in einem Rauchmelder kann also keinen Alarm auslsen.
Die Funktionstabelle der Majorittsschaltung ist in Abb.4.3 angegeben. Fr drei Variablen gibt es 23, also 8 Kombinationen und die Tabelle gibt an, welche der Kombinationen eine 1 am Ausgang ergeben sollen.
88
4 Kombinatorische Schaltungen
Abb.4.4 Primzahlerkennung
fr Zahlen 0 bis 9 als
Funktionstabelle mit Dont-Care
A
0
0
0
0
1
1
1
1
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
A(3:0)
0 0
0 0
0 1
0 1
1 0
1 0
1 1
1 1
0 0
0 0
0 1
0 1
1 0
1 0
1 1
1 1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
Y
0
0
1
1
0
1
0
1
0
0
-
B
0
0
1
1
0
0
1
1
C
0
1
0
1
0
1
0
1
Y
0
0
0
1
0
1
1
1
Z a h le n w e rt
0
1
2
3
4
5
6
7
8
9
knnen. Oder das Ergebnis bestimmter Eingangskombinationen wird in der spteren Verarbeitung nicht verwendet.
Der nicht definierte Ausgang wird als Dont-Care bezeichnet und in der Funktionstabelle mit einem Strich - gekennzeichnet. Beim Schaltungsentwurf knnen die DontCare-Eintrge benutzt werden, um eine mglichst kleine und damit kostengnstige
Schaltung zu entwerfen.
Eine Schaltung soll fr die Zahlen 0 bis 9 ausgeben, ob es sich um eine Primzahl
handelt. Die Zahlen sind als vierstellige Dualzahl A(3:0) angegeben. Von den 16 Kombinationen der vier Stellen werden 6 Kombinationen nicht benutzt. Die Ausgabe fr diese
Kombinationen ist beliebig, also Dont-Care. Abb.4.4 zeigt die Funktionstabelle.
89
4.2.1 UND-Verknpfung
Die UND-Verknpfung wurde in Kapitel1 schon kurz vorgestellt. Der Ausgang Y ist 1,
wenn alle Eingangsvariablen 1 sind. Ansonsten ist der Ausgang 0. Das Funktionszeichen
ist nicht eindeutig definiert. Meist wird & (Kaufmanns-Und) verwendet. Daneben sind
(umgekehrtes v), der Multiplikationspunkt sowie das direkte Aneinanderfgen der
Operatoren mglich. In der bersicht aller Funktionen in Tab.4.1 finden sich fr alle
Funktionen die verschiedenen Schreibweisen.
Das Verhalten der UND-Verknpfung ist in der Funktionstabelle in Abb.4.5 dargestellt. Alle vier Kombinationsmglichkeiten fr die beiden Eingnge sind aufgezhlt; nur
wenn A und B gleich 1 sind, ist auch Y gleich 1. Abb.4.5 zeigt auch das Schaltzeichen
der UND-Verknpfung.
Eine UND-Verknpfung ist auch fr mehr als zwei Eingangsvariablen mglich.
Abb.4.6 zeigt Funktionstabelle und Schaltzeichen bei drei Eingangsvariablen. Genauso
sind Funktionen mit vier, fnf oder mehr Eingangsvariablen mglich und werden auch in
der Praxis verwendet.
00
0
1
0
1
Logische Funktion
Y
Y
Y
Y
Y = A & B
Y = A
Y =AB
Y = A&B
Y = A&B
Oder: Y = A B = A B = A B
UND
Y =AB
(Selten: Y = A B)
XNOR,
quivalenz
Y =A
Y = A B
Y =B
Y = A B
(Selten: Y = A B)
Implikation
Y =AB
(Selten: Y = A + B)
ODER
Y =1
=0
=AB
= A & B
= B
Oder: Y = B
Bezeichnung
Konstante 0
NOR
Inhibition
Negation (B)
Inhibition
Oder: Y = A
Negation (A)
XOR, Antivalenz
NAND
Identitt (A)
(Selten: Y = B A)
Implikation
Identitt (B)
Konstante 1
90
4 Kombinatorische Schaltungen
Abb.4.5 Funktionstabelle
und Schaltzeichen der UNDVerknpfung
A
0
0
1
1
B
0
1
0
1
Abb.4.6 Funktionstabelle
und Schaltzeichen einer
UND-Verknpfung mit drei
Eingangsvariablen
A
0
0
0
0
1
1
1
1
B
0
0
1
1
0
0
1
1
Y
0
0
0
1
C
0
1
0
1
0
1
0
1
Y
0
0
0
0
0
0
0
1
A
B
&
A
B
C
&
4.2.2 ODER-Verknpfung
Auch die ODER-Verknpfung wurde in Kapitel1 kurz vorgestellt. Der Ausgang Y ist 1,
wenn ein oder mehrere Eingangsvariablen 1 sind. Nur wenn alle Eingangsvariablen 0
sind ist auch der Ausgang 0. Die Funktionstabelle und das Schaltzeichen sind in Abb.4.7
dargestellt. Auch die ODER-Funktion kann mehr als zwei Eingnge verknpfen. Als
Symbol in der Schaltfunktion wird 1 verwendet. In Formeln wird (mathematisches Symbol) oder v (Buchstabe) benutzt, auch das Plus-Zeichen + wird manchmal
verwendet.
91
A
0
0
1
1
B
0
1
0
1
Y
0
1
1
1
A
B
A
A
0
1
Y
1
0
4.2.4 NAND-Verknpfung
Durch Kombination einer UND-Verknpfung und einer Negation am Ausgang ergibt
sich die NAND-Verknpfung. Der Name leitet sich aus dem englischen not and ab. Das
Schaltbild entspricht der UND-Verknpfung mit einem Kreis am Ausgang fr die Negation. Die Funktion ist fr zwei oder mehr Eingangsvariablen definiert und Abb.4.9 zeigt
Funktionstabelle und Schaltzeichen fr vier Variablen.
Formeln verwenden das UND-Symbol & und negieren den ganzen Ausdruck durch
einen Strich oberhalb (siehe Tab.4.1). Dies gilt auch fr NOR und XNOR.
Abb.4.9 Funktionstabelle
und Schaltzeichen der NANDVerknpfung
A
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
B
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1
C
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
D
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
Y
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
A
B
C
D
&
92
4 Kombinatorische Schaltungen
4.2.5 NOR-Verknpfung
Durch Kombination einer ODER-Verknpfung und einer Negation am Ausgang ergibt
sich die NOR-Verknpfung. Der Name leitet sich aus dem englischen not or ab. Das
Schaltbild entspricht der ODER-Verknpfung mit einem Kreis am Ausgang fr die Negation (Abb.4.10). Auch diese Funktion ist fr zwei oder mehr Eingangsvariablen definiert.
4.2.6 XOR-Verknpfung
Die XOR-Verknpfung ist in der Grundform zunchst fr zwei Eingangsvariablen definiert
und ergibt eine 1 wenn genau eine Variable 1 ist, aber nicht beide gemeinsam. Dies kann
man als ausschlieendes oder, englisch exclusive or bezeichnen, daher XOR. Manchmal wird die Funktion auch als Antivalenz bezeichnet. Dies meint, dass beide Eingnge
unterschiedlichen Wert haben mssen, damit der Ausgang 1 wird. Eine XOR-Verknpfung
mit mehr als zwei Eingngen ist 1, wenn die Anzahl der 1-Werte am Eingang ungerade ist.
In Formeln wird das XOR durch das Symbol dargestellt. In Schaltzeichen wird
die Bezeichnung =1 verwendet (Abb.4.11).
4.2.7 XNOR-Verknpfung
Die XOR-Verknpfung mit negiertem Ausgang wird als XNOR-Verknpfung bezeichnet (exclusive not or). Funktion und Schaltzeichen sind in Abb.4.12 dargestellt.
Abb.4.10 Funktionstabelle
und Schaltzeichen der NORVerknpfung
A
0
0
1
1
B
0
1
0
1
Y
1
0
0
0
A
B
Abb.4.11 Funktionstabelle
und Schaltzeichen der XORVerknpfung
A
0
0
1
1
B
0
1
0
1
Y
0
1
1
0
A
B
=1
Abb.4.12 Funktionstabelle
und Schaltzeichen der XNORVerknpfung
A
0
0
1
1
B
0
1
0
1
Y
1
0
0
1
A
B
=1
93
Manchmal wird die Funktion auch als quivalenz bezeichnet. Dies meint, dass in der
Grundform mit zwei Eingngen beide Eingnge den gleichen Wert haben mssen, damit
der Ausgang 1 wird. Bei mehr als zwei Eingngen ist die XNOR-Verknpfung 1, wenn
die Anzahl der 1-Werte am Eingang gerade ist.
4.2.9 Logikstufen
Alle Verknpfungen knnen auch in einer mehrstufigen Funktion verwendet werden,
bei der das Ergebnis einer Verknpfung die Eingabe einer weiteren Verknpfung ist. Die
Anzahl der aufeinander folgenden Verknpfungen wird als Stufigkeit bezeichnet. Der
Begriff bezieht sich sowohl auf die Logik als auch auf deren Umsetzung als Schaltung.
Einstufige Logik: Eine Logik und digitale Schaltung wird als einstufig bezeichnet,
wenn zwischen Eingang und Ausgang nur eine Verknpfung vorhanden ist.
Zweistufige Logik: Eine Logik und digitale Schaltung wird als zweistufig bezeichnet, wenn zwischen Eingang und Ausgang zwei Verknpfungen in Kette geschaltet
sind.
n-stufige Logik: Eine Logik und digitale Schaltung wird als n-stufig bezeichnet,
wenn zwischen Eingang und Ausgang n Verknpfungen in Kette geschaltet sind.
Bei der Anzahl der Stufen wird eine Negation am Eingang oder Ausgang nicht als separate Stufe gezhlt.
94
4 Kombinatorische Schaltungen
Abb.4.13 US-amerikanische
Logiksymbole
Inverter
AND-Gate
OR-Gate
XOR-Gate
95
4.3.2 Rechenregeln
Rechenregeln zum Umformen von Funktionen gelten in der Schaltalgebra hnlich wie
in der elementaren Algebra. Die Rechenregeln gelten fr UND- sowie ODER-Verknpfungen. Fr alle Rechenregeln wird auf mathematische Beweise verzichtet. Die meisten
Regeln knnen verifiziert werden, indem alle mglichen Werte eingesetzt werden.
A1=1
Eine Variable UND die Konstante 0 ergibt 0:
A&0 = 0
Eine Variable UND die Konstante 1 ergibt die Variable:
A&1 = A
Eine Variable ODER sich selbst ergibt die Variable:
AA=A
Y = (A & B) v (C & D)
=A&BvC&D
=ABvCD
96
4 Kombinatorische Schaltungen
A&A = A
Eine Variable ODER ihre Negation ergibt 1:
A A = 1
Eine Variable UND ihre Negation ergibt die 0:
A & A = 0
Eine Variable doppelt negiert ergibt wieder die Variable:
A=A
Einige dieser Rechenregeln haben hnlichkeit zur elementaren Algebra, also der
Schulmathematik.
Eine Zahl plus Null ergibt wieder die Zahl.
Eine Zahl mal Null ergibt Null.
Eine Zahl mal Eins ergibt wieder die Zahl.
Fr andere Rechenregeln gibt es jedoch keine Entsprechung.
Eine Zahl mal oder plus sich selbst ergibt keine Konstante.
4.3.2.2Kommutativgesetz
Das Kommutativgesetz, oder Vertauschungsgesetz, besagt, dass die Reihenfolge der Operanden vertauscht werden darf. Es gilt also:
A&B = B&A
AB=BA
4.3.2.3Assoziativgesetz
Das Assoziativgesetz, oder Verbindungsgesetz, besagt, dass Rechenoperationen mit dem
gleichen Operator in beliebiger Reihenfolge durchgefhrt werden drfen. Es gilt also:
A & B & C = (A & B) & C = A & (B & C) = (A &C) & B
A B C = (A B) C = A (B C) = (A C) B
4.3.2.4Distributivgesetz
Das Distributivgesetz, oder Verteilungsgesetz, besagt, dass ein Operand vor einer Klammer auf Operatoren in einer Klammer verteilt werden darf. Dies wird in der elementaren
Algebra als Ausmultiplizieren und Ausklammern bezeichnet. Es gilt also:
97
4.3.2.6Shannonsches Gesetz
Das Shannonsche Gesetz ist eine Erweiterung der de Morganschen Gesetze. Es besagt,
dass in einer Funktion, die aus UND- sowie ODER-Verknpfungen besteht, alle Variablen negiert und die Operatoren UND sowie ODER vertauscht werden knnen. Die so
entstehende Funktion ergibt dann die Negation der ursprnglichen Funktion. Als Formel
schreibt sich dies:
B,
. . . , X;
, &
f (A, B, . . . , X; &, ) = f A,
Das Shannonsche Gesetz erscheint zunchst sehr theoretisch, hat aber praktische Bedeutung. Mit ihm knnen logische Ausdrcke umgeformt werden, damit sie besser als
Schaltung umgesetzt werden knnen. In der CMOS-Technologie sind beispielsweise
NAND- und NOR-Verknpfungen einfacher als UND-, ODER-Verknpfungen. Mit dem
Shannonschen Gesetz kann dann umgeformt werden:
(B & C) = A & B C = A & (B & C)
A
Die Funktion kann somit durch zwei NAND-Schaltungen mit jeweils zwei Operatoren
implementiert werden.
98
4 Kombinatorische Schaltungen
4.4.1 Minterme
Fr den Schaltungsentwurf werden sogenannte Minterme verwendet. Ein Minterm ist
eine UND-Verknpfung, die jede Variable genau einmal benutzt. Die Variable kann dabei
nicht-negiert oder negiert verwendet werden. Bei n Eingangsvariablen existieren 2n verschiedene Minterme. Bei drei Variablen A, B, C wren also acht verschiedene Minterme
mglich. Alle drei Variablen werden nicht-negiert oder negiert verwendet, beispielsweise:
A
0
0
0
0
1
1
1
1
B
0
0
1
1
0
0
1
1
C
0
1
0
1
0
1
0
1
A&B&C
0
0
0
0
0
0
0
1
A&B&C
0
0
0
0
0
1
0
0
A&B&C
1
0
0
0
0
0
0
0
99
werden dann ODER-verknpft, damit die 1-Werte der Minterme auch in der Gesamtschaltung eine 1 ausgeben. Diese Beschreibung wird als disjunktive Normalform (DNF)
bezeichnet. Disjunktion ist dabei eine andere Bezeichnung fr die ODER-Funktion.
Betrachten wir als Beispiel die Majorittsschaltung dessen Funktionstabelle in
Abb.4.3 dargestellt ist. Die Schaltung soll fr vier Eingangskombinationen eine 1 ausgeben. Die Minterme fr diese vier Kombinationen werden ausgewhlt und ODER-
verknpft. Dies ergibt die Funktion:
Y = A & B & C A & B & C A & B & C (A & B & C)
Distributivgesetz: A &
(B & C) (A & (B & C)) = A A & (B & C)
Vereinfachungsregel: A A = 1
Vereinfachungsregel: 1 & (B & C) = (B & C)
Auf die gleiche Weise knnen die Terme A & B & C sowie A & B & C mit dem Term
(A & B & C) zusammengefasst werden. Dabei fllt die Variable B beziehungsweise C
weg. Die minimierte Majorittsfunktion lautet:
Y = (B & C) (A & C) (A & B)
Diese Minimierung ist allerdings rechnerisch sehr aufwendig. Man muss genau aufpassen, welche Terme miteinander kombiniert werden knnen. Fr die Ermittlung der
Primterme ist das grafische Verfahren nach Karnaugh wesentlich einfacher, welches in
Abschn.4.6 erlutert wird.
100
4 Kombinatorische Schaltungen
4.4.4 Maxterme
Fr den Schaltungsentwurf knnen auch sogenannte Maxterme verwendet werden. Ein
Maxterm ist eine ODER-Verknpfung, die jede Variable genau einmal verwendet. Wie
bei Mintermen kann jede Variable wiederum nicht-negiert oder negiert sein. Fr den
Maxterm gilt dann, dass er bei genau einer Kombination der Eingangsvariablen den Ausgangswert 0 ergibt und sonst 1 ist. Maxterme sind:
A B C; A B C; A B C
Abb.4.16 zeigt fr drei Maxterme die Funktionstabelle. Nur wenn die nicht-negierten
Eingnge gleich 0 sowie die negierten Eingnge gleich 1 sind, ist der Ausgang gleich 0.
Maxterme sind also das Gegenstck zu Mintermen. Eine Funktion benutzt die UND-,
die andere die ODER-Verknpfung. Bei einer Funktion gibt es eine einzige 1, bei der
anderen eine einzige 0.
A
0
0
0
0
1
1
1
1
B
0
0
1
1
0
0
1
1
C
0
1
0
1
0
1
0
1
AvBvC
0
1
1
1
1
1
1
1
AvBvC
1
1
0
1
1
1
1
1
AvBvC
1
1
1
1
1
1
1
0
101
Fr die Majorittsschaltung kann der Maxterm (A B C) jeweils mit den drei anderen Termen zusammengefasst werden. Die einzelnen Rechenschritte sollen hier jedoch
nicht einzeln aufgefhrt werden. Die minimierte Majorittsfunktion lautet:
Y = (B C) & (A C) & (A B)
102
4 Kombinatorische Schaltungen
1. Ausgehend von der Wahrheitstabelle wird die bentigte Anzahl der Eingangsvariablen
ermittelt und das entsprechende Karnaugh-Diagramm aufgestellt. Die logischen Variablen werden am Rand des KV-Diagramms angeordnet.
2. Anhand der Wahrheitstabelle werden die Werte der Ausgangsvariablen 0 oder 1 in die
entsprechenden Felder des Karnaugh-Diagramms eingetragen.
3. Benachbarte 1-Felder werden zu einem Block zusammengefasst.
4. Zwei Blcke, die sich nur in einer Variablen unterscheiden, sind ebenfalls benachbart; sie drfen zu einem greren Block zusammengefasst werden. Ein Block enthlt
immer 2n Felder. Eine Zusammenfassung von zum Beispiel drei oder fnf Feldern ist
nicht erlaubt.
5. Ein 1-Feld darf in mehreren Blcken integriert sein.
6. Jeder Block reprsentiert einen UND-Term (UND-Verknpfung der Eingangsvariablen).
7. Aus den mglichen Termen (den Blcken im Diagramm) werden die erforderlichen
Terme so gewhlt, dass alle 1-Felder bercksichtigt sind.
8. Die logische Gleichung ergibt sich aus der ODER-Verknpfung der ausgewhlten
UND-Terme.
9. Die logische Gleichung wird nur dann minimal, falls die Blcke so gro wie mglich
sind und die Anzahl der ausgewhlten Blcke minimal ist.
A
0
0
1
1
B
0
1
0
1
Y
p
q
r
s
B=
0
A=
103
Abb.4.18 Eintrge im
Karnaugh-Diagramm
Abb.4.19 Zusammenfassung
von 1-Eintrgen
A
0
0
1
1
A
0
0
1
1
B
0
1
0
1
B
0
1
0
1
Y
1
0
1
1
B=
Y
1
0
1
1
A=
B=
0
A=
B=0
A=1
zusammengefasst werden. In Abb.4.18 sind dies die beiden Einsen in der linken Spalte
und die beiden Terme in der unteren Zeile. Eine 1, also ein Minterm darf dabei mehrfach
fr die Minimierung verwendet werden.
Abb.4.19 zeigt die zusammengefassten Eintrge. Fr die linke Spalte ist die Variable
B gleich 0. Die Variable A kann 0 oder 1 sein, denn das abgerundete Rechteck der verbundenen Eintrge liegt ber der oberen und unteren Zeile. Damit entspricht dieser Term
der Funktion B=0 gleichbedeutend mit B . Der andere verbundene Eintrag luft ber
die untere Zeile, also A gleich 1. B kann 0 oder 1 sein, denn das Rechteck liegt ber den
Spalten fr beide Werte von B. Der Term ist also A=1 gleichbedeutend mit A. Die minimierte Funktion ergibt sich aus der ODER-Verknpfung der Terme, also:
Y = A B
(B & C)
Y = (A & B)
Auch Gruppen von vier Funktionswerten knnen zu einer Vierergruppe zusammengefasst werden. Dies entspricht einer Zusammenfassung von zwei Zweiergruppen, die sich
auch nur in einer Variablen unterscheiden. Wenn sich somit weniger Terme und grere
Terme ergeben, spart dies Schaltungsaufwand. Die Vierergruppen knnen quadratisch
104
Abb.4.20 KarnaughDiagramm mit drei Variablen
4 Kombinatorische Schaltungen
A
0
0
0
0
1
1
1
1
B
0
0
1
1
0
0
1
1
C
0
1
0
1
0
1
0
1
Y
1
1
0
0
0
1
0
0
B,C= 00
A=
01
11
10
A=0, B=0
0
B=0, C=1
oder ber eine ganze Zeile gehen. Abb.4.21 zeigt ein Karnaugh-Diagramm mit zwei
Vierergruppen. Die resultierende Funktion ist:
Y =AC
Die linke Spalte des Karnaugh-Diagramms enthlt die Terme fr B,C=00 und die
rechte Spalte die Terme fr B,C=10. Daher unterscheiden sich diese Terme auch
nur in einer Variable (Variable B) und sind benachbart. Zweier- und Vierergruppen
knnen daher ber den Rand hinaus verbunden sein. Abb.4.22 zeigt dies fr zwei
Karnaugh-Diagramme.
B,C=
00
01
11
10
01
11
10
C=1
A=
B ,C = 00
0
B,C=
00
01
11
10
A=
A=
A=1
A=0,
C=0
C=0
105
A,B=
00
C,D=
00 01
11
10
01
11
10
A=0, D=0
In den 16 Feldern knnen Gruppen mit zwei, vier oder acht 1-Feldern gebildet werden. Die Gruppengre muss aber eine Zweierpotenz sein, das heit eine Gruppe aus
sechs Feldern ist nicht mglich. Dies ergibt sich daraus, dass bei einer Zusammenfassung eine Variable aus dem Term entfllt und dadurch die Gruppe jeweils doppelt so
gro wird. Fr ein Karnaugh-Diagramm mit vier Variablen gibt es also folgende mgliche Gruppen:
Theoretisch kann es dann auch eine 16er-Gruppe ohne Variable geben, das heit die
Funktion ist immer 1.
Wie schon beim Karnaugh-Diagramm fr drei Variablen sind hier wieder die Rnder benachbart. Dies gilt natrlich auch fr Vierergruppen und zwar auch in der Kombination von oberer, unterer und linker, rechter Rand. Mit anderen Worten, auch die vier
Ecken knnen zu einer Vierergruppe zusammengefasst werden (Abb.4.25). Dazu mssen aber alle vier Eckfelder eine 1 eingetragen haben. Eine diagonale Zweiergruppe, also
Feld links-unten und Feld rechts-oben wre nicht mglich, da ja auch ansonsten keine
diagonalen Felder erlaubt sind.
C,D=
00 01
11
10
01
11
10
A,B=
00
B=0
C=1
106
Abb.4.25 Die vier Ecken
knnen eine Vierergruppe
bilden
4 Kombinatorische Schaltungen
A,B=
00
C,D=
00 01
11
10
01
11
10
B=0, D=0
A,B=
00
C,D=
00 01
11
10
Term 1
Term 2
01
Term 3
11
Term 4
10
107
Der Primterm berdeckt nur Zeilen oder Spalten, fr die eine Eingangsvariable 1 ist.
Dann wird die Variable nicht-negiert in der UND-Verknpfung verwendet.
Der Primterm berdeckt nur Zeilen oder Spalten, fr die eine Eingangsvariable 0 ist.
Dann wird die Variable negiert in der UND-Verknpfung verwendet.
Der Primterm berdeckt Zeilen oder Spalten, fr die eine Eingangsvariable sowohl 1
als auch 0 sind. Dann wird die Variable nicht in der UND-Verknpfung verwendet.
Die Formel fr die minimierte Funktion ergibt sich dann als ODER-Verknpfung aller
UND-Terme.
Als Beispiel wird die Funktion fr Term 1 in Abb.4.26 ermittelt. Fr die vier Eingangsvariablen gilt:
Der Term berdeckt nur Zeilen in denen die Variable A gleich 0 ist. A wird negiert
verwendet.
In den oberen beiden Zeilen ist die Variable B sowohl 0 als auch 1. B wird nicht
verwendet.
In den berdeckten linken Spalten ist C beides mal 0. C wird negiert verwendet.
In den beiden linken Spalten ist D sowohl 0 als auch 1. D wird nicht verwendet.
Die Funktion fr Term 1 ist also: A & C
Fr Term 2 gilt, dass die Variablen A und B gleich 0 sind und daher negiert verwendet
werden. D ist gleich 1 und wird nicht-negiert verwendet. C kann 0 und 1 sein und darum
in der Funktion nicht enthalten. Der Primterm lautet also: A & B & D
Fr Term 4 sind die Variablen A, B und D gleich 1 und daher nicht-negiert. C ist wie
bei Term 2 nicht enthalten und daher lautet der Primterm: A & B & D
Somit ergibt sich die minimierte Funktion fr Abb.4.26 als ODER-Verknpfung von
Term 1, 2 und 4:
108
4 Kombinatorische Schaltungen
Anschaulich gesprochen werden die Dont-Cares zur Bildung der Primterme wie
1-Werte, bei der Auswahl der erforderlichen Primterme wie 0-Werte behandelt. Primterme
die nur aus Dont-Cares bestehen, werden nicht eingetragen. In der resultierenden minimierten Funktion ergeben sich dann fr manche Dont-Cares eine 1, fr andere eine 0.
Als Beispiel fr die Behandlung von Dont-Cares soll die in Abschn.4.2.3 beschriebene Primzahlerkennung fr die Zahlen 0 bis 9 minimiert werden. Die Funktionstabelle
findet sich in Abb.4.4 und hat sechs Dont-Cares. Der Eingang ist die vierstellige Dualzahl
A(3:0), so dass die Eingangsvariablen hier nicht A bis D heien. Abb.4.27 zeigt auf der
linken Seite die Zuordnung zwischen Feldern im Karnaugh-Diagramm und Dezimalzahlen.
Im Karnaugh-Diagramm in Abb.4.27 (rechts) knnen drei Vierergruppen als Primterme
gebildet werden. In der dritten Zeile wre eine weitere Vierergruppe nur aus Dont-Cares
mglich, die aber nicht eingetragen wird, da sie ohne 1-Felder nicht erforderlich sein kann.
Term 1 ist erforderlich, da nur er das 1-Feld rechts oben abdeckt. Term 2 ist erforderlich, da nur er das 1-Feld fr 0101 abdeckt. Mit diesen beiden Termen sind smtliche
1-Felder abgedeckt, sodass Term 3 nicht erforderlich ist.
Zur Bestimmung der Terme werden wieder die Eingangsvariablen betrachtet. Fr Term
1 ist A(2) stets 0 und A(1) stets 1, also werden sie negiert beziehungsweise nicht-negiert
bercksichtigt. Die Variablen A(3) und A(0) treten sowohl als 0 und 1 auf, entfallen also.
Term 1 lautet somit A(2) & A(1). Term 2 berechnet sich als A(2) & A(0). Die minimierte
Funktion fr die Primzahlerkennung ist die ODER-Verknpfung der Terme und lautet:
A(3:2)=
00
01
11
10
A(1:0)=
00
Term 1
01
11
10
A(3:2)=
00
A(1:0)=
00
01
11
10
01
14
11
10
10
12
13
15
11
Term 2
Term 3
109
Vielleicht fragen Sie sich beim Betrachten von Abb.4.27, ob die Terme nicht auch
kleiner gewhlt werden knnten. Term 1 beispielsweise knnte auch als Zweiergruppe
mit den beiden 1-Feldern aus der ersten Zeile eingetragen werden. Ein solcher Term
wrde tatschlich eine korrekte logische Funktion ergeben. Er wre aber aufwendiger als
die Vierergruppe. Term 1 als Zweiergruppe entspricht A(3) & A(2) & A(1), whrend die
Vierergruppe durch den einfacheren Term A(2) & A(1) umgesetzt wird.
C,D,E=
000 001 011 010 110 111 101 100
A,B=
00
01
11
10
110
4 Kombinatorische Schaltungen
A(1:0)=
00 01
A(3:2)=
00
11
10
Term 1
01
Term 2
11
Term 3
10
Term 4
jeweils ein 0-Feld gibt, welches nur in ihnen enthalten ist. Damit sind alle 0-Felder abgedeckt, so dass Term 2 und 4 redundant sind.
Die minimierte Funktion ergibt sich zu:
Y = (A(2) A(1)) & A(2) A(0)
Fr die Primzahlerkennung sind die minimierten Funktionen der disjunktiven und konjunktiven Normalform praktisch gleich aufwendig, denn beide Funktionen nutzen drei
Verknpfungen mit jeweils zwei Eingngen. Je nach Funktionstabelle kann eine der
Varianten aber auch gnstiger als die andere sein. Es gibt Entwurfsprogramme die beide
Varianten ausprobieren und die gnstigere verwenden.
Die Reihenfolge der Operationen wird durch Klammern vorgegeben. Dies empfiehlt
sich, um zweifelsfrei zu definieren, wie die Funktion gemeint und interpretiert werden
soll. Es ist besser einige Sekunden fr eine weitere Klammer zu investieren, als mehrere
Stunden oder lnger nach einem Fehler im Code zu suchen.
Die direkte Beschreibung der Logikfunktion ist mglich und wird auch von Programmen verstanden. Viel sinnvoller ist es jedoch, die Funktion zu beschreiben und die Generierung der Logikfunktion dem Programm zu berlassen.
111
a_u<= unsigned(a);
process (a_u)
begin
case a_u is
when0 => y <= '0';
when1 => y <= '0';
when2 => y <= '1';
when3 => y <= '1';
when4 => y <= '0';
when5 => y <= '1';
when6 => y <= '0';
when7 => y <= '1';
when8 => y <= '0';
when9 => y <= '0';
when others => y <= '0';
end case;
end process;
Diese Beschreibung bentigt zwar etwas mehr Text, dafr spart man sich die manuelle Schaltungsminimierung fr die Logikfunktion. Auerdem ist beim Betrachten des
Codes schneller deutlich, welche Funktion ausgefhrt wird.
Man kann die Beschreibung auch noch vereinfachen, indem nur die Primzahlen in
der Case-Anweisung genannt werden. Alle anderen Werte sind durch den Others-Fall
bercksichtigt. Die Case-Anweisung wrde dann lauten:
case a_u is
when2 => y <= '1';
when3 => y <= '1';
when5 => y <= '1';
when7 => y <= '1';
when others => y <= '0';
end case;
Im Unterschied zu der Funktionstabelle in Abb.4.4 werden bei beiden VHDLBeschreibungen die Dont-Care-Flle nicht bercksichtigt, sondern die Ausgabe fr
112
4 Kombinatorische Schaltungen
Werte grer 10 zu 0 gesetzt. Prinzipiell knnte fr ein Dont-Care der Wert - zugewiesen werden. Dies wird in der Praxis jedoch selten gemacht, da die Einsparungen meist
relativ gering sind.
4.7 bungsaufgaben
Haben Sie den Inhalt des Kapitels verstanden? Prfen Sie sich mit den Aufgaben und
Fragen am Kapitelende. Die Lsungen und Antworten finden Sie am Ende des Buches.
Bei den Auswahlfragen ist immer genau eine Antwort korrekt.
Aufgabe 4.1
Was ist ein Minterm?
a) Eine Logikfunktion die nur fr eine Eingangskombination 1 ist
b) Eine Logikfunktion die mit geringst mglicher Geschwindigkeit arbeitet
c) Eine Logikfunktion die nur fr eine Eingangskombination 0 ist
d) Eine Logikfunktion die nur aus einem Inverter besteht
e) Eine Logikfunktion die nur aus einem XOR-Gatter besteht
Aufgabe 4.2
Was ist ein Maxterm?
a) Eine Logikfunktion die nur fr eine Eingangskombination 0 ist
b) Eine Logikfunktion die nur fr eine Eingangskombination 1 ist
c) Eine Logikfunktion die nur aus einem XOR-Gatter besteht
d) Eine Logikfunktion die nur aus einem Inverter besteht
e) Eine Logikfunktion die mit konstanter Geschwindigkeit arbeitet
Aufgabe 4.3
Fr eine Stereoanlage soll die eingestellte Lautstrke auf einer vertikalen Skala mit sieben LEDs (L1 bis L7) dargestellt werden. Die Lautstrke ist als 3-Bit-Dualzahl D2, D1,
D0 verfgbar.
Je hher die eingestellte Lautstrke, umso mehr LEDs sollen durch Ausgabe einer 1
leuchten. Bei Lautstrke 0 (D2, D1, D0=000) sind alle LEDs aus, bei 1 (001) leuchtet
nur L1, und so weiter. Abb.4.30 zeigt den Wert 4 (100) bei dem L1 bis L4 leuchten.
Stellen Sie die Funktionstabelle der Schaltung auf.
Aufgabe 4.4
Fr einen Spielautomaten soll die Eingabe eines Joysticks akustisch ausgegeben werden.
Der Joystick hat vier Schalter O (oben), U (unten), L (links), R (rechts). In der Mittelstellung
4.7bungsaufgaben
Abb.4.30 Lautstrkeanzeige
einer Stereoanlage
113
L7
L6
L5
L4
L3
L2
L1
geben alle Schalter 0 aus, bei Auslenkung sind die entsprechenden Schalter 1. Der Joystick
kann schrg gehalten werden, sodass ein horizontaler und ein vertikaler Schalter gleichzeitig
gedrckt sein knnen. Die beiden horizontalen bzw. vertikalen Schalter O und U bzw. L und
R knnen nicht gleichzeitig gedrckt sein.
Wenn der Joystick aus der Mittelstellung heraus, horizontal oder vertikal gedrckt
wird, soll durch Setzen des Ausgangs T1 =1 ein bestimmter Ton ausgegeben werden.
Wenn der Joystick schrg gehalten wird und zwei Schalter drckt, soll durch Setzen des
Ausgangs T2 =1 ein anderer Ton ausgegeben werden. T1 ist dann 0.
Stellen Sie die Funktionstabelle der Schaltung zur Erzeugung der Tonansteuerung T1
und T2 aus den Schaltern O, U, R, L des Joysticks auf. Fr Eingangskombinationen, die
nicht auftreten knnen, soll fr die Ausgnge ein Dont-Care (-) eingetragen werden.
Aufgabe 4.5
Eine kombinatorische Schaltung hat vier Eingnge A(3:0), die unten als Dezimalzahl A
angegeben ist. Es gibt einen Ausgang Y der folgende Werte hat:
1 bei A =5, 7, 10, 11, 14, 15
0 sonst
Hinweis: Die Zuordnung von Dezimalzahl zu Feldern im Karnaugh-Diagramm ergibt
sich aus der Zahlendarstellung, ist aber auch in Abb.4.27 (links) angegeben.
a) Stellen Sie das Karnaugh-Diagramm auf.
b) Ermitteln Sie die Produktterme. Welche Produktterme sind erforderlich?
c) Geben Sie die Funktion fr die Ausgangsvariable an.
Aufgabe 4.6
Eine kombinatorische Schaltung hat vier Eingnge A(3:0), die unten als Dezimalzahl A
angegeben ist. Es gibt einen Ausgang Y der folgende Werte hat:
1 bei A =0, 1, 2, 3, 4, 7, 8, 9, 10, 11, 15
0 sonst
114
4 Kombinatorische Schaltungen
Sequenzielle Schaltungen
115
116
5 Sequenzielle Schaltungen
5.1 Speicherelemente
5.1.1 RS-Flip-Flop
Die Grundform eines Speicherelements ist das RS-Flip-Flop (RS-FF), auch als Latch
bezeichnet. Es arbeitet ohne Takt und hat die beiden Eingnge R und S sowie den Ausgang Q. Das Schaltsymbol ist in Abb.5.1 dargestellt.
5.1.1.1Funktion
Die beiden Eingnge haben die Bedeutung Reset (R) und Set (S), also rcksetzen und
setzen. Entsprechend dieser Namen ist auch die Funktion des RS-Flip-Flops.
Mit R auf 1 wird der Ausgang Q auf 0 gesetzt (rcksetzen), S ist dabei 0.
Mit S auf 1 wird der Ausgang Q auf 1 gesetzt (setzen), R ist dabei 0.
Sind beide Eingnge 0, bleibt der Wert von Q unverndert (speichern).
Beide Eingnge drfen nicht gleichzeitig auf 1 sein. Man kann nicht gleichzeitig setzen und rcksetzen.
Der Zeitverlauf in Abb.5.2 verdeutlicht die Funktion. In der Digitaltechnik wird der
Zeitverlauf blicherweise etwas vereinfacht dargestellt, da vor allem der logische
Zusammenhang gezeigt werden soll. Auf der horizontalen Achse ist die Zeit aufgetragen. Die vertikale Achse zeigt die Pegel fr die Eingangs- und Ausgangssignale. Die
Zeitachse hat keinen Mastab, da keine konkreten Zeiten sondern die Ablufe wichtig
sind. Ebenso hat die vertikale Achse keinen Mastab, sondern gibt nur die Pegel L und H
fr die Werte 0 und 1 an. Die Signalbergnge werden leicht schrg dargestellt, um den
bergang von 0 nach 1 oder umgekehrt anzudeuten. Die Zeitverzgerung, die in jeder
Schaltung enthalten ist, wird dadurch angedeutet, dass die Signalbergnge von Eingang
und Ausgang leicht versetzt sind.
Fr das RS-FF sind in Abb.5.2 die Eingnge R und S sowie der im Flip-Flop gespeicherte Ausgangswert Q dargestellt. Die eingezeichneten Zeitpunkte haben folgende
Bedeutung:
1. Der Eingang R ist 1, das RS-FF wird rckgesetzt und Q ist 0.
2. Beide Eingnge sind 0 und das RS-FF speichert den vorherigen Wert 0 fr Q.
3. S wird 1 und setzt das RS-FF. Der Ausgang Q wird 1 und speichert diesen Wert auch
wenn S wieder auf 0 geht.
4. Mit Aktivierung von R wird das RS-FF wieder auf 0 gesetzt.
Abb.5.1 Schaltsymbol eines
RS-Flip-Flops (RS-FF)
5.1Speicherelemente
Abb.5.2 Zeitverlauf der
Ansteuerung eines RS-FlipFlops
117
logisch 1
logisch 0
R
S
Q
Beachten Sie: Wenn R und S 0 sind, kann der Ausgang sowohl 0 als auch 1 sein. Der
Ausgangswert hngt also davon ab, ob zuletzt R oder S auf 1 war. Dies ist der wesentliche Unterschied zu einer kombinatorischen Schaltung, die bei gleichen Eingangswerten
immer den gleichen Ausgangswert ergeben, unabhngig von vorherigen Werten.
5.1.1.2Aufbau
Die Speicherung im RS-FF erfolgt durch eine Rckkopplung des Ausgangs Q. Es werden
zwei NOR-Gatter bentigt, die wie in Abb.5.3 verschaltet sind. Der Ausgang des zweiten NOR-Gatters wird an einen Eingang des ersten Gatters zurckgefhrt und speichert
so den Wert des Ausgangs Q. Da nur zwei Gatter bentigt werden, ist der Schaltungsaufwand fr das RS-FF relativ klein.
Die NOR-Gatter des RS-FF knnen im Schaltplan auch nebeneinander geschoben
werden, so dass sich die in Abb.5.4 gezeigte Anordnung ergibt. Whrend ein NOR-Gatter den Ausgang Q erzeugt, hat das andere NOR-Gatter den invertierten Speicherwert als
Ausgang.
5.1.1.3Herleitung des Aufbaus
Der Aufbau des RS-Flip-Flops knnte auch mit den bereits bekannten Methoden aus
dem vorherigen Kapitel hergeleitet werden. Abb.5.5 zeigt, dass die Rckfhrung zur
Speicherung des Flip-Flop-Wertes als separate Leitung angesehen werden kann. Der
Abb.5.3 Aufbau eines
RS-Flip-Flops
Abb.5.4 Alternative
Darstellung des RS-Flip-FlopAufbaus
R
S
1
1
R
n+1
S Q
n
Q
kombinatorische
Schaltung
118
5 Sequenzielle Schaltungen
Rest des Flip-Flops ist dann eine normale kombinatorische Schaltung. Sie hat die Eingnge R und S sowie den alten Wert von Q, der hier als Qn bezeichnet wird. Mit diesen drei Werten berechnet die kombinatorische Schaltung dann den neuen Wert von Q,
bezeichnet als Qn+1. Die Bezeichner n und n+1 stellen Zeitschritte dar; n ist der aktuelle,
n+1 der nchste Wert.
Fr die kombinatorische Schaltung aus Abb.5.5 kann eine Funktionstabelle erstellt
und mit dem Verfahren nach Karnaugh minimiert werden. Abb.5.6 zeigt die Funktionstabelle und das Karnaugh-Diagramm dieser kombinatorischen Schaltung. Zur Minimierung knnen die disjunktive und die konjunktive Normalform verglichen werden, also
Einsen oder Nullen zusammengefasst werden. Die konjunktive Normalform mit dem in
Abb.5.6 dargestellten Termen ergibt die Funktion
5.1.1.4Verwendung
In der Praxis wird das RS-Flip-Flop in der einfachen Grundform nur selten verwendet,
da es kein Taktsignal benutzt. Es ist jedoch als Teilschaltung in getakteten Flip-Flops
enthalten und dadurch eine wichtige Grundlage fr die Datenspeicherung in sequenziellen Schaltungen.
R
0
0
0
0
1
1
1
1
S
0
0
1
1
0
0
1
1
Qn
0
1
0
1
0
1
0
1
Qn+1
0
1 }
1
1 }
0
0 }
- }
speichern
setzen
rcksetzen
verboten
R,S= 00
Qn=
01
11
10
5.1Speicherelemente
119
Der besondere Vorteil der Taktsteuerung ist die Synchronisierung der Speicherelemente. Durch den Takt schalten alle Flip-Flops gemeinsam und fhren einen Rechenschritt aus. Mit dem nchsten Taktzyklus wird der nchste Rechenschritt ausgefhrt.
Kennzeichnend fr einen Takt sind die Periodendauer Tper und die Taktfrequenz f, die
der Kehrwert der Periodendauer ist:
f = 1 Tper
Taktfrequenzen fr digitale Schaltungen sind typischerweise im Bereich zwischen
10MHz fr eine einfache Schaltung bis zu ber 3GHz fr aktuelle CPUs in Computern.
Die Periodendauer ergibt sich nach der genannten Formel.
Zur Verdeutlichung zwei Zahlenbeispiele:
Fr die Taktfrequenz 10MHz betrgt die Periodendauer
Tper = 1 f = 1 10MHz = 1 10 106 Hz = 1 107 Hz = 107 s = 100 109 s = 100 ns
Fr die Taktfrequenz 3GHz betrgt die Periodendauer
Tper = 1 3GHz = 0, 333 ns
Je hher die Taktfrequenz ist, umso leistungsfhiger ist eine Schaltung. Allerdings steigen auch der Schaltungsaufwand, die Stranflligkeit und die bentigte Leistung. Darum
haben netzbetriebene stationre Computer normalerweise hhere Taktraten als batteriebetriebene Laptops und Smartphones.
Eine weitere Kenngre des Takts ist das Tastverhltnis D (englisch Duty Cycle), also
die Dauer der 1-Phase bezogen auf die Periodendauer:
D = T1 Tper
Der Duty Cycle sollte mglichst etwa 50%, also 0- und 1-Phase etwa gleich lang sein.
Dies ist insbesondere fr hohe Taktfrequenzen wichtig, damit das Taktsignal ausreichend
Zeit hat, auch wirklich die Low- und High-Pegel zu erreichen.
Abb.5.7 zeigt den Taktverlauf eines Taktsignals mit Periodendauer und Zeiten fr die
Taktphasen. Die englische Bezeichnung fr Takt ist Clock; das Signal wird daher oft als
CLK oder C abgekrzt.
Abb.5.7 Zeitverlauf eines
Taktsignals
CLK
T1
T0
Tper
120
5 Sequenzielle Schaltungen
5.1.2.2Taktpegelsteuerung
Als einfache Taktsteuerung kann der Taktpegel, also der Wert 0 oder 1, benutzt werden.
Ein taktpegelgesteuertes Flip-Flop ist nur aktiv, wenn der Takt auf 1 ist. Die Grundform
des RS-Flip-Flop kann mit wenig Aufwand um eine Taktpegelsteuerung erweitert werden. Wie in Abb.5.8 gezeigt, werden dazu die Eingnge mit jeweils einem UND-Gatter
erweitert. Nur wenn der Takt auf 1 ist, werden die beiden Steuereingnge R und S durch
die UND-Funktion an R* und S* weitergegeben. Ist der Takt auf 0 sind auch R* und S*
auf 0 und das RS-FF behlt seinen Wert.
Der Zeitablauf in Abb.5.9 verdeutlicht das Verhalten. Nur wenn der Takt CLK auf 1
ist, werden die Steuereingnge R und S ausgewertet. Dies sind die mit gekennzeichneten Impulse. Wenn der Takt auf 0 ist, fhren an den mit gekennzeichneten Zeiten die
Eingangssignale zu keiner nderung am Ausgang.
Die Taktpegelsteuerung hat jedoch einen groen Nachteil. Eigentlich sollte die Verarbeitung so ablaufen, dass pro Taktzyklus die Informationen genau ein Flip-Flop weitergegeben werden. Allerdings dauert die 1-Phase eine gewisse Zeit und die Flip-Flops sind
whrend dieser 1-Phase aktiviert. Es wird also vorkommen, dass Informationen durch
mehrere Flip-Flops rutschen.
Um dies zu vermeiden, werden bei taktpegelgesteuerten Flip-Flops zwei Takte verwendet, die sich nicht berlappen. Dies ist in Abb.5.10 dargestellt. Oben im Bild ist zu
sehen, wie aufeinander folgende Flip-Flops abwechselnd an eines der Taktsignale angeschlossen werden. Unten ist der Zeitverlauf der beiden Takte skizziert. Immer abwechselnd, mit einer Pause dazwischen, ist ein Takt aktiv. Damit werden die Daten immer
genau einen Schritt, also ein Flip-Flop weitergereicht.
Das Prinzip des Zweiphasentakts hnelt einer Kanalschleuse, bei der ein Schiff durch
zwei Tore fahren muss. Erst fhrt das Schiff durch ein Tor und das Tor wird geschlossen.
&
R*
CLK
S
&
S*
Abb.5.8Taktpegelgesteuertes RS-Flip-Flop
t
CLK
R
S
Q
5.1Speicherelemente
Abb.5.10 Schaltungsprinzip
und Zeitdiagramm eines
Zweiphasentakts
121
Flip-Flops
CLK_A
CLK_B
t
CLK_A
CLK_B
Nach dem ndern des Wasserstands wird das andere Tor geffnet und das Schiff fhrt
weiter zur nchsten Schleuse. Es sind jedoch nie beide Tore gleichzeitig offen.
Ein solcher Zweiphasentakt mit taktpegelgesteuerten Flip-Flops wurde frher in vielen
Schaltungen eingesetzt. Allerdings sind zwei Taktleitungen erforderlich, was einen hheren
Aufwand bedeutet. Auch kann die Taktperiode nicht so gut ausgenutzt werden, sodass Zeit
verloren geht. Darum werden heute kaum noch taktpegelgesteuerte Flip-Flops verwendet.
5.1.2.3Taktflankensteuerung
Heutzutage wird praktisch immer eine Taktflankensteuerung verwendet. Nur bei einer
Taktflanke ist das Flip-Flop aktiv, das heit der Zeitpunkt des Schaltens ist sehr genau
vorgegeben. Dies hat den Vorteil, dass alle Flip-Flops einer Schaltung wirklich gleichzeitig arbeiten knnen. Somit wird eine Verarbeitung immer genau einen Schritt von FlipFlop zu Flip-Flop weitergefhrt.
Fr die Taktflankensteuerung kann entweder die steigende Taktflanke, also der bergang von 0 nach 1, oder die fallende Taktflanke, also der bergang von 1 nach 0, benutzt
werden. Meist wird die steigende Taktflanke verwendet, da dies anschaulicher ist. Alle
Flip-Flops einer Schaltung sind dann nur beim bergang des Takts von 0 nach 1 aktiv.
Genauso gut knnten auch Flip-Flops eingesetzt werden, die bei der fallenden Taktflanke
aktiv sind. Dann sollten alle Flip-Flops der Schaltung so aufgebaut sein. Im Schaltsymbol wird die Taktflankensteuerung durch ein Dreieck am Takteingang dargestellt.
Abb.5.11 zeigt die Steuerung durch die Taktflanke und das Schaltsymbol.
Es gibt keine Flip-Flops, die bei beiden Flanken aktiv sind. Eine Mischung von FlipFlops mit steigender und fallender Taktflanke wird nur bei Spezialschaltungen bentigt;
ein Beispiel findet sich in einem spteren Kapitel bei der Ansteuerung von Speichern.
Flip-Flop aktiv
CLK
CLK
t
122
5 Sequenzielle Schaltungen
Bei der Taktflankensteuerung erfolgt blicherweise keine Ansteuerung mit R und S wie
beim RS-Flip-Flop. Stattdessen gibt es einen Dateneingang D, dessen Wert direkt gespeichert wird. Dieses taktflankengesteuerte D-Flip-Flop wird im nchsten Abschnitt erlutert.
5.1.3 D-Flip-Flop
Das taktflankengesteuerte D-Flip-Flop, oder kurz D-Flip-Flop (D-FF) ist das heutzutage
am hufigsten verwendete Flip-Flop. Wenn in der Praxis von einem Flip-Flop gesprochen wird, ist so gut wie immer das taktflankengesteuerte D-Flip-Flop gemeint. Zwei
oder mehr D-FFs, die von einem gemeinsamen Takt angesteuert werden, bezeichnet man
auch als Register.
5.1.3.1Funktion
Beim D-Flip-Flop wird der Eingang D bei einer steigenden Flanke des Takts bernommen und am Ausgang Q ausgegeben. Das Schaltungssymbol in Abb.5.12 zeigt auf der
linken Seite den Dateneingang D und den Takteingang C mit dem Dreieck zur Kennzeichnung der Taktflankensteuerung. An der rechten Seite ist der Datenausgang Q. Wenn
das D-FF auf die negative Taktflanke reagiert, wird dies durch einen Inverterkreis am
Takteingang dargestellt. Im Symbol kennzeichnet die Ziffer 1 die Abhngigkeit der Signale voneinander. Der Dateneingang 1D wird abhngig vom Taktsignal C1 ausgewertet.
Das Verhalten des D-Flip-Flops wird durch die Funktionstabelle in Abb.5.13
beschrieben. Die Form der Tabelle ist hnlich zu den Funktionstabellen der kombinatorischen Schaltungen. Das Zeitverhalten wird durch das Taktflankensymbol und Indizes an
den Werten beschrieben. Qn meint dabei wieder den jetzigen Wert des Ausgangs Q und
Qn+1 ist der zeitlich darauffolgende Wert. Die Indizes bezeichnen also aufeinanderfolgende Taktperioden oder Zeitschritte n und n+1.
positive
Taktflanke
D
1D
C1
Abb.5.13 Funktionstabelle
des D-FFs
negative
Taktflanke
D
1D
C1
positive
Taktflanke
D
negative
Taktflanke
n+1
X
X
0
1
n+1
0
1
5.1Speicherelemente
123
Die Zeilen der linken Funktionstabelle (positive Taktflanke) haben die Bedeutung:
1. Bei D gleich 0 und positiver Taktflanke an C wird der Ausgang Q zu 0.
2. Bei D gleich 1 und positiver Taktflanke an C wird der Ausgang Q zu 1.
3. Wenn der Takt konstant auf 0 ist, behlt Q seinen Wert. Der Wert von D ist irrelevant
(X). Das neue Qn+1 ist also gleich dem alten Qn.
4. Wenn der Takt konstant auf 1 ist, behlt Q seinen Wert. Qn+1 ist gleich Qn.
Die rechte Funktionstabelle zeigt das entsprechende Verhalten fr die negative Taktflanke.
Das Zeitverhalten des D-FFs zeigt Abb.5.14. Bei jeder steigenden Taktflanke wird
der Eingang von D bernommen und am Ausgang Q ausgegeben. nderungen von D
zwischen den steigenden Taktflanken haben keine Auswirkungen.
Die eingezeichneten Zeitpunkte haben folgende Bedeutung:
1. Der Eingang D wird 1.
2. Bei der nchsten steigenden Taktflanke speichert das D-Flip-Flop den Eingangswert
und gibt ihn am Ausgang aus. Q wird 1.
3. Der Eingang D wird 0.
4. Bei der nchsten steigenden Taktflanke speichert das D-Flip-Flop wieder den Eingangswert. Q wird 0.
5. D wird 1 und vor der nchsten steigenden Taktflanke wieder 0. Der gespeicherte Wert
im Flip-Flop und der Ausgang Q ndern sich nicht.
6. D wird wieder kurz 1, dann 0. Da in dieser Zeit eine steigende Taktflanke auftritt,
wird der Ausgang fr einen Takt gleich 1.
Das Zeitverhalten und auch alle weiteren Erklrungen sind im Folgenden nur fr FlipFlops mit positiver Taktflanke dargestellt. Flip-Flops mit negativer Taktflanke verhalten
sich entsprechend.
5.1.3.2Reales Zeitverhalten
Wie erlutert, bernimmt das D-Flip-Flop den Eingangswert bei der positiven Taktflanke. Natrlich braucht die Schaltung eine kurze Zeit, um den Wert zu bernehmen.
Der Eingangswert darf sich darum zum Zeitpunkt der Taktflanke nicht ndern, sondern
muss kurz vor und kurz nach der Taktflanke stabil sein. Abb.5.15 zeigt einen zulssigen
und unzulssigen Zeitverlauf.
C
D
Q
124
5 Sequenzielle Schaltungen
5.1.3.3Aufbau
Fr den Aufbau eines D-Flip-Flops gibt es mehrere Mglichkeiten, die sich in Gre,
Zeitverhalten und Stromverbrauch unterscheiden. Abb.5.17 zeigt eine Mglichkeit zum
Aufbau eines D-Flip-Flops. Auf der rechten Seite ist ein RS-Flip-Flop zur Datenspeicherung (vgl. Abb.5.3). Auf der linken Seite ist eine Vorstufe, in der sich ebenfalls die
Struktur zweier RS-FFs findet. Diese Vorstufe erkennt die steigende Taktflanke und steuert dann das RS-FF auf der rechten Seite an.
Abb.5.15 Datenspeicherung
bei Taktflanken
C
D
???
tsetup
C
D
Q
thold
Wert kann zwischen
0' und 1' wechseln
Wert konstant
0' oder 1'
5.1Speicherelemente
125
&
&
&
&
CLK
&
&
Eine weitere Schaltung zur Implementierung eines Flip-Flops wird spter im Kapitel
Halbleitertechnik vorgestellt (Kapitel10).
126
5 Sequenzielle Schaltungen
/S
1D
C1
D
C
R
1D
C1
R
C
D
R
Q
3. Reset wird wieder 0, also inaktiv. Dies hat aber noch keine Auswirkung auf den
gespeicherten Wert.
4. Erst mit der nchsten steigenden Taktflanke wird der Wert von D wieder ausgewertet
und der Ausgang Q wird 1.
Beachten Sie insbesondere, dass nach dem Ende des Resets, zum Zeitpunkt das FlipFlop noch auf 0 bleibt. Der Eingang D ist synchron, wird also erst bei der nchsten steigenden Taktflanke wieder ausgewertet.
Praktische Verwendung finden asynchroner Reset und Set insbesondere bei der Initialisierung. Beim Einschalten einer Digitalschaltung haben die Flip-Flops einen unbekannten Speicherzustand und knnen durch Reset und Set auf den gewnschten Startwert
gesetzt werden.
Auch fr die Erkennung kurzer Impulse knnen asynchroner Reset und Set verwendet werden. Ein Eingangssignal ist eventuell sehr kurz und schon vor der nchsten Taktflanke beendet. Ein solcher Impuls wrde von einer synchronen Schaltung, die nur bei
den Taktflanken arbeitet, nicht erkannt. Zur Erkennung solcher Impulse wird ein FlipFlop durch den Dateneingang stndig auf 0 gesetzt und der Impuls wird am asynchronen
Set angeschlossen. Wenn das Flip-Flop auf 1 ist, lag ein Impuls am Set-Eingang vor.
5.1Speicherelemente
127
S
D
C
1S
1D
C1
Q
=
S
D
1
C
1D
C1
In hnlicher Weise gibt es D-FFs mit synchronem Reset. Auch synchroner Reset und
Set werden fr die Initialisierung von Digitalschaltungen verwendet.
5.1.4.3Enable
Ein weiterer Steuereingang der fr D-FFs verwendet wird, ist der Enable-Eingang (EN).
Bei einer Taktflanke wird der D-Eingang nur bernommen, wenn Enable gleich 1 ist.
Ansonsten wird der Ausgang Qn beibehalten. Abb.5.21 zeigt Symbol und Zeitverhalten,
wobei die Ziffern wieder die Abhngigkeit anzeigen. Das Enable EN1 gibt die Gltigkeit
von Takt 1C2 an, welcher dann den Dateneingang 2D bernimmt.
Im Zeitverhalten sind folgende Flle gekennzeichnet:
1. EN ist 0 und das Flip-Flop behlt seinen Wert.
2. EN ist 1 und bei jeder steigenden Taktflanke wird der Wert von D bernommen.
3. EN ist 0 und das Flip-Flop behlt seinen Wert.
Ein Enable-Steuereingang wird in der Praxis eingesetzt, wenn eine Teilschaltung nur zu
bestimmten Zeiten oder bei bestimmten Bedingungen aktiv ist.
EN
D
C
Abb.5.22 Kompakte
Darstellung eines D-FF in
der Grundform sowie mit
asynchronem Set und Reset
EN1
2D
C
D
EN
1C2
/S
D
C
D
C
D
C
C
R
R
128
5 Sequenzielle Schaltungen
Asynchroner Set und Reset knnen dann an der unteren oder oberen Kante des Symbols eingezeichnet sein, um darzustellen, dass sie unabhngig vom Takteingang sind. Der
Set liegt in dieser Darstellung an der oberen Kante, denn er zieht den Wert nach oben,
zur 1. Reset wird entsprechend an der unteren Kante dargestellt, denn er zieht den Wert
nach unten, zur 0. Abb.5.22 zeigt auch diese Darstellung, wobei das Set wieder beispielhaft negative Polaritt hat (vgl. Abb.5.18).
5.1.5.1JK-Flip-Flop
Das JK-Flip-Flop (JK-FF) hat einen Takteingang und die beiden Steuereingnge J und
K. Diese haben folgende Bedeutung:
Dieses Verhalten hnelt dem RS-FF, mit J als Set und K als Reset. Die Bedeutung kann
man sich merken als J wie Jump (auf 1) und K wie Kill (auf 0). Die beim RS-FF verbotene Kombination, dass beide Steuereingnge auf 1 sind, ist hier erlaubt und dreht den
gespeicherten Wert um.
Auch dieses Flip-Flop kann durch asynchronen Reset oder Set erweitert werden.
JK-Flip-Flops wurden frher eingesetzt, als Digitalschaltungen noch durch einzelne
diskrete Bausteine aufgebaut wurden. Durch geschickte Ansteuerung von J und K konnten Logikgatter eingespart werden. Heutzutage werden praktisch keine diskreten FlipFlops und darum auch keine JK-FFs mehr verwendet.
5.1.5.2Toggle-Flip-Flop
Das Toggle-Flip-Flop (T-FF) hat, neben dem Takt, nur einen Steuereingang T. Wenn T
gleich 1 ist, invertiert das Flip-Flop seinen Wert, es toggled. Bei T gleich 0 bleibt der
gespeicherte Wert unverndert.
Auch das T-FF kann durch asynchronen Reset oder Set erweitert werden. Wie beim
JK-FF wurde das T-FF eingesetzt, um durch geschickte Ansteuerung Logikgatter einzusparen. Es wird heutzutage praktisch nicht mehr verwendet.
129
5.1.6 Kippstufen
Flip-Flops werden auch als bistabile Kippstufen bezeichnet. Bistabil meint, dass beide
Kippwerte, also 0 und 1 stabil sind. Diese Bezeichnung legt nahe, dass es auch andere
Kippstufen gibt.
5.1.6.1Monostabile Kippstufe
Eine monostabile Kippstufe, auch als Monoflop bezeichnet, hat nur einen stabilen
Zustand; der instabile Zustand geht nach einer Verzgerungszeit in den stabilen Zustand
ber. Das Monoflop reagiert auf eine positive Taktflanke am Eingang mit einem 1-Impuls
am Ausgang. Aus dieser instabilen Lage kippt es nach einer einstellbaren Zeit TD zurck
in den stabilen Zustand mit einer 0 am Ausgang. Erst wenn der Ausgang wieder in seinen
ursprnglichen Logik-Zustand zurckgekippt ist, kann ein neuer Eingangsimpuls mit seiner Flanke wirksam werden.
Als Variante sind nachtriggerbare Monoflops mglich. Falls die Impulsdauer TD noch
nicht abgelaufen ist, verlngert eine Taktflanke des Eingangssignals den Impuls bis wiederum die Zeit TD nach der Flanke abgelaufen ist.
Dieses Verhalten entspricht der Treppenhausbeleuchtung in einem Mehrfamilienhaus. Nach Schalterdruck ist das Licht fr zwei Minuten an (instabiler Zustand) und geht
danach wieder aus (stabiler Zustand). Bei einer nachtriggerbaren Treppenhausbeleuchtung verlngert ein weiterer Schalterdruck die Beleuchtungsdauer.
Monostabile Kippstufen sind als diskrete Bauelemente verfgbar. Die Verzgerungszeit kann ber ein RC-Glied eingestellt werden. Eingesetzt werden diese Bauelemente,
um das Zeitverhalten von Signalen zu kontrollieren. Beispielsweise kann so sichergestellt werden, dass ein Reset eine bestimmte Mindestdauer hat.
5.1.6.2Astabile Kippstufe
Eine astabile Kippstufe hat keinen stabilen Zustand, sondern wechselt periodisch zwischen den beiden Zustnden, also 0 und 1. Sie wird auch als Oszillator bezeichnet und
als Taktgenerator eingesetzt.
Es gibt verschiedene Schaltungen, die als astabile Kippstufe eingesetzt werden knnen.
Einfache Schaltungen nutzen RC-Glieder, um zwischen den Zustnden umzuschalten.
Hierbei ist die Frequenz meist nicht sehr stabil, aber fr einfache Anwendungen kann dies
ausreichend sein.
Fr hohe Ansprche in Hinblick auf Frequenzstabilitt werden quarzgesteuerte Oszillatoren eingesetzt. Fr den Einsatz in der Digitaltechnik stehen integrierte Schaltkreise zur
Verfgung, die ber einen Schwingquarz auf eine bestimmte Frequenz eingestellt werden.
130
5 Sequenzielle Schaltungen
5.2.1 Automatentheorie
Ein Automat ist dadurch gekennzeichnet, dass sein Verhalten durch aktuelle Eingangsvariablen und interne Zustandsvariablen bestimmt ist. Die Zustandswerte, oder auch
Zustnde, beschreiben die Vorgeschichte des Automaten. Daraus ergibt sich auch die
englische Bezeichnung Finite State Machine (FSM), also frei bersetzt Automat mit endlicher Anzahl an Zustnden.
Vielleicht fragen Sie sich jetzt, ob es berhaupt Automaten mit unendlicher Anzahl an
Zustnden gibt. Als reale Implementierung ist ein unendlich groer Speicher natrlich
nicht mglich, aber in der Theorie ist dies denkbar. In der theoretischen Informatik wird
die Turingmaschine verwendet, die einen unendlich groen Speicher hat und somit ein
unendlicher Automat ist. Mit dem Gedankenmodell der Turingmaschine wird die Berechenbarkeit von mathematischen Problemen analysiert.
5.2.1.1Mealy-Automat
Eine Grundform der endlichen Automaten ist der Mealy-Automat. Er wird durch drei
Gruppen an Variablen und zwei Funktionen definiert.
Die drei Gruppen an Variablen sind:
Eingangsvariablen, also Eingangswerte, die in die Schaltung hineingehen. Sie werden als X(0), X(1), X(2), sowie gemeinsam als Gruppe X bezeichnet.
Ausgangsvariablen, also Ausgangswerte, die aus der Schaltung herausgehen. Sie
werden als Y(0), Y(1), Y(2), sowie gemeinsam Y bezeichnet.
Zustandsvariablen, also interne Werte der Schaltung, die den Zustand speichern. Sie
werden als Z(0), Z(1), Z(2), sowie gemeinsam Z bezeichnet.
Die zwei Funktionen beschreiben die Zusammenhnge zwischen den Variablen:
Die Zustandsbergangsfunktion benutzt die Eingangsvariablen X und die aktuellen
Zustandsvariablen Zn, also Z vom aktuellen Zeitschritt n. Hiermit berechnet sie die
neuen Zustandsvariablen Zn+1 fr den nchsten Zeitschritt n+1. Als Funktion ausgedrckt lautet dies: Zn+1=f(X,Zn)
Die Ausgangsfunktion benutzt ebenfalls die Eingangsvariablen X und die aktuellen
Zustandsvariablen Zn, um die Ausgangsvariablen Y zu berechnen. Die Funktion lautet:
Y=g(X,Zn)
Diese Struktur ist in Abb.5.23 dargestellt. Eingangsvariable X und aktuelle Zustandsvariablen Zn gehen in die Zustandsbergangsfunktion. Dieser Block ist eine kombinatorische Schaltung aus UND-Gattern, ODER-Gattern und so weiter. Sie berechnet den
nchsten Zustand Zn+1. Die Speicherglieder sind D-Flip-Flops, die zurzeit noch den
aktuellen Zustand Zn speichern und bei der Taktflanke den neuen Zustand bernehmen.
131
X
Z
Zn
Ausgangsfunktion
Takt
Die Ausgangsfunktion ist ebenfalls eine kombinatorische Schaltung und berechnet aus X
und Zn die Ausgangsvariablen Y.
Spter in diesem Kapitel sind Beispiele fr Automaten angegeben, um Struktur und
Funktion des Mealy-Automaten zu verdeutlichen. Zunchst soll jedoch der andere
bedeutende Automatentyp vorgestellt werden.
5.2.1.2Moore-Automat
Der Moore-Automat hnelt dem Mealy-Automat, hat jedoch einen wesentlichen Unterschied. Die Ausgangsfunktion hngt nur von den aktuellen Zustandsvariablen Zn ab und
nicht von den Eingangsvariablen X. Die Funktion fr die Ausgangsvariablen Y lautet
also: Y=g(Zn)
Die Informationen der Eingangsvariablen beeinflussen also zunchst den Zustand und
der Zustand bestimmt dann den Ausgang. Die Struktur ist in Abb.5.24 zu sehen.
Verglichen mit dem Mealy-Automaten ist der Moore-Automat also etwas einfacher in
der Struktur. Grundstzlich knnen fr praktische Problemstellungen stets beide Automaten verwendet werden. Fr manche Problemstellungen ist ein Mealy-Automat besser
geeignet, fr andere ein Moore-Automat.
An den Beispielen, die spter in diesem Kapitel folgen, werden die Unterschiede
sowie Vor- und Nachteile deutlich.
5.2.1.3Medwedew-Automat
Der Medwedew-Automat ist ein Spezialfall des Moore-Automaten. Bei ihm sind die Ausgangsvariablen Y gleich den Zustandsvariablen Zn. Die Ausgangsfunktion ist also trivial
und gibt die Zustandsvariablen direkt weiter. In der Funktionsschreibweise lautet dies:
Y=Zn
Auf den Medwedew-Automat wird spter in Abschn.5.2.7 kurz eingegangen.
Takt
Ausgangsfunktion
132
5 Sequenzielle Schaltungen
Zustandsbergangsfunktion
X
&
n+1
1 Z (0)
Zn(0)
&
&
Ausgangsfunktion
&
n+1
1 Z (1)
D
C
CLK
Zn(1)
133
X
0
0
0
0
1
1
1
1
0
1
0
1
0
1
0
1
0
0
0
0
0
1
1
1
Zn(1) Z n(0)
0
0
0
0
1
0
1
1
0
0
1
1
0
1
0
1
0
0
0
1
Codierung Zustand
s
Z(1) Z(0)
0
0
1
1
0
1
0
1
A
B
C
D
134
5 Sequenzielle Schaltungen
Abb.5.28Zustandsfolgetabelle
sn
A
B
C
D
sn+1
X=0
X=1
A
A
A
A
B
C
D
D
0
0
0
1
Die bergnge zwischen den Zustnden lassen sich auch grafisch darstellen. Hierzu
dient das Zustandsfolgediagramm in Abb.5.29. Die Zustnde sind als Kreise angegeben
und enthalten auch die Ausgabewerte der jeweiligen Zustnde. Die bergnge zwischen
den Zustnden sind Pfeile. Bei jeder steigenden Taktflanke geht der Automat einen bergang, also einen Pfeil weiter. Am Pfeil steht jeweils die Bedingung, bei der der bergang
erfolgt, also X=0 oder X=1.
Da es fr X zwei Mglichkeiten gibt, gibt es fr jeden Zustand zwei mgliche Folgezustnde. Dabei ist es auch mglich, dass ein Zustand sein eigener Folgezustand ist.
Jeder Zustand ist Startpunkt fr genau zwei Pfeile. Fr die Endpunkte der Pfeile gibt es
keine Beschrnkung. Manche Zustnde knnen nur von einem Pfeil, also einem bergang erreicht werden. Andere Zustnde knnen das Ziel von mehreren Zustandsbergngen sein.
5.2.2.3Funktion
Durch das Zustandsfolgediagramm oder vielleicht bereits durch die Zustandsfolgetabelle
wird die Funktion des Automaten deutlich. Der Automat erkennt Folgen von 1 am Eingang X. Wenn der Eingang das dritte Mal 1 ist, wird auch der Ausgang 1 und bleibt 1 so
lange weiter eine 1 am Eingang anliegt. Wenn eine 0 am Eingang anliegt, geht der Ausgang auf 0 und es mssen wieder drei Werte mit 1 anliegen, damit der Ausgang 1 wird.
Wenn nach zweimal 1 bereits eine 0 am Eingang X anliegt, beginnt das Zhlen wieder
von neuem; es muss wieder dreimal eine 1 auftreten.
Dieses Verhalten wird durch die Zustnde wie folgt umgesetzt. Vergleichen Sie zur
Beschreibung die Zustandsfolgetabelle (Abb.5.28) und das Zustandsfolgediagramm
(Abb.5.29).
Bei einer 0 am Eingang geht der Automat in den Zustand A. Dieser Zustand hat also
die Bedeutung: Der letzte Eingangswert war 0.
Bei der ersten 1 geht der Automat in den Zustand B. Dieser Zustand hat die Bedeutung: Es gab bisher eine 1.
X=0
X=1
A
Y=0
X=0
Abb.5.29Zustandsfolgediagramm
X=1
B
Y=0
C
X=0 Y=0
X=1
X=0
X=1
D
Y=1
135
Wenn im Zustand B eine 0 anliegt, muss wieder von vorne gestartet werden und der
Automat geht nach A. Eine 1 im Zustand B wre jedoch die zweite 1 und der Automat
geht in den Zustand C mit der Bedeutung: Es gab bisher zweimal eine 1.
Eine weitere 1 wre die dritte 1 und dies soll der Automat ja erkennen. Dann geht der
Automat in den Zustand D und gibt am Ausgang eine 1 aus.
Bei jeder weiteren 1 bleibt der Automat in D und gibt weiter 1 aus. Der Zustand D hat
also die Bedeutung: Drei oder mehr Eingangswerte nacheinander waren 1.
Wie Sie aus der Beschreibung erkennen, hat also jeder Zustand eine bestimmte
Bedeutung.
Zustand: Der Zustand speichert Informationen aus der Vergangenheit, die fr die Funktion
erforderlich sind.
Abb.5.30 Zeitdiagramm fr
den analysierten Automaten
CLK
X
Zustand
Y
136
5 Sequenzielle Schaltungen
Ein Zeitdiagramm kann die Spezifikation ergnzen. Zeitdiagramme sind dabei aber nur
Beispiel und dienen der Illustration einer Spezifikation. Sie sind kein Ersatz fr eine Spezifikation, denn die Angabe aller mglichen Abfolgen von Eingangskombinationen und
Zustnden ist in einem Zeitdiagramm meist gar nicht mglich. Das Zeitdiagramm des
Entprell-Automaten in Abb.5.31 zeigt die Reaktion auf eine exemplarische Eingabe.
CLK
X
Y
137
Abb.5.32 zeigt den ersten Zustand. Um die Bedeutung anzudeuten, hat er den Namen
stabil 0. Zunchst wird ja nur der Fall betrachtet, dass der Eingang stets 0 ist, so dass
auch nur ein bergangspfeil eingetragen wird. Er fhrt wieder auf den Zustand stabil
0. Die Ausgabe des Zustands ist 0.
Dieser Zustand ist auch der Startzustand, denn laut Spezifikation soll beim Einschalten der Wert 0 ausgegeben werden. Dies wird durch einen Pfeil mit Reset
gekennzeichnet.
Schritt 2
Der Automat wird jetzt schrittweise erweitert. Als nchster Schritt wird angenommen,
dass der Eingang auf 1 wechselt und dann auf diesem Wert bleibt. Der Automat muss
mitzhlen, wie oft der Eingang 1 ist. Dieses Mitzhlen erfolgt durch die unterschiedlichen Zustnde, denn bei jedem Takt geht der Automat ja einen bergang, also einen
Pfeil weiter.
Die ersten beiden Male darf er laut Spezifikation noch nicht reagieren. Erst beim dritten Mal wird der Wechsel auf 1 akzeptiert und auch die Ausgabe geht auf 1.
Dieses Verhalten wird, wie in Abb.5.33 zu sehen, durch drei neue Zustnde erreicht:
Bei der ersten 1 merkt sich ein Zustand, dass einmal eine 1 aufgetreten ist. Dieser
Zustand wird als 1-mal 1 bezeichnet. Er hat noch die Ausgabe Y=0, da erst nach
drei Takten ein Wechsel akzeptiert werden soll.
Mit der zweiten 1 wird der Zustand 2-mal 1 erreicht.
se
Re
X=0
stabil 0
Y=0
Re
se
X=0
X=1
138
5 Sequenzielle Schaltungen
Mit der dritten 1 akzeptiert der Automat, dass der neue Wert lange genug aufgetreten
ist und jetzt stabil anliegt. Der neue Zustand stabil 1 hat die Ausgabe 1.
Wenn der Eingang danach weiterhin 1 ist, bleibt der Automat im Zustand stabil 1.
Schritt 3
Als weiterer Schritt kann der Weg von der Ausgabe 1 zurck zu 0 eingetragen werden.
Es wird angenommen, dass der Eingang jetzt wieder auf 0 wechselt und dort bleibt. Das
Verhalten des Automaten ist hnlich wie in Schritt 2, so dass jetzt zwei neue Zustnde
1-mal 0 und 2-mal 0 eingetragen werden (Abb.5.34). Danach wechselt der Automat
wieder in den zuerst eingetragenen Zustand stabil 0, ganz links.
Schritt 4
Als letzter Schritt wird berprft, ob alle bergnge fr die Zustnde eingetragen sind.
Bei n Eingangsvariablen hat jeder Zustand 2n Mglichkeiten fr Folgezustnde. Es mssen also prinzipiell 2n Pfeile vorhanden sein, wobei auch mehrere Pfeile auf den gleichen
Folgezustand fhren knnen.
Der hier betrachtete Automat hat eine Eingangsvariable X, mit zwei mglichen Werten 0 und 1. Darum muss jeder Zustand zwei bergnge, also zwei Pfeile haben. Hierzu
mssen noch einige Pfeile eingetragen werden.
Wenn bei 1-mal 1 der Eingang X auf 0 ist, wird das Zhlen der 1-Werte abgebrochen und der Automat geht wieder auf den Zustand stabil 0.
Auch bei 2-mal 1 ist fr X gleich 0 die erforderliche Anzahl von drei 1-Werten nicht
erreicht. Der Automat geht auf stabil 0.
Bei 1-mal 0 fehlt der bergang fr X gleich 1. In diesem Fall geht der Automat auf
stabil 1.
Bei 2-mal 0 ist fr X gleich 1 der Folgezustand ebenfalls stabil 1.
Abb.5.35 zeigt den kompletten Automaten. Alle Zustnde haben zwei Folgezustnde,
so dass keine bergnge fehlen.
Die Aufteilung in vier Schritte ergibt sich hier durch die berlegungen zu den Teilfunktionen des Automaten. Bei anderen Aufgabenstellungen knnen mehr oder weniger
Schritte sinnvoll sein.
t
se
Re
X=0
X=1
X=0
X=0
stabil 0 X=1 1-mal 1 X=1 2-mal 1 X=1 stabil 1 X=0 1-mal 0
2-mal 0
Y=0
Y=0
Y=0
Y=1
Y=1
Y=1
139
t
se
Re
X=0
X=0
X=1
X=0
stabil 0 X=1 1-mal 1 X=1 2-mal 1 X=1 stabil 1 X=0 1-mal 0
2-mal 0
Y=0
Y=0
Y=0
Y=1
Y=1
Y=1
X=0
X=1
X=0
X=1
sn
stabil 0*
1-mal 1
2-mal 1
stabil 1
1-mal 0
2-mal 0
sn+1
X=0
X=1
stabil 0
stabil 0
stabil 0
1-mal 0
2-mal 0
stabil 0
1-mal 1
2-mal 1
stabil 1
stabil 1
stabil 1
stabil 1
* = Reset
0
0
0
1
1
1
140
5 Sequenzielle Schaltungen
Der Entprell-Automat ist minimal, bentigt also mindestens sechs Zustnde, denn:
Die drei linken und die drei rechten Zustnde in Abb.5.35 haben unterschiedliche
Ausgaben.
Die Folgezustnde sind nicht gleich. Fr die drei linken Zustnde fhrt X=0 zwar
immer nach stabil 0. Fr X=1 sind jedoch unterschiedliche Folgezustnde vorhanden. hnliches gilt fr die drei rechten Zustnde.
Es gibt Algorithmen, mit denen quivalente Zustnde gefunden und der Automat minimiert werden knnen. In der Praxis werden diese Algorithmen aus zwei Grnden jedoch
selten verwendet. Zum einen knnen durch Betrachten eines Automaten recht gut quivalente Zustnde identifiziert werden. Zum anderen wird akzeptiert, wenn ein oder zwei
Zustnde zu viel vorhanden sind, solange die Struktur des Automaten verstndlich bleibt.
Beispiel fr die Minimierung von Zustnden
Unntige Zustnde entstehen, wenn im Zustandsfolgediagramm ein neuer Zustand
erstellt wurde, obwohl ein bereits vorhandener Zustand genutzt werden knnte. Schauen
Sie sich dazu noch einmal Schritt 3 der Erstellung des Zustandsfolgediagramms in
Abb.5.34 an. Hier fehlt noch der Fall, dass bei 1-mal 1, 2-mal 1 eine 0 auftritt, ein
Wechsel also nur einen oder zwei Takte lang ist. hnliches gilt fr 1-mal 0, 2-mal 0.
Man knnte jetzt fr diese fehlenden bergnge zwei neue Zustnde erstellen, und
zwar bleib 0 und bleib 1. Dies wre nicht ntig, denn die bergnge knnten nach
stabil 0 und stabil 1 gehen. Aber eventuell wird dies bei der Erstellung des Automaten nicht erkannt.
Von den Zustnden bleib 0 und bleib 1 gehen die bergnge auf sich selbst sowie
auf 1-mal 1 beziehungsweise 1-mal 0. Es entsteht das Diagramm in Abb.5.37. Dieses Zustandsfolgediagramm ist ein korrekter Automat, entsprechend der Spezifikation,
aber er ist nicht minimal, denn er verwendet acht statt der erforderlichen sechs Zustnde.
Zur Minimierung des Automaten in Abb.5.37 knnen bleib 0 und stabil 0 zusammengefasst werden. Sie sind quivalent, denn:
t
se
Re
X=0
X=0
X=1
X=0
stabil 0 X=1 1-mal 1 X=1 2-mal 1 X=1 stabil 1 X=0 1-mal 0
2-mal 0
Y=0
Y=0
Y=0
Y=1
Y=1
Y=1
X=0
bleib 0
Y=0
X=0
X=1
X=0
X=1
X=1
X=0
bleib 1
Y=1
X=1
141
Beide Zustnde haben die gleichen Folgezustnde, nmlich sich selbst fr X=0 und
1-mal 1 fr X=1.
Beide Zustnde geben Y=0 aus.
Gleiches gilt fr bleib 1 und stabil 1.
Damit ergibt sich wieder der minimale Automat aus Abb.5.35. Beide Automaten, also
Abb.5.37 und 5.35 sind quivalent, denn sie ergeben fr gleiche Eingaben auch die gleiche Ausgabe. Von auen, also ohne Sichtbarkeit des aktuellen Zustands, sind die Automaten nicht zu unterscheiden.
n ld m
Das Beispiel dieses Kapitels hat m=6 Zustnde, also ist n ld6=2,58 als Codewortlnge ntig. Da nur ganzzahlige Werte mglich sind, muss n mindestens 3 sein. Mit der
Zweierpotenz kann man hnlich rechnen. Fr n=3 gilt 23=8 6. Die Gegenprobe fr
n=2 zeigt, dass die kleinere Codewortlnge von zwei nicht mglich ist: 22=4< 6. Da
die Zweierpotenzen fr kleine Zahlen recht einfach zu merken sind, ist diese Rechenweise meist einfacher als der Logarithmus.
Tipp zur Berechnung: Taschenrechner haben normalerweise keine Taste fr den Zweierlogarithmus. Der Wert kann berechnet werden, als Zehnerlogarithmus einer Zahl geteilt durch
Zehnerlogarithmus von zwei:
ld m = log m / log 2
Fr m=6 lautet die Rechnung:
142
5 Sequenzielle Schaltungen
sn
stabil 0*
1-mal 1
2-mal 1
stabil 1
1-mal 0
2-mal 0
-
Zn
000*
001
010
011
100
101
110
111
n+1
sn
Z(2:0)
stabil 0
1-mal 1
2-mal 1
stabil 1
1-mal 0
2-mal 0
000
001
010
011
100
101
X=0
X=1
000
000
000
100
101
000
-----
001
010
011
011
011
011
-----
0
0
0
1
1
1
-
Dualzahlen durchnummeriert. Der Automat hat 6 Zustnde, die entsprechend der Tabelle
in Abb.5.38 mit dem Codewort Z(2:0) codiert werden. Da die Anzahl der Zustnde keine
Zweierpotenz ist, sind einige Codewrter unbenutzt, hier sind das die Codierungen 110
und 111.
143
Diagramme haben vier Eingangswerte, nmlich Eingangsvariable X und drei Zustandsvariable Zn(2:0). Da bei dem Moore-Automaten die Ausgabe unabhngig vom Eingang
ist, hat das Karnaugh-Diagramm fr Y nur drei Eingangswerte Zn(2:0).
Auf die Darstellung der Karnaugh-Diagramme wird hier verzichtet. Die minimierten
Funktionen sind:
Z n+1 (2) = X & Z n (1) & Z n (0) X & Z n (2) & Z n (0)
Z n+1 (1) = X & Z n (2) X & Z n (1) X & Z n (0)
Z n+1 (0) = X & Z n (2) X & Z n (1) X & Z n (0) Z n (2) & Z n (0)
Y = Z n (2) Z n (1) & Z n (0)
Mit diesen Funktionen ergibt sich fr den Automaten das Schaltbild aus Abb.5.40. Es
enthlt drei Flip-Flops fr die Zustandsvariablen sowie ein Dutzend Logik-Gatter fr
Zustandsbergangsfunktion und Ausgangsfunktion. Der Startzustand stabil 0 hat die
Codierung 000. Darum wird der Reset so geschaltet, dass alle Flip-Flops auf 0 gesetzt
werden.
Zustandsbergangsfunktion
X
&
Speicherglieder
n+1
(0)
&
n
Z (0)
D
C
Ausgangsfunktion
&
&
1 Zn+1(1)
&
Zn(1)
&
R
1
&
n+1
1 Z
(2)
&
CLK
RESET
Zn(2)
D
C
144
5 Sequenzielle Schaltungen
Damit ist der Automat komplett entworfen. In der Praxis wrde nun die Dokumentation folgen, die ein Nachvollziehen des Schaltungsentwurfs ermglicht. Auerdem
werden durch eine Dokumentation sptere Modifikationen vereinfacht, die sich eventuell
durch eine genderte Spezifikation ergeben.
145
One-Hot
sn
stabil 0
1-mal 1
2-mal 1
stabil 1
1-mal 0
2-mal 0
sn
stabil 0*
1-mal 1
2-mal 1
stabil 1
1-mal 0
2-mal 0
Zn(5:0)
Zn+1(5:0)
X=0
X=1
000001
000001*
000001
000010
000001
000100
010000
001000
100000
010000
000001
100000
sonst
-----* = Reset
000010
000100
001000
001000
001000
001000
------
Zero-One-Hot
Z (5:0)
Z (4:0)
000001
000010
000100
001000
010000
100000
00000
00001
00010
00100
01000
10000
Y
0
0
0
1
1
1
-
Aus der Ansteuerungstabelle werden wiederum die Logikfunktionen durch Minimierung erstellt. Fr den Folgezustand sind sieben Eingangswerte zu beachten, nmlich
sechs aktuelle Zustandsvariable sowie der Eingangswert X. Fr den Ausgang sind es die
sechs aktuellen Zustandsvariablen. Dies ist fr ein Karnaugh-Diagramm zu unbersichtlich, sodass eine rechnergesttzte Minimierung durchgefhrt wird. Das Ergebnis lautet:
146
5 Sequenzielle Schaltungen
Die Logik-Funktionen sind deutlich einfacher als bei der Variante mit minimaler
Codewortlnge. Es wird jeweils nur ein UND-Gatter mit zwei oder drei Eingngen
bentigt. Die Informationen mssen nur durch eine Stufe an Logikgattern, wodurch
die Schaltung prinzipiell schneller ist.
Die Schaltung des Automaten mit One-Hot-Codierung ist in Abb.5.43 dargestellt. Fr
den Startzustand (vgl. Abb.5.42) muss Zn(0) auf 1, die anderen Zustandsvariablen auf 0
gesetzt werden.
Auch im optischen Vergleich zu Abb.5.40 wird sichtbar, dass die One-Hot-Codierung
einen Nachteil durch zustzliche Flip-Flops und Vorteile durch weniger Logikgatter und
nur eine Logikstufe hat.
X
&
Zn+1(0)
D S
Zn(0)
&
Zn+1(1)
Zn(1)
D
C
R
&
&
Zn+1(2)
D
C
&
Zn+1(3)
Zn+1(4)
R
Zn(3)
D
C
&
Zn(2)
R
Zn(4)
D
C
CLK
RESET
147
5.2.4.3Optimierte Codierung
Um verschiedene Codierungen zu vergleichen, wird eine weitere Variante vorgestellt. Es
handelt sich um eine Codierung bei der die Code-Zuordnung optimiert wird. Dazu wird
die Zustandsfolgetabelle (vgl. Abb.5.36) genauer betrachtet. Wie in Abb.5.44 verdeutlicht, fallen zwei Dinge auf:
1. Drei der Zustnde knnen nur bei X=0 als Folgezustand auftreten, die drei anderen
Zustnde nur bei X=1.
2. Fr drei Zustnde ist die Ausgabe Y= 0, fr die drei anderen Zustnde ist Y= 1.
Diese beiden Eigenschaften knnen ausgenutzt werden, um die Codierung mglichst
einfach zu whlen.
1. Eine Zustandsvariable Z(0) wird entsprechend des Folgezustands gewhlt. Das heit,
die Zustnde, die Folgezustand bei X=0 sind, werden auch mit Z(0)=0 codiert. Die
anderen Zustnde, die Folgezustand bei X=1 sind, werden mit Z(0)=1 codiert.
2. Eine Zustandsvariable Z(1) wird entsprechend des Ausgabewertes gewhlt. Das heit,
die Zustnde mit Ausgangswert Y=0, werden mit Z(1)=0 codiert, die Zustnde mit
Y=1, haben Z(1)=1 als Code.
Weitere Zustandsvariable werden ohne besondere Zuordnung gewhlt. Dabei muss
beachtet werden, dass alle Zustnde unterschiedliche Codierungen bekommen. Fr die 6
Zustnde des Entprell-Automaten ist eine dritte Zustandsvariable Z(2) erforderlich. Die
Codierung hat hier minimale Codewortlnge; dies ist jedoch keine zwingende Bedingung fr eine optimierte Codierung.
Der gewhlte Code ist in Abb.5.45 dargestellt. Die Codierungen 100 und 011 werden
nicht verwendet.
Die Ansteuerungstabelle und die Logikfunktionen werden hier nicht gezeigt, sondern
direkt das Schaltbild des Automaten mit optimierter Codierung in Abb.5.46. Die beiden
Optimierungen sind direkt im Schaltbild zu erkennen. Da Z(0) entsprechend des Folgezustands gewhlt ist, wird direkt der Eingang X ohne weitere Verarbeitung gespeichert.
Und da Y(1) entsprechend des Ausgangs ist, kann diese Zustandsvariable direkt als Ausgang Y verwendet werden.
sn
sn+1
X=0
stabil 0 * stabil 0
1-mal 1
stabil 0
2-mal 1
stabil 0
stabil 1
1-mal 0
1-mal 0
2-mal 0
2-mal 0
stabil 0
* = Reset
Y
X=1
1-mal 1
2-mal 1
stabil 1
stabil 1
stabil 1
stabil 1
0
0
0
1
1
1
148
5 Sequenzielle Schaltungen
sn
Z ( 2 :0 )
0
0
1
1
0
1
stabil 0
1-mal 1
2-mal 1
stabil 1
1-mal 0
2-mal 0
Zn+1(0)
&
1 Zn+1(1)
Zustnde mit
Ausgabe Y=1'
Zn(1)
D
C
&
0
1
1
1
0
0
Zn(0)
D
C
0
0
0
1
1
1
&
1 Zn+1(2)
&
Zn(2)
D
C
CLK
RESET
149
Zunchst ist wichtig zu sagen, dass alle Automaten quivalent sind. Das heit, sie ergeben bei gleicher Eingabe auch die gleiche Ausgabe. Damit sind sie in ihrem logischen
Verhalten von auen nicht zu unterscheiden.
Ob allgemein eine Codierung mit minimaler oder redundanter Codewortlnge die
geeignete Schaltung ergibt, hngt von der Struktur des Automaten, den Anforderungen
und der Technologie der Schaltungsimplementierung ab. Es handelt sich um Strategien,
die bei der Schaltungsoptimierung probiert werden knnen.
In der Praxis muss der Aufwand fr eine Optimierung und der erzielte Nutzen beachtet
werden. Die Arbeitszeit, die fr eine optimale Zustandscodierung erforderlich ist, lohnt sich
meist nicht, denn in einer sehr groen Schaltung werden nur einige Logikgatter gespart.
Der Schaltungsentwurf erfolgt heutzutage mit Computer-Untersttzung. In Abschn.5.3
wird erlutert, wie die Zustandsfolgetabelle in VHDL umgesetzt werden kann. Die Codierung der Zustnde und Berechnung der Logikfunktionen erfolgt durch den Computer, der
eine Codierung mit minimaler oder redundanter Wortlnge whlt oder beide Mglichkeiten
ausprobiert. Die Optimierung der Zustandscodierung erfolgt also durch den Rechner. Sie
sollten die Rckmeldungen des Computers verstehen (z. B. Choosing One-Hot-Coding).
Moore
Mealy
S0
Y=0
X=0
S1
Y=1
S0
X=1
S2
Y=0
X=0,
Y=1
S1
X=1,
Y=0
S2
150
5 Sequenzielle Schaltungen
Moore
s
n+1
0
1
...
S0
S1
...
X=0 X=1
S0
S1
...
S1
S3
...
S2
S4
...
Mealy
s
n+1
,Y
X=0
X=1
S1,1
S3,0
...
S2,0
S4,1
...
Zustandsfolgetabelle ist dann die Ausgabe abhngig von Zustand und Eingang und wird
nicht einmal pro Zustand, sondern fr jede Eingangsspalte angegeben (Abb.5.48).
Diese Unterschiede erscheinen zunchst etwas formell. Sie erffnen jedoch weitere
Mglichkeiten fr den Entwurf eines Automaten. Um dies zu verdeutlichen, wird im folgenden Beispiel ein Mealy-Automat entworfen.
Auch hier wird die Spezifikation durch ein Zeitdiagramm ergnzt (Abb.5.49). Der Wert
von X wird immer bei der steigenden Taktflanke ausgewertet. Der erste Impuls mit 1
wird unterdrckt, der zweite Impuls fhrt zur Ausgabe 1. Wenn X dauerhaft auf 1 ist,
fhrt dies zu einer 0-1-Folge an Y.
CLK
X
Y
151
es
R
et
next-0
next-1
next-0: Die nchste 1 am Eingang wird unterdrckt. Dies ist laut Spezifikation der
Startzustand.
next-1: Die vorherige 1 wurde unterdrckt, also wird die nchste 1 des Eingangs an
den Ausgang weitergegeben.
Wie in Abb.5.50 zu sehen, ist fr die Zustnde keine Ausgabe definiert, da ein MealyAutomat entworfen wird.
Schritt 2
Fr die beiden Zustnde wird nun berlegt, was laut Spezifikation im Falle der Eingaben
X=0 und X=1 passieren muss.
Fr X=0 wird eine 0 ausgegeben. Das Zhlen der 1-Werte wird nicht beeinflusst,
darum ndert der Automat seinen Zustand nicht.
Fr X=1 sind zwei Flle mglich:
Im Zustand next-0 wird die 1 unterdrckt, also eine 0 ausgegeben. Der Automat
merkt sich, dass die nchste 1 weitergegeben wird, wechselt also nach next-1.
Im Zustand next-1 wird die 1 weitergegeben, also eine 1 ausgegeben. Der Automat
merkt sich, dass die nchste 1 wieder unterdrckt wird, wechselt also nach next-0.
Damit sind fr alle Zustnde beide mgliche Folgezustnde definiert und das
Zustandsfolgediagramm in Abb.5.51 ist komplett. Es werden zwei Zustnde bentigt,
die sich nicht zusammenfassen lassen.
Der Unterschied zum Moore-Automaten zeigt sich in der Definition der Ausgangswerte. Beim Mealy-Automat in Abb.5.51 sind die Ausgnge fr die Zustandsbergnge,
X=0, Y=0
X=0, Y=0
X=1, Y=0
es
et
next-0
next-1
X=1, Y=1
152
5 Sequenzielle Schaltungen
also fr die Pfeile definiert. Beim Moore-Automat in Abb.5.35 sind die Ausgnge fr die
Zustnde, also die Kreise definiert.
Zustandsfolgetabelle
Die Zustandsfolgetabelle (Abb.5.52) kann direkt aus dem Diagramm erstellt werden. Wie erlutert ist die Ausgabe abhngig von Zustand und Eingang. Darum wird sie
zusammen mit dem Folgezustand fr jede Eingangsspalte in der Form sn+1,Y angegeben.
sn+1,Y
X=0
X=1
next-0 *
next-0, 0
next-1
next-1, 0
* = Reset
next-1, 0
next-0, 1
Speicherglied
Ausgangsfunktion
&
=1
Zn+1
Zn
D
C
CLK
RESET
153
Abb.5.54 Vereinfachte
Darstellung eines
Zustandsfolgediagramms
Ein- /Ausgnge
A1,A2 / P,T
00 / 01
Zustnde:
S0 - Start
S1 - ...
S0
01 / 00
10 / 00
11 / 11
Eingnge: A, B
A=0
A=1
S0
B=1
B=0
0X
S1
S0
1X
X0
S1
X1
154
5 Sequenzielle Schaltungen
Dies macht ihn jedoch im Entwurf auch etwas komplexer. Der Moore-Automat hat hingegen den Vorteil, dass weniger Flle fr die Ausgabe definiert werden mssen, was ihn
bersichtlicher macht.
Moore-Automat
Wegen der besseren bersichtlichkeit wird in der Praxis meist der Moore-Automat verwendet. Die Zustnde des Moore-Automaten entsprechen oft einer bestimmten Ausgabesituation, sodass die Funktion des Automaten einfacher nachvollzogen werden kann.
Die bersichtlichkeit eines Schaltungsentwurfs erhht seine Wartbarkeit. Damit ist
nicht die Reparatur einer defekten Schaltung gemeint, sondern die Mglichkeit, einen
Entwurf spter einmal zu ndern und anzupassen. Je bersichtlicher ein Schaltungsentwurf ist, umso hher ist die Wartbarkeit.
Mealy-Automat
Ein wesentlicher Vorteil des Mealy-Automaten ist dessen Geschwindigkeit. Der MooreAutomat geht fr eine nderung der Ausgabe in einen neuen Zustand, was stets einen
Taktzyklus dauert. Fr viele Anwendungen stellt diese Verzgerung kein Problem dar.
Manchmal muss eine Schaltung jedoch sehr schnell reagieren, ohne auf ein Taktsignal
zu warten. Dies kann zum Beispiel bei Bussystemen wie dem PCI-Bus im PC der Fall
sein. Fr solche Flle kann der Mealy-Automat noch im gleichen Taktzyklus eine Antwort geben. Dies ist auch im Zeitablauf von Abb.5.49 ersichtlich. Die 1-Impulse werden
im gleichen Taktzyklus weitergegeben. Es tritt nur eine kleine Verzgerung durch das
UND-Gatter der Ausgangsfunktion auf.
Verwendung beim Automatenentwurf
Es wird empfohlen, im Normalfall einen Automaten als Moore-Automaten zu entwerfen.
Nur wenn der Automat noch im gleichen Taktzyklus eine Antwort ausgeben muss, empfiehlt sich der Einsatz eines Mealy-Automaten.
5.2.7 Registerausgabe
5.2.7.1Taktkonzept
Mit der bisher gezeigten Struktur erfolgt fr die Automaten die Ausgabe der Signalwerte
Y aus einer kombinatorischen Verknpfung. In der Praxis ist es vorteilhaft, wenn Teilschaltungen klare Schnittstellen zu den folgenden Teilschaltungen haben. Deshalb wird
oft ein Taktkonzept verwendet, bei dem die Ausgnge von Teilschaltungen immer aus
einem Flip-Flop stammen mssen. Man spricht auch von einer Registerausgabe.
Fr den Mealy-Automaten ist eine Registerausgabe normalerweise nicht erwnscht,
denn der Vorteil bei diesem Automaten ist ja gerade die Reaktion der Schaltung ohne
Warten auf das nchste Taktsignal.
155
Zustandsbergangsfunktion
Zn+1
SpeicherGlieder
(Flip-Flops)
Zn
Ausgangsfunktion
Takt
Ausgangsfunktion
X
Zn
Zustandsbergangsfunktion
Y*
Zn+1
Takt
Y
SpeicherGlieder
(Flip-Flops)
Z
156
5 Sequenzielle Schaltungen
gezogen und der Wert Y* in einem Speicherglied gespeichert. Die vernderte Schaltung
ist in Abb.5.57 dargestellt. Die Gre der Schaltung ndert sich nicht. Lediglich fr den
Ausgangswert Y wird ein weiteres Flip-Flop bentigt, aber genau dieses Flip-Flop ist ja
erwnscht.
5.2.7.4Medwedew-Automat
Der Medwedew-Automat ist ein Spezialfall des Moore-Automaten, bei dem die Ausgangsvariablen Y gleich den Zustandsvariablen Zn sind. Darum sind fr den MedwedewAutomat keine weiteren Ausgangs-Flip-Flops erforderlich, weil die Ausgangsvariablen ja
bereits aus einem Flip-Flop kommen. Diese Struktur zeigt Abb.5.58.
Fr bestimmte Anwendungen lsst sich beim Entwurf eines Moore-Automaten einplanen, dass die Zustandsvariablen auch als Ausgangsvariablen verwendet werden. Ein
Beispiel hierfr ist die optimierte Codierung des Entprell-Automaten (Abschn.5.2.4.3),
bei dem eine Zustandsvariable gleich dem Ausgang gewhlt wurde. Auch ein Zhler ist
ein Medwedew-Automat. Er gibt nacheinander Zahlenwerte aus, wie 0, 1, 2, 3, Diese
Zahl wird als Zustand gespeichert und ist die Ausgabe.
In der Praxis wird in vielen Fllen der Aufwand fr zustzliche Ausgangs-Flip-Flops
akzeptiert. Der Arbeitsaufwand fr eine spezielle Codierung wird hingegen vermieden.
Ausgangsfunktion
Zustandsbergangsfunktion
X
&
n+1
(0)
&
Y*
1
D
C
&
&
&
Speicherglieder
R
Zn(0)
D
1 Zn+1(1)
&
R
Zn(1)
D
C
&
n+1
1 Z
(2)
&
CLK
RESET
R
Zn(2)
D
C
157
X
Z
Takt
5.2.8.1Struktur
Bei asynchronen Automaten sind keine Flip-Flops zur Datenspeicherung vorhanden. Die
Zustandsinformation wird stattdessen direkt vom Ausgang der Zustandsbergangsfunktion zurck nach dessen Eingang gegeben. Die Speicherung der Information findet in der
Verzgerung der Logikgatter und der Verbindungsleitungen statt.
Abb.5.59 zeigt diese Struktur. Die kombinatorische Schaltung besteht aus den Logikgattern fr Zustandsbergangsfunktion und Ausgabefunktion. Der als Verzgerung angegebene Block ist kein reales Bauelement, sondern symbolisiert das Zeitverhalten der
Logikgatter.
Asynchrone Automaten haben in der Theorie einige Vorteile gegenber synchronen
Automaten, also Automaten mit Flip-Flops:
Hhere Geschwindigkeit, denn der Takt muss nicht auf die langsamste Verzgerung
der kombinatorischen Schaltung warten.
Niedrigerer und gleichmigerer Stromverbrauch, denn bei synchronen Schaltungen
sind bei den Taktflanken Hunderttausende von FFs gleichzeitig aktiv.
Geringere Strausstrahlung, denn es gibt keinen Takt.
In der Praxis gibt es jedoch auch schwerwiegende Nachteile, die gleich in Abschn.5.2.8.3
folgen.
X
Z
Y
Kombinatorische
Schaltung
Verzgerung
n+1
158
Abb.5.60 Strukturelemente
des asynchronen Automaten
beim RS-Flip-Flop
5 Sequenzielle Schaltungen
Kombinatorische Schaltung
R
S
1
1
159
signal a, b : std_logic;
process
begin
wait until rising_edge(clk);
b <= a;
end process;
Im VHDL-Code sind nur die Definition von a und b sowie der Prozess gezeigt. Entity
und Architecture-Definition werden zur besseren bersicht zunchst weggelassen. Ein
vollstndiges Beispiel folgt spter. Das Taktsignal clk ist ein normales Signal in VHDL;
oft ist es direkt ein Eingangssignal der Schaltung.
Das Beispiel beschreibt ein einfaches D-Flip-Flop. Mit der steigenden Taktflanke wird
der Wert des Signals a im Signal b gespeichert. Diese Beschreibung entspricht einem
D-Flip-Flop entsprechend Abb.5.61.
Die Schreibweise rising_edge() ist fr die Beschreibung sequenzieller Schaltungen
sehr wichtig. Syntheseprogramme erkennen diese Funktion und generieren eine Schaltung mit D-Flip-Flops. Es gibt auerdem die Variante falling_edge(). Hiermit wird eine
Funktion beschrieben, die bei einer fallenden Taktflanke aktiv ist. Entsprechend werden
D-Flip-Flops generiert, die mit der fallenden Taktflanke aktiv sind.
a
clk
D
C
160
5 Sequenzielle Schaltungen
process
begin
wait until rising_edge(clk);
if count > 10 then
overflow <= '1';
else
overflow <= '0';
end if;
end process;
Nach dem Wait-Statement wird eine If-Abfrage mit der Konstanten zehn geschrieben.
Ein Syntheseprogramm wrde hieraus die Schaltung in Abb.5.62 synthetisieren. Der
Vorteil von VHDL ist, dass man sich ber die Logikfunktion keine Gedanken machen
muss. Auch nderungen sind einfach. Wenn der berlauf nicht bei Werten grer zehn,
sondern bei elf oder zwlf erfolgen soll, wird einfach die Zahl im VHDL-Code gendert
und das Synthese-Programm berechnet die neue Schaltung.
value(3)
value(2)
&
value(3)
value(1)
value(0)
&
clk
D
C
overflow
161
egal auf welche Polaritt initialisiert wird. Fr die Else-Verzweigung werden als Beispiel
einfache kombinatorische Verknpfungen aufgerufen.
process
begin
wait until rising_edge(clk);
if reset = '1' then
f <=
g <=
else
f <=
g <=
end if;
'0';
'1';
a or b;
b and c and d;
end process;
162
5 Sequenzielle Schaltungen
process(clk, reset)
begin
if reset = '1' then
f <= '0';
g <= '1';
elsif rising_edge(clk) then
f <= a or b;
g <= b and c and d;
end if;
end process;
Die Syntax von if reset = 1 then und elsif rising_edge(clk) then muss unbedingt
eingehalten werden. Nur so kann das Syntheseprogramm erkennen, dass es ein D-FlipFlop mit Reset oder Set einbauen soll. Zwischen end if; und end process; darf kein anderer VHDL-Code eingeschoben werden. Natrlich kann auch ein Flip-Flop mit fallender
Taktflanke erzeugt werden, indem die Abfrage auf falling_edge(clk) erfolgt.
Wie zuvor sind fr den Reset-Fall nur feste Werte, also 0 oder 1 mglich. Bei der
Anweisung f <= 0; wird ein Flip-Flop mit Reset erzeugt, bei f <= 1; ein Flip-Flop
mit Set. Falls keine Konstante fr den Reset-Fall angegeben ist, wrde das Syntheseprogramm einen Fehler ausgeben. Der Grund hierfr ist, dass es fr diese Beschreibung kein
passendes Schaltungselement gibt. Angenommen im Reset-Fall stnde die Anweisung f
<= a;. Bei a=0 soll ein asynchroner Reset erfolgen, bei a=1 ein asynchroner Set. Das
Syntheseprogramm muss aber entweder ein Flip-Flop mit Set oder mit Reset einbauen.
Da dies nicht mglich ist, erfolgt die Fehlermeldung.
5.3.3.3Enable
Auch eine Enable-Funktionalitt wird durch eine If-Abfrage beschrieben. Die EnableAbfrage enthlt keine Else-Beschreibung. Wenn enable aktiviert ist, wird der neue Wert
bernommen, ansonsten findet keine nderung statt. Der folgende VHDL-Code erzeugt
zwei D-Flip-Flops mit Enable.
process
begin
wait until rising_edge(clk);
if enable = '1' then
f <= a or b;
g <= b and c and d;
end if;
end process;
Enable und Reset/Set knnen auch miteinander kombiniert werden. Dabei wird zuerst
die If-Anweisung fr die Rcksetzfunktion geschrieben, denn die Initialisierung hat normalerweise eine hhere Prioritt als der Enable-Eingang.
163
Dieser Befehl definiert nur, dass es einen neuen Datentyp gibt. Zustzlich muss noch
ein Signal mit diesem Datentyp erzeugt werden. Dies erfolgt mit dem Befehl:
signal<signal_name> : <type_name>;
In diesem Abschnitt soll der Entprell-Automat aus Abschn.5.2.3 als Beispiel verwendet werden. Der Automat hat sechs Zustnde, die erst als Datentyp definiert und dann
als Signal verwendet werden. Die Zustandsnamen des Beispiels mssen leicht angepasst
werden, da VHDL-Signale nicht mit Ziffern beginnen und keine Leerzeichen enthalten
drfen. Das Zustandsfolgediagramm Abb.5.35 ist mit den angepassten Zustandsnamen
in Abb.5.63 noch einmal dargestellt.
Damit lautet die Signaldefinition in VHDL:
t
se
Re
X=0
stabil_0
Y=0
X=1
X=0
X=0
X=1
X=1
X=0
einmal_1
zweimal_1
stabil_1
einmal_0
zweimal_0
Y=0
Y=0
Y=1
Y=1
Y=1
X=0
X=1
X=0
X=1
X=1
164
5 Sequenzielle Schaltungen
Die Funktion des Automaten wird dann in einem synchronen Prozess umgesetzt.
Zunchst wird mit einem Reset der Startzustand programmiert und auch die Ausgabe Y
des Automaten auf einen Startwert gesetzt. Laut Zustandsfolgediagramm Abb.5.63 ist
stabil_0 mit Y=0 der Startzustand. Dies schreibt sich in VHDL:
process
begin
wait until rising_edge(clk);
if reset = '1' then
state <= stabil_0;
y<= '0';
else
Als nchstes folgt die Beschreibung der einzelnen Zustnde. Hierfr wird ein CaseStatement mit dem Zustandssignal als Operator verwendet. Die Zustnde sind die WhenBedingungen. Innerhalb der When-Bedingungen wird dann Folgezustand und Ausgabe
fr den Folgezustand beschrieben. Die Abhngigkeit von den Eingangswerten wird
durch ein If-Statement oder ein Case-Statement beschrieben.
Der folgende VHDL-Code gilt wieder fr den Entprell-Automaten. Er beschreibt das
Case-Statement abhngig von Zustandssignal state und den ersten Fall fr den Zustand
stabil_0. Der Folgezustand ist abhngig vom Eingang x, und wird als If-Statement
beschrieben. Die Beschreibung fr die weiteren Zustnde erfolgt in der gleichen Weise
und wird hier zunchst bersprungen. Der komplette VHDL-Code steht im folgenden
Unterabschnitt.
Beachten Sie, dass mit den Folgezustnden jeweils die neuen Ausgabewerte beschrieben werden. Im folgenden VHDL-Code gibt es den Folgezustand stabil_0, der die Ausgabe Y gleich 0 hat, sowie den Folgezustand einmal_1, der ebenfalls die Ausgabe Y
gleich 0 hat. Durch diese Schreibweise wird ein Moore-Automat mit Registerausgabe
erzeugt, wie in Abschn.5.2.7 beschrieben.
case state is
when stabil_0 =>
if x='0' then
state <= stabil_0;
y <= '0';
else
state <= einmal_1;
y <= '0';
165
end if;
when einmal_1 =>
end case;
Die Beschreibung der einzelnen Zustnde kann direkt aus dem Zustandsfolgediagramm (Abb.5.63) und der Zustandsfolgetabelle bertragen werden.
Damit ist die komplette Funktion des Automaten beschrieben. Der komplette VHDLCode mit Aufruf der IEEE-Bibliothek, Entity und Architecture ist im folgenden Unterkapitel angegeben. Die If-Statements fr die Folgezustnde werden in drei Zeilen
formatiert, um den Automaten kompakter und damit bersichtlicher zu beschreiben. Die
Formatierung hat keine Auswirkung auf die Bedeutung des VHDL-Codes und sollte gut
lesbar gestaltet werden.
begin
process
begin
wait until rising_edge(clk);
if reset = '1' then
166
elsestate <=
end if;
when einmal_1 =>
if x='0' thenstate <=
elsestate <=
end if;
when zweimal_1 =>
if x='0' thenstate <=
elsestate <=
end if;
when stabil_1 =>
if x='1' thenstate <=
elsestate <=
end if;
when einmal_0 =>
if x='1' thenstate <=
elsestate <=
end if;
when zweimal_0 =>
if x='1' thenstate <=
elsestate <=
end if;
end case; -- state
end if; -- reset
end process;
end;
5 Sequenzielle Schaltungen
einmal_1;y <= '0';
5.4bungsaufgaben
167
5.4 bungsaufgaben
Haben Sie den Inhalt des Kapitels verstanden? Prfen Sie sich mit den Aufgaben und
Fragen am Kapitelende. Die Lsungen und Antworten finden Sie am Ende des Buches.
Bei den Auswahlfragen ist immer genau eine Antwort korrekt.
Bitte versuchen Sie unbedingt, die Aufgaben zu den Automaten zuerst selber zu lsen.
Nur durch bung lernen Sie den Entwurf von Automaten. Die Lsungen sind bewusst
sehr knapp gehalten und werden am besten verstanden, wenn Sie vorher selbst eine
Lsung ermittelt haben.
Aufgabe 5.1
Was gilt fr ein RS-Flip-Flop (RS-FF)?
a) Daten werden unabhngig von einem Takt gespeichert
b) Daten werden bei Takt gleich 1 gespeichert
c) Daten werden bei Takt gleich 0 gespeichert
d) Daten werden bei einer Taktflanke gespeichert
Aufgabe 5.2
Welche Ansteuerung fr Flip-Flops ist heutzutage blich?
a) Taktflanke
b) Unabhngig vom Takt
c) Taktpegel
Aufgabe 5.3
Wie reagiert ein D-Flip-Flop (D-FF) auf einen asynchronen Reset?
a) Ausgang geht bei der nchsten Taktflanke auf 0
b) Ausgang geht sofort auf 1
c) Ausgang geht bei der nchsten Taktflanke auf 1
d) Ausgang geht sofort auf 0
Aufgabe 5.4
Wie reagiert ein D-Flip-Flop (D-FF) auf einen synchronen Set?
a) Ausgang geht bei der nchsten Taktflanke auf 0
b) Ausgang geht sofort auf 1
c) Ausgang geht bei der nchsten Taktflanke auf 1
d) Ausgang geht sofort auf 0
168
5 Sequenzielle Schaltungen
Aufgabe 5.5
Ein Automat, bei dem der Ausgang nur vom Zustand und NICHT von den momentanen
Eingangswerten abhngt, bezeichnet man als,
a) Endlicher Automat
b) Mealy-Automat
c) Moore-Automat
d) Turing-Automat
e) Medwedew-Automat
Aufgabe 5.6
Ein Automat, bei dem der Ausgang vom Zustand UND von den momentanen Eingangswerten abhngt, bezeichnet man als,
a) Endlicher Automat
b) Moore-Automat
c) Medwedew-Automat
d) Turing-Automat
e) Mealy-Automat
Aufgabe 5.7
Betrachten Sie die Taktsignale in Abb.5.64. Wie gro ist fr die Diagramme a) bis c)
jeweils:
Periodendauer
Taktfrequenz
Duty Cycle der 1-Phase
Abb.5.64 Taktsignale
a)
CLK
t
0 ns
b)
100 ns
200 ns
300 ns
CLK
t
0 ms
c)
1 ms
2 ms
3 ms
CLK
t
0 ms
1 ms
2 ms
3 ms
5.4bungsaufgaben
169
Aufgabe 5.8
Ein Automat mit 11 Zustnden soll mit minimaler Codewortlnge codiert werden. Wie
viele Stellen muss das Codewort haben?
Aufgabe 5.9
Ein Automat mit 9 Zustnden soll mit einer One-Hot-Codierung codiert werden. Wie
viele Stellen muss das Codewort haben?
Aufgabe 5.10
Wie viele Zustnde knnen bei minimaler Codewortlnge mit 5 Stellen codiert werden?
Aufgabe 5.11
Wie viele Zustnde knnen mit einer One-Hot-Codierung mit 8 Stellen codiert werden?
Aufgabe 5.12
Die Jalousie an einem Fenster soll durch einen einzelnen Taster angesteuert werden. Um
nur einen Taster zu verwenden, ndert sich die Bewegungsrichtung der Jalousie bei jeder
neuen Bettigung des Tasters. Solange wie der Taster gedrckt gehalten wird, bewegt
sich die Jalousie nach oben oder nach unten. Beim Loslassen stoppt die Jalousie, kann
also auch halb oder zweidrittel geschlossen werden.
Beispiel:
Der Taster wird gedrckt und festgehalten: Die Jalousie bewegt sich nach unten.
Der Taster wird losgelassen: Die Jalousie stoppt.
Der Taster wird gedrckt und festgehalten: Die Jalousie bewegt sich nach oben.
Der Taster wird losgelassen: Die Jalousie stoppt.
Der Taster wird gedrckt und festgehalten: Die Jalousie bewegt sich nach unten.
Nach dem Start soll sich die Jalousie bei Tastendruck zuerst nach unten bewegen. Das
Ende der Bewegung, also ganz offen oder ganz geschlossen, wird nicht berprft, da der
Motor dann selbststndig stoppt.
Die Jalousie soll durch einen Moore-Automaten angesteuert werden. Der Taster liegt
am Eingang T und ist 1, wenn er gedrckt wird. Der Motor wird durch zwei Ausgnge
M(1:0) angesteuert. Die Bedeutung ist:
170
5 Sequenzielle Schaltungen
a) Stellen Sie das Zustandsfolgediagramm auf. Verwenden Sie so wenige Zustnde wie
mglich.
b) Erstellen Sie die Zustandsfolgetabelle.
Aufgabe 5.13
Mit einem Automaten sollen Parkmnzen zum Preis von 50 Cent verkauft werden. Ein
elektromechanisches System erkennt Mnzen im Wert von 10, 20 und 50 Cent und meldet eine eingeworfene Mnze auf zwei Leitungen M(1:0). Wird keine Mnze eingeworfen, ist M=00. Erkannte Mnzen werden mit einem Signal der Lnge eines Taktes
angezeigt. Die Mnzen werden wie folgt codiert:
M=01 10 Cent
M=10 20 Cent
M=11 50 Cent
Werden insgesamt mehr als 50 Cent eingeworfen, wird das brige Geld einbehalten.
Beispiele fr erlaubte Kombinationen sind also:
Entwerfen Sie einen Moore-Automaten, der die Leitungen M(1:0) auswertet und
nach Einwurf eines Betrags von mindestens 50 Cent einen Ausgang P fr einen Takt auf
1 schaltet, um eine Parkmnze auszugeben. Danach kann erneut Geld fr die nchste
Parkmnze eingeworfen werden. Aufgrund der mechanischen Auswertung vergehen zwischen zwei Mnzeinwrfen mehrere Takte.
a) Stellen Sie das Zustandsfolgediagramm auf. Verwenden Sie so wenige Zustnde wie
mglich.
b) Erstellen Sie die Zustandsfolgetabelle.
Aufgabe 5.14
Der Automat zum Halbieren der Takte mit dem Wert 1 aus Abschn.5.2.5 soll als MooreAutomat entworfen werden.
Wenn am Eingang X der Wert 1 anliegt, soll fr jeden zweiten Wert eine 1, ansonsten
eine 0 am Ausgang Y ausgegeben werden. Die Zhlung soll durch Eingangswerte 0 nicht
beeinflusst werden. Bei einer 0 am Eingang soll 0 ausgegeben werden. Beim Einschalten
soll fr die erste 1 der Wert 0 ausgegeben werden. Der Zeitablauf entspricht Abb.5.49,
allerdings ist die Ausgabe bis zur nchsten Taktflanke verzgert (da Moore-Automat).
5.4bungsaufgaben
171
a) Stellen Sie das Zustandsfolgediagramm auf. Verwenden Sie so wenige Zustnde wie
mglich.
b) Erstellen Sie die Zustandsfolgetabelle.
Aufgabe 5.15
Auf einer Datenleitung D werden Datenworte der Lnge 4 bertragen. Die Datenworte
bestehen aus drei Stellen Nutzinformation und einer vierten Stelle zur Fehlererkennung,
der Parity-Stelle. Diese vierte Parity-Stelle ist so gewhlt, dass die Anzahl der 1-Stellen
im Datenwort immer ungerade ist. Ein Fehler bei der bertragung kann erkannt werden,
wenn beim Empfnger die Anzahl der 1-Stellen, also die Paritt, gerade ist.
Entwerfen Sie einen Mealy-Automaten, der die Datenleitung D berwacht und ein
falsches Datenwort erkennt. Wenn ein falsches Datenwort mit gerader Anzahl der 1-Stellen auftritt, soll der Ausgang E (Error) fr einen Takt auf 1 sein. Innerhalb eines Datenwortes und wenn kein Fehler auftritt, ist E auf 0.
Abb.5.65 ist ein Beispiel fr einen Zeitablauf. Die Klammern kennzeichnen die
Datenworte.
Das erste Datenwort hat zwei 1-Stellen, also fehlerhaft, da Paritt gerade.
Das zweite Datenwort hat drei 1-Stellen, also korrekt, da Paritt ungerade.
Das dritte Datenwort hat vier 1-Stellen, also fehlerhaft, da Paritt gerade.
a) Stellen Sie das Zustandsfolgediagramm auf. Verwenden Sie so wenige Zustnde wie
mglich.
b) Erstellen Sie die Zustandsfolgetabelle.
Hinweise:
Der Automat muss mitzhlen, wie viele Stellen und welche Werte empfangen wurden.
Es mssen nicht alle verschiedenen Kombinationen unterschieden werden. Es sind
weniger als zehn Zustnde ntig.
Achten Sie darauf, dass nach der vierten Stelle sofort das neue Datenwort beginnt.
Der Automat darf keine Pause einlegen.
&/.
'
(
Schaltungsstrukturen
In den Kapiteln4 und 5 wurde gezeigt, wie aus einer Aufgabenstellung eine kombinatorische oder sequenzielle Schaltung entwickelt werden kann. Dieser allgemeine Entwurfsweg ist prinzipiell fr jede Spezifikation mglich. Fr bestimmte Aufgabenstellungen
kann es aber auch einfacher gehen. Es gibt einige Grundstrukturen, die hufig in digitalen Schaltungen vorkommen und solche Strukturen werden in diesem Kapitel vorgestellt.
Die Strukturen knnen durch eine Beschreibung in VHDL erzeugt werden.
173
174
6Schaltungsstrukturen
Beispielsweise lsst sich ein Mikrocontroller (siehe Kap.13 und 14) in die folgenden
Teilschaltungen aufteilen:
Der Mikrocontroller besteht aus den Untermodulen CPU, Speicher, Eingabe, Ausgabe,
Bussystem,
Die CPU besteht aus den Untermodulen Rechenwerk, Steuerwerk, Register, Speicherinterface,
Das Steuerwerk besteht aus Programmzhler, Befehlsdecoder,
Der Programmzhler wird durch die Grundstruktur Zhler implementiert.
Der Vorteil dieser Vorgehensweise ist, dass die Untermodule einzeln entworfen werden
knnen. Dies ist bersichtlich und erlaubt auch eine Aufteilung auf mehrere Personen
oder, bei greren Projekten, sogar auf mehrere Standorte eines Unternehmens.
Die einzelnen Teilschaltungen werden dann Schritt fr Schritt zur Gesamtschaltung
zusammengesetzt. Dieses Zusammenfgen wird als Bottom-up bezeichnet.
Abb.6.1 Standardisierte
Darstellung eines
Schaltungselements
A
B
**
D(0)
D(1)
D(2)
Y(0)
Y(1)
Y(2)
175
A(0)
A(1)
D(0)
D(1)
D(2)
D(3)
1
2
3
MUX
A(0)
A(1)
} G 03
Y
D(0)
D(1)
D(2)
D(3)
A(1:0)
Y
0
0
1
1
0
1
0
1
Y
D(0)
D(1)
D(2)
D(3)
176
case a is
when "00"=>
when "01"=>
when "10"=>
when others =>
end case;
6Schaltungsstrukturen
y
y
y
y
<=
<=
<=
<=
d(0);
d(1);
d(2);
d(3);
Die Case-Anweisung kann nur innerhalb eines Prozesses aufgerufen werden. Die
VHDL-Befehle fr den Prozess werden hier und in den folgenden Beispielen zur besseren bersichtlichkeit weggelassen. Der Others-Fall ist erforderlich, um alle mglichen
Werte des Datentyps std_logic zu erfassen, also zum Beispiel auch X oder U.
6.2.2 Demultiplexer
Die entgegengesetzte Schaltung ist der Demultiplexer, kurz Demux. Abhngig von
Steuersignalen A wird ein Eingangssignal D auf einen von mehreren mglichen Ausgngen Y gelegt. Die anderen Ausgnge sind 0. Genau wie beim Multiplexer gibt es
Varianten mit verschiedener Anzahl an Wahlmglichkeiten, also 1-auf-2, 1-auf-4, 1-auf8-Demultiplexer oder auch grere Schaltungen. Abb.6.3 zeigt das Symbol und die
Funktionstabelle fr einen 1-auf-4-Demultiplexer.
Die Begriffe Multiplexer und Demultiplexer stammen von einer mglichen Anwendung, bei der sich mehrere Signalwege eine gemeinsame Leitung teilen. Dies ist in
Abb.6.4 dargestellt. Die Schaltungsstrukturen werden jedoch auch fr andere Anwendungen eingesetzt.
Eine andere Bezeichnung fr den Demultiplexer ist Adressdecoder. Dabei whlt eine
Binrzahl mit n Stellen eine von 2n Ausgangsleitungen und eine weitere Steuerleitung G
aktiviert den Ausgang. Die Funktionstabelle fr 8 Ausgangsleitungen ist in Abb.6.5 dargestellt. Eine beispielhafte Anwendung ist, dass eine Adresse einen von 8 Speicherbausteinen
A(0)
A(1)
D
A(1:0)
0
0
1
1
Y(0)
Y(1)
Y(2)
Y(3)
A(1:0)
D(0)
D(1)
D(2)
D(3)
0
1
0
1
Y(3:0)
0
0
0
D
0
0
D
0
0
D
0
0
D
0
0
0
A(1:0)
Y(0)
Y(1)
Y(2)
Y(3)
177
G A(2:0) Y(7) Y(6) Y(5) Y(4) Y(3) Y(2) Y(1) Y(0)
0
1
1
1
1
1
1
1
1
X
0
0
0
0
1
1
1
1
X
0
0
1
1
0
0
1
1
X
0
1
0
1
0
1
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
y(0)
y(1)
y(2)
y(3)
<=
<=
<=
<=
d;
d;
d;
d;
6.2.3 Addierer
Arithmetische Berechnungen sind eine wichtige Grundfunktion von digitalen Schaltungen. Eine Grundschaltung fr die Addition zweier Zahlen wird als Addierer bezeichnet.
In diesem Abschnitt werden Addierer fr Binrzahlen beschrieben. Die Addition von
Zweierkomplementzahlen erfolgt mit der gleichen Struktur; lediglich das Vorzeichen
muss bercksichtigt werden.
178
6Schaltungsstrukturen
Zwei Zahlen der Wortbreite n ergeben eine Summe der Wortbreite n+1, denn der
Wertebereich der Summe kann ja grer als die Summanden sein. Fr die Beispiele in
diesem Abschnitt wird n=8 gewhlt, wenn nichts anderes angegeben ist.
Fr diesen Fall der Wortbreite n=8 haben die Summanden einen Wertebereich von
[0,255]. Die Summe kann den Wertebereich von [0,510] haben und bentigt eine Wortbreite von n=9.
Ein Addierer hat somit 2n Eingangsleitungen fr die beiden Summanden A und B,
sowie n+1 Ausgangsleitungen fr die Summe S. Ein Entwurf der Schaltung mit dem
Karnaugh-Diagramm ist nicht mglich, da das Diagramm bei 2n Eingangsleitungen 22n
Wertekombinationen htte. Bei n=8 wren diese 216=65.536 Eintrge, also viel zu
viel fr eine grafische Optimierung
Ripple-Carry-Addierer
Fr den Entwurf eines Addierers analysiert man die arithmetische Rechenoperation und
setzt diese in eine Schaltung um. Zur Veranschaulichung ist in Abb.6.6 die Addition
zweier Zahlen dargestellt. Die Berechnung findet nacheinander fr die einzelnen Binrstellen der Summanden A und B statt. Die beiden Werte werden mit dem bertrag aus
der vorherigen Stelle addiert und ergeben eine Summenstelle sowie einen bertrag in die
nchste Stelle. Der bertrag zur ersten Stelle ist 0; der bertrag der letzten Stelle ergibt
die zustzliche Summenstelle.
Diese Berechnung kann direkt in eine Schaltung umgesetzt werden. Die Berechnung
fr jede Stelle wird in einem Untermodul mit der Bezeichnung Volladdierer (VA) durchgefhrt. Dieses Untermodul wird gleich noch beschrieben.
Fr eine Addition von n Stellen werden n Volladdierer eingesetzt. Jeder Volladdierer
erhlt die beiden Stellen der Summanden sowie den bertrag aus der vorherigen Stelle.
Als Ausgabe des Volladdierers gibt es die Summe der aktuellen Stelle sowie den bertrag
fr die nchste Stelle. Der erste Volladdierer hat am Eingang des bertrags den Wert 0,
denn die erste Stelle hat noch keinen bertrag. Der Ausgang des bertrags vom letzten
Volladdierer ergibt die zustzliche Summenstelle. Diese Struktur ist fr n=8 in Abb.6.7
dargestellt. Der bertrag (engl. Carry) luft durch alle Stellen und darum wird diese
Schaltungsstruktur als Ripple-Carry-Addierer (engl. Ripple-Carry-Adder) bezeichnet.
Es gibt noch weitere Addiererstrukturen, die fr groe Wortbreiten schneller arbeiten.
Der Ripple-Carry-Addierer ist jedoch die wichtigste und am hufigsten vorkommende
Addiererstruktur.
Volladdierer
Der Volladdierer hat drei Eingangssignale und zwei Ausgangssignale. Eingnge sind
A, B und CI, also die beiden Binrstellen der Summanden sowie der bertrag aus der
Abb.6.6 Addition zweier
Binrzahlen der Wortbreite
8 bit
A
+ B
S
1 0 1 1 1 0 0 1
1 0 0 1 1 1 0 0
0
1 0 1 0 1 0 1 0 1
bertrag
B2
A2
B1
A1
B0
A0
VA
VA
S1
S2
0'
S0
B3
A3
VA
S3
B4
A4
VA
S4
VA
S5
VA
S6
VA
S7
VA
S8
B5
A5
bertrag
B6
A6
Summe S
B7
A7
Summanden A, B
179
vorherigen Binrstelle mit der Bezeichnung CI fr Carry-In. Ausgnge sind S und CO,
also die Binrstelle der Summe sowie der bertrag fr die nchste Binrstelle mit der
Bezeichnung CO fr Carry-Out.
Die Schaltung muss die drei Eingangswerte A, B, CI summieren, was einen Wert von
0 bis 3 ergeben kann. Wenn diese Summe 2 oder 3 ist, erfolgt ein bertrag in die nchste
Stelle. Der Ausgang S wird 1, falls die Summe 1 oder 3 ist. Diese Funktion und das Symbol
fr einen Volladdierer ist in Abb.6.8 gezeigt. Die Schaltung besteht aus wenigen Gattern.
Eine vereinfachte Form des Volladdierers ist der Halbaddierer (HA). Dieses Modul
hat keinen Carry-Eingang und kann fr die unterste Stelle des Ripple-Carry-Addierers
verwendet werden.
VHDL-Beschreibung
Der Addierer kann direkt durch das Plus-Zeichen erzeugt werden. Die Signale knnen als Vektor vom Typ signed/unsigned oder als integer definiert werden. Wie in
Abschn.3.5. erlutert, muss fr signed und unsigned die Erweiterung der Wortbreite
beachtet werden. Fr Operanden A und B mit 8bit Wortbreite lautet die Beschreibung:
s <='0' & a +'0' & b; fr Datentyp unsigned
s <= a(7) & a + b(7) & b; fr Datentyp signed
Die Grundstruktur des Addierers wird auch fr die Subtraktion eingesetzt. Prinzipiell wird statt des Volladdierers ein hnlich definierter Vollsubtrahierer verwendet. In
der Praxis wird jedoch oft einfach der Subtrahend invertiert und eine Addition durchgefhrt. Damit ist kein weiteres Grundelement erforderlich. Es wird also S=A+(B)
A B CI
A B CI
VA
CO
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
CO S
0
0
0
1
0
1
1
1
0
1
1
0
1
0
0
1
180
6Schaltungsstrukturen
gerechnet. Damit die Invertierung dem Zweierkomplement entspricht, muss die 0 fr den
ersten bertrag ebenfalls invertiert werden.
In VHDL wird die Subtraktion einfach durch das Minus-Zeichen aufgerufen. Fr den
Datentyp signed lautet die Beschreibung:
s <= a(7) & a - b(7) & b;
181
Im einfachsten Fall besteht die kombinatorische Schaltung aus einem Addierer, der zum
aktuellen Zhlerstand den Wert Eins addiert. Je nach bentigten Steuersignalen sind weitere Gatter erforderlich.
VHDL-Beschreibung
Ein Zhler wird durch die Addition einer Zhlvariablen in einem getakteten Prozess
erzeugt. Besonders einfach ist der Modulo-2n Zhler, wenn die Zhlvariable als unsigned definiert ist. Bei Erreichen des Maximalwerts ist die Addition so definiert, dass sie
danach wieder den Wert Null ergibt.
Fr einen Modulo-210 Zhler wird die Zhlvariable count definiert als:
count : unsigned(9 downto 0);
process
begin
wait until rising_edge(clk);
count <= count + 1;
end process;
Zhler mit Steuersignalen lassen sich durch Erweiterung des Codes mit If-Bedingungen umsetzen. Der folgende Code beschreibt einen Modulo-100 Zhler, der nur bei
enable=1 zhlt. Der Steuereingang clear setzt den Zhler auf 0 und zwar unabhngig
von enable (siehe auch Abb.6.9). Er entspricht einem synchronen Rcksetzen.
Die Steuereingnge sind als std_logic und die Zhlvariable als unsigned definiert:
clear: std_logic;
enable: std_logic
count : unsigned(6 downto 0);
Zustandsbergangsfunktion
kombinatorische
Schaltung
clear
enable
Steuersignale
Abb.6.9 Implementierung
eines Zhlers
Speicherglieder
Z(n-1)
D
C
D
CLK
C
D
Z(1)
Z(0)
182
6Schaltungsstrukturen
process
begin
wait until rising_edge(clk);
if clear = '1' then
count <= (others => '0');
elsif enable = '1' then
if count = 99 then
count <= (others => '0');
else
count <= count + 1;
end if;
end if;
end process;
6.3.2 Schieberegister
Mehrere hintereinander geschaltete D-Flip-Flops werden als Schieberegister bezeichnet. In einem Schieberegister werden die gespeicherten Werte mit jedem Takt einen Wert
weiter geschoben (Abb.6.10).
Durch Steuersignale, beispielsweise ein Enable, kann die Grundstruktur erweitert
werden. Ein Schieberegister wird verwendet, wenn Daten vor oder innerhalb einer Verarbeitung um wenige Takte verzgert werden sollen. Bei greren Verzgerungen (ab ca.
16 Takte) sind jedoch Speicher meist effizienter.
Eine wichtige Anwendung von Schieberegistern ist die Verarbeitung serieller
Daten und die Umwandlung zwischen seriellen und parallelen Daten. In Abb.6.11 ist
ein Schieberegister zur Wandlung paralleler Daten zur seriellen Datenbertragung
Abb.6.10 Schieberegister
D(0)
D(1)
D
C
CLK
paralleler
Dateneingang
D(1)
D(0)
D
C
M
U
X
D(7)
D
C
CLK
M
U
X
serieller
Datenausgang
D
C
D(n)
183
dargestellt. Der Dateneingang D hat 8 Leitungen, die zu Beginn der bertragung mit
Multiplexern in ein Schieberegister geladen werden. Dann wird 8 Takte lang das Datenwort auf die serielle Leitung T ausgegeben. Nach diesen 8 Takten kann das nchste
Datenwort bertragen werden.
VDHL-Beschreibung
Fr die VHDL-Beschreibung eines Schieberegisters wird die Zusammenfassung von
Vektoren mit dem Concatenation-Operator & verwendet. Achtung: Verwechseln Sie diesen Operator nicht mit der UND-Verknpfung.
Fr ein einfaches Schieberegister hnlich wie in Abb.6.10 wird ein std_logic_vector
definiert. Hier soll als Wortbreite 8 bit verwendet werden und ein Steuereingang enable
beachtet werden. Der oberste Wert des Schieberegisters, das MSB (Most Significant Bit),
wird nicht mehr gespeichert. Die brigen Werte rcken eine Stelle auf und werden mit dem
neuen Eingangswert data ergnzt. Dies wird programmiert, indem der Wert des Schieberegisters ohne MSB (also d(6:0)) mittels Concatenation um das Signal data ergnzt wird.
Die Signale sind definiert als:
d : std_logic_vector(7 downto 0);
data: std_logic;
enable : std_logic;
process
begin
wait until rising_edge(clk);
if enable = '1' then
d <= d(6 downto 0) & data;
end if;
end process;
184
6Schaltungsstrukturen
Abb.6.12 Rckgekoppeltes
Schieberegister mit 4 Stellen
=1
D
C
D
C
D
C
DATA
CLK
arithmetischen Reihenfolge auf und knnen darum auch als Pseudo-Zufallszahlen genutzt
werden. Die Initialisierung muss vermeiden, dass alle Werte auf 0 sind (nicht in Abb.6.12
dargestellt).
Die Abgriffe der Rckkopplung sind fr verschiedene Lngen des Schieberegisters in
Tabellen angegeben. Eingesetzt werden LFSR beispielsweise als Zahlengeneratoren in
der Kommunikationstechnik.
6.4 Zeitverhalten
6.4.1 Verzgerungszeit realer Schaltungen
Logikgatter bentigen eine kurze Laufzeit bis der Ausgang auf eine nderung der Eingangsvariablen reagiert. Diese Laufzeit ist abhngig von der Technologie. Fr ein einzelnes Gatter in einem Gehuse kann die Laufzeit ber 10ns betragen. Als Teil eines
modernen hochintegrierten ASICs sind Laufzeiten unter 0,1ns mglich.
Realistische Werte fr die Verzgerungszeit eines Gatters innerhalb integrierter Schaltungen betragen etwa 0,1 bis 1,0ns, whrend die Verzgerungszeit diskreter Gatter bei
etwa 1 ns bis 10 ns liegt (vgl. Kap. 7). Dabei ist die Verzgerungszeit auch abhngig
von der Funktion des Logikgatters. Ein Inverter ist meist schneller als ein ODER-Gatter
mit 8 Eingngen. Auch gleichartige Gatter knnen eine unterschiedliche Laufzeit haben,
abhngig beispielsweise davon, ob ihr Ausgang 1 oder 10 weitere Gatter ansteuert.
6.4Zeitverhalten
185
1
1 0
1
&
1 0
1
&
0 1
1
0
1
Y, real
0
Y , ideal
186
6Schaltungsstrukturen
D
C
D
C
CLK
Abb.6.15Taktkonzept Register-Transfer
C
D
C
D
C
D
kombinatorische
Schaltung
kombinatorische
Schaltung
C
D
C
D
C
CLK
Register
187
der Schaltung, da die Register jeweils abwarten, bis alle Signalbergnge in der kombinatorischen Schaltung erfolgt sind.
Ein wesentlicher Vorteil dieses Schaltungskonzepts ist auch die bersichtlichkeit
beim Schaltungsentwurf. Beim Entwurf kann man sich gut vorstellen, welche Informationen jeweils in einer Registerstufe vorhanden sind. Daraus kann man dann beschreiben,
was im nchsten Schritt mit diesen Informationen passieren soll. Die Entwurfsmethodik
ist weit verbreitet und wird als Register-Transfer-Level (RTL) bezeichnet.
Abb.6.16 Einfache
Fugngerampel
188
6Schaltungsstrukturen
Struktur
Der Entwurfsablauf beim RTL-Design ist so, dass die Aufgabe zunchst in einzelne Teilschritte unterteilt wird. Diese Teilschritte werden dann zwischen den Registern berechnet. Fr die Ampelsteuerung sind drei Teilschritte sinnvoll.
1. Aus dem Takt (50MHz) wird ein Sekundensignal erzeugt.
2. Mit dem Sekundensignal werden die 20 Schritte des Ampelablaufs gezhlt.
3. Mit der Information, welcher Schritt des Ampelablaufs vorliegt, werden die Lichtsignale ausgegeben.
VHDL-Beschreibung
Die Schaltung knnte prinzipiell mit einem Moore-Automaten umgesetzt werden. Es
ist jedoch deutlich einfacher und bersichtlicher, wenn die Grundstrukturen Zhler und
Multiplexer verwendet werden. Im Folgenden ist der komplette VHDL-Code inklusive
Bibliotheksaufruf und Entity angegeben.
Das Eingangssignal clock_50 ist der Takt von 50MHz. Die Ausgangssignale sind
strasse mit drei Werten fr rotes, gelbes, grnes Licht (gezhlt von MSB nach LSB)
sowie fussweg mit zwei Werten fr rotes und grnes Licht (MSB und LSB). Beim Wert
001 fr strasse ist also der drittgenannte Wert, das grne Licht aktiv. Beim Wert 10
fr fussweg ist der erstgenannte Wert aktiv, also das rote Licht.
Die drei Schritte des Register-Transfer-Levels sind durch die Kommentarzeilen
gekennzeichnet.
1. Der erste RTL-Schritt ist ein Zhler, der mit count_a 50Mio. Werte zhlt und dann
enable fr einen Takt auf 1 setzt. Die bentigte Wortbreite des Zhlers berechnet sich
aus dem Zweierlogarithmus von 50.000.000 und ergibt aufgerundet 26 bit.
ld50 000 000 = log 50 000 000/ log 2 = 7, 699/0, 301 = 25, 58
2. Der zweite RTL-Schritt ist ebenfalls ein Zhler, der durch enable einmal pro Sekunde
aktiviert wird. Er zhlt mit count_b die 20 Schritte des Ampelzyklus. Die bentigte
Wortbreite betrgt 5 bit.
3. Der dritte RTL-Schritt ist eine Fallunterscheidung, codiert als If-Anweisung, die aus
dem Wert von count_b die Ansteuerung der Ampellichter ermittelt.
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity ampel is
port (clock_50: instd_logic;
strasse: out std_logic_vector(2 downto 0); -- rot, gelb, grn
fussweg: out std_logic_vector(1 downto 0));-- rot, grn
end;
1 Impuls je Sekunde
49999999 then
(others => '0');
'1';
count_a + 1;
'0';
189
190
6Schaltungsstrukturen
CLK
D
C
D
C
D
C
D
C
D
C
D
C
D
C
D
C
D
C
D
C
D
C
D
C
D
C
D
C
D
C
D
C
0'
VA
VA
VA
VA
VA
VA
VA
VA
CLK
D
C
D
C
D
C
D
C
D
C
D
C
D
C
D
C
D
C
191
Flip-Flop-Ausgang: 0,2ns
8 Volladdierer: 80,3ns=2,4ns
9 Verbindungsleitungen: 90,1ns=0,9ns
Flip-Flop Setup-Zeit: 0,2ns
6.5.4 Pipelining
Mgliche Taktfrequenz
Aus dem kritischen Pfad kann als Kehrwert die mgliche Taktfrequenz berechnet
werden.
Der 8-Bit-Ripple-Carry-Addierer hat im kritischen Pfad eine Verzgerungszeit von
3,7ns. Die maximal mgliche Taktfrequenz betrgt darum 1/(3,7ns)=270MHz.
Fr den 32-Bit-Ripple-Carry-Addierer mit der Verzgerungszeit von 13,3ns betrgt
die maximal mgliche Taktfrequenz 75MHz.
Oft ist jedoch die Vorgehensweise anders herum, das heit fr eine Problemstellung
ist die erforderliche Taktgeschwindigkeit vorgegeben. Sie ergibt sich entweder direkt aus
der Aufgabe oder aus der Leistungsfhigkeit von Konkurrenzprodukten. Der kritische
Pfad muss dann diese Vorgabe erfllen.
Dies wird durch die beiden folgenden Zahlenbeispiele verdeutlicht:
Eine digitale Schaltung soll Radarsignale analysieren, die mit 100Mio. Werten pro
Sekunde auftreten. Die Schaltung muss daher eine Taktfrequenz von 100MHz erreichen. Der kritische Pfad darf 10ns betragen.
Ein Mikrocontroller soll entworfen werden. Die vorhandenen Produkte arbeiten mit
bis zu 200MHz. Fr das neue Produkt wird daher eine Taktfrequenz von 250MHz
spezifiziert. Der kritische Pfad darf 4ns betragen.
192
6Schaltungsstrukturen
&
&
&
&
&
1
&
CLK
&
&
&
CLK
&
&
1
&
193
Pipeline-Stufe bereits nach zwei Gattern eingefgt. Je nach Geschwindigkeitsanforderungen kann aber auch erst nach 10 oder 20 Gattern eine Pipeline-Stufe erforderlich sein.
Pipelining verkrzt nicht die Gesamtlaufzeit durch die Kombinatorik, sondern die Laufzeit zwischen Flip-Flop-Stufen. Ein kritischer Pfad von beispielsweise 10ns wird durch
Pipelining in zwei Teile zu 5ns aufgeteilt und die Schaltung kann dadurch mit 200MHz
statt mit 100MHz betrieben werden. Allerdings dauert die Berechnung dann zwei Taktzyklen. Die gesamte Verzgerung einer Berechnung wird als Latenzzeit bezeichnet.
Der Vorteil des Pipelinings ist, dass whrend einer Berechnung in der zweiten Pipeline-Stufe, bereits die nchsten Werte in die erste Pipeline-Stufe gegeben werden knnen. Die Anzahl an Rechenzyklen wird als Durchsatz bezeichnet. Die Schaltung mit
100MHz Takt hat einen Durchsatz von 100Mio. Datenwerten, whrend bei 200MHz
der Durchsatz 200Mio. Datenwerte betrgt. Pipelining bewirkt also eine Steigerung der
Verarbeitungsleistung.
6.5.5 Taktbergnge
Taktbereiche
Bisher wurde berall in einer Schaltung der gleiche Takt verwendet. Dies ist auch mglichst anzustreben. Allerdings lsst sich nicht immer vermeiden, dass mehrere Takte verwendet werden. Ein Beispiel dafr ist ein PC:
Die Taktbereiche werden auch als Clock-Domain bezeichnet. Beim bergang zwischen
Clock-Domains kann eine fehlerhafte Datenbernahme auftreten, die durch spezielle
Schaltungsstrukturen verhindert werden muss.
Fehler bei Taktbergngen
Ein Fehler bei Taktbergngen tritt auf, wenn eine Information an mehreren Stellen
einen Taktbergang hat. Zur Verdeutlichung des Problems ist in Abb.6.19 eine Schaltung
zur Flankenerkennung dargestellt. Das Signal A kommt aus einem anderen Taktbereich
und die Schaltung soll erkennen, wenn es einen bergang von 0 nach 1. Dies soll angezeigt werden, indem der Ausgang Q fr einen Takt auf 1 gesetzt wird.
Die Funktionsweise der Flankenerkennung ist:
Der Eingang A wird in einem Flip-Flop gespeichert. B ist somit der Wert des Eingangs A aus dem vorherigen Takt.
194
6Schaltungsstrukturen
Es wird berprft, ob A im letzten Takt 0 war und jetzt 1 ist. Dies erfolgt durch ein
UND-Gatter, welches nur 1 ist, wenn A auf 1 und B auf 0 ist (invertierter Eingang des
Gatters).
Das Ergebnis des UND-Gatters, Signal C wird in einem Flip-Flop gespeichert.
Der Ausgang des Flip-Flops ist die gewnschte Flankenerkennung.
Die Schaltung ist relativ bersichtlich und das Zeitdiagramm zeigt, wie der Ablauf zu
dem geplanten Verhalten fhrt. Ein Fehler tritt jedoch auf, wenn das Signal A sich nicht
zu dem angenommenen Zeitpunkt ndert. Dies ist mglich, da A ja aus einer anderen
Clock-Domain stammt.
Das fehlerhafte Verhalten ist in Abb.6.20 dargestellt.
Der Eingang A ndert sich kurz vor der Taktflanke.
Das Flip-Flop fr den Wert B bernimmt den neuen Wert noch.
Das UND-Gatter hat eine kurze Verzgerung, sodass der Wert C nicht mehr vom FlipFlop bernommen wird.
Nach der Taktflanke hat das Flip-Flop fr B schon den neuen Wert bernommen.
Darum liegt an beiden Eingngen des UND-Gatters der Wert 1 an und es wird keine
Flanke erkannt.
Auslser des Fehlers ist die unbekannte Zeitbeziehung zwischen A und den Takt CLK.
Da das Signal A aus einem anderen Taktbereich kommt, wechselt es manchmal in ausreichendem Abstand und manchmal fast gleichzeitig zum Taktsignal CLK. Schwierig fr
A
CLK
geplanter Ablauf
CLK
A
&
D
C
Abb.6.20 Fehlerhafter
Ablauf bei Flankenerkennung
B
C
Q
Ablauf im Fehlerfall
CLK
A
B
C
Verzgerung
durch UND-Gatter
Q
Flanke nicht erkannt
195
die Fehlersuche ist, dass der Fehler nicht immer auftritt. Es ist gut mglich, dass 95%
der Taktflanken erkannt werden und nur fr 5% der bergnge ein Fehler auftritt.
Korrekte Taktbernahme
Die Vermeidung des Fehlers erfolgt dadurch, dass ein Taktbergang nur an einer Stelle in der
Schaltung erfolgen darf. Es muss also verhindert werden, dass das Signal A aus einem fremden Taktbereich die Eingangswerte fr beide (!) Flip-Flops beeinflusst. Dies kann man in
einer Schaltung erreichen, indem der Eingang A zunchst mit einem Flip-Flop in die ClockDomain bernommen wird. In Abb.6.21 wird A zunchst als A_SYNC in den Taktbereich
von CLK bernommen. Damit ist die Zeitbeziehung von A zum Takt sichergestellt und es
kann kein fehlerhafter Ablauf auftreten. Signal B wurde zur besseren Lesbarkeit umbenannt.
VHDL-Beschreibung
In der Praxis wird die Schaltung aus Abb.6.21 natrlich in VHDL entworfen. Das UNDGatter ergibt sich aus der If-Anweisung.
process
begin
wait until rising_edge(clk);
a_sync<= a;
a_sync_old <= a_sync;
if (a_sync_old='0') and (a_sync='1') then
q <= '1';
else
q <= '0';
end if;
end process;
Abb.6.21 Flankenerkennung
mit sicherer Datenbernahme
beim Taktbergang
A_SYNC_OLD
A_SYNC
A
D
C
CLK
D
C
&
D
C
196
Abb.6.22 Flankenerkennung
mit Synchronisation gegen
Metastabilitt
6Schaltungsstrukturen
A D
C
CLK
D
C
D
C
&
Zunchst kann nicht vorhergesagt werden, ob noch der alte oder schon der neue Signalwert vom Flip-Flop nach A_SYNC (Abb.6.21) bernommen wird. Diese Unsicherheit
wre kein Problem, da die Empfangsschaltung ohnehin nicht wei, wann die Eingangsdaten bergeben werden und einen Zeitversatz bercksichtigen muss. Allerdings kann
der Fall eintreten, dass ein Flip-Flop in der Mitte zwischen 0 und 1 hngt. Dieser Zwischenzustand wird als Metastabilitt bezeichnet. Er tritt sehr selten auf, kann jedoch
einen Fehler in der Verarbeitung verursachen.
Als Schutz gegen Metastabilitt wird empfohlen, ein Signal beim bergang in einen
anderen Taktbereich mit zwei hintereinandergeschalteten Flip-Flops zu bernehmen
(Abb.6.22). Erst danach darf das Signal im Taktbereich verwendet werden. Ein metastabiles Signal des ersten Flip-Flops wrde vom zweiten Flip-Flop nicht bernommen werden.
Allerdings erhht sich durch das zweite Flip-Flop die Latenzzeit, also die Reaktionszeit auf den Eingang. Eine Synchronisation gegen Metastabilitt wird darum nicht in
allen Anwendungen eingesetzt.
197
Vermeidung mehrerer Signalwechsel: Wenn Daten eine feste Reihenfolge haben, beispielsweise bei einem Zhler, kann die Codierung so erfolgen, dass sich immer nur ein
Wert im Datenwort ndert. Ein mglicher Code hierfr ist der Gray-Code (siehe Kapitel2)
Dual-Port-Speicher: Eine universelle Lsung ist ein Dual-Port-Speicher. In ihm kann
mit einem Takt geschrieben und mit einem anderen gelesen werden. Die interne Steuerung sorgt fr eine sichere Trennung der Taktbereiche. Fr die Verwaltung des Speichers (z.B. Fllstand) werden dann hufig Zhler auf Basis des Gray-Codes eingesetzt.
6.6.1 Schmitt-Trigger-Eingang
Digitale Signale werden ja durch Spannungspegel dargestellt. Dabei gibt es einen
Bereich fr den Low-Pegel und einen Bereich fr den High-Pegel. Dazwischen ist ein
bergangsbereich, in dem das Signal undefiniert ist (vgl. Kapitel1).
Der bergangsbereich wird innerhalb digitaler Schaltungen normalerweise schnell durchlaufen. Am Eingang einer Schaltung kann es jedoch vorkommen, dass der bergangsbereich
langsamer durchlaufen wird und durch Rauschen gestrt ist. Eine Digitalschaltung knnte
dadurch mehrfach einen Pegelwechsel erkennen, was normalerweise nicht gewnscht ist.
Dieses Problem wird durch einen Schmitt-Trigger behoben. Ein Schmitt-Trigger hat
eine Hysterese und behlt einen Ausgangswert so lange, bis sich der Eingangswert deutlich ndert. Bei einem Eingangssignal im bergangsbereich wird der vorhandene Ausgangswert beibehalten.
Das Symbol eines Schmitt-Triggers enthlt zur Kennzeichnung eine Hysteresekurve
(Abb.6.23). In Abb.6.23 ist das Zeitverhalten eines Schmitt-Triggers dargestellt.
Eingang A hat zunchst Low-Pegel (L) und der Ausgang Y ist somit logisch 0.
L
1
Y 0
bergangsbereich
Zeit
198
6Schaltungsstrukturen
Der Eingang A geht dann in den bergangsbereich, in dem eine normale Digitalschaltung ein undefiniertes Verhalten zeigen wrde. Der Ausgang Y des Schmitt-Triggers
bleibt jedoch auf logisch 0.
Wenn A sich im Spannungsbereich des High-Pegels (H) befindet, wechselt auch Y auf
logisch 1.
A geht wieder in den bergangsbereich, doch Y bleibt noch logisch 1.
Erst wenn A wieder im Low-Pegel ist, wechselt auch Y auf logisch 0.
6.6.2 Tri-State-Ausgang
Digitale Ausgnge drfen im allgemeinen Fall nicht miteinander verbunden werden.
Wenn eine Leitung 0 und eine andere 1 ausgibt, fliet ein Kurzschlussstrom und der
Logik-Pegel ist nicht eindeutig. Fr den Einsatz in Bus-Systemen gibt es jedoch eine
besondere Ausgangsstufe, die man parallel schalten kann.
Der Tri-State-Ausgang (auch 3-State oder Three-State) hat drei Mglichkeiten fr den
Ausgabewert. Neben 0 und 1 kann der Ausgang abgeschaltet werden; er ist dann passiv
und gibt keinen Wert aus. Dies wird als hochohmig mit der Abkrzung Z bezeichnet. In
Schaltsymbolen wird ein Tri-State-Ausgang durch ein auf der Spitze stehendes Dreieck
dargestellt (Abb.6.24).
Der Ausgangstreiber hat dazu einen Steuereingang EN (Enable), der mit 1 die Datenausgabe aktiviert. Bei EN auf 0 ist der Ausgang hochohmig (Abb.6.25).
Ein typisches Einsatzgebiet von Tri-State-Leitungen sind Bus-Systeme, zum Beispiel
der PCI-Bus im PC. Hier sind CPU, Grafikkarte und weitere Peripheriekarten eingesteckt.
Nur einer dieser Busteilnehmer gibt Daten aus, die anderen Anschlsse sind hochohmig.
Durch die Steuerung muss sichergestellt werden, dass stets nur ein Ausgang aktiv ist.
Auch die Verbindung zwischen CPU und DRAM nutzt Tri-State-Leitungen. Wenn die
CPU Daten schreibt, ist der DRAM-Anschluss hochohmig. Wenn die CPU Daten liest,
ist der CPU-Anschluss hochohmig.
Abb.6.25 Tri-State-Treiber
und Funktionstabelle
Tri-State
Open-Kollektor
EN
A
EN
0
1
1
A
0
1
Y
Z
0
1
199
6.6.3 Open-Kollektor-Ausgang
Eine andere Methode zur Zusammenschaltung mehrerer Digitalausgnge ist der OpenKollektor-Ausgang. Normalerweise hat ein Digitalausgang zwei Transistoren. Entweder
zieht der eine Transistor den Ausgang zum Low-Pegel oder der andere Transistor zieht
den Ausgang zum High-Pegel. Beim Open-Kollektor-Ausgang ist nur der Transistor
zum Low-Pegel vorhanden. Der Kollektor dieser Schaltung bildet den Ausgang und liegt
offen, daher der Name. Da statt Bipolar-Transistoren heute meist Feldeffekt-Transistoren
verwendet werden, wird auch der Name Open-Drain-Ausgang verwendet.
Der Open-Kollektor-Ausgang wird an einen externen Lastwiderstand RL angeschlossen, der die Ausgangsleitung nach Versorgungsspannung US, und damit nach High-Pegel
zieht. Wenn der Ausgang aktiv ist, schaltet er den Transistor leitend und zieht die Ausgangsleitung Y nach Low-Pegel. Der Vorteil dieses Schaltungsprinzips besteht darin,
dass mehrere Open-Kollektor-Ausgnge parallel geschaltet werden knnen und jeder den
Ausgang auf Low-Pegel ziehen kann (Abb.6.26).
Wenn ein oder mehrere Bauelemente die Ausgangsleitung auf Low-Pegel ziehen, ergibt
sich eine logische 0. Nur wenn alle Bauelemente den Ausgang auf High-Pegel lassen,
ergibt sich eine logische 1. Dies entspricht einer UND-Funktion. Die Zusammenschaltung
wird auch als Wired-AND bezeichnet, also als UND-Gatter durch Verdrahtung.
In Schaltsymbolen wird ein Open-Kollektor-Ausgang durch eine Raute mit Balken
dargestellt (Abb.6.24).
Der Open-Kollektor-Ausgang wird eingesetzt, wenn mehrere Signale miteinander
logisch verknpft werden sollen. Es ist, anders als bei Tri-State-Ausgngen, keine zentrale Steuerung erforderlich. Allerdings ist auch nicht ohne weiteres ersichtlich, welcher
Baustein das Signal auf 0 gezogen hat.
Als Beispiel nehmen wir an, dass mehrere Peripheriebausteine an eine CPU angeschlossen sind und einen Interrupt auslsen knnen. Durch ein Wired-AND knnen die Bausteine
ihre Interrupt-Leitungen kombinieren und gemeinsam an die CPU geben, so dass nur ein
einziger Interrupt-Eingang erforderlich ist. Wenn ein Interrupt auftritt, fragt die CPU ab,
welcher Peripheriebaustein Auslser des Interrupts war und bearbeitet die Anfrage.
Abb.6.26 Verdrahtung
mehrerer Open-KollektorAusgnge
US
RL
Y
Bauelement A
Bauelement B
Bauelement C
200
6Schaltungsstrukturen
6.7 bungsaufgaben
Haben Sie den Inhalt des Kapitels verstanden? Prfen Sie sich mit den Aufgaben und
Fragen am Kapitelende. Die Lsungen und Antworten finden Sie am Ende des Buches.
Bei den Auswahlfragen ist immer genau eine Antwort korrekt.
Aufgabe 6.1
Wie bezeichnet man eine Digitalschaltung, bei der Steuereingnge einen von mehreren
Dateneingngen auswhlen?
a) Multiplexer
b) Demultiplexer
c) Addierer
d) Schieberegister
e) Datenregister
Aufgabe 6.2
Die Grundstruktur einer Additionsschaltung mit der Kaskadierung von Volladdierern
nennt man,
a) Halbaddierer
b) Carry-Overflow-Addierer
c) Carry-Pulse-Addierer
d) Carry-Overtake-Addierer
e) Ripple-Carry-Addierer
Aufgabe 6.3
Welche Aussage trifft fr Tri-State-Ausgnge zu?
a) Mehrere Ausgnge werden UND-verknpft
b) Rauschen am Eingang wird durch eine Hysterese entstrt
c) Der High-Pegel kann konfiguriert werden
d) Eine Signalleitung kann als Eingang oder Ausgang geschaltet werden
e) Ein High-Pegel wechselt nach kurzer Zeit automatisch zum Low-Pegel
Aufgabe 6.4
Was wird als Spike (auch Glitch oder Hazard) bezeichnet?
a) Fehler durch Weltraumstrahlung
b) Invertierung eines Taktsignals
c) Kurze Zwischenzustnde an Schaltungsausgngen
6.7bungsaufgaben
201
202
6Schaltungsstrukturen
Aufgabe 6.9
Ein Modulo-2^8 Zhler hat einen Takt von 500kHz. Wie viele Zhlzyklen schafft der
Zhler pro Sekunde (gerundet)?
a) 100.000
b) 2.000
c) 5.000
d) 1.000
e) 500.000
Aufgabe 6.10
Die mgliche Taktfrequenz fr den Addierer in Abb.6.17 soll erhht werden. Fgen Sie
eine Pipeline-Stufe ein. Beachten Sie, dass alle Signale gleich verzgert werden, damit
Informationen der Datenworte weiterhin zueinander passen.
Berechnen Sie kritischen Pfad und mgliche Taktfrequenz mit den Annahmen aus
Abschn.6.5.3.
Bei der Realisierung eines Systems mssen neben der digitalen Funktion weitere
Aspekte bercksichtigt werden, die sowohl technischen als auch nicht-technischen Charakter besitzen. Einige Beispiele fr diese Aspekte sind:
Rechenleistung
Verlustleistung
Formfaktor, maximaler Platzbedarf
Bentigte Logikpegel fr Ein- und Ausgabe
Entwurfskosten, Produktionskosten
Entwicklungszeit, Time-to-Market
Vorkenntnisse und Erfahrungen
Fr die Realisierung eines digitalen Systems gibt es unterschiedliche Alternativen, die
sich im Hinblick auf die genannten Eigenschaften unterscheiden. Es ist beispielsweise
denkbar, ausschlielich Standard-Bausteine einzusetzen, deren Funktion vom Hersteller
fest vorgegeben ist. Ebenso ist es mglich, selbst als Halbleiter-Hersteller zu agieren und
eigene Chips produzieren zu lassen. Es knnen auch Programmierbare Logikbausteine
eingesetzt werden, deren Hardware-Funktion flexibel festgelegt werden kann. Statt eine
Funktion in Form von Gattern zu realisieren, ist auch ein softwareorientierter Ansatz
mglich, bei dem beispielsweise Mikrocontroller eingesetzt werden. Diese Bausteine
sind deutlich kompakter als ein PC und sind teilweise fr weniger als 1EUR erhltlich.
In diesem Kapitel werden die verschiedenen Varianten nher beleuchtet.
203
204
205
Funktion
00
4 NAND2
02
4 NOR2
04
6 Inverter
07
08
4 AND2
10
3 NAND3
25
2 NOR4
46
74
138
3:8 Demultiplexer/Decoder
148
8:3 Priorittsencoder
165
190
4 Bit Aufwrts-/Abwrtszhler
244
245
373
374
573
574
595
206
implementiert, whrend fr die Ausgangstreiber Bipolar-Transistoren eingesetzt werden. So wird gegenber einer reinen CMOS-Implementierung eine hhere Treiberleistung und eine geringere Abhngigkeit von der Lastkapazitt erreicht. Eine bersicht
ber verschiedene Familien der 74er-Serie folgt in Abschn.7.1.5.
Nicht alle Grundfunktionen der 74er-Serie werden in allen Familien angeboten. Im
Einzelfall muss geprft werden, ob eine gewnschte Funktion zur Verfgung steht.
Als eine Ergnzung zu der weitverbreiteten 74er-Serie bietet beispielsweise die Firma
NXP konfigurierbare Logikgatter in platzsparenden Gehusen an. Damit kann ein einzelnes NAND- oder NOR-Gatter mit zwei Eingngen realisiert werden, whrend ein
typischer Baustein der 74er-Serie vier dieser Gatter enthlt. Die konfigurierbaren Logikgatter sind in den Familien LVC, AUP (Advanced Ultra-Low-Power) und AXP (Advanced Extremely Low-Power) verfgbar. Die Logikfunktion der Gatter ist durch die uere
Beschaltung whlbar.
7.1.2 Lastfaktoren
Die Treiberstrke einer Ausgangsleitung muss fr die angeschlossene Belastung durch
die nachfolgenden Bausteine ausreichen. Die Belastung, die ein Ausgang durch einen
VDD
II
Digitale
Schaltung
IO
VO
VI
GND
207
Bemerkungen
GND
Masse
VDD
Versorgungsspannung
VI
Eingangsspannung
II
Eingangsstrom
VO
Ausgangsspannung
IO
Ausgangsstrom
VI,Hmin
VI,Lmax
II,H
II,L
VO,Hmin
VO,Lmax
Eingang innerhalb der gleichen Schaltkreisfamilie erfhrt, wird durch den sogenannten Lastfaktor beschrieben. Hierzu wird der Eingangsstrom eines typischen Gatters der
Bausteinfamilie (Einheitsgatter) definiert. Es ergeben sich fr Low- und High-Pegel die
beiden charakteristischen Gren II,HN und II,LN, die den Strom angeben, welcher in den
Eingang des Einheitsgatters hineinfliet.
Auf Basis der Eigenschaften eines Einheitsgatters lassen sich die beiden charakteristischen Gren Fan-in und Fan-out definieren.
Fan-in (Eingangslastfaktor)
Der Fan-in eines Eingangs gibt an, um welchen Faktor die Stromaufnahme grer ist als
beim Einheitsgatter derselben Schaltkreisfamilie.
FI,H =
II,L
II,H
FI,L =
FI = max FI,H , FI,L
II,HN
II,LN
Innerhalb einer Schaltkreisfamilie gilt ein Eingang als einfache Last, wenn er den gleichen Strom aufnimmt wie das Einheitsgatter (FI=1).
Fan-out (Ausgangslastfaktor)
Der Fan-out gibt an, mit wie vielen Eingngen eines Einheitsgatters derselben Schaltkreisfamilie der entsprechende Ausgang belastet werden darf.
208
FO,H =
IO,Lmax
IO,Hmax
FO,L =
FO = min FO,H , FO,L
II,HN
OI,LN
7.1.3 Strspannungsabstand
Als Strspannungsabstand bezeichnet man die Spannung, um die ein Digitalausgang
variieren darf, ohne dass ein angeschlossener Eingang derselben Logikfamilie in einen
verbotenen Pegelbereich gelangt. Der Strspannungsabstand wird fr High- und LowPegel getrennt angegeben (Abb.7.3).
SH = UO,Hmin UI,Hmin
SL = UO,Lmax UI,Lmax
7.1.4 Schaltzeiten
Beim Einsatz eines digitalen Bausteins ist unter anderem die Verzgerungszeit, die teilweise auch als Schaltzeit bezeichnet wird, von groer Bedeutung. Um die Verzgerungszeiten zu bestimmen, wird blicherweise eine Rechteckspannung an den Eingang des
Bausteins angelegt und der zeitliche Verlauf der Ausgangspannung gemessen. Das Ausgangssignal ist nicht rechteckfrmig und der Wechsel des logischen Signals am Ausgang
nimmt eine gewisse Zeit in Anspruch. Die Zeit setzt sich zusammen aus einer Verzgerung
im Inneren des Logikbausteins sowie der Zeit fr die Umladung der Last am Ausgang.
Wird die Zeit gemessen, die der Ausgang bentigt, um von 10% auf 90% des Ausgangspegels anzusteigen bzw. von 90% auf 10% abzufallen, erhlt man die Anstiegszeit
(rise time, tR) bzw. Abfallzeit (fall time, tF). Hufig werden diese Zeiten auch zusammenfassend als transition time (tT) angegeben.
Mchte man die Verzgerungszeit eines Bausteins angeben, so wird hierfr als Referenzpunkt genau die Mitte zwischen Minimal- und Maximalpegel gewhlt. Die Zeit, die zwischen dem Erreichen des 50%-Eingangspegels vergeht, bis der Ausgang seinerseits 50%
Eingang
Ausgang
VO,Hmin
VO,Lmax
Abb.7.3Strspannungsabstand
HPegel
SH
SL
LPegel
HPegel
VI,Hmin
VI,Lmax
LPegel
209
VI
50%
t
tpHL
tpLH
VO
90%
50%
10%
tF
tR
des Pegels erreicht hat, ergibt also die Verzgerungszeit (propagation delay, tP). Diese kann
auch fr steigende und fallende Flanken getrennt angegeben werden kann (tPLH, tPHL).
In Abb.7.4 sind die Schaltzeiten fr das Beispiel eines Inverters dargestellt.
7.1.5 Logikfamilien
In Tab.7.3 sind einige ausgewhlte Familien der 74er-Serie mit Versorgungsspannungsbereich und Schaltzeiten eines 74xx00 (vier NAND2-Gatter) zusammengefasst. Die
Tab.7.3bersicht ber einige Familien der 74er-Serie: Versorgungsspannungsbereich und typische Schaltzeiten fr einen 74xx00-Baustein
Abkrzung Bezeichnung
VCC (V)
(Keine)
4,5 ~ 5,5
VCC=5,0V; CL=15pF
LS
Low-Power Schottky
(veraltet)
4,5 ~ 5,5
10
VCC=5,0V; CL=15pF
HC
High-Speed CMOS
2,0 ~ 6,0
VCC=5,0V; CL=15pF
HCT
HC, TTL-compatible
4,5 ~ 5,5
VCC=5,0V; CL=15pF
AHC
4,5
VCC=5,0V; CL=15pF
LVC
1,65 ~ 3,6 2
3,0
VCC=3,3V; CL=50pF
ALVC
1,65 ~ 3,6 2
2,1
VCC=3,3V; CL=50pF
ABT
Adv. BiCMOS,
TTL-compatible
4,5 ~ 5,5
2,5
2,3
VCC=3,3V; CL=50pF
AUC
0,8 ~ 2,7
1,5
VCC=1,8V; CL=30pF
210
Schaltzeiten gelten fr die angegebenen Randbedingungen, insbesondere Versorgungsspannung und Lastkapazitt (CL). Darber hinaus knnen die Schaltzeiten auch auf
Grund von Streuungen bei der Fertigung der Bausteine variieren. In den meisten Datenblttern wird daher neben den typischen Zeiten auch ein Maximalwert angegeben.
7.2.1 ASICs
Mchte man ein digitales System realisieren, kann man einen speziellen Halbleiterbaustein fertigen lassen, der die gewnschte Funktion ausfhrt. In diesem Fall spricht man
von sogenannten ASICs (Application Specific Integrated Circuit). Beim Entwurf eines
ASICs wird auch ein digitales System aus logischen Grundelementen erstellt. Statt
jedoch die Grundfunktionen auf einer Platine (wie zum Beispiel bei Verwendung von
Bausteinen der 74er-Serie) vorzunehmen, erfolgt die Platzierung und Verdrahtung der
Gatter beim ASIC-Entwurf auf einer wenige Quadratmillimeter groen Siliziumflche.
Diese Realisierung ist viel kompakter als bei Verwendung standardisierter Logikbausteine. Darum ist ein ASIC hufig schneller und besitzt eine geringere Verlustleistung.
Da die Anzahl und die Position der Gatter whrend des Entwurfs frei gewhlt werden
knnen, kann der Baustein fr den jeweiligen Anwendungsfall optimiert werden.
Fr den Entwurf eines ASICs wird der sogenannte Standardzellentwurf eingesetzt.
Bei dieser Entwurfsmethodik stehen die logischen Grundelemente als Bibliothek in elektronischer Form zur Verfgung. Aus dieser Bibliothek knnen Bauelemente ausgewhlt,
auf dem Chip platziert und anschlieend verdrahtet werden.
Die Auswahl und das Verbinden der einzelnen Gatter zu einem komplexen System
erfolgt mithilfe einer Hardwarebeschreibungssprache wie VHDL. Mit einem Syntheseprogramm wird die VHDL-Beschreibung in eine sogenannte Gatternetzliste berfhrt.
Diese Netzliste gibt an, welche Logikelemente verwendet werden und wie diese verdrahtet sind. Die Synthese hat also die Aufgabe die VHDL-Beschreibung zu analysieren und
eine mglichst optimale Implementierung auf Basis der Grundelemente der Bibliothek
zu finden. Optimal heit in diesem Fall, dass die spezifizierten maximalen Verzgerungszeiten eingehalten werden und eine mglichst kleine Chipflche bentigt wird. Darber
hinaus knnen auch Aspekte wie die Verlustleistung Bercksichtigung finden. Dieser
Entwurfsschritt wird hufig auch als Frontend-Design bezeichnet.
Nachdem das Frontend-Design abgeschlossen ist, erfolgt das Backend-Design.
In diesem Schritt werden mit speziellen Layoutprogrammen die Platzierung und die
211
Verdrahtung der Elemente aus der Gatternetzliste vorgenommen. Hierfr ist in der Bibliothek fr jedes Element der Netzliste eine Implementierung aus einzelnen Transistoren
hinterlegt.
Auf den ersten Blick klingt der Ansatz des ASIC-Entwurfs vielleicht als ideale
Lsung zur Realisierung digitaler Systeme. Aufgrund der Optimierung knnen die
Schaltkreise mit einer relativ kleinen Siliziumflche und damit kostengnstig produziert werden. Allerdings sind die Produktionskosten nicht der einzige Kostenfaktor eines
ASIC-Entwurfs, denn es fallen in einem deutlichen Umfang einmalige Kosten (engl.
non-recurring engineering costs bzw. NRE) an. Diese Kosten entstehen zum einen
durch den hohen Arbeitsaufwand im Frontend- und Backend-Design. Zum anderen ist
die Erstellung von Belichtungsmasken, die zur Produktion des Schaltkreises in der Halbleiterfabrik bentigt werden, ein weiterer wichtiger Kostenfaktor. Aufgrund der kleinen
Strukturen heutiger Produktionsprozesse werden extrem przise Masken bentigt, sodass
die Vorbereitung der Produktion eines ASICs mehrere Millionen Euro kosten kann.
Bercksichtigt man diese Kosten, wird deutlich, dass vor der Produktion eines ASICs
eine intensive berprfung des Designs erforderlich ist, damit die Wahrscheinlichkeit
eines Designfehlers verringert wird.
Nehmen wir als Beispiel an, dass die NRE-Kosten eines ASIC-Projekts etwa
15MioEUR betragen. Wenn der Baustein in einer Stckzahl von 100.000 produziert werden soll, ergibt sich umgerechnet auf einen einzelnen Baustein ein Anteil von
150EUR. Diese Kosten sind fr viele Anwendungsgebiete unattraktiv, sodass nur bei
sehr hohen Stckzahlen eine ASIC-Entwicklung wirtschaftlich sinnvoll ist.
7.2.2 ASSPs
Eine Alternative zur Entwicklung eines eigenen Bausteins knnen sogenannte Application Specific Standard Products (ASSPs) sein. Ein ASSP hat den gleichen Aufbau wie ein
ASIC, wird allerdings nicht selbst entworfen, sondern ist ein frei am Markt erhltlicher
Schaltkreis. Er kann fr eine sehr spezielle Funktion (zum Beispiel WLAN, Steuerung
von Motoren) optimiert sein oder aber auch als System-on-Chip (SoC) mehrere Funktionen integrieren und so die kostengnstige Implementierung eines Gesamtsystems ermglichen. Ein Beispiel fr ein System-on-Chip sind die ASSPs, die in heutigen Fernsehern
verbaut werden: Fast die gesamte Funktionalitt vom Empfang des Fernsehsignals ber
Satellit, Kabel oder WLAN bis hin zur Anzeige auf einem Display ist in einem hochintegrierten Baustein vereinigt.
212
vielleicht ein mglicher Ausweg, wenn man Bausteine htte, deren Hardware zwar fest
ist, aber deren digitale Funktion erst vom Anwender festgelegt wrde? Diese Bausteine
kann man (aufgrund der festen Hardware) in groen Stckzahlen gnstig herstellen und
dennoch kann der Anwender die digitale Funktion, wie bei einem ASIC, nach seinen
Bedrfnissen festlegen.
Diese berlegungen wurden bereits sehr frh angestellt und die Idee, Schaltkreise
zu realisieren, deren logische Funktion in VHDL programmiert werden kann, wurde
schon in den 1970er Jahren aufgegriffen und ist bis heute immer weiter verfeinert
worden.
Die Besonderheit dieser Bausteine ist, dass ihre logische Funktion noch im Feld (zum
Beispiel nach dem Einsetzen in eine Platine) konfiguriert werden kann. Daher werden sie
als Field Programmable Gate Arrays (FPGAs) bezeichnet. Neben FPGAs werden auch
Complex Programmable Logic Devices (CPLDs) beziehungsweise Simple Programmable Logic Devices (SPLDs) angeboten. CPLDs eignen sich besonders fr programmierbare logische Funktionen mit einer relativ geringen Komplexitt, whrend mit FPGAs
ganze Rechnersysteme realisiert werden knnen. Die gesamte Gruppe dieser Bausteine
wird auch unter dem Begriff Programmierbare Logik zusammengefasst.
Sind also FPGAs die ideale Lsung zur Realisierung einer digitalen Funktion? In
vielen Fllen kann man diese Frage tatschlich bejahen: Mit heutigen FPGAs knnen
sehr komplexe Systeme zu einem relativ gnstigen Preis realisiert werden. Insbesondere bei kleinen bis mittleren Stckzahlen knnen FPGAs ihre Kostenvorteile gegenber
ASICs ausspielen. Daher werden programmierbare Logikbausteine in vielen Bereichen
eingesetzt.
7.2.4 Mikrocontroller
Kann man eine digitale Funktion statt mit Gattern auf einer Platine oder in Form eines
ASICs auf einem Stck Silizium vielleicht auch in Software realisieren? Schlielich ist
doch das Grundprinzip eines jeden Rechnerprogramms das Einlesen von Eingabewerten, die Verarbeitung der Werte und die anschlieende Ausgabe von Ergebnissen. Und
letztlich macht ein logisches Gatter oder auch ein komplexes System nichts anderes: Es
betrachtet sozusagen die Eingnge und bestimmt nach einer festgelegten Rechenvorschrift die Ausgangssignale. Also msste es mglich sein, eine beliebige digitale Funktion auch mithilfe eines Rechners zu realisieren.
Sie mgen vielleicht einwenden, dass es wenig sinnvoll ist, wenn man beispielsweise
die Funktion eines einfachen UND-Gatters durch ein Programm auf einem PC ersetzt.
Sicher, die Kosten der PC-basierten Lsung wren viel zu hoch und auch die Bauform
und die bentigte leistungsfhige Spannungsversorgung wren nachteilig. Ein Rechnersystem auf Basis eines PCs ist also aus verschiedensten Grnden fr viele Anwendungsgebiete nicht gut geeignet.
213
214
eingesetzt. Hufig sind diese Rechnersysteme nicht sofort erkennbar, weshalb sie auch
als eingebettete Systeme (Embedded System) bezeichnet werden.
ASIC
Hohe Flexibilitt
Geringe Entwicklungszeit
Geringe Entwicklungskosten
Geringe Stckkosten
++
Rechenleistung
Verlustleistung
Geringe Stckzahlen mglich
Hohe Stckzahlen mglich
ASSP
-
++
++
++
++
++
++
++
++
++
FPGA
++
++
++
++
++
215
Ein-/Ausgabe-Komponenten, die nicht bereits durch den Mikroprozessor zur Verfgung gestellt werden, knnen entweder in der programmierbaren Logik oder als zustzliche Systemkomponenten, zum Beispiel in Form eines ASSPs, integriert werden.
Insbesondere Spezialfunktionen wie WLAN, USB oder Ethernet knnen durch derartige
zustzliche Bausteine realisiert werden.
Fr einfache Anwendungen ist eine Systemrealisierung auf Basis mehrerer Einzelkomponenten hufig nicht sinnvoll, da sie zu kostenintensiv sind oder die Verlustleistung zu gro wre. Fr diese Anwendungsflle bietet die Halbleiterindustrie die in
Abschn.7.2.4 vorgestellten Mikrocontroller an, die sich insbesondere fr eine kostengnstige Realisierung von Systemen mit relativ geringen Anforderungen an die Rechenleistung realisieren lassen.
Die unterschiedlichen Komponenten digitaler Systeme werden in verschiedenen
Kapiteln genauer vorgestellt: Kapitel9 vertieft Aspekte der programmierbaren Logikbausteine. Kapitel10 beschreibt die Grundlagen der Halbleitertechnik. In Kapitel11
werden Speicherbausteine vorgestellt. Die Kapitel12 vorgestellten Analog-Digital- und
Digital-Analog-Umsetzer werden immer dann bentigt, wenn die Ein-/Ausgabe in analoger Form erfolgen soll. Kapitel13 und Kapitel 14 gehen auf die Realisierung softwareprogrammierbarer Bausteine ein, wobei der Schwerpunkt auf Mikrocontrollern
liegt.
7.3.1 Designflow
Der Entwurf eines Systems auf Basis eines FPGAs beinhaltet immer zwei Aspekte: Zum
einen muss die gewnschte Funktion in VHDL beschrieben und mithilfe der Entwurfssoftware in eine Programmierdatei fr das FPGA bersetzt werden. Daneben ist es von
wesentlicher Bedeutung, dass die einzelnen Entwurfsschritte durch Verifikation begleitet
216
werden. Besondere Bedeutung kommt hierbei der frhzeitigen Simulation des eingegebenen VHDL-Codes zu.
Eine schematische bersicht ber den FPGA-Entwurf zeigt Abb.7.6. Die einzelnen
Schritte werden in den folgenden Abschnitten nher erlutert.
Der Ablauf eines VHDL-basierten Entwurfs besitzt teilweise hnlichkeiten zur Entwicklung von Software. Die gewnschte Funktion wird in Form einer Textdatei beschrieben. Diese Datei wird dann durch einen Compiler bzw. ein Synthesetool optimiert und
in ein ausfhrbares Programm bzw. eine Programmierdatei fr das FPGA bersetzt. Es
ist jedoch zu beachten, dass ein FPGA ein paralleles System ist, auf dem eine Vielzahl
von Funktionen gleichzeitig ablaufen. Auerdem ist das Zeitverhalten von wesentlicher
Bedeutung. Ist die Verzgerungszeit der Kombinatorik zwischen zwei Flip-Flops zu
gro, wird das System fehlerhaft arbeiten. Daher ist der VHDL-basierte Entwurfsablauf,
trotz der hnlichkeiten zur Softwareentwicklung, als Hardwareentwurf anzusehen.
7.3.2 VHDL-Eingabe
Die Hardwarebeschreibungssprache VHDL wurde in vorangegangenen Kapiteln bereits
vorgestellt. Sie kennen bereits die Syntax der Sprache und wissen auch, wie Sie beispielsweise endliche Automaten in VHDL beschreiben knnen. Fr die Entwicklung
eines FPGA-Designs muss bercksichtigt werden, dass der VHDL-Code in der Regel ein
synchrones System beschreibt, das aus Flip-Flops und kombinatorischer Logik besteht.
Abb.7.6 FPGA-Designflow
mit VHDL
Designeingabe
Verifikation
Designeingabe
Testbench
(VHDL)
(VHDL)
Synthese
Simulation
Platzierung
Verdrahtung
Analyse des
Zeitverhaltens
FPGAProgrammierung
bzw.
ASIC-Produktion
Inbetriebnahme
und Test des
Systems
217
In Kapitel6 wurde bereits erlutert, dass die meisten digitalen Schaltungen eine
Kombination von Registern und Kombinatorik zwischen den Registerstufen darstellen
(Register-Transfer-Level-Design oder kurz RTL-Design). Die Grundstruktur der entsprechenden Hardware ist in Abb.7.7 dargestellt.
Mit der Eingabe des VHDL-Codes werden die Registerstufen und die logische Funktion zwischen zwei Registerstufen festgelegt. Dabei muss auch das Zeitverhalten der
spteren Hardware bercksichtigt werden. Fr einfache Designs kann dies hufig als
unkritisch angesehen werden. Fr Entwrfe mit hohen Anforderungen an die Rechenleistung (und damit hufig einer hohen Taktfrequenz) nimmt die Bedeutung des Zeitverhaltens zu. Den grten Einfluss auf das Zeitverhalten hat der VHDL-Code. Alle
nachfolgenden Schritte im Designflow knnen eventuelle Probleme im Zeitverhalten der
Schaltung nur in einem begrenzten Umfang korrigieren.
7.3.3 Simulation
Die Simulation des VHDL-Codes ist einer der wichtigsten Schritte, um die Korrektheit
der beschriebenen digitalen Funktion frhzeitig sicherzustellen. Prinzipiell bieten VHDL
Simulatoren die Mglichkeit, durch Kommandos Signale auf definierte Werte zu setzen. Die verwendeten Kommandos sind nicht standardisiert und variieren mit den eingesetzten Simulatoren. Beispielsweise wird bei Verwendung des Simulators XSIM der
Firma Xilinx ein Signal mit dem Namen my_sig mit dem Kommando add_force my_sig
1 auf den Wert 1 gesetzt werden. Um die Reaktion der VHDL-Beschreibung sichtbar
zu machen, muss anschlieend mithilfe des Run-Kommandos (zum Beispiel run 10ns)
etwas Simulationszeit vergehen. Der zeitliche Verlauf sowohl von Eingangs- und Ausgangssignalen als auch von internen Signalen einer VHDL-Beschreibung wird whrend der Simulation mithilfe sogenannter Waveform-Viewer grafisch dargestellt (vgl.
Kapitel3).
Das Anlegen unterschiedlicher Eingangswerte durch Simulator-Kommandos und die
berprfung der Schaltungsreaktion anhand der grafischen Ausgabe wird in der Praxis allerdings kaum verwendet. Wird der VHDL-Code des Systems erweitert, muss die
Kombinatorik
Takt
Kombinatorik
Register
Ausgnge
Register
Eingnge
Kombinatorik
218
Testbench
(VHDL)
Design
(VHDL)
Vergleich
=?
Protokoll-Datei
C-Programm
Stimuli-Datei
Referenz-Datei
219
7.3.4 Synthese
Die Synthese umfasst das Einlesen und Analysieren des VHDL-Codes mit einer
anschlieenden Umsetzung der beschriebenen Funktion auf die verfgbaren digitalen
Grundelemente. Das Ergebnis der Synthese ist eine sogenannte Netzliste, die Informationen ber die bentigten Grundelemente und die Verbindungen zwischen den Elementen
enthlt.
Die genaue Platzierung der Elemente sowie deren exakte Verdrahtung bleiben bei
diesem Schritt unbercksichtigt. Um die Verzgerungen durch die sptere Verdrahtung
bereits bei der Synthese bercksichtigen zu knnen, werden statistische Modelle (Wireload Models) eingesetzt.
Die Synthese analysiert die VHDL-Beschreibung auch im Hinblick auf konstante Signale. Wird der Wert eines Signals als konstant erkannt, kann dieses zur Optimierung ausgenutzt werden, da die Logik, die an diesem Signal angeschlossen ist, vereinfacht oder
im besten Fall komplett entfernt werden kann. Dieser Optimierungsschritt wird als Constant Propagation bezeichnet.
Ein Beispiel fr die Optimierung von Konstanten zeigt das nachfolgende Codefragment. Fr den Vergleich von count und buf_size realisiert die Synthese eine optimierte
Hardware, die den Vergleich eines 4-Bit-Wertes mit der Konstanten 10 durchfhrt. Wre
buf_size dagegen ein Signal, das verschiedene Werte annehmen kann, msste ein Vergleicher (also letztlich eine Subtraktion) von der Synthese implementiert werden.
architecture behave of my_module is
constant buf_size : integer := 10;
signalcount: signed (3 downto 0);
begin
process begin
wait until rising_edge (clk);
if count > buf_size then -- Hier nutzt die Synthese aus, dass
-- buf_size eine Konstante ist
end if;
end process;
end;
Code ohne eine digitale Funktion wird von der Synthese erkannt und ignoriert. Im
nachfolgend dargestellten Codeausschnitt wird dem Signal q auf eine etwas umstndliche Weise der Wert Null zugewiesen. Dieses wrde das Syntheseprogramm erkennen
und das Design entsprechend optimieren. Nachdem von der Synthese q als konstant
erkannt wurde, kann diese Information auch fr weitere Optimierungsschritte auf Basis
der Constant Propagation verwendet werden.
220
process (a,b,c)
variable v1 : std_logic;
variable v2 : std_logic;
begin
v1 := a and b;
v2 := (not a) and (not c);
q <= v1 and v2 and c;
end process;
7.3.6 Timinganalyse
Bereits bei der Synthese sowie whrend Platzierung und Verdrahtung wird das Zeitverhalten der Schaltung berwacht und gegebenenfalls optimiert. Nach Abschluss der Verdrahtung steht das genaue Zeitverhalten der Schaltung fest und wird abschlieend einer
Timinganalyse unterzogen.
Das wichtigste Ergebnis der Timinganalyse ist die Information ob die TimingAnforderungen eingehalten werden und wie gro der Worst Negative Slack (WNS) ist.
Dieser Wert gibt die Luft im kritischen Pfad des Designs an. Wenn beispielsweise
ein WNS von 1ns ausgegeben wird, bedeutet dies, dass alle Signale auch 1ns spter an
den Eingngen der Flip-Flops erscheinen knnten, ohne dass es zu einer Verletzung der
Setup-Zeit kme. Ist der WNS-Wert dagegen negativ, liegt ein Timingproblem vor. Die
Kombinatorik der Schaltung ist zu langsam. Wenn man die Taktfrequenz nicht reduzieren kann, sind hufig nderungen im VHDL-Code erforderlich (zum Beispiel der Einsatz von Pipelining, vgl. Kapitel6).
Als Zusammenfassung wird auch der Total Negative Slack (TNS) angeben. Hierbei
handelt es sich um die Summe aller Pfade, deren Zeitverhalten die Setup-Zeit der FlipFlops verletzt. Pfade, deren Zeitverhalten nicht verletzt ist, werden bei der TNS-Analyse
nicht bercksichtigt. Somit ist der TNS-Wert entweder negativ oder Null (falls keine
Setup-Time-Verletzungen vorliegen).
221
In Analogie zur Analyse der Setup-Zeit wird auch eine Hold-Time-Analyse durchgefhrt und der WHS- bzw. THS-Wert (Worst Hold Slack bzw. Total Hold Slack) ausgeben.
Diese Form der Analyse wird als statische Timinganalyse bezeichnet. Der Begriff
statisch meint, dass das Zeitverhalten ohne die genaue Kenntnis des dynamischen Verhaltens der Signale, also ohne das Anlegen von Eingangsstimuli, durchgefhrt wird.
Normalerweise ist diese Form der Analyse ausreichend. Allerdings ist zu beachten,
dass die statische Timinganalyse pessimistisch ist. Sie berprft alle Pfade eines Designs
auf mgliche Verletzungen des Zeitverhaltens. Manchmal werden jedoch einige Pfade
des Designs im praktischen Betrieb gar nicht verwendet. In diesem Fall kann eine dynamische Timinganalyse in Betracht gezogen werden. Darber hinaus kann es in besonderen Fllen, zum Beispiel wenn das Design kritische Taktbergnge enthlt, sinnvoll sein,
eine dynamische Timinganalyse durchzufhren.
Fr eine dynamische Timinganalyse wird das Design inklusive einer Modellierung
der Verzgerungen der Grundelemente in einer Simulation berprft. Hierzu mssen
geeignete Eingangsstimuli definiert werden, die alle relevanten Pfade testen. Auerdem
ist zu bedenken, dass die Komplexitt der Simulation aufgrund der Modellierung des
Zeitverhaltens deutlich hher ist als fr die Simulation des VHDL-Quellcodes und daher
eine grere Rechenzeit fr die Simulation bentigt wird.
7.3.7 Inbetriebnahme
Nachdem ein Entwurf durch Simulation verifiziert wurde, kann er, wenn er als ASIC realisiert werden soll, in einer Halbleiterfabrik produziert werden. Soll das System auf Basis
eines CPLDs oder eines FPGAs realisiert werden, erfolgt nach der Simulation die Programmierung des Bausteins mithilfe eines entsprechenden Programmiergertes. Ein Beispiel einer Experimentierplatine mit angeschlossenem Programmiergert ist in Abb.7.9
dargestellt.
Trotz sorgfltiger Simulation kann es in der Praxis Flle geben, die eine Fehlersuche
im laufenden Betrieb erfordern. Dies kommt vor, wenn in der Anwendung Flle auftreten, die in der Simulation nicht beachtet wurden oder aus Zeitgrnden nicht simuliert
werden konnten. Auch bei der Ansteuerung von externen Bauelementen, beispielsweise
einem Speicher, kann es passieren, dass sich der reale Baustein etwas anders verhlt, als
dies in der Simulation vorhergesehen wurde.
Zur Fehlersuche, insbesondere bei komplexen FPGAs, ist es hufig nicht ausreichend,
wenn nur die ueren Anschlsse des Systems zugnglich sind und der zeitliche Verlauf
von internen Signalen nicht sichtbar ist. Um die Fehlersuche im Betrieb zu erleichtern,
knnen dem Entwurf spezielle Module hinzugefgt werden, die in der Lage sind, den
zeitlichen Verlauf interner Signale aufzuzeichnen und ber eine Debug-Schnittstelle auszugeben. Auf diese Weise knnen die Zustnde der internen Signale hnlich wie in einer
VHDL-Simulation visualisiert werden.
222
Der Vorteil dieses Vorgehens ist es, dass auch FPGA-interne Signale im laufenden
Betrieb analysiert werden knnen. Auf der anderen Seite bentigt dieses Vorgehen aber
mehr Ressourcen des FPGAs. So wird zum Beispiel fr die Speicherung des zeitlichen
Verlaufs der beobachteten Signale interner Speicher bentigt. Um den Hardwareaufwand
fr die Verifikation im Betrieb klein zu halten, wird daher meist nur ein relativ kurzes
Zeitfenster aufgezeichnet. Darber hinaus werden nur wenige besonders wichtige Signale fr die Beobachtung im laufenden Betrieb ausgewhlt. Da die Beobachtbarkeit der
Signale gegenber einer Simulation deutlich eingeschrnkt ist, stellt dieses Vorgehen keinen Ersatz, sondern eine Ergnzung zur Simulation dar.
7.4bungsaufgaben
223
Fr erste Schritte im FPGA-Design wird meist kein iteratives Vorgehen bentigt: Sind
die Anforderungen an die Taktfrequenz moderat gewhlt und die Anforderungen an den
maximalen Ressourcenbedarf einer Schaltung von untergeordneter Bedeutung, wird man
hufig bereits mit dem ersten Syntheseversuch ein zufriedenstellendes Ergebnis erzielen.
7.4 bungsaufgaben
Prfen Sie sich selbst mit den Fragen am Kapitelende. Die Lsungen und Antworten finden Sie am Ende des Buches.
Sofern nicht anders vermerkt, ist nur eine Antwort richtig.
Aufgabe 7.1
Welche Aussage ist im Hinblick auf einen Vergleich der Bausteine 74HC00 und
74AHC00 korrekt?
a) Beide Bausteine besitzen den gleichen Versorgungsspannungsbereich.
b) Die logischen Funktionen der Bausteine sind identisch.
c) Die logische Funktion der Bausteine ist vom Hersteller abhngig.
d) Der minimale High-Pegel an den Eingngen der Bausteine ist identisch.
Aufgabe 7.2
Was beschreibt der Begriff Fan-out?
a) Die Anzahl der Ausgnge eines Schaltkreises.
b) Die Anzahl der Leitungen die an einen Ausgang angeschlossen werden drfen.
c) Ein Ma fr die Last, die die Ausgnge des Bausteins treiben knnen.
d) Ein Ma fr die Last, die ein Eingang des Bausteins darstellt.
Aufgabe 7.3
Was gilt fr die unterschiedlichen Bausteine einer Familie (zum Beispiel HC) der
74er-Serie?
a) Alle Bausteine besitzen die gleiche Verzgerungszeit.
b) Eingnge der Bausteine mssen immer mit Ausgngen der gleichen Familie verbunden werden.
c) Fr alle Bausteine wird vom Hersteller eine maximale Schaltzeit unabhngig von der
Ausgangsbelastung garantiert.
d) Alle Bausteine besitzen den gleichen Versorgungsspannungsbereich.
Aufgabe 7.4
Welche Aussage trifft auf ASICs zu? (Mehrere Antworten sind richtig)
224
Ein-/
Aufgabe 7.6
Was meint der Begriff Programmierbare Logik?
a) Die Bausteine knnen Programme ausfhren, die in Sprachen wie C oder Java
geschrieben sind.
b) ASICs, die einen softwareprogrammierbaren Mikroprozessor beinhalten.
c) Die logische Funktion der Hardware des Bausteins kann durch den Anwender programmiert werden.
d) Logische Funktionen, die mithilfe eines Programms auf einem PC simuliert werden.
Aufgabe 7.7
Welches ist typische Reihenfolge der Entwurfsschritte?
a) Synthese, Platzierung, Verdrahtung
b) Platzierung, Verdrahtung, Synthese
c) Platzierung, Synthese, Verdrahtung
d) Synthese, Verdrahtung, Platzierung
Aufgabe 7.8
Welche Kombinationen von Worst Negative Slack (WNS) und Total Negative Slack
(TNS) knnen in der Praxis auftreten? (Mehrere Antworten sind richtig)
a) WNS: -3ns; TNS: -4ns
b) WNS: -3ns; TNS: 0ns
c) WNS: +3ns; TNS: +5ns
d) WNS: 0ns; TNS: 0ns
VHDL-Vertiefung
In Kapitel3 wurden die wichtigsten Sprachelemente von VHDL vorgestellt und Sie
sind damit bereits in der Lage, digitale Schaltungen in VHDL zu entwerfen. In diesem
Kapitel werden vertiefende Aspekte der Hardwarebeschreibung mit VHDL dargestellt.
Einige dieser Sprachelemente erffnen neue Mglichkeiten zur Beschreibung von Hardwarekomponenten. Andere knnen helfen, den Code besser zu strukturieren und lesbarer
zu gestalten. Darber hinaus werden in diesem Kapitel VHDL-Konstrukte vorgestellt,
die zur berprfung der von Ihnen erstellten Hardwarebeschreibungen eingesetzt werden knnen. Nach dem Studium dieses Kapitels haben Sie die wichtigsten Aspekte der
Sprache VHDL kennengelernt und knnen auch komplexere Schaltungen in VHDL
realisieren.
225
226
8VHDL-Vertiefung
8.1.2 Boolean
Wie viele Programmiersprachen untersttzt VHDL den Datentyp boolean. Diesem
Datentyp knnen nur die Werte true oder false zugewiesen werden. Ein Objekt dieses
Datentyps entspricht in Hardware einem einzelnen Bit. Die Bezeichnung der Werte
erfolgt jedoch nicht mit 0 oder 1. Dies wre dagegen syntaktisch inkorrekt (da es sich bei
0 und 1 um Werte vom Typ integer handelt) und wrde zu Fehlermeldungen fhren.
Ein hufiger Anwendungsfall fr diesen Datentyp ist die Abfrage von Bedingungen.
Werden beispielsweise zwei Werte verglichen, so ist das Ergebnis dieses Vergleichs vom
Datentyp boolean. Selbstverstndlich knnen auch Objekte, zum Beispiel Signale, mit
diesem Datentyp angelegt werden, die dann in einer Abfrage ausgewertet werden.
8.1.3 Time
VHDL untersttzt die Verwendung von physikalischen Datentypen. Die Werte dieses
Datentyps setzen sich aus einem Zahlenwert und einer Einheit zusammen. Der wichtigste physikalische Datentyp ist time. Dieser Datentyp erlaubt die Angabe von Zeiten
mit den Einheiten Femtosekunde (fs), Picosekunde (ps), Nanosekunde (ns), Mikrosekunde (ms), Millisekunde (msec), Sekunde (sec), Minute (min) oder Stunde (hr).
Der Datentyp time ist nicht synthesefhig, da Zeitangaben im Zuge der Synthese
ignoriert werden. Fr Testbenches ist der Datentyp jedoch sehr hilfreich um das zeitliche Verhalten von Signalen nachzubilden. Ein Beispiel fr die Verwendung des Datentyps time ist im nachfolgenden Codeausschnitt dargestellt. Das Signal clk wird durch
eine Not-Anweisung invertiert. Durch Angabe einer zeitlichen Verzgerung mithilfe des
Schlsselworts after ergibt sich ein Signal, welches alle 5 Nanosekunden invertiert wird.
Auf diese Weise wird also ein digitales Taktsignal modelliert, welches eine Periodendauer von 10ns besitzt. Die Definition des Signals clk beinhaltet die initiale Zuweisung
des Wertes 0. Auf diese Weise wird sichergestellt, dass clk zu Beginn der Simulation
einen definierten Wert erhlt.
signal clk : std_logic := '0';
Auch die Definition eigener physikalischer Datentypen ist in VHDL mglich. Allerdings wird hiervon selten Gebrauch gemacht, sodass dieser Aspekt hier nicht weiter vertieft wird.
227
228
8VHDL-Vertiefung
type character is (
NUL, SOH, STX, ETX, EOT, ENQ, ACK, BEL,
BS, HT, LF, VT, FF, CR, SO, SI,
DLE, DC1, DC2, DC3, DC4, NAK, SYN, ETB,
CAN, EM, SUB, ESC, FSP, GSP, RSP, USP,
' ', '!', '"', '#', '$', '%', '&', ''',
'(', ')', '*', '+', ',', '-', '.', '/',
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', ':', ';', '<', '=', '>', '?',
'@', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Y', 'Z', '[', '\', ']', '^', '_',
'`', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
'x', 'y', 'z', '{', '|', '}', '~', DEL,
-- weitere 128 Werte
);
hnlich wie fr den Datentyp std_logic existiert ein zugehriger vektorieller Datentyp mit dem Namen string, in dem Zeichenketten abgelegt werden knnen. Der folgende
Code zeigt einige Beispiele zur Verwendung der Datentypen.
signal i : integer;
signal my_char : character;
signal my_string : string(1 to 10) := "Hallo Welt";
my_string(7 to 10) <= "VHDL";-- my_string enthlt danach "Hallo VHDL"
my_string(6) <= '_';-- my_string enthlt danach "Hallo_Welt"
my_char <= my_string(1);-- my_char enthlt danach 'H'
8.1.7 Subtypes
Man kann von deklarierten Typen weitere Typen (subtype) ableiten. Ein Subtype ist ein
Datentyp mit eingeschrnktem Wertebereich im Vergleich zum Basistyp. Die Syntax zur
Definition eines Subtypes lautet:
subtype <subtype_name> is <subtype_indication>;
Die subtype_indication enthlt den Namen des Basisdatentyps und optional eine Einschrnkung, welcher Bereich des Basisdatentyps dem neu definierten Subtype zur Verfgung stehen soll.
229
-- Subtype Beispiele:
subtype dezimal_ziffer is integer range 0 to 9; -- Bereichseinschrnkung
subtype byte is std_logic_vector (7 downto 0); -- Indexeinschrnkung
subtype ganze_zahl is integer; -- ganze_zahl = anderer Name fr Integer
-- Beispiele fr vordefinierte Subtypes:
subtype natural is integer range 0 to integer'high;
subtype positive is integer range 1 to integer'high;
subtype std_logic is resolved std_ulogic;
subtype X01 is resolved std_ulogic range 'X' to '1'; -- ('X','0','1')
Die Angabe resolved bedeutet, dass fr den hier definierten Datentyp eine Auflsungsfunktion definiert ist.
Bei der Definition der Subtypes natural und positive wird das Attribut high verwendet. Mithilfe dieses Attributs wird der grte Zahlenwert des Typs integer ausgewhlt.
Der Ausdruck integerhigh ist also gleichbedeutend mit +2147483647.
8.1.8 Arrays
Wie alle Programmiersprachen untersttzt auch VHDL Arrays, also Felder von beliebigen Datentypen. Die Definition eines Arrays ist in VHDL etwas umstndlicher gelst als
in den meisten Programmiersprachen, da man zunchst das gewnschte Array als neuen
Datentyp definieren muss. Erst anschlieend darf dieser neue Datentyp fr die Definition
von Signalen oder Variablen verwendet werden. Die Typdefinition eines Arraydatentyps
sieht wie folgt aus:
type <type_name> is array (range) of <element_data_type>;
Nehmen wir an, Sie mchten ein Array aus 10 Integer-Werten anlegen. Dann sehen
die Typdefinition und die Definition eines entsprechenden Array-Signals zum Beispiel so
aus:
type my_int_array_type is array (1 to 10) of integer; -- neuer Typ
signal my_ints : my_int_array_type; -- Signal auf Basis des neuen Typen
Ein Zugriff auf das Array erfolgt dann genauso wie beim Zugriff auf einzelne Elemente eines Signals vom Typ std_logic_vector (denn der Datentyp std_logic_vector ist
auch ein Array-Datentyp):
my_ints(6) <= 24;
Selbstverstndlich kann man auch mehrdimensionale Arrays anlegen, wenn man die
Typdefinitionen verschachtelt:
230
8VHDL-Vertiefung
Arrays werden hufig bentigt, um Speicher zu modellieren. Sie wollen zum Beispiel
einen Speicher der Gre 1 kByte modellieren. Dies erreichen Sie mit folgendem Code:
type my_mem_type is array (0 to 1023) of std_logic_vector (7 downto 0);
signal mem : my_mem_type;
8.1.9 Records
VHDL untersttzt Records, also das Zusammenfassen mehrerer Werte in einem neuen
Datentyp. Dies ist mit Structs vergleichbar, die Sie vielleicht aus einer Programmiersprache bereits kennen. Die allgemeine Form einer Record-Definition sieht wie folgt aus:
type <record_type_name> is
element_name : element_typ;
{element_name : element_typ;} -- Ggf. beliebig viele weitere Elemente
end record [record_type_name]; -- record_type_name ist optional
Die Definition und Verwendung von Records wird durch die nachfolgenden Beispiele
verdeutlicht:
type bus_mosi is
addr : std_logic_vector(31 downto 0);
data : std_logic_vector(31 downto 0);
rd: std_logic;
wr: std_logic;
end record;
type bus_miso is
data: std_logic_vector(31 downto 0);
ready : std_logic;
end record;
Wenn Sie Records angelegt haben, drfen Sie den Datentyp wie jeden anderen Datentyp verwenden. Sehr praktisch kann es sein, Records fr die Ports eines Moduls einzusetzen: Wenn viele Signale gemeinsam zu verdrahten sind (zum Beispiel Bussignale, die
von einem Master an mehrere Slaves anzuschlieen sind), knnen Records die Lesbarkeit des Codes verbessern.
231
Der Zugriff auf die Elemente eines Records erfolgt ber selected names, den
Punkt-Operator:
signal bus_out : bus_mosi;
signal bus_in : bus_miso;
-- weiterer VHDL-Code
bus_out.addr <= x"1234_5678"; -- Zugriff auf die Elemente des Records
bus_out.rd<= '1';
bus_out.wr<= '0';
8.2.1 Function
Eine VHDL-Funktion (Schlsselwort: function) dient dazu, aus einem oder mehreren
bergabeparametern einen Rckgabewert zu berechnen. Wichtige Eigenschaften von
Funktionen sind:
Funktionen haben immer exakt einen Rckgabewert. Die Rckgabe erfolgt mithilfe
des Schlsselwortes return.
Die Parameter drfen innerhalb der Funktion nur gelesen werden. Schreibzugriffe
sind nicht erlaubt.
Innerhalb von Funktionen knnen lokale Variablen oder Konstanten definiert werden.
Die Variablen werden mit jedem Funktionsaufruf neu initialisiert. Mit anderen Worten: Wird einer Variablen ein Wert zugewiesen, steht dieser beim nchsten Aufruf der
Funktion nicht mehr zur Verfgung.
Funktionen drfen keine Wait-Anweisungen enthalten.
Funktionen drfen keine Signalzuweisungen enthalten.
Funktionen drfen sowohl Funktionen als auch Prozeduren (s.u.) aufrufen. Auch
rekursive Aufrufe (eine Funktion ruft sich selbst auf) sind erlaubt.
Die syntaktische Struktur einer VHDL-Funktion stellt der nachfolgende Code dar.
232
function <Funktionsname>
wert> is
<Deklarationen>
begin
<Anweisungen>
end function;
8VHDL-Vertiefung
({<Parameterliste>})
return
<Typ_Rckgabe-
Funktionen drfen im Deklarationsteil einer Architecture (also vor dem begin) oder in
Paketen definiert werden.
Als ein Beispiel ist im Folgenden eine VHDL-Funktion zur Umwandlung vom GrayCode in eine Dualzahl dargestellt.
Die Funktionsdefinition verwendet den Datentyp std_logic_vector ohne die Lnge des
Vektors zu spezifizieren. Auf diese Weise knnen durch die Funktion Vektoren mit einer
beliebigen Lnge verarbeitet werden. Allerdings wird fr die Implementierung der Funktion die Lnge des jeweils bei Aufruf der Funktion bergebenen Vektors bentigt. Diese
lsst sich sehr elegant mithilfe des length-Attributs des Vektors bestimmen. Die Schreibweise gray_vallength liefert die Lnge (Anzahl der Elemente) des Vektors gray_val und
wird zu Beginn der Funktion genutzt.
-- Definition der Funktion Gray2Bin
function Gray2Bin (gray_val : std_logic_vector) return std_logic_vector
is
constant vlen : integer := gray_val'length;
variable temp : std_logic_vector(vlen-1 downto 0);
begin
temp := gray_val;
if vlen > 1 then
for i in vlen-2 downto 0 loop
temp(i) := gray_val(i) xor temp(i+1);
end loop;
end if;
return temp(vlen-1 downto 0);
end function;
-- Beispiel fr den Aufruf der Funktion Gray2Bin
8.2.2 Procedure
VHDL-Prozeduren knnen ebenso wie Funktionen im Deklarationsteil einer Architecture oder in Paketen definiert werden.
233
Ein Beispiel fr eine VHDL-Prozedur zeigt der nachfolgende Code, der eine Sortierung von drei Signalen implementiert.
-- Prozedur sort_u3
-- Sortiert 3 Werte vom Datentyp
procedure sort_u3 (signal val1 :
signal val2 :
signal val3 :
signal min:
signal med:
signal max:
variable
variable
variable
variable
min_v
med_v
max_v
tmp_v
begin
max_v := val1;
med_v := val2;
min_v := val3;
:
:
:
:
unsigned
inunsigned;
inunsigned;
inunsigned;
out unsigned;
out unsigned;
out unsigned) is
unsigned(min'length-1
unsigned(med'length-1
unsigned(max'length-1
unsigned(min'length-1
downto
downto
downto
downto
0);
0);
0);
0);
234
8VHDL-Vertiefung
if min_v
tmp_v
med_v
min_v
end if;
>=
:=
:=
:=
if med_v
tmp_v
max_v
med_v
end if;
>=
:=
:=
:=
if min_v
tmp_v
med_v
min_v
end if;
>=
:=
:=
:=
sort_u3 (sig_1,sig_2,sig_3,sig_min,sig_med,sig_max);
-- alle sechs Signale mssen vom Typ unsigned sein
-- und die gleiche Wortbreite besitzen
235
Um einem Modul whrend der Instanziierung Parameterwerte bergeben zu knnen, muss die Entity des Moduls neben einer Port-Liste eine auch eine Parameter-Liste
(Schlsselwort Generic) enthalten.
Diese Parameter (Generics) knnen dann in symbolischer Form bei der Beschreibung
des Moduls verwendet werden. Erst mit der Instanziierung des Moduls werden die (fr
diese Instanz) zu verwendenden Werte der Parameter festgelegt.
In der Praxis werden Generics hufig mit dem Datentyp integer oder natural definiert.
Aber auch alle anderen VHDL-Datentypen sind zulssig und knnen fr bei der Definition eines Generics eingesetzt werden.
Ein Beispiel soll die Vorgehensweise verdeutlichen: Angenommen Sie mchten ein
Modul erstellen, das ein Signal um eine bestimmte Anzahl von Taktzyklen verzgern soll.
Dieses Modul soll mglichst flexibel sein und fr beliebige Wortbreiten oder Verzgerungen einsetzbar sein. Das Modul kann mithilfe von Generics wie folgt realisiert werden:
library ieee;
use ieee.std_logic_1164.all;
entity delay_unit is
generic (D: natural := 3;-- Anzahl der Verzgerungszyklen (D>0 !)
N: natural := 8); -- Breite der verzgerten Werte (N>0 !)
port (clk: instd_logic;
d_in: instd_logic_vector(N-1 downto 0);
d_out: out std_logic_vector(N-1 downto 0));
end;
architecture behave of delay_unit is
-- Hier legen wir ein Array mit D Eintrgen an
-- Jeder Eintrag nimmt N Bits auf
--- Durch die Synthese wird eine Kette von D Registern (also D-FFs)
-- mit der Wortbreite N implementiert
type d_arr_type is array (0 to D-1) of std_logic_vector(N-1 downto
0);
signal d_array : d_arr_type;
begin
process begin
wait until rising_edge(clk);
for i in 0 to (D-2) loop -- Werte in der FF-Kette verschieben
d_array(i) <= d_array(i+1);
end loop;
d_array(D-1) <= d_in; -- Eingangswert an oberster Position
-- der FF-Kette abspeichern
end process;
d_out <= d_array(0); -- ltesten Wert ausgeben
end;
236
8VHDL-Vertiefung
Bei der Instanziierung des Moduls erfolgt nun neben der Portzuordnung (port map)
auch die Zuordnung der verwendeten Generics (generic map). Ist bei der Deklaration des
Parameters in der Entity ein Default-Wert angegeben worden, kann die Parameterzuordnung auch entfallen. In diesem Fall wird fr diese Instanz der angegebene Default-Wert
verwendet.
Die Werte, die den Generics bei der Instanziierung zugeordnet werden, mssen zur
bersetzungszeit des bekannt VHDL-Codes berechenbar sein. Werte, die sich erst whrend der Simulation ergeben, sind nicht erlaubt. So ist es beispielsweise nicht mglich,
einem Generic ein Signal zuzuweisen.
Der folgende Code zeigt die Instanziierung des oben beschriebenen Moduls.
8.2.4 Generate-Anweisung
In manchen Fllen lassen sich Parameter sehr elegant in einer Generate-Anweisung
verwenden. Die Generate-Anweisung existiert in den beiden Varianten if-generate und
for-generate und dient der bedingten beziehungsweise wiederholten Ausfhrung nebenlufiger Anweisungen wie Signalzuweisungen, Prozesse oder Instanziierungen.
Die allgemeine Schreibweise der beiden Generate-Anweisungen lautet
<Name>: if <Bedingung> generate
<Nebenlufige Anweisungen>
end generate;
<Name>: for <Laufindex> in <Bereich> generate
<Nebenlufige Anweisungen>
end generate;
237
Betrachten wir hierzu das Beispiel des Moduls delay_unit aus dem vorangegangenen
Abschnitt. Das Modul kann nur eingesetzt werden, wenn die Verzgerung mindestens einen
Taktzyklus betrgt, also D>1 gilt. Wrde D zu 0 gewhlt werden, wrde die Zuweisung
d_array(D-1) <= d_in;
auf d_array(1) zugreifen. Dieser Feldindex existiert jedoch nicht, da der kleinste
mgliche Index 0 ist. Eine Fehlermeldung wre die Folge.
Mchte man auch die Auswahl D=0 (also keine Verzgerung des Signals) ermglichen, kann dies mithilfe der If-Generate-Anweisung realisiert werden. Da bei der IfGenerate-Anweisung kein else untersttzt wird, werden zwei If-Generate-Anweisungen
bentigt. Der VHDL-Code kann wie folgt aussehen:
entity my_module is
generic (delay_count : natural := 1);
port (clk : in std_logic;
-- weitere Ports
);
end;
architecture behave of my_module is
signal q_sv32, x_sv32 : std_logic_vector (31 downto 0);
begin
-- Prozesse und nebenlufige Zuweisungen dieses Moduls
GEN_D0: if delay_count = 0 generate -- Ein Label muss sein
-- delay_count = 0, also direkte Zuweisung
q_sv32 <= x_sv32;
end generate;
GEN_D1: if delay_count > 0 generate
-- delay_count > 0, also das Modul einbauen
-- fr die Wortbreite N wird der Defaultwert (32)
-- aus der Entity-Definition der Delay_Unit genutzt
u1 : delay_unit
generic map (D => delay_count)
port map (clk => clk, d_in => x_sv32, d_out => q_sv32);
end generate;
end;
238
8VHDL-Vertiefung
Eine mgliche Lsung mithilfe der For-Generate-Anweisung kann dann wie folgt formuliert werden:
architecture for_gen_arch of and_n is
begin
AND2GEN: for i in 0 to N-1 generate
ui : and_2 port map (a => a(i), b => b(i), q => q(i));
end generate;
end;
Beide Formen der Generate-Anweisung sollten nicht mit hnlichen Sprachkonstrukten fr Prozesse verwechselt werden. Die If- und For-Anweisungen in Prozessen
beinhalten sequenziell ausgefhrten Code, der Teil eines Prozesses ist. Die GenerateAnweisung bezieht sich dagegen immer auf nebenlufigen Code, beispielsweise Signalzuweisungen, Prozesse oder Instanziierungen.
Insbesondere mssen die Bereichsgrenzen der For-Generate-Anweisung beziehungsweise die Bedingung der If-Generate-Anweisung zum Zeitpunkt der bersetzung des
Moduls berechenbar sein. Der Grund hierfr ist, dass aus dem VHDL-Code Hardware
generiert wird und daher bekannt sein muss, wie viele und welche Schaltungselemente
erzeugt werden sollen. Es wre beispielsweise nicht mglich, in einer If-Generate-Bedingung den Wert eines Signals abzufragen. Da sich der Wert des Signals erst whrend der
Simulation oder whrend des Betriebs der Hardware ergibt, ist die Bedingung zum bersetzungszeitpunkt des Moduls nicht auflsbar und wrde Fehlermeldungen bei der bersetzung des VHDL-Codes zur Folge haben.
8.2.5 Attribute
Mit Attributen lassen sich Eigenschaften von Objekten und Typen abfragen. VHDLBeschreibungen knnen hiermit teilweise krzer oder eleganter realisiert werden. Der
Wert eines Attributs kann in einem VHDL-Modell weiter verwendet werden. Attribute
lassen sich auf viele Datentypen anwenden, beispielsweise lsst sich die Anzahl der Elemente in einem Vektor bestimmen. Die generelle Syntax fr Verwendung von Attributen
lautet:
<typ_name>'<attribut_bezeichner>
Die Werte der Attribute unterscheiden sich von den Datenobjektwerten. VHDL unterscheidet vordefinierte und benutzerdefinierte Attribute. Die wichtigsten vordefinierte
Attribute sind: left, right, high, low, length, pos, val und range.
Der folgende Code zeigt einige Beispiele zur Verwendung von Attributen:
239
process
type farben_typ is (rot, gruen, blau, gelb, lila);
variable farbe : farben_typ;
variable i: integer;
variable c: character := 'A';
variable slv: std_logic_vector (7 downto 0);
begin
farbe := farben_typ'left;-- liefert: rot
farbe := farben_typ'right;-- liefert: lila
i := slv'low;-- liefert: 0 (kleinster Indexwert)
i := slv'high;-- liefert: 7 (hchster Indexwert)
i := slv'length;-- liefert: 8 (Lnge des Vektors)
i := character'pos(c);-- liefert: 65 (= ASCII-Wert von 'A')
c := character'val(65);-- liefert: 'A'(= Zeichen an Position 65)
wait;
end process;
240
8VHDL-Vertiefung
In der alternativen Beschreibung ohne Angabe der VHDL-Bibliothek wird eine Component-Anweisung verwendet. Diese Anweisung macht das zu instanziierende Modul in
der Architecture bekannt und anschlieend kann das Modul beliebig oft in der VHDLArchitecture verwendet werden.
Die Component-Anweisung beschreibt im Wesentlichen die Anschlsse des zu instanziierenden Moduls und ist der Entity-Deklaration des Moduls sehr hnlich: Im Gegensatz zur Entity-Deklaration wird statt des Schlsselwortes entity das Schlsselwort
component verwendet.
Die Component-Anweisung des UND-Gatters wrde wie folgt aussehen:
component and_2 is
port (a : instd_logic;
241
Die Instanziierung des damit bekannt gemachten Moduls beginnt (wie bei der bereits
bekannten Entity-Instanziierung) mit einem eindeutigen Namen fr diese Instanz. Nach
einem Doppelpunkt wird die Komponente (in diesem Beispiel and_2) angeben. Darauf folgt
die Zuordnung der Anschlsse, die mit den Schlsselwrtern port map eingeleitet wird.
Fr das Beispiel eines Vierfach-UND-Moduls, welches UND-Gatter instanziiert, knnen Entity und Architecture wie folgt beschrieben werden:
library ieee;
use ieee.std_logic_1164.all;
entity and_4x2 is
port (a : instd_logic_vector (3 downto 0);
b : instd_logic_vector (3 downto 0);
q : out std_logic_vector (3 downto 0));
end;
architecture behave of and_4x2 is
component and_2 is
port (a : instd_logic;
b : instd_logic;
q : out std_logic);
end component;
begin
u0
u1
u2
u3
end;
:
:
:
:
and_2
and_2
and_2
and_2
port
port
port
port
map
map
map
map
(a
(a
(a
(a
=>
=>
=>
=>
a(0),
a(1),
a(2),
a(3),
b
b
b
b
=>
=>
=>
=>
b(0),
b(1),
b(2),
b(3),
q
q
q
q
=>
=>
=>
=>
q(0));
q(1));
q(2));
q(3));
Die in Kapitel3 eingefhrte Entity-Instanziierung und Instanziierung mit der ComponentAnweisung sind gleichwertig und letztlich eine Frage des bevorzugten Coding-Styles.
Dennoch sollte man die Varianten kennen, da beide in der Praxis verwendet werden.
8.2.7 Pakete
Einige hufig verwendete Bibliotheken und die darin enthaltenen Pakete (Packages) wurden in den vorangegangenen Abschnitten bereits verwendet. Pakete sind immer dann
242
8VHDL-Vertiefung
Als ein Beispiel fr die Anwendung von Paketen zeigt der nachfolgende Code ein
Paket, das Funktionen zur Umwandlung des Gray-Codes in Dualzahlen und umgekehrt
enthlt.
library ieee;
use ieee.std_logic_1164.all;
------- Package Header
-----package gray_pkg is
-- Funktionsdeklarationen -function gray2bin (gray_val : std_logic_vector)
return std_logic_vector;
243
244
8VHDL-Vertiefung
245
library unisim;
use unisim.vcomponents.all;
library unimacro;
use unimacro.vcomponents.all;
my_ram_instance : bram_sdp_macro
generic map (
bram_size=> "18Kb",-- Auswahl Speichergroesse: "18Kb", "36Kb"
device=> "7SERIES", -- Zielbaustein-Serie
write_width => 8,-- Wortbreite Schreibport
read_width=> 8,-- Wortbreite Leseport
do_reg=> 0,-- Zusaetzliches Register am Daten-Ausgang?
init_file=> "NONE",-- evtl. Datei mit Initialwerten
sim_collision_check => "NONE", -- Simulation: Schreib/Leseoperation
-- auf gleiche Adresse checken?
srval=> x"000000000000000000", -- Ausgabe nach Reset
write_mode=> "WRITE_FIRST"-- Auswahl Kollisionsbehandlung
)
port map (
rst=> rst,-- Reseteingang
rdclk=> rdclk,-- Taktsignal Leseport
rdaddr => rdaddr, -- Leseadresse
rden=> rden,-- Enable: Lesen
regce=> '1',-- Enable fr Ausgangsregister
do=> do,-- Lesedaten
wrclk=> wrclk,-- Taktsignal Schreibport
wraddr => wraddr, -- Schreibadresse
wren=> wren,-- Enable-Signal fr Schreiboperation
we=> we,-- Byte-weises Enable-Signal
di=> di-- Schreibdaten
);
Ein Nachteil der Instanziierung ist, dass man unter anderem die Gre der Speichermodule auf dem FPGA kennen muss. Wird ein Speicher bentigt, der grer als ein
einzelner Speicherblock ist, muss die entsprechende Anzahl an Speichermodulen instanziiert werden. Darber hinaus lsst sich VHDL-Code, der die Instanziierung von Elementen verwendet, nicht unbedingt auf andere FPGAs bertragen. So knnten sich zum
Beispiel die Eigenschaften der Speichermodule einer nachfolgenden FPGA-Generation
ndern. Der VHDL-Code wre damit nicht mehr zu dem neuen FPGA kompatibel und
msste entsprechend angepasst werden.
246
8VHDL-Vertiefung
dann eine Komponente, die im VHDL-Code eingebunden werden kann. Der Vorteil
dabei ist, dass der Blockgenerator auch grere Speicher aus mehreren Speicherblcken
zusammenstellen kann. Falls zustzliche kombinatorische Logik erforderlich ist, wird
auch diese erzeugt.
Im unten stehenden Beispiel wird ein FIFO-Speicher aufgerufen, der Datenworte
um eine feste Anzahl an Takten verzgert. FIFO steht dabei fr First-In-First-Out. Der
Blockgenerator erzeugt die VHDL-Dateien des Moduls fifo_memory. Neben SpeicherModulen knnen Generatoren auch andere Funktionen erzeugen, beispielsweise Divisionsschaltungen oder Filter.
my_fifo_instance : fifo_memory
port map (
clk=> clk,
d_in=> d_in,
d_out => d_out);
Wie bei der Instanziierung von Modulen aus der FPGA-Bibliothek kann ein Untermodul nicht unbedingt auf andere FPGAs bertragen werden.
Dieser Nachteil lsst sich durch die Inferenz von Speichern umgehen. Hierzu muss
der VHDL-Code so geschrieben werden, dass er den Eigenschaften des Speichers
entspricht.
instd_logic;-- Clock
instd_logic;-- Enable
instd_logic;-- Write enable
instd_logic_vector(AW-1 downto 0);-- Address
instd_logic_vector(DW-1 downto 0);-- Data in
247
In der Regel sollte die Inferenz bevorzugt werden, da diese bersichtlicher ist
und sich der Code leichter auf andere FPGAs bertragen lsst. Fr einige Module,
beispielsweise PLLs, hat man nicht die Wahl zwischen Instanziierung und Inferenz.
248
8VHDL-Vertiefung
249
-- Port 2
clk2 : instd_logic; -- Clock
we2: instd_logic; -- Write enable
a2: instd_logic_vector(AW-1 downto 0); -- Address
d2: instd_logic_vector(DW-1 downto 0); -- Data in
q2: out std_logic_vector(DW-1 downto 0)-- Data out
);
end;
architecture rtl of bmem_dp is
type tmem is array(0 to 2**AW-1) of std_logic_vector(DW-1 downto 0);
-- Hier wird die "shared variable" definiert
shared variable mem : tmem := ((others=> (others=>'0')));
signal q1_sig : std_logic_vector(DW-1 downto 0) := (others=>'0');
signal q2_sig : std_logic_vector(DW-1 downto 0) := (others=>'0');
begin
q1 <= q1_sig;
q2 <= q2_sig;
-- Port 1
process begin
wait until rising_edge(clk1);
if (we1 = '1') then
mem(to_integer(unsigned(a1))) := d1;
end if;
q1_sig <= mem(to_integer(unsigned(a1)));
end process;
-- Port 2
process begin
wait until rising_edge(clk2);
if (we2 = '1') then
mem(to_integer(unsigned(a2))) := d2;
end if;
q2_sig <= mem(to_integer(unsigned(a2)));
end process;
end;
Natrlich kann dieser Code auch eingesetzt werden, wenn die beiden Module, die auf
den Speicher zugreifen, identische Taktsignale verwenden. In diesem Fall wird an die
Taktanschlsse clk1 und clk2 einfach das gleiche Taktsignal angelegt.
Achtung: Lassen Sie sich nicht dazu verleiten, Shared Variables als Ersatz fr VHDLSignale einzusetzen. Shared Variables knnen zwar von typischen Synthesetools mit
entsprechenden Warnmeldungen in Hardware bersetzt werden, aber das Verhalten von
250
8VHDL-Vertiefung
Schreibzugriffen aus zwei Prozessen heraus ist fr Shared Variables nicht eindeutig definiert. Im obigen Fall der Beschreibung eines Speichermoduls ist dies akzeptabel und wird
vom Synthesetool korrekt in einen entsprechenden Dual-Port-Speicher berfhrt. In den
meisten anderen Fllen kann die Verwendung von Shared Variables zu Unterschieden
zwischen Simulation und synthetisierter Hardware fhren.
Das eigentliche ffnen der Datei erfolgt anschlieend mithilfe der Prozedur file_
open(). Diese Prozedur erwartet vier Parameter. Der erste Parameter ist vom Datentyp
FILE_OPEN_STATUS. Ihm wird der Status nach dem ffnen der Datei zugewiesen. War
das ffnen der Datei erfolgreich, erhlt der Parameter den Wert OPEN_OK. Fr eventuelle Fehlerflle stehen die Werte STATUS_ERROR, NAME_ERROR, MODE_ERROR
zur Verfgung. Der zweite Parameter ist vom Datentyp FILE. Hier wird der zuvor definierte Dateidatentyp bergeben. Der Dateiname wird als dritter Parameter angeben. Ob
die Datei zum Lesen oder Schreiben geffnet wird, legt der vierte Parameter fest: Mit
READ_MODE wird eine Datei zum Lesen geffnet, whrend WRITE_MODE eine zu
schreibende Datei ffnet. Sollen Daten an den Inhalt einer bestehenden Datei angehngt
werden, wird als vierter Parameter APPEND_MODE verwendet.
251
Ein mgliches Beispiel fr das ffnen einer Datei zeigt der nachfolgende
Codeausschnitt:
file_open(my_file_status, my_file, "my_values.dat", WRITE_MODE);
Fr die Ein-/Ausgabe stellt VHDL die Prozeduren read() und write() zur Verfgung.
Als Parameter werden der Dateideskriptor und eine Variable bergeben, die den auszugebenden Wert enthlt (write) oder welcher der eingelesene Wert zugewiesen wird (read).
Ein Beispiel wie in einem Prozess eine binre Datei geffnet und der Schreibzugriff
realisiert wird, zeigt der nachfolgende Code:
process
type my_file_type is file of integer;
file my_file : my_file_type;
variable cnt : integer:= 64;
variable my_file_status : FILE_OPEN_STATUS;
begin
-- Datei ffnen
file_open(my_file_status, my_file, "my_values.dat", WRITE_MODE);
if my_file_status = OPEN_OK then -- Datei erfolgreich geffnet?
for i in 1 to 10 loop
write(my_file, cnt); -- Werte in die Datei schreiben
cnt := cnt+1;
end loop;
file_close(my_file); -- Datei schlieen
end if;
wait; -- Diesen Prozess mit einfacher Wait-Anweisung beenden
end process;
252
8VHDL-Vertiefung
Bei der ersten Zeile ist es fr einen Menschen sofort offensichtlich, dass es sich um
eine Zeichenkette vom Datentyp string handelt. Bei der zweiten Zeile ist dies weniger
offensichtlich. Schlielich knnte es sich beispielsweise auch um einen Wert vom Typ
std_logic_vector handeln. Damit nun die korrekte Implementierung der Write-Prozedur
aufgerufen werden kann, muss der Datentyp in diesem Fall explizit angeben werden.
Dies gilt auch fr die eigentlich fr einen Menschen offensichtlichen Flle. Die explizite
Kennzeichnung des Datentyps erfolgt ber einen sogenannten Type-Qualifier, dessen allgemeine Form wie folgt aussieht:
<Datentyp>'(<Wert>)
Fr die obigen Beispiele wrde der korrekte Code also wie folgt lauten:
write (my_line, string'("Hallo")); -- Ok! Mit expliziter Typangabe
write (my_line, string'("10010")); -- kann die richtige write-Funktion
-- identifiziert werden
Ein Beispiel zur Verwendung der Textausgabe zeigt der nachfolgende Prozess.
process
-- Fr die Angabe des Dateityps kann der im textio-Paket definierte
-- Datentyp text verwendet werden
file my_txt_file : text;
variable cnt: integer:= 64;
variable cnt_slv : std_logic_vector (7 downto 0);
variable l: line;
variable my_file_status : FILE_OPEN_STATUS;
begin
-- Datei ffnen
file_open(my_file_status, my_txt_file, "my_values.txt", WRITE_MODE);
if my_file_status = OPEN_OK then -- Datei erfolgreich geffnet?
for i in 1 to 5 loop
write(l, cnt); -- Integer in die Datei schreiben
write(l,string'(" "));
cnt_slv := std_logic_vector(to_unsigned(cnt,8));
write(l,cnt_slv); -- Wert als std_logic_vector schreiben
253
writeline(my_txt_file,l);
cnt := cnt+1;
end loop;
file_close(my_txt_file); -- Datei schlieen
end if;
wait; -- Prozess beenden
end process;
Die Simulation initialisiert die Variable cnt mit dem Wert 64. In einer Schleife wird
cnt als Integer und std_logic_vector fnfmal ausgegeben und dabei jeweils um 1 erhht.
Nach Durchfhrung der Simulation wrde die Datei my_values.txt den folgenden Inhalt
besitzen:
64
65
66
67
68
01000000
01000001
01000010
01000011
01000100
Beim Einlesen von Dateien kommen den Funktionen endfile() und endline() eine
wichtige Bedeutung zu. Ihnen wird als Parameter ein Dateideskriptor oder eine Zeile
bergeben. Wenn der Rckgabewert (Typ: boolean) der Funktion den Wert true besitzt,
wurde das Ende der Datei beziehungsweise der Zeile erreicht.
Mithilfe der vorgestellten Ein-/Ausgabekonzepte knnen auch Ein- und Ausgaben
auf der Simulatorkonsole erfolgen. Hierfr sind die Symbole INPUT und OUTPUT
vordefiniert:
write(l,string'("Hallo Konsole!"));
writeline(OUTPUT,l);
254
8VHDL-Vertiefung
In diesem Beispiel wird die Ausfhrung unterbrochen bis eine bestimmte Bedingung,
hier das Auftreten einer steigenden Flanke des Taktsignals clk, wahr ist. Fr synthetisierbaren VHDL-Code ist diese Form der Wait-Anweisung ist die am hufigsten verwendete
Variante. Es gibt jedoch noch weitere Varianten der Wait-Anweisung, die insbesondere
fr die Erstellung von Testbenches ntzlich sind. Die vier Varianten der Wait-Anweisung
sind in Tab.8.1 zusammengefasst.
Es ist zu beachten, dass Wait-Anweisungen und Sensitivittslisten einander ausschlieen. Besitzt ein Prozess eine Sensitivittsliste, darf er keine Wait-Anweisung enthalten.
Wird dagegen eine Wait-Anweisung verwendet, darf der Prozess keine Sensitivittsliste
besitzen. Darber hinaus darf synthetisierbarer Code nur eine einzelne Wait-until-Anweisung pro Prozess enthalten. Testbench-Prozesse, die dagegen nur fr die Simulation
verwendet werden, drfen beliebig viele Wait-Anweisungen enthalten. Mithilfe der WaitAnweisung kann eine Testbench auf recht einfache Weise erstellt werden. Der nachfolgende Abschnitt zeigt hierzu ein Beispiel.
Im Deklarationsteil der Architecture werden die Signale definiert, die an die Ein- und
Ausgnge des zu berprfenden Moduls angeschlossen werden. Im Anweisungsteil der
Architecture wird der Prfling instanziiert und es werden mithilfe eines Prozesses unterschiedliche Testvektoren an die zu testende Komponente angelegt.
Die Architecture einer Testbench fr einen Encoder, welcher einen 4-Bit-Binrwert in
ein 7-Bit-Codewort fr eine Sieben-Segment-Anzeige umsetzt, kann wie folgt realisiert
werden:
Tab.8.1Formen der Wait-Anweisung
Struktur
Beispiel
Erluterung
wait;
wait;
wait on <Signalliste>;
wait on A, B;
Prozessunterbrechung bis ein Wechsel eines Signals der Signalliste detektiert wird
wait until <Bedingung>; wait until A=B; Unterbrechung des Prozesses bis die angegebene
Bedingung wahr ist
255
architecture tb_arch of tb is
signal bin_val : std_logic_vector(3 downto 0);
signal sev_seg_code : std_logic_vector(6 downto 0);
begin
dut : entity work.bin2sevenseg -- DUT: Device Under Test
port map (
bin=> bin_val,
sevenseg => sev_seg_code);
process begin -- Prozess zum Anlegen der Stimuli
bin_val <= "0000";
wait for 10 ns; -- Kurze Wartezeit
bin_val <= "0001";
wait for 10 ns;
bin_val <= "0010";
wait for 10 ns;
-- Hier ggf. weitere Stimuli
wait; -- Test durchlaufen. Der Prozess kann beendet werden.
end process;
end;
Da die Testbench keine berprfung der Ausgabewerte des Prflings vornimmt, muss
die Korrektheit durch eine manuelle berprfung der erzeugten Waveform erfolgen.
Dieses Vorgehen besitzt den Vorteil, dass der Testbench-Code auf die Erzeugung von Stimuli beschrnkt bleibt und daher relativ einfach zu realisieren ist. Ein Nachteil ist, dass
bei der berprfung ein mgliches Fehlverhalten des zu testenden Moduls bersehen
werden knnte.
256
8VHDL-Vertiefung
257
Stimuli- und Erwartungswerte knnen rechnergesttzt erstellt werden. Dies ist insbesondere dann interessant, wenn ein funktionales Modell des zu entwerfenden Systems
in einer Hochsprache (meist C/C++) erstellt wurde.
Simulationen bentigen keine interaktiven Eingriffe.
Die Simulationsergebnisse knnen rechnergesttzt ausgewertet werden.
Stimuli und Resultate einer Simulation liegen in einfach lesbarer Form vor und knnen zu Dokumentationszwecken aufbewahrt werden.
Diesen Vorteilen steht gegenber, dass der Aufwand zum Erstellen einer Testbench
grer ist als bei den zuvor skizzierten Anstzen. In vielen Fllen kann der zustzliche
Aufwand gering gehalten werden, wenn eine bereits zuvor eingerichtete Testbench wiederverwendet werden kann und nur leicht abgewandelt werden muss.
Der nachfolgende Code stellt eine komplette Testbench mit Dateiein-/-ausgabe fr ein
einfaches logisches Gatter dar. Der Code lsst sich auch auf komplexere Problemstellungen erweitern.
use std.textio.all; -- bei Benutzung der Standard-Bibliothek
-- ist keine Library-Anweisung erforderlich
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use ieee.std_logic_textio.all;
entity tb is
end;
architecture tb_arch of tb is
signal bin_val : std_logic_vector(3 downto 0);
signal sev_seg_code : std_logic_vector(6 downto 0);
begin
dut : entity work.bin2sevenseg -- DUT: Device Under Test
port map (
bin=> bin_val,
sevenseg => sev_seg_code);
process -- Prozess zum Anlegen von Stimuli und zum Ueberprufen
-- der Ausgabewerte des device under test (DUT)"
file stimuli_file:
file resultat_file:
variable stim_file_status :
variable res_file_status:
variable l:
Text-IO
258
variable
variable
variable
variable
begin
8VHDL-Vertiefung
stim:
exp:
wait_time:
errors_detected:
-- Dateien ffnen
file_open(stim_file_status, stimuli_file, "stimuli.txt", READ_MODE);
file_open(res_file_status, resultat_file, "result.txt", WRITE_MODE);
-- Dateien erfolgreich geffnet?
if stim_file_status = OPEN_OK and res_file_status = OPEN_OK then
while not endfile(stimuli_file) loop -- Dateiende?
readline(stimuli_file,l); -- Eine Zeile lesen
read(l,stim); -- Stimuli lesen
bin_val <= stim;
read(l,wait_time); -- Wartezeit lesen
wait for wait_time; -- Warten
read(l,exp); -- Erwarteten Ausgabewert lesen
write (l,stim); -- Stimuli und Ausgabewerte
write (l,string'(" ")); -- in Resultat-Datei schreiben
write (l,sev_seg_code);
write (l,string'(" "));
assert sev_seg_code = exp
report "Simulation error detected" severity warning;
if sev_seg_code = exp then -- in Resultat-Datei schreiben
write (l,string'("Ok"));
else
write (l,string'("Error -- Expected: "));
write (l,exp);
errors_detected := errors_detected + 1; -- Fehlerzaehler+1
end if;
writeline(resultat_file,l);
end loop;
-- Am Ende der Simulation den Fehlerzaehler ausgeben
write (l,string'("--------"));
writeline(resultat_file,l);
write (l,string'("Total Error Count: "));
write (l,errors_detected);
writeline(resultat_file,l);
write (l,string'("--------"));
writeline(resultat_file,l);
file_close(stimuli_file); -- Dateien schliessen
file_close(resultat_file);
end if;
259
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
ns
ns
ns
ns
ns
ns
ns
ns
ns
ns
ns
ns
ns
ns
ns
ns
0111111
0000110
1011011
1001111
1100110
1101101
1111101
0000111
1111111
1101111
1110111
1111100
0111001
1011110
1111001
1110001
Die durch die Simulation erzeugte Ergebnisdatei sieht beispielsweise wie folgt aus:
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
0111111
0000110
1011011
1001111
1100110
1101101
1111101
0000101
1111111
1101111
1110111
1111100
0111001
1011110
Ok
Ok
Ok
Ok
Ok
Ok
Ok
Error -- Expected: 0000111
Ok
Ok
Ok
Ok
Ok
Ok
260
8VHDL-Vertiefung
8.4 bungsaufgaben
Haben Sie den Inhalt des Kapitels verstanden? Prfen Sie sich selbst mit den folgenden
Aufgaben. Am Ende des Buches finden Sie die Lsungen.
Sofern nicht anders vermerkt, ist nur eine Antwort richtig.
Aufgabe 8.1
Ein Taktsignal soll mithilfe des VHDL-Signals clk modelliert werden. Die Frequenz des
Taktsignals betrgt 100MHz. Welche der folgenden Codezeilen ist korrekt?
a) clk <= not clk;
b) clk <= not clk after 5ns
c) clk <= clk after 10ns
d) clk <= not clk after 10ns
Aufgabe 8.2
Welche Aussagen ber die Datentypen std_logic und std_ulogic sind korrekt? (Mehrere
Antworten sind richtig)
a) Der Datentyp std_logic besitzt eine Auflsungsfunktion (resolution function), der
Datentyp std_ulogic dagegen nicht.
b) Ein Signal vom Datentyp std_ulogic wird zu Beginn einer Simulation immer auf U
(undefined) gesetzt. Ein Signal vom Datentyp std_logic erhlt zu Beginn der Simulation immer den Wert 0.
c) Die beiden Datentypen sind Teil des VHDL-Standards. Daher knnen sie auch ohne
die Verwendung von Library- und Use-Anweisungen in VHDL-Beschreibungen eingesetzt werden.
d) Erfolgen Zuweisungen an ein Signal vom Datentyp std_logic aus zwei Prozessen heraus, fhrt dies in der Simulation nicht zu einer Fehlermeldung.
Aufgabe 8.3
Welche Aussage ber die Generics sind korrekt?
a) Bei der Instanziierung eines Moduls knnen auch Signale an die Generics angeschlossen werden.
8.4bungsaufgaben
261
b) Die Werte, die an die Generics bergeben werden, mssen zur bersetzungszeit berechenbar (zum Beispiel Konstanten) sein.
c) Generics sind immer vom Datentyp integer.
d) Wird ein Generic verwendet, muss bei der Instanziierung des entsprechenden Moduls
dem Generic immer ein Wert zugewiesen werden.
Aufgabe 8.4
Wie kann ein Prozess mithilfe der Wait-Anweisung (fr immer) beendet werden?
a) wait forever;
b) wait;
c) wait until ();
d) wait on;
Aufgabe 8.5
Was gilt fr Prozesse in Testbenches?
a) Eine Testbench darf nur einen einzelnen Prozess beinhalten.
b) Testbench-Prozesse drfen mehrere Wait-Anweisungen beinhalten.
c) Testbench-Prozesse drfen eine Sensitivittsliste besitzen und gleichzeitig eine WaitAnweisung beinhalten.
d) Testbench-Prozesse drfen nur synthetisierbaren Code beinhalten.
Aufgabe 8.6
Gegeben ist der nachfolgende VHDL-Prozess.
process
file my_file : text;
variable my_f_status : FILE_OPEN_STATUS;
variable l : line;
variable slv : std_logic_vector (3 downto 0);
begin
file_open(my_f_status, my_file, "test.txt", WRITE_MODE);
if my_f_status = OPEN_OK then
for i in 1 to 5 loop
write (l,i);
write (l,string'(" "));
slv := std_logic_vector(to_unsigned(i,4));
write (l,slv);
writeline(my_file,l);
end loop;
end if;
wait;
end process;
262
b.
1
2
3
4
5
001
010
011
100
101
c.
1
2
3
4
5
0001
0010
0011
0100
0101
d.
1
0001
2
0010
3
0011
4
0100
5
0101
8VHDL-Vertiefung
Programmierbare Logik
263
264
9 Programmierbare Logik
X1
265
X2
X3
"1"
&
P1
"0"
Y
&
P2
"0"
P1 = X1 & X2 & X3
beziehungsweise
P2 = X2 & X3
Damit ergibt sich der Ausgangswert fr Y zu
266
9 Programmierbare Logik
der zugehrige Schalter so programmiert ist und damit eine Verbindung zwischen dem
jeweiligen Eingangssignal und der UND-Stufe hergestellt ist. Fehlt der Punkt dagegen,
liegt an dem zugehrigen Eingang des UND-Gatters eine 1 an.
Fr das obige Beispiel ist die kompakte Darstellung in Abb.9.2 abgebildet.
Das in diesem Abschnitt vorgestellte Grundprinzip wird bei sogenannten Programmable Logic Devices (PLDs) verwendet, die in den Abschn.9.2 und 9.3 nher vorgestellt
werden. Ist neben dem UND-Array auch das ODER-Feld programmierbar, wird meist
der Begriff Programmable Logic Arrays (PLA) verwendet.
Der Vorteil des programmierbaren ODER-Feldes eines PLAs ist es, dass die Produktterme allen ODER-Verknpfungen zugefhrt werden. Wird ein Produktterm fr
die Berechnung von mehr als einem Ausgang bentigt, muss der Term daher nur einmal
durch die entsprechende UND-Verknpfung gebildet werden. Dieser Vorteil der PLAStruktur muss mit der Programmierbarkeit des ODER-Feldes erkauft werden, was letztlich zu einem hheren Flchenbedarf des Bausteins und damit zu hheren Kosten fhrt.
Ein Beispiel soll die mehrfache Verwendung eines Produktterms verdeutlichen: Es
werden die Funktionen
X1
X2
X3
"0"
P1
&
Y
P2
&
Abb.9.3 Programmierbarer
Logikbaustein mit mehrfach
verwendetem Produktterm
X1
X2
X3
&
&
&
P1
P2
P3
Y1
Y2
267
und
D
C
4:1
MUX
Q
D
C
I1
I2
268
9 Programmierbare Logik
Auch mithilfe einer LUT-basierten Implementierung lassen sich also beliebige logische Funktionen realisieren, sofern die Anzahl der LUT-Eingnge ausreichend gro
gewhlt ist.
In Abb.9.5 ist die Realisierung eines UND- und eines ODER-Gatters auf Basis der
LUT mit zwei Eingngen dargestellt. Fr alle mglichen Kombinationen der Eingnge
I0 und I1 werden die entsprechenden Ausgangswerte in den Flip-Flops abgespeichert
(0,0,0,1 fr ein UND-Gatter und 0,1,1,1 fr ein ODER-Gatter). Der Multiplexer whlt
anhand der Eingangswerte I0 und I1 einen der vier Flip-Flop-Ausgnge aus. In dem Beispiel in Abb.9.5 liegen am Eingang der LUT die Werte 1 und 0 an. Hiermit wird das
zweite Flip-Flop ausgewhlt, in dem im Fall einer UND-Verknpfung eine 0 beziehungsweise im Fall eines ODER-Gatters eine 1 abgelegt ist.
Besitzt die zu realisierende Funktion mehr Eingnge als die verwendeten LUTs,
mssen mehrere LUTs durch Parallelschaltung und Kaskadierung kombiniert werden.
Welche LUTs wie kombiniert werden mssen, hngt von der zu implementierenden logischen Funktion ab.
Ein programmierbarer Logikbaustein auf Basis von LUTs muss also neben den programmierbaren LUTs auch konfigurierbare Verbindungen zwischen den einzelnen LUTs
zur Verfgung stellen. So knnen dann auch komplexe Funktionen, bei denen mehrere
LUTs kombiniert werden mssen, mithilfe des Bausteins realisiert werden.
0
D
1
0
1
0
UND
ODER
269
270
9 Programmierbare Logik
I1
(LQJlQJH
Ik
7UL6WDWH
7UHLEHU
O1
UND/ODERFeld
$XVJlQJH
EN
On
EN
I/O 1
EN
I/O m
EN
Abb.9.7 Grundstruktur
eines programmierbaren
Logikbausteins mit UND/
ODER-Struktur und Registern
I1
Ik
(LQ$XVJlQJH
Clk
1D
EN
C1
UND/ODERFeld
1D
C1
EN
I/O1
I/Om
Die Bedeutung von PALs und GALs ist in den letzten Jahren zurckgegangen und sie
werden in Neuentwicklungen meist nicht mehr eingesetzt. Obwohl die Bausteine noch
angeboten werden, haben einige Hersteller die Bausteinfamilien bereits abgekndigt.
Statt der PALs werden heute meist die im nachfolgenden Abschnitt vorgestellten CPLDs
verwendet (Tab.9.1).
Tab.9.1Beispiele einiger PAL-Bausteine
Bezeichnung Anzahl Eingnge Anzahl Ein-/Ausgnge
Anzahl Minterme je Ausgang
Ohne Register Mit Registern
PAL16L8
10
PAL16R4
PAL16R8
PAL20R8
12
271
I/O
MC
MC
PLA
MC
MC
I/O
MC
MC
PLA
Programmierbare
Verbindungsmatrix
Clk
Clk
PLA
MC
MC
I/O
MC
MC
PLA
MC
MC
I/O
9 Programmierbare Logik
Programmierbares
UND-Feld
272
zur
Verbindungsmatrix
Programmierbares
ODER-Feld
MUX
=1
zum
I/O-Block
EN
R
S
knnen, eine wichtige Rolle. Die Antwort auf diese Fragestellung lsst sich hufig nicht
alleine durch den Blick auf die Architektur eines CPLDs beantworten. Passt die zu implementierende Funktion nur schlecht zu der im CPLD-Baustein vorgegebenen Struktur,
wird die Realisierung ineffizient sein, so dass viele Teile der verfgbaren CPLD-Ressourcen nicht genutzt werden knnen. Daneben hat auch die Effizienz der Syntheseprogramme, die zum Umsetzen der in VHDL beschriebenen Funktion verwendet werden,
einen nicht unerheblichen Einfluss auf das Ergebnis. In der Praxis wird man daher, sofern
nicht auf Erfahrungswerte aus hnlich gelagerten Fllen zurckgegriffen werden kann,
vor der finalen Auswahl eines CPLD Bausteins mehrere Syntheselufe ausfhren, um so
den Ressourcenverbrauch fr unterschiedliche Bausteine abschtzen zu knnen.
Tab.9.2 fasst exemplarisch einige wichtige Parameter der CPLD-Familie CoolRunner-II der Firma Xilinx zusammen.
CPLDs werden von mehreren Herstellern angeboten. Die wichtigsten sind Xilinx,
Altera, Lattice, MicroSemi und Atmel. Einige Anbieter, wie die Firmen Altera oder Lattice, setzen als Alternative zu dem hier vorgestellten PLA-basierten Konzept eine LUTbasierte Realisierung ein, die bis vor einigen Jahren hauptschlich im Bereich der im
nachfolgenden Abschnitt beschriebenen FPGAs zu finden war.
32
64
128
256
384
512
33
64
100
184
240
270
323
263
244
256
217
179
273
40
80
160
240
570
1270
2210
quiv. Makrozellen
32
64
128
192
440
980
1700
Max. I/Os
54
79
79
114
159
271
271
Verzgerungszeit,
pin-to-pin (ns)
7,5
7,5
7,5
7,5
9,0
6,2
7,0
274
9 Programmierbare Logik
Die Grundidee eines FPGAs ist relativ einfach: Man realisiert einen Baustein, der
viele kleine Logikblcke enthlt, in denen sich programmierbare Lookup-Tabellen
(LUTs) befinden. Jede LUT besitzt beispielsweise vier Eingnge und einen Ausgang.
Die sptere Programmierung der LUTs legt fest, nach welcher logischen Funktion der
Ausgangswert aus den Eingngen berechnet werden soll. Da fr die Implementierung
eines digitalen Systems auch Flip-Flops bentigt werden, enthalten die Logikblcke
auch Flip-Flops. Meist sind die gleiche Anzahl an LUTs und Flip-Flops vorhanden, da
dies dem Bedarf in praktischen Schaltungen entspricht. Dabei wird jeder LUT ein FF
zugeordnet, so dass der Ausgangswert einer LUT auch innerhalb eines Logikblocks
gespeichert werden kann.
Fr die Verbindungen zwischen den Logikblcken wird ein Verbindungsnetzwerk eingesetzt. Die Programmierbarkeit des Verbindungsnetzwerkes wird durch programmierbare Schalter erreicht (Switch Matrix). Die Funktionsweise des Verbindungsnetzwerkes
kann man mit Gleisen einer Eisenbahn vergleichen: Sollen Daten von einem Logikblock
an einen bestimmten anderen Logikblock gesendet werden, werden die Weichen innerhalb des Netzwerkes so programmiert, dass eine elektrische Verbindung zwischen den
beiden Logikblcken hergestellt wird. Im Gegensatz zu einer Eisenbahnverbindung werden die Weichen nicht dynamisch im Betrieb umgeschaltet, sondern sie werden nach
dem Einschalten einmalig fr die gewnschte logische Funktion konfiguriert.
Durch die Programmierbarkeit der Logik-Blcke und des Verbindungsnetzwerkes,
knnen komplexe logische Funktionen durch die Kombination mehrerer LUTs umgesetzt werden. Die maximale Komplexitt der Gesamtfunktion ist natrlich durch die
Anzahl der verfgbaren Logikblcke begrenzt.
Darber hinaus ist es natrlich auch denkbar, dass das Verdrahtungsnetzwerk der limitierende Faktor einer FPGA-basierten Systemimplementierung ist, wenn eine sehr aufwendige Signalverdrahtung bentigt wird. In diesem Fall knnen nicht alle vorhandenen
LUTs genutzt werden.
Neben den Logikblcken und dem Verbindungsnetzwerk enthalten FPGAs auch
Ein-/Ausgabeblcke (IO-Blocks oder kurz IOBs). Mithilfe dieser Blcke kann unter anderem eine Anpassung von Logikpegeln erfolgen. Arbeitet ein FPGA beispielsweise mit
einer internen Versorgungsspannung von 1,8V, knnen die Pegel der internen Signale mithilfe der IOBs so angepasst werden, dass sie auch Bausteinen mit einer Versorgungsspannungsspannung von 3,3V zugefhrt werden knnen. Daneben stehen in den IOBs auch
Funktionen zur Verfgung, die fr eine besonders schnelle Ein-/Ausgabe hilfreich sein
knnen. Ein Beispiel hierfr sind IOB-interne Parallel-Seriell-Wandler, die auf Schieberegistern basieren (Serializer). Ausgabedaten werden von den Logikblcken parallel (zum
Beispiel 4 oder 8bit) an die IOBs herangefhrt. Innerhalb des IOBs werden die Daten
serialisiert, das heit Bit fr Bit am ueren Anschluss des FPGAs ausgegeben. Auf
diese Weise kann eine hohe Datenrate am Ausgang des FPGAs realisiert werden, obwohl
die Implementierung der logischen Funktion innerhalb des FPGAs vergleichsweise langsam ist. Fr die Eingabe knnen De-Serializer eingesetzt werden, welche die Daten seriell
einlesen und fr die FPGA-interne Logik in paralleler Form zur Verfgung stellen.
IOB
IOB
IOB
IOB
IOB
IOB
LB
LB
LB
IOB
IOB
LB
LB
LB
IOB
IOB
LB
LB
LB
IOB
IOB
IOB
IO-Blcke
IOB
Logikblcke
IOB
Verbindungsnetzwerk
COUT
vom Verbindungsnetzwerk
IOB
LUT
Carry/
Control
Logic
1D
EN,R,S
C1
zum Verbindungsnetzwerk
Abb.9.10 Prinzipieller
Aufbau eines FPGAs
275
CIN
Die Grundstruktur eines FPGAs, das aus Logik-Blcken, IO-Blcken und einem Verbindungsnetzwerk besteht, ist in Abb.9.10 dargestellt.
Der Aufbau eines einfachen Logikblocks ist in Abb.9.11 dargestellt. Die meisten
Eingnge und Ausgnge sind mit dem Verbindungsnetzwerk verbunden. Darber hinaus
existieren die Anschlsse CIN und COUT, die mit dem Block Carry/Control-Logic verbunden sind. Mithilfe dieser Anschlsse und der zugehrigen Logik wird ein besonders
schneller Durchlauf der bertragsbits eines Addierers ermglicht. Mithilfe dieser besonderen Carry-Logik kann die Verzgerungszeit der Addition deutlich reduziert werden.
276
9 Programmierbare Logik
277
Takt-Treiber
Mit Fortschreiten der Halbleitertechnologie wird dieses Problem verschrft: Einerseits steigen die erzielbaren Taktfrequenzen kontinuierlich an, wodurch die Verzgerungen durch das Taktverteilungsnetzwerk immer deutlicher sprbar werden. Andererseits
werden die geometrischen Abmessungen der Leitungen kleiner, was zu einem hheren
Widerstand und damit zu langsameren Pegelwechseln fhrt. Um den Nachteil der zentralen Taktpufferung zu reduzieren, werden in modernen FPGAs Taktreiber eingesetzt, die
ber den Chip verteilt sind. Auf diese Weise wird die Leitungslnge zwischen Takttreiber
und Takteingang der Flip-Flops reduziert und damit der Clock-Skew deutlich reduziert.
Aus diesen Erluterungen zum Aufbau des Taktnetzwerkes ergibt sich auch, dass man
niemals ein Taktsignal aus einer logischen Funktion heraus generieren sollte, da dieses Taktsignal nicht ber das Taktnetzwerk gefhrt werden kann und somit signifikante
Clock-Skew-Probleme die Folge sein knnen. Da das Taktsignal ber Gatter gefhrt
wird, wird dies in der Praxis auch als Gated Clock bezeichnet. Insbesondere Anfngern
im FPGA-Design unterluft nicht selten der Fehler, dass versehentlich Gated Clocks in
einem VHDL-Entwurf realisiert werden, indem zum Beispiel ein Ausgangssignal eines
Moduls einfach mit dem Takteingang eines anderen Moduls verbunden wird. Syntaktisch ist dies vllig korrekt und auch in der Simulation der Schaltung wird man hufig
keine unerwarteten Ergebnisse sehen. Um das Risiko zu minimieren, dass versehentlich Gated Clocks in einem VHDL-Entwurf eingebaut werden, sollten die Takteingnge
aller VHDL-Module mit einem (wenn im System nur ein Takt verwendet wird: mit dem
gleichen) Taktsignal verbunden werden. Jegliche logische Verknpfungen (und seien sie
noch so simpel) eines Taktsignals mit anderen Signalen sollten vermieden werden.
278
9 Programmierbare Logik
die Implementierung eines Systems verwendet werden knnen. In diesem Abschnitt werden die wichtigsten dieser Elemente kurz vorgestellt.
Mit Spezialkomponenten wird das Ziel verfolgt, eine bestimmte hufig genutzte
Funktion mglichst effizient zur Verfgung zu stellen. Die Instanziierung dieser Module
wird hufig von den Designtools untersttzt.
9.4.3.1Speicherelememente
In vielen Fllen ist fr die Realisierung eines Systems auch die Speicherung von Daten
erforderlich. Wird eine sehr groe Speicherkapazitt bentigt, ist in der Regel ein externer Speicher auerhalb des FPGAs unvermeidbar. Ist der bentigte Speicherbedarf
jedoch kleiner, ist eine Speicherung der Daten innerhalb des FPGAs wnschenswert, da
so schneller und flexibler auf die Daten zugegriffen werden kann.
Da eine LUT letztlich auch ein kleiner Speicher ist, liegt die Idee nahe, die verfgbaren LUTs zu einem Speicher mit der bentigten Kapazitt zu verbinden. Dieses Prinzip wird von FPGAs untersttzt und man spricht in diesem Fall von verteiltem Speicher
(Distributed Memory). Der Nachteil dieses Ansatzes ist, dass die wertvollen Ressourcen
der Logikblcke fr die Speicherung von Daten eingesetzt werden und nicht mehr fr die
Implementierung von logischen Funktionen zur Verfgung stehen.
Daher bieten heutige FPGAs auch Speicher in Form von sogenanntem Block-RAM an.
Hierbei handelt es sich um mehrere kleine Speicher (meist in der Gre weniger kByte),
die auf dem FPGA-Chip verteilt sind. Der Vorteil von Block-RAM ist, dass die erzielbare Speicherdichte, also Bits pro Siliziumflche, um ein Vielfaches grer ist als bei
der Verwendung von Distributed Memory. Daher bietet sich die Verwendung von BlockRAM immer dann an, wenn ein grerer Speicher bentigt wird beziehungsweise die
Ressourcen zur Implementierung von Logik knapp sind.
Um den Speicher fr verschiedene Anwendungen mglichst gut nutzen zu knnen,
ist die Wortbreite der Block-RAMs konfigurierbar. Beispielsweise besitzen die BlockRAMs der Cyclone-V-FPGAs (Fa. Altera) eine Gre von 9kbit. Der Speicher kann mit
Wortbreiten zu 1, 2, 4, 8, 9, 16, 18, 32 oder 36 genutzt werden, wobei die maximale
Anzahl der Worte immer eine Zweierpotenz ist. Da die Gesamtkapazitt festliegt, nimmt
die maximale Anzahl der Speicherworte mit der Wortbreite ab. So kann ein einzelner
dieser Speicher zum Beispiel 8192 Worte mit einer Breite von 1 bit aufnehmen oder
aber auch fr die Speicherung von 512 16-Bit-Worten genutzt werden. Wortbreiten von
9, 18 und 36 bit werden untersttzt, da diese in der Kommunikationstechnik verwendet
werden.
FPGA-internes Block-RAM wird meist als Dual-Port-Speicher implementiert, der
zwei Schreib-/Leseanforderungen gleichzeitig bearbeiten kann. Diese Eigenschaft ist
zum Beispiel dann vorteilhaft, wenn ein Modul Daten generiert, die vor der Verarbeitung
durch ein zweites Modul zwischengespeichert werden mssen. Beide Module knnen
dann unabhngig voneinander auf den Speicher zugreifen. Eine Arbitrierungslogik, die
festlegt welches der beiden Module auf den Speicher zugreifen darf, kann dann entfallen.
279
9.4.3.2Arithmetische Module
Eine hufig bentigte arithmetische Operation ist die Multiplikation. Daher beinhalten
die meisten aktuellen FPGAs spezielle Multiplizierer-Module, die gegenber einer LUTbasierten Implementierung der Multiplikation den Vorteil einer geringeren Verzgerungszeit bieten. Darber hinaus kann durch die Verwendung der Hardware-Multiplizierer die
Anzahl der bentigten Logikblcke reduziert werden.
In modernen FPGAs wird das Konzept zur Untersttzung arithmetischer Funktionen hufig erweitert und es stehen nicht nur Multiplizierer zur Verfgung. Der FPGAHersteller Xilinx bietet beispielsweise sogenannte DSP-Slices an. Hierbei handelt es
sich um Module, die neben einem Multiplizierer auch einen Addierer und einen Akkumulator enthalten. Mithilfe dieser Module sollen insbesondere Anwendungen der digitalen Signalverarbeitung (Digital Signal Processing, DSP) untersttzt werden.
Die meisten angebotenen arithmetischen Module sind fr die Verarbeitung von ganzen Zahlen ausgelegt. Einige FPGA-Serien, wie zum Beispiel Stratix-10 der Firma
Altera, stellen auch Spezialhardware zur Verarbeitung von Gleitkommazahlen bereit.
9.4.3.3Takterzeugung
FPGAs enthalten meist auch Komponenten zur Erzeugung von intern verwendeten Taktsignalen. Diese Komponenten beinhalten meist eine Phasenregelschleife (engl. PhaseLocked Loop, PLL), die es ermglicht, aus einem Eingangstaktsignal Ausgangssignale
zu erzeugen, deren Frequenz und Phasenlage aus dem Eingangssignal abgeleitet wird.
Teilweise kommen auch DLLs (Delay-Locked Loop) zum Einsatz.
Die Quelle des Eingangstaktes einer PLL kann entweder ein von auen zugefhrtes
Signal oder ein bereits im FPGA (zum Beispiel durch eine weitere vorgeschaltete PLL)
vorhandenes Taktsignal sein.
Die PLLs der meisten FPGAs erlauben die gleichzeitige Erzeugung mehrerer Taktsignale aus einem einzelnen Eingangstakt, wobei die Frequenzen der erzeugten Signale
sowohl kleiner als auch grer als die Frequenz des Eingangstaktes sein knnen. Neben
der einfachen Erzeugung unterschiedlicher Systemtaktsignale knnen die PLLs auch zur
Synchronisierung des externen Taktsignals mit den intern verwendeten Takten verwendet
werden. Dies ist insbesondere dann hilfreich, wenn die Eingangsdaten des FPGAs synchron zur Verfgung gestellt werden.
Das Blockschaltbild einer PLL zeigt Abb.9.13. Die Phasenlage eines von auen zugefhrten Taktes wird mit einem Referenztakt verglichen. Mithilfe einer Regelung wird ein
analoges Signal erzeugt, welches einem spannungsgesteuerten Oszillator (Voltage-Controlled-Oscillator, VCO) zugefhrt wird. Durch Teilung des Oszillatortaktes werden die
Ausgangssignale der PLL sowie der zum Phasenvergleich zurckgefhrte Referenztakt
erzeugt.
9.4.3.4Spezialisierte Peripheriemodule
Viele FPGAs bieten spezielle Peripheriemodule an, die Schnittstellen mit besonders kritischen Zeitanforderungen besitzen. Ein typisches Beispiel fr derartige Module sind
Phasenvergleicher
Regelung
Taktteiler
Spannungsgesteuerter
Oszillator
(VCO)
Taktteiler
Ausgangstakte
9 Programmierbare Logik
Eingangstakt
280
9.4.3.5Prozessor-Subsysteme
Hufig besteht der Wunsch, Teile eines Systems in Hardware auf einem FPGA, andere
Teile dagegen in Software auf einem Mikroprozessor zu implementieren.
Natrlich kann ein Mikroprozessor auch mithilfe von Logikblcken implementiert
werden. Die FPGA-Hersteller bieten hierzu entsprechende Prozessordesigns (zum Beispiel NIOS der Firma Altera oder Microblaze der Firma Xilinx) mit den zugehrigen
Werkzeugen zur Softwareentwicklung an. Da diese Prozessoren mithilfe der flexibel einsetzbaren programmierbaren Logikkomponenten implementiert werden, werden sie auch
als Soft-Prozessoren bezeichnet. Allerdings gilt auch fr diese Lsungen, dass ihre Effizienz eher als moderat anzusehen ist.
9.5FPGA-Familien
281
9.5 FPGA-Familien
Der FPGA-Markt ist auf den ersten Blick relativ unbersichtlich. Es gibt unterschiedliche Anbieter, wobei die Firmen Xilinx und Altera (inzwischen von der Firma Intel
bernommen) zusammen ca. 90% des Marktes bedienen. Die Hersteller bringen
schritthaltend mit der Weiterentwicklung der Halbleitertechnik etwa alle 2 Jahre eine
neue Bausteingeneration heraus. Innerhalb dieser Generationen werden wiederum
unterschiedliche Familien angeboten, die FPGAs mit hnlichen Grundeigenschaften
beinhalten, sich aber im Hinblick auf die Komplexitt (Anzahl der Logikblcke und
Hard-Makros, Gre des internen Speichers usw.) unterscheiden.
Die Bausteine einer Generation werden hufig in einer besonders preisgnstigen
Low-Cost-Familie und einer besonders leistungsstarken High-Performance-Familie
angeboten. Daneben werden teilweise auch Mid-Range-Familien angeboten, die einen
Mittelweg zwischen den beiden anderen Familien bieten (vgl. Tab.9.4).
Durch die Fortschritte der Halbleitertechnologie steigt die Leistungsfhigkeit von
Generation zu Generation an. So bieten aktuelle Low-Cost-Familien teilweise Eigenschaften an, die den High-Performance-Familien zurckliegender Generationen entsprechen. Tab.9.5 fasst den Zeitpunkt der Einfhrung und die jeweils verwendete
Tab.9.4Auswahl einiger FPGA-Familien und ihre Marktpositionierung
Altera Familie
Arria
Cyclone
Stratix
Balance of
cost, power and
performance
Xilinx Familie
Kintex
Artix
Virtex
System performance
per Watt for cost sensitive applications
282
9 Programmierbare Logik
Stratix
Stratix II
Stratix III
Stratix IV
Stratix V
Stratix
10
2002
2004
2006
2008
2010
2013
Halbleitertechnologie(nm)
130
90
65
40
28
14
GX500
GX1100
GX2500
GX5500
Anzahl ALMs
164.160
370.080
821.150
1.867.680
Anzahl Flip-Flops
656.640
1.480.320
3.284.600
7.470.720
Speicher (Mbit)
46
92
208
166
Arithmetik-Module fr Signalverarbeitung
1.152
2.250
5.011
1.980
Multiplizierer (1819bit)
2.304
5.040
10.022
3.960
PCIe-Makros
9.5FPGA-Familien
283
5CGXC3
5CGXC5
5CGXC7
5CGXC9
Anzahl ALMs
13.460
29.080
56.480
113.560
Anzahl Flip-Flops
53.840
116.320
225.920
454.240
Speicher (Mbit)
1,6
4,8
7,6
13,8
Arithmetik-Module fr Signalverarbeitung
57
150
156
342
Multiplizierer (1818bit)
114
300
312
684
PCIe-Makros
Logic Elements (LE) an, das die verfgbaren ALMs in fiktive Grundelemente umrechnet.
Einige der angebotenen FPGAs der Firma Altera sind auch als SoC-Varianten verfgbar, die zustzlich zum FPGA-Teil ein Multikern-CPU-Subsystem beinhalten.
Der Hersteller Xilinx verwendet zur Angabe der FPGA-Komplexitt die Begriffe
Slice beziehungsweise Complex Logic Block (CLB). Ein CLB der Ultrascale-FPGAs
enthlt beispielsweise 8 LUTs mit jeweils 6 Eingngen, Addiererlogik und 16 FlipFlops. Einige Parameter von Bausteinen der Kintex- beziehungsweise Virtex-UltrascaleFamilie sind in Tab.9.8 zusammengefasst.
Fr besonders kostensensitive Systeme bietet Xilinx die Artix-7-Serie an. Diese ist
hnlich positioniert wie die Cyclone-Serie von Altera. Ebenso wie Altera bietet auch die
Firma Xilinx Bausteine an, die CPU-Subsysteme enthalten. So enthlt beispielsweise die
Zynq-7000-Serie ein Subsystem, das auf einem Zweikern-System basiert, whrend mit
der Zynq-Ultrascale+-Serie ein Prozessorsystem zum Einsatz kommt, das insgesamt
6 Prozessoren zur Verfgung stellt. Die CPUs dieser Serie werden durch Hard-Makros
untersttzt, die fr Beschleunigung von 3D-Grafik- oder Videofunktionen ausgelegt sind,
so dass die anderen Ressourcen (FPGA-Teil oder Prozessoren) entlastet werden.
Obwohl in diesem Abschnitt bereits viele Zahlen prsentiert werden, welche
die Eigenschaften kommerziell angebotener FPGA-Familien beschreiben, ist diese
Tab.9.8bersicht ber einige Eigenschaften von ausgewhlten FPGAs der Kintex- und der
Virtex-Ultrascale-Familie
Kintex
Virtex
Bezeichnung
KU035
KU060
KU115
Anzahl CLBs
25.391
41.460
82.920
44.760
Anzahl Flip-Flops
Block-RAM (Mbit)
89.520
316.620
1.432.320
5.065.920
19,0
38,0
75,9
44,3
88,6
88,6
Arithmetik-Module
fr Signalverarbeitung
(DSP-Slices)
1.700
2.760
5.520
600
1.200
2.880
PCIe-Makros
284
9 Programmierbare Logik
Darstellung nur ein kleines Schlaglicht auf das umfangreiche Angebot der FPGA-Hersteller. Betrachtet man alleine die Anzahl der zur Verfgung gestellten Flip-Flops, so
liegt beispielsweise zwischen dem kleinsten Baustein der Cyclone-V-Serie und dem
grten Baustein der Stratix-10-Serie ein Faktor von etwa 140. Fr den internen Speicher (Block-RAM) betrgt das Verhltnis etwa 100. Vergleichbare Faktoren ergeben sich
auch fr die Bausteine des Herstellers Xilinx.
Um die absoluten Zahlen einordnen zu knnen, kann folgendes Beispiel eines Systems zur Verarbeitung von Videosignalen dienen. Das System besitzt eine Kameraschnittstelle mit Anbindung zum externen Speicher, Module zur Verarbeitung der
Bilder (zweidimensionale Filter) in Echtzeit sowie eine Ausgabeeinheit mit Speicheranbindung, die zur Anzeige der verarbeiteten Kamerabilder auf einem Monitor dient.
Wird fr die Implementierung dieses nicht ganz trivialen Systems ein Zynq-7000-SoC
der Firma Xilinx eingesetzt, werden etwa jeweils 3000 LUTs und Flip-Flops bentigt.
Selbst bei dem kleinsten in der Zynq-7000-Serie verfgbaren Baustein ist damit weniger
als 20% der FPGA-Ressourcen belegt.
Dieses Beispiel macht deutlich, dass viele der heutigen FPGAs nicht fr den Ersatz
von wenigen Gattern gedacht sind. Im Gegenteil: Sie ermglichen die Realisierung
hochkomplexer Systeme, fr deren Realisierung noch vor wenigen Jahren ASICs erforderlich gewesen wren. Daher haben FPGAs den Einsatz von ASICs in vielen Bereichen
ersetzt. Die seit einigen Jahren verfgbare Kombination von der hardwareprogrammierbaren Logik mit leistungsfhigen softwareprogrammierbaren Prozessor-Subsystemen
erffnet weitere Mglichkeiten fr den Einsatz der FPGA-Technologie.
Die bisher betrachteten FPGAs zielen auf die Realisierung von wesentlichen Teilen
eines Systems innerhalb der programmierbaren Logik. Ein anderer Ansatz wird mit den
besonders kleinen, kostengnstigen und energieeffizienten FPGAs der Hersteller Lattice
und Quicklogic verfolgt. So bietet beispielsweise Lattice die Serie Ice40 in den Varianten
Ultra und UltraLite an. Diese Bausteine besitzen eine relativ geringe Anzahl von Logikblcken und bieten nur wenig Speicherkapazitt. Der entscheidende Vorteil dieser Bausteine ist die geringe statische Stromaufnahme, die im Bereich von 30 bis 70A liegt.
Daher werden diese Bausteine bevorzugt in mobilen Gerten eingesetzt. Die FPGAs
werden zum Teil als sogenannte Glue Logic verwendet, also zur Realisierung logischer
Funktionen mit denen die Hauptkomponenten des Systems untereinander verbunden
werden. Daneben kann mithilfe dieser FPGAs auch der Hauptprozessor des Systems,
zum Beispiel bei Ein-/Ausgabe-Operationen, entlastet werden. Der Hauptprozessor kann
so bereits in einen Stromsparmodus wechseln whrend das FPGA noch mit der Ein-/
Ausgabe beschftigt ist. Insgesamt wird so die Verlustleistung reduziert, da der relativ
energiehungrige Hauptprozessor lnger im Stromsparmodus verweilen kann.
Als ein exemplarischer Vertreter von besonders energieeffizienten FPGAs sind
in Tab.9.9 die wesentlichen Kennwerte der Ice40-Serie des Herstellers Lattice
zusammengefasst.
285
Ultra
Bezeichnung
UL640
UL1K
LP1K
LP2K
LP4K
Anzahl Logikblcke
640
1248
1100
2048
3520
56
56
64
80
80
Multiplizierer
Block-RAM (kbit)
PLLs
35
35
71
71
71
286
9 Programmierbare Logik
Abb.9.14Beispiel eines erschwinglichen FPGA-Boards fr eigene Experimente: Das ZyBoBoard der Firma Digilent Inc.
9.7 bungsaufgaben
Hier finden Sie Aufgaben, die einige Aspekte dieses Kapitels aufgreifen. Die Lsungen
finden Sie am Ende des Buches.
Sofern nicht anders vermerkt, ist nur eine Antwort richtig.
Aufgabe 9.1
Welche Vorteile besitzen programmierbare Logikbausteine gegenber logischen Standard-Komponenten beziehungsweise ASICs? (Mehrere Antworten sind richtig)
a) Die digitale Funktion programmierbarer Logikbausteine kann durch den Anwender
festgelegt werden.
b) Designfehler lassen sich schneller korrigieren als dies bei dem Einsatz von ASICs
mglich wre.
c) Mithilfe Programmierbarer Logikbausteine knnen logische Funktionen kompakter
realisiert werden als dies mit ASICs mglich wre.
d) Mithilfe Programmierbarer Logikbausteine knnen logische Funktionen kompakter
realisiert werden als dies mit Standardkomponenten (zum Beispiel 74er-Logikserie)
mglich wre.
Aufgabe 9.2
Wodurch zeichnen sich PAL-Bausteine aus?
a) Sie ermglichen die Realisierung beliebig komplexer Funktionen.
b) Sie bieten eine hhere Komplexitt als FPGAs.
9.7bungsaufgaben
287
Halbleitertechnik
10
Digitale Schaltungen werden als Integrierte Schaltung aufgebaut. Der Begriff Integrierte
Schaltungen beschreibt, dass sich auf einem Stck Halbleiter nicht nur ein einzelner,
sondern viele Transistoren befinden. Eine komplette Schaltung ist also auf dem Halbleiterkristall integriert. Ursprnglich umfasste eine Integrierte Schaltung einige tausend
Transistoren; mittlerweile knnen ber eine Milliarde Transistoren auf einer Flche von
etwa einem Quadratzentimeter zusammengefasst werden.
Fr Integrierte Schaltungen sind verschiedene Begriffe gebruchlich. Sie werden auch
als Mikrochip, Chip, IC oder ASIC bezeichnet. IC steht fr Integrated Circuit, ASIC fr
Application Specific Integrated Circuit also Anwendungsspezifische Integrierte Schaltung.
Die wesentlichen Vorteile Integrierter Schaltungen sind insbesondere geringe
Baugre, geringe Kosten, hohe Geschwindigkeit und geringe Parameterabweichungen.
Durch Verwendung integrierter Schaltungen kann die Baugre eines Gertes sehr
gering sein. Statt mehrerer Bauelemente, die einzeln in Chipgehusen verpackt sind,
ist nur ein einzelnes Chipgehuse erforderlich.
Durch die Zusammenfassung mehrerer Bauelemente knnen fast immer die Kosten
fr ein elektronisches Gert reduziert werden. Die wichtigsten Kostenvorteile sind
dabei die geringere Anzahl an bentigten Bauelementen, kleinere und damit gnstigere Platinen und Gertegehuse, sowie kostengnstigere Fertigung durch Verwendung von weniger Komponenten.
In einer Schaltung mit geringerer Baugre sind die Verbindungsleitungen zwischen
den Transistoren wesentlich krzer. Dadurch kann die Rechengeschwindigkeit der
Schaltung erhht werden, da wesentlich kleinere Kapazitten umgeladen werden.
Wenn sich die einzelnen Transistoren einer Schaltung auf demselben Halbleiterkristall befinden, haben die Transistoren nur sehr geringe Produktionsschwankungen
zueinander.
Springer-Verlag GmbH Deutschland 2016
W. Gehrke et al., Digitaltechnik, Springer-Lehrbuch,
DOI10.1007/978-3-662-49731-9_10
289
290
10Halbleitertechnik
10.1 CMOS-Technologie
Die fr einen IC gewhlte Schaltungstechnik wird als Chip-Technologie bezeichnet. Die
zurzeit mit Abstand grte Marktbedeutung hat die CMOS-Technologie, die in diesem
Kapitel erlutert wird.
Die CMOS-Technologie verwendet Silizium als Halbleitermaterial und das Hauptanwendungsgebiet sind digitale Schaltungen. Sie erlaubt eine sehr hohe Integrationsdichte.
Das heit, dass auf einem Chip sehr viele Transistoren untergebracht werden knnen.
Auf Basis der CMOS-Technologie werden Computer-Prozessoren, Grafikkarten-ICs,
Speicherbausteine, MP3-Decoder und viele andere ICs gefertigt.
Der Name CMOS steht fr Complementary Metal-Oxid-Semiconductor und
beschreibt das Grundprinzip. Complementary, also komplementr, meint zwei sich
ergnzende Schaltungsteile, die zusammen einen digitalen Ausgangswert ergeben und
Metal-Oxid-Semiconductor bezeichnet in diesem Zusammenhang einen bestimmten Typ
von Feldeffekttransistoren.
Der Vorteil der CMOS-Technologie ist ihre relativ geringe Verlustleistung. Dies spart
zum einen Energie, insbesondere bei mobilen Gerten wie Laptop oder Mobiltelefon.
Ebenso wichtig ist aber zum anderen, dass die Schaltungen sich nicht zu stark erwrmen,
denn die Verlustleistung muss vom Halbleiter auf das Chipgehuse und von dort auf die
Umgebung abgefhrt werden.
Aktuelle Computer und ihre Grafikkarten werden durch groe und manchmal strend
laute Lfter gekhlt. Die Aussage, CMOS-Schaltungen htten eine geringe Verlustleistung, mag darum zunchst nicht offensichtlich sein. Allerdings enthlt eine integrierte
Schaltung etliche Millionen Transistoren, die mit hoher Geschwindigkeit Berechnungen
durchfhren. Nur durch die geringe Verlustleistung von CMOS-Schaltungen ist es berhaupt mglich, eine so hohe Integrationsdichte zu erreichen und die Verlustleistung in
einem handhabbaren Rahmen zu halten.
10.1CMOS-Technologie
291
1'
1' = VDD
Schaltertyp:
ffner
p-Kanal
Transistoren
A
Schaltertyp:
Schlieer
n-Kanal
Transistoren
0'
0' = GND
Voltage und D fr den Drain-Anschluss des Transistors). Typische Werte fr die Versorgungsspannung sind zwischen 1,0und 5,0V.
Zur Erluterung der Funktion zeigt Abb.10.2 die mglichen Ansteuerungen der Eingnge. Die dick dargestellten Leitungen kennzeichnen welche Verbindungen leitend
sind. Da beide Eingnge jeweils zwei Werte einnehmen knnen, existieren insgesamt
vier Mglichkeiten der Ansteuerung.
Im Fall a) sind beide Eingnge gleich 0. Dadurch leiten beide p-Kanal-Transistoren
und der Ausgang wird niederohmig mit der Versorgungsspannung verbunden. Auerdem sperren die n-Kanal-Transistoren, so dass kein Kurzschluss von der Versorgungsspannung zur Masse entsteht.
In den Fllen b) und c) ist ein Eingang 0, der andere 1 und einer der p-KanalTransistoren ist leitend, der andere sperrt. Durch die Parallelschaltung der p-KanalTransistoren ist auch hier eine Verbindung des Ausgangs zur Versorgungsspannung
Abb.10.2 Vier
Mglichkeiten der Ansteuerung
eines NAND-Gatters
a)
b)
VDD
VDD
1'
1'
0'
0'
0'
1'
GND
GND
c)
d)
VDD
VDD
1'
0'
1'
1'
0'
1'
GND
GND
292
10Halbleitertechnik
vorhanden; der Ausgang ist 1. Von den n-Kanal-Transistoren ist einer durch eine 1
am Eingang leitend. In der Reihenschaltung fliet jedoch kein Strom nach Masse.
Im Fall d) sind beide Eingnge 1. Jetzt sind beide n-Kanal-Transistoren leitend und
der Ausgang ist mit Masse verbunden, gibt also eine 0 aus. Die beiden p-Kanal-Transistoren sperren, so dass der Ausgang nicht mit Versorgungsspannung verbunden ist.
Die vier Eingangskombinationen ergeben somit die NAND-Funktion. In den vier mglichen Fllen zeigt sich die wichtige Eigenschaft der Schaltung, dass von den beiden Netzwerken aus p-Kanal und n-Kanal-Transistoren jeweils eins leitend, das andere gesperrt
ist. Die Netzwerke verhalten sich also genau entgegengesetzt, was durch das C in
CMOS, also den Begriff komplementr, ausgedrckt wird.
10.1.2 Feldeffekttransistoren
Feldeffekttransistoren werden sowohl nach n-Kanal und p-Kanal als auch nach selbstsperrend und selbstleitend unterschieden. Da in der CMOS-Technologie nur selbstsperrende Transistoren eingesetzt werden, sind nur diese im Folgenden erlutert. Sie werden
auch als Anreicherungstyp oder Enhancement-Typ bezeichnet. Selbstleitende Transistoren (Verarmungstyp, Depletion-Typ) werden in der CMOS-Technologie nicht verwendet.
Das Grundmaterial, genannt Substrat, ist monokristallines Silizium, bei dem also die
Silizium-Atome ein gleichmiges Gitter bilden. Dieses Material wird dotiert, das heit,
es werden kleine Mengen weiterer chemischer Elemente hinzugefgt. Je nach chemischem Element handelt es sich um eine n-Dotierung mit zustzlichen Elektronen oder
um eine p-Dotierung mit sogenannten Lchern, also Freistellen, so dass sich Elektronen
bewegen knnen.
n-Kanal-Transistor
Der Aufbau eines Feldeffekttransistors ist in Abb.10.3 als Schnittansicht von schrg
oben dargestellt. Das Substrat ist leicht p-dotiert und in dieses Grundmaterial werden die beiden Anschlsse Source und Drain durch n-Dotierung erzeugt. Zwischen den
Anschlssen liegt ber einer Isolationsschicht der Gate-Anschluss. Die Isolationsschicht
besteht meist aus Siliziumdioxid SiO2 und der Gate-Anschluss aus polykristallinem Silizium, der durch eine hohe Dotierung gut leitet. L und W bezeichnen die Lnge und Weite
des Transistors. Sie sind wichtige Kenngren, denn aus ihnen ergeben sich die Gre
und die Leitfhigkeit des Transistors.
Die Funktion des Feldeffekttransistors ist in Abb.10.4 dargestellt. Zur einfacheren
Darstellung ist die Seitenansicht gewhlt. Im spannungslosen Zustand ist die Verbindung
zwischen Source und Drain nicht leitend.
Bei Anlegen einer positiven Spannung an das Gate werden die p-Ladungstrger im
Substrat, also die Lcher, verdrngt, denn gleichnamige Ladungen stoen sich ab.
Gleichzeitig werden n-Ladungstrger, also Elektronen, angezogen, denn ungleichnamige
10.1CMOS-Technologie
293
Gate-Weite W
Gate
Gate-Oxid
Source
Drain
Substrat
Poly-Silizium
n
Gate-Lnge L
p-dotiertes Silizium
Source
U>UT
Drain
Gate
Poly-Silizium
n
Kanal
p-Silizium
Ladungen ziehen sich an. Ab einer gewissen Spannung sind so viele Lcher verdrngt
und Elektronen angezogen, dass sich ein berhang von n-Ladungstrgern zwischen
Source und Drain bildet. Dieser Bereich wird als Kanal bezeichnet. Mit dem Kanal
bildet sich ein Gebiet, das zwischen Source und Drain durchgngig eine n-Dotierung
besitzt, so dass der Transistor leitet.
Da die Leitfhigkeit durch einen n-Kanal entsteht, wird dieser Aufbau als n-KanalTransistor bezeichnet. Die Spannung, ab der ein Kanal entsteht, ist die Schwellenspannung UT (T fr Threshold, Schwelle). Der genaue Wert der Schwellenspannung ist
unter anderem von der Dotierung abhngig.
p-Kanal-Transistor
Der Aufbau eines p-Kanal-Transistors ist im Prinzip der gleiche, allerdings sind die
Dotierungen vertauscht (Abb.10.5). Das Substrat ist n-dotiert und die Bereiche fr
Source und Drain haben eine p-Dotierung. Durch eine negative Spannung am Gate werden Elektronen abgestoen und Lcher angezogen, so dass sich ab der Schwellenspannung ein p-Kanal bildet, der die p-Bereiche Source und Drain verbindet.
Die negative Gate-Spannung bedeutet dabei nicht, dass auf einem CMOS-Chip negative Spannungen verwendet werden. Die Gate-Spannung muss negativ gegenber dem
Bezugspotential des Substrats werden. Dies wird dadurch erreicht, dass beim p-KanalTransistor das Substrat an Versorgungsspannung gelegt wird. Eine Gate-Spannung von
0Volt ist damit negativ gegenber Substrat.
Ein Unterschied zum n-Kanal-Transistor besteht in den elektrischen Eigenschaften.
Die Beweglichkeit der Lcher ist etwas geringer als die Beweglichkeit der Elektronen.
294
Abb.10.5 Funktion des
p-Kanal-Feldeffekttransistors
10Halbleitertechnik
Source
U<UT
Drain
Gate
Poly-Silizium
p
Kanal
n-Silizium
Deswegen ist der Widerstand eines p-Kanal-Transistors etwa 2- bis 3-mal so hoch wie
bei einem p-Kanal-Transistor gleicher Gre. Als Ausgleich wird normalerweise ein
p-Kanal-Transistor mit doppelter oder dreifacher Gate-Weite W (siehe Abb.10.3) verwendet, wodurch beide Transistoren etwa gleichen elektrischen Widerstand haben.
10.1.3 Layout
ber den Transistoren befinden sich Verbindungsleitungen aus Metall. Fr die vielen
Verbindungen auf einem Chip sind mehrere Lagen an Verbindungsleitungen vorhanden.
Moderne ICs haben etwa fnf bis zehn Lagen, wovon die unteren Lagen fr lokale Verbindungen, die oberen Lagen fr lngere Verbindungen und die Spannungsversorgung
verwendet werden. Zwischen den Verbindungsleitungen sowie zu den Transistoren sind
Isolierschichten, die an vertikalen Verbindungsstellen durch Kontaktlcher, sogenannte
Vias unterbrochen sind. Abb.10.6 zeigt die Transistorstruktur (gates) und die Verbindungslagen (M1 bis M4) im Elektronenmikroskop und gibt einen Eindruck von der realen Geometrie.
Der physikalische Aufbau einer CMOS-Schaltung wird als Layout bezeichnet. Das
Layout beschreibt die Position der Transistoren sowie der Verbindungsleitungen. In
Abb.10.7 ist zunchst das Layout eines einzelnen Transistors gezeigt. Links sieht man
die Seitenansicht, wie im vorherigen Abschnitt erlutert. Dabei sind Source und Drain
durch Metalllage und Kontaktloch angeschlossen. Rechts ist die Draufsicht gezeigt, die
fr das Layout verwendet wird. Dabei wird in der Darstellung nicht zwischen Source
und Drain unterschieden.
Das Layout eines kompletten Gatters ist in Abb.10.8 dargestellt. Es handelt sich um
das oben beschriebene NAND-Gatter. Zur Orientierung ist das Schaltbild noch einmal
angegeben. Im Layout sind oben und unten Metallleitungen fr die Anschlsse von Versorgungsspannung (VDD) und Masse (GND) vorhanden.
Die beiden n-Kanal-Transistoren befinden sich im unteren Bereich des Layouts und
sind in Reihe geschaltet. Zwischen den Transistoren ist keine zustzliche Verbindung
ntig. Das Drain-Gebiet des einen Transistors ist direkt das Source-Gebiet des anderen
Transistors. Ein Anschluss dieser Reihenschaltung ist an GND, der andere am Ausgang
Y. Die Gate-Anschlsse sind mit den Eingngen des NAND-Gatters, A und B verbunden.
10.1CMOS-Technologie
295
Source
Gate
Drain
Metall
Kontaktloch
Querschnitt
Schaltplan
Draufsicht
Layout
VDD
Y
VDD
A
GND
Legende
Metall
Via (Kontaktloch)
Poly-Silizium
Aktiv (Source / Drain)
n-Wanne
A
GND
296
10Halbleitertechnik
Im oberen Bereich des Layouts sind die beiden p-Kanal-Transistoren. Sie sind parallel
geschaltet und verbinden jeweils VDD mit dem Ausgang Y. Auch sie werden durch die
Eingnge A und B angesteuert. Wie oben erlutert, bentigen die p-Kanal-Transistoren
ein anderes Substrat und dies wird durch die sogenannte n-Wanne bereitgestellt. Die
n-Wanne ist ein Bereich, in dem das eigentlich p-dotierte Grundmaterial durch Dotierung
in einen n-Bereich umgewandelt wird. Durch das Kontaktloch ganz oben an der VDDLeitung wird die n-Wanne mit dem Pegel der Versorgungsspannung verbunden.
Im Layout sind auch Lnge und Weite des Gates dargestellt. Die Gate-Lnge wird so
kurz wie mglich gewhlt, damit der Widerstand durch den Transistor nicht unntig gro
wird. Die Weite wird so gewhlt, dass n-Kanal und p-Kanal-Netzwerke den gleichen Widerstand und damit symmetrisches Verhalten haben. Beim NAND-Gatter sind zwei n-KanalTransistoren in Reihe, was den doppelten Widerstand ergibt. Die p-Kanal-Transistoren
haben aufgrund der geringeren Beweglichkeit der Lcher ebenfalls etwa doppelten Widerstand. Somit sind die Widerstnde beider Transistornetzwerke etwa gleich gro.
10.2.1 Inverter
Der Inverter ist noch einfacher aufgebaut als das NAND-Gatter und besteht aus nur zwei
Transistoren. Ein Transistor verbindet den Ausgang mit VDD, ein anderer mit GND.
Schaltbild und Layout sind in Abb.10.9 dargestellt. Die Gate-Weite des p-Kanal-Transistors (oben) ist doppelt so gro wie beim n-Kanal-Transistor, um die geringere Beweglichkeit der Lcher auszugleichen.
10.2.2 Logikgatter
Andere Grundgatter knnen in hnlicher Weise wie das NAND-Gatter mit n- und
p-Kanal-Transistoren aufgebaut werden. Ein Netzwerk von n-Kanal-Transistoren verbindet den Ausgang mit Masse, ein zweites Netzwerk von p-Kanal-Transistoren verbindet
den Ausgang mit der Versorgungsspannung. Dabei ist wichtig, dass die Netzwerke zueinander komplementr sind, also stets genau eins der Netzwerke leitet.
Das Beispiel in Abb.10.10 hat die Funktion Y = (A B) & C . Man erkennt, dass die
Netzwerke auch in ihrer Topologie komplementr sind. Im p-Kanal-Netzwerk sind die
297
Schaltplan
Layout
VDD
A
VDD
Y
GND
Legende
A
Metall
Via (Kontaktloch)
Poly-Silizium
Aktiv (Source / Drain)
GND
n-Wanne
Abb.10.10 Komplexgatter in
CMOS-Technik
VDD
C
Y
A
B
GND
10.2.3 Transmission-Gate
In den bisher gezeigten Grundgattern verbinden die Transistoren den Ausgang mit
VDD oder GND. Es ist jedoch auch mglich, Signaleingnge durch die Transistoren zu
298
10Halbleitertechnik
10.2.4 Flip-Flop
Neben kombinatorischen Elementen enthlt eine Digitalschaltung natrlich auch FlipFlops zur Speicherung von Informationen. Heutzutage werden praktisch immer taktflankengesteuerte D-Flip-Flops verwendet. Es gibt verschiedene Schaltungstechniken, um
ein solches Flip-Flop zu realisieren. Die Varianten unterscheiden sich in Siliziumflche,
Schaltgeschwindigkeit und Stromverbrauch.
Als eine Flip-Flop-Schaltung ist in Abb.10.12 exemplarisch das Transmission Gate
Pulsed Latch, kurz TGPL, dargestellt. Zum Verstndnis der Schaltung ist ein kleines
Transmission-Gate
Y
EN
Multiplexer
EN
A
299
VDD
P
CK
CK
/CK
P
&
/D
/Q
/CK
GND
300
10Halbleitertechnik
Process (P): Die elektrischen Eigenschaften der Transistoren unterliegen den Toleranzen des verwendeten Halbleiterprozesses und knnen schwanken. Beispiel: Die
Dotierung von Source und Drain kann gegenber dem Normalfall abweichen.
Voltage (V): Die Versorgungsspannung kann, eventuell auch nur kurzzeitig, schwanken. Beispiel: Statt ideal 1,2V kann die Spannung 1,15 oder 1,25V betragen.
Temperature (T): Die Temperatur kann schwanken. Beispiel: Der Chip kann bei
Temperaturen im Bereich von 20C bis 80C arbeiten.
Bei der Entwicklung eines Flip-Flops wird die Schaltung darum unter verschiedenen
Arbeitsbedingungen simuliert und es werden Testschaltungen hergestellt. Dabei kann
auch berprft werden, ob eventuell eine andere Flip-Flop-Schaltung fr den jeweiligen
Halbleiterprozess besser geeignet ist. Das oben beschriebene TGPL ist nur eine mgliche
Schaltungsvariante.
10.3 Verlustleistung
Neben der Anzahl an Transistoren, welche die Gre einer Schaltung ausmacht, ist
der Energieverbrauch einer Schaltung eine wichtige Kenngre. Die CMOS-Technik
ist prinzipiell sehr energieeffizient. Sie hat gegenber anderen Halbleitertechniken den
groen Vorteil, dass durch ein Gatter kein Ruhestrom fliet, denn entweder sperren die
p-Kanal-Transistoren oder die n-Kanal-Transistoren. Vorgngertechnologien hingegen
hatten einen stndigen Ruhestrom und wurden wegen dieser stndigen Verlustleistung
durch CMOS abgelst.
Durch immer leistungsfhigere Schaltungen ist allerdings auch die Verlustleistung
von CMOS-Schaltungen in den letzten Jahren immer weiter gestiegen. Deutlich sichtbar
ist dies bei High-End-Grafikkarten fr PC-Spiele. Sie haben hohe Rechenleistung fr die
Berechnung der Grafik, aber auch groe Khlkrper und Lfter zur Khlung.
Es gibt verschiedene Grnde aus denen eine geringe Verlustleistung Integrierter
Schaltungen sinnvoll ist.
Hhere Leistungsaufnahme erhht die Kosten fr Chipgehuse und Khlkrper.
Gegebenenfalls sind Lfter erforderlich.
Die Betriebskosten fr Spannungsversorgung und Khlung steigen. Dies ist insbesondere in Rechenzentren ein hoher Kostenanteil.
Mobile Gerte wie Laptop, Tablet oder Smartphone sollen mit einer Akkuladung
mglichst lange Betriebszeiten haben.
Es werden autarke Sensoren eingesetzt, die mit einer Batterie mehrere Jahre betrieben
werden sollen.
Die Verlustleistung entsteht durch einen statischen und einen dynamischen Anteil.
Diese beiden Aspekte der Verlustleistung werden in den folgenden Abschnitten nher
vorgestellt.
10.3Verlustleistung
301
Igate
Isubth
Igidl
Irev
B (Bulk)
302
10Halbleitertechnik
uin(t)
VDD
uout(t)
ip(t)
ic(t)
uin(t)
in(t)
ip(t)
CL
GND
uout(t)
in(t)
ic(t)
Lastkapazitt dar, welche vom Inverter geschaltet wird. Die Lastkapazitt setzt sich
zusammen aus den Gate-Kapazitten der nachfolgenden Gatter sowie der Leitungskapazitt auf den Verbindungen dorthin. Der Zeitverlauf zeigt den prinzipiellen Verlauf der
Spannungen am Eingang und Ausgang des Inverters sowie der Strme im p-Kanal-Transistor ip(t), im n-Kanal-Transistor in(t), sowie zum Kondensator ic(t).
Im Diagramm wechselt die Eingangsspannung zum Zeitpunkt von logisch 1 auf 0.
Mit kurzer Zeitverzgerung wechselt darauf der Ausgang von 0 nach 1. Dabei wird der
Kondensator ber den p-Kanal-Transistor geladen, sichtbar an den Strmen ip und ic.
Auerdem fliet ein kleinerer Querstrom ber ip und in, wenn beim Umschalten des Eingangs beide Transistoren fr kurze Zeit teilweise leiten.
Zum Zeitpunkt wechselt der Eingang wieder von 0 auf 1 und der Ausgang kurz
darauf von 1 nach 0. Jetzt wird der Kondensator ber den n-Kanal-Transistor entladen,
sichtbar an den Strmen in und einem negativen Wert fr ic. Wieder sind beim Umschalten kurzfristig beide Transistoren teilweise leitend, so dass erneut ein Querstrom ber ip
und in fliet.
Die Verlustleistung des Inverters berechnet sich ber das Integral des Stroms ip(t), multipliziert mit der Versorgungsspannung VDD. Dabei hat das Umladen der Kapazitt den
grten Anteil. Einflussgren sind zum einen der Wert der Lastkapazitt CL sowie die
Hhe der Versorgungsspannung VDD. Zum anderen muss bercksichtigt werden, wie oft
die Kapazitt umgeladen wird. Dies wird durch die Taktfrequenz f der Schaltung angegeben, sowie die Schaltaktivitt als Wahrscheinlichkeit einer 0-1-Flanke pro Taktzyklus.
Diese Einflussgren multiplizieren sich zur Verlustleistung PC fr das Umladen der
Lastkapazitt. Dabei hat die Versorgungsspannung einen quadratischen Einfluss:
2
PC,inv = f VDD
CL
Die Einflussgren sind, ausgenommen die Schaltaktivitt, bereits bekannt. Die Schaltaktivitt drckt aus, wie hufig eine Leitung auf 1 wechselt und kann Werte zwischen 1
und 0 einnehmen.
Das Taktsignal hat jeden Takt eine steigende Flanke und daher ist =1
Die unterste Stelle eines Zhlers hat von Takt zu Takt abwechselnd die Werte 0 und 1.
Es gibt also jeden zweiten Takt eine steigende Flanke: =0,5
10.3Verlustleistung
303
Die oberste Stelle eines 8-Bit-Zhlers hat nur eine steigende Flanke beim bergang von 127 nach 128. Der nchste Wechsel tritt erst 256 Takte spter auf:
=1/2560,004
Die Reset-Leitung einer CPU wird im normalen Betrieb nicht angesteuert, daher ist
=0
Audio und Video-Signale haben, je nach Typ des Signals, einen Wert von 0,3 bis
0,1
Fr eine gesamte Integrierte Schaltung mssen die Anteile der einzelnen Schaltungsknoten addiert werden.
2
PC =
i f VDD
CL,i
i = alle Knoten
Die Verlustleistung durch den Querstrom ist in dieser Gleichung noch nicht bercksichtigt. Allerdings ist der Anteil deutlich kleiner als PC und ebenfalls proportional zur
Schalthufigkeit. Darum wird in der Praxis meist nur die Verlustleistung durch Umladen
der Lastkapazitten betrachtet. Der Einfluss des Querstroms kann beispielsweise bercksichtigt werden, indem die Lastkapazitten CL etwas hher angesetzt werden.
304
10Halbleitertechnik
ganzer Schaltungsteile, wenn sie nicht bentigt werden. Dies erfolgt beispielsweise in
einer CPU mit mehreren Prozessoren. Bei geringer Rechenlast werden einzelne Prozessoren komplett ausgeschaltet und damit die dynamische Verlustleistung reduziert. Wenn
ein Prozessor oder nicht bentigte Schnittstellenkomponenten vorbergehend von der
Versorgungsspannung abgetrennt werden, reduziert sich zustzlich auch die statische
Verlustleistung.
305
Beispielsweise wurde im Kapitel6 eine Flankenerkennung beschrieben, bei der folgender VHDL-Code verwendet wurde:
if (a_sync_old='0') and (a_sync='1') then
q <= '1';else
q <= '0';end if;
Die Logiksynthese interpretiert diesen Code und erkennt, dass eine Logikfunktion
A & B erforderlich ist. A ist dabei das VHDL-Signal a_sync_old, B ist a_sync. Fr die
Umsetzung in Standardzellen hat die Logiksynthese mehrere Mglichkeiten:
Inverter fr A gefolgt von einem UND-Gatter.
Da Grundgatter in CMOS-Technologie stets eine Invertierung beinhalten, wre ein
NAND- oder NOR-Gatter vorteilhaft. Die Logikfunktion
kann mit den Gesetzen von
De Morgan umgewandelt werden in A & B = A B . Damit ergibt sich ein Inverter
fr B gefolgt von einem NOR-Gatter.
Eventuell steht in der Standardzellbibliothek ein passendes Komplexgatter mit der
Funktion A & B zur Verfgung.
Dieser Entwurfsschritt ist hnlich zur in Kapitel7 beschriebenen Synthese von
FPGA-Schaltungen. Allerdings muss die Logiksynthese unter vielen Standardzellen
whlen, whrend der FPGA-Synthese blicherweise nur Look-Up-Tables und Flip-Flops
zur Verfgung stehen.
Layout
Die Logiksynthese erzeugt eine Netzliste mit bentigten Standardzellen und ihren Verbindungsleitungen. Im nchsten Schritt werden die Position der Standardzellen und die
Lage der Verbindungsleitungen ermittelt. Die physikalische Anordnung wird als Layout, die beiden Einzelschritte als Placement und Routing bezeichnet. Auch diese Schritte
werden von einem EDA-Programm durchgefhrt und sind hnlich zur Platzierung und
Verdrahtung des FPGA-Entwurfs.
Miteinander verbundene Standardzellen werden vom EDA-Programm mglichst nah
aneinander platziert. Dazu probiert ein intelligenter Algorithmus verschiedene Anordnungen aus. Abb.10.15 zeigt das Layout einer automatisch erzeugten Teilschaltung.
Aus den Teilschaltungen wird schlielich die gesamte integrierte Schaltung zusammengestellt. Abb.10.16 zeigt als Beispiel das Chip-Foto eines System-on-Chip (SoC)
fr ein Smartphone. Es handelt sich um die zentrale Steuereinheit des Gerts mit zwei
CPU-Kernen und der Grafikerzeugung (GPU) sowie lokalem Speicher (L1, L2, SRAM).
Ebenso sind verschiedene Schnittstellen fr externen Speicher (DRAM), Kamera, USB
und das Display (LCD) vorhanden. Fr die Taktaufbereitung dienen PLLs (PhaseLocked Loop). Der Chip enthlt ber 1Mrd. Transistoren auf rund 1Quadratzentimeter
Flche.
306
10Halbleitertechnik
307
10.4.2 Herstellung
Als Grundmaterial fr die Herstellung von CMOS-Schaltungen wird monokristallines Silizium verwendet. Die Herstellung erfolgt auf dnnen Siliziumscheiben, genannt
Wafer. Ein Wafer ist etwa 1mm dick und hat einen Durchmesser zwischen 15 und 30cm
(Abb.10.17). Auf diesem Substrat werden durch aufwendige chemische und physikalische Prozesse die Strukturen fr die Schaltung aufgebracht. Aus einem kompletten Wafer
knnen mehrere hundert einzelne Chips gefertigt werden.
Die Anzahl an Chips je Wafer ergibt sich direkt aus der Flche. Als Zahlenbeispiel
betrachten wir einen Wafer mit 30cm Durchmesser, auf dem sich Chips mit der Flche
von 2cm2 befinden. Die Kreisflche ist r2, also 3,14(15cm)2=707cm2. Da jeder
Chip 2cm2 bentigt, ergibt der Wafer theoretisch 353Chips. An den Kanten, zum Sgen
der Chips und fr kleine Testflchen geht jedoch Flche verloren. Praktisch knnen aus
dem Wafer darum etwa 250 bis 300Chips hergestellt werden.
Auf dem Wafer werden die Strukturen der Transistoren und Metallleitungen in mehreren Arbeitsschritten nacheinander gefertigt. Abb.10.18 zeigt den Arbeitsschritt der
Erzeugung von Source und Drain eines Transistors (vergleiche Abb.10.4). Das Substrat ist p-dotiert und fr Source und Drain sollen zwei n-dotierte Bereiche entstehen. Das
Bild zeigt einen kleinen Ausschnitt des Wafers in Seitenansicht.
Zunchst wird die Oberflche mit Fotolack versehen, mit einer Belichtungsmaske
abgedeckt und belichtet. Dieser Verarbeitungsschritt wird als Lithographie (auch Belichtungstechnik) bezeichnet. Die nicht belichteten Stellen knnen entfernt werden und lassen das darunter liegende Substrat frei (Abb.10.18, links). Dann wird der Halbleiter in
eine Atmosphre mit dem Dotierungsgas gebracht und erhitzt. Fr eine n-Dotierung kann
die Dotierung zum Beispiel Arsen sein. Die Dotierungsatome dringen in das Substrat ein
und bilden Source und Drain (Abb.10.18, rechts).
Auf diese Art werden Schritt fr Schritt die einzelnen Ebenen einer Schaltung
erzeugt. Die komplette Bearbeitung eines Wafers bentigt mehrere hundert Verarbeitungsschritte. Dazu gehrt immer wieder das Auftragen von Fotolack, Belichten mit
einer Fotomaske, Freitzen unbelichteter Regionen, Dotieren nichtabgedeckter Bereiche
und Entfernen des Fotolacks. Fr die einzelnen Schaltungsebenen werden rund 20 bis 30
verschiedene Belichtungsmasken bentigt.
Aufgrund der sehr feinen Strukturen wrde ein Staubkorn oder ein Haar auf dem
Wafer die Fertigung stren und der Chip wre an der Stelle des Staubkorns unbrauchbar.
Darum findet die Fertigung in einem Reinraum statt. Dort trgt man spezielle Schutzkleidung und einen Mundschutz und es werden mglichst Industrieroboter eingesetzt.
Dennoch bleibt trotz aller Sorgfalt eine geringe Staubkonzentration, so dass sich Fertigungsfehler nicht komplett vermeiden lassen.
Darum mssen smtliche ICs nach der Fertigung einzeln getestet werden. blicherweise erfolgt dieser Fertigungstest zweimal, einmal noch auf dem Wafer, ein anderes Mal
nach dem Verpacken. Durch den ersten Test werden Kosten beim Verpacken in die Gehuse
308
10Halbleitertechnik
Dotierung
n
p
Photolack
Substrat
gespart, denn defekte Chips werden nicht weiter verarbeitet. Durch den zweiten Test wird
berprft, ob das Zersgen des Wafers und das Verpacken zu Fehlern gefhrt haben.
Der Anteil der korrekt gefertigten ICs wird als Ausbeute (engl. Yield) bezeichnet.
Genaue Ausbeutewerte werden von den Halbleiterfirmen als Betriebsgeheimnis gehtet. Werte fr eine eingefahrene Fertigung knnen bei 80 bis 90% liegen. Fr eine neue
Halbleitertechnologie kann die Ausbeute jedoch auch bei nur 10% oder noch darunter
liegen. Dennoch kann solch eine Fertigung wirtschaftlich sein, wenn die Produkte aufgrund der Leistungsfhigkeit der neuen Technologie einen entsprechend hohen Preis
erzielen.
10.4.3 Packaging
Nach Erstellen der Schaltungsstrukturen wird schlielich der Wafer in einzelne Chips
zersgt und in Gehuse verpackt. Diese unverpackten Chips werden auch als Die
bezeichnet; der Plural ist Dies oder Dice. Mit dnnen Golddrhtchen werden Die und
Gehuse miteinander verbunden. Die Drhtchen werden als Bond-Draht bezeichnet,
der Fertigungsschritt als Bonding. Abb.10.19 zeigt, wie in einem geffneten Gehuse
die Bond-Drhte eine Verbindung zum Die herstellen. Fr die Bond-Drhte wird Gold
als Material verwendet, weil es ein sehr guter elektrischer Leiter ist und sich fr diese
Anwendung gut verarbeiten lsst.
309
Abb.10.19Geffneter Chip mit Bond-Drhten zwischen Die und Gehuse. (Foto: imec,
bearbeitet)
Die Anschlussflchen im Inneren des Gehuses sind mit den Pins auen am Gehuse
verbunden. Mit den Pins erfolgt dann die elektrische Verbindung zur Platine.
10.4.4 Gehuse
Es sind verschiedene Gehuseformen gebruchlich. Hauptkriterium fr die Auswahl des
Gehuses durch den Hersteller ist die Anzahl der Anschlsse. Weitere Kriterien sind auftretende Verlustleistung, Platzbedarf und Gehusekosten. Um die Ausrichtung der ICs zu
bestimmen, sind an den Gehusen Orientierungsmarken angebracht, meist ein eingeprgter Punkt oder eine Kerbe im Gehuse. Zustzlich kann sich in einer Ecke ein fehlender
oder zustzlicher Pin befinden.
Abb.10.20 zeigt beispielhaft einige Gehuseformen. Von links nach rechts sind
abgebildet:
DIL-Gehuse (Dual In-Line): Geeignet fr kleine Anzahl an Pins. Die Beinchen
des Gehuses sind fr eine Durchsteckmontage gedacht, werden also durch Lcher in
der Platine gefhrt.
PLCC-Gehuse (Plastic Leaded Chip Carrier): Fr mittlere Anzahl an Pins geeignet.
Die Pins erlauben die Oberflchenmontage und das Einstecken in Sockel.
310
10Halbleitertechnik
QFP-Gehuse (Quad Flat Pack): Ebenfalls fr mittlere Anzahl an Pins und die Oberflchenmontage geeignet. Im Vergleich zu PLCC etwas kleinere Pins.
BGA-Gehuse (Ball Grid Array): Bis zu groer Anzahl an Pins verfgbar. Die
Anschlsse fr die Oberflchenmontage befinden sich als Ltkugeln unterhalb des
Bausteins.
Abb.10.21 zeigt den Anstieg der Integration. Die vertikale Achse hat eine logarithmische Skala, das heit, ein Teilstrich der Skala entspricht einem Multiplikationsfaktor
von10 gegenber dem vorherigen Teilstrich. Die Punkte stellen Einfhrungsjahr und
311
100 Mrd.
10 Mrd.
Transistoren
je Chip
1 Mrd.
Athlon 64
100 Mio.
i7-3960X
10 Mio.
1 Mio.
Pentium
80286
100.000
8086
10.000
1000
4004
1970
1980
Jahr
1990
2000
2010
2020
10.5.2 FinFET-Transistoren
Bei der Miniaturisierung von Halbleitern gibt es eine natrliche Grenze: Die Gre der
Atome. Der Atomdurchmesser eines Siliziumatoms betrgt etwa 0,25nm, so dass die
Gate-Lnge heute bereits unter hundert Atomen liegt. Als Folge mssen fr die Schalteigenschaften der Transistoren quantenphysikalische Einflsse einzelner Atome beachtet
werden. Durch die kleinen Abmessungen verschlechtern sich die elektrischen Eigenschaften der Transistoren.
Darum werden neue Transistorgeometrien entwickelt, die fr sehr kleine Strukturen
besser geeignet sind, als die in Abschn.10.1.2 beschriebenen, sogenannten Planar-Transistoren. Eine erfolgreich eingesetzte Struktur sind FinFET-Transistoren. Dabei liegt das
Gate nicht oberhalb des Kanals, sondern um einen Steg herum, der wie eine Finne oder
Gate
Gate
Source
Source
Drain
Gate-Oxid
Gate-Oxid
Drain
Oxid
Planar-Transistor
FinFET-Transistor
312
10Halbleitertechnik
Rckenflosse aussieht. Aus dieser Finne und der Abkrzung FET fr Feldeffekttransistor
ergibt sich der Name FinFET. Der physikalische Aufbau eines FinFET-Transistors ist in
Abb.10.22 dargestellt. Das Gate umschliet den Kanal von drei Seiten und hat daher auf
kleinem Raum eine hohe Schaltwirkung. Auch Abb.10.6 zeigt FinFET-Transistoren.
10.6 bungsaufgaben
Haben Sie den Inhalt des Kapitels verstanden? Prfen Sie sich mit den Aufgaben und
Fragen am Kapitelende. Die Lsungen und Antworten finden Sie am Ende des Buches.
Bei den Auswahlfragen ist immer genau eine Antwort korrekt.
Aufgabe 10.1
Was fr Schaltelemente werden fr CMOS-Schaltungen benutzt?
a) Feldeffekttransistoren
b) Mechanische Schalter
c) Feldeffekt- und Bipolartransistoren
d) Bipolartransistoren
Aufgabe 10.2
Ein CMOS-Inverter besteht aus zwei Transistoren. Wie heit der mit Versorgungsspannung (VDD) verbundene Transistor?
a) Depletion-Transistor
b) p-Kanal Transistor
c) n-Kanal Transistor
d) Verarmungstransistor
10.6bungsaufgaben
313
Aufgabe 10.3
Ein CMOS-Inverter besteht aus zwei Transistoren. Wie heit der mit Masse (GND) verbundene Transistor?
a) n-Kanal Transistor
b) Depletion-Transistor
c) p-Kanal Transistor
d) Verarmungstransistor
Aufgabe 10.4
Wenn bei CMOS das Substrat p-dotiert ist, muss der p-Kanal-Transistor in einem speziellen, umdotierten Gebiet liegen. Wie wird dieses Gebiet bezeichnet?
a) Sillicon Region
b) Silicon Valley
c) n-Wanne
d) Raumladungszone
e) Verarmungszone
Aufgabe 10.5
Was bedeutet der Begriff Complementary (komplementr) bei CMOS-Gattern?
a) Es ist stets entweder n-Kanal- oder p-Kanal-Netzwerk leitend
b) p-Kanal-Transistoren haben eine grere Kanalweite
c) CMOS-Gatter beinhalten normalerweise eine Invertierung
d) p-Kanal- und n-Kanal-Transistoren haben entgegengesetztes Verhalten
Aufgabe 10.6
Warum hat im CMOS-Inverter der p-Kanal-Transistor eine 23fache Kanalweite?
a) Lcher haben eine hhere Beweglichkeit als Elektronen
b) Lcher haben eine geringere Beweglichkeit als Elektronen
c) Die Schaltzeiten 0 nach 1 sowie 1 nach 0 sollen unterschiedlich sein
d) Die Reihenschaltung mehrerer Transistoren wird ausgeglichen
e) Die Parallelschaltung mehrerer Transistoren wird ausgeglichen
Aufgabe 10.7
Welchen Aufbau hat ein Transmission-Gate?
a) Zwei unterschiedliche Inverter sind parallel geschaltet
b) Es werden nur p-Kanal-Transistoren verwendet
314
10Halbleitertechnik
VDD
A
B
Y
GND
Speicher
11
Die Speicherung von Informationen ist eine wichtige Funktion innerhalb von Digitalschaltungen. Fr kleine Speichergren werden Flip-Flops eingesetzt, die bereits aus
vorherigen Kapiteln bekannt sind. Fr mittlere und grere Datenmengen sind spezielle
Speicherstrukturen effizienter, die in diesem Kapitel vorgestellt werden. Fr mittlere
Datengren werden die Speicher auf einem Chip integriert. Fr sehr groe Datenmengen sind spezielle Speicherbausteine verfgbar.
Es gibt verschiedene Technologien fr den Aufbau von Speichern, die sich in ihren
Eigenschaften deutlich unterscheiden und daher jeweils eigene Anwendungsbereiche
haben. Die wichtigste Unterscheidung bei den Speichertechnologien ist die Speicherfhigkeit ohne Betriebsspannung.
Flchtige Speicher bentigen eine Versorgungsspannung zum Erhalt der Informationen. Zu diesen Speichern gehren SRAM und DRAM. Auch Flip-Flops bentigen die
Versorgungsspannung zur Informationsspeicherung.
Nichtflchtige Speicher behalten ihren Inhalt auch ohne Versorgungsspannung. Zu
diesen Speichern gehren EEPROM, FRAM, MRAM, PCRAM und RRAM.
Die englischen Begriffe sind Volatile Memory und Non-Volatile Memory.
Im Folgenden werden zunchst die verschiedenen Technologien zur Speicherung
erlutert und danach aktuelle Speicherbausteine betrachtet.
315
316
11Speicher
11.1 bersicht
11.1.1 Begriffe und Abkrzungen
Fr die verschiedenen Speichertypen und Speicherorganisationen werden eine Reihe von
Begriffen und Abkrzungen verwendet. Fr Ihren berblick klren wir fr zunchst die
wichtigsten Bezeichnungen.
SRAM steht fr Static Random Access Memory, also ein statischer Speicher mit
wahlfreiem Zugriff.
DRAM steht fr Dynamic Random Access Memory, also ein dynamischer Speicher
mit wahlfreiem Zugriff.
Der Unterschied zwischen statisch und dynamisch bedeutet, dass ein SRAM seine Daten
unbegrenzt hlt, solange die Versorgungsspannung anliegt. Das DRAM hingegen wrde
Daten nach einiger Zeit verlieren und darum muss die gespeicherte Information in regelmigen Abstnden aufgefrischt werden. Der Fachbegriff fr diesen Vorgang ist Refresh.
ROM ist ein Read-Only-Memory, also ein Speicher, der nur gelesen werden kann. Er
enthlt feste Werte, die nicht verndert werden knnen.
EEPROM ist ein nicht-flchtiger Speicher, der mehrfach neu beschrieben werden kann. Die Abkrzung steht fr Electrically Erasable Programmable Read-Only
Memory.
FRAM, MRAM, PCRAM und RRAM sind innovative nichtflchtige Speicher. Die
Abkrzungen stehen fr Ferroelectric RAM, Magnetoresistive RAM, Phase-Change
RAM und Resistive RAM.
NVRAM steht fr Non-Volatile RAM und ist der Oberbegriff fr nichtflchtige
Speicher.
In dem Begriff EEPROM ist eine lngere Geschichte der Speichertechniken verborgen.
ROM ist der Ausgangspunkt. Sie werden mit festem Speicherinhalt hergestellt, der
vor der Fertigung festgelegt wurde.
PROM steht fr Programmable ROM, also programmierbares ROM. Damit werden
Speicherbausteine bezeichnet, bei denen der Speicherinhalt programmiert werden
kann. Zunchst war aber nur ein einziger Programmiervorgang mglich.
EPROM steht fr Erasable PROM, also lschbares PROM. Der Lschvorgang
erfolgte durch Belichtung mit UV-Licht. Das EPROM wurde aus der Platine entnommen und fr circa 15min in ein spezielles Belichtungsgert gelegt. Danach konnte es
neu programmiert werden.
EEPROM steht fr Electrically Erasable PROM, also ein PROM, welches elektrisch
lschbar ist und nicht mehr belichtet werden muss.
11.1bersicht
317
11.1.2 Grundstruktur
Die prinzipielle Grundstruktur ist fr alle Speichertechnologien hnlich und in Abb.11.1
dargestellt. Die Speicherzellen sind in einer Matrixform in Zeilen und Spalten angeordnet. Auf die einzelnen Speicherzellen wird ber eine Adresse zugegriffen. Anhand eines
Teils der Speicheradresse wird eine Zeile ausgewhlt. Der Rest der Speicheradresse
whlt eine Spalte aus. Steuerleitungen geben an, ob Daten gelesen oder geschrieben werden sollen.
Die Daten werden ber Lese- und Schreibverstrker aus der Speicherzelle gelesen
beziehungsweise in die Zelle geschrieben. ber den Lese-/Schreibverstrker erfolgt
der Datenaustausch mit der weiteren Schaltung. Normalerweise enthlt ein Speicher
Zeilendecoder
Abb.11.1 Grundstruktur
eines Halbleiterspeichers
Speicherzellen
Speichermatrix
Daten
Lese-/ Schreibverstrker
Steuerleitungen
Spaltendecoder
Adresse
318
11Speicher
Datenworte mit mehreren Bits, das heit unter einer Adresse sind 8Bit, 16Bit oder
32Bit gespeichert. Die einzelnen Speichertechnologien unterscheiden sich durch die Art
der verwendeten Speicherzellen in der Matrix.
Durch die Matrixanordnung ergibt sich eine Zweiteilung der Adresse, welche die
interne Ansteuerung des Speichers erleichtert. Anstelle eines groen Adressdecoders sind
zwei kleine Decoder ntig. Die Aufteilung wird meist so gewhlt, dass die Speichermatrix quadratisch ist oder ein Verhltnis von 2-zu-1 oder 4-zu-1 hat.
Als Beispiel wird ein Speicher fr 220 Datenworte zu 16Bit betrachtet. Dies sind
exakt 1.048.576 Datenworte, also rund eine Million. Dafr sind etwa 16Mio. Speicherzellen erforderlich, die bei einer quadratischen Aufteilung eine Speichermatrix aus 4096
Zeilen und 4096 Spalten bilden. Jeweils 16 Zellen einer Zeile bilden ein Datenwort und
haben die gleiche Adresse. Es mssen also 4096 Zeilen und 4096/16=256 Spalten
angesteuert werden.
Aus der Speichergre ergibt sich die bentigte Wortbreite fr die Adresse. Mit n
Adressleitungen knnen 2n Adressen angesteuert werden.
Der Speicher mit 220 Datenworten bentigt somit 20 Adressleitungen. In der internen Struktur werden 12 Adressleitungen verwendet, um die Zeilenadresse zu bestimmen.
Dies berechnet sich aus den 4096 Adressen, die dem Wert 212 entsprechen. Die restlichen
8 Adressleitungen bestimmen die Spaltenadresse, denn 256 ist 28.
11.2Speichertechnologien
319
wird bei positiver Logik eine 1 erkannt. Spannungen unterhalb des Referenzpegels werden als eine logische 0 interpretiert. Strungen wirken sich auf Signale und Referenzspannung gleichermaen aus, so dass die Information nicht verflscht wird.
Terminierung von Leitungen
Auf elektrischen Leitungen knnen Reflektionen von Signalwechseln auftreten. Wenn
diese die eigentlichen Signale berlagern, sind Fehler in der Datenbertragung mglich.
Fr die Signalleitungen zu externen Speichern gibt es daher Layout-Regeln, damit die
Leitungen einen passenden Wellenwiderstand haben. Auerdem knnen auf der Platine
oder direkt auf den Chips Abschlusswiderstnde fr eine Terminierung der Leitungen
sorgen.
Double-Data-Rate
Schnelle Speicher verwenden ein synchrones Interface, bei denen die Abfolge der Daten
durch einen Takt angezeigt wird. Allerdings kann die hohe Frequenz des Taktsignals problematisch sein. Grund ist, dass der Takt schnellere Signalwechsel als die Datenleitungen hat. Der Takt wechselt in jedem Zyklus von 0 nach 1 und wieder von 1 nach 0. Ein
Datensignal hat jedoch pro Taktzyklus maximal einen Signalwechsel und damit die halbe
Frequenz.
Zur Verringerung der Frequenz fr das Taktsignal wird eine Datenbertragung mit
Double-Data-Rate, abgekrzt DDR, verwendet. Dabei signalisieren steigende und fallende Taktflanken die bertragenen Daten. Pro Taktzyklus werden also zwei Datenworte
bertragen, was zu der Bezeichnung doppelte Datenrate fhrt.
11.2 Speichertechnologien
11.2.1 SRAM
Im SRAM erfolgt die Datenspeicherung durch Rckkopplung zweier Inverter. Abb.11.2
zeigt einen Ausschnitt aus der Speichermatrix. Die Inverter sind wechselseitig mit ihren
Ein- und Ausgngen verbunden, so dass eine gespeicherte 0 oder 1 doppelt invertiert und
verstrkt wird. Damit bleibt die Information erhalten. Beim Abschalten der Versorgungsspannung entfllt die Rckkopplung, die Daten gehen verloren, der Speicher ist flchtig.
Angesteuert werden die SRAM-Zellen ber eine Zeilenadresse sowie Datenleitungen.
Fr jede Spalte sind zwei Datenleitungen vorhanden, die Daten und invertierte Daten
verbinden.
Zum Lesen von Daten wird eine Zeile ausgewhlt und die Zeilenadresse auf 1 gesetzt.
Dadurch werden alle Speicherzellen einer Zeile mit den Datenleitungen verbunden.
Der Leseverstrker whlt dann die richtigen Spalten aus und gibt die Daten an den
Ausgang.
320
11Speicher
D
Spalte m
D D
Spalte m+1
Zeilenadresse n+2
Zeilenadresse n+1
Zeilenadresse n
Datenleitungen
(direkt und invertiert)
Zum Schreiben von Daten wird ebenfalls eine Zeile durch Zeilenadresse auf 1 ausgewhlt. Wiederum werden die Speicherzellen mit den Datenleitungen verbunden. Dort
wo Daten geschrieben werden, mssen die Datenleitungen die neuen Werte enthalten.
Auerdem muss der Schreibverstrker so stark sein, dass er die Rckkopplung der
Speicherzelle berschreibt.
Die Speicherzelle selbst ist in Abb.11.3 dargestellt. Die Inverter haben jeweils zwei
Transistoren, die Schalter sind durch jeweils einen einzelnen Transistor aufgebaut.
Anders als beim Transmission-Gate (vgl. Kapitel10) wird nur ein n-Kanal-Transistor
verwendet, um Transistoren zu sparen. Insgesamt bentigt die SRAM-Zelle 6 Transistoren. Sie wird daher auch als 6T-Zelle bezeichnet.
Wir betrachten wieder den Speicher mit 220 Datenworten zu 16 Bit. Horizontal
verlaufen 4096 Zeilenadressen und vertikal fr jede Zelle zwei Datenleitungen also
Abb.11.3 Transistoraufbau
einer SRAM-Speicherzelle
Adressleitung
Datenleitungen
D
(direkt und invertiert)
VDD
GND
11.2Speichertechnologien
321
insgesamt 8192. Fr die rund 16Mio. Speicherzellen werden 616Mio., also 96Mio.
Transistoren bentigt. Bei der Adressierung eines 16-Bit-Wortes werden 32 nebeneinanderliegende Datenleitungen angesprochen, je Bit zwei Leitungen.
11.2.2 DRAM
Ein DRAM verwendet eine andere Art der Speicherung. Eine Information wird als
Ladung auf einem kleinen Kondensator gespeichert. Ein Transistor dient als Schalter zur
Datenleitung. Die Adressleitung ffnet den Transistor, so dass die Ladung gespeichert
oder abgefragt werden kann (Abb.11.4).
Der wesentliche Vorteil der DRAM-Speicherung ist der geringere Platzbedarf gegenber einem SRAM. Zunchst werden weniger Komponenten bentigt, und zwar nur ein
Transistor und ein Kondensator, verglichen mit den sechs Transistoren des SRAMs. Ein
weiterer Platzvorteil entsteht dadurch, dass keine p-Kanal-Transistoren verwendet werden und darum keine n-Wanne mit einem Mindestabstand zu den n-Kanal-Transistoren
erforderlich ist. Der Masseanschluss des Kondensators verbindet zum Substrat. Darum
wird keine Masseleitung bentigt und auch Versorgungsspannung sowie eine zweite
Datenleitung sind nicht erforderlich, was weiterhin Platz einspart. Die Speicherkapazitt
eines DRAMS ist dadurch wesentlich hher als bei einem SRAM.
Das Speicherprinzip des DRAMs hat jedoch auch Nachteile, insbesondere die Notwendigkeit einer speziellen Halbleitertechnologie sowie die begrenzte Datenerhaltung.
Spezielle Halbleitertechnologie
Wichtig fr die Informationsspeicherung ist ein Kondensator mit ausreichender Kapazitt. Dieser ist in einem Standard-CMOS-Prozess nicht vorhanden, so dass eine spezielle
Halbleitertechnologie erforderlich ist. Ein SRAM-Speicher hingegen lsst sich auf einem
Standard-CMOS-Prozess fertigen.
Es gibt verschiedene Mglichkeiten, einen Kondensator aufzubauen. Zwei Grundprinzipien sind Capacitor over Bitline (COB) und Trench-Transistoren.
Bei Capacitor over Bitline befindet sich der Kondensator oberhalb der Datenleitung
(Bitline) und wird beim Aufbau der verschiedenen Schichten eines Chips erzeugt.
Als Trench-Kondensator wird in das Substrat ein Graben (engl. Trench) oder Loch
getzt und mit leitfhigem Material aufgefllt. Grundprinzip und Chipfoto einer
Abb.11.4 Speicherzelle
eines DRAMs
Datenleitung
Adressleitung
C
GND
322
11Speicher
Trench Kondensator
Transistor
Source
Gate
Drain
Polysilizium
Isolation
Substrat
11.2Speichertechnologien
323
11.2.3 ROM
Wenn in einem System unvernderliche Werte gespeichert werden sollen, wird ein ReadOnly-Memory (ROM) eingesetzt. An den Kreuzungspunkten von Adress- und Datenleitungen befinden sich Kontaktmglichkeiten, die verbunden oder nicht verbunden sind
und damit eine 0 oder 1 darstellen. Um einen Kurzschluss ber andere Speicherstellen zu
vermeiden, befindet sich an der Kontaktstelle eine Diode.
Abb.11.6 zeigt den Aufbau eines ROMs mit verbundenen und unverbundenen Kontaktstellen. Zum Lesen einer Information wird eine Adressleitung auf High-Pegel gelegt
und vom Leseverstrker berprft, ob auf der Datenleitung ein Strom fliet. Die unbenutzten Adressleitungen liegen auf Low-Pegel und sind durch die Dioden abgetrennt.
11.2.4 OTP-Speicher
...
...
Zeilen adresse
...
...
2
...
1
...
0
...
Datenleitung
...
324
11Speicher
11.2.5 EEPROM
...
...
...
Fr viele Anwendungen sollen Daten nichtflchtig gespeichert, aber auch leicht vernderbar sein. Das hierfr am weitesten verbreitete Halbleiterelement ist das EEPROM.
Hierbei erfolgt die Datenspeicherung durch spezielle Transistoren mit einem zustzlichen isolierten Gate (engl. Floating-Gate). Wie Abb.11.8 zeigt, liegt das Floating-Gate
zwischen dem regulren Steuer-Gate und dem Kanal. Auf dem Floating-Gate kann durch
Tunneleffekte und sogenanntes Hot-Electron-Injection eine Ladung gespeichert und wieder gelscht werden. Das Floating-Gate ist jedoch elektrisch isoliert und speichert die
Ladung daher sehr lange. Die garantierte Speicherzeit betrgt je nach Baustein bis zu 20
Jahre.
Zum Lesen der Daten muss die Ladung nicht abgerufen werden. Der Transistor wird
ber das Steuer-Gate angesprochen. Falls keine Ladung auf dem Floating-Gate vorhanden ist, leitet der Transistor wie in der normalen CMOS-Technik. Falls eine Ladung
...
programmierbare
Verbindung
...
...
Abb.11.8 Floating-Gate
Transistor fr EEPROMs
Source
Steuer-Gate
n
Isolator
Drain
n
Floating Gate
p-Silizium
11.2Speichertechnologien
325
gespeichert ist, verschiebt sich die Schwellenspannung und der Transistor bleibt auch bei
Ansteuerung durch das Steuer-Gate nichtleitend. So ist eine Unterscheidung des Speicherinhalts mglich.
Hufig wird die als Flash-EEPROM bezeichnete Schaltungsform eingesetzt. Hierbei
hat der Schreibvorgang die Besonderheit, dass fr eine einzelne Zelle nur die nderung
von einer 1 in eine 0 mglich ist. Falls eine 0 in eine 1 gendert werden soll, muss ein
ganzer Block komplett auf 1 gesetzt werden und erneut die bentigten 0-Werte geschrieben werden. Typische Blockgren sind zwischen 8kByte und 256kByte. Dieses
Lschen ganzer Speicherblcke hat zu dem Namen Flash gefhrt. Ein Vorteil der FlashTechnik ist der geringere Schaltungsaufwand, u.a. weil beim Lschen nicht jede Zelle
einzeln angesprochen werden muss.
Die Anzahl der mglichen Lschzyklen ist begrenzt und betrgt beispielsweise
100.000 Zyklen. Bei der Ansteuerung des Flash-EEPROMs wird meist versucht, die Blcke mglichst gleich hufig zu benutzen, um die Lebensdauer des Bausteins zu verlngern. Diese Strategie bezeichnet man als Wear Leveling, also frei bersetzt Ausgleichen
der Abnutzung.
Es gibt zwei Strukturen fr die Anordnung von Floating-Gate Transistoren zu einem
Speicher, und zwar die NOR- und die NAND-Struktur, dargestellt in Abb.11.9. Beiden
Technologien gemeinsam ist, dass wieder eine Zeile durch einen Zeilendecoder ausgewhlt wird.
In der NOR-Struktur schalten die Speichertransistoren die Datenleitung parallel nach
Masse. Die nicht aktiven Transistoren sind nicht leitend und stellen somit keine Verbindung nach Masse dar. Zum Lesen wird ein Transistor ber die Adressleitung angesprochen. Abhngig von seinem Speicherzustand kann er daraufhin leitend werden
und die Datenleitung nach Masse ziehen. Dies wird vom Leseverstrker erkannt.
In der NAND-Struktur sind die Speichertransistoren in der Datenleitung in Reihe
angeordnet. Die nicht aktiven Transistoren sind leitend geschaltet. Der Transistor, der
Zeilenadressen
Zeilendecoder
...
NOR
...
Datenleitung
NAND
...
Datenleitung
326
11Speicher
gelesen werden soll, wird ber die Adressleitung angesprochen und schaltet die Reihenschaltung leitend oder nicht leitend. Auch dies wird vom Leseverstrker erkannt.
Beide Strukturen werden in der Praxis eingesetzt.
Der Vorteil der NOR-Struktur ist ein geringer Widerstand auf der Datenleitung, welcher eine gute Lesbarkeit der Daten ermglicht. Der Nachteil ist ein hherer Flchenbedarf, da jeder Transistor einen Kontakt zu Masse bentigt.
Der Vorteil der NAND-Struktur ist ein geringerer Flchenbedarf, da die Speichertransistoren direkt aneinander geschaltet werden. Dadurch ist die Speicherkapazitt hher.
Der Nachteil ist, dass die nicht aktiven Transistoren auch im leitenden Zustand noch
einen gewissen Widerstand haben, der sich in der Reihenschaltung addiert. Dadurch
ist das Auslesen schwieriger und es knnen Lesefehler auftreten.
Fr die meisten Anwendungen wird heutzutage die NAND-Struktur verwendet, da die
Speicherdichte deutlich hher ist. Beim Lesen knnen jedoch einzelne Datenworte
fehlerhaft sein, sogenanntes Bit-Flipping. Darum wird die Information mit einem fehlerkorrigierenden Code gespeichert, englisch Error Correcting Code (ECC). Durch
Zusatzinformationen kann ein Controller einzelne Fehler erkennen und direkt korrigieren. Wenn zu viele Fehler in einem Speicherblock auftreten, knnen diese jedoch nicht
mehr korrigiert werden. Ein problematischer Speicherblock muss rechtzeitig erkannt und
als unbrauchbar markiert werden. Ein NAND-Speicher kann einige solcher Bad Blocks
haben, wodurch sich seine Speicherkapazitt leicht reduziert.
Eine Erhhung der Speicherdichte ist mglich, indem verschiedene Ladungsmengen
auf das Floating-Gate gespeichert werden. Je nach Ladung verschiebt sich die Schwellenspannung des Speichertransistors und kann durch den Leseverstrker unterschieden
werden. Aktuell werden zwei bis vier Bit auf einem Transistor gespeichert, was die
Unterscheidung von bis zu 16 verschiedenen elektrischen Ladungen erfordert. Diese
Technik wird nur fr NAND-Speicher eingesetzt und allgemein als Multi-Level-Cell
(MLC) bezeichnet; bei Speicherung von 3 oder 4Bit auch als Triple- oder Quad-LevelCell (TLC, QLC). Die mit diesen Techniken verbundene hhere Fehlerwahrscheinlichkeit
erfordert einen Controller mit leistungsfhiger Fehlerkorrektur.
327
11.2Speichertechnologien
Einige dieser Techniken sind bereits im praktischen Einsatz, allerdings sind ihre Marktanteile noch recht klein. Es ist gegenwrtig nicht absehbar, welche der neuen Techniken
zu einer Konkurrenz von EEPROMs werden oder diese sogar ersetzen knnen. Das Prinzip einiger innovativer Speichertechniken wird in diesem Unterkapitel vorgestellt.
Fr die Speicherung wird ein Material gesucht, welches
zwei verschiedene Zustnde hat, die sich in ihren elektrischen Eigenschaften
unterscheiden,
einen einfachen Wechsel zwischen diesen Zustnden ermglicht,
beide Zustnde stabil ber Jahre hinweg behlt,
sehr oft zwischen diesen Zustnden wechseln kann, also mindestens hunderttausend,
mglichst eine Milliarde Mal,
platzsparend und kostengnstig zu einem CMOS-Prozess ergnzt werden kann.
Die vorgeschlagenen Speichertechniken nutzen jeweils andere Materialien zur Datenspeicherung. Die folgende bersicht nennt aktuell verwendete Materialien fr die
Speichertechniken.
FRAM
FRAM, also Ferroelectric RAM, verwendet einen Kondensator mit einem ferroelektrischen Dielektrikum. Dieses Material hat eine Kristallstruktur, welche zwei stabile
Zustnde mit unterschiedlichem elektrischen Feld aufweist. Fr das Material Blei-Zirkonat-Titanat (PZT) ist die Struktur in Abb.11.10 dargestellt. In der Mitte der Kristallstruktur aus Blei (Pb) und Sauerstoff (O) ist ein Atom aus Zirconium oder Titan, welches
sich in der unteren oder oberen Position der kubischen Struktur befinden kann. Durch
ein elektrisches Feld lsst sich dieses zentrale Atom verschieben und so eine Information
speichern.
MRAM
MRAM, also Magnetoresistive RAM, speichert Informationen in einer ferromagnetischen Schicht. Diese befindet sich getrennt durch ein dnnes Dielektrikum aus
Negative Polarisation
Logischer Zustand: 1'
Positive Polarisation
Logischer Zustand: 0'
Ti/Zr
O
Pb
328
11Speicher
Strom
ferromagnetisch weich
Tunnelbarriere (Al2 O3 )
ferromagnetisch hart
Parallele Magnetisierung
Logischer Zustand: 0'
Antiparallele Magnetisierung
Logischer Zustand: 1'
Abb.11.12 Speicherprinzip
eines Phase-Change-RAM
Elektrode
Halbleiterlegierung
Kristalline Struktur
Logischer Zustand: 0'
Amorphe Struktur
Logischer Zustand: 1'
329
Elektroden
Metalloxid
Horizontalleitung
Vertikalleitung
11.3.1 SRAM
In fast jedem greren digitalen Chip befinden sich SRAM-Speicherblcke. Ein SRAM
ist mit der normalen CMOS-Fertigungstechnik herzustellen und erfordert daher keinen
zustzlichen Fertigungsaufwand. Eingesetzt werden SRAM-Speicherblcke beispielsweise als interner Speicher einer CPU, fr die Zwischenspeicherung von Audio- und
Videodaten oder bei der Zwischenspeicherung von Netzwerkdaten.
330
11Speicher
Die Ansteuerung eines SRAMs erfolgt durch Adresse, Datenleitungen und Steuerleitungen. Oft sind Flip-Flops an Eingngen und Ausgngen integriert, so dass auch ein
Takteingang vorhanden ist.
Die Adressleitungen entsprechen der Anzahl an Speicherworten. Ein Speicher mit 2n
Adressen bentigt n Adressleitungen, die parallel anliegen. So hat ein Speicher mit
1024 Speicherworten einen Adressbus mit 10 Leitungen, denn 210=1024.
Die Datenleitungen entsprechen der Wortbreite der Speicherworte. Ein Speicher fr
16-Bit-Worte hat Datenleitungen mit 16 Stellen. Dateneingang und Datenausgang sind
getrennte Leitungen. Bidirektionale Leitungen sind bei Embedded Memory nicht ntig,
da die Anzahl der Verbindungsleitungen innerhalb eines Chips kaum begrenzt ist.
Als Steuerleitung ist eine Schreibsteuerung erforderlich, die angibt, ob die Daten am Eingang in den Speicher geschrieben werden sollen. Optional ist ein Enable-Signal mglich,
mit dem das SRAM zur Verringerung der Verlustleistung inaktiv geschaltet werden kann.
Ein Speicher fr 1024 Worte der Wortbreite 16bit hat damit die in Abb.11.14 dargestellten Eingangs- und Ausgangssignale. Anstelle eines besonderen Symbols wird ein Block
mit der Angabe der Speichergre verwendet.
Embedded-SRAM werden in der Schaltungsentwicklung als Bibliothekselement
bereitgestellt, hnlich wie die Logikgatter oder Flip-Flops. Je nach Technologie sind
bestimmte Speichergren vorgegeben oder knnen, in gewissen Grenzen, frei mit
einem Generator erzeugt werden.
Ein Embedded-SRAM kann auch mehr als ein Speicher-Interface haben. Hufig werden Dual-Port-Speicher eingesetzt, die zwei unabhngige Zugriffe untersttzen. Beide
Anschlsse knnen verschiedene Takteingnge besitzen und somit auch Daten aus einem
Taktbereich in einen anderen Taktbereich berfhren. Durch die Adressierung muss
sichergestellt werden, dass keine Konflikte durch gleichzeitigen Schreibzugriff auf die
gleiche Speicherstelle auftreten.
Die Anschlsse haben jeweils eigene Adresseingnge. Als Datenleitungen sind entweder fr beide Anschlsse Dateneingang und -ausgang vorhanden oder ein Anschluss ist
ein Eingang, der andere Anschluss ein Ausgang. Auch mehr als zwei Anschlsse sind
prinzipiell fr ein Embedded-SRAM mglich, werden aber selten verwendet.
Als Anwendungsbeispiel soll ein Audiosignal mit einem Halleffekt digital verfremdet
werden. Dazu wird das Signal verzgert und mit reduziertem Pegel zum Eingangssignal
addiert. Fr die Verzgerung kann ein SRAM eingesetzt werden, in das permanent die aktuellen Signalwerte gespeichert und von anderer Adresse frhere Signalwerte gelesen werden.
Abb.11.14 Eingangs- und
Ausgangssignale eines
Embedded-SRAM
ADDR(9:0)
DIN(15:0)
WR
CLK
SRAM
1024x16
DOUT(15:0)
331
11.3.2 DRAM
Ein DRAM bietet eine deutlich hhere Speicherkapazitt als SRAM, erfordert jedoch
einen speziellen CMOS-Prozess. Embedded-DRAM wird in der Praxis eingesetzt, wenn
groe Datenmengen gespeichert werden sollen. Durch eine Kombination von Speicher
und Signalverarbeitung sind sehr kompakte Systeme mglich.
Embedded-DRAM lohnt sich meist nur in Einzelfllen. Sehr groe Datenmengen
bersteigen die Speicherkapazitt und erfordern mehrere externe Speicherchips. Bei
kleineren bis mittleren Datenmengen wird Embedded-SRAM verwendet. Dies erfordert
zwar mehr Chipflche, ist aber kostengnstiger, da kein spezieller CMOS-Prozess verwendet werden muss.
Ein Beispiel ist der Grafik-Prozessor SM768 von Silicon Motions mit 256MByte
Embedded-DRAM. Er erzeugt eine Grafik fr einen Monitor und kann direkt an ein LCDPanel angeschlossen werden. Der Baustein wird ber USB3.0 angesteuert, ohne dass eine
Grafikkarte ntig ist. Auch komprimierte Videodaten knnen decodiert werden. Dadurch
dass sich Speicher und Signalverarbeitung auf einem einzigen Baustein befinden, ermglicht dieser einzelne Chip den kostengnstigen Aufbau eines intelligenten Monitors.
11.3.3 ROM
Festwertspeicher knnen, genau wie SRAMs, mit der normalen CMOS-Fertigungstechnik hergestellt werden. Damit eignen sie sich, wenn in einer Schaltung vorab festgelegte
Informationen abgespeichert werden sollen. Eingesetzt werden ROMs beispielsweise fr
den Boot-Code einer CPU, also die fest vorgegebenen Anweisungen beim Starten eines
Rechnersystems.
Ein weiteres Einsatzgebiet fr ROMs ist die Verwendung als Tabelle fr arithmetische Operationen. Als Beispiel hierfr nehmen wir an, dass in einer Digitalschaltung die
Wurzel von einer Dualzahl mit der Wortbreite 10bit bentigt wird. Der Ausgabewert
soll auf ganze Zahlen gerundet werden. Die Ergebnisse dieser Rechenoperation knnen
ADDR(9:0)
ROM
1024x6
ADDR
(in hex)
Zahlenwert
Wurzel
000
001
002
003
...
123
...
3FF
0
1
2
3
...
291
...
1023
0
1
1,41
1,73
...
17,06
...
31,98
DOUT(5:0)
Wurzel
DOUT
gerundet (in hex)
0
1
1
2
...
17
...
32
00
01
01
02
...
11
...
20
332
11Speicher
vorab berechnet und in einem ROM gespeichert werden. Die Eingangswerte betragen
0 bis 1023, die Wurzel hiervon ist 0 bis 31,98, gerundet 0 bis 32. Fr den Ausgabewert
sind also 6Bit erforderlich. Das ROM umfasst 1024 Worte mit jeweils 6bit Wortbreite.
Der Eingangswert wird als Adresse an das ROM angelegt. Am Ausgang wird das Ergebnis der Wurzelberechnung anzeigt. Die Schnittstelle des ROMs und ein Ausschnitt der
Wertetabelle sind in Abb.11.15 gezeigt.
11.3.4 NVRAM
Ein nichtflchtiger Speicher (NVRAM) erfordert, genau wie ein DRAM, einen speziellen CMOS-Prozess. Anders als beim DRAM gibt es jedoch keine Alternative, wenn in
einem Chip Daten auch ohne Versorgungsspannung gespeichert werden sollen. In diesem
Fall muss ein CMOS-Prozess mit Erweiterung fr NVRAM eingesetzt werden.
Ein hufig eingesetztes Anwendungsbeispiel sind Mikrocontroller. Auf einem einzigen
Chip sind eine CPU, Peripherie und der Programmspeicher integriert. Damit der Mikrocontroller durch die Anwender programmiert werden kann, ist der Programmspeicher als
NVRAM implementiert. Whrend der Programmentwicklung kann der Programmspeicher
immer wieder umprogrammiert werden. Ebenfalls gibt es FPGAs, die programmierbare
Logik und die Speicherung der Konfiguration in einem NVRAM kombinieren.
Alternativ kann das System auch auf zwei Chips aufgeteilt werden. Ein Chip in Standard-CMOS enthlt den Mikrocontroller oder das FPGA und ein zweiter Speicher-Chip
enthlt den Programmspeicher oder die Konfiguration.
Ein Anwendungsbeispiel ist der ATmega328-Controller der Firma Atmel, welcher auf
der populren Mikrocontroller-Platine Arduino Uno verwendet wird. Der ATmega328
enthlt zwei Blcke NVRAM.
Ein Programmspeicher von 32kByte.
Ein Datenspeicher von 1kByte, der vom Programm gelesen und beschrieben werden
kann.
333
11.4.1.1Systemaufbau
Eine Aufteilung des Systems unter Nutzung diskreter Speicherbausteine hat mehrere
Vorteile.
Die Kapazitt externer Speicherbausteine ist hher, als bei gemeinsamer Nutzung der
Chipflche fr Speicher und Signalverarbeitung.
Hhere Flexibilitt des Systems, weil je nach Bedarf mehr oder weniger externer
Speicher angebunden werden kann.
Im oben genannten PC-System knnen DRAM-Riegel, je nach Bedarf eingesetzt
werden.
Einige Smartphones werden mit unterschiedlicher Speicherkapazitt verkauft. Auf
den Gerten sind dann unterschiedliche NVRAMs verbaut.
Externe Speicherbausteine sind gut verfgbar. Sie knnen, auch in kleinen Stckzahlen, kurz nach Markteinfhrung bei Distributoren gekauft werden. Dies ist nicht der
Fall bei Chips mit Embedded-DRAM, die nur von wenigen Chipherstellern angeboten
werden und hufig Grokunden vorbehalten sind. Auch fr Embedded-NVRAM ist
die Anzahl an Chipherstellern geringer als fr Standard-CMOS-Speichertechnologien.
Neue Speichertechnologien werden zunchst fr den Massenmarkt der diskreten
Speicherbausteine angeboten. Meist sind sie nur mit einer signifikanten Verzgerung
von einem Jahr oder mehr als Embedded-Speicher verfgbar.
Die Kosten fr einen Chip mit Standard-CMOS-Technologie sind geringer als fr
einen Chip, der einen speziellen Herstellungsprozess mit Embedded-Speicher-Untersttzung bentigt. Die Einsparung ist in der Regel so hoch, dass sie auch die Kosten
fr die diskreten Bauelemente deckt.
Der Einsatz von diskreten Speicherbausteinen kann jedoch auch Nachteile haben.
Je mehr Bauelemente ein System hat, umso grer ist der Platzbedarf. Dies ist insbesondere fr mobile Gerte ungnstig.
Ein Speicherzugriff auf externe Bauelemente hat eine geringere Bandbreite, da die
Anzahl der Leitungen begrenzt und die Geschwindigkeit externer Signalleitungen
geringer ist. Auerdem ist die Verlustleistung hher, da grere Leitungskapazitten
umgeladen werden mssen.
334
11Speicher
Es muss sichergestellt werden, dass die verwendeten Speicherbausteine fr die Produktlebensdauer verfgbar sind. Im PC-Bereich werden Bauteile oft nach wenigen
Jahren durch leistungsfhigere Neuentwicklungen ersetzt. Fr einen PKW mssen
hingegen jahrzehntelang Ersatzteile verfgbar sein.
11.4.1.2Aktuelle Speicherbausteine
Fr flchtige Datenspeicherung werden in der Praxis am hufigsten DRAM-Speicherbausteine eingesetzt. Der Grund dafr ist die hhere Speicherdichte eines DRAM, also
Bits pro Siliziumflche, verglichen mit einem SRAM. An diesen Marktverhltnissen
wird sich auch in Zukunft wenig ndern.
Fr nicht-flchtige Datenspeicherung werden hauptschlich EEPROMs in der Ausfhrung als NAND-Flash eingesetzt. Die NOR-Flash-Technologie hat den Nachteil
der geringeren Speicherkapazitt und darum nur einen kleinen Marktanteil. Innovative
Speichertechnologien sind noch nicht so weit entwickelt, dass sie den Marktanteil von
NAND-Flash-EEPROMs erreichen. Dies kann sich jedoch in den nchsten Jahren ndern.
Im Folgenden sind exemplarisch vier Speicherbausteine beschrieben, die in der Praxis weite Verbreitung haben oder exemplarisch fr hnliche Bausteine sind. Dazu wurden ein SRAM, ein DRAM, ein EEPROM und ein innovatives NVRAM ausgewhlt. Sie
werden in kompatibler Form von mehreren Herstellern angeboten und bieten dadurch
hhere Sicherheit der Verfgbarkeit.
Die Entwicklung neuer Speicherbauelemente baut blicherweise auf den Vorgngern
auf. Das heit, die Eigenschaften, die in den folgenden Abschnitten beschrieben sind,
finden sich in hnlicher Weise in den Vorgngern und sind Grundlage fr die Spezifikation der nchsten Speichertechnologie.
11.4.2 QDR-II-SRAM
11.4.2.1bersicht
QDR bezeichnet eine Familie von Dual-Port-SRAMs, die also zwei Anschlsse haben.
Ein Anschluss ist ein Schreib-Interface, der andere ein Lese-Interface. Beide Anschlsse
bertragen Daten bei steigender und fallender Taktflanke (Double-Data-Rate), so dass als
Bezeichnung Quad-Data-Rate (QDR) gewhlt wurde. Es gibt verschiedene Geschwindigkeitsstufen der QDR-Familie. Hier soll QDR-II betrachtet werden, mit II im Sinne
der rmischen Zahl Zwei.
Das Einsatzgebiet dieser Speicherbausteine sind insbesondere Anwendungen, die eine
sehr hohe Datenrate bentigen und bei denen Lese- und Schreiboperationen etwa gleich
hufig vorkommen. Ein Anwendungsbeispiel sind Netzwerkanwendungen, bei denen
Datenpakete zwischengespeichert werden mssen.
Die SRAMs werden mit unterschiedlichen Speichergren im Bereich von 18 bis
144Mbit und Datenwortbreiten von 9, 18 und 36bit angeboten. Ein typischer Baustein
335
ist der CY7C1514KV18 von Cypress, mit einer Speicherkapazitt von 72Mbit und
36bit Datenwortbreite. Die Taktgeschwindigkeit darf 350MHz betragen. Vergleichbare
Bausteine werden unter anderem von IDT und Renesas angeboten. Der Speicher arbeitet mit Vielfachen von 9bit, nicht 8bit, da in der Telekommunikation hufig zustzliche
Bits zur Fehlererkennung verwendet werden.
Der Speicherbaustein hat folgende Anschlsse:
Insgesamt hat das Chipgehuse 165 Pins. Der Schrgstrich (/) kennzeichnet Low-aktive
Signale.
Auffllig ist die hohe Anzahl an Taktanschlssen. Die Takte fr Lese-Interface und
Schreib-Interface sind in beiden Polaritten vorhanden. Auerdem wird der Lesetakt in
beiden Polaritten wieder aus dem Speicherbaustein ausgegeben. Die Takte sind nicht
unabhngig voneinander, sondern es handelt sich um den gleichen Takt mit unterschiedlichen Verzgerungen. Dieser Aufwand ist ntig, da bei den verwendeten hohen
Taktfrequenzen die Laufzeit der Signale auf der Platine beachtet werden muss. In der
Konfiguration mit 36bit Wortbreite sind 333MHz mglich, die einer Periodendauer von
3ns entsprechen. Aufgrund der Anwendung der Double-Data-Rate-Technik hat jedes
Datenwort nur eine Dauer von 1,5ns.
11.4.2.2Logisches Interface
Die Adressierung des SRAMs erfolgt stets abwechselnd fr Lese- und Schreib-Interface.
Abb.11.16 gibt ein Beispiel fr den Zeitablauf. Im oberen Bereich sind sechs Eingnge
des SRAMs, im unteren Bereich drei Ausgnge dargestellt. Fr das Taktinterface sind
verschiedene Konfigurationen mglich. K als primrer Takt ist stets erforderlich, die Verwendung von C und CQ ist optional. In diesem Beispiel wird kein separater Lesetakt C,
aber die Taktausgabe CQ verwendet.
Der Zeitablauf zeigt drei Lesezugriffe auf die Adressen a0 bis a2, sowie vier Schreibzugriffe auf die Adressen a4 bis a7. Die Zugriffe erfolgen immer als Burst (Sequenz)
von zwei Datenworten, das heit, pro Adresse werden immer zwei 36-Bit-Worte angesprochen. Damit sind fr die Speicherkapazitt von 72Mbit 20 Adressleitungen ntig.
336
Abb.11.16 Zeitablauf der
Ansteuerung eines QDR-IISRAMs
11Speicher
K
/K
/WPS
/RPS
a7
A a0 a4 a1 a5 a2 a6
D d40 d41 d50 d51 d60 d61 d70 d71
Q
CQ
/CQ
Zunchst wird die Leseoperation betrachtet. Die Adresse bei der steigenden Taktflanke
von K ist immer die Leseadresse. Zum Zeitpunkt wird die Adresse a0 angegeben und
durch /RPS auf 0 (Low-aktiv) ein Lesevorgang angezeigt. Der Zugriff auf das SRAM
bentigt etwas Zeit, deswegen werden die Daten nach einer Latenzzeit von (hier) zwei
Takten ausgegeben. Zum Zeitpunkt wird das erste Datenwort mit der Bezeichnung q00
ausgegeben; einen halben Takt spter bei folgt das zweite Datenwort des Burst q01.
Durch /RPS auf 0 folgen noch zwei weitere Datenzugriffe auf die Adressen a1 und a2,
die Daten folgen unmittelbar auf den ersten Burst. Danach wird /RPS zu 1 und es folgen
keine weiteren Leseoperationen.
Das Lese-Interface gibt auch CQ und /CQ als Hilfssignale fr die Datenbernahme
aus. CQ und /CQ haben ihre Taktflanken an der gleichen Position wie der Datenausgang.
Das System, welches die Daten empfngt, kann hieraus den Takt fr die Datenbernahme erzeugen.
Die Schreiboperation beginnt auch bei der steigenden Taktflanke von K, verwendet
aber die Adresse einen halben Taktzyklus spter an der steigenden Taktflanke von /K.
Die erste Schreiboperation beginnt also zum Zeitpunkt mit dem ersten Datenwort
d40 und dem Steuersignal /WPS. Dann folgt zum Zeitpunkt die Adresse a4, und das
Datenwort d41. Auf eine Adresse werden mit den Datenworten d40 und d41 also insgesamt 72Bit geschrieben. Im Diagramm werden vier Bursts von jeweils zwei Datenworten geschrieben. Danach wird /WPS zu 1 und das Schreib-Interface ist inaktiv.
brigens mssen mit einem Schreibzugriff nicht immer 72Bit geschrieben werden.
ber das Steuersignal Write-Byte-Select (in Abb.11.16 nicht dargestellt) knnen Teile
des Datenwortes ausgewhlt werden.
11.4.2.3Physikalisches Interface
Zustzlich zur logischen Ansteuerung sind Zeitanforderungen und Spannungspegel zu
beachten. Bei den Zeitanforderungen sind dies Setup- und Hold-Zeiten der Eingangssignale, sowie Vorgaben zum Duty Cycle der Takte und deren Zeitversatz.
337
Wird das oben genannte SRAM mit 333MHz Takt betrieben, betrgt die Zykluszeit
3ns und fr Daten und Adresse steht die halbe Zykluszeit von 1,5ns zur Verfgung. Die
Zeitvorgaben sind in diesem Fall:
Setup- und Hold-Zeit jeweils 0,3ns
Duty Cycle des Takts zwischen 40% und 60%
Abstand der steigenden Flanken von K und /K mindestens 1,35ns, also 45% der halben Zykluszeit.
Initialisierungszeit, also Zeit zwischen Anlegen der Spannungsversorgung und erstem
Datenzugriff, 1ms
Als Spannungspegel sind drei verschiedene Versorgungsspannungen definiert, und zwar
Core-Spannung von 1,8V fr die komplette interne Logik
I/O-Spannung von 1,5V fr die Ein- und Ausgangspins
Referenzspannung von 0,75V fr die Erkennung der Datenpegel
Die Logikpegel der Signaleingnge sind in Relation zur Referenzspannung definiert. Der
Low-Pegel muss 0,1V kleiner, der High-Pegel 0,1V grer als die Referenzspannung
sein. Damit reicht also ein Spannungshub von 0,2V aus.
Darber hinaus gibt es weitere Vorgaben, unter anderem die maximal erlaubten Spannungen, die Stromaufnahme und weiteren Zeitanforderungen. Diese sind in den Datenblttern der QDR-II-SRAMs angegeben.
11.4.3 DDR3-SDRAM
11.4.3.1bersicht
DRAM-Speicherbausteine haben eine deutlich hhere Speicherkapazitt als SRAMs
und sind damit kostengnstiger. Allerdings ist die mgliche Datenrate geringer und die
Ansteuerung deutlich komplexer, da nach jedem Lesevorgang die Information in den
Speicherzellen wiederhergestellt werden muss (vgl. Abschn.11.2.2). Auerdem ist ein
regelmiger Refresh erforderlich.
DDR3-SDRAM ist eine moderne Familie von DRAM-Speichern mit einer Kapazitt
von bis zu 4Gbit, also rund 30mal so viel wie ein QDR-II-SRAM. Das S in SDRAM
steht fr synchron und gibt an, dass der Baustein mit einem Takt arbeitet. In diesem
Abschnitt wird exemplarisch der Baustein MT41J512M8 von Micron Technology
betrachtet, ein 4Gbit DDR3-DRAM mit einer Datenwortbreite von 8bit. Vergleichbare
Bausteine werden unter anderem von Samsung und Hynix angeboten. Verwendet wird
der Baustein beispielsweise in DRAM-Modulen fr PCs.
338
11Speicher
Der Baustein wird mit verschiedenen Geschwindigkeiten angeboten. Die Taktfrequenz darf knapp ber 1GHz betragen. Es gibt nur ein Speicherinterface mit bidirektionalen Datenleitungen. Die wesentlichen Anschlsse sind:
A, 16Bit, Adresse
BA, 3Bit, Bankadresse, whlt eine von acht internen Speicherbnken aus
DQ, 8Bit, Datenbus, bidirektional als Dateneingang und Datenausgang
DQS und /DQS, Referenzsignal fr das Ausgangstiming
/RAS, /CAS, /WE, Steuersignale fr Lese- und Schreiboperationen
CK und /CK, Takt in positiver und negativer Polaritt
VREF_DQ, Referenzspannung fr Datenleitungen
VREF_CA, Referenzspannung fr Steuerleitungen
weitere Pins fr Steuerfunktionen, Stromversorgung und Fertigungstest
Das Gehuse hat 78 Anschlsse, also weniger als die Hlfte, verglichen mit dem
QDR-II-SRAM.
11.4.3.2Logisches Interface
Das DRAM muss beim Start zunchst initialisiert werden. Fr die Ansteuerung muss
dann beim Lesen, Schreiben und Refresh der innere Aufbau beachtet werden. Das
Arbeitsprinzip wird am besten deutlich, wenn der Lesevorgang betrachtet wird.
Beim Lesen wird eine komplette Zeile in den Schreib/Lese-Verstrker geladen. Dabei
wird die Ladung in den Speicherzellen gelscht und muss wieder zurckgeschrieben
werden. Dieses Lesen und Zurckschreiben bentigt mehrere Taktzyklen. Whrend dieser Zeit ist das DRAM blockiert. Darum sind in einem DRAM-Chip acht unabhngige
Speicherbnke verfgbar. Whrend eine Bank noch durch Zurckschreiben von Daten
belegt ist, kann bereits auf eine andere Bank zugegriffen werden.
Der Lesezugriff auf den Speicher erfolgt in drei Schritten.
Activate: Hierdurch wird eine Zeile in den Leseverstrker geladen.
Read: Aus der Zeile werden Datenworte gelesen. Mehrere Leseoperationen fr die
aktivierte Zeile sind mglich und jede Leseoperation liest einen Burst von vier oder
acht Worten.
Precharge: Der Zugriff auf die Zeile wird beendet und die Daten wieder in die Speicherzellen zurckgeschrieben.
Die Schritte werden durch die Steuersignale /RAS, /CAS und /WE aufgerufen. Zwischen
den Schritten gibt es Wartezeiten von mehreren Takten, die eingehalten werden mssen.
Nach Activate knnen ebenfalls Schreiboperationen in die Zeile erfolgen, auch abwechselnd mit Leseoperationen.
Abb.11.17 zeigt den Zeitablauf fr zwei Leseoperationen auf zwei verschiedene
Bnke. Als Burst sind 8 Worte gewhlt. Die invertierten Signale /CK und /DQS sind zur
339
CK
cmd
act
nop
nop
nop
act
rdp
nop
nop
nop
rdp
nop
nop
nop
nop
nop
nop
r0
r1
c0
c1
BA
DQ
0 1 2 3 4 5 6 7 8 9 a b c d e f
DQS
besseren bersicht weggelassen. Die Steuersignale /RAS, /CAS, /WE sind zum Kommandowort cmd (Command) zusammengefasst. Die eingezeichneten Zeitpunkte haben
folgende Bedeutung:
1. Aktivierung der Zeile r0 (r wie Row) in der Bank 0 mit dem Kommando act (Activate). Bevor die Zeile verwendet werden kann, muss mehrere Takte gewartet werden.
2. Aktivierung der Zeile r1 in der Bank 1.
3. Lesezugriff auf Spalte c0 (c wie Column) in der Bank 0. Nach Ausfhren der Leseoperation soll die Zeile durch Precharge zurckgeschrieben werden. Als Kommando
wird darum rdp (Read with Precharge) aufgerufen.
4. Lesezugriff auf Spalte c1 in der Bank 1, ebenfalls mit Precharge.
5. Nach einer Latenzzeit werden die Daten des Lesezugriffs ausgegeben. Entsprechend der Burst-Lnge werden acht Daten von 0 bis 7 ausgegeben. Als Hilfssignale
fr die Datenbernahme wird DQS ausgegeben. Die Taktflanken sind an der gleichen
Position wie der Datenausgang und das System, welches die Daten empfngt, kann
hieraus den bernahmetakt erzeugen.
6. Direkt nach dem ersten Datenburst werden die Daten des Lesezugriffs ausgegeben.
Dies sind die Daten 8 bis f.
Die Bezeichnung nop (No Operation) gibt an, dass kein Kommando bertragen wird.
Bitte beachten Sie, dass in Abb.11.17 die Abstnde zwischen den Kommandos etwas
verkrzt dargestellt sind. Die internen Vorgnge bentigen bestimmte Zeiten, die einer
Anzahl an Taktzyklen entsprechen. Deswegen werden mit steigender Taktfrequenz mehr
Taktzyklen fr bestimmte Ablufe bentigt.
Die maximale Taktfrequenz und die Wartezeiten werden als Kennziffern des DRAMs
angegeben und sind Ihnen vielleicht schon begegnet, wenn Sie Speicherriegel fr den PC
gekauft oder die Werte im BIOS eingeben haben. Die Bezeichnung DDR3-1866 CL13
13-13-32 bedeutet beispielsweise:
DDR3-1866: DDR3-SDRAM mit 1866Mio. Transfers je Sekunde, also einer maximalen Taktfrequenz von 933MHz.
340
11Speicher
CL13 ist die Anzahl der Taktzyklen zwischen Read und Ausgabe der Daten. CL steht
fr Column Access Latency oder CAS Latency.
Die folgenden drei Zahlen bezeichnen weitere Zeiten
13 Taktzyklen zwischen dem Activate-Befehl einer Zeile und erstem Read-Zugriff
13 Taktzyklen fr den Precharge-Vorgang
32 Taktzyklen zwischen zwei Activate-Befehlen auf dieselbe Bank
Der Zugriff auf ein DRAM erfordert also das Beachten der internen Speicherorganisation. Eine hohe Datenrate kann erreicht werden, wenn mehrere Daten aus der gleichen
Zeile gelesen werden (nur ein Activate-Befehl ntig) und die Zugriffe ansonsten auf verschiedene Speicherbnke verteilt werden (Wartezeit zwischen Activate-Befehlen auf dieselbe Bank).
Diese Zugriffsmuster werden beispielsweise von den CPUs in einem PC bercksichtigt. Der Speichercontroller einer CPU liest grere Datenblcke aus dem DRAM und
speichert sie auf einem internen SRAM, dem sogenannten Cache. Die Daten sind so im
DRAM abgelegt, dass ein Zugriff mglichst effizient erfolgen kann.
11.4.3.3Physikalisches Interface
Das physikalische Interface des DDR3-SDRAMs nutzt hnliche Prinzipien wie das
QDR-II-SRAM. Da noch hhere Frequenzen auftreten knnen, sind die Anforderungen
entsprechend hher.
Fr ein DDR3-1866-SDRAM betrgt die Taktfrequenz 933MHz Takt und somit ist
die Zykluszeit 1,07ns. Der Duty Cycle des Takts muss zwischen 47% und 53% liegen.
Anstelle fester Setup- und Hold-Zeit fr die Signaleingnge werden Grenzen fr den
Zeitverlauf der Spannung definiert. Darin ist auch festgelegt, wie stark ein berschwingen der Signale erfolgen darf. Die Adress- und Steuerleitungen werden nur einmal pro
Taktzyklus ausgewertet, whrend Datenleitungen zweimal pro Taktzyklus gltig sind.
Daher wird zwischen diesen Signalen unterschieden.
Die Spannungsversorgung fr Core und I/O betrgt 1,5V, die Referenzspannung zur
Erkennung der Datenpegel ist 0,75V.
Spezifische Angaben zum physikalischen und logischen Interface finden Sie im
Datenblatt eines DDR3-SDRAMs, beispielsweise dem MT41J512M8 von Micron.
11.4.4 EEPROM
11.4.4.1bersicht
Im Bereich der EEPROMs gibt es eine groe Vielfalt an unterschiedlichen diskreten
Speicherbausteinen. Es gibt kleine, mittlere und groe Speichergren, sowie langsamen
und schnellen Speicherzugriff.
341
Kleine Speichergren im Bereich von einigen kByte, werden beispielsweise verwendet, um Gerteeinstellungen zu speichern, wie Netzwerkname, WLAN-Passwort und
IP-Adresse eines Netzwerkgerts.
Mittlere Speichergren, im Bereich von MByte, werden beispielsweise zum Speichern von Messdaten oder von Programmcode fr grere Prozessoren verwendet.
Groe Speichergren, im Bereich von GByte, werden als Massenspeicher verwendet, beispielsweise im Smartphone oder als Solid-State-Disk (SSD).
Bei kleineren Speichergren kann teilweise jedes Datenwort einzeln gelscht werden.
Mittlere und groe Speichergren werden als Flash-EEPROM implementiert.
Der Speicherzugriff kann seriell ber eine Datenleitung oder parallel ber mehrere
Leitungen erfolgen.
Der serielle Zugriff ist langsamer, aber ausreichend, wenn nur wenige Daten bentigt
werden oder wenn die Daten einmalig gelesen und dann auf dem System zwischengespeichert werden.
Der parallele Zugriff ist schneller und fr grere Datenmengen sinnvoll.
Aus den unterschiedlichen Anforderungen ergibt sich eine Vielfalt an diskreten
EEPROM Speicherbausteinen. SRAM und DRAM Bausteine werden nur eingesetzt,
wenn die Speicherkapazitt auf einem Chip nicht ausreicht. Ein EEPROM Baustein ist
jedoch bereits erforderlich, wenn nur wenige Byte nichtflchtig gespeichert werden sollen, da ein Chip in Standard-CMOS-Technologie dies nicht bietet.
11.4.4.28Gbit Flash-Memory
Als ein Beispiel fr ein EEPROM mit groer Speicherkapazitt wird der Baustein
TH58NVG3S0HTA00 von Toshiba mit einer Speichergre von 8Gbit, also 1GByte
betrachtet. Es handelt sich dabei um ein NAND-Flash-EEPROM. Andere Anbieter von
NAND-Flash-EEPROMs sind beispielsweise Cypress, Micron, Samsung und Winbond.
Der Baustein ist in 4096 Blcken organisiert und jeder Block hat 64 Speicherseiten
mit jeweils 4352Bytes. Dieser Inhalt einer Seite umfasst 4096Bytes Nutzdaten sowie
256Bytes fr Speicherverwaltung und die bei der NAND-Struktur ntige Fehlerkorrektur. Ein Flash-Lschvorgang bezieht sich immer auf einen Block von 64 Seiten, also
256kByte.
Der Baustein ist darauf ausgelegt mit einem fehlerkorrigierenden Controller zusammenzuarbeiten. Das Speicherinterface arbeitet ohne Takt und hat die folgenden
Anschlsse:
342
11Speicher
Das Gehuse hat 48 Anschlsse, von denen jedoch ein grerer Teil nicht verwendet
wird. RY/BY ist ein gleichzeitig High-aktives Ready- und Low-aktives Busy-Signal.
11.4.4.3Logisches Interface
Der 8-Bit-Port IO wird gemeinsam fr Kommandos, Adressen und Daten verwendet.
Kommandos werden durch bestimmte 8-Bit-Werte bermittelt. CLE und ALE zeigen an,
um welche Information es sich jeweils handelt.
Die drei Grundoperationen des Bausteins sind Lschen eines Blocks, Schreiben von
Daten und Lesen von Daten.
Lschen eines Blocks
Abb.11.18 zeigt den Zeitablauf beim Lschen eines EEPROM-Blocks.
1. Der Lschvorgang wird durch ein spezielles Kommando gestartet. Dazu liegt der Wert
6016 auf den acht Datenleitungen und CLE zeigt an, dass es sich bei dieser Information um ein Kommando handelt. Die Datenbernahme erfolgt durch die steigende
Flanke an /WE.
2. Die Adresse des zu lschenden Blocks wird auf der Datenleitung bertragen. Da die
Datenleitung kleiner als die Adresswortbreite ist, wird die Adresse in drei Teile A-0,
A-1, A-2 aufgeteilt.
3. Das Kommando D016 lst den Lschvorgang aus. Durch RY/BY wird angezeigt, dass
der Baustein beschftigt ist. Das Lschen eines Blocks bentigt etwa 2,5 bis 5ms.
4. Nach Ende des Lschvorgangs muss berprft werden, ob das Lschen erfolgreich
war. Dazu wird das Kommando 7016 angegeben.
5. Der Baustein antwortet mit einem Statuswort (sts). Fr diese Leseoperation wird /RE
angesteuert.
CLE
/CE
/WE
ALE
/RE
IO
RY/BY
...
...
...
...
...
6016 A-0 A-1 A-2
D016
...
...
7016
sts
343
CLE
/CE
/WE
ALE
/RE
IO
RY/BY
8016 A-0
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
A-4
D016 ...
...
...
D-x
1016
...
...
7016
sts
344
11Speicher
11.4.4.4Physikalisches Interface
Die Datenrate bei Schreib- und Lese-Zugriffen ist deutlich geringer als bei SRAM und
DRAM, denn das EEPROM ist als Massenspeicher und nicht als schneller Arbeitsspeicher vorgesehen.
Die mgliche Datenrate beim Schreiben und Lesen von Daten betrgt 40MHz. Hinzu
kommen die oben genannten Zeiten fr den Zugriff auf die Speichermatrix.
Die Spannungsversorgung des Bausteins betrgt 3,3V. Die Daten werden durch
Spannungspegel dargestellt. Der Low-Pegel wird bis 0,66V erkannt, der High-Pegel ab
2,64V, dazwischen befindet sich der bergangsbereich, in dem keine eindeutige Zuordnung der Spannung zu einem logischen Wert mglich ist.
Spezifische Angaben zum physikalischen und logischen Interface finden Sie im
Datenblatt.
11.5Speichersysteme
Abb.11.20 Serielles
Schreiben in ein FRAM mit
SPI-Protokoll
345
/CS
SCK
x x x 12 .. 2 1 0 7 6 .. 2 1 0
SI
SO
Kommando
Adresse
Daten
11.4.5.2Logisches Interface
Die Kommunikation mit dem Baustein erfolgt ber das Serial Peripheral Interface (SPI).
Bei diesem Protokoll sind getrennte Leitungen fr Dateneingang und -ausgang vorhanden, das heit die Datenleitung wird nicht bidirektional betrieben. Ein Zugriff auf den
Baustein erfolgt ber Kommandos. Bei Schreib- und Leseoperationen folgt nach dem
Kommando eine Adresse und bei einem Schreibzugriff die Daten. Bei einem Lesezugriff
antwortet der Baustein nach der Adressbertragung mit den angeforderten Daten.
Abb.11.20 zeigt den Zeitablauf eines Schreibvorgangs. /CS aktiviert zunchst den
Baustein. Dann werden insgesamt 32Bits durch die steigende Flanke von SCK bertragen, die Most Significant Bits (MSB) jeweils zuerst. Die ersten 8Bit sind das Schreibkommando 0216. Dann folgt die Adresse mit 16Bit. Da fr 8kByte nur 13Bit bentigt
werden, sind die obersten drei Adressbits unbelegt. Schlielich werden die Daten bertragen und durch /CS die bertragung beendet.
Es ist auch mglich, mehrere Bytes an Daten zu bertragen, die dann in aufeinander
folgende Adressen geschrieben werden (nicht in Abb.11.20 dargestellt). Damit ist keine
wiederholte bertragung von Kommando und Adresse ntig.
11.4.5.3Physikalisches Interface
Die maximale Taktfrequenz fr SCK betrgt 20MHz. Wartezeiten fr die Programmierung
sind nicht erforderlich. Die Spannungsversorgung des Bausteins betrgt 3,3bis 5V. Bei
3,3Spannungsversorgung wird der Low-Pegel bis 0,66V, der High-Pegel ab 2,64V erkannt.
11.5 Speichersysteme
Ein Speichersystem ist die Kombination aus mehreren Speichern. Dabei sind verschiedene Konfigurationen mglich. Mehrere gleiche Speicher knnen kombiniert werden,
um die Speicherkapazitt zu erhhen. Verschiedene Speicher knnen kombiniert werden, wenn unterschiedliche Eigenschaften bentigt werden. Dies kann SRAM- und
DRAM-Speicher oder flchtiger und nicht-flchtiger Speicher sein. Auerdem knnen
die Speicher sowohl Embedded Speicher auf der Integrierten Schaltung als auch diskrete
Speicherbausteine auerhalb sein.
346
11Speicher
11.5.1 Adressdecodierung
Oft ist es gewnscht, dass die Speicher gemeinsam von einer zentralen Steuerlogik, zum
Beispiel der CPU eines Rechnersystems, angesprochen werden sollen. Die Unterscheidung der Speicher erfolgt dann anhand der Speicheradresse. Der Adressraum enthlt
Adressbereiche fr die unterschiedlichen Speicher. Je nach Gre von Adressraum und
Speicherkomponenten knnen Adressbereiche auch unbelegt sein.
Der prinzipielle Aufbau eines Speichersystems ist in Abb.11.21 dargestellt. Die zentrale Steuerlogik gibt eine Adresse sowie Steuersignale an das Speichersystem. Je nach
Speichermodul knnen unterschiedliche Steuersignale sinnvoll und erforderlich sein.
Hier sind dargestellt:
CS fr Chip Select: Ein Zugriff findet statt
WR fr Write: Ein Schreibzugriff findet statt
RD fr Read: Ein Lesezugriff findet statt
Datenbus
Adressbus
...
...
Ein Adressdecoder ermittelt dann aus der Adresse, welches Speichermodul adressiert ist
und gibt an dieses Modul ein individuelles Chip-Select-Signal weiter. ber den Datenbus gibt die Steuerlogik entweder Daten an das Speichermodul oder es werden Daten
empfangen.
Aus der Organisation des Adressraums ergibt sich die Adressierung. Zur Verdeutlichung wird das Speichersystem eines fiktiven Rechnersystems in Abb.11.22 dargestellt.
Die Adresse hat eine Wortbreite von 16bit und kann damit 64kByte adressieren. Speicherzugriffe erfolgen jeweils auf ein Byte. Es sind drei Speicher vorhanden, und zwar ein
ROM von 4kByte fr den Boot-Code, ein SRAM von 8kByte als Datenspeicher und ein
EEPROM von 32kByte fr den Programmcode. Der Adressraum ist links in Abb.11.22
angegeben. Das Prfix 0x kennzeichnet hexadezimale Zahlen. Die Adressbelegung ist
wie folgt:
Speicher 2
WR
RD
CS
Speicher 1
WR
RD
Adressdecoder
CS
Speicher 0
WR
WR RD
RD
CS
Zentrale Steuerlogik
CS
11.5Speichersysteme
Adressbus
0xffff
A(15:0)
EEPROM
CS
EEPROM
Abb.11.22 Adressraum
und -decoder fr ein
Speichersystem mit drei
Speichermodulen
347
A(15)
SRAM
CS
0x8000
0x5fff
SRAM
ROM
A(14:0)
0x4000
0x0fff
0x0000
ROM
CS
A(12:0)
A(15)
A(14)
A(13)
A(11:0)
A(15)
A(14)
A(13)
A(12)
&
&
Zentrale Steuerlogik
Die Steuerlogik kann also beispielsweise durch Angabe von Adresse 0x0123 auf das
ROM sowie durch Adresse 0x4567 auf das SRAM zugreifen.
Auf der rechten Seite von Abb.11.22 ist die Logik des Adressdecoders abgebildet.
Die 16 Adressleitungen werden teils fr die Selektion des Speichermoduls verwendet,
teils gehen sie in das Speichermodul. Ein Chip-Select-Signal der Steuerlogik wird hier
nicht verwendet; die Speicher werden ber Read und Write angesteuert.
Die Logik des Adressdecoders und die Wortbreite der Adressen ergeben sich aus
Speichergre und Position im Adressraum.
Das EEPROM bentigt fr 32kByte Speichergre eine Adresse der Wortbreite
15bit. Das obersteBit der Adresse selektiert den Speicher, wenn die Adresse grer
als 0x8000 ist. Als Chip-Select-Signal des EEPROMs kann direkt Adressleitung 15
verwendet werden.
Das SRAM bentigt fr 8kByte Speichergre eine Adresse der Wortbreite 13bit.
Die vorderen drei Bit der Adresse selektieren den Speicher fr Adressen zwischen
0x4000 und 0x5fff. In diesem Adressbereich sind A(15) bis A(13) gleich 0102. Das
Chip-Select-Signal wird durch ein UND-Gatter mit drei Eingngen, zwei davon
negiert, erzeugt.
Das ROM bentigt fr 4kByte Speichergre eine Adresse der Wortbreite 12bit. Die
vorderen vier Bit der Adresse selektieren den Speicher fr Adressen zwischen 0x0000
und 0x1fff. In diesem Adressbereich sind A(15) bis A(12) gleich 0. Das Chip-SelectSignal wird durch ein UND-Gatter mit vier negierten Eingngen erzeugt.
348
11Speicher
&
...
...
&
...
...
Lesebus,
SRAM
...
&
...
&
&
...
...
D_OUT
...
D_IN
EEPROM
&
CS_EEPROM
D_IN
SRAM
D_OUT
CS_SRAM
ROM
D_OUT
&
Schreibbus
1
D_OUT
&
...
Lesebus,
ROM
...
EEPROM
...
Lesebus,
D(7:0)
...
&
...
Datenbusse
jeweils 8 Bit
CS_ROM
1
RD
Zentrale Steuerlogik
11.5Speichersysteme
349
...
...
Datenbus
auf Platine
(8 Bit)
D_IN(7:0)
...
D_OUT(7:0)
...
...
...
WR
...
D_IN(7:0)
D_OUT(7:0)
&
...
CS
RD
...
...
Diskrete
Bauelemente
&
RAM_1
RAM_0
CS
RD
Zentrale Steuerlogik
D_IN(7:0)
D_OUT(7:0)
350
11Speicher
Die Datenleitungen werden in den Bauelementen gleichzeitig als Ausgang und Dateneingang fr die interne Logik genutzt. Eine Steuerlogik (hier nicht dargestellt) entscheidet, ob der Dateneingang verwendet wird.
11.6 bungsaufgaben
Haben Sie den Inhalt des Kapitels verstanden? Prfen Sie sich mit den Aufgaben und
Fragen am Kapitelende. Die Lsungen und Antworten finden Sie am Ende des Buches.
Bei den Auswahlfragen ist immer genau eine Antwort korrekt.
11.6bungsaufgaben
Aufgabe 11.1
Welche der folgenden Technologien ist ein flchtiger Speicher?
a) FRAM
b) EPROM
c) Flash
d) SRAM
e) EEPROM
Aufgabe 11.2
Wie viele Transistoren hat eine normale SRAM-Zelle?
a) 9
b) 2
c) 1
d) 5
e) 6
Aufgabe 11.3
Wie viele Transistoren hat eine normale DRAM-Zelle?
a) 6
b) 5
c) 2
d) 1
e) 9
Aufgabe 11.4
Wozu wird beim DRAM ein Refresh bentigt?
a) Zugriff auf verschiedene Speicherblcke
b) Zugriff auf Zeilen und Spalten der Speichermatrix
c) Auswahl eines Speicherblocks
d) Aufladen von Kondensatoren
e) Lschen von Datenbereichen
Aufgabe 11.5
Was passiert beim Flash eines Flash-Speichers?
a) Zugriff auf Zeilen und Spalten der Speichermatrix
b) Auswahl eines Speicherblocks
c) Lschen von Datenbereichen
351
352
11Speicher
000
ADDR(2:0)
Zeilendecoder
001
010
011
100
101
110
ADDR(5:0)
Spaltendecoder
ADDR(5:3)
111
110
100
101
011
010
001
000
Leseverstrker
DATA
111
12
353
354
Abb.12.1 Prinzipielle
Wirkungsweise eines AnalogMessgertes
Wertkontinuierliche
Reprsentationsgre,
z.B. Zeigerausschlag
Wertkontinuierliche
Messgre,
z.B. Spannung U
Abb.12.2 Prinzipielle
Wirkungsweise eines AnalogDigital-Umsetzers
Wertdiskrete 111
Reprsentationsgre, 110
z.B. Zahl 101
100
011
010
001
000
Wertkontinuierliche
Messgre,
z.B. Spannung U
355
s(t)
Analoges Signal
wert- und zeitkontinuierlich
0
t
T
sa(t)
Abgetastetes Signal
wertkontinuierlich
und zeitdiskret
0
sq(t)
111
110
101
100
011
010
001
000
t
T
Abgetastetes und
quantisiertes Signal
wert- und zeitdiskret
sd(t)
...
t
T
...
Digitalsignal
zweiwertig und
zeitdiskret
1
0
0
t
T
356
Ein System zur Digitalisierung analoger Signale lsst sich somit durch das Blockschaltbild in Abb.12.4 beschreiben. Integrierte Schaltungen zur AD-Umsetzung vereinen die
Funktionen meist auf einem Baustein. Es ist jedoch auch mglich, die Umsetzfunktion
auf mehrere Bauelemente aufzuteilen.
Der Eingangstiefpass mit der Grenzfrequenz fg ist fr den Fall erforderlich, dass das
Analogsignal nicht hinreichend bandbegrenzt ist. Seine Dimensionierung wird durch das
Abtasttheorem bestimmt (Abschn.12.1.2). Als nchster Block ist ein Abtasthalteglied
(AHG) vorgesehen. Dieses hlt whrend der Umsetzungsdauer des ADU das umzusetzende Analogsignal konstant (Abschn.12.1.3). Das AHG speist direkt den eigentlichen
Umsetzer, der aus Quantisierer und Codierer besteht. Verschiedene Architekturen werden
in Abschn.12.2 vorgestellt. Eine Ablaufsteuerung koordiniert die Aufgaben der einzelnen Blcke.
12.1.2 Abtasttheorem
Das Abtasttheorem von Shannon gibt an, in welchen zeitlichen Abstnden dem vorliegenden Analogsignal mindestens Proben (Abtastwerte) entnommen werden mssen,
damit nach einer spteren DA-Umsetzung das Ursprungssignal (bis auf die Quantisierungsfehler) fehlerfrei rekonstruiert werden kann.
Das Abtasttheorem lautet: Eine auf fg bandbegrenzte Signalfunktion s(t) wird vollstndig
bestimmt durch zeitdiskrete
und quidistante Abtastwerte sa(t) im zeitlichen Abstand von
Analogsignal
Tiefpass
fg
Abtasthalteglied
Quantisierer
Ablaufsteuerung
Codierer
Digitalsignal
357
tu tH T = Tabt
Ist allerdings die Umsetzdauer tu sehr viel kleiner als Tabt kann theoretisch auf eine Abtast
haltung verzichtet werden. Diese Forderung lsst sich in der Praxis allerdings selten
sinnvoll erfllen, da der ADU dadurch sehr teuer werden wrde. Die Zusammenhnge
sollen an einem Beispiel konkretisiert werden.
Wird kein AHG benutzt, kann sich whrend der Umsetzdauer tu des ADU das
Eingangssignal s(t) um ds ndern, was zu einem falschen Umsetzungsergebnis fhrt.
Soll die maximale Genauigkeit eines ADU von 1/2 LSB (Least Significant Bit) erhalten
bleiben, muss im Sinne einer Worst-Case-Betrachtung gefordert werden, dass an der
Stelle der grtmglichen Signalsteigung die Signalnderung kleiner als 1/2 LSB
bleibt. Beispielsweise fhrt diese Forderung bei einem vollaussteuernden Sinussignal
s(t)=Asin(gt) zu folgendem Ergebnis:
ds
= A g = Smax
dt max
Das ist die maximale Steigung des Signals mit der Amplitude A=mQ/2, wobei Q die
Quantisierungsintervallbreite und m die Quantisierungsstufenzahl im Aussteuerbereich
sind. Weiter gelte fg=1/(2Tabt) als Grenzfall fr die Abtastung. Dann folgt:
Smax =
mQ
m Q 2 fg
=
2
2 Tabt
Mit der oben formulierten Bedingung Smaxtu Q/2 folgt durch Gleichsetzen
Smax =
Q
mQ
2 Tabt
2 tu
s(t)
sa(t)
tH
AHG
t
T
nT
t
T
358
tu
Tabt
m
Dieses ist die erforderliche Umsetzdauer eines ADUs, welche bei der Abtastung ein
AHG entbehrlich macht. Diese Forderung ist sehr weitreichend, da in der Regel m sehr
viel grer als 1 ist.
Als Beispiel wird eine Abtastperiodendauer von 125s fr die digitale Sprachsignalverarbeitung mit Telefonqualitt betrachtet. Es wird ein linearer ADU mit n=12 bit verwendet, sodass m=2n1=4095 ist. Dann gilt fr die Umsetzdauer:
tu
125s
= 9, 72ns
4095
Dieses lsst sich nicht sinnvoll realisieren, da ADUs mit diesen Leistungsmerkmalen
zwar technisch mglich, jedoch fr diese Anwendung zu aufwendig sind. Wird dagegen
ein AHG eingesetzt, darf die Umsetzdauer tu des ADU nherungsweise Tabt, also im vorliegenden Beispiel 125s betragen. Darin liegen Sinn und Vorteil eines AHG.
Die Arbeitsweise eines AHG zeigt das prinzipielle Schaltbild in Abb.12.6. Wird der
Schalter S in die obere Stellung gebracht, ldt sich der Haltekondensator CH auf die
Signalspannung auf. Dieses entspricht der Abtastphase. Nach Bewegen des Schalters S
in die Mittelstellung beginnt die Haltephase, whrend der das Signal in CH gespeichert
bleibt. Die Spannung UH ist durch einen hochohmigen Leseverstrker als sa(t) verfgbar.
RS ist der Eingangswiderstand des AHG, Ri der Innenwiderstand der Signalquelle.
In modernen Pipeline-ADUs in CMOS-Technologie werden die AHGs mit geschalteten Kondensatoren (Switched Capacity Circuits) realisiert, wie in Abb.12.7 dargestellt ist.
Ri
s(t)
RS
S
CH
sa(t)
UH
Abb.12.6Prinzipieller Aufbau eines AHGs und sein Anschluss an die Signalquelle s(t)
Abb.12.7 Prinzipschaltbild
eines Abtasthalteglieds mit
geschaltetem Kondensator in
CMOS-Technik, wie es z.B.
in Pipeline-ADUs verwendet
wird
S2
S1
Ui
S3
CH
Ua
359
In der Abtastphase sind die Schalter S1 und S3 geschlossen, und S2 ist offen. Da
der Summationspunkt des Operationsverstrkers auf Bezugspotenzial liegt, wird der
Kondensator CH mit der Eingangsspannung Ui geladen.
Fr die Haltephase werden die Schalter S1 und S3 geffnet und S2 geschlossen und
damit die Haltekapazitt in den Gegenkopplungskreis des Operationsverstrkers gelegt.
Da die Ladung von CH nicht ber den Summationspunkt abflieen kann, bleibt sie erhalten, und die Ausgangsspannung Ua nimmt den Wert Ui an.
Q=
Umax
2n
Umax
= 2n 1 Q
Dieser Wert ergibt sich daraus, dass von den 2n mglichen Codewrtern der erste Wert
fr die Spannung 0V bentigt wird und die folgenden 2n1 Codewrter jeweils um
den Wert Q grer sind.
Als einfaches Beispiel betrachten wir einen Aussteuerbereich Umax von 1V und eine
Wortbreite von n=3 bit. Dann betrgt Q=1V/23=1V/8=125mV. Die Zahl der
Quantisierungsintervalle betrgt 8, sodass der hchste codierbare Spannungswert 7 Intervalle hher als 0V ist:
Umax
= 7 125mV = 0, 875V
360
111
110
Digitalsignal
101
100
011
010
001
000
0,875
Umax = 1,000
U*max
0,8125
0,625
0,750
0,6875
0,5625
0,375
0,500
0,4375
0,250
0,3125
0,000
0,125
0,1875
bergangswerte
Analogsignal (in V)
0,0625
Reprsentationswerte
Ideale
Quantisierungsgerade
Die beiden Punkte in den Ecken des Diagramms legen die ideale Quantisierungsgerade fest. Diese verluft durch die Mittelpunkte aller Quantisierungsintervalle einer idealen Quantisierungskennlinie. Bei einer realen Quantisierungskennlinie ergibt sich fr die
Mittelpunkte aller Quantisierungsintervalle jedoch im allgemeine keine Gerade. Darin
uern sich unterschiedliche Fehler realer Umsetzer, wie sie in Abschn.12.4 im Einzelnen erlutert werden.
Als Beispiel fr reale Grenordnungen wird ein Aussteuerbereich Umax von 10V und
eine Wortbreite von n=12 bit betrachtet. Dann betrgt Q=10V/212=1V/4096=2,44
mV. Der hchste codierbare Spannungswert betrgt U*max=4095(10V/4096)=9,976V.
Bei einer idealen Quantisierungsgerade sind alle Quantisierungsintervalle Q gleich
gro und man spricht von linearer Quantisierung. Dann ist der maximale Quantisierungsfehler Fabs die Hlfte des Quantisierungsintervalls:
Fabs =
Umax
Q
= n+1
2
2
Der relative Fehler Frel hngt von der aktuellen Aussteuerung ab, er nimmt bei Vollaussteuerung sein Minimum an:
Frel =
Fmax
1
Fmax
= n+1
Umax
Umax
2
n n = 1 ld Frel
Codewort-Nummer
0
361
Reprsentationswert
in V
0
Codierung
0000 0000 0000
0,0024414
0,0048828
1024
2,5000000
2048
4095
5,0000000
9,9975586
Soll beispielsweise eine relative Genauigkeit bei Vollaussteuerung von 1% erreicht werden, berechnet sich der Zweierlogarithmus von 0,01 zu ld0,01=6,64. Daraus ergibt
sich n=5,64, sodass fr den ADU mindestens n*=6 bit ntig sind.
362
12.2.1 Parallelverfahren
Umsetzer nach diesem Verfahren heien Parallel-, Direkt- oder Flash-Umsetzer. Das
Messverfahren hnelt der Lngenmessung mit einem Zollstock. An die unbekannte
Gre wird der Zollstock angelegt, der in m Teile des Quantisierungsintervalls, sogenannte Normale, eingeteilt ist. Der nchstliegende ganzzahlige Wert ist die gesuchte
Lnge.
Fr die elektronische Realisierung dieses Verfahrens ist Folgendes wichtig:
Es ist nur ein Messschritt ntig, das Verfahren arbeitet schnell.
Es sind m Normale ntig, also groer Aufwand an Przisionsbauelementen.
Elektrisch kann dieses Normalenlineal durch eine Spannungsteilerkette mit m gleichgroen Przisionswiderstnden realisiert werden. Jeder Widerstand ergibt eine darstellbare
Stufe. Zustzlich ist noch der Wert Null vorhanden, so dass m+1 Werte mglich sind.
Das Blockschaltbild des entsprechenden Parallelumsetzers ist in Abb.12.9 dargestellt. Es
gilt: R1=R2= =Rm. Rref wird entsprechend dem Verhltnis von Umax zu Uref gewhlt.
Mittels m Komparatoren wird die unbekannte Spannung Ux mit den einzelnen Abgriffen des Normalen-Spannungsteilers verglichen. Alle Komparatoren, deren Spannungen
an den Teilereingngen grer als Ux sind, liefern am Ausgang eine logische 1, alle anderen eine logische 0. Diese Werte werden mit einem Abtastimpuls in ein Register bernommen und in der Decodierlogik in die entsprechende Anzahl von n=ld(m+1) bits
umgesetzt. Das Register realisiert eine digitale Abtasthaltung, sodass dieser Umsetzer
ohne ein zustzliches AHG betrieben werden kann.
Uref
Rm
Komparatoren
Dm
Dekodierlogik
Rref
Rm-1
Rm-2
Analogeingang
Verstrker
Ux
R1
D1
C
Abtastimpuls
Digitalausgang
n-1
0
363
Der hohe Aufwand zeigt sich in der groen erforderlichen Anzahl von Przisionswiderstnden und Komparatoren. Daher wird dieses Verfahren normalerweise nur bis
Auflsungen von 12 bit eingesetzt. Technische Probleme bei hoher Auflsung liegen
auerdem im Eingangsverstrker, der m Komparatoreingnge treiben muss und in den
Komparatoren selbst, die eine kleine Hysterese und hohe Gleichtaktunterdrckungen
aufweisen mssen. Ein weiterer Nachteil ist die vergleichsweise hohe Verlustleistung
dieses Umsetzertyps.
Die Geschwindigkeit des Umsetzers wird durch den langsamsten Komparator
bestimmt, der erst eingeschwungen sein muss, bevor der Abtastimpuls eintrifft. Anwendungsschwerpunkte fr Umsetzer dieses Typs liegen bei der digitalen Signalverarbeitung, insbesondere der Bildverarbeitung mit Datenraten von mehr als 80 Mbit/s und bei
Transientenrekordern.
Eventuell ist Ihnen aufgefallen, dass beim Flash-ADU die Quantisierungsschritte
immer bis zum nchsten Reprsentationswert reichen. Bei der Auflsung aus Abb.12.8
wrde die Codierung 000 also dem Wertebereich von 0V bis 0,125V entsprechen.
Dies liegt daran, dass alle Widerstnde des Spannungsteilers gleich gro gewhlt sind
und die Komparatoren die Eingangsspannung mit den Reprsentationswerten vergleichen. Bezogen auf die Dezimalzahl wird durch diese Vereinfachung der Nachkommaanteil abgeschnitten und es findet nicht die eigentlich erforderliche Rundung statt.
In der Praxis wird diese Verschiebung durch Halbierung des Werts fr R1 und entsprechender Erhhung von Rref oder durch einen Offset im Eingangsverstrker gelst. Um
die Beschreibung der Schaltungsstrukturen in diesem Kapitel bersichtlich zu halten,
sollen solche Rundungsfragen nicht beachtet werden.
12.2.2 Wgeverfahren
Beim Wgeverfahren wird pro Messschritt ein Bit des Digitalwortes erzeugt. Der Name
dieses Verfahrens stammt von dem bei einer Balkenwaage blichen Messvorgang: Das
Wgegut unbekannten Gewichts wird in eine Waagschale gelegt. In die andere kommt
zunchst das grte verfgbare Gewicht. Ist dieses zu schwer, wird es wieder entfernt
und eine Null notiert. Ist es nicht zu schwer, bleibt es liegen und es wird eine Eins
notiert. Anschlieend werden nacheinander alle verfgbaren kleineren Gewichte in gleicher Weise benutzt. Das unbekannte Gewicht entspricht der Summe aller mit Eins markierten Gewichte.
Das Wgeverfahren benutzt mehrere Normale qi mit dualer Abstufung ihres Wertes.
Die Auflsung entspricht einer Quantisierungsstufe Q, also dem LSB des fertigen Codewortes. Die erste Normale q0 hat den Wert Q, die folgenden Normale sind q1=2Q,
q1=4Q bis qn1=2n1Q.
Da die Anwendung jedes Normals qi ein Bit liefert, sind fr einen n-Bit-ADU also n
Normale ntig. Das grte umfasst den halben Messbereich, also Umax/2 und die Summe
aller Normale ergibt den insgesamt darstellbaren Messbereich UmaxQ.
364
Eine Messung der Eingangsgre x beginnt mit dem Vergleich mit dem grten Normal qn1.
Gilt x qn1, wird bn1=1 und qn1 bleibt angelegt.
Gilt dagegen x < qn1, wird bn1=0 und qn1 wird entfernt.
Damit ist das MSB (Most Significant Bit) des Digitalwertes b gebildet. Im nchsten
Schritt wird der verbleibende Rest der Messgre mit dem nchstkleineren Normal
verglichen.
Gilt xbn1qn1qn2, wird bn2=1 und qn2 bleibt angelegt.
Gilt dagegen xbn1qn1<qn2, wird bn2=0 und qn2 wird entfernt.
Dieser Vorgang wird mit den restlichen Normalen bis zum kleinsten Normal q0 der
Gre Q fortgesetzt. Die Zahl Z der Messschritte entspricht der Normalenzahl N und
damit der Bitanzahl, also gilt Z=N=n.
Das Messergebnis lautet x = bn12n1+bn22n2++b222+b12+b0.
Als Beispiel wird ein Wgecodierer mit m=255 Quantisierungsintervallen
betrachtet. Er hat eine Auflsung von Q=1/256 und damit sind Z=N=8 und
n=ld(m+1)=8 bit. Daher sind N=8 Normale und Z=8 Messschritte erforderlich.
Das grte Normal hat den Wert qn1=2(n1)Q=128Q und das kleinste den Wert
q0=Q.
Die Umsetzzeit im Wgecodierer ist grer als beim Direktumsetzer, da mehr Schritte
erforderlich sind. Dafr werden weniger Normale bentigt, d.h. der Aufwand an Przisionsbauteilen ist prinzipiell geringer.
Bei der technischen Realisierung des Wgeverfahrens unterscheidet man zwischen
Umsetzern mit schrittweiser Annherung (Sukzessive Approximation, Successive Approximation) und Kaskadenumsetzer (Pipeline-A/D-Umsetzer). In der Praxis wird von diesen beiden Varianten meist das Verfahren mit schrittweiser Annherung verwendet und
darum wird dieses hier anhand des Rckkopplungscodierers erlutert. Das Blockschaltbild in Abb.12.10 zeigt den Aufbau mit der Rckkopplung als wesentliches Merkmal.
Ux
Analogeingang
AHG
U*x
Komparator
Logik
A
Uref
SAR
Takt
n-1
0
Digitalausgang
365
Als Rckkopplung wird mit einem Digital-Analog-Umsetzer (DAU) eine Referenzspannung Uref erzeugt. Diese wird entsprechend der Summe der aktivierten Normale
schrittweise variiert. Im ersten Schritt ist das MSB gesetzt und Uref=Umax/2. Der Komparator vergleicht die Referenzspannung mit der Eingangsspannung und ermittelt das
MSB des Digitalausgangs, der im Successive Approximation Register (SAR) gespeichert
wird. Der DAU erzeugt dann den nchsten analogen Vergleichswert, der wieder mit dem
Eingangssignal verglichen wird um das nchste Ausgangsbit zu ermitteln.
Als Beispiel soll das Verfahren fr einen ADU mit n=3 bit und Umax =1V durchgespielt werden. Das Quantisierungsintervall Q ist damit 0,125V. Als Eingangsspannung
wird Ux=0,8V angenommen.
Im Abtasthalteglied AHG wird die Eingangsspannung gehalten, damit whrend der
schrittweisen Umsetzung stets der gleiche Analogwert U*x anliegt.
Der erste Vergleich erfolgt mit dem Wert Uref=22Q=40,125V=0,5V. Der Eingangswert von 0,8V ist grer als die Referenzspannung, also ist das MSB b2 gleich 1.
Der zweite Vergleich addiert zu der bisher ermittelten Spannung von 0,5V die
nchste Normale, mit halber Gre der vorherigen Normale. Es ergibt sich also der
Wert Uref=b222Q+21Q=0,5V+20,125V=0,75V. Der Eingangswert
von 0,8V ist wieder grer als die Referenzspannung, also ist das nchste Bit b1
gleich 1.
Der dritte Vergleich addiert wieder zu der bisher ermittelten Spannung von 0,75V die
nchste Normale, mit halber Gre der vorherigen Normale. Es ergibt sich der Wert
Uref=b222Q+b121Q+20Q=0,75V+0,125V=0,875V. Der Eingangswert von 0,8V ist kleiner als die Referenzspannung, also ist Bit b0 gleich 0.
Damit ergibt sich nach drei Schritten der digitale Ausgangswert 110, der einer Spannung von 6Q=0,75Ventspricht.
Das Ergebnis ist innerhalb der erreichbaren Genauigkeit fr die gewhlte Codewortlnge.
12.2.3 Zhlverfahren
Beim Zhlverfahren handelt es sich um ein rein seriell arbeitendes Verfahren. Es existiert nur ein Normal der Lnge Q und whrend der Messung wird gezhlt, wie oft dieses
Normal an den unbekannten Wert x angelegt werden muss, um diesen zu erreichen. Das
Zhlergebnis entspricht dann dem gesuchten Digitalwert von x.
Die Zahl der erforderlichen Vergleichsschritte Z hngt von der Messgre ab und
betrgt maximal Z=m=2n1, denn falls beim (2n1)ten Messschritt immer noch
gilt x > (2n1)Q, dann muss x im letzten Quantisierungsintervall liegen.
Der Vorteil dieses Umsetzertyps ist, dass nur ein Normal, also ein geringer Aufwand
an Przisionsbauelementen, bentigt wird. Da die Anzahl der Messschritte jedoch von
allen Umsetzverfahren am grten ist, arbeitet es auch am langsamsten.
366
Das Zhlverfahren kann elektronisch durch eine Abwandlung des soeben vorgestellten Rckkopplungsumsetzers realisiert werden. Dazu wird das SAR durch einen Zhler
ersetzt und damit Uref pro Messschritt nur um eine Quantisierungsstufe Q erhht.
Vergleicht man die drei bisher dargestellten Umsetzverfahren miteinander, so zeigt
sich, dass Aufwand (bzw. Kosten) und Umsetzungsdauer bis zu einem gewissen Grade
untereinander austauschbar sind. Dieses ist in Abb.12.11 anschaulich dargestellt. Hufig besteht bei der Anwendung von ADUs jedoch der Wunsch, die Auswahl hinsichtlich
Geschwindigkeit und Kosten prziser an das vorliegende Digitalisierungsproblem anzupassen, als es die drei bisher genannten Verfahren zulassen. Dafr stehen zwei weitere
Verfahren zur Verfgung: Das erweiterte Parallel- und das erweiterte Zhlverfahren.
Beide werden in den nchsten Abschnitten vorgestellt.
Aufwand
Wandlungsdauer
Parallelverfahren
Wgeverfahren
Zhlverfahren
Grobstufen
367
Feinstufen
N=m+m
Bemerkungen
256
255
Direktverfahren
128
128
64
66
32
38
16
16
30
Minimale
Normalenzahl
32
38
Ab hier Wiederholung
Allgemein gilt, dass die minimale Normalenzahl, also der kleinste Hardwareaufwand,
im Fall (m+1)=(m+1) erreicht wird.
Geht man allgemein auf Z > 2 Messschritte ber, muss gelten (m+1)(m+1)
(m+1)(m(Z)+1)=m+1=2n und die Normalenzahl betrgt:
N=
Z
m(i)
i=1
Die Zahl der ntigen Normale wird wiederum minimal, wenn fr alle m(i)=m=konstant
gilt. Dann betrgt die Anzahl an Quantisierungsstufen pro Messschritt:
Z
Z
m + 1 = m + 1 = m(Z) + 1 = m + 1 = 2n
4
4
m + 1 = m + 1 = m + 1 = m + 1 = 28 = 256 = 4
Dies bedeutet pro Umsetzerstufe werden 2 Bit generiert. Die Zahl der Normale betrgt
N=Zm=43=12.
Falls die Einzelquantisierungsstufenzahl keine Potenz von 2 ergibt, ist eine andere
Aufteilung ntig. Soll beispielsweise der 8-Bit-ADU in Z=3Schritte
aufgeteilt wer
3
den, ergibt sich fr die Anzahl an Quantisierungsstufen der Wert 256 =6,35 also keine
Zweierpotenz. Die drei Stufen mssen dann so gewhlt werden, dass sie einer Zweierpotenz entsprechen und sich insgesamt die bentigten 256 Quantisierungsstufen ergeben.
Dies erfolgt, durch zwei Stufen mit 8 und einer Stufe mit 4 Einzelquantisierungsstufen,
die insgesamt 884=256Stufen ergeben. In Bit gerechnet ergeben die Einzelstufen
zweimal 3 und einmal 2 Bit, insgesamt also 8 Bit. Die minimale Normalenzahl ist 17.
Die Umsetzerstruktur ist in Abb.12.12 gezeigt.
368
Stufe 1
Digitalausgang b7 b6 b5
Stufe 2
Stufe 3
b4 b3 b2
b1 b0
Umsetzer nach dem erweiterten Direktverfahren mit der Schrittzahl Z=2 sind als
Half-Flash-Umsetzer auf dem Markt vertreten. Das vereinfachte Blockschaltbild des
Half-Flash-Umsetzers AD 7821 (Analog Devices) mit 8 Bit ist in Abb.12.13 dargestellt.
Ein 4-Bit-Direktumsetzer erzeugt im ersten Schritt die vier hchstwertigen Bits (MSB).
Deren Analogquivalent wird anschlieend von der analogen Eingangsspannung subtrahiert. Aus der verbleibenden Differenz werden dann mit einem zweiten 4-Bit-Direktumsetzer die vier niederwertigsten Bits ermittelt (LSB).
12.2.4.2Pipeline-Analog-Digital-Umsetzer
Bei einem Pipeline-ADU erfolgt die Umsetzung ebenfalls in mehreren Schritten. Anders
als beim allgemeinen Verfahren werden die Werte in jeder Stufe mit einem AHG gehalten und nach der Differenzbildung verstrkt. Durch das Halten der Zwischenwerte ist
eine Verarbeitung im Pipeline-Verfahren mglich, denn whrend die zweite Stufe die
nachfolgenden Bits ermittelt, kann die erste Stufe bereits den nchsten Abtastwert bearbeiten. Die Verstrkung ermglicht der nachfolgenden Stufe mit hheren Signalpegeln
zu arbeiten.
Abb.12.14 zeigt das Prinzip eines Pipeline-Analog-Digital-Umsetzers mit vier Stufen eines 3-Bit-Umsetzers, angelehnt an den Baustein AD9200 von Analog Devices.
Vom analogen Eingangssignal werden in der ersten Stufe die drei hchstwertigen Bits
in einem Flash-AD-Umsetzer (ADU) ermittelt und das digitale Teilergebnis mit einem
DA-Umsetzer (DAU) wieder in einen analogen Wert umgesetzt. Der Eingangswert wird
im ersten Abtast-Halte-Glied (AHG) gespeichert und von ihm wird jetzt der Ausgang des
DAUs abgezogen. Da im ersten Schritt drei Bit des Ergebnisses ermittelt wurden, kann
die Differenz um den Faktor 23=8 verstrkt werden. Dadurch hat die Differenz wieder
Ux
Analogeingang
4-BitFlash
A
D
4-BitFlash
MSB
Ausgangstreiber
Abb.12.13 Vereinfachtes
Blockschaltbild eines 8-BitHalf-Flash-Umsetzers
LSB
Digitalausgang
n-1
0
Verstrker
AHG
3-BitADU
3
3-BitDAU
369
Verstrker
AHG
3-BitADU
3-BitDAU
Verstrker
3-BitADU
AHG
3-BitADU
3-BitDAU
10
Digitalausgang
den gleichen Pegel wie das Eingangssignal und die zweite Stufe kann genauso wie die
erste Stufe dimensioniert werden. Dies ist fr den Schaltungsentwurf und die Genauigkeit der AD- und DA-Umsetzung vorteilhaft. Nach der zweiten Stufe werden in der dritten und vierten Stufe die weiteren Bits ermittelt.
Fr den praktischen Entwurf ist es vorteilhaft, wenn sich die Bereiche der einzelnen
Stufen etwas berlappen. Pro Stufe wird darum nicht der volle 3-Bit-Messbereich von 0
bis 7 genutzt, sondern nur etwa der Wertebereich von 0 bis 5. Diese 6 Werte entsprechen
rund 2,5 bit Auflsung und somit erfolgt dann die Verstrkung zwischen den Stufen auch
mit dem Faktor 6. Eine Korrekturlogik setzt aus den vier Teilergebnissen den Messwert
mit der Genauigkeit von 10 bit zusammen. In dieser Korrekturlogik kann sichergestellt
werden, dass sich der gesamte ADU ber den Messbereich mglichst linear verhlt. Insbesondere wird vermieden, dass Missing Codes auftreten, das heit beim bergang zwischen Messbereichen wird kein Codewort bergangen.
370
Abb.12.15 Blockschaltbild
eines ADUs nach dem SingleSlope-Verfahren
Analog- Ux
eingang
t
Sgezahngenerator
Komparatoren
&
Uk
Digitalausgang
Zhler
Takt
Analogeingang
Ux
371
Integrator
R
Komparator
&
ua(t)
-Uref
Referenzspannung
Zhler
t2
Digitalausgang
Takt
Zhler
t1
Ua
t
t1
t2
t2
Die Messdauer t1 kann zu einem Vielfachen der Periodendauer der 50Hz Netzspannung, also zu n20ms gewhlt werden. In diesem Fall haben Strungen durch die Netzspannung keinen Einfluss auf das Messergebnis.
Die Vorteile dieses Messverfahrens sind also:
gute Strspannungsunterdrckung, da integrierendes Verfahren
unabhngig von alterungs- und temperaturbedingten nderungen der Bauelemente
und des Taktoszillators
Die Langzeitprzision wird nur durch Uref bestimmt, die sehr przise erzeugt werden kann
erzielbare Genauigkeit: ca. 0,001%, d.h. 1516 bit bzw. 5 Dezimalstellen
Nachteil:
Das Verfahren arbeitet relativ langsam
Die hufigste Anwendung findet dieser Umsetzertyp in Digitalvoltmetern.
12.2.7 Sigma-Delta-Umsetzer
Ein Sigma-Delta-Umsetzer (-Umsetzer) kombiniert die Rckfhrung eines 1-BitDA-Umsetzers mit einem Integrator und einer berabtastung. Das Blockschaltbild Abb.12.18 zeigt den Aufbau. Der Eingangswert Ux wird mit der Rckfhrung
372
Integrator
Udiff
Komparator
Uint
Plus
Takt
Udig
Abtastung
D
C
Digitalfilter
Digitalausgang
1-BitDAU
kombiniert und in einem Integrator weiterverarbeitet. Dieser Integrator ist hnlich wie
beim Dual-Slope-Verfahren aufgebaut. Ein Komparator ermittelt, ob das Integral positiv oder negativ ist und arbeitet daher als 1-Bit-ADU. Der ADU-Ausgang Plus ist eine
binre Information und geht an ein D-Flip-Flop, wo der Wert mit hoher Taktfrequenz
abgetastet wird. Als Rckfhrung geht der abgetastete Vergleichswert P auf einen 1-BitDA-Umsetzer, dessen Ausgang vom Eingangswert abgezogen wird.
Der Digitalausgang berechnet sich durch einen digitalen Filter aus der Folge von Vergleichswerten P. Der Name Sigma-Delta bildet sich aus den Funktionselementen Integration (Sigma) und der Differenzbildung mit der Rckkopplung (Delta).
Zum Verstndnis des Funktionsprinzips wird der Zeitablauf bei einer Umsetzung in
Tab.12.3 Schritt fr Schritt erlutert. Als Messbereich wird 1V angenommen und auch
der Ausgang des DAU betrgt +1V oder 1V. Als Spannung am Analogeingang Ux
soll 0,6V gemessen werden. Fr den Zeitschritt 1 wird zum besseren Verstndnis die
Rckfhrung weggelassen, daher ist Udig=0V (in der Tabelle mit 0* markiert). Ebenfalls wird angenommen, dass der Integrator mit der Spannung Uint=0V startet.
In den Zeitschritten erfolgen dann die folgenden Berechnungen:
1. Ux plus Udig ergeben 0,6 V, die im Integrator verarbeitet werden. Dieser Wert ist positiv, daher ist Plus gleich 1.
2. Die Rckfhrung nimmt den vorherigen Wert von Plus und ergibt darum Udig=1V.
Dieser Wert wird von Ux abgezogen, sodass Udiff=0,4V ist. Addiert zum vorherigen
Wert des Integrators bleibt Uint=0,2V. Dieser Wert ist positiv, daher ist Plus gleich 1.
3. Die Rckfhrung ergibt erneut Udig=1V, sodass wiederum Udiff=0,4V ist. Der
Wert des Integrators wird Uint=0,2V. Dieser Wert ist negativ, daher ist Plus gleich 0.
4. Wegen des negativen Werts im Integrator ergibt die Rckfhrung nun Udig=1V.
Daher ist Udiff=1,6V und der Wert des Integrators wird Uint=1,4V. Dieser Wert ist
positiv, daher wird Plus wieder gleich 1.
5. Die Rckfhrung ergibt wieder Udig=1V, darum wird Udiff=0,4V. Der Wert des
Integrators wird Uint=1V. Dieser Wert ist positiv, daher ist Plus gleich 1.
6. Der weitere Zeitablauf kann aus der Tabelle abgelesen werden.
Beim Zeitablauf in Tab.12.3 besteht die Pulsfolge am digitalen Filter aus vier Einsen
und einer Null. Die Pulsfolge wird Tiefpass-gefiltert und ergibt einen 1-Anteil von 80%.
373
Ux [in
V]
0,6
Udig [in
V]
0*
0,6
0,6 0,6
0,6
0,6
+1
+1 1
+1
+1
Udiff
[in V]
0,6
Uint [in
V]
0,6
Plus
[binr]
10
11
12
13
14
15
0,6
0,6 0,6
0,6
0,6
0,6
0,6 0,6
0,6
+1
+1 1
+1
+1
+1
+1 1
+1
0,4
0,6
1,0
0,6
1,0
1
Dieser Wert bezieht sich auf den Messbereich von 1V und entspricht Ux=1V+
0,82V=1V+1,6V=0,6V.
Die Tabelle zeigt die Umsetzung eines konstanten Eingangswertes. Wenn sich
Ux ndert, wird sich auch die Pulsfolge nach mehreren Schritten an den genderten
Eingangswert anpassen.
Der Sigma-Delta-Umsetzer versucht also mit Pulsen von +1V und 1V die
Eingangsspannung nachzubilden. Dies sind recht grobe Schritte; im Gegenzug dafr
wird die Frequenz der Schritte sehr hoch gewhlt. Der Unterschied zwischen hchster
Frequenz des Eingangssignals und Abtastrate wird als Oversampling Ratio OSR
bezeichnet und hierfr sind Faktoren von 100 und hher mglich. Diese Arbeitsfrequenz
passt sehr gut zu modernen CMOS-Prozessen, die hohe Taktfrequenzen ermglichen.
Das Messprinzip des Sigma-Delta-Umsetzers unterscheidet sich damit magebend
von dem der bisher dargestellten Umsetzer. Letztere liefern bei einer Abtastrate, die
mglichst nahe der unteren durch das Abtasttheorem erlaubten Grenze liegt, jeweils ein
vollstndiges Codewort. Der Sigma-Delta-Umsetzer liefert dagegen eine 1-Bit-Folge
mit sehr viel hherer Frequenz. Dieses Verfahren nennt man daher auch OversamplingTechnik. Der Sigma-Delta-Umsetzer hat gegenber anderen Umsetzern eine Reihe von
Vorteilen:
1. Er kann nahezu vllig aus digitalen Komponenten aufgebaut werden. Die Anforderungen an die 1-Bit-Umsetzung sind nicht sehr hoch.
2. Er wirkt fr das Eingangssignal wie ein Tiefpass, fr das Quantisierungsfehlersignal
jedoch wie ein Hochpass. Das Spektrum des Quantisierungsfehlersignals wird daher
schwerpunkthaft in die Nhe der sehr hohen Abtastfrequenz verschoben. Der digital
arbeitende Tiefpass eliminiert erhebliche Teile davon und kann so dimensioniert
werden, dass er 50Hz-Strungen unterdrckt.
3. Dem Umsetzerprinzip ist eine monotone Quantisierungskennlinie inhrent.
374
375
12.3.1 Direktverfahren
Im Direktverfahren werden die mglichen Ausgangsspannungen des n-Bit-Umsetzers in
einem Spannungsteiler aus 2n gleichen Widerstnden gebildet. Durch einen Multiplexer
wird eine Spannung ausgewhlt und an den Ausgang gegeben (Abb.12.21). Die Schalter des
Multiplexers sind natrlich keine mechanischen Schalter, sondern werden durch Transistoren implementiert. Die Widerstandsreihe fhrt auch zu der englischen Bezeichnung String
Architecture. Das Verfahren hnelt dem Parallelverfahren zur AD-Umsetzung aus Abb.12.9.
Der Vorteil dieses Verfahrens ist eine relativ gleichmige Schrittweite der
Umsetzungskennlinie, denn die Toleranzen der Widerstnde entsprechen der Schrittweite
zweier Ausgabewerte. Dadurch knnen insbesondere keine Monotoniefehler (siehe
Abschn.12.4.1.6) auftreten.
Der Nachteil des Verfahrens ist der hohe Aufwand an Widerstnden und Schaltern,
insbesondere bei hheren Wortbreiten. Es gibt jedoch erweiterte Strukturen, bei denen
nicht alle 2n Ausgangsspannungen direkt erzeugt werden, sondern eine Interpolation
zwischen Abgriffen der Widerstandsreihe erfolgt.
u(t)
t
0 ts Tabt
Abb.12.20 Prinzipschaltbild
eines Umsetzers digitaler in
analoge Signale
0
...
0
1
1
0
...
1
0
1
1
...
0
1
0
D
A
Digitaleingang
Tiefpass
fg
Analogausgang
376
Uref 2k
Uref
ik = =
R k
R
2
Damit berechnet sich die Ausgangsspannung UDA des Umsetzers zu
UDA = Uref
n1
RF
bk 2 k
R
k=0
Es ist ersichtlich, dass die Ausgangsspannung UDA eine Form hat, die dem vorgegebenen
dualen Wert bis auf eine multiplikative Konstante entspricht. Die elektronischen Schalter
knnen in Bipolar- oder CMOS-Technik realisiert werden.
Ein wesentlicher Nachteil der Schaltungsstruktur ist, dass sich die Widerstandswerte
fr einen n-Bit-Umsetzer um den Faktor 2n1 unterscheiden. Dieses ist in monolithischer Technik schwer zu realisieren, da der herstellbare Wertebereich technologisch
begrenzt ist. Auerdem sind die Anforderungen an die Przision der kleineren Widerstnde sehr hoch. Der kleinste Widerstand R hat den hchsten Strombeitrag und sein
Stromfehler sollte kleiner als 1/2 Stelle des Ergebnisses sein. Das bedeutet, der Fehler
darf nur so gro wie die Hlfte des Strombeitrags des grten Widerstands R/2n1 sein.
Darum muss die Genauigkeit besser als 2n sein. Bei einem 12-Bit-Umsetzer bentigt
der kleinste Widerstand also die Genauigkeit von 212=2,44104 und dieser Wert
ist praktisch nicht zu erreichen.
Uref
Rm
n-1
0
Rm-1
Dekodierlogik
Digitaleingang
Rm-2
R1
Abb.12.21DA-Umsetzung im Direktverfahren
Analogschalter
Verstrker
Analogausgang
377
RF
i0
i1
R
2
b0
i2
R
4
b1
in-1
UDA
R
... n-1
2
b2
...
bn-1
Schalter0 1 stellung
Uref
Aus diesen Grnden werden integrierte DAUs nicht nach dem oben dargestellten
Prinzip realisiert, sondern durch fortgesetzte Spannungsteilung in einem
Kettenleiternetzwerk. Dieses Verfahren wird im nchsten Kapitel beschrieben.
Eingesetzt wird die Umsetzung mit Summation gewichteter Strme bei Anwendungen
mit geringer Wortbreite. Ein Beispiel ist die Codierung von Tasten fr Mikrocontroller.
Wenn ein Mikrocontroller durch mehrere Taster bedient werden soll, wre prinzipiell fr
jeden Taster eine Eingangsleitung erforderlich. Stattdessen knnen vier bis sechs Taster
ber ein Widerstandsnetzwerk wie in Abb.12.22 an einen einzigen Analogeingang des
Mikrocontrollers gegeben werden, so dass Eingangsleitungen gespart werden. Der Operationsverstrker ist dabei nicht erforderlich.
12.3.3 R-2R-Leiternetzwerk
Die Arbeitsweise dieses DA-Umsetzertyps basiert prinzipiell auf dem gleichen Verfahren wie der zuvor dargestellte, denn es werden Strme addiert, die dem Wert der
einzelnen Dualstellen des vorgegebenen Digitalwortes entsprechen. Allerdings werden hier die Strme mit stufenweise gleichgroen Widerstnden anhand fortgesetzter Spannungsteilung in einem Leiternetzwerk erzeugt. Grundelement ist dabei ein
-Glied, das als belasteter Spannungsteiler mit folgenden Eigenschaften betrieben
wird:
Belastet man den Spannungsteiler mit einem Abschlusswiderstand Z, so soll sein
Eingangswiderstand ebenfalls Z sein. Das ermglicht eine einfache Kettenschaltung
der einzelnen Spannungsteiler.
Der Teilerfaktor in jeder abgeschlossenen Teilerstufe soll entsprechend der dualen
Abstufung 2 sein.
Diese Forderungen lassen sich mit symmetrischen Vierpolen erreichen, die mit ihrem
Wellenwiderstand abgeschlossen sind. Eine Rechnung liefert das in Abb.
12.23
dargestellte verlngerbare Kettenleiternetzwerk. Wegen der charakteristischen
378
U3 = Uref
U2 = U3 /2
U1 = U2 /2
U0 = U1 /2
Damit ergeben sich die Strme zu:
Uref
U3
=
2R
2R
Uref /2
=
=
2R
Uref /4
=
=
2R
Uref /8
=
=
2R
I3 =
U2
2R
U1
I1 =
2R
U0
I0 =
2R
I2 =
I3
2
I3
4
I3
8
Abschluss
2R
2R
2R
2R
U3=Uref
Uref
i3
2R
U2
i2
2R
b3
U1
b2
RF
U0
i1
2R
379
i0
2R
b1
2R
UDA
b0
0 1 Schalterstellung
12.3.4 Pulsweitenmodulation
Die Pulsweitenmodulation (PWM) erzeugt eine analoge Ausgangsgre durch schnellen
Wechsel zwischen zwei Spannungswerten. Das Verhltnis zwischen den Zeiten fr die
Ausgangspegel bestimmt die analoge Ausgangsgre. Abb.12.25 zeigt den Zeitablauf
fr zwei Ausgabewerte. Das Ausgangssignal wechselt periodisch zwischen High-Pegel
UH und Low-Pegel UL. Die Dauer des High-Pegels tH dividiert durch die Periodendauer
TPer wird als Tastverhltnis bezeichnet.
Aus der Pulsfolge kann durch einen Tiefpass eine Mittelwertbildung erfolgen, um
eine analoge Ausgangsspannung zu erzeugen; im einfachsten Fall reicht ein Kondensator. Die analoge Ausgangsspannung berechnet sich zu
UDA = UL +
tH
(UH UL )
TPer
Als Beispiel wird fr den Zeitverlauf in Abb.12.25 ein High-Pegel von 3,3V und ein
Low-Pegel von 0V angenommen. Dann ergibt sich fr das Tastverhltnis von 70% die
Ausgangsspannung 2,31V und fr 20% die Spannung 0,66V.
Es gibt jedoch auch Anwendungen, bei denen keine analoge Ausgangsspannung bentigt wird, sondern stattdessen der angesteuerte Aktor oder der nachfolgende Sensor einen
Mittelwert bildet.
Ein Gleichstrommotor kann durch eine PWM angesteuert werden und ergibt verschiedene Drehgeschwindigkeiten. Die Masse der Achse und die Motorlast sorgen fr die
Mittelwertbildung.
Wird eine Leuchtdiode mit einer PWM angesteuert, erscheint sie verschieden hell.
Die LED ist abwechselnd leuchtend und nicht-leuchtend und das menschliche Auge
sorgt fr die Mittelwertbildung.
380
Abb.12.25 Zeitablauf fr
eine Pulsweitenmodulation
(PWM) fr die Ausgabewerte
20 und 70%
u(t)
UH
UL
t
0
tH,70 Tper
Tastverhltnis 20%
u(t)
UH
UL
t
0 tH,20
Tper
12.4.1.1Quantisierungsfehler
Die Beschrnkung auf eine endliche Anzahl darstellbarer Amplitudenstufen bei der ADUmsetzung verursacht systematische Fehler, deren Amplitude im Allgemeinen 0,5Q
erreichen kann. Nach der DA-Umsetzung ergibt sich dadurch ein Fehlersignal, der
Quantisierungsfehler, der rauschsignalhnlichen Charakter hat und den Signal-RauschAbstand begrenzt. Der Quantisierungsfehler ist auch interpretierbar als Auswirkung der
nichtlinearen Stufenkennlinie eines Quantisierers auf das Signal. Da in praktischen Fllen die Stufen der Quantisiererkennlinie sehr klein sind, kann man auch von einer mikroskopischen Nichtlinearitt sprechen.
Setzt man eine lineare Quantisierung, ein in jedem Quantisierungsintervall gleich verteiltes Signal und einen mitten im Quantisierungsintervall Q liegenden Reprsentationswert voraus, betrgt die Quantisierungsgeruschleistung (Noise) N:
N = Q2 /12
381
Als Zahlenbeispiel wird ein vollaussteuerndes Sinussignal bei einem Umsetzer mit
mQ2n Quantisierungsintervallen angenommen, wobei n die Codewortbreite ist. Hier
betrgt die Signalleistung S:
S=
mQ
2 2
2
22n Q2
8
SNR = 10 log
S
= (1, 76 + 6, 02 n)dB
N
Unter den oben getroffenen Voraussetzungen ist daher mit einem 12-Bit-Umsetzer ein
max. Rauschabstand von SNR=74dB erreichbar. Dieser Wert entspricht einer guten
Signalqualitt, somit kann der Quantisierungsfehler bei der Digitalisierung mit einem
ertrglichen technischen Aufwand relativ klein gehalten werden.
Fr die nchsten Betrachtungen wird die Stufenkennlinie mittels einer Geraden
durch die Quantisierungsintervallmitten ersetzt (Umsetzerkennlinie). Der ideale lineare
AD-Umsetzer hat dann eine Umsetzerkennlinie, wie sie in Abb.12.26 dargestellt ist.
Verwendet man fr Ein- und Ausgangsgren gleiche Mastbe, verluft die ideale
Kennlinie unter 45. Weicht ein Umsetzer von dieser Kennlinie ab, ist er fehlerhaft.
12.4.1.2Offsetfehler
Anschaulich gesehen liegt ein Offsetfehler (Zero Error) vor, wenn die Umsetzerkennlinie gegenber der idealen Kennlinie parallelverschoben ist (Abb.12.27, links).
Ursache hierfr ist beispielsweise ein Offsetfehler des Eingangsverstrkers. Konkret
entspricht dieser Fehler der Lageabweichung des ersten bergangswerts oberhalb
von Null von der Ideallage bei 0,5Q (siehe auch Abb.12.8). Der Offsetfehler verursacht einen konstanten absoluten Fehler im gesamten Aussteuerbereich und ist auf null
abgleichbar.
Die Angabe des Offsetfehlers im Datenblatt erfolgt blicherweise in Bruchteilen des
Aussteuerbereichs. Der Offsetfehler hat darber hinaus einen Temperatur-Koeffizienten,
der nur mit groem Aufwand kompensiert werden kann.
12.4.1.3Verstrkungsfehler
Anschaulich gesehen liegt ein Verstrkungsfehler (Gain Error) vor, wenn die Kennliniensteigung von der idealen Steigung 1 abweicht (Abb.12.27, rechts). Er verursacht einen
konstanten relativen Fehler im Aussteuerbereich und ist auf null abgleichbar.
Die exakte Definition des Verstrkungsfehlers ist die Abweichung der real vorliegenden Spannungsdifferenz zwischen dem ersten bergangswert bei 0,5Q und dem letzten
bei Umax1,5Q vom idealen Wert (siehe Abb.12.8).
382
Id
e
al
er
W
an
dl
er
Digitalsignal
111...1
000...0
0
Analogsignal
U*max
12.4.1.4Nichtlinearitt
Die Nichtlinearitt (Nonlinearity) eines Umsetzers, auch Integrale Nichtlinearitt (INL)
genannt, entspricht der maximalen Kennlinienabweichung von der Geraden durch die
Endpunkte des Diagramms.
Nach Abgleich der Offset- und Verstrkungsfehler entspricht sie der maximalen
Abweichung von der idealen Kennlinie (Abb.12.28). Gelegentlich wird allerdings in
Datenblttern die Nichtlinearitt auch als maximale Abweichung von der bestmglichen
Geraden interpretiert. Dann ist ein Offsetfehler einzustellen, damit die Nichtlinearitt
den Herstellerangaben entspricht.
Der Grund fr Nichtlinearitten sind ungleich groe Quantisierungsintervalle. Die
Nichtlinearitt kann durch mehrere benachbarte Quantisierungsintervalle verursacht werden, welche Abweichungen in gleicher Richtung haben. Die Angabe der Nichtlinearitt
erfolgt blicherweise in Bruchteilen des LSB.
an
dl
Digitalsignal
000...0
000...0
0
Analogsignal
U*max
r
it
m hle
er sfe
l
d g
an n
W rku
t
rs
Ve
rW
le
ea
Id
Id
Digitalsignal
er
111...1
W
O an
ffs dl
et er
ea
fe m
le
hl it
rW
er
an
dl
er
111...1
Analogsignal
U*max
383
12.4.1.5Differenzielle Nichtlinearitt
Als differenzielle Nichtlinearitt (Differential Nonlinearity) bezeichnet man die
Abweichung der Breite eines Quantisierungsintervalls vom Idealwert Q. Dabei
bezieht man sich auf dasjenige Quantisierungsintervall mit der grten Abweichung
(Abb.12.29).
Die Angabe im Datenblatt erfolgt blicherweise in Bruchteilen eines LSB. Ist die differenzielle Nichtlinearitt im Datenblatt beispielsweise mit 0,5 LSB angegeben, mssen alle Quantisierungsintervalle im Bereich 1 LSB 0,5 LSB liegen. Eine Sonderform
der differenziellen Nichtlinearitt liegt vor, wenn einzelne Codeworte fehlen (Missing
Code). In diesem Falle betrgt sie 1LSB.
12.4.1.6Monotoniefehler
Ein Umsetzer hlt die Monotonitt (Monotonicity) ein, wenn die Umsetzerkennlinie fr
steigende Eingangswerte stufenweise monoton ansteigt. Hinreichende Bedingung fr
Monotonitt ist, dass die Nichtlinearitt kleiner als 2 LSB bleibt. Eine Kennlinie, die
diese Bedingung nicht einhlt, ist in Abb.12.30 gezeigt.
12.4.1.7Betriebsspannungsabhngigkeit der Umsetzerparameter
Die Ausgangsgren von Umsetzern sind auch von der Betriebsspannung abhngig.
In den Datenblttern wird diese Eigenschaft als Power Supply Sensitivity (bzw. Power
Supply Rejection) bezeichnet. Die Angabe erfolgt als prozentuale nderung der
Ausgangsgren dividiert durch prozentuale nderung der Betriebsspannung. In
der Regel bezieht sie sich auf Tracking-Netzteile, bei denen die beiden Spannungen
unterschiedlicher Polaritt sich nur symmetrisch ndern knnen. Eine Verwendung
getrennter Netzteile fr positive und negative Betriebsspannung wirkt sich in dieser
Beziehung nachteilig aus.
111...1
Ideale Kennlinie
Digitalsignal
Abb.12.28 Integrale
Nichtlinearitt
Realer
Wandler
Nichtlinearitt
000...0
0
Analogsignal
U*max
384
Abb.12.29 Differenzielle
Nichtlinearitt
111...1
Quantisierungskennlinie:
Real
Digitalsignal
Ideal
Real
Ideal
000...0
0
Analogsignal
U*max
Digitalsignal
111...1
Nichtmonotone
Kennlinie
Missing
Code
Nichtlinearitt = 2 LSB
000...0
0
Analogsignal
U*max
385
12.4.2.1Einschwingzeit
Die Einschwingzeit (Acquisition Time) eines DAUs ist die Zeit, die ntig ist, damit sich
die Spannung bzw. der Strom bei einem Sprung ber den gesamten Aussteuerbereich in
einen Toleranzschlauch zurckzieht, der die Breite eines LSB hat und symmetrisch zum
stationren Endwert liegt (Abb.12.31). Die Einschwingzeit setzt sich aus Verzgerungs-,
Anstiegs- und berschwingzeit zusammen. Erst nach Verstreichen der Einschwingzeit
entsprechen die Messwerte der geforderten Genauigkeit. Die berschwingzeit wird auch
als Settling Time bezeichnet.
12.4.2.2Signal-Rausch-Abstand und Effektive Auflsung
Das Verhltnis der Leistung S eines den ADU vollkommen aussteuernden Sinussignals
zur Quantisierungsgeruschleistung N entspricht dem Signal-Rausch-Abstand SNR (Signal to Noise Ratio):
S
SNR = 10 log dB
N
Fr eine praxisgerechte Gre mssen neben den Quantisierungsfehlern alle weiteren
Fehler D (Distortion) bei der Umsetzung bercksichtigt werden. D ist die Leistung der
weiteren Verzerrungen, die durch nichtideales Verhalten der Bauelemente entstehen. Die
daraus resultierende Kenngre wird als SINAD (SIgnal to Noise And Distortion ratio)
bezeichnet und wird durch Messungen ermittelt:
SINAD = 10 log
S
dB
N +D
Der Signal-Rausch-Abstand eines idealen ADUs bercksichtigt nur die Quantisierungsfehler und errechnet sich zu (siehe Abschn.12.4.1):
s(t)
Verzgerungszeit
berschwingzeit
Anstiegszeit
t
Einschwingzeit
386
der Signalfrequenz wird daher zur Beurteilung der dynamischen Qualitt eines ADUs
herangezogen.
Benutzt man die gemessenen SINAD-Werte, setzt sie in die obige Beziehung ein und
stellt diese nach n um, gewinnt man als quivalentes Qualittskriterium die effektive
Auflsung n (Effective Number Of Bits, ENOB) gem:
n =
SINAD 1, 76dB
6, 02dB
Ein realer ADU mit der Auflsung von n bit entspricht also in seinem dynamischen
Verhalten einem fiktiven idealen ADU mit der Auflsung von n bit, wobei n kleiner
als n ist. Der Wert von n ist abhngig von der Frequenz des gemessenen Signals und
nimmt fr hhere Frequenzen ab. Ein typischer Verlauf der effektiven Auflsung ist in
Abb.12.32 dargestellt.
12.4.2.3Harmonische Verzerrungen
Zur Bestimmung der Harmonischen Verzerrungen THD (Total Harmonic Distortion)
werden bezglich der Anzahl verwendeter Oberwellen unterschiedliche Definitionen
benutzt. Sie reichen von 2 bis zur Gesamtzahl aller messbaren Oberwellen. Die Firma
Analog Devices benutzt zum Beispiel 5 Oberwellen. Damit ergibt sich die Total Harmonic Distortion zu:
THD = 10 log
Dabei entspricht U0 dem Effektivwert der Grundwelle und Ui ist der Effektivwert der
i-ten Oberwelle.
12.4.2.4Histogramm
Das Histogramm gestattet Aussagen darber, wie sich bei einem ADU unter dynamischer
Belastung Integrale und Differenzielle Nichtlinearitten verhalten. Dazu wird der ADU
mit einem vollaussteuernden Eingangssignal konstanter Verteilungsdichte gespeist und in
einem Digitalrechner die Hufigkeitsverteilung der einzelnen Codeworte durch Zhlung
ermittelt. Wird ein anderes Testsignal (z.B. Sinus) verwendet, kann die Abweichung von
einer konstanten Verteilungsdichte rechnerisch kompensiert werden.
Abb.12.32 Prinzipieller
Verlauf der effektiven
Auflsung n in bit ber der
Frequenz fr einen realen
n-Bit-ADU
Idealer ADU
Realer ADU
n=g(f)
f
fabt/2
387
Die grafische Darstellung der relativen Hufigkeiten H ber den Codeworten ist das
Histogramm (diskrete Verteilungsdichte). Ein Prinzipbeispiel zeigt Abb.12.33.
Fr einen in dieser Hinsicht idealen ADU gilt H=konstant. Nichtideale Umsetzer
weichen hiervon ab. Zeigt das Histogramm etwa benachbarte Spitzen oder Einbrche,
sind das Hinweise auf Differenzielle Nichtlinearitten. Fehlt eine Linie vllig, ist das
zugehrige Codewort nicht ansprechbar (Missing Code).
12.4.2.5Glitch-Flche
Die dynamischen Eigenschaften speziell von DAUs knnen durch die Einschwingzeit
nicht hinreichend beschrieben werden. Abhngig von Toleranzen der elektronischen
Stromschalter knnen nmlich am Ausgang kurzzeitig sehr hohe Strimpulse, sogenannte Glitches, auftreten.
Als Beispiel wird betrachtet, dass sich der Eingangscode eines 8-Bit-DAU von
01111111 auf 10000000 ndert. Alle elektronischen Stromschalter am Leiternetzwerk
werden in diesem Falle umgeschaltet. In der Realitt geschieht dieses jedoch nicht
exakt gleichzeitig. Es wird angenommen, dass der Schalter fr das MSB schneller
als die anderen schaltet. Dann wird kurzzeitig der Zwischencode 1111
1111
angenommen. Dieses fhrt am Ausgang zu einem Strimpuls, dessen Hhe dem halben
Aussteuerbereich nahekommt, obwohl der Wert sich eigentlich nur um 1LSB ndern
soll.
Im Datenblatt wird diese Gre durch das Integral ber die Glitch-Funktion, also die
Glitch-Flche, zum Beispiel in der Einheit nVs bei spezifiziertem Messmodus angegeben. Dieser Wert sollte mglichst klein sein.
Einige Hersteller sehen einstellbare Korrekturschaltungen zur Minimierung der
Glitch-Flche vor. Glitches knnen auch vermieden werden, indem der Ausgang des
DAUs nach Abklingen der Einschwingvorgnge durch Track-and-Hold-Glieder abgetastet und bis zur nchsten Umsetzung konstant gehalten wird. Teilweise sind derartige Deglitch-Einrichtungen bereits in den DAUs enthalten. Allerdings vergrert sich
dadurch die Gesamteinschwingzeit des Umsetzers.
Abb.12.33 Prinzipielle
Darstellung eines Histogramms
H fr einen ADU mit
4096 darstellbaren Stufen,
entsprechend 12 Bit
ideal
...
...
4095
Codewort
388
389
Als Beispiel fr Umsetzer mit serieller Ansteuerung werden die Bausteine MCP3201
und MCP4921 von der Firma Microchip betrachtet. Sie verwenden das Serial Peripheral
Interface (SPI), welches auch in Kapitel11 fr ein FRAM mit seriellem Interface
verwendet wurde.
12.5.1.1AD-Umsetzer MCP3201
Der Baustein MCP3201 ist ein Analog-Digital-Umsetzer mit 12 bit Auflsung und einer
Abtastrate von 100 kHz bei 5V Betriebsspannung und 50 kHz bei 2,7V Betriebsspannung. Die Umsetzung erfolgt mit dem Wgeverfahren und sukzessiver Approximation
(SAR). Der Baustein bentigt lediglich acht Pins und ist damit sehr kompakt. Seine
Anschlsse sind:
390
SCK
/CS
SDO
11 10 9 8 7 6 5 4 3 2 1 0
tsample
Abtastung
tu
AD-Umsetzung
tdata
Abschluss der
Datenausgabe
SPI-Schnittstelle erzeugt damit 16 Flanken an SCK und liest 16Bit Daten. Aus diesen
16Bit werden die gltigen 12Bit der AD-Umsetzung extrahiert.
12.5.1.2DA-Umsetzer MCP4921
Der Baustein MCP4921 ist ein Digital-Analog-Umsetzer mit 12 bit Auflsung und externer Referenzspannung. Er arbeitet im Direktverfahren. Es gibt verwandte Produkte mit
10 und 8 bit Auflsung, mit zustzlicher interner Referenzspannung sowie mit zwei Ausgngen. Genau wie der zuvor betrachtete MCP3201 hat auch der MCP4921 acht Pins
und ist sehr kompakt. Seine Anschlsse sind:
391
/CS
SCK
SDI
B G S 11 10 9 8 7 6 5 4 3 2 1 0
Konfiguration
Datenbits
/LDAC
VOUT
/GA (Gain): Es ist ein Ausgabeverstrker vorhanden, fr den der Faktor 1 oder 2
gewhlt werden kann.
/SHDN (Shutdown): Der Analogausgang kann zur Verringerung der Verlustleistung
abgeschaltet werden.
Dieses Dateninterface ist sehr einfach. Bei jedem Takt wird ein Datenwort mit 10Bit
ausgegeben. Der Out-of-Range Indicator gibt an, wenn die Eingangswerte auerhalb des
Messbereichs liegen. Der Datenausgang wird dann auf den kleinsten oder grten Wert
limitiert. In Verbindung mit dem MSB des Datenausgangs kann unterschieden werden,
ob ein berlauf oder ein Unterlauf auftritt.
392
Analoge
Spannung
N+3
N+2
N+1
393
N+4
CLK+
CLK
DCO+
DCO
Datenbit 15 des
Abtastzeitpunkts N-16
D1
D0
N-17
D15N-16
D1
D0
D1N-16
D1
N-16
...
D0
D1
N-15
D14N-16
D1N-16
D0
N-14
D1
D0
N-13
D15N-15
D14N-15
D0N-15
D0N-15
...
Abtastzeitpunkt des
Ausgabewerts
D0
N-18
...
D1
...
D1+/D0+
D1/D0
...
D15 D14 D15 D14 D15 D14 D15 D14 D15 D14 D15 D14
...
D15+/D14+
D15/D14
und gelesen werden. Diese Konfiguration betrifft analoges und digitales Verhalten,
beispielsweise:
Justierung des Spannungsmessbereichs
Wahl des Datenformats zwischen dual, 2er-Komplement und Gray-Code
Ausgabe vordefinierter Daten zu Testzwecken
394
Ausgnge Eingnge
des AD-Umsetzers
Fr die Taktrekonstruktion muss sichergestellt sein, dass die Daten gengend Taktflanken besitzen. Wird beispielsweise der Wert 0 mit 00000000 codiert und mehrfach
nacheinander ausgegeben, kann der Empfangsbaustein hieraus keinen Takt erkennen. Als
Lsung dieses Problems wird ein spezieller Code mit redundanter Wortlnge verwendet. Dazu werden die 8Bit eines Byte mit 10Stellen codiert. Von den 1024 mglichen
Codewrtern werden nur solche verwendet, bei denen mindestens alle 5Takte eine Signalflanke auftritt. Damit ist sichergestellt, dass der Takt aus den Daten zurckgewonnen
werden kann. Der entsprechende Code wird als 8b/10b-Code bezeichnet und auch fr
andere Anwendungen in der Kommunikationstechnik verwendet.
Der Baustein ADC32J45 von Texas Instruments ist ein ADU mit JESD204BSchnittstelle. Er hat zwei Analogeingnge und setzt diese mit einer Abtastrate von
160MHz und 14 bit Genauigkeit um. Fr die Konfiguration des Bausteins ist zustzlich
ein SPI-Port vorhanden.
Abb.12.37 zeigt die wichtigsten Signale des JESD204B-Datenausgangs in
vereinfachter Darstellung. Der Baustein erhlt vom Signalverarbeitungs-ASIC den Takt
CLK und das Steuersignal SYNC, beide als differentielles LVDS-Signal. Vom ADU
gehen zwei LVDS-Signale DA und DB mit den Daten der beiden Analogeingnge an
das Signalverarbeitungs-ASIC. Die Datenbertragung erfolgt im 8b/10b-Format mit
10-facher Geschwindigkeit des Taktsignals. Bei positivem und bei negativem Pegel von
CLK wird jeweils ein Byte und somit pro Taktzyklus die 14Bit des Messwertes und
2ungenutzte Bits bertragen.
Mit dem Steuersignal SYNC wird am Beginn einer bertragung der Empfangstakt
im Signalverarbeitungs-ASIC synchronisiert. Ist SYNC+ gleich 0 sendet der ADU ein
festes Steuerwort. Sobald dieses Steuerwort mehrfach korrekt erkannt wurde, ist die
Taktsynchronisierung erfolgt und SYNC+ wird auf 1 gesetzt. Danach sendet der ADU
noch Steuerworte zur sogenannten Framesynchronisierung und dann folgen die Daten
der AD-Umsetzung.
Fr die Synchronisierung und Decodierung des 8b/10b-Codes ist im
Signalverarbeitungs-ASIC ein entsprechendes Schaltungsmodul erforderlich. Fr FPGAs
CLK+
CLK
...
...
SYNC+
SYNC
...
...
DA+
DA
...
...
DB+
DB
...
...
Taktsynchronisation
Abb.12.37
Vereinfachter
JESD204B-Schnittstelle
Zeitablauf
am
Framesynchronisation
Datenausgang
Datenbertragung
des
ADUs
ADC32J45
mit
12.6bungsaufgaben
395
12.6 bungsaufgaben
Haben Sie den Inhalt des Kapitels verstanden? Prfen Sie sich mit den Aufgaben und
Fragen am Kapitelende. Die Lsungen und Antworten finden Sie am Ende des Buches.
Aufgabe 12.1
Ordnen Sie den AD-Umsetzern jeweils die passende Kurzbeschreibung zu.
a) Dual-Slope-Verfahren
b) Parallelverfahren
c) Sigma-Delta-Umsetzer
d) Wgeverfahren
1. Gleichzeitiger Vergleich mit 2n1 Komparatoren
2. Integration von Referenzspannung und Messspannung
3. Hohe berabtastung des Eingangswertes und 1-Bit-Umsetzung
4. Schrittweise Bestimmung der einzelnen Bits
Aufgabe 12.2
Ordnen Sie den DA-Umsetzern jeweils die passende Kurzbeschreibung zu.
a) Pulsweitenmodulation
b) Summation gewichteter Strme
c) Direktverfahren
d) R-2R-Leiternetzwerk
1. Verwendung von 2n gleichen Widerstnden
2. Verwendung von einer Widerstandskette mit Widerstnden gleicher Grenordnung
3. Verwendung von Widerstnden mit den Werten R, R/2, R/4, R/8, R/16, R/32,
4. Mittelwertbildung aus zwei Spannungswerten
Aufgabe 12.3
Ein ADU hat einen Aussteuerbereich Umax von 3V und eine Wortbreite von n=10 bit.
a) Wie gro ist die Quantisierungsintervallbreite Q?
b) Wie gro ist der hchste codierbare Spannungswert?
c) Welche Codierung ergibt sich fr die Spannung 1,2 V?
d) Am Ausgang wird der Code 0001001011 ausgegeben. In welchem Bereich ist der
Spannungswert?
396
Aufgabe 12.4
Ein ADU im Wgeverfahren hat einen Aussteuerbereich Umax von 2V und eine Wortbreite von n=8 bit.
a) Wie gro ist die Quantisierungsintervallbreite Q?
b) Am Eingang liegt die Spannung 0,7V an. Geben Sie die Schritte der AD-Umsetzung
an. Welche Codierung ergibt sich fr die Spannung?
Aufgabe 12.5
Ein Sigma-Delta-Umsetzer hat einen Messbereich von 1V und der Analogeingang Ux
betrgt 0,2V.
a) Geben Sie den Zeitverlauf einer AD-Umsetzung an. Nehmen Sie an, dass im ersten
Zeitschritt die Rckfhrung Udig=0V ist und dass der Integrator mit der Spannung
Uint=0V startet (Tab.12.4).
b) Interpretieren Sie die Ausgabewerte.
Aufgabe 12.6
Ein PWM-Ausgang hat den in Abb.12.38 dargestellten Zeitverlauf. Welche Ausgangsspannung wird durch das Signal erzeugt?
Tab.12.4Zeitablauf fr bungsaufgabe zum Sigma-Delta-Umsetzer
Zeit
schritt
Ux
[in V]
0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2
Udig
[in V]
10
11
12
13
14
15
Udiff
[in V]
Uint
[in V]
Plus
[binr]
u(t)
3V
0V
0
10
18
20
28
30
t
[ms]
13
Mikroprozessoren und Mikrocontroller sind komplexe, hochintegrierte digitale Schaltkreise, auf deren Basis leistungsfhige Rechnersysteme realisiert werden.
Einer der wichtigsten Meilensteine auf dem Weg zu modernen Rechnersystemen war
die kommerzielle Realisierung des ersten integrierten Mikroprozessors. Zu Anfang der
1970er Jahre gelang dies der Firma Intel. Im Jahr 1977 schloss sich die Einfhrung von
Mikrocontrollern an, die ein gesamtes Rechnersystem mit Prozessor, Speicher und weiteren Komponenten auf einem einzelnen Chip integrieren. In den folgenden Jahren setzte
eine strmische Entwicklung im Bereich der Mikroprozessortechnik ein, die insbesondere durch die fortschreitende Integrationsdichte digitaler Schaltkreise untersttzt wurde.
Heute sind Rechnersysteme, die auf Mikroprozessoren oder Mikrocontrollern basieren,
integraler Bestandteil des tglichen Lebens geworden. Sie werden als PCs realisiert und
untersttzen den Anwender zum Beispiel bei der Broarbeit oder dem Recherchieren im
Internet. Auch in Mobiltelefonen, Digitalkameras, Gerten der Unterhaltungselektronik
oder in Hausgerten, Kraftfahrzeugen und industriellen Anlagen arbeitet eine Vielzahl
von digitalen Rechnersystemen.
Im Rahmen dieses Kapitels werden die wesentlichen Grundlagen der Mikroprozessortechnik beschrieben. Sie bilden die Basis fr das Verstndnis von konkreten Rechnern,
wie zum Beispiel der in Kapitel14 vorgestellten Mikrocontroller.
397
398
Abb.13.1 Blockschaltbild
eines Rechners auf Basis der
Von-Neumann-Architektur
CPU
Register
Speicher
Rechenwerk
(ALU)
Steuerwerk
Ein-/Ausgabe
399
&38
6WHXHUEXV
'DWHQEXV
$GUHVVEXV
)ODVK
5$0
$XVJDEH
6SHLFKHU
(LQJDEH
400
der jeweils ausgewhlten Komponente auf den Adressbus gelegt wird. Da die Adressen von
dem Programm, welches von der CPU ausgefhrt wird, berechnet werden mssen, ist es
fr die Programmierung des Systems von wesentlicher Bedeutung, die Adressen zu kennen,
unter denen die Systemkomponenten angesprochen werden. Diese Adressen werden hufig
in grafischer Form als eine sogenannte Address Map zur Verfgung gestellt.
Eine mgliche Address Map fr das gezeigte Beispielsystem ist in Abb.13.3 links
dargestellt. Die Auswahl zwischen Speicher und Ein-/Ausgabeeinheiten wird in diesem
Fall nur durch die auf dem Adressbus anliegende Adresse durchgefhrt. Adressen im
Bereich von 0x0000 bis 0x5FFF adressieren die Speicherelemente des Systems, whrend
mit Adressen im Bereich 0xC000 bis 0xFFFF auf Eingabe- und Ausgabekomponenten
zugegriffen werden kann. Man spricht in diesem Fall auch davon, dass sich der Speicher
und die Ein-/Ausgabeeinheiten einen gemeinsamen Adressraum teilen. Der Fachbegriff fr diesen Ansatz lautet Memory-Mapped-I/O.
Als Alternative knnen auch getrennte Adressrume fr Speicher und Ein-/Ausgabekomponenten verwendet werden. In diesem Fall spricht man von Port Mapped I/O. Eine
mgliche Adressierung der Systemkomponenten des Beispielsystems ist in Abb.13.3
rechts angegeben. Die Adressierung der Systemkomponenten erfolgt nun mithilfe der
Adresse und der zustzlichen Information, ob ein Speicherzugriff oder ein Zugriff auf
die Ein-/Ausgabe erfolgen soll. Letztere wird den Komponenten mithilfe des Steuerbusses zur Verfgung gestellt.
Beide Anstze werden fr Rechnersysteme in der Praxis verwendet. Ein gemeinsamer Adressraum vereinfacht die Programmierung, was dem Programmierer oder rechnergesttzten Werkzeugen wie Compilern zugute kommt. Auf der anderen Seite kann bei
Verwendung von zwei getrennten Adressrumen unter Umstnden eine Beschleunigung
des Zugriffs auf Ein-/Ausgabekomponenten erfolgen, was sich positiv auf die Rechenzeit
eines Programms auswirken kann.
a) Memory-Mapped I/O
b) Port-Mapped I/O
Ausgabe
Eingabe
0xE000
0xC000
ungenutzt
ungenutzt
ungenutzt
0x6000
SRAM
0x4000
SRAM
Ausgabe
0x4000
Flash
Flash
0x0000
0x0000
Eingabe
401
402
403
fr die Aufnahme des Ergebnisses). Damit werden fr diesen Befehl 21Bit belegt. Die
verbleibenden 11Bit knnen einen beliebigen Wert besitzen.
Mchte man dagegen eine Addition mit einem Registerwert und einer Konstanten
durchfhren, wird diese Konstante hufig mit im Befehlswort abgelegt. Da hierbei ein
Register weniger ausgewhlt werden muss (ein Summand ist ja die Konstante), werden
also fr die Operation und die Registerauswahl 16Bit bentigt und es verbleiben 16Bit
fr die Konstante, die gegebenenfalls mithilfe einer Vorzeichenerweiterung (vgl. Kapitel2)
auch auf eine grere Wortbreite erweitert werden kann.
Bei einem Sprungbefehl ist es ausreichend die Operation Sprung mit 6Bit zu kennzeichnen. Die verbleibenden 26Bit geben dann das Sprungziel (die Adresse des nchsten
Befehls) an.
In Abb.13.4 ist ein mglicher Aufbau des Befehlswortes fr die drei hier diskutierten
Beispiele dargestellt.
Abb.13.4 Beispiele fr
den Aufbau eines 32-BitBefehlswortes
26
Op
21
Re
16
Ro1
11
Ro2
0
ungenutzt
26
21
Re
Op
16
Ro1
0
16-Bit-Konstante
Sprung
31
26
Op
0
26-Bit-Sprungziel
Op: Operation
Re: Ergebnisregister
Ro: Operandenregister
404
13.3.3 Transferbefehle
Sollen zwei Daten, die im Speicher des Systems abgelegt sind, zum Beispiel durch Addition miteinander verknpft werden, ist dies bei typischen Mikroprozessoren nicht mithilfe eines einzelnen Befehls durchfhrbar. Vielmehr muss zunchst ein Operand aus
dem Speicher des Systems in einen Zwischenspeicher innerhalb der CPU kopiert werden. Im Anschluss daran kann mithilfe eines weiteren Befehls die eigentliche Addition
der Daten erfolgen.
Daneben ist es hufig auch erforderlich, Daten zum Beispiel aus einer Eingabeeinheit in den Speicher des Systems zu kopieren, ohne die Daten hierbei zu modifizieren.
Fr beide Flle stellen Prozessoren Datentransferbefehle zur Verfgung, mit denen Daten
zwischen Speicher und CPU oder Eingabe- oder Ausgabeeinheiten und CPU ausgetauscht werden knnen. Die unterschiedlichen Befehle zum Kopieren von Daten knnen
unter dem Begriff Transferbefehle zusammengefasst werden.
405
13.3.5 Spezialbefehle
Viele Mikroprozessoren stellen Befehle zur Verfgung, die nicht einer der zuvor diskutierten Befehlsklassen zugeordnet werden knnen. Ein Befehl dieser Klasse ist der
406
Abb.13.5 Unmittelbare
Adressierung
Befehlswort
Operand
zum
Rechenwerk
407
'DWHQVSHLFKHU
%HIHKOVZRUW
$GUHVVH
2SHUDQG
Register
Datenspeicher
Adresse
Operand
]XP
5HFKHQZHUN
Befehlswort
Register
auswahl
Abb.13.7Indirekte Adressierung
zum
Rechenwerk
408
ist theoretisch beliebig whlbar. So knnte bei Verwendung eines Befehls mit AutoInkrement zunchst das Register inkrementiert werden. Der so erhaltene Wert knnte
anschlieend zur Adressierung des Operanden verwendet werden. Ebenso ist es denkbar,
dass der aus dem Register ausgelesene Wert direkt zur Adressierung verwendet und erst
anschlieend inkrementiert wird. Der erste Fall wird als Pre-Inkrement, der zweite Fall
als Post-Inkrement bezeichnet. Analog kann die indirekte Adressierung ebenso sowohl
mit Pre-Dekrement als auch Post-Dekrement implementiert werden. Abb.13.8 und 13.9
stellen die indirekte Adressierung mit Post-Inkrement und Pre-Dekrement schematisch
dar.
Als eine weitere Variante der indirekten Adressierung setzen Mikroprozessoren vielfach die indirekte Adressierung mit Verschiebung ein. Bei Verwendung dieser Adressierungsart ergibt sich die Adresse des Operanden aus der Summe des aus dem Registerwert
und eines Offsetwertes der als Konstante im Befehlswort abgelegt ist. Der so berechnete
Wert wird lediglich zur Adressierung verwendet. Eine Vernderung des Adressspeichers,
wie sie bei der indirekten Adressierung mit Auto-Inkrement beziehungsweise AutoDekrement erfolgt, findet hierbei nicht statt.
Darber hinaus kann der Offset, der bei der indirekten Adressierung verwendet
wird, auch in einem zur Laufzeit des Programms vernderbaren Indexspeicher abgelegt
werden. In diesem Fall enthlt das Befehlswort neben der Registerauswahl auch eine
Adresse des Indexspeichers. Beide Speicher werden bei der Ausfhrung des Befehls ausgelesen. Die Summe der beiden ausgelesenen Werte ergibt die Adresse des Operanden,
der dem Rechenwerk zugefhrt wird. Diese Adressierungsart wird auch als indirekt indizierte Adressierung oder kurz indizierte Adressierung bezeichnet (Abb.13.10).
Datenspeicher
Register
Befehlswort
Register
auswahl
Adresse
+1
Operand
zum
Rechenwerk
Datenspeicher
Register
Befehlswort
Register
auswahl
Adresse
-1
Operand
zum
Rechenwerk
409
Register
Befehlswort
Offset
Register
auswahl
Adresse
Operand
zum
Rechenwerk
410
eines Stapelspeichers mithilfe eines Stapelzeigers kann die indirekte Adressierung mit
Auto-Inkrement beziehungsweise Auto-Dekrement eingesetzt werden. Ein Schreibzugriff erfolgt dann mithilfe einer indirekten Adressierung mit Post-Dekrement, whrend
ein Lesezugriff die indirekte Adressierung mit Pre-Inkrement verwendet.
13.4.5 Befehlsadressierung
Fr die Adressierung der abzuarbeitenden Befehle verwendet ein Mikroprozessor ein
besonderes Register, den sogenannten Programmzhler (Program Counter, PC). Der PC
wird vom Steuerwerk der CPU normalerweise mit der Abarbeitung eines Befehls inkrementiert, sodass automatisch der jeweils nachfolgende Befehl im Programmspeicher
adressiert wird. Wird dagegen ein Sprungbefehl ausgefhrt, muss die Adressierung des
Programmspeichers entsprechend modifiziert werden. Hierzu werden von den meisten
Mikroprozessoren eine absolute Adressierung, eine relative Adressierung und eine indirekte Adressierung zur Verfgung gestellt. Zur Unterscheidung zwischen Datenadressierung und Befehlsadressierung werden diese Adressierungsarten auch als PC-absolute,
PC-relative oder PC-indirekte Adressierung bezeichnet.
Im Fall der absoluten Adressierung wird der Programmzhler mit einer im Sprungbefehl angegebenen Konstanten geladen. Die Programmausfhrung wird somit an der Position fortgesetzt, die durch die Konstante festgelegt ist.
Die relative Adressierung verwendet ebenfalls eine im Befehlswort abgelegte Konstante. Die Summe aus dieser Konstanten und dem aktuellen PC ergibt den neuen Programmzhler. Whrend die absolute Adressierung also einen Befehl ausfhrt, der sich
mit springe zu Programmspeicheradresse XYZ umschreiben lsst, fhrt die PC-relative Adressierung einen Befehl aus, der mit springe um XYZ Programmspeicheradressen beschrieben werden kann.
Im Fall der PC-indirekten Adressierung wird der neue Wert des PCs, hnlich der
indirekten Datenadressierung, aus einem Adressspeicher ausgelesen und in den Programmzhler bertragen. Die auszulesende Position des Adressspeichers wird hierbei als
Konstante im Befehlswort angegeben.
411
13.5.2 Parallelitt
Eine Erhhung der Rechenleistung kann auch erzielt werden, indem mehrere Operationen gleichzeitig ausgefhrt werden. Dies kann sowohl durch parallele Einheiten im
Rechenwerk als auch durch die Verwendung mehrerer Mikroprozessoren ermglicht
werden.
Im Idealfall steigt die verfgbare Rechenleistung proportional zu der im Rechenwerk
implementierten Parallelitt. In der Praxis wird dieser theoretische Anstieg meist nicht
erreicht. Programme bilden in der Regel sequenzielle Verarbeitungsschritte ab. Inwieweit
diese Verarbeitungsschritte, entgegen der vom Programmierer vorgegebenen sequenziellen Abarbeitungsreihenfolge, auch zeitgleich ausgefhrt werden knnen, ist sehr stark
vom Programm abhngig. Im ungnstigsten Fall muss fr jede Operation die jeweils vorangegangene Operation abgearbeitet werden, da zum Beispiel das Ergebnis der ersten
Operation als Operand fr den nachfolgenden Befehl bentigt wird. In diesem Fall kann
die Parallelitt des Rechenwerks nicht ausgenutzt werden und es wre keine Erhhung
der Rechenleistung erreichbar.
Geht man davon aus, dass ein Programm aus ideal parallelisierbaren (die bentigte
Rechenzeit verhlt sich annhernd umgekehrt proportional zur eingesetzten Parallelitt)
und nicht-parallelisierbaren Anteilen besteht, kann der Rechenleistungsgewinn durch die
folgenden Formel angeben werden:
G=
1
(s + p/N)
412
13.5.3 Pipelining
Eine weitere Mglichkeit zur Erhhung der Rechenleistung ist der Einsatz von Pipelining, welches im deutschen Sprachraum auch hufig mit Fliebandverarbeitung bersetzt wird.
Das Grundprinzip der Fliebandverarbeitung in der industriellen Produktion ist,
dass an verschiedenen Stationen spezialisierte Teilaufgaben durchgefhrt werden. Nach
Durchlaufen aller Stationen ist das Endprodukt fertiggestellt. Da hierbei immer mehrere
Stationen gleichzeitig aktiv sind, kann die Fliebandverarbeitung auch als eine besondere Form der Parallelverarbeitung aufgefasst werden. Der Unterschied zu der im vorangegangenen Abschnitt beschriebenen Form der Parallelverarbeitung ist jedoch, dass
im Fall des Pipelinings jede Station nur einen ausgewhlten Teil der gesamten Verarbeitungsaufgabe ausfhrt und das so erhaltene Arbeitsergebnis an die nachfolgende Station
weiterreicht. Dieses Grundprinzip wird in Mikroprozessoren bei Befehlsabarbeitung
eingesetzt.
In Abschn.13.2 wurden die einzelnen Schritte zur Verarbeitung eines Befehls exemplarisch vorgestellt. Hierbei wurde die Verarbeitung eines Befehls durch die Ausfhrung
413
von 5 Teilschritten vorgenommen. Ohne Einsatz von Pipelining wrden alle Teilschritte
eines Befehls durchlaufen bevor die Ausfhrung des nachfolgenden Befehls begonnen
wird. Nimmt man vereinfachend an, dass alle Teilschritte eine identische Verarbeitungszeit TS bentigen, wrde die Bearbeitung eines Befehls also 5TS erfordern.
Wird dagegen jeder Teilschritt durch eine eigenstndige Einheit ausgefhrt, kann jede
dieser Einheiten nach Bearbeitung eines Teilschritts sofort mit der Ausfhrung des nachfolgenden Befehls beginnen. Im Idealfall besitzen alle Verarbeitungsschritte identische
Verzgerungszeiten. Dann kann bereits nach der Zeit TS die Verarbeitung eines neuen
Befehls mit dem ersten Teilschritt beginnen kann, whrend fr den vorangegangenen
Befehl zeitgleich der zweite Teilschritt ausgefhrt wird.
In Abb.13.11 ist der zeitliche Verlauf der Verarbeitung von Befehlen ohne und mit
Einsatz von Pipelining dargestellt. Zum Zeitpunkt t=0 beginnt in beiden Fllen die
Ausfhrung des ersten Befehls. Wird Pipelining verwendet, kann bereits zum Zeitpunkt
t=TS mit der Ausfhrung eines weiteren Befehls begonnen werden. Zum Zeitpunkt
t=5TS ist fr beide Flle die erste Instruktion komplett abgearbeitet. Bei Verwendung von Pipelining ist zu diesem Zeitpunkt bereits die Verarbeitung von vier weiteren
Befehlen begonnen worden, whrend ohne Einsatz von Pipelining erst die Ausfhrung
des zweiten Befehls begonnen wird. Betrachtet man einen lngeren Zeitraum, lsst sich
beobachten, dass bei Verwendung von Pipelining 5-mal mehr Instruktionen pro Zeiteinheit verarbeitet werden. Die Rechenleistung wird also um den Faktor 5 gesteigert.
ohne Pipelining
Befehl 1
W
F
Befehl 2
Befehl 3
Befehl 1
Befehl 2
Befehl 3
Befehl 4
Befehl 5
Befehl 6
0
TS
mit Pipelining
W
W
W
5TS
F
D
R
E
W
Fetch
Decode
Read
Execute
Write
414
Befehl 1
Befehl 2
Befehl 1
Befehl 2
415
aufeinanderfolgenden Befehlen ein. Dennoch kann auch durch diese Manahmen keine
vllige Elimination der Rechenleistungsverringerung erzielt werden, sodass auch in
diesen Fllen die real erzielbare Rechenleistung unterhalb des theoretisch ermittelten
Wertes ohne Bercksichtigung von Befehlsabhngigkeiten bleibt.
13.5.4 Befehlssatzerweiterungen
Fr die Frage, ob eine bestimmte Aufgabenstellung von einem bestimmten Mikroprozessor bearbeitet werden kann, ist die Wahl des Befehlssatzes dieses Prozessors relativ unbedeutend. Stellt sich jedoch die Frage nach der Rechenleistung des Prozessors,
kommt der Wahl des Befehlssatzes dagegen eine zentrale Bedeutung zu. Bereits in
Abschn.13.3.2 wurde am Beispiel der Multiplikation verdeutlicht, dass die Verwendung eines Multiplikationsbefehls die Rechenleistung eines Prozessors erhhen kann.
Entsprechendes gilt fr den Einsatz einer Floating-Point-Unit zur Beschleunigung von
Gleitkommaoperationen. Durch den Einsatz einer Gleitkommaeinheit knnen Fliekommaberechnungen um ein bis zwei Grenordnungen schneller durchgefhrt werden.
Das Prinzip, den Befehlssatz auf das Anwendungsgebiet zu optimieren,
muss nicht auf grundlegende Operationen wie Multiplikation, Division oder
Gleitkommaoperationen beschrnkt werden. Viele Mikroprozessoren stellen sogenannte
Befehlssatzerweiterungen zur Verfgung. So wurde beispielsweise Mitte der 1990er
Jahre die MMX-Befehlssatzerweiterung von der Firma Intel fr PC-Prozessoren
eingefhrt. Eines der Ziele war es, durch diese Erweiterung eine flssige Wiedergabe von
Videosequenzen zu erreichen. In den darauffolgenden Jahren wurden die Erweiterungen
des Befehlssatzes unter dem Namen SSE (Streaming SIMD Extensions) fortgefhrt.
416
13.6.1 CISC
Die Abkrzung CISC steht fr Complex Instruction Set Computer und bezeichnet Prozessoren, bei denen angestrebt wird, Befehle mit einer mglichst groen Funktionalitt
zur Verfgung zu stellen.
CISC-Prozessoren zeichnen sich durch einen groen Befehlsumfang und eine
groe Anzahl unterschiedlicher Adressierungsarten aus. Die Wortbreite der einzelnen
Befehle eines CISC-Prozessors variiert, sodass fr die Ausfhrung der Befehle eine
unterschiedliche Anzahl von Programmspeicherzugriffen erforderlich ist. Diese
417
Eigenschaft, sowie die unterschiedliche Komplexitt der Befehle, fhren dazu, dass die
Abarbeitung eines Befehls in der Regel mehrere Taktzyklen erfordert. Die Anzahl der
bentigten Taktzyklen variiert bei typischen CISC-Prozessoren zudem in Abhngigkeit
vom Befehl. Typische Beispiele fr CISC-Architekturen sind die Prozessorfamilien 808x
und 80x86 der Firma Intel oder die Prozessoren der 680x0-Serie der Firma Motorola.
CISC-Prozessoren wurden bis in die 1990er Jahre erfolgreich vermarktet. Durch die
Fortschritte der Halbleitertechnologie wurden hhere Integrationsdichten und krzere
Verzgerungszeiten der verwendeten Logik- und Speicherelemente ermglicht. Insbesondere durch die sinkende Zugriffszeit der Speicher war es nicht mehr ntig mit einem
Befehl mglichst viele Funktionen auszufhren. Dies brachte einen der Hauptgrnde fr
die Verwendung von CISC-Prozessoren ins Wanken und fhrte dazu, dass die Bedeutung
der CISC-Prozessoren abnahm.
13.6.2 RISC
Im Lauf der 1980er Jahre wurden zahlreiche Studien zu Architekturen von Mikroprozessoren durchgefhrt, die unter anderem zeigten, dass viele der komplexen Befehle eines
CISC-Prozessors nur zu einem geringen Anteil in praktischen Programmen verwendet
wurden. Die meisten Programme nutzen nur einen kleinen Anteil des Befehlssatzes, vorrangig die einfach strukturierten Befehle des Prozessors. Diese Beobachtung fhrte zu
einem Architekturansatz, der als RISC (Reduced Instruction Set Computer) bezeichnet
wird. Typische RISC-Prozessoren zeichnen sich durch die folgenden Eigenschaften aus:
Limitierter Befehlssatz
Es werden nur die am hufigsten bentigten Grundbefehle implementiert, wobei auf
komplexe Adressierungsarten verzichtet wird. Dies ist sowohl fr den Aufwand als auch
im Hinblick auf die Taktfrequenz von Vorteil.
Instruktionspipelining
Durch die Reduktion des Befehlssatzes wird gleichzeitig der Einsatz von Instruktionspipelining vereinfacht. Hierbei wird angestrebt, in jedem Taktzyklus des Prozessors die
Bearbeitung eines neuen Befehls zu beginnen.
Load/Store-Architektur
Zum Austausch von Daten mit dem Speicher oder Ein-/Ausgabekomponenten werden Befehle eingesetzt, die nur einen Transport der Daten zwischen Speicher und den
Arbeitsregistern der CPU durchfhren (load, store). Auf die Mglichkeit, innerhalb eines
Befehls sowohl den Datentransport als auch eine arithmetisch-logische Operation auszufhren, wird im Gegensatz zu typischen CISC-Prozessoren, verzichtet.
418
419
Programm-Speicher
Flash
Steuer-, Adress- und Datenbus fr den
Zugriff auf den Programmspeicher
CPU
Steuerbus
Datenbus
Adressbus
EEPROM
SRAM
Ausgabe
Eingabe
Daten-Speicher
420
13.7 Mikrocontroller
Mikrocontroller sind integrierte Mikrorechnersysteme, die neben einer CPU auch Speicher, Ein-/Ausgabeeinheiten sowie weitere fr den Betrieb des Systems notwendige
Komponenten, beispielsweise die Takterzeugung, enthalten. Durch die Integration des
Systems auf einem Mikrochip kann die Verwendung von externen Komponenten auf ein
Minimum reduziert werden. Auf diese Weise lassen sich kostengnstige Mikrorechner
realisieren.
Beim Entwurf und Einsatz von Mikrocontrollern stehen blicherweise die Kosten
des Controllers und die Verlustleistung im Vordergrund. Daher besitzen Mikrocontroller eine deutlich geringere Rechenleistung als sie zum Beispiel von Prozessoren fr den
PC-Markt zur Verfgung gestellt werden. Auch wenn dies auf den ersten Blick als ein
Nachteil erscheinen mag, darf nicht vergessen werden, dass Mikrocontroller hufig fr
Anwendungen mit relativ geringen Rechenleistungen eingesetzt werden.
Sehr deutlich wird der Vorteil von Mikrocontrollern, wenn die Kosten eines Controllers mit dem eines PC-basierten Systems verglichen werden. Ein PC-basiertes System
mit CPU, Speicher und Hauptplatine kostet mehrere hundert Euro, whrend Mikrocontroller fr wenige Euro, teilweise sogar fr Preise unterhalb eines Euros, erhltlich sind.
Mikrocontroller werden in vielen eingebetteten Systemen des Alltags eingesetzt. Sie
bernehmen die Steuerung von Haushaltsgerten, Fernsehgerten, Kraftfahrzeugen, von
industriellen Anlagen oder auch Medizingerten.
Viele Halbleiterhersteller bieten Mikrocontroller mit unterschiedlichen Eigenschaften an. Anbieter von Mikrocontrollern sind (in alphabetischer Reihenfolge) die Firmen
13.7Mikrocontroller
421
Atmel, Fujitsu, Infineon, Microchip, NEC, NXP, Renesas, Texas Instruments und ST
Microelectronics.
Einige der wichtigsten Unterscheidungskriterien, die bei der Auswahl eines Controllers zu beachten sind, werden im Folgenden vorgestellt:
Wortbreite des Rechenwerks
Typische Mikrocontroller des unteren Preissegmentes setzen Rechenwerke mit einer
Wortbreite von 8bit ein. Controller fr hhere Rechenleistungen verwenden Rechenwerke mit einer Breite von 32bit. Darber hinaus werden auch 16-Bit-Mikrocontroller
angeboten.
Verwendete CPU
Die Wahl des Prozessors stellt einen entscheidenden Faktor fr die Leistungsfhigkeit
des Systems dar. Darber hinaus kann es von praktischer Bedeutung sein, dass die Controller fr unterschiedliche Produkte eines Unternehmens die gleiche CPU verwenden.
Auf diese Weise kann das einmal erworbene Know-how sowie Entwurfssoftware auch
fr Folgeprodukte effizient eingesetzt werden.
Taktfrequenz
Mikrocontroller arbeiten mit relativ geringen Taktfrequenzen, die sich im Bereich von
einigen MHz bis hin zu einigen hundert MHz bewegen.
Gre des eingebetteten Speichers
Hufig wird der Programmspeicher als Flashspeicher und der Datenspeicher als SRAM
zusammen mit der CPU integriert. Hierbei variiert die Gre dieser Speicher zwischen
wenigen kByte bis zu mehreren hundert kByte.
Eingebettete Schnittstellen
Whrend alle Mikrocontroller Mglichkeiten zur einfachen programmgesteuerten digitalen Ein-/Ausgabe besitzen, werden darber hinaus weitere sehr unterschiedliche Schnittstellen in Hardware zur Verfgung gestellt.
Der grundstzliche Aufbau eines Mikrocontrollers ist in Abb.13.15 dargestellt. Die
Komponenten eines Mikrocontrollers umfassen einen Mikroprozessor (CPU), Speicher
fr Programme und Daten und Ein-/Ausgabeeinheiten.
Die Ein- und Ausgabe von digitalen Daten wird bei allen Mikrocontrollern mithilfe
sogenannter Ports untersttzt. Ports sind digitale bidirektionale Anschlsse des Controllers, die sowohl als Eingnge als auch als Ausgnge genutzt werden knnen. Die Auswahl, ob ein bestimmter Anschluss als Eingang oder Ausgang genutzt wird, erfolgt ber
das Programm, welches von der CPU ausgefhrt wird. Darber hinaus erfolgt auch die
Ein-/Ausgabe durch die Software, sodass Ports sehr universell einsetzbar sind.
422
Takterzeugung
Programmspeicher
Datenspeicher
Timer
Digitale
Schnittstellen
Analoge
Ein-/Ausgabe
Bussystem
CPU
Ports
13.8bungsaufgaben
423
Ereignisse ausgelst werden. Zum Beispiel kann bei Erreichen eines vorprogrammierten
Zhlerstands der Ausgabewert einer der Controlleranschlsse invertiert werden, wodurch
sich ein Rechtecksignal erzeugen lsst. In der Regel lsst sich das erzeugte Signal
in Frequenz und Tastverhltnis mit geringem Softwareaufwand modifizieren. Timer
werden fr praktische Anwendungen hufig eingesetzt. Sie erlauben unter anderem
den regelmigen Aufruf von Unterprogrammen sowie die zeitliche Vermessung von
Signalen.
Mikrocontroller verfgen darber hinaus ber eine integrierte Hardwareeinheit zur
Takterzeugung, die das Taktsignal fr den Betrieb des Controllers generiert. Die Auswahl der erzeugten Taktfrequenz erfolgt mithilfe weniger externer Komponenten, zum
Beispiel mithilfe eines externen Quarzes oder eines RC-Gliedes. Die meisten Mikrocontroller besitzen daneben die Mglichkeit, den Systemtakt durch einen integrierten
Oszillator zu erzeugen. In diesem Fall kann auf externe Komponenten vllig verzichtet
werden.
Wird fr eine Anwendung eine mglichst exakte Taktfrequenz bentigt, empfiehlt
sich die Verwendung eines externen Quarzes. Die internen Oszillatoren knnen in der
Regel eine Frequenzabweichung von einigen Prozent aufweisen und sind auch im Hinblick auf die Temperaturstabilitt einem quarzbasierten Oszillator unterlegen.
Mikrocontroller sind also integrierte Schaltkreise, die alle notwendigen Komponenten eines Rechners beinhalten. Auf Basis von Mikrocontrollern lassen sich sehr einfach
kostengnstige programmierbare Systeme realisieren, deren Einsatzgebiet nahezu unbegrenzt ist.
13.8 bungsaufgaben
In den folgenden Aufgaben werden einige Themen dieses Kapitels aufgegriffen. Die
Lsungen der Aufgaben finden Sie am Ende des Buches.
Sofern nicht anders vermerkt, ist nur eine Antwort richtig.
Aufgabe 13.1
Welche Aussagen zu Adressrumen sind korrekt? (Mehrere Antworten sind richtig)
a) Bei Memory-Mapped-Adressierung besitzen Speicher und Ein-/Ausgabe unterschiedliche Adressrume.
b) Bei Port-Mapped-Adressierung besitzen Speicher und Ein-/Ausgabe gemeinsame
Adressrume.
c) Bei Memory-Mapped-Adressierung besitzen Speicher und Ein-/Ausgabe gemeinsame
Adressrume.
d) Bei Port-Mapped-Adressierung besitzen Speicher und Ein-/Ausgabe unterschiedliche
Adressrume.
424
Aufgabe 13.2
Wie wird die Adressierungsart bezeichnet, bei der die Speicheradresse direkt aus dem
Befehlswort bernommen wird?
a) Unmittelbare Adressierung
b) Absolute Adressierung
c) Indirekte Adressierung
d) Indirekte Adressierung mit Verschiebung
Aufgabe 13.3
Welche Adressierungsarten verwenden einen Adressspeicher (zum Beispiel CPURegister)? (Mehrere Antworten sind richtig)
a) Unmittelbare Adressierung
b) Absolute Adressierung
c) Indirekte Adressierung
d) Indirekte Adressierung mit Verschiebung
Aufgabe 13.4
Mit welchen Manahmen kann die Rechenleistung eines Mikroprozessors gesteigert
werden? (Mehrere Antworten sind richtig)
a) Erhhung der Taktfrequenz
b) Spezialbefehle
c) Instruktions-Pipelining
d) VLIW
Aufgabe 13.5
Was ist der wesentliche Unterschied zwischen einer Von-Neumann- und einer
Harvard-Architektur?
a) Die Harvard-Architektur kann nur fr CISC-Prozessoren eingesetzt werden.
b) Die Von-Neumann-Architektur verwendet Flash als Instruktionsspeicher, die typische
Harvard-Architektur dagegen SRAM
c) Die Harvard-Architektur besitzt getrennte Speicher fr Instruktionen und Daten.
d) Die Harvard-Architektur untersttzt weniger Befehle als die Von-Neumann-Architektur.
Mikrocontroller
14
Mikrocontroller sind kleine Rechnersysteme, die in einem Baustein alles beinhalten, was
zur Realisierung eines Computers bentigt wird: Sie enthalten eine CPU, Speicher und
auch Ein-/Ausgabeeinheiten. Die Vorteile eines Mikrocontrollers sind die kompakte Bauform und der gnstige Preis. Mikrocontroller werden in unterschiedlichsten, meist kostensensitiven, Anwendungen eingesetzt. Ein typisches Einsatzgebiet sind Steuerungs- und
Regelungsanwendungen. In Ihrer Waschmaschine sorgt beispielsweise ein Mikrocontroller dafr, dass Sie ein Waschprogramm auswhlen knnen. Er regelt die Wassertemperatur und steuert unter anderem die Elektronik fr den Trommelmotor und die Pumpen an.
Die Hersteller von Mikrocontrollern bieten eine relativ groe Produktpalette an. Meistens werden die Produkte eines Herstellers in Familien unterteilt. Die Produkte einer solchen Familie besitzen in der Regel die gleiche CPU, unterscheiden sich aber im Hinblick
auf die Speicherkapazitt oder die integrierten Ein-/Ausgabekomponenten. Aufgrund dieser
Produktvielfalt kann der Anwender den Controller auswhlen, der im Hinblick auf die technischen Eigenschaften und die Kosten optimal fr das geplante Einsatzgebiet geeignet ist.
Dieses Kapitel bietet einen Einstieg in die Technik der Mikrocontroller. Der Mikrocontroller ATmega32 aus der AVR-Familie des Herstellers Atmel wird exemplarisch
vorgestellt. Die hier vorgestellten Grundprinzipien lassen sich auf zahlreiche andere
Mikrocontrollern bertragen und sind nicht auf die AVR-Familie beschrnkt.
425
426
14Mikrocontroller
Alle Controller der AVR-Familie basieren auf einem RISC-Mikroprozessor, der eine
zweistufige Befehlspipeline besitzt. Das Rechenwerk der CPU hat eine Wortbreite von
8 bit. Die Firma Atmel unterteilt die Mikrocontroller der AVR-Familie in mehrere Gruppen, von denen drei im Folgenden kurz vorgestellt werden.
tinyAVR
Die tinyAVR-Mikrocontroller zeichnen sich durch eine kleine Gehuseform mit wenigen Anschlssen aus. Viele der im DIP-Gehuse angebotenen Controller besitzen 8 oder
14 Anschlsse, wovon jeweils 2 fr die Spannungsversorgung verwendet werden. Die
Controller knnen mit einer Spannung zwischen 1,8 und 5,5V betrieben werden. Der
Programmspeicher ist, wie bei allen Controllern der AVR-Familie, als Flashspeicher
ausgefhrt. Die Gre dieses Speichers liegt fr tinyAVR-Controller meist zwischen 1
und 8kByte. Zur Speicherung von Daten stehen ein SRAM und ein EEPROM zur Verfgung, deren Gre 64 bis 512Byte betrgt. Alle Controller besitzen mindestens einen
Timer und mindestens eine Schnittstelle zur seriellen digitalen Datenbertragung. Fr
das Einlesen analoger Werte stehen teilweise AD-Umsetzer zur Verfgung.
megaAVR
Die Mikrocontroller der megaAVR-Serie sind umfangreicher ausgestattet als die
tinyAVR-Controller. Sie besitzen einen greren Flash-Programmspeicher, dessen
Gre zwischen 8 und 256kByte liegt. Zur Speicherung von Daten stehen SRAM- oder
EEPROM-Speicher mit einer Gre von bis zu 4kByte zur Verfgung. Darber hinaus
besitzen die Controller der megaAVR-Serie mindestens zwei Timer und verfgen ber
eine grere Anzahl digitaler Schnittstellen als die tinyAVR-Controller.
Die in den megaAVR-Controllern verwendete CPU besitzt einen Hardware-Multiplizierer, der eine schnelle Multiplikation von 8bit breiten Operanden ermglicht.
Als ein Beispiel fr die Controller der megaAVR-Serie ist die Pinbelegung des Mikrocontrollers ATmega32 in Abb.14.1 dargestellt. Dieser Controller besitzt einen Flash-Programmspeicher der Gre 32kByte, 2kByte SRAM und 1kByte EEPROM-Speicher,
sowie diverse eingebettete Peripheriekomponenten.
Der ATmega32 besitzt 32 Portanschlsse (PA0-PA7, PB0-PB7, PC0-PC7 und PD0PD7), deren Funktion durch das ausgefhrte Programm festgelegt wird. Die weiteren Anschlsse dienen der Stromversorgung (VCC, AVCC und GND) oder knnen zur
Erzeugung des Systemtaktes (XTAL1, XTAL2) oder zum Rcksetzen des Controllers in
den Einschaltzustand (/Reset) verwendet werden. Die in Klammern angegebenen Pinbezeichnungen beziehen sich auf die sogenannten alternativen Portfunktionen. Per Software kann ausgewhlt werden, ob die Anschlsse direkt ber die Software gesteuert
werden sollen (Funktion als Ein-/Ausgabe-Ports) oder ob sie als Anschlsse fr eingebettete Peripheriekomponenten eingesetzt werden.
Aufgrund seines relativ groen Programmspeichers und einer groen Anzahl per Software steuerbarer Anschlsse eignet sich der ATmega32 gut fr die Durchfhrung praktischer Experimente.
PB0 (XCK/T0)
(ADC0) PA0
PB1 (T1)
(ADC1) PA1
PB2 (INT2/AIN0)
(ADC2) PA2
PB3 (OC0/AIN1)
(ADC3) PA3
PB4 (/SS)
(ADC4) PA4
PB5 (MOSI)
(ADC5) PA5
PB6 (MISO)
(ADC6) PA6
PB7 (SCK)
(ADC7) PA7
/RESET
VCC
GND
XTAL2
XTAL1
ATmega32
427
AREF
GND
AVCC
(TOSC2) PC7
(TOSC1) PC6
PD0 (RXD)
(TDI) PC5
PD1 (TXD)
(TDO) PC4
PD2 (INT0)
(TMS) PC3
PD3 (INT1)
(TCK) PC2
PD4 (OC1B)
(SDA) PC1
PD5 (OC1A)
(SCL) PC0
PD6 (ICP1)
(OC2) PD7
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
AVR XMEGA
Einer der vielen Unterschiede der AVR-XMEGA-Serie zu den zuvor vorgestellten AVRSerien ist der Einsatz eines DMA-Controllers (Direct Memory Access) in Kombination
mit dem sogenannten Event-System. Diese Module ermglichen unter anderem einen
Datenaustausch zwischen den Komponenten des Systems, ohne die CPU mit dem eigentlichen Datentransfer zu belasten. Die Controller der XMEGA-Serie besitzen einen bis zu
384kByte groen Flash-Programmspeicher und einen bis zu 32kByte groen SRAMSpeicher, welcher bei einigen XMEGA-Controllern durch externen Speicher erweitert
werden kann.
428
14Mikrocontroller
Ausfhrungszeit des Programms bereits whrend der Entwicklung exakt bestimmt werden. Darber hinaus knnen Assemblerprogramme im Hinblick auf die Ausfhrungszeit
und die Programmgre (Flash-Speicherbedarf) optimiert werden.
Um Assembler-Programme schreiben zu knnen, ist eine genaue Kenntnis des
Befehlssatzes der eingesetzten CPU erforderlich. Diese Notwendigkeit wird bei Einsatz einer Hochsprache vermieden, da der Compiler das Umsetzen des Quellcodes in die
Befehle der CPU bernimmt. Der Einsatz einer Hochsprache vereinfacht daher die Programmierung und Programme knnen in krzerer Zeit realisiert werden als bei einer Programmierung in Assembler. Die Optimierung der CPU-Befehle wird dann vom Compiler
bernommen. Obwohl heutige Compiler eine gute Codeoptimierung durchfhren, ist bei
der Verwendung einer Hochsprache nicht gewhrleistet, dass das Ergebnis das Optimum
im Hinblick auf Rechenzeit und Speicherbedarf darstellt. Dennoch wird der Praxis die
Programmierung in C/C++ in vielen Fllen der Programmierung in Assembler vorgezogen, da die Produktivitt bei der Programmentwicklung im Vordergrund steht.
Im Rahmen dieses Kapitels wird am Beispiel des AVR-Mikrocontrollers ATmega32
auf die Programmierung sowohl in Assembler als auch in C eingegangen. Die Beschftigung mit der Programmierung in Assembler ermglicht unter anderem ein tieferes Verstndnis der Funktionsweise eines Mikroprozessors.
Grundstzlich besitzen Mikrocontrollerprogramme die gleichen Elemente wie die Programme, die Sie vielleicht bereits auf einem PC entwickelt haben. Es gibt Funktionen, Verzweigungen, Schleifen usw. Einer der grten Unterschiede zwischen einem typischen
PC-Programm und einem Mikrocontrollerprogramm ist, dass das Hauptprogramm des Controllers eine Endlosschleife enthlt. Dass dies so sein muss, wird plausibel, wenn ein typisches
Anwendungsgebiet eines Mikrocontrollers anschaut: Die Steuerung einer Waschmaschine.
Stellen Sie sich vor, Sie schalten Ihre Waschmaschine ein. Das Programm des Mikro
controllers in der Steuereinheit wird gestartet und fragt die Bedienknpfe ab. Das Programm ist aber wahrscheinlich schneller als Sie. Noch bevor Sie einen Taster des
Bedienfeldes drcken knnen, stellt das Programm fest, dass offensichtlich nichts zu tun
ist (es wurde ja kein Taster gedrckt) und wird beendet. Ihre Waschmaschine wre mit
einer solchen Steuerung nicht gut bedienbar.
Statt das Programm nach der ersten Abfrage des Bedienfeldes zu beenden, mssen
die Taster und Schalter kontinuierlich abgefragt werden. Mit der Auswahl eines Waschprogramms wird der Mikrocontroller der Steuereinheit in ein entsprechendes Unterprogramm verzweigen, welches die Sensorik (Wasserstand, Wassertemperatur, usw.) abfragt
und die Aktorik (Pumpe, Heizung, usw.) ansteuert. Nach dem Beenden des Unterprogramms wird wieder zur Abfrage des Bedienfeldes zurckgekehrt. Das MikrocontrollerProgramm wird also bis zum Abschalten der Waschmaschine laufen und muss damit eine
Endlosschleife enthalten.
Die typische Grundstruktur eines Mikrocontrollerprogramms besteht aus zwei Teilen: Zu Beginn des Programms wird die Initialisierung des Systems ausgefhrt und die
Peripheriekomponenten initialisiert. Ist die Initialisierung abgeschlossen, werden die
Eingangswerte des Controllers in einer Endlosschleife berprft und gegebenenfalls
429
neue Ausgangswerte berechnet, die anschlieend ber die Ausgabeeinheiten ausgegeben werden. Dieser Grundstruktur folgen sowohl Assemblerprogramme als auch
Hochsprachenprogramme.
Hier wird der Befehl als Mnemonic angegeben und sowohl die ausgefhrte Operation
als auch die verwendeten Operanden sind leicht erkennbar.
Neben den Mnemonics werden Ihnen in Assemblerprogrammen auch Label (Marken) begegnen. Mithilfe von Labeln wird eine Codezeile mit einem Symbol versehen,
das im Programm eingesetzt werden kann. Im Verlauf dieses Kapitels werden Sie einige
Beispiele fr die Verwendung von Labels kennenlernen. Daher wird hier zunchst lediglich der Sprung in ein Unterprogramm als ein Beispiel fr die Verwendung eines Labels
dargestellt:
; Hier wird das Unterprogramm durch ein Label markiert
my_add_up:
add r5, r7; Dieses einfache Unterprogramm fhrt eine Addition aus
ret; Der "Return"-Befehl
; bewirkt die Rckkehr in das Hauptprogramm
; Das Hauptprogramm. In diesem Beispiel wird es auch markiert
main:
; Hier stehen weitere Befehle
call my_add_up; Mit diesem Befehl wird das UP aufgerufen
; und anschlieend der hier stehende Code ausgefhrt
430
14Mikrocontroller
Das Programm, welches die Umsetzung des Assemblercodes in die fr den Rechner
lesbare Form (also Nullen und Einsen) bersetzt, wird als Assembler bezeichnet. Eine
Codeoptimierung, wie sie Hochsprachencompiler durchfhren, findet bei der bersetzung nicht statt.
In dem Programm wird ein Zeiger angelegt und mit der gewnschten Adresse initialisiert. Der Zugriff auf die Peripheriekomponente erfolgt dann durch die Dereferenzierung
des Zeigers im unteren Teil des Beispielcodes. Mithilfe des Schlsselwortes volatile wird
der Compiler angewiesen, bei Verwendung des Zeigers keine Optimierung anzuwenden.
Warum dies wichtig ist, kann anhand eines einfachen Beispiels erlutert werden. Nehmen wir an, Ihr Mikrocontroller besitzt eine Peripheriekomponente, mit welcher der Ausgangswert eines Portanschlusses festgelegt werden kann. Schreibt man in ein Register der
431
Komponente den Wert 1, wird eine 1 am Ausgang ausgegeben; wird eine 0 geschrieben
erscheint am Ausgang der Wert 0. Mithilfe dieser Komponente mchten Sie nun einen
kurzen Impuls ausgeben. Ein entsprechender Programmausschnitt wrde so aussehen:
*output_ptr = 0; // Wir gehen ganz sicher: Erst mal eine 0 ausgeben
*output_ptr = 1; // Eine 1 erscheint am Ausgang
*output_ptr = 0; // Aber nicht lange: Wir setzen den Ausgang wieder
auf 0
Aus Sicht des Compilers gibt es nur Speicherstellen. Der Compiler kennt keine Peripherie. Was wrde also ein optimierender Compiler mit diesem Codeausschnitt tun?
Nun, der Compiler wrde annehmen, dass die ersten beiden Zeilen berflssig sind,
da am Ende in der (vermeintlichen) Speicherstelle, auf die der Zeiger output_ptr verweist, eine Null stehen wird. Die ersten beiden Zeilen mssten aus Sicht des Compilers
also nicht ausgefhrt werden. Daher wird der Compiler diese Zeilen ignorieren und so
die Rechenzeit des Programms reduzieren.
Fr einen Datenspeicher wre dieses Verhalten des Compilers korrekt und wnschenswert. Fr den Zugriff auf eine Peripheriekomponente muss die Optimierung
dagegen unterbunden werden, da andernfalls kein 1-Impuls am Ausgang des Controllers
erscheint. Daher werden Zeiger auf Peripheriekomponenten stets mit dem C-Schlsselwort volatile definiert.
In der Praxis muss man die Zeiger nicht selbst definieren. Die Hersteller von Mikrocontrollern stellen in der Regel Header-Dateien bereit, in denen die entsprechenden
Definitionen bereits enthalten sind. Bei dem in diesem Kapitel vorgestellten AVR-Mikrocontroller ist dies die Datei io.h.
432
14Mikrocontroller
Um das beeinflusste Bit noch deutlicher im Code sichtbar zu machen wird hufig eine
andere Variante fr die Angabe der verwendeten Konstante gewhlt:
*output_ptr |= 1<<3; // Hier sieht man besser welches Bit gesetzt wird
Die Schreibweise 1<<3 mag auf den ersten Blick ungewhnlich aussehen. Vielleicht
wirkt es umstndlich, eine 1 um 3 Stellen nach links zu schieben, um so die Konstante 8 zu
erhalten. Dennoch wird diese Schreibweise bevorzugt bei der Mikrocontrollerprogrammierung eingesetzt, da das modifizierte Bit explizit angegeben wird. Der Code ist besser lesbar.
Um einzelne Bits zu lschen wird die bitweise UND-Verknpfung (Operator &)
verwendet. Die UND-Verknpfung mit einer Konstanten, die nur an einer Bitposition eine Null enthlt uns ansonsten Einsen, lscht genau ein Bit und lsst die anderen
unangetastet.
Mchte man das Bit 3 lschen, bentigt man den invertierten Wert von 1<<3. In C
wird die bitweise Invertierung durch den Operator~realisiert. Der Code fr das Lschen
des Bits 3 sieht also so aus:
*output_ptr &= ~(1<<3); // Die Klammern sind wichtig, da sonst zuerst
// die Invertierung und dann das Schieben
// ausgefhrt wird - und das wre falsch
Im Fall des AVR sind in der Headerdatei io.h viele Konstanten definiert, welche die
Bitposition einzelner Peripherieregister enthalten. Im Datenblatt des Controllers findet
man beispielsweise ein Register mit der Abkrzung TCCR1B. Unter anderem enthlt
dieses Register ein Bit, das mit der Bezeichnung WGM12 abgekrzt wird (was diese Bit
bewirkt, wird spter vorgestellt). Nach Einbinden der Headerdatei io.h kann dieses Bit
mit der folgenden Zeile gesetzt werden:
TCCR1B |= 1<<WGM12; // Setzen des Bits WGM12 im Register TCCR1B
// so man muss nicht die genaue Position
// dieses Bits im Kopf haben
433
Es knnen auch mehrere Bits mit einer einzelnen Zuweisung gesetzt werden. Mit
der nachfolgenden Codezeile werden beispielsweise die Bits TWINT, TWSTA und
TWEN im Register TWCR gesetzt. Alle anderen Bits des Registers bleiben unverndert.
TWCR |= (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
434
14Mikrocontroller
den Befehlen codierten arithmetischen und logischen Operationen ausfhrt. Die prinzipielle Struktur des AVR-Mikroprozessors ist in Abb.14.2 dargestellt.
Die Befehle der CPU werden in 16bit breiten Worten des Programmspeichers
abgelegt. Der Mikroprozessor der AVR-Controller arbeitet die Befehle mithilfe einer
zweistufigen Befehlspipeline ab. In der ersten Pipelinestufe wird ein Befehl aus dem Programmspeicher ausgelesen. In der zweiten Stufe wird der Befehl ausfhrt.
Die Mehrheit der arithmetischen Befehle bentigt fr die Ausfhrung der zweiten
Pipelinestufe lediglich einen Taktzyklus. Da der nachfolgende Befehl bereits whrend
der Ausfhrung des aktuellen Befehls eingelesen wird, kann ein Befehlsdurchsatz von
bis zu einem Befehl pro Taktzyklus erreicht werden.
Die meisten Load- und Storebefehle sowie die Sprungbefehle bentigen fr die Verarbeitung mehrere Taktzyklen. Hierbei wird die Befehlspipeline des AVR angehalten,
sodass der Befehlsdurchsatz bei Verwendung dieser Befehle absinkt.
Bei der Ausfhrung eines Befehls wird in vielen Fllen der Inhalt des Statusregisters
bercksichtigt. Aus diesem Grund wird im Folgenden zunchst das Statusregister der
CPU betrachtet. Im Anschluss daran werden die Befehle der AVR-CPU vorgestellt.
Das Statusregister (vgl. Tab.14.1) besitzt eine Wortbreite von 8bit und beinhaltet die
nachfolgend erluterten Flags.
I-Flag
Mithilfe des Interrupt-Flags knnen Interrupts freigegeben (I =1) oder gesperrt werden
(I =0).
$95&38
Interne
Steuersignale
Statusregister
(SREG)
Befehlsdecoder
& Steuerung
Befehlsregister
Programmzhler
(PC)
Befehle
Adressen
(vom Programmspeicher) (zum Programmspeicher)
Rechenwerk
(ALU)
Arbeitsregister
(r0 r31)
32 x 8 bit
Stackpointer
(SP)
435
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
InterruptFlag
NegativeFlag
Zero-Flag CarryFlag
T-Flag
Das T-Flag kann als Bitspeicher aufgefasst werden. Es kann durch Befehle gelscht und
gesetzt werden. Darber hinaus kann es fr die Ausfhrung von bedingten Sprngen
abgefragt werden.
Im Gegensatz zum I-Flag und T-Flag beziehen sich alle weiteren Flags auf arithmetische Operationen.
Z-Flag
Ist das Ergebnis einer Operation Null, wird dies durch ein gesetztes Zero-Flag (Z =1)
signalisiert.
N-Flag
Das Negative-Flag ist die Kopie des hchstwertigen Bits des Ergebnisses, da dieses Bit
bei Zahlen in Zweierkomplementdarstellung das Vorzeichen reprsentiert.
C-Flag
Mithilfe des Carry-Flags wird gekennzeichnet (C=1), ob bei einer vorzeichenlosen
Operation ein berlauf, also ein Verlassen des darstellbaren Zahlenbereichs aufgetreten
ist. Darber hinaus wird das C-Flag bei Schiebe- oder Rotationsbefehlen eingesetzt.
V-Flag
Das Overflow-Flag signalisiert mit V=1 einen berlauf bei vorzeichenbehafteten Operationen wie der Addition oder der Subtraktion.
S-Flag
Ein berlauf bei einer Zweierkomplementoperation fhrt dazu, dass das hchstwertige
Ergebnisbit nicht das korrekte Vorzeichen enthlt (vgl. Kapitel2). Somit kann durch das
N-Flag in diesem Fall nicht das Vorzeichen des Ergebnisses bestimmt werden. Aus diesem Grund bietet die AVR-CPU ein weiteres Flag an: Mithilfe des Sign-Flags wird das
wahre Vorzeichen, auch bei einem aufgetretenen Zweierkomplementberlauf, angegeben. Das S-Flag ergibt sich aus der Exklusiv-Oder-Verknpfung des N- und des V-Flags.
Durch diese Verknpfung enthlt das S-Flag im Fall eines berlaufs (V=1) das invertierte N-Flag, whrend es eine Kopie des N-Flags enthlt, wenn kein berlauf aufgetreten ist.
436
14Mikrocontroller
H-Flag
Das Half-Carry-Flag wird gesetzt (H=1), wenn bei einer vorzeichenlosen Operation ein berlauf aus dem niederwertigen in das hherwertige Halbbyte auftritt.
Das H-Flag ist zum Beispiel fr Rechenoperationen mit Zahlen in BCD-Darstellung
sinnvoll.
437
(Registerpaare) gebildet. Das Register mit dem niedrigeren Index enthlt hierbei die unteren 8Bit, das Register mit dem hheren Index die oberen 8Bit des Operanden.
In Tab.14.2 sind die wichtigsten arithmetischen und logischen Befehle der AVR-CPU
zusammengefasst.
Die Flags des Statusregisters knnen auch direkt durch Befehle gesetzt oder gelscht
werden (Tab.14.3).
14.4.2 Transferbefehle
Die bisher vorgestellten arithmetischen und logischen Befehle dienen der Verarbeitung
von Daten, die in den Arbeitsregistern der CPU abgelegt sind. Fr einen Datenaustausch
zwischen den Arbeitsregistern und anderen Komponenten des Systems werden weitere
Befehle, die sogenannten Transferbefehle, bentigt. Es existieren Befehle zum Kopieren
von Daten zwischen Arbeitsregistern und zum Datenaustausch zwischen CPU und Peripheriekomponenten und dem Speicher.
Fr den Datenaustausch mit Peripheriekomponenten (zum Beispiel Speicher oder
Schnittstellen) werden Load- und Storebefehle bereitgestellt. Fr die Adressierung bietet
die AVR-CPU die Adressierungsarten direkt, indirekt, indirekt mit Post-Inkrement, indirekt mit Pre-Inkrement und indirekt mit Verschiebung an (vgl. Kapitel13).
Im Fall der indirekten Adressierung wird eine 16-Bit-Adresse aus Registerpaaren
geholt. Als mgliche Registerpaare stehen die Paare r26:r27, r28:r29 und r30:r31 zur
Verfgung. Auf diese Weise kann ein Adressraum mit einer Adresswortbreite von 16bit
angesprochen werden. Zur Vereinfachung knnen diese Registerpaare auch mit neuen
Symbolen (X, Y und Z) angesprochen werden. Die Register X, Y und Z stellen keine
zustzlichen Register dar, sondern sind lediglich andere Bezeichnungen fr Registerpaare, die bereits im Arbeitsregistersatz enthalten sind. Fr die Zuordnung der Registerbezeichnungen gilt Tab.14.4.
Whrend alle Komponenten des Mikrocontrollers memory-mapped adressiert werden
knnen, ist fr einige hufig verwendete Komponenten auch ein Zugriff ber eine iomapped-basierte Adressierung mithilfe der Befehle in und out mglich. Diese Befehle
bentigen weniger Programmspeicherplatz und werden schneller ausgefhrt als die entsprechenden memory-mapped arbeitenden Load-/Storebefehle.
In Tab.14.5 sind die wichtigsten Transferbefehle der AVR-CPU zusammengestellt. Grundstzlich werden durch die Transferbefehle keine Flags des Statusregisters
beeinflusst.
438
14Mikrocontroller
(Fortsetzung)
439
Tab14.2 (Fortsetzung)
(Fortsetzung)
440
14Mikrocontroller
Tab14.2 (Fortsetzung)
(Fortsetzung)
441
Tab14.2 (Fortsetzung)
Tab.14.3Statusregister der
AVR-CPU
Tab.14.4Alternative
Bezeichnungen fr Register
der AVR-CPU
Flag
SEC
CLC
SEN
CLN
SEZ
CLZ
SEV
CLV
SES
CLS
SEH
CLH
SET
CLT
SEI
CLI
Registerpaar
Synonyme Bezeichnung
r27:r26
r29:r28
r31:r30
werden knnen. Whrend die bedingten Sprungbefehle nur eine relative Adressierung
zur Bestimmung des Sprungziels untersttzen, stehen die unbedingten sowohl mit relativer als auch mit absoluter und indirekter Adressierung zur Verfgung.
Der Aufruf von Unterprogrammen wird beim AVR durch die CALL-Befehle untersttzt. Diese Befehle entsprechen einem unbedingten Sprung, wobei zustzlich die Rcksprungadresse, an der das Programm nach Beenden des Unterprogramms fortgesetzt
werden soll, auf dem Stack abgelegt wird. Fr das Beenden eines Unterprogramms wird
der Befehl RET verwendet. Dieser ldt die auf dem Stack abgelegte Rcksprungadresse
in den Program Counter und setzt somit das aufrufende Programm an der Stelle fort, die
dem Einsprung in das Unterprogramm folgt.
442
14Mikrocontroller
(Fortsetzung)
443
444
14Mikrocontroller
445
446
14Mikrocontroller
Bedingter Sprungbefehl
0
BRCC, BRSH
BRCS, BRLO
BRPL
Branch if Plus
BRMI
Branch if Minus
BRNE
BREQ
Branch if Equal
BRVC
BRVS
BRGE
BRLT
BRHC
BRHS
BRTC
BRTS
BRID
BRIE
447
Mithilfe des ersten Befehls werden die beiden unteren Bytes der Operanden addiert.
Der bertrag dieser Operation wird im Carry-Flag des Statusregisters gespeichert. Mit dem
zweiten Befehl werden die beiden oberen Bytes der Operanden addiert, wobei das im CarryFlag gespeicherte bertragsbit durch den Befehl adc (add with carry) bercksichtigt wird.
Liegen die Operanden nicht in Registern sondern im Speicher, mssen die Operanden zunchst durch geeignete Load-Befehle in die CPU bertragen werden. Dies kann
mit absoluter oder indirekter Adressierung geschehen. Das folgende Beispiel benutzt
die absolute Adressierung fr den ersten Operanden, whrend der zweite Operand mit
indirekter Adressierung unter Verwendung des Y-Registers (Registerpaar r29:r28) in den
Prozessor bertragen wird.
; Addition zweier 16-Bit-Operanden im Speicher
ldsr24,0x100; untere 8 Bit des 1. Operanden holen
ldsr25,0x101; obere 8 Bit des 1. Operanden holen
ldir28,0x02; Adresse des 2. Operanden in das
ldir29,0x01; Y-Register bertragen
ldr24,Y+; unteres Byte des 2. Operanden holen (Adresse: 0x102)
ldr25,Y; oberes Byte des 2. Operanden holen (Adresse: 0x103)
addr24,r26; Addition durchfhren
adcr25,r27
sts0x100,r24; unteres Byte des Ergebnisses speichern
sts0x101,r25; oberes Byte des Ergebnisses speichern
Wie im Fall der Addition wird in diesem Beispiel ein mglicher bertrag, der sich
bei der Subtraktion der unteren Operandenbytes ergibt, durch den Befehl sbc (subtract
with carry) bercksichtigt. Im Fall der Subtraktion ist dieser bertrag negativ zu gewichten. Daher wird mithilfe des sbc-Befehls von der Differenz der Operanden r25 und r27
zustzlich der Wert des Carry-Flags subtrahiert.
448
14Mikrocontroller
LSL
C-Flag
1
Operand
0 1 1 0 0 0 1 0
Operand
0 1 1 0 0 0 1 0
0
0
0
0 0 1 1 0 0 0 1
Ergebnis
1 1 0 0 0 1 0 0
Ergebnis
Arithmetisches Schieben
ASR
C-Flag
1
Operand
0 1 1 0 0 0 1 0
Ein ASL-Befehl existiert nicht
0 0 1 1 0 0 0 1
Ergebnis
Rotieren
ROR
C-Flag
1
Operand
0 1 1 0 0 0 1 0
1 0 1 1 0 0 0 1
Ergebnis
ROL
C-Flag
1
Operand
0 1 1 0 0 0 1 0
1 1 0 0 0 1 0 1
Ergebnis
449
Die gezeigten Befehle knnen auch als arithmetische Schiebeoperation, also eine
Multiplikation mit 2 beziehungsweise eine Division durch 2 aufgefasst werden, sofern
der Operand als vorzeichenlose Zahl aufgefasst wird. Bei der Schiebeoperation nach
links tritt hierbei ein berlauf auf, wenn das hchstwertige Bit des Operanden gesetzt
ist. Soll dieser Fall abgefangen werden, kann nach dem Schieben der Wert des CarryFlags abgefragt werden. Ist dieses gesetzt, ist ein berlauf aufgetreten. Im Fall des
Rechtsschiebens tritt dagegen nie ein berlauf auf.
Stellt der Operand dagegen eine Zweierkomplementzahl dar, kann ein berlauf im
Fall des Linksschiebens durch ein gesetztes V-Flag detektiert werden.
Fr das arithmetische Rechtsschieben von vorzeichenbehafteten Zahlen muss der
Befehl asr verwendet werden. Dieser sorgt im Gegensatz zu den anderen Schiebebefehlen dafr, dass das hchstwertige Bit des Operanden in das Ergebnis kopiert wird.
; Arithmetisches Schieben nach rechts (vorzeichenbehaftet)
asrr25; oberes Byte schieben
rorr24; unteres Byte schieben
14.5.1.4Multiplikation
Viele der AVR-CPUs untersttzen die Multiplikation zweier 8-Bit-Werte. Das Ergebnis
der Multiplikationsbefehle ist ein 16-Bit-Wert, der im Registerpaar r1:r0 abgelegt wird.
Sollen 16-Bit-Operanden multipliziert werden, mssen insgesamt vier Multiplikationsbefehle verwendet werden. Die hierbei entstehenden Teilergebnisse werden anschlieend entsprechend ihrem Gewicht addiert. Diese Vorgehensweise wird in Abb.14.4
verdeutlicht.
Eine entsprechende Umsetzung des Prinzips ist im folgenden Programmfragment dargestellt. Die 16-Bit-Operanden stehen in den Registerpaaren r25:r24 und r27:r26. Das
32bit breite Ergebnis wird in den Registern r16 bis r19 abgelegt, wobei r16 die untersten 8Bit und r19 die obersten 8Bit des Produktes enthlt. Die Register r17 und r18
enthalten die Produktbits 15 bis 8 beziehungsweise 23 bis16. Die Bercksichtigung des
Gewichts der Teiloperanden erfolgt durch die Auswahl der Produktregister.
Op2_h
Op2_l
Op1_h
Op1_l
Op1_l* Op2_l
+
Op1_h* Op2_l
Op1_l* Op2_h
Op1_h* Op2_h
Produkt P
450
14Mikrocontroller
14.5.1.5Division
Die Division wird von der AVR-CPU nicht durch einen entsprechenden Befehl untersttzt. Stattdessen kann diese Operation mithilfe eines Algorithmus durchgefhrt
werden, der, wie die schriftliche Division, auf einer sukzessiven Berechnung der Quotientenbits basiert. Abb.14.5 veranschaulicht das Vorgehen bei einer vorzeichenlosen
Division fr 8-Bit-Operanden.
Ein entsprechendes AVR-Programm kann wie folgt realisiert werden:
Abb.14.5 Flussdiagramm fr
die 8-Bit-Division
Bitzhler = 8
Rest & Quotient lschen
Quotient schieben
Rest &
Dividend schieben
Rest < Divisor?
ja
Bitzhler = Bitzhler -1
nein
Bitzhler = 0?
nein
Rest = Rest - Divisor
Quotient = Quotient | 1
451
; Vorzeichenlose 8-Bit-Division
; r16=Bitzhler, r24=Dividend, r25=Divisor
; r26=Rest, r27=Quotient
ldi r16,8; Bitzhler = 8
clr r26; Rest lschen
clr r27; Quotient lschen
div_loop:
lsl r27; Quotient schieben
lsl r24; oberstes Dividendenbit in C-Flag
rol r26; Dividendenbit in Rest verschieben
cp r26,r25; Rest mit Divisor vergleichen
brcs dec_cnt; falls Rest kleiner: springen
sub r26,r25; Divisor von Rest subtrahieren
ori r27,1; Quotientenbit setzen
dec_cnt:
dec r16; Bitzhler dekrementieren
brne div_loop; falls noch nicht 0: nchste Iteration
Load-Befehl
Storebefehl
Absolut
lds
sts
Indirekt
ld
st
ld
st
ldd
std
Absolut
lds
sts
452
14Mikrocontroller
Fr einen Zugriff auf den Programmspeicher wird der Befehl lpm (load from program memory) zur Verfgung gestellt. Dieser Befehl ermglicht es auf im Programmspeicher abgelegte Konstanten zuzugreifen. Hierbei wird nur die indirekte Adressierung
oder die indirekte Adressierung mit Post-Inkrement untersttzt. Wird bei Verwendung
des lpm-Befehls kein Operand angeben, erfolgt die Berechnung der Programmspeicheradresse mithilfe des Registerpaares Z und der gelesene Wert wird im Register r0
abgespeichert.
; Beispiele fr die
lpm;
lpmr0,Z;
lpmr8,Z;
lpmr17,Z+;
453
Die Befehle in und out untersttzen nur eine absolute Adressierung. Soll beispielsweise ein Wert auf den digitalen Ausgngen (PORTA) eines ATmega32 ausgegeben werden, kann dies mithilfe des Befehls
out27,r7; r7 auf den PORTA-Anschlssen ausgeben
geschehen. Die Adressen der einzelnen Peripheriekomponenten knnen in den Datenblttern der AVR-Controller nachgeschlagen werden. Allerdings wird der Programmcode
durch eine Angabe der Adresse als Zahlenwert wie im obigen Beispiel recht unbersichtlich. Die Firma Atmel stellt daher sowohl fr Assembler- als auch fr C-Programme
Include-Dateien zur Verfgung, in denen symbolische Konstanten fr den Zugriff auf die
Peripheriekomponenten definiert sind. Hiermit kann das obige Beispiel auch wie folgt
formuliert werden.
.include "m32def.inc"; Include Datei einbinden
outPORTA,r7; r7 auf den PORTA-Anschlssen ausgeben
Mithilfe der Befehle in und out kann auch auf CPU-interne Register wie das Statusregister oder den Stackpointer zugegriffen werden, wie die folgenden Codebeispiele
zeigen:
inr14,SREG; Statusregister nach r14 kopieren
inr30,SPL; niederwertiges Byte des SP nach r30
inr31,SPH; hherwertiges Byte des SP nach r31
14.5.3 Programmverzweigungen
Im Rahmen dieses Abschnitts wird anhand von einfachen Beispielen verdeutlicht, wie
die Sprungbefehle der AVR-CPU eingesetzt werden knnen. Hierzu wird zunchst auf
Programmverzweigungen eingegangen. Anschlieend werden der Aufruf von Unterprogrammen und Mglichkeiten der bergabe von Parametern an Unterprogramme vorgestellt. Eine Einfhrung in die Verarbeitung von Interrupts schliet den Abschnitt ab.
454
14Mikrocontroller
r24 = r25 ?
ja
ja
r24 = r25 ?
nein
nein
r28 = r28 - 10
r28 = r28 - 10
a)
b)
r27 = r27 + 1
Abb.14.6Beispiele fr Programmverzeigungen
Ebenso knnte die gleiche Funktionalitt erreicht werden, wenn das Programmfragment mit Skip-Befehlen realisiert wrde. Der Skip-Befehl berprft eine Bedingung
(zum Beispiel, ob zwei Register identische Werte besitzen) und berspringt nachfolgenden Befehl falls die Bedingung erfllt ist. Im obigen Beispiel bietet sich die Verwendung
des Befehls cpse (compare and skip if equal) an:
; Verzweigung mit Skip-Befehl
cpser24,r25; Vergleich -- Nachf. Befehl evtl. berspringen
subi r28,10; wird nicht ausgefhrt falls r24=r25
Bei diesem Beispiel besitzt der Skip-Befehl gegenber dem Branch-Befehl Vorteile,
da Programmcode eingespart und gleichzeitig die Ausfhrungszeit des Programmabschnitts um einen Taktzyklus reduziert wird.
Ein Programmfragment, welches das Beispiel aus Abb.14.6b umsetzt, knnte wie
folgt formuliert werden:
; Verzweigung mit bed. Sprung (if-else)
cpr24,r25; R24 und R25 vergleichen (Flags wie SUB)
brnedo_inc; falls ungleich: springen
subir28,10; Subtraktion ausfhren
rjmpweiter; alternativen Code berspringen
do_inc:
incr27; R27 inkrementieren
weiter:
455
Der Einsatz von Skip-Befehlen ist in diesem Beispiel nicht vorteilhafter. Auf ein entsprechendes Beispiel wird daher verzichtet.
14.5.3.2Unterprogrammaufrufe
Unterprogramme werden mithilfe der Befehle call, rcall oder icall aufgerufen. Whrend der Befehl call die Adresse des Unterprogramms absolut angibt, verwendet der
Befehl rcall eine relative Adressierung. Da der Befehl rcall einen geringeren Programmspeicherbedarf besitzt und schneller ausgefhrt wird, ist dieser Befehl in der Regel zu
bevorzugen. Hierbei ist jedoch zu bercksichtigen, dass die Differenz der Einsprungadresse des Unterprogramms und des rcall-Befehls auf den Wertebereich von 2048 bis
+2047 begrenzt ist. Ist die Differenz grer, muss auf den call-Befehl zurckgegriffen
werden. Der Befehl icall ermglicht die Angabe der Unterprogrammadresse mithilfe des
Z-Registers und verwendet somit eine indirekte Adressierung.
Die CPU legt mit dem Unterprogrammaufruf die Rcksprungadresse merken. Dies
ist die Programmspeicheradresse, bei der das Programm nach Beenden des Unterprogramms fortgesetzt werden soll. Fr die Speicherung der Rcksprungadresse wird der
Stack verwendet. Da Programmspeicheradressen im Fall des AVR eine Wortbreite von
16bit besitzen, werden hierdurch zwei Speicherpltze des Stacks belegt.
Ein Unterprogramm wird mit dem Befehl ret beendet. Dieser Befehl ldt die auf dem
Stack abgelegte Programmspeicheradresse des aufrufenden Programms in den Program
Counter (PC). Der Program Counter adressiert somit anschlieend die Befehle des aufrufenden Programms, welches nach Ausfhrung des ret-Befehls fortgesetzt wird.
Werden in einem Unterprogramm Zwischenergebnisse erzeugt, knnen diese temporr in Arbeitsregistern abgelegt werden. Da die Werte dieser Register durch das Unterprogramm verndert werden, ist es sinnvoll, die betroffenen Arbeitsregister zu Beginn
des Unterprogramms auf dem Stack zu sichern. Hierzu wird der Befehl push verwendet.
Vor Verlassen des Unterprogramms werden die ursprnglichen Werte der Arbeitsregister
mithilfe des pop-Befehls vom Stack in die Register zurckgeladen. Nach Verlassen des
Unterprogramms besitzen somit alle Arbeitsregister den Wert, den sie beim Aufruf des
Unterprogramms besaen.
Die Arbeitsregister knnen auch zur bergabe von Parametern oder Rckgabewerten verwendet werden. Ein Beispiel hierfr zeigt das nachfolgende Programm,
welches aus einem Hauptprogramm haupt_prg und einem Unterprogramm up_add
besteht.
; Beispiel fr Unterprogrammaufrufe mit
; registerbasierter Parameterbergabe
haupt_prg:
ldir24,42; 1. Beispielwert laden
ldir25,37; 2. Beispielwert laden
rcall up_add; Unterprogramm aufrufen
; weitere Befehle zur Verarbeitung des
456
;
up_add:
pushr24;
addr24,r25;
movr16,r24;
popr24;
ret;
14Mikrocontroller
Ergebnisses (steht in r16)
r24 auf dem Stack sichern
Parameter addieren
Ergebnis nach r16 schreiben
r24 wieder herstellen
Unterprogramm verlassen
Als Alternative zur registerbasierten Parameterbergabe kommt auch die bergabe von Parametern mithilfe des Stacks infrage. Dieses Vorgehen ist insbesondere
dann sinnvoll, wenn eine groe Anzahl von Parametern an ein Unterprogramm bergeben werden soll. Im folgenden Beispiel wird die Parameterbergabe exemplarisch
verdeutlicht.
Das Unterprogramm sichert zunchst die verwendeten Registerwerte auf dem Stack,
und es wird der aktuelle Wert des Stackpointers in das Z-Register geladen. Anschlieend
erfolgt die indirekte Adressierung der Daten mithilfe einer indirekten Adressierung mit
Verschiebung. Nach der Verarbeitung der Daten, in diesem Beispiel die Addition der
bergebenen Parameter, wird das Ergebnis auf dem Stack gesichert, wobei der erste
bergabeparameter berschrieben wird. Nach dem Wiederherstellen der gesicherten
Registerwerte wird das Unterprogramm verlassen.
Das Hauptprogramm stellt den ursprnglichen Wert des Stackpointers nach Rckkehr
aus dem Unterprogramm wieder her, indem die zuvor mit push-Befehlen auf dem Stack
abgelegten Werte mit zwei pop-Befehlen vom Stack entfernt werden. Da der erste bergabeparameter mit dem Ergebnis des Unterprogramms berschrieben wurde, befindet
sich nach Ausfhrung beider pop-Befehle das Ergebnis des Unterprogramms im Arbeitsregister r24.
Wird eine Parameterbergabe mithilfe des Stacks durchgefhrt, ist es sinnvoll, die
Belegung des Stacks tabellarisch festzuhalten. Hierzu wird in einer zweispaltigen Tabelle
in der linken Spalte die Adresse der Speicherstelle (relativ zum aktuellen Stackpointer)
und in der rechten Spalte der Wert der Speicherstelle eingetragen.
Fr die Realisierung des Codes wird angenommen, dass das Hauptprogramm zwei
Parameter auf dem Stack ablegt und anschlieend in das Unterprogramm verzweigt. Zu
Beginn des Unterprogramms werden die Register r30, r31, r24 und r25 auf dem Stack
gesichert. Die anschlieende Belegung des Stacks ist in Tab.14.10 dargestellt. Anhand
der Tabelle kann nachvollzogen werden, dass die Parameter an den Adressen Stackpointer+7 und Stackpointer+8 zu finden sind, woraus sich direkt der bentigte Offset fr die
Verschiebung zur Adressierung der bergabeparameter ergibt.
Auf Basis der dokumentierten Stackbelegung kann das Programm realisiert werden.
Im Folgenden ist der Code fr das Hauptprogramm haupt_prg und das Unterprogramm
up_add dargestellt.
457
Adresse
Wert
SP+8
1. Parameter (42)
SP+7
2. Parameter (37)
SP+6
Rcksprungadresse
SP+5
Rcksprungadresse
SP+4
r30
SP+3
r31
SP+2
r24
SP+1
r25
SP
unbelegt
458
14Mikrocontroller
459
Treten Ereignisse nur kurzzeitig auf, besteht insbesondere bei Polling die Gefahr, dass
diese Ereignisse verpasst werden (die Gste gehen wieder, weil der Gastgeber gerade
zu lange in der Kche beschftigt ist)
In den folgenden Abschnitten werden weitere Aspekte der Interruptverarbeitung durch
ein Mikrorechnersystem diskutiert.
14.6.1 Interruptfreigabe
In typischen Mikrorechnersystemen knnen prinzipiell mehrere Ereignisse auftreten, auf
die ein Programm reagieren knnte. Nicht alle dieser mglichen Ereignisse sind fr eine
konkrete Anwendung relevant. Daher ist es sinnvoll, dass nur die relevanten Ereignisse
zu einer Unterbrechung des Programms fhren.
Die Mglichkeit, dass man festlegt welche Ereignisse zu Programmunterbrechungen
fhren, wird als Interruptfreigabe bezeichnet.
Die Interruptfreigabe erfolgt hufig hierarchisch. Hierbei kann eine globale und eine
lokale Interruptfreigabe unterschieden werden. Die globale Interruptfreigabe dient dazu,
Programmunterbrechungen grundstzlich zuzulassen. Zustzlich ist es fr jedes Ereignis
mglich, das Auslsen eines Interrupts zu erlauben oder zu sperren. Erst wenn die globale
Interruptfreigabe und die lokale Freigabe mindestens eines Ereignisses erfolgt sind, knnen Unterbrechungen auftreten. Damit ein Ereignis (beispielsweise eine Flanke an einem
Interrupteingang) zu einer Programmunterbrechung fhrt, muss also sowohl die lokale
Freigabe des jeweiligen Ereignisses als auch die globale Interruptfreigabe erfolgt sein.
Die globale Freigabe von Interrupts im Fall der AVR-CPU erfolgt durch das Setzen
des Interrupt-Flags (I-Flag) im Statusregister der CPU. Hierfr kann fr Assemblerprogramme der Befehl sei beziehungsweise fr C-Programme die Funktion sei() verwendet
werden. Das Lschen des Flags, und damit das globale Sperren aller Interrupts, erfolgt
mit dem Befehl cli oder der C-Funktion cli().
Die lokale Interruptfreigabe erfolgt durch eine entsprechende Programmierung der
einzelnen eingebetteten Peripheriekomponenten, die in den nachfolgenden Abschnitten nher vorgestellt werden. Exemplarisch fr die lokale Interruptfreigabe werden hier
externe Interrupts behandelt.
Die Controller der AVR-Familie besitzen die Mglichkeit einer Programmunterbrechung, wenn ein ueres Signal einen bestimmten Wert annimmt. Hierzu besitzt beispielsweise der Controller ATmega32 drei Anschlsse, die mit INT0, INT1 und INT2
gekennzeichnet sind. Fr die lokale Freigabe der zugehrigen Interrupts besitzt der
ATmega32 das Global Interrupt Control Register (GICR), welches die in Tab.14.11 dargestellte Belegung hat.
Durch Setzen des Bits 7 dieses Registers erfolgt beispielsweise die lokale Freigabe
des Interrupts, der dem Controlleranschluss INT1 zugeordnet ist. Entsprechendes gilt fr
die Bits 6 und 5, mit denen die Interrupts der Anschlsse INT0 bzw. INT2 freigeschaltet
werden knnen.
460
Tab.14.11Belegung des
GICR-Registers
14Mikrocontroller
GICR
Bit
Name
INT1
INT0
INT2
IVSEL IVCE
14.6.2 Interrupt-Service-Routinen
Nachdem ein freigegebenes Ereignis zur Auslsung einer Unterbrechung gefhrt hat,
muss der Programmteil aufgerufen werden, der zur Verarbeitung dieses Interrupts vorgesehen ist. Dieser Programmteil wird als Interrupt-Service-Routine (ISR) bezeichnet.
Die Unterbrechung des laufenden Programms und das Verzweigen in die ISR erfolgen
durch die Hardware des Mikrorechners. Daher muss der CPU vor dem Auslsen eines
Interrupts bekannt sein, an welcher Position im Programmspeicher die zugehrige ISR
zu finden ist. Hierzu wird ein Zeiger auf die entsprechende Programmspeicher-Position
bentigt. Dieser Zeiger, welcher auch als Interrupt-Vektor bezeichnet wird, kann bereits
mit dem Entwurf des Prozessors festgelegt werden. In diesem Fall liegt die Position der
ISR fest und kann nicht nachtrglich modifiziert werden. Alternativ finden auch programmierbare Interrupt-Vektoren Anwendung. In diesem Fall kann durch eine entsprechende Programmierung die Einsprungadresse der ISR durch das Programm bestimmt
werden.
Im Fall der AVR-CPU wird der erste Weg beschritten, wobei die Interrupt-ServiceRoutinen in den ersten Speicherstellen des Programmspeichers abgelegt werden. Fr
jede ISR sind im unteren Teil des Programmspeichers zwei Programmspeicherworte
reserviert. Dieser Speicherplatz reicht natrlich nicht fr die Aufnahme einer kompletten
ISR aus. Allerdings ist der reservierte Bereich ausreichend, um einen Sprungbefehl (zum
Beispiel mithilfe des jmp-Befehls) aufzunehmen, mit welcher der Code der eigentlichen
ISR aufgerufen wird.
In den Datenblttern der AVR-Controller ist die Zuordnung von Ereignissen und
Interrupt-Vektoren zu finden. Exemplarisch fasst Tab.14.12 die Interrupt-Vektoren des
ATmega32 zusammen.
Bei einem Ereignis an INT1 springt ein Interrupt beispielsweise an Adresse
4 und dort wird ein Sprung in die ISR hinterlegt. Da die Sprungbefehle immer
16Bit des Programmspeichers belegen, beginnen alle Interruptvektoren an geraden
Programmspeicheradressen.
Die folgenden Beispielprogramme verdeutlichen die Verwendung von InterruptService-Routinen in Assembler beziehungsweise C. Um die Programme mglichst
461
Erluterungen
Gruppe
00
RESET
Reset
02
INT0
04
INT1
Externe
Interruptquellen
06
INT2
08
TIMER2_COMP
Timer2-Vergleichs-Interrupt
0A
TIMER2_OVF
Timer2-berlauf-Interrupt
0C
TIMER1_CAPT
Timer1-Capture-Interrupt (ICU)
0E
TIMER1_COMPA Timer1-Vergleichs-Interrupt A
10
TIMER1_COMPB Timer1-Vergleichs-Interrupt B
12
TIMER1_OVF
Timer1-berlauf-Interrupt
14
TIMER0_COMP
Timer0-Vergleichs-Interrupt
16
TIMER0_OVF
Timer0-berlauf-Interrupt
18
SPI_STC
1A
USART_RXC
USART: Datenempfang
abgeschlossen
1C
USART_UDRE
1E
USART_TXC
20
ADC
22
EE_RDY
EEPROM-Bereit-Interrupt
EEPROM
24
ANA_COMP
Analog-Komparator
26
TWI
I2C/TWI-Interrupt
Eingebettete
Schnittstellen
28
SPM_RDY
Programmspeicher-Interrupt
Programmspeicher
Timer
Eingebettete
Schnittstellen
bersichtlich zu halten, beschrnkt sich die Aufgabe der ISR auf das Zhlen der steigenden Flanken am Controller-Anschluss INT1.
In diesem Programm werden einige Assembler-Direktiven verwendet, die an dem
vorangestellten Punkt zu erkennen sind. Assembler-Direktiven sind Anweisungen, die
whrend der bersetzung des Programms ausgewertet werden. Sie werden nicht in ausfhrbare Befehle umgesetzt und belegen daher auch keinen Platz im Programmspeicher.
Die Direktive .org bewirkt, dass nachfolgende Befehle an einer definierten Position im
Programmspeicher abgelegt werden. Im obigen Beispiel wird sie verwendet, um den
nachfolgenden Befehl (jmp isr_int1) an die Adresse des Interruptvektors (0x04) abzulegen. Nach Einsatz der Direktive .dseg beziehen sich alle Befehle auf das SRAM. Die im
Beispielprogramm angegebene Folge aus den Direktiven .dseg, .org und .db dienen dazu,
im SRAM ein Byte an der Adresse 0x200 zu reservieren. Mithilfe des Labels icnt kann
462
14Mikrocontroller
auf dieses Byte hnlich wie auf eine Variable in einem Hochsprachenprogramm zugegriffen werden.
; Beispiel fr Unterprogrammaufrufe mit Interrupt-Service-Routinen
; Beispiel fr die Interruptverarbeitung in Assembler
; Zhlen der steigenden Flanken am Anschluss INT1
.include "m32def.inc"; Controllerspezifische Definitionen einbinden
jmpmain; nach Reset: Sprung ins Hauptprogramm
.org0x04; Assemblierung bei INT-Vektor fortsetzen
jmpisr_int1; Sprung in eigentliche ISR fr INT1
; hier mglicherweise weitere ISRs
; oder Unterprogramme
isr_int1:
pushr24; Register auf Stack retten
ldsr24,icnt; aktuellen Zhlerwert holen
incr24; Zhler inkrementieren
stsicnt,r24; in SRAM abspeichern
reti; ISR verlassen
main:
; Initialisierung
clrr24; r24 auf null setzen
stsicnt,r24; Zhlvariable lschen
ldsr16,MCUCR
orir16,(1<<ISC10); INT1 so programmieren, dass eine Unterorir16,(1<<ISC11); brechung mit einer steig. Flanke auftritt
stsMCUCR,r16
ldsr16, GIFR
orir16,(1<< INT1); lokale Interruptfreigabe fr INT1
stsMCUCR,r16
sei; globale Interruptfreigabe
; Endlosschleife des Hauptprogramms
main_lp:
ldsr24,icnt; aktuellen Zhler nach r24
callausgabe; Wert ausgeben -- Das Unterprogramm
; ausgabe" ist hier nicht angegeben
rjmpmain_lp; Endlosschleife des Hauptprogramms
.dseg;
Assemblierung
auf
SRAM
umschalten
(Datensegment")
.org0x200; SRAM-Adresse auswhlen
icnt:
.db0; 1 Byte reservieren
Ein quivalentes Programm kann auch in der Sprache C formuliert werden. Hierzu
werden sowohl die controller-spezifischen Definitionen aus der Include-Datei io.h als
auch die speziellen Definitionen fr Interruptverarbeitung (interrupt.h) eingebunden.
463
In der Include-Datei interrupt.h sind unter anderem auch Makros definiert, die zu
einer einfachen Definition von ISRs verwendet werden knnen. Hierzu wird das Makro
ISR() aufgerufen. Als Parameter wird der zugehrige Interruptvektor verwendet, der
durch die Kurzbezeichnung des Vektors mit nachgestelltem _vect gekennzeichnet
wird.
// Programmbeispiel zur Verwendung von ISRs in C
#include <avr/io.h>// Controller-spezifische Definitionen
#include <avr/interrupt.h>// Header-Datei fr Interrupts
volatile unsigned char icnt;
// Hauptprogramm
void main()
{
// Initialisierung
icnt = 0;
// Interrupt bei steigender Flanke an INT1
MCUCR |= (1<<ISC11)| (1<<ISC10);
GICR |= 1<<INT1;// Lokale Interruptfreigabe
sei();// Globale Interruptfreigabe
while (1) {// Endlosschleife
Ausgabe(icnt);
}
}
// INT1 ISR
ISR (INT1_vect)
{
icnt++;// Diese ISR inkrementiert icnt
}
464
14Mikrocontroller
bieten meist eine groe Anzahl von unterschiedlichen Mikrocontrollern an, die sich auch
im Hinblick auf die in dem System eingebetteten Komponenten unterscheiden.
Im Folgenden werden am Beispiel der Mikrocontroller der AVR-Familie typische
Peripheriekomponenten und ihre Programmierung vorgestellt. Hierbei wird der AVRMikrocontroller ATmega32 zugrunde gelegt. Anhand dieses Beispielcontrollers wird die
Funktionsweise ausgewhlter Peripheriekomponenten diskutiert. Auf diese Weise werden konkrete Kenntnisse der AVR-Mikrocontrollerserie vermittelt, die es ermglichen,
einfache AVR-basierte Systeme zu realisieren. Auerdem werden Sie in die Lage versetzt, die anhand der AVR-Serie vermittelten Grundprinzipien auf andere eingebettete
digitale Systeme zu bertragen.
14.7.1 Ports
Jeder Mikrocontroller besitzt sogenannte Ports. Ports sind Anschlsse des Mikrocontrollers, die durch eine entsprechende Programmierung als digitale Eingnge oder Ausgnge
verwendet werden knnen.
Hufig werden die einzelnen Anschlsse zu Gruppen zusammengefasst und erhalten einen logischen Namen, der sowohl im Datenblatt referenziert als auch im Rahmen
der Softwareentwicklung in den Programmen verwendet wird. So besitzt der ATmega32
beispielsweise vier Ports, die mit PORTA, PORTB, PORTC und PORTD bezeichnet
werden. Jedem dieser Ports sind acht Anschlsse des Controllers zugeordnet. Die Portanschlsse des Controllers werden durch eine entsprechende Nummerierung unterschieden. So werden beispielsweise die acht Anschlsse des Ports PORTA als PA0 bis PA7
bezeichnet. Fr die anderen Ports gelten entsprechende Zuordnungen.
Um eine hohe Flexibilitt beim Einsatz der Ports zu erzielen, ist es mglich, jeden
einzelnen Anschluss eines Ports, unabhngig von den anderen Anschlssen dieses Ports,
als Ausgang oder Eingang zu programmieren.
Ist ein Portanschluss als Ausgang konfiguriert, wird durch das laufende Programm
festgelegt, ob an diesem Anschluss eine logische 0 oder 1 ausgegeben wird. Entsprechend kann mithilfe eines als Eingang programmierten Ports ein digitaler Wert eingelesen und durch die Software des Controllers ausgewertet werden.
Ports stellen somit die universellste Peripheriekomponente dar, da sie fr die Verbindung eines Mikrocontrollers mit beliebigen anderen digitalen Bausteinen eingesetzt
werden knnen. Aus diesem Grund wird statt des Begriffs Port hufig auch der Begriff
General Purpose Input/Output (GPIO) verwendet.
Die Grenzen der Einsetzbarkeit von Ports wird im Wesentlichen durch die Leistungsfhigkeit der CPU des Controllers bestimmt: Je hufiger ein Portbit pro Zeiteinheit
umprogrammiert werden muss, desto hher ist die hierfr bentigte Rechenleistung. Im
ungnstigsten Fall bersteigt die zur Bedienung der Ports bentigte Rechenleistung die
durch die CPU zur Verfgung gestellte Rechenleistung, sodass eine konkrete Aufgabe,
wie die Kommunikation mit einem anderen Baustein, nicht realisiert werden kann. Es
465
muss daher im Einzelfall geprft werden, ob eine angestrebte digitale Ein-/Ausgabefunktion durch eine entsprechende Portprogrammierung erfolgen kann, oder ob der Einsatz
eines Controllers sinnvoll ist, der die gewnschte Funktion durch spezialisierte Hardware-Komponenten zur Verfgung stellt.
Zur Programmierung von Peripheriekomponenten werden sogenannte I/O-Register
verwendet. Entsprechend der Grundfunktion eines Ports mssen mindestens zwei I/ORegister vorhanden sein: Ein Register zur Auswahl, ob ein Anschluss als Eingang oder
als Ausgang betrieben werden soll und ein weiteres Register, welches zum Einlesen oder
Ausgeben der eigentlichen Daten dient.
Entsprechend ihrer Funktion findet man in nahezu allen Mikrocontrollern zur Programmierung von Ports sogenannte Datenrichtungsregister und Datenregister. Mithilfe
des Datenrichtungsregisters wird die Datenrichtung, also ob ein Portbit als Eingang oder
als Ausgang arbeitet, programmiert. Die Datenregister dienen der eigentlichen Ein-/Ausgabe digitaler Werte. Darber hinaus knnen einem Port weitere I/O-Register zugeordnet
sein, mit denen spezielle Portfunktionen aktiviert werden knnen.
Die im Rahmen dieses Kapitels betrachtete AVR-Familie ordnet jedem Port drei I/ORegister zu:
Datenrichtungsregister (Data Direction Register, DDR)
Wird ein Bit im Datenrichtungsregister auf 0 gesetzt, arbeitet der zugehrige Anschluss
als Eingang. Ist das dem Anschluss zugehrige Bit dagegen auf 1 gesetzt, wird der entsprechende Anschluss als digitaler Ausgang betrieben.
Dateneingangsregister (Port Input Register, PIN)
Mithilfe dieses Registers knnen die an einem Port anliegenden digitalen Eingangswerte
eingelesen werden.
Datenausgaberegister (Port Output Register, PORT)
Ist ein Portanschluss als Ausgang programmiert, kann mithilfe des PORT-Registers der
ausgegebene logische Wert festgelegt werden. Ist ein Portanschluss als Ausgang programmiert, wird durch Setzen des zugehrigen Bits des PORT-Registers eine 1 oder
durch Lschen des Bits eine logische 0 ausgegeben.
Wird ein Portanschluss als Eingang verwendet, kann mithilfe des PORT-Registers ein
sogenannter Pull-up-Widerstand durch Setzen des Portbits aktiviert werden. Der Porteingang wird dann ber einen Widerstand (im Bereich mehrerer Kiloohm) mit der Versorgungsspannung verbunden. Auf diese Weise liegt an dem Eingang eine schwache
Eins an, die durch die uere Beschaltung mit einer starken Null, also einer relativ
niederohmigen Verbindung zu Masse, berschrieben werden kann.
Ist das zugehrige Bit im PORT-Register gelscht, arbeitet der Eingang in einem
hochohmigen Modus (s.Tab.14.13).
Die Portprogrammierung kann anhand eines einfachen Schaltungsbeispiels verdeutlicht werden: An einen ATmega32-Controller ist ein Taster und eine LED mit
466
14Mikrocontroller
Vorwiderstand anschlossen. Der Taster ist mit dem Portanschluss PA2 und die LED mit
dem Anschluss PA6 verbunden. Ein entsprechender Schaltplan ist in Abb.14.7 dargestellt. Die Aufgabe des Controllers besteht darin, die LED einzuschalten, wenn der Taster
gedrckt wird.
Tab.14.13Funktionen der
Portanschlsse bei AVRMikrocontrollern
2
3
4
5
6
7
8
9
+5V
10
11
12
13
14
15
16
17
18
19
20
Eingang, hochohmig
PB0 (XCK/T0)
(ADC0) PA0
PB1 (T1)
(ADC1) PA1
PB2 (INT2/AIN0)
(ADC2) PA2
PB3 (OC0/AIN1)
(ADC3) PA3
PB4 (/SS)
(ADC4) PA4
PB5 (MOSI)
(ADC5) PA5
PB6 (MISO)
(ADC6) PA6
PB7 (SCK)
(ADC7) PA7
/RESET
VCC
GND
XTAL2
XTAL1
ATmega32
Bit im IO-Register
DDR
PORT
AREF
GND
AVCC
(TOSC2) PC7
(TOSC1) PC6
PD0 (RXD)
(TDI) PC5
PD1 (TXD)
(TDO) PC4
PD2 (INT0)
(TMS) PC3
PD3 (INT1)
(TCK) PC2
PD4 (OC1B)
(SDA) PC1
PD5 (OC1A)
(SCL) PC0
PD6 (ICP1)
(OC2) PD7
Taster
40
39
38
37
36
35
34
33
RV
32
31
30
29
28
27
26
25
24
23
22
21
+5V
LED
467
Aufgrund der Beschaltung muss der Anschluss PA1 als Eingang und der Anschluss
PA6 als Ausgang betrieben werden. ber die Verwendung der anderen Anschlsse des
Ports PORTA wurde keine Aussage getroffen.
#define __AVR_ATmega32__ // Auswahl des Controllers
#include <avr/io.h> // Definitionen etc. fr den Controller einbinden
void main()
{
// Initialisierung
DDRA|= 0x40; // Bit 6 im Datenrichtungsregister A setzen
DDRA&= 0xFD; // Bit 1 im Datenrichtungsregister A lschen
PORTA |= 0x02; // Bit 1 im PORTA-Register setzen und so den
// internen Pull-Up-Widerstand aktivieren
// Endlosschleife
while (1) {
if (PINA & 0x02)//
PORTA &= 0xBF;//
else//
PORTA |= 0x40;//
}
}
Mithilfe dieser Zeile wird der Controller ausgewhlt, fr den das Programm geschrieben wird. Bei Verwendung einer Entwicklungsumgebung wie Atmel Studio geschieht
diese Auswahl in der Regel ber die Einstellungen des in der Entwicklungsumgebung
angelegten Projektes. In diesem Fall kann die explizite Auswahl des Controllers im Programm entfallen.
#include <avr/io.h> // Definitionen etc. fr den Controller einbinden
Diese Zeile inkludiert eine Header-Datei, welche unter anderem die Definitionen der
im Controller vorhandenen I/O-Register enthlt. Anschlieend kann auf die Register des
Controllers wie auf Variablen eines C-Programms zugegriffen werden, was die Programmierung und die Lesbarkeit des Programms wesentlich vereinfacht.
void main()
468
14Mikrocontroller
Diese Zeile leitet das Hauptprogramm ein und entspricht der blichen Programmierung in der Programmiersprache C. Anders als bei manchen Programmen, die fr einen
PC entwickelt werden, besitzt das Hauptprogramm keine Argumente und keine Rckgabewerte. Da das Hauptprogramm bei einfachen Controllern hufig direkt nach dem
Einschalten des Systems, ohne Zuhilfenahme eines Betriebssystems gestartet wird, existiert kein aufrufendes Programm (zum Beispiel das Betriebssystem), welches Argumente
bergeben knnte oder Rckgabewerte erwartet.
Manchmal wird dennoch fr das Hauptprogramm eines AVRs ein Rckgabewert
angegeben. Der Grund hierfr ist in dem verwendeten Compiler zu suchen, welcher eine
Warnmeldung ausgibt, falls das Hauptprogramm keinen Rckgabewert besitzt. Diese
Warnmeldung kann durch die Definition eines Rckgabewertes vermieden werden.
// Initialisierung
DDRA|= 0x40; // Bit 6 im
DDRA&= 0xFD; // Bit 1 im
PORTA |= 0x02; // Bit 1 im
// internen
Datenrichtungsregister A setzen
Datenrichtungsregister A lschen
PORTA-Register setzen und so den
Pull-Up-Widerstand aktivieren
Mit dem Setzen der fr die Anwendung relevanten Bits der Register DDRA und
PORTA ist die Initialisierung fr dieses einfache Programmbeispiel abgeschlossen und
es folgt der Code fr den normalen Betrieb des Controllers. Dieser wird in den meisten Fllen in eine Endlosschleife eingebettet, da das Programm kontinuierlich auf Eingaben reagieren soll. Wrde man auf die Endlosschleife verzichten, wrde das Programm
bereits nach wenigen Taktzyklen beendet sein. In diesem Fall wird in eine vom Compiler
469
erzeugte leere Endlosschleife verzweigt. Die gewnschte Reaktion des Controllers auf
den Tastendruck wrde also nur einmalig, kurz nach dem Einschalten des Controllers
erfolgen.
if (PINA & 0x02)// PA2 = 1 => Taster nicht gedrckt
Mithilfe dieser Zeile wird der Anschluss PA2 des Controllers abgefragt. Der Lesezugriff auf PINA liefert den momentanen Wert aller Portanschlsse des Ports PA zurck.
Von diesen 8Bit ist jedoch nur eines fr die Ausfhrung der gewnschten Funktion relevant. Daher werden die nicht relevanten Bits durch die UND-Verknpfung mit der Konstanten 0x02 (binr: 0000 0010) ausgeblendet, und es ergeben sich zwei mgliche Werte
fr den Ausdruck PINA&0x02: Liegt an dem Anschluss PA2 eine logische 1 an (Taster
offen), ergibt der Ausdruck den Wert 2. Ist der Taster gedrckt und liegt eine logische 0
am Anschluss PA2 an, ergibt der Ausdruck den Wert 0. Da in der Programmiersprache
C alle Ausdrcke, die einen Wert ungleich Null ergeben, als wahr interpretiert werden,
kann der Ausdruck PINA&0x02 zur Auswahl herangezogen werden. Ist der Taster nicht
gedrckt (Ausdruck ungleich Null), wrde der If-Zweig ausgefhrt werden. Im anderen
Fall der Else-Zweig.
PORTA &= 0xBF;// PORTA(6) lschen (LED aus)
PORTA |= 0x40;// PORTA(6) setzen (LED an)
Diese beiden Zeilen setzen beziehungsweise lschen das Bit 6 des I/O-Registers
PORTA. Ist das Bit gelscht, liegt an dem Portanschluss eine niedrige Spannung (nahe
0V) an und ber die LED fllt keine Spannung ab; die LED leuchtet nicht. Ist das Bit
dagegen gesetzt, wird am Anschluss eine hohe Spannung (nahe der Versorgungsspannung des Controllers) ausgegeben und die LED leuchtet.
Die Programmierung der Ports kann ebenso in Assembler erfolgen. Ein Programm,
welches die oben beschriebene Funktion ausfhrt, knnte wie folgt realisiert werden:
.include "m32def.inc"
inr24,DDRA; Aktuellen Wert des DDRA-Registers holen
orir24,0x40; relevante Bits setzen
andir24,2; bzw. lschen
outDDRA,r24; Ergebnis abspeichern
inr24,PORTA; PORTA holen
orir24,0x2; Pull-Up fr Eingang PA1 aktivieren
outPORTA,r24; PORTA setzen
main_loop:
inr16,PINA; Eingabewert holen
andir16,0x02; Bit 1 maskieren
breqled_on; falls Ergebnis = 0, springen
inr24,PORTA
470
14Mikrocontroller
andir24,0xBF
outPORTA,r24; LED aus
rjmpmain_loop
led_on:
inr24,PORTA
orir24,0x40
outPORTA,r24; LED an
rjmpmain_loop
Den Portanschlssen eines Mikrocontrollers knnen neben der softwaregesteuerten Ein-/Ausgabe digitaler Daten auch andere Funktionen zugeordnet werden. Die entsprechenden alternativen Portfunktionen (engl. alternate port functions) werden in den
Anschlussdiagrammen des Controllers hufig in Klammern angegeben. So knnen die
Anschlsse PA0 bis PA7 eines ATmega32 beispielsweise als analoge Eingnge verwendet werden. Andere Anschlsse wie PD0, PD1 oder PC0, PC1 knnen dagegen mit eingebetteten Peripheriekomponenten zur seriellen Datenbertragung verbunden werden.
Ist eine alternative Portfunktion aktiviert worden, ist die ursprngliche Portfunktion
in der Regel nicht mehr zugnglich, da die Peripheriekomponente die Steuerung der
Anschlsse bernimmt. Durch die Mehrfachbelegung der Anschlsse eines Mikrocontrollers wird erreicht, dass die Anzahl der Anschlsse gering gehalten wird. Der Controller kann somit in kleinere Gehuse mit relativ wenigen Anschlssen eingebaut werden,
was neben der kleineren Bauform auch zu einer Verringerung der Herstellungskosten
beitrgt. In den folgenden Abschnitten werden einige der wichtigsten Peripheriekomponenten anhand des Beispiels eines ATmega32 beschrieben. Die zugehrigen alternativen Portfunktionen werden in Zusammenhang mit der jeweiligen Peripheriekomponente
beschrieben.
14.7.2 Timer
Timer sind ebenso wie die zuvor beschriebenen Ports Standardkomponenten eines Mikrocontrollers. Sie knnen fr sehr unterschiedliche Aufgaben eingesetzt werden. Hierzu
zhlen unter anderem die Erzeugung von Signalen, die zeitliche Vermessung von Signalen (zum Beispiel Frequenzzhler) oder auch die regelmige Unterbrechung des CPUProgramms durch Interrupts.
Die Kernkomponente eines Timers ist ein digitaler Zhler, der hufig eine Wortbreite
von 8, 16 oder 32bit besitzt. Der Zhler wird entweder mit einem aus dem Systemtakt
abgeleiteten Takt oder mit einem von auen angelegten Taktsignal betrieben (Abb.14.8).
Der aktuelle Zhlerstand wird durch eine nachgeschaltete Einheit ausgewertet, welche in
Abhngigkeit vom Zhlerstand ein Timer-Ereignis auslsen kann. Auf Basis des TimerEreignisses knnen weitere Aktionen abgeleitet werden. Dies kann zum Beispiel das
Invertieren eines Mikrocontroller-Anschlusses oder die Unterbrechung des laufenden
Programms durch einen Interrupt sein.
471
Vorteiler
Taktauswahl
Anschluss fr
Zufhrung eines
externen Taktes
Zhler
stand
Takt
Zhler
Zhlerstandberprfung
TimerEreignis
Systemtakt
Auf den ersten Blick mag die Kernfunktion eines Timers simpel erscheinen, sodass
die Schlussfolgerung naheliegen knnte, dass die Funktion eines Timers auch mithilfe der CPU durch ein entsprechendes Programm nachgebildet werden kann. Diese
Schlussfolgerung wrde jedoch vernachlssigen, dass die CPU die wertvollste und universell einsetzbarste Komponente ist. Es ist daher nicht sinnvoll, diese Komponente
fr eine so einfache Aufgabe wie das Zhlen von Impulsen einzusetzen, da die hierfr
bentigte Rechenleistung nicht mehr fr andere Aufgaben genutzt werden kann. Neben
der Entlastung der CPU bietet die Auslagerung hufig genutzter Funktionen in eine
eigenstndige Hardwarekomponente einen weiteren entscheidenden Vorteil: Wird eine
Funktion in Form einer spezialisierten Hardware implementiert, kann die Implementierung so erfolgen, dass die Ausfhrung dieser Funktion in wenigen Taktzyklen (hufig
in einem einzelnen Taktzyklus) erfolgt. Eine entsprechende Realisierung als CPU-Programm bentigt dagegen in der Regel eine deutlich hhere Ausfhrungszeit, was sich
insbesondere dann negativ auswirken wrde, wenn auf uere Ereignisse, wie zum
Beispiel der Wechsel des Wertes eines Eingangssignals reagiert werden muss. Diese
Tatsache wird in den folgenden Abschnitten am Beispiel der Funktion eines Timers
verdeutlicht.
Die im Rahmen dieses Kapitels betrachteten Timer des Mikrocontrollers ATmega32
knnen in verschiedenen Modi betrieben werden. Die Modi werden als der Normale
Modus (normal mode), der CTC-Modus sowie als PWM-Modi bezeichnet. In den
folgenden Abschnitten werden diese Modi nher beschrieben.
14.7.2.1Normal Mode
Der als Normal Mode bezeichnete Modus eines AVR-Timers stellt den einfachsten
Betriebsmodus dar. In diesem Modus zhlt der Zhler des Timers nur aufwrts. Bei
Erreichen des Zhler-Endwertes (zum Beispiel 255 bei einem 8-Bit-Timer) wird der
Zhlerstand auf 0 gesetzt und erneut aufwrts gezhlt. Das Erreichen des Endwertes
stellt ein Ereignis dar, welches zum Beispiel zur Invertierung eines Ausgangssignals verwendet werden kann. Das zugehrige zeitliche Verhalten des Zhlerstandes und des Ausgangssignals ist in Abb.14.9 dargestellt.
472
14Mikrocontroller
Zhlerstand
Endwert
Ausgangssignal
1
0
Wird der Timer mit der Taktfrequenz des Controllers fsys betrieben, ergibt sich die
Rate der berlaufereignisse ROV beziehungsweise die Frequenz des erzeugten Signals fout
zu:
ROV =
fsys
256
beziehungsweise
fout =
fsys
ROV
=
2
256
Die berlaufrate ROV hngt in diesem Fall nur von der Systemtaktfrequenz ab. Fr eine
grobe Einstellung der berlaufrate wird bei Timern in der Regel ein Vorteiler eingesetzt.
Im Fall des ATmega32 kann der Vorteiler des Timers auf fnf verschiedene Werte zwischen 1 (keine Vorteilung) und 1024 (der Zhler des Timers wird mit 1/1024 der Systemfrequenz betrieben) eingestellt werden. Fr die Einstellung des Vorteilers werden
I/O-Register (Timer/Counter Control Register, TCCR) zur Verfgung gestellt. Wird fr
den Vorteiler der Wert NVor verwendet, gilt fr die berlaufrate
ROV =
fsys
NVor 256
Durch die Verwendung des Vorteilers lsst sich somit eine grobe Einstellung der berlaufrate und damit der Frequenz der Timerereignisse vornehmen.
14.7.2.2CTC Modus
Eine feinere Einstellung des zeitlichen Verlaufs der Timerereignisse lsst sich erzielen,
wenn der Zhlerstand, dem ein Ereignis zugeordnet ist, frei programmiert werden kann.
Hierzu besitzt ein Timer ein Register, dessen Inhalt kontinuierlich mit dem aktuellen
473
Zhlerstand verglichen wird. Im Fall der AVR-Timer wird dieses Register als OCR (Output Compare Register) bezeichnet. Erreicht der Zhlerstand des Timers den im OCRRegister programmierten Wert, kann dies als ein Timerereignis gewertet werden, welches
analog zum Timer-berlauf im Nomal Mode behandelt wird. Dieser Betriebsmodus wird
als Clear Timer on Compare match (CTC) bezeichnet. Der Verlauf des Zhlerstandes im
CTC-Modus ist in Abb.14.10 dargestellt.
Mithilfe des CTC-Modus wird eine relativ feine Einstellung der Rate der Timerereignisse beziehungsweise der Frequenz des Ausgangssignals ermglicht. Es gilt:
RCTC =
fsys
NVor (OCR + 1)
14.7.2.3PWM-Modi
Bei den beiden zuvor vorgestellten Timermodi lsst sich die Frequenz eines erzeugten
Signals einstellen, das Tastverhltnis ist dagegen mit 0,5 festgelegt und kann in diesen
Modi nicht gendert werden. Die Erzeugung eines Signals mit programmierbarem Tastverhltnis lsst sich mithilfe der sogenannten PWM-Modi realisieren. Der Name PWMModi ergibt sich aus der typischen Anwendung dieser Modi, nmlich die Erzeugung
eines pulsweiten-modulierten Signals (PWM-Signal).
Bei Verwendung der PWM Modi zhlt der Timer immer bis zum Erreichen des Endwertes. Es kann allerdings sowohl das Erreichen des Endwertes als auch das Durchlaufen
des Vergleichswertes als interrupt-auslsendes Timerereignis genutzt werden.
Grundstzlich werden zwei PWM-Modi unterschieden. Im ersten Fall des FastPWM-Modus, der auch als Single-Slope-PWM bezeichnet wird, zhlt der Zhler des
Timers nur aufwrts. Nach dem Erreichen des Endwertes beginnt der Zhler von 0 an
zu zhlen. Dabei findet die Invertierung des Ausgangssignals sowohl bei Erreichen des
Zhlerstand
Endwert
Vergleichswert
(OCR-Register)
Ausgangssignal
1
474
14Mikrocontroller
Vergleichswertes als auch bei Erreichen des Endwertes statt. Abb.14.11 zeigt das Zeitverhalten des Timers im Fast-PWM-Modus.
Die Frequenz des erzeugten PWM-Signals ist abhngig von dem gewhlten Timer
endwert TOP und der Eingangsfrequenz des Zhlers, welche sich aus der Eingangsfrequenz fin und dem gewhlten Vorteilerwert NVor ergibt. Das erzeugte Signal besitzt die
Frequenz fFPWM mit einem Tastverhltnis VFPWM
fFPWM =
fin
NVor (TOP + 1)
VFPWM =
OCR
TOP
fPCPWM =
fin
2 NVor (TOP + 1)
VPCPWM = VFPWM =
OCR
TOP
Vergleichswert
(OCR-Register)
0
Ausgangssignal
1
475
Zhlerstand
Endwert
Vergleichswert
(OCR-Register)
0
Ausgangssignal
1
476
14Mikrocontroller
Der Timer 2 des ATmega32 ist ebenso wie der Timer 0 mit einem 8-Bit-Zhler ausgestattet, und es kann ein Vergleichswert (OCR2) programmiert werden. Die Besonderheit des
Timers 2 ist der zugeordnete eingebettete Quarzoszillator, welcher unabhngig von den
anderen Komponenten des Controllers betrieben werden kann. Der Timer 2 kann mithilfe
dieses Oszillators mit einem Taktsignal versorgt werden, selbst wenn der Controller sich in
einem Stromsparmodus befindet und wesentliche Systemkomponenten abgeschaltet sind.
Zur Programmierung der Timer des ATmega32 stehen mehrere Register zur Verfgung, deren Funktion in den folgenden Abschnitten beschrieben wird.
Name
FOC0
WGM00
COM01
COM00
WGM01
CS02
CS01
CS00
CS01
CS00
Bedeutung
477
Phase-Correct-PWM-Modus, Lschen des OC0-Ausgangs bei Erreichen des Vergleichswertes whrend des
Aufwrtszhlens, Setzen whrend des Abwrtszhlens
Phase-Correct-PWM-Modus, Setzen des OC0Ausgangs bei Erreichen des Vergleichswertes whrend des Aufwrtszhlens, Lschen whrend des
Abwrtszhlens
478
14Mikrocontroller
der Input-Capture-Unit, auf welchen ber die Register ICRL und ICRH zugegriffen werden kann.
Zur Steuerung werden fr den Timer 1 zwei Register zur Verfgung gestellt, TCCR1A
und TCCR1B (Tab.14.17).
Die Bedeutung der Bits CS12, CS11, CS10 und FOC1A, FOC1B besitzen eine zu den
entsprechenden Bits des Timers 0 analoge Funktion (vgl. Tab.14.18).
Die Bits ICNC1 und ICES1 sind der Input-Capture-Unit zugeordnet. Wird ICNC1
gesetzt, wird damit ein Rauschfilter in der ICU aktiviert, welches kurzzeitige Signalwechsel am ICP1-Anschluss ausfiltert. Mit dem Bit ICES1 kann die aktive Flanke des
ICP1-Signals festgelegt werden: Ist ICES1 gesetzt, reagiert die ICU auf eine steigende
Flanke; ist ICES1 gelscht, reagiert die ICU auf eine fallende Flanke.
Tab. 14.17Belegung der Register TCCR1A und TCCR1B
TCCR1A
Bit
Name
FOC1B
WGM11 WGM10
CS11
CS10
TCCR1B
Bit
Name
ICNC1
ICES1
Signalerzeugung aus
479
Mithilfe der Bits WGM13 bis WGM10 wird der Betriebsmodus des Timers festgelegt.
Die 16 mglichen Modi des Timers 1 sind in Tab.14.19 zusammengefasst.
GM12
WGM11
WGM10
Bedeutung
Normal Mode, TOP = 0xFFFF
Reserviert
480
Tab.14.20Bedeutung der
Bits CS00, CS01 und CS02
Tab.14.21Belegung des
Registers ASSR
14Mikrocontroller
CS22
CS21
CS20
Bedeutung
Timer ist
abgeschaltet
Vorteiler =1
Vorteiler =8
Vorteiler =32
Vorteiler =64
Vorteiler =128
Vorteiler =256
Vorteiler =1024
ASSR
7
Name
Bit
der geschriebene Wert vom Timer bernommen wurde, wird das Bit von der Timer-HW
zurckgesetzt. Entsprechendes gilt fr die Register TCNT2 und TCCR2, denen die Bits
TCN2UB und TCR2UB zugeordnet sind.
481
Name
OCIE2
TOIE2
TICIE1
OCIE1A
OCIE1B
TOIE1
OCIE0
TOIE0
Bit
Name
OCF2
TOV2
ICF1
OCF1A
OCF1B
TOV1
OCF0
TOV0
TIFR
mithilfe des Timers erzeugten Signals dynamisch zu modifizieren. Der Timer muss also
im laufenden Betrieb umkonfiguriert werden. Hierbei muss beachtet werden, dass der
Zhlerstand des Timers nicht unbedingt mit der Ausfhrung des Programms synchronisiert ist. Um diese Synchronisation zu untersttzen, sind die OCR-Register der Timer mit
Schattenregistern ausgestattet. Wird in einem solchen Schattenregister ein Wert abgelegt, wirkt sich der neue Wert nicht sofort in der Timer-Hardware aus. Vielmehr wird der
im Schattenregister gespeicherte Wert erst bei Erreichen eines definierten Zhlerstands
(zum Beispiel Timerendwert) in das eigentliche Timer-Register bernommen. Fr die
dynamische Timer-Programmierung ist es sehr bequem den Interrupt freizugeben, der
dem o.g. Zhlerstand zugeordnet ist. Die Konfiguration des Timers erfolgt dann jeweils
in der entsprechenden ISR. Auf diese Weise wird der Timer nur zu definierten Zeiten neu
konfiguriert und das Verhalten des Ausgangssignals ist nicht von den Laufzeiten der einzelnen Programmteile der Software abhngig.
Als ein einfaches Beispiel fr die Interrupt-Programmierung wird im Folgenden ein
C-Programm vorgestellt, mit dem eine Uhr realisiert werden kann.
Die Uhrzeit wird in den globalen Variablen Sekunden, Minuten und Stunden abgelegt,
die von einer Timer-ISR beschrieben werden. Im Hauptprogramm wird der Timer 1 so
konfiguriert, dass alle 8000 Systemtaktzyklen ein Interrupt ausgelst wird (Vorteiler=8,
OCR-Register=999). Betrgt die Systemtaktfrequenz beispielsweise 16MHz, werden
also 2000 Interrupts pro Sekunde auftreten.
In der Timer-ISR werden die aufgetretenen Timerinterrupts gezhlt. Ist eine Sekunde
vergangen, wird die Variable Sekunden inkrementiert. Ist diese anschlieend gleich 60,
wird sie auf Null gesetzt und die Variable Minuten inkrementiert. Der Wert der Variablen
Minuten wird anschlieend berprft und gegebenenfalls auf Null gesetzt und die Variable Stunden inkrementiert.
Da die Anzahl der pro Sekunde auftretenden Interrupts von der Systemtaktfrequenz
abhngt, muss diese bekannt sein. Fr AVR-Programme gilt die Vereinbarung, dass die
Systemtaktfrequenz im Prprozessorsymbol F_CPU abgelegt wird. In der ISR wird
berprft, ob der Interruptzhler den Wert F_CPU/8000 erreicht hat, also eine Sekunde
vergangen ist.
Im Folgenden ist das Programm fr die Realisierung einer Uhr dargestellt.
482
14Mikrocontroller
#include <avr/io.h>
#include <avr/interrupt.h>// Header-Datei fr Interrupts
// Symbol fr Systemtaktfrequenz setzen. Dies kann auch in der
// Entwicklungsumgebung erfolgen
#define F_CPU 16000000// Beispiel: 16 MHz
volatile unsigned char Sekunden;
volatile unsigned char Minuten;
volatile unsigned char Stunden;
// Unterprogramm zur Ausgabe der Uhrzeit
void Zeitausgabe(unsigned char Stunden, unsigned char Minuten,
unsigned char Sekunden) {
// zum Beispiel Ausgabe auf einem Sieben-Segment-Display
}
// Hauptprogramm
void main() {
// Timer 1 initialisieren
// nicht gesetzte Bits sind nach dem Reset des Controllers 0
TCCR1B |= 1<<WGM12;// CTC-Modus
TCCR1B |= 1<<CS11;// Vorteiler = 8
OCR1A = 999;// alle 1000 Taktzyklen ein Interr.
TIMSK|= 1<<OCIE1A; // Freigabe Vergleichsinterrupt
sei();// Globale Interruptfreigabe
// Normaler Betrieb: hier erfolgt die Ausgabe der Uhrzeit
// das Zhlen der Sekunden erfolgt in der ISR
while (1) {
Zeitausgabe(Stunden, Minuten, Sekunden);
}
}
// Timer 1 ISR
ISR (TIMER1_COMPA_vect) {
static unsigned long IntCount = 0;
IntCount++;
if (IntCount == F_CPU/8000) { // 1 Sekunde vergangen ?
IntCount = 0;// Zhler zurcksetzen
Sekunden++;// Uhrzeit setzen
if (Sekunden==60) {
Sekunden = 0;
Minuten++;
if (Minuten==60) {
Minuten = 0;
Stunden++;
if (Stunden==24) Stunden = 0;
}
}
}
}
483
14.7.2.9Watchdog-Timer
Grundstzlich kann selbst bei sorgfltigster Entwicklung von Softwarekomponenten nicht sichergestellt werden, dass ein Programm komplett fehlerfrei ist und in allen
Betriebszustnden des Systems reibungslos funktioniert. Unentdeckte Softwarefehler
knnen je nach Anwendung fatale Folgen fr ein System oder fr die Umgebung des
Systems, incl. der Benutzer haben. Um einen Systemabsturz, der zum Beispiel aufgrund
eines Softwarefehlers aufgetreten ist, abfangen zu knnen, besitzen Mikrocontroller
einen sogenannten Watchdog-Timer.
Die Arbeitsweise des Watchdogs hnelt dem Prinzip des sogenannten TotmannKnopfes, wie er in Schienenfahrzeugen eingesetzt wird: Der Fahrzeugfhrer muss in
regelmigen Abstnden den Knopf bedienen. Unterlsst er dies, wird automatisch ein
Nothalt des Systems ausgefhrt.
Der Watchdog-Timer basiert auf einem Abwrtszhler. Erreicht der Zhler den Zhlerstand 0, wird durch den Timer ein Zurcksetzen des Controllers ausgelst. Um dieses Zurcksetzen zu vermeiden, muss der Zhler des Watchdog-Timers per Software
regelmig auf einen von Null verschiedenen Wert gesetzt werden. Arbeitet das System
einwandfrei, wird der Zhler des Watchdogs nie den Wert 0 erreichen und somit kein
Zurcksetzen des Systems auslsen.
Das Taktsignal fr die Watchdog-Timer ATmega-Serie wird mithilfe eines eingebetteten Oszillators realisiert, sodass fr die Takterzeugung keine externen Komponenten
bentigt werden. Durch den Einsatz eines Vorteilers knnen dem Zhler des Watchdogs
verschiedene Taktfrequenzen zugefhrt werden, wodurch die Zeit bis zum Erreichen des
Zhlerstandes 0 ber das CPU-Programm festgelegt werden kann.
Das softwarebasierte Setzen des Watchdog-Zhlers eines ATmega32 erfolgt in Assembler mit dem Spezialbefehl wdr (Watchdog Reset) beziehungsweise in C durch den Aufruf der Funktion wdt_reset(). Zur Programmierung des Watchdogs steht das Watchdog
Timer Control Register (WDTCR) zur Verfgung (Tab.14.23).
Das Bit WDE dient zum Aktivieren (WDE=1) oder Deaktivieren (WDE=0) des
Watchdog-Timers. Soll der Watchdog deaktiviert werden, mssen zunchst die Bits
WDTOE und WDE gesetzt und anschlieend das Bit WDE innerhalb von 4 Taktzyklen
gelscht werden. Auf diese Weise soll ein unbeabsichtigtes Deaktivieren des Watchdogs
ausgeschlossen werden.
Die Bits WDP2 bis WDP0 werden zur Programmierung des Vorteilers verwendet. Die
Zeit, die zwischen dem Ausfhren des wdr-Befehls und dem Erreichen des Zhlwertes 0
vergeht, ergibt sich gem Tab.14.24.
Tab.14.23Belegung des
Registers WDTCR
WDTCR
7
Name -
WDTOE WDE
Bit
484
14Mikrocontroller
WDP1
WDP0
17ms
33ms
65ms
130ms
260ms
520ms
1,0s
2,1s
Der Grund fr das Zurcksetzen des Controllers kann mithilfe des Microcontroller Unit
Control and Status Registers (MCUCSR) von der CPU abgefragt werden (Tab.14.25).
Je nach Grund des Resets wird eines der fnf niederwertigen Bits des MCUCSRRegisters gesetzt. Die Bedeutung dieser Bits ist in Tab.14.26 zusammengefasst.
Name
JTD
ISC2
JTRF
WDRF
BORF
EXTRF
PORF
WDRF
Watchdog-Reset
BORF
Brownout-Detection-Reset
(Versorgungsspannung unterschreitet programmierten Wert)
EXTRF
PORF
485
14.7.3.1U(S)ART
Die Abkrzung UART steht fr Universal Asynchronous Receiver/Transmitter, also ein
universell einsetzbarer Sender und Empfnger fr asynchrone Datenbertragungen. Der
Begriff asynchron bedeutet hier, dass bei dieser Datenbertragung kein Taktsignal
zwischen Sender und Empfnger ausgetauscht wird. Der Empfnger muss allein aus der
Kenntnis des Datensignals die bertragenen Datenbits extrahieren. Eine Erweiterung des
UARTs stellt der USART dar. Der zustzliche Buchstabe S soll andeuten, dass diese
Komponente auch eine synchrone Datenbertragung untersttzen kann. In diesem Fall
wird vom Sender ein Taktsignal erzeugt, das zusammen mit dem Datensignal bertragen
wird.
Bereits um 1960 wurde ein geeignetes Protokoll zur asynchronen seriellen Datenbertragung zwischen Rechnern entwickelt und standardisiert. Die bekannteste Implementierung dieser Anwendung stellt die serielle Schnittstelle eines PCs dar, die hufig auch als
RS232-Schnittstelle, V.24-Schnittstelle, COM-Port oder einfach als serielle Schnittstelle
bezeichnet wird. Diese Schnittstelle diente viele Jahre als Kommunikationsschnittstelle
zwischen Rechnern oder zwischen Rechnern und Modems, welche eine Datenfernbertragung ber Telefonleitungen ermglicht.
Die Bedeutung der RS232-Schnittstelle fr PCs hat in den letzten 30 Jahren kontinuierlich abgenommen. Rechner werden heute meist ber Ethernet-Leitungen oder WLAN
vernetzt, die deutlich hhere bertragungsraten ermglichen. Im Bereich der Datenfernbertragung werden Technologien wie DSL eingesetzt, wobei die Verbindung zu einem
DSL-Modem ber USB oder Ethernet realisiert wird. Daher werden von heutigen PCs
in der Regel keine RS232-Schnittstellen mehr zur Verfgung gestellt. Zur Nutzung dieser Schnittstelle mssen hufig entweder entsprechende Erweiterungskarten oder USBGerte angeschafft werden, die ber einen USB-Anschluss des Rechners die gewnschte
RS232-Schnittstelle zur Verfgung stellen.
Eine grere Bedeutung besitzt die RS232-Schnittstelle im Bereich der Mikrorechnersysteme. Hier steht hufig nicht die erzielbare Datenrate im Vordergrund, sondern
zunchst die einfache Implementierbarkeit der Kommunikation zweier Komponenten.
Eine hufige Anwendung ist die Verbindung eines Mikrorechnersystems mit einem PC,
um Statusmeldungen an den PC zu senden oder auch um Programme und Daten an den
Mikrorechner zu senden.
Entsprechend der ursprnglichen Anwendung im Bereich der Datenfernbertragung
werden sogenannte Datenendeinrichtungen (Data Terminal Equipment, DTE) und Datenbertragungseinrichtungen (Data Communication Equipment, DCE) unterschieden. Ein
486
14Mikrocontroller
PC arbeitet in der Regel als DTE, whrend die angeschlossenen Gerte meist als DCE
betrieben werden. Diese Unterscheidung ist insbesondere fr die Steckerbelegung der
Gerte von Bedeutung. Fr die serielle bertragung mithilfe des RS232-Standards werden heute fast ausschlielich 9-polige Sub-D-Steckverbindungen verwendet, deren Belegung in Tab.14.27 zusammengefasst ist.
In vielen Anwendungsfllen wird nur ein Teil der dargestellten Signale verwendet. Im
einfachsten Fall ist es mglich eine bidirektionale Verbindung zwischen zwei Stationen
(zum Beispiel PC und Mikrocontroller) mithilfe der Anschlsse RXD, TXD und GND
zu realisieren.
Die RS232-Schnittstelle arbeitet mit negativer Logik. Eine logische Null wird durch
einen Spannungspegel im Bereich von +3 bis +15V, eine logische Eins durch einen
Pegel zwischen 3 und 15V dargestellt. Ein direkter Anschluss der Signale der seriellen Schnittstelle eines PCs an einen Mikrocontroller sollte niemals erfolgen, da der Controller hierbei zerstrt werden wrde. Es ist also ein Umsetzen der Pegel der seriellen
Schnittstelle erforderlich. Hierfr stehen verschiedene integrierte Bausteine zur Verfgung, die auch eine Umwandlung zwischen negativer und positiver Logik durchfhren.
Ein Beispiel ist der von verschiedenen Herstellern angebotene Baustein MAX232.
Krzel Name
Bedeutung
Datenrichtung
DCD
DCE DTE
RXD
Receive Data
TXD
Transmit Data
DTR
GND
Ground
Signalmasse
DSR
RTS
Ready To Send
CTS
Clear To Send
RI
Ring Indicator
DCE DTE
DTE DCE
DTE DCE
DCE DTE
DCE DTE
487
Im Anschluss an die Datenbertragung erfolgt die bertragung von ein bis zwei
Stoppbits, welche den Wert 1 besitzen. Bis zum Beginn der nchsten Datenbertragung
verbleibt das Sendesignal auf dem Wert 1.
Um die Datenbertragung gegenber kurzzeitigen Strungen abzusichern, kann zwischen den Daten und dem Stoppbit ein Parittsbit (parity bit) eingefgt werden. Verwendet der Sender die bertragung eines Parittsbits, muss dies dem Empfnger bekannt
sein. Ebenso mssen Sender und Empfnger die gleiche Rechenvorschrift zur Berechnung des Parittsbits verwenden.
Der Empfnger berechnet aus den empfangenen Daten das erwartete Parittsbit und
vergleicht dieses mit dem vom Sender empfangenen Parittsbit. Sind die Werte beider Bits
identisch, wird davon ausgegangen, dass eine fehlerfreie bertragung stattgefunden hat.
Fr die Berechnung des Parittsbits werden zwei Vorschriften verwendet, die als
ungerade Paritt (odd parity) beziehungsweise gerade Paritt (even parity) bezeichnet werden. In beiden Fllen erfolgt die Berechnung des Parittsbits p derart, dass eine
Exklusiv-Oder-Verknpfung der Datenbits di und eines Modusbits m (m =0 fr even
parity, m =1 fr odd parity) durchgefhrt wird:
p = dn1 dn2 d1 d0 m
Aufgrund dieser Vorschrift zur Berechnung des Parittsbits lassen sich vom Empfnger nur
bertragungsfehler erkennen, bei denen nur ein Fehler oder eine ungerade Anzahl fehlerhafter Bits auftritt. Ist die Anzahl der durch bertragungsfehler modifizierten Bits dagegen
gerade, wrde der Empfnger die Daten als korrekt bertragen ansehen. Darber hinaus
ermglicht dieser sehr einfache Fehlerschutz keine empfngerseitige Fehlerkorrektur, da
der Empfnger nicht bestimmen kann, welches Datenbit fehlerhaft bertragen wurde.
In der Praxis wird die bertragung eines Parittsbits hufig nicht genutzt, wenn von
einem relativ sicheren bertragungskanal ausgegangen werden kann. Dies ist meist bei
einer Verbindung zwischen einem PC und einem Mikrocontroller der Fall, wenn die
Datenleitungen nicht lnger als wenige Meter sind und die Umgebung keine starken
elektromagnetischen Strquellen besitzt.
Abb.14.13 zeigt exemplarisch den zeitlichen Verlauf der bertragung eines Bytes mit
den Einstellungen: 8 Datenbits, 1 Stoppbit, gerade Paritt.
Neben der Anzahl der Daten- und Stoppbits sowie der verwendeten Parittsberechnung (odd, even, keine), muss dem Empfnger die Dauer der bertragung eines einzelnen Bits (Bitdauer) bekannt sein. Da die Bitdauer direkt die bertragungsrate
beeinflusst, wird von Bitrate oder von Baudrate gesprochen.
Theoretisch knnen beliebige Baudraten verwendet werden. In der Praxis werden
jedoch meist standardisierte Baudraten verwendet. Typische Baudraten sind in Tab.14.28
zusammengefasst.
488
14Mikrocontroller
Frame
Bitdauer
Ruhe
Stopp
Paritt
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Start
Ruhe
0
t
Startbit fr das
nchste Byte
Bitdauer (s)
2400
416,67
9600
104,17
19.200
52,08
38.400
26,04
57.600
17,36
115.200
8,68
wenn ein Mikrocontroller Daten an einen PC sendet, um diese mithilfe eines Terminalprogramms auf dem Monitor anzuzeigen. Aufgrund der hohen Rechenleistung eines PCs
und der vergleichsweise geringen Datenrate der seriellen Schnittstelle, wird der PC in
der Regel alle vom Controller gesendeten Daten korrekt verarbeiten knnen.
Genauso sind auch Anwendungsflle denkbar, in denen der Empfnger die gesendeten Daten nicht sofort verarbeiten kann. Wrde der Sender diese Situation ignorieren und
weiter Daten senden, wre ein Verlust von Daten die Folge. Um diesen Datenverlust zu
vermeiden, muss die Mglichkeit bestehen, dem Sender mitzuteilen, dass der Empfnger
kurzzeitig nicht in der Lage ist, weitere Daten zu empfangen. Die hierfr notwendige
Kommunikation zwischen Empfnger und Sender wird als Handshake bezeichnet.
Eine Mglichkeit zur Implementierung stellt das sogenannte Software-Handshake dar.
In diesem Fall wird die Handshake-Information ber die Datenleitungen RXD und TXD
ausgetauscht. Ist ein Gert nicht bereit Daten zu empfangen, sendet es an die Gegenstelle
den Wert 19 (0x13). Der Sender wird daraufhin das Senden weiterer Daten einstellen.
Sobald der Empfnger wieder bereit ist, sendet er den Wert 17 (0x11) und die Datenbertragung wird fortgesetzt. Da die beiden Zahlenwerte im ASCII-Code als XOFF
beziehungsweise XON bezeichnet werden, wird diese Art des Handshakes oft auch als
XON/XOFF-Handshake bezeichnet.
Ein Nachteil des Software-Handshakes ist es, dass zwei Zahlenwerten eine besondere
Bedeutung zugeordnet wird, sodass diese Werte nicht mehr fr die Datenbertragung zur
Verfgung stehen.
489
490
14Mikrocontroller
Name
RXC
TXC
UDRE
FE
DOR
PE
U2X
MPCM
Bit
Name
RXCIE
TXCIE
UDRIE
RXEN
TXEN
UCSZ2
RXB8
TXB8
Bit
Name
URSEL
UMSEL
UPM1
UPM0
USBS
UCSZ1
UCSZ0
UCPOL
UCSRB
UCSRC
Die Baudrate hngt von der Systemtaktfrequenz und dem Wert im UBRR-Register ab.
Mithilfe der folgenden Formel kann ein geeigneter Wert fr die Programmierung der Register UBRRH (hherwertiges Byte) und UBRRL (niederwertiges Byte) bestimmt werden.
UBRR =
fsys + 8 Baudrate
1
16 Baudrate
Die Auswahl der Anzahl der Datenbits innerhalb eines Frames (zwischen Start- und
Stoppbit) wird durch UCSZ festgelegt (s.Tab.14.30).
Die zu sendenden (oder empfangenen) Daten werden im Register UDR (USART Data
Register) abgelegt. Ein Schreibzugriff auf dieses Register bermittelt neue zu sendende
Daten an die Schnittstelle, whrend die CPU mithilfe eines Lesezugriffs auf empfangene
Daten zugreifen kann.
Bei der Verwendung von 9 Datenbits wird das hchstwertige Datenbit durch
die Bits TXB8 beziehungsweise RXB8 reprsentiert. In allen anderen Fllen haben
diese Bits keine Bedeutung. Die weiteren Bits der UCSR-Register sind in Tab.14.31
zusammengefasst.
Fr die hufig verwendete Konfiguration 8 Datenbits, keine Paritt, 1 Stoppbit, asynchroner Modus ergeben sich fr die Programmierung der UCSR-Register die Werte
UCSRB =0x18 und UCSRC =0x86. Die Bits des Registers UCSRA knnen auf den
Tab.14.30Auswahl der
Datenbits pro Frame mithilfe
der UCSZ-Bits
UCSZ2
UCSZ1
UCSZ0
Datenbits
491
Name
Bedeutung
RXC
Receive Complete
TXC
Transmit Complete
UDRE
FE
Frame Error
DOR
Data Overrun
PE
Parity Error
1: Parittsfehler erkannt
U2X
Double Speed
1: Verdopplung der
bertragungsgeschwindigkeit
MPCM
RXCIE
Receive Complete
Interrupt Enable
Lokale Interruptfreigabe
TXCIE
Transmit Complete
Interrupt Enable
Lokale Interruptfreigabe
UDRIE
Lokale Interruptfreigabe
URSEL
Register Select
USBS
0: 1 Stoppbit; 1: 2 Stoppbits
Werten belassen werden, die sie nach dem Resetvorgang des Controllers erhalten haben
(UCSRA =0).
Funktionen zur Initialisierung des USARTs und zum Polling-basierten Empfang
beziehungsweise Senden von Daten knnen in der Programmiersprache C wie folgt realisiert werden:
// Initialisierung des USARTs:
void USART_init (unsigned int baudrate)
{
unsigned int bdr = ((F_CPU+8*baudrate)/baudrate/16)-1;
UBRRH = (bdr>>8)&0x7F;
UBRRL = bdr&0xFF;
UCSRB = (1<<RXEN)|(1<<TXEN);// Empfnger und Sender akt.
UCSRC = (1<<URSEL)|(3<<UCSZ0); // 8 daten, 1 stopp
492
14Mikrocontroller
}
// Daten mit USART empfangen:
unsigned char UART_rx(void)
{
while (!(UCSRA & (1<<RXC)));// auf Daten warten
return UDR;// empf. Zeichen zurckgeben
}
// Daten mit USART senden:
void UART_tx(unsigned char data)
{
while(!(UCSRA & (1<<UDRE)));// warten auf Ende des Sendens
UDR=data;// neues Zeichen ausgeben
}
14.7.4 SPI
Die Abkrzung SPI steht fr Serial Peripheral Interface. Es handelt sich um eine synchrone Schnittstelle, die zur Datenbertragung unidirektionale Signalleitungen verwendet und zur Verbindung integrierter Bausteine verwendet wird. Zustzlich zu den
Datenleitungen wird ein Taktsignal bertragen, welches zur Synchronisation eingesetzt
wird.
493
Bedeutung
Datenrichtung
Master Slave
SCK, SCLK
Slave Master
Master Slave
Master Slave
mit der nchsten aktiven Flanke des SCK-Signals an der Kommunikation der Bausteine
teil. Andernfalls ignoriert der Slave die SPI-bertragung.
Die Grundstruktur der Verbindung zwischen einem Master und einem Slave zeigt
Abb.14.14.
Ein Zeitdiagramm fr die Signale SCK, MOSI und MISO ist in Abb.14.15 dargestellt.
In diesem Beispiel gilt fr die SPI-bertragung: Ruhezustand des Taktes ist 0 und die
Datenbernahme findet mit der ersten Taktflanke nach Verlassen des Ruhezustands statt.
Sollen mehrere Slaves mit einem SPI-Master verbunden werden, knnen zwei Grundstrukturen verwendet werden, die im Folgenden als SPI-Kaskadierung oder als SPISternverbindung bezeichnet werden.
Master
Schieberegister
MISO
MOSI
Slave
Schieberegister
SCK
Takterzeugung
Slaveauswahl
/SS
Abb.14.15 SPI-Signalverlauf
SCK
MISO
MOSI
494
14Mikrocontroller
Im Fall der SPI-Kaskadierung wird ausgenutzt, dass die Daten, die ber den MOSIAnschluss in einen Slave eingeschrieben werden, nach mehreren Taktzyklen unverndert
am MISO-Ausgang des Slaves erscheinen. Wird dieser MISO-Ausgang mit dem MOSIEingang eines nachfolgenden Slaves verbunden, knnen somit durch den ersten Slave
hindurch Daten zu dem nachfolgenden Slave bertragen werden. Whrend der bertragung von Daten mithilfe des SPI-Protokolls mssen alle /SS-Eingnge auf dem Wert
0 gehalten werden. Hierfr kann eine gemeinsame /SS-Leitung fr alle kaskadierten
SPI-Slaves verwendet werden. Die entsprechende Verbindungsstruktur ist in Abb.14.16
exemplarisch fr die Verbindung von einem Master und drei Slaves skizziert.
Die Alternative zur Kaskadierung stellt die SPI-Sternverbindung dar. Hierbei werden
die MISO-Ausgnge der Slaves miteinander verbunden und an den MISO-Eingang des
Masters angeschlossen. MOSI-Eingnge der Slaves werden mit dem MOSI-Ausgang des
Masters verbunden. Um zu vermeiden, dass die Verbindung der MISO-Ausgnge der Slaves zu einem Kurzschluss fhren kann, muss jeder der Slaves einzeln selektiert werden
knnen. Wird vom Master nur einer der Slaves selektiert (/SS =0), nimmt nur dieser an
der Datenbertragung teil, whrend die Ausgnge der nicht selektierten Slaves hochohmig sind. Die SPI-Sternverbindung ist in Abb.14.17 fr einen Master und drei Slaves
skizziert.
Der Vorteil der SPI-Kaskadierung ist der geringere Verdrahtungsaufwand. Bereits mit
4 Signalleitungen knnen beliebig viele Slaves an einen Master angeschlossen werden.
Die Kaskadierung besitzt jedoch den Nachteil, dass die Daten durch alle Slaves hindurch
gereicht werden mssen. Soll zum Beispiel der Slave 1 in Abb.14.16 vom Master ausgelesen werden, so mssen die Daten des Slaves 1 zunchst durch die Slaves 2 und 3
geschoben werden, wodurch der Datentransfer mehr Zeit in Anspruch nimmt. Darber
hinaus ist zu beachten, dass die Slaves Daten unverndert durchreichen mssen. Diese
Funktion wird von vielen Slaves nicht untersttzt und es muss die Sternverdrahtung
gewhlt werden. In diesem Fall ist jeder Slave direkt mit dem Master verbunden und
die Zeit zur bertragung zwischen dem Master und einem beliebigen Slave ist fr alle
Abb.14.16 SPIKaskadierung mit einem
Master und drei Slaves
MOSI
SCK
/SS
MISO
SPI
Master
MOSI
MOSI
SCK
SCK
/SS
/SS
MISO
MISO
SPI
Slave
1
SPI
Slave
2
MOSI
SCK
/SS
MISO
SPI
Slave
3
495
MOSI
SPI
Slave
1
SCK
/SS
MISO
MOSI
SPI
Master
SCK
MOSI
/SS1
SCK
/SS2
/SS
/SS3
MISO
SPI
Slave
2
MISO
MOSI
SPI
Slave
3
SCK
/SS
MISO
Slaves identisch. Diesem Vorteil steht der Nachteil gegenber, dass fr jeden Slave eine
eigene /SS-Leitung erforderlich ist.
Name
SPIE
SPE
DORD
MSTR
CPOL
CPHA
SPR1
SPR0
496
14Mikrocontroller
Name
SPIE
SPE
SPI Enable
Bedeutung
CPOL
Clock Polarity
Tab.14.35Festlegung der
SPI-Taktfrequenz mit den Bits
SPR1, SPR0 und SPI2X
SPR1
SPR0
SPI2X
SPI-Taktfrequenz
fsys /2
fsys /4
fsys /8
fsys /16
fsys /32
fsys /64
fsys /128
fsys /256
Das Statusregister SPSR enthlt neben dem Bit SPI2X, welches die Takterzeugung
beeinflusst, zwei Statusbits. Das Bit SPIF wird von der Schnittstellen-Hardware auf 1
gesetzt sobald ein Byte bertragen wurde (Tab.14.36).
Wird die SPI-Schnittstelle im Interruptbetrieb eingesetzt (SPIE =1), wird das SPIFBit durch die Hardware mit Aufruf der zugehrigen ISR gelscht. Im Polling-Betrieb
muss zum Lschen des Bits zunchst das Register SPSR und anschlieend das Datenregister SPDR gelesen werden.
Zum Lesen empfangener Daten beziehungsweise Schreiben zu sendender Daten steht
das Register SPDR zur Verfgung. Vor dem Beginn einer Datenbertragung wird das zu
sendende Byte in diesem Register abgelegt. Durch einen Lesezugriff auf dieses Register kann die CPU nach Beendigung einer bertragung die empfangenen Daten auslesen.
497
Name
SPIF
WCOL
SPI2X
Whrend eine Datenbertragung aktiv ist, darf das Datenregister nicht geschrieben werden. Ein versehentliches berschreiben des Datenregisters signalisiert die SPI-Schnittstelle durch Setzen des WCOL-Bits im Statusregister.
Bei vielen AVR-Controllern wird die SPI-Schnittstelle nicht nur zur Kommunikation
mit anderen Bausteinen eingesetzt. Sie dient darber hinaus als In-System-Programming-Schnittstelle (ISP). Mithilfe der ISP-Funktion kann ein AVR-Controller, welcher in
einem System eingesetzt ist, programmiert werden, ohne den Controller aus der Umgebung entfernen zu mssen. Diese Mglichkeit ist insbesondere fr die Entwicklungsphase eines Systems bequem und zeitsparend.
Im Folgenden sind exemplarisch zwei Funktionen zur Initialisierung des SPI-Interfaces und zum Polling-basierten Empfangen und Senden von Daten angeben:
// Initialisierung des SPI-Interfaces
void SPI_init (void)
{
DDRB |= (1<<PB4)|(1<<PB5)|(1<<PB7);// SS,MOSI,SCK -> Ausgang
SPCR |= (1<<SPE) |(1<<MSTR)|(1<<SPR0); // Schnittstelle konfigurieren
}
// SPI-Datenbertragung
unsigned char SPI_io(unsigned char snd_data)
{
SPDR = snd_data;
// Daten senden
while (!(SPSR & (1<<SPIF))); // bertragung abwarten
return SPDR; // empf. Daten zurckgeben
}
14.7.5 TWI/I2C
In den frhen 1980er Jahren fhrte die Firma Philips den Inter-Integrated-Circuit-Bus
(I2C) ein. Mit diesem Bus ist es mglich, mehrere integrierte Bausteine (Mikrocontroller,
A/D-Umsetzer, D/A-Umsetzer, Speicher usw.) auf einer Leiterplatte mit nur zwei Signalleitungen zu verbinden. Aufgrund der Anzahl der Signalleitungen bezeichnen einige Hersteller diese Schnittstelle auch als TWI (Two-Wire-Interface). Die Abkrzungen I2C und
TWI knnen als synonyme Bezeichnungen identischer Schnittstellen aufgefasst werden.
498
14Mikrocontroller
Die I2C-Schnittstelle dient der synchronen seriellen bertragung von Daten. Mithilfe
des Signals SCL (Serial Clock) wird ein Taktsignal an alle angeschlossenen Bausteine
bertragen. Der Datenaustausch findet ber die Leitung SDA (Serial Data) statt.
Die I2C-Anschlsse eines integrierten Bausteins sind als Open-Collector- beziehungsweise Open-Drain-Ausgnge realisiert. Die SDA- und SCL-Anschlsse der einzelnen
Komponenten sind miteinander verbunden und werden ber einen Pull-Up-Widerstand
mit der Versorgungsspannung verbunden. Ein Baustein kann die I2C-Leitungen aktiv auf
einen Low-Pegel (logische 0) ziehen, er ist jedoch nicht in der Lage einen High-Pegel
(logische 1) aktiv auszugeben. Ein High-Pegel auf einer der Signalleitungen wird erzielt,
wenn alle Bausteine ihre Anschlsse hochohmig schalten. Durch den Pull-Up-Widerstand (einige Kiloohm) wird dann eine logische 1 auf der Signalleitung erscheinen.
Abb.14.18 zeigt den prinzipiellen Aufbau eines Systems mit mehreren integrierten
Bausteinen, welche ber eine I2C-Schnittstelle miteinander kommunizieren knnen.
Im Ruhezustand befinden sich alle I2C-Anschlsse der Bausteine in einem hochohmigen Zustand, sodass beide Busleitungen ber die Pull-up-Widerstnde einen High-Pegel
fhren. Soll ein Datenaustausch zwischen zwei Komponenten stattfinden, muss einer der
Bausteine das bentigte Taktsignal erzeugen und die Datenbertragung initiieren. Dieser Baustein bernimmt damit die Funktion eines I2C-Masters. Alle anderen Bausteine
arbeiten dagegen als I2C-Slave.
14.7.5.1Das I2C-Protokoll
Die bertragung von Daten mithilfe des I2C-Protokolls erfolgt in zeitlich aufeinanderfolgenden Schritten.
Im ersten Schritt bermittelt der Master eine sogenannte Startbedingung. Anschlieend wird eine 7bit breite Bausteinadresse vom Master an die Slaves bermittelt. Ist die
Bausteinadresse eines Slaves mit der bermittelten Adresse identisch, wird dieser Slave
an der Kommunikation mit dem Master teilnehmen. Alle anderen, nicht ausgewhlte
Slaves, belassen ihre I2C-Anschlsse in einem hochohmigen Zustand. In der Regel wird
die I2C-Adresse eines Bausteins durch den Hersteller festgelegt. Hufig ist es mglich,
einzelne Bits dieser Adresse durch die uere Beschaltung (oder im Fall eines Mikrocontrollers durch das Programm der CPU) festzulegen. Auf diese Weise kann erreicht
werden, dass mehrere identische Komponenten im gleichen Bussystem kollisionsfrei
betrieben werden knnen. Nach der bertragung der Bausteinadresse folgt ein einzelnes
Bit, welches angibt, ob der Master Daten vom Slave lesen mchte oder ob Daten vom
Master an den Slave bertragen werden sollen (0: Schreibzugriff, 1: Lesezugriff).
Abb.14.18 Aufbau eines
I2C-Systems mit mehreren
integrierten Bausteinen
IC1
IC2
ICn
SDA
SCL
499
Ack
Daten
Stop
Daten
Ack
Ack
Adresse
R/W
Start
Nach der bertragung der Adresse und der Schreib-/Leseinformation versetzt der
Master seinen SDA-Anschluss in einen hochohmigen Zustand. Wurde ein Slave-Baustein durch die bertragene Adresse angesprochen, zieht dieser die SDA-Leitung fr
einen Taktzyklus auf Low. Auf diese Weise wird dem Master signalisiert, dass ein I2CSlave mit der bertragenen Adresse im System existiert und dieser an der nachfolgenden
Datenbertragung teilnimmt. Diese Besttigung wird als Acknowledge bezeichnet.
Im nchsten Schritt erfolgt die eigentliche Datenbertragung. Fr einen Schreibzugriff sendet der Master 8 Datenbits an den Slave, welcher den Empfang anschlieend
besttigt. Bei einem Lesezugriff sendet dagegen der Slave Daten an den Master und der
Master besttigt den Empfang.
Nach der bertragung eines Bytes knnen entweder weitere Bytes bertragen werden
oder die bertragung wird beendet. Zum Beenden einer bertragung kann der Master
entweder eine neue Startbedingung senden und so einen neuen Datentransfer einleiten
oder der Master sendet eine sogenannte Stoppbedingung, welche das Ende der bertragung signalisiert (s.Abb.14.19).
Bei der bertragung gem dem I2C-Protokoll gilt die Vereinbarung, dass sich der
Wert der SDA-Leitung nur ndern darf, wenn die SCL-Leitung den Wert 0 besitzt. Diese
Vereinbarung ist in Abb.14.20 visualisiert.
Die oben genannte Vereinbarung gilt nur fr die Adress- und Datenbertragung. Zur
Signalisierung der Start- oder Stoppbedingung wird sie dagegen nicht eingehalten. Bei
der bertragung einer Startbedingung wird die SDA-Leitung vom Master auf Low gezogen whrend sich die SCL-Leitung noch im Ruhezustand (High) befindet. Entsprechend
wird zur bertragung einer Stoppbedingung zunchst die Taktleitung SCL von 0 auf 1
gesetzt. Mit einem anschlieenden Wechsel der SDA-Leitung von 0 auf 1 wird wieder
der Ruhezustand (SDA =1, SCL =1) erreicht. Der zeitliche Signalverlauf fr Start- und
Stoppbedingungen ist in Abb.14.21 dargestellt.
SDA stabil
Abb.14.20 Synchronisierung
beim I2C-Protokoll
SCL
SDA
14Mikrocontroller
Startbedingung
Stoppbedingung
500
SCL
SDA
Die bitserielle bertragung der Adressen oder Daten beginnt jeweils mit dem hchstwertigen Bit (Most Significant Bit first, MSB first). Der zeitliche Verlauf einer bertragung ist exemplarisch in Abb.14.22 dargestellt. Der Master adressiert hierbei einen
Baustein mit der Adresse 0x35 und empfngt vom Baustein den Wert 0xA5.
Lesen
Start
I2C-bertragung Teil I
Besttigung
vom Slave
SCL
SCL
SDA
Abb.14.22Beispiel einer I2C-bertragung
Stop
I2C-bertragung Teil II
(Fortsetzung des oberen Diagramms)
Besttigung
vom Master
SDA
501
fSCL =
fsys
16 + 2 TWBR 4TWPS
Mithilfe des TWI Slave Address Registers (TWAR) wird die vom Controller verwendete
Bausteinadresse im Slave-Modus festgelegt. Die bermittlung von Daten erfolgt mit
dem TWI Data Register (TWDR).
Die Belegung der Register TWCR und TWSR ist im Folgenden angegeben. Die anderen Register der I2C-Schnittstelle enthalten 8-Bit-Werte (Tab.14.37, 14.38 und 14.39).
Mithilfe der TWS-Statusbits kann die CPU den aktuellen Zustand des I2C-Interfaces bestimmen. Hierbei wird der jeweilige Betriebsmodus (Master oder Slave) unterschieden. Darber hinaus wird unterschieden, ob der AVR Daten empfngt (Receiver)
beziehungsweise Daten sendet (Transmitter). Somit ergeben sich vier grundlegende
Name
TWINT
TWEA
TWSTA
TWSTO TWWC
TWEN
TWIE
502
14Mikrocontroller
Name
Bedeutung
1: Die I2C-Komponente hat die zuvor programmierte
Aufgabe abgearbeitet und kann von der CPU mit neuen
Aufgaben belegt werden. Ein Lschen dieses Bits (durch
Schreiben einer 1) startet die nachfolgende Aufgabe
TWEA
1: Startbedingung generieren
TWWC
TWEN
TWI Enable
TWIE
Lokale Interruptfreigabe
Name
TWS7
TWS6
TWS5
TWS4
TWS3
TWPS1
TWPS0
Betriebsmodi, fr die eine Statusabfrage erfolgen kann: Master-Receiver-Modus, Master-Transmitter-Modus, Slave-Receiver-Modus und Slave-Transmitter-Modus.
In Tab.14.40 sind die mglichen Statusinformationen fr den Masterbetrieb zusammengefasst. Die in der Tabelle angegeben Konstanten knnen bei der Softwareentwicklung in der Programmiersprache C nach dem Inkludieren der Header-Datei twi.h
verwendet werden.
Im Folgenden werden exemplarisch zwei Beispielfunktionen angegeben, welche das
Polling-basierte Senden und Empfangen eines Bytes ermglichen. Zur Fehlerbehandlung
wird die Funktion TW_ERR() verwendet, die im nachfolgenden Code nicht angegeben ist
und fr ein lauffhiges Programm erstellt werden msste.
// Senden eines Bytes
#include <util/twi.h> // I2C-Header-Datei
void TWI_ERR ()
{
// Hier Code zur Fehlerbehandlung
}
void TWI_sendbyte (unsigned char twi_addr, unsigned char twi_data)
503
Modus
Bedeutung
0x08
TW_START
Alle
START bertragen
0x10
TW_REP_START
Alle
0x18
TW_MT_SLA_ACK
Master
Adresse + Write bertragen,
Transmit. Besttigung (ACK) empfangen
0x20
TW_MT_SLA_NACK
Master
Adresse + Write bertragen,
Transmit. Keine Besttigung (NACK)
empfangen
0x28
TW_MT_DATA_ACK
Master
Daten bertragen, Besttigung
Transmit. (ACK) empfangen
0x30
TW_MT_DATA_NACK Master
Daten bertragen, keine BesttiTransmit. gung (NACK) empfangen
0x38
TW_MR_ARB_LOST
Master
Receiver
0x40
TW_MR_SLA_ACK
Master
Receiver
0x48
TW_MR_SLA_NACK
Master
Receiver
0x50
TW_MR_DATA_ACK
Master
Receiver
0x58
TW_MR_DATA_NACK Master
Receiver
{
// --- Startbedingung --TWCR = (1<<TWINT)|(1<<TWSTA)| (1<<TWEN);// Sende START
while (!(TWCR & (1<<TWINT)));// gesendet?
if (TWSR != TW_START) TWI_ERR();// Status prfen
// --- Adresse --TWDR = (twi_data << 1) | TW_WRITE;//
TWCR = (1<<TWINT) | (1<<TWEN);//
while (!(TWCR & (1<<TWINT)));//
if (TWSR != TW_MT_SLA_ACK) TWI_ERR();//
504
14Mikrocontroller
505
14.7.6.1Analog/Digital-Umsetzer
Der A/D-Umsetzer arbeitet nach dem Verfahren der sukzessiven Approximation und
stellt eine Auflsung von 10bit zur Verfgung. Die Umsetzung erfolgt nach dem Verfahren der sukzessiven Approximation und bentigt, je nach Betriebsmodus, eine Zeit
von 13 bis 260s. Als analoge Eingnge knnen im Fall des ATmega32 die Anschlsse
PA0 (ADC0) bis PA7 (ADC7) verwendet werden. Insgesamt stehen somit 8 analoge
Anschlsse zur Verfgung. Durch eine entsprechende Konfiguration des integrierten
Analog-Multiplexers ist es mglich, jeweils einen dieser Anschlsse mit dem Eingang
des A/D-Umsetzers zu verbinden und eine Messung der anliegenden Eingangsspannung durchzufhren. Darber hinaus wird eine differenzielle Messung untersttzt, die
es ermglicht, die Spannungsdifferenz zweier analoger Anschlsse zu messen. Die fr
den A/D-Umsetzer bentigte Referenzspannung kann entweder intern erzeugt oder ber
den Anschluss AREF beziehungsweise AVCC zugefhrt werden. Die Struktur des A/DUmsetzers ist in Abb.14.23 gezeigt.
Mithilfe eines Eingangsmultiplexers werden die Anschlsse des Controllers ausgewhlt, die dem A/D-Umsetzer zugefhrt werden sollen. Neben den Anschlssen
ADC0 bis ADC7 kann auch eine interne Referenzspannung oder eine Masseverbindung
Interrupt
Flags
Steuerung
ADC0
ADC1
MUX
ADC6
ADC7
M
U
X
Sample
& Hold
A/DUmsetzer
Register:
ADCL,
ADCH
Uint
VREF
AVCC
MUX[4:0]
Register: ADMUX
Interne
Referenzspannung
(typ. 2,56 V)
M
U
X
ReferenzSpannung
Uref
REFS[1:0]
Register: ADMUX
506
14Mikrocontroller
ausgewhlt werden. Bei Auswahl einer differenziellen Messung kann die Differenzspannung mithilfe eines Verstrkers mit den Werten 1, 10 und 200 multipliziert werden.
Die ausgewhlte Spannung wird zunchst ber ein Sample-and-Hold-Glied gefhrt und
anschlieend dem A/D-Umsetzer zugefhrt.
Nach der Durchfhrung der Wandlung kann der digitalisierte Wert aus den I/ORegistern ADCL und ADCH ausgelesen werden. Fr diesen Wert gelten die folgenden
Formeln:
Normale Messung (single-ended):
ADC =
Uin 1024
Uref
Differenzielle Messung:
ADC =
mit: V Verstrkungsfaktor
Fr die Programmierung des A/D-Umsetzers werden drei Register verwendet: Das
ADC Multiplexer Selection Register (ADMUX), das ADC Control and Status Register A
(ADCSRA) sowie einige Bits des Special Function IO Registers (SFIOR). Die Belegung
der genannten Register ist im Folgenden angegeben (Tab.14.41)
Mithilfe der Bits REFS1 und REFS0 wird die Referenzspannung fr den A/D-Umsetzer ausgewhlt MUX4 bis MUX0 steuern die Analogmultiplexer, und mithilfe des Bits
ADLAR kann das Ausgabeformat in den Registern ADCL und ADCH ausgewhlt werden. Tab.14.42, 14.43 und 14.44 fassen die Bedeutung der Bits des ADMUX-Registers
zusammen.
Tab.14.41Belegung des Registers ADMUX
ADMUX
Bit
Name
REFS1
REFS0
ADLAR MUX4
MUX3
MUX2
MUX1
MUX0
REFS0
Referenzspannung Uref
Anschluss AREF
Anschluss AVCC
reserviert
507
Name
ADC9
ADC8
Name
ADC7
ADC6
ADC5
ADC4
ADC3
ADC2
ADC1
ADC0
Name
ADC9
ADC8
ADC7
ADC6
ADC5
ADC4
ADC3
ADC2
Name
ADC1
ADC0
ADC0
ADC0-ADC1
ADC1
ADC1-ADC1
ADC2
ADC2-ADC1
ADC3
ADC3-ADC1
ADC4
ADC4-ADC1
ADC5
ADC5-ADC1
ADC6
ADC6-ADC1
ADC7
ADC7-ADC1
(ADC0-ADC0)*10
ADC0-ADC2
(ADC1-ADC0)*10
ADC1-ADC2
(ADC0-ADC0)*200
ADC2-ADC2
(ADC1-ADC0)*200
ADC3-ADC2
(ADC2-ADC2)*10
ADC4-ADC2
(ADC3-ADC2)*10
ADC5-ADC2
(ADC2-ADC2)*200
(ADC3-ADC2)*200
Masse (0V)
Mit dem Register ADSCRA werden die Grundeinstellungen zum Betrieb des A/DUmsetzers vorgenommen (Tab.14.45 und 14.46).
508
14Mikrocontroller
Name
ADEN
ADSC
ADATE
ADIF
ADIE
ADPS2
ADPS1
ADPS0
Name
Bedeutung
ADEN
ADC Enable
ADSC
1: A/D-Umsetzung abgeschlossen
(Lschen des Bits durch Schreiben einer 1)
ADIE
ADPS
ADPS1
ADPS0
ADC-Taktfrequenz
fsys /2
fsys /2
fsys /4
fsys /8
fsys /16
fsys /32
fsys /64
fsys /128
Name
ADTS2
ADTS1
ADTS0
ACME
PUD
PSR2
PSR10
509
Analog-Komparator
Die Taktfrequenz, mit welcher der A/D-Umsetzer betrieben wird, beeinflusst sowohl
die Dauer der Umsetzung als auch die Genauigkeit des Ergebnisses. Fr eine Genauigkeit von 10Bit empfiehlt der Hersteller die Auswahl einer Frequenz zwischen 50 und
200kHz. Ist eine geringere Genauigkeit ausreichend, kann der A/D-Umsetzer auch mit
Frequenzen oberhalb von 200kHz betrieben werden, um hhere Abtastraten zu erzielen.
Eine Umsetzung dauert, je nach Betriebsmodus, zwischen 14,5 und 16,5 Taktzyklen. Die
Auswahl der Taktfrequenz durch die CPU erfolgt durch Programmierung der ADPS-Bits
im ADSCRA-Register. Die Taktfrequenz wird durch Teilung der Systemfrequenz fsys entsprechend Tab.14.47 erzeugt.
Neben dem softwarebasierten Start einer A/D-Umsetzung, kann eine Umsetzung auch
durch controllerinterne Ereignisse ausgelst werden. Zur Auswahl dieser Ereignisse
mssen die ADTS-Bits (ADTS: ADC Trigger Selection) im Register SFIOR programmiert
werden (Tab.14.48).
Die Auswahl der mglichen Ereignisse zum Start einer Wandlung fasst Tab.14.49
zusammen.
Eine einfache Beispielfunktion zur Verwendung des A/D-Umsetzers ist nachfolgend
angegeben. Sie initialisiert den Umsetzer und startet eine Umsetzung, auf deren Ende
Polling-basiert gewartet wird. Das Ergebnis wird als 16-Bit-Wert an das Hauptprogramm
zurckgegeben.
#include <avr/io.h>
#include <util/delay.h>
unsigned int GET_ADC1()
{
unsigned int adc;
// Auswahl: Referenzspannung & Analogeingang ADC1
ADMUX = (1<<REFS0) | (1<<MUX0);
// A/D-Umsetzer einschalten und Vorteiler whlen
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
510
14Mikrocontroller
14.7.6.2Analog-Komparator
Mithilfe des Analog-Komparators knnen zwei analoge Spannungen miteinander verglichen werden. Das Ergebnis dieses Vergleichs wird vom Komparator als binrer Wert
ausgegeben. Der Ausgangswert des Komparators kann durch die CPU ber die Abfrage
eines I/O-Registers eingelesen werden. Darber hinaus ist es mglich, bei nderungen
des Ausgangswertes einen Interrupt auszulsen. Weiterhin kann der Ausgang des Analog-Komparators direkt in der Hardware des Mikrocontrollers (zum Beispiel im Timer
1 als Capture-Impuls fr die Input-Capture-Unit) verwendet werden. Die Struktur des
Komparators zeigt Abb.14.24.
Die Funktion des Komparators wird im Wesentlichen durch das ACSR-Register festgelegt (Tab.14.50).
Wie Tab.14.51 zu entnehmen ist, erfolgt die Signalauswahl fr den positiven Komparatoreingang durch das Bit ACBG. Der Multiplexer fr den negativen Komparatoreingang
wird ber die Bits ACME (SFIOR-Register) und ADEN (ADCSRA-Register) gesteuert.
Gilt ACME =1 und ADEN =0 (A/D-Umsetzer abgeschaltet), wird dem negativen Komparatoreingang das Ausgangssignal des Eingangsmultiplexers des A/D-Umsetzer zugefhrt. In allen anderen Fllen wird das Signal am Anschluss AIN1 ausgewhlt.
Abb.14.24 Struktur des
Analog-Komparators
Interne
Referenzspannung
MUX
AIN0
ACO
(Analog
Comparator
Output)
+
-
AIN1
MUX
vom A/DUmsetzer
Name
ACD
ACBG
ACO
ACI
ACIE
ACIC
ACIS1
ACIS0
511
Tab.14.51Signalauswahl am Komparatoreingang
Bit
Name
Bedeutung
ACD
ACI
Analog Comparator
Interrupt Flag
ACIE
Analog Comparator
Interrupt Enable
1: Lokale Interruptfreigabe
ACIC
Analog Comparator
Input Capture Enable
ACIS
Analog Comparator
Interrupt Mode Select
512
14Mikrocontroller
Als Alternative zu Polling kann eine interruptbasierte Kommunikation mit Peripheriekomponenten eingesetzt werden. Das Hauptprogramm wird in diesem Fall zunchst
die Initialisierung des Systems vornehmen, die bentigten Interrupts lokal freigeben und
abschlieend eine globale Interruptfreigabe durch Setzen des I-Flags im Statusregister
der CPU vornehmen. Anschlieend wird das Hauptprogramm in eine Endlosschleife
springen, die in einfachen Anwendungsfllen leer ist. Ein Beispiel fr die Verwendung
von Interrupts wird anhand des folgenden Beispiels verdeutlicht:
Mithilfe eines Mikrocontrollers soll eine einfache Temperaturberwachung realisiert
werden. Ein hypothetischer Sensor liefert die Temperatur als 8-Bit-Wert an den Mikrocontroller. Der Sensor misst kontinuierlich die Temperatur. ber die steigende Flanke
eines Synchronisationssignals wird vom Sensor angezeigt, dass ein neuer Messwert ausgegeben wurde. bersteigt die gemessene Temperatur einen vorprogrammierten Wert,
soll der Mikrocontroller ein Alarmsignal (Alarm =1) ausgeben. Eine Hardwarerealisierung auf Basis eines ATmega32 ist in Abb.14.25 skizziert.
Ein entsprechendes Programm fr den Mikrocontroller kann wie folgt aussehen:
// Einfache Temperaturberwachung
#include <avr/io.h>
#include <avr/interrupt.h>
#define ALARM_SCHWELLE 100
void InitSystem() {
// Portrichtungen einstellen
DDRA = 0;
DDRB |= (1<<PB0);
DDRD &= ~(1<<PD2);
// Interrupt konfigurieren und lokal freigeben
MCUCR |= (1<<ISC01)|(1<<ISC00);
GICR |= (1<<INT0);
// Globale Interrupt-Freigabe
sei();
}
Mikrocontroller
PA[7:0]
Sensor
PD2 (INT0)
PB0
Alarm
Abb.14.25Anwendungsbeispiel Temperaturberwachung
513
// Interrupt-Service-Routine
ISR(INT0_vect) {
// PB0 = 1 falls Alarmschwelle berschritten
if (PINA > ALARM_SCHWELLE) PORTB |= (1<<PB0);
}
void main () {
InitSystem();
while (1) {
// Sofern keine anderen regelmigen Aufgaben zu
// erledigen sind, eine leere Endlosschleife
}
}
514
14Mikrocontroller
void main () {
InitSystem();
while (1) {
Schwelle = UIF();
}
}
Nun soll das Programm ein weiteres Mal erweitert werden. Es wird ein neuer Sensor verwendet, der einen 16bit breiten Temperaturwert liefert. Der vom Sensor gelieferte
Wert wird mithilfe der Ports PORTA und PORTC vom Mikrocontroller eingelesen. Der
Code wird wie folgt modifiziert:
// Temperaturberwachung mit einstellbarem 16-Bit-Alarmwert
// >>> Fehlerhafte Implementierung !!! <<<
// Modifikationen zum vorangegangenen Programm sind fett gedruckt
#include <avr/io.h>
#include <avr/interrupt.h>
volatile unsigned short Schwelle;
void InitSystem(void) { }
unsigned short UIF(void) { }
ISR(INT0_vect) {
unsigned short Messwert;
Messwert = PINA;
Messwert = (Messwert<<8) | PINC;
if (Messwert > Schwelle) PORTB |= (1<<PB0);
}
void main () {
InitSystem();
while (1) {
Schwelle = UIF();
}
}
Auf den ersten Blick mgen die Modifikationen des Programms plausibel und sinnvoll erscheinen: Ein lauffhiges und bewhrtes Programm wurde durch die Modifikation
der Wortbreite der verwendeten Variablen modifiziert. Allerdings wrden bei Einsatz dieses Programms sporadische Fehlfunktionen auftreten. Um die Ursache dieser sporadischen Fehler zu verstehen, muss die Codezeile
Schwelle = UIF();
515
Mit der Analyse des Assemblercodes wird das auftretende Problem deutlich: Der
Compiler bentigt fr die Zuweisung des Rckgabewertes an die 16-Bit-Variable
Schwelle zwei Befehle. Sollte nun zufllig ein Sensor-Interrupt auftreten, whrend der
erste Befehl der Zuweisung ausgefhrt wird, wrde die Interrupt-Service-Routine einen
nicht vollstndig erneuerten Wert in den Speicherstellen (hier: 0x60 und 0x61) der Variablen Schwelle vorfinden. Die erste Zuweisung wrde dem Sprung in die ISR ausgefhrt,
whrend die zweite Zuweisung erst nach Verlassen der ISR aufgerufen wird.
In vielen Fllen wird sich dieser Programmfehler nicht bemerkbar machen, da mehrere
Bedingungen zum Auftreten einer Fehlfunktion gelten mssen: Der Interrupt muss genau
zum oben beschriebenen Zeitpunkt auftreten und das hherwertige Byte des Schwellwertes
muss sich gegenber dem vorangegangenen Wert gendert haben. Darber hinaus msste der
vom Temperatursensor gelieferte Wert dazu fhren, dass aufgrund des falsch bergebenen
Schwellwertes ein Alarm flschlich ausgelst wird. Anhand dieser berlegung ist zu erkennen, dass der Fehler vermutlich nur sehr selten auftreten wird. Genau hierin liegt jedoch die
Schwierigkeit, den Fehler durch praktische Tests des Systems zu detektieren. Whrend der
Entwicklungsphase tritt der Fehler aufgrund der geringen Auftrittswahrscheinlichkeit eventuell nicht zutage, hat jedoch im Betrieb des Systems mglicherweise fatale Folgen.
Anhand dieses einfachen Beispiels wird deutlich, dass man sich mit der CPU des verwendeten Systems auskennen sollte. In diesem Beispiel muss bei der Programmierung
klar sein, dass eine 16-Bit-Zuweisung nicht durch einen einzelnen Befehl ausgefhrt werden kann, da die CPU zwei aufeinanderfolgende 8-Bit-Zuweisungen verwenden muss.
Operationen, die nicht durch Interrupts (oder auch andere hier nicht nher betrachtete Mechanismen) unterbrochen werden knnen, werden auch als atomare Operationen
bezeichnet. Der Begriff atomar ist hierbei aus dem griechischen Wort tomo (= unteilbar) abgeleitet.
Die in dem Beispiel gezeigte Zuweisung eines 16-Bit-Wertes stellt somit keine atomare Operation dar, da sie durch einen Interrupt unterbrochen werden kann.
Zur Lsung dieser Problematik knnen die fr die Zuweisung relevanten Interrupts
kurzzeitig gesperrt werden. Eine mgliche Implementierung des Hauptprogramms
knnte wie folgt aussehen.
// Ungnstige Implementierung des Hauptprogramms
void main () {
InitSystem();
516
14Mikrocontroller
while (1) {
GICR &= ~(1<<INT0); // Interruptereignis INT0 sperren
Schwelle = UIF();
GICR |= (1<<INT0); // Interruptereignis INT0 freigeben
}
}
Dieser Ansatz ist interruptfest. Es knnen also keine sporadischen Fehler aufgrund einer unvollstndigen Zuweisung auftreten. Allerdings tritt hierbei eine weitere
Problematik auf: Die Ausfhrung der Schleifenanweisung (while(1)) und das Sperren
beziehungsweise das Freigeben des INT0-Interrupts knnen von der CPU in wenigen
Taktzyklen abgearbeitet werden. Fr den Aufruf der Benutzerschnittstelle wird dagegen
signifikant mehr Rechenzeit bentigt. Die Konsequenz ist, dass die Interrupts die berwiegende Zeit gesperrt sind. Daher ist die Wahrscheinlichkeit hoch, dass die ISR nicht
aufgerufen wird und damit einige vom Temperatursensor gelieferten Werte nicht verarbeitet werden. Daher sollte bei der Programmentwicklung darauf geachtet werden, dass
Interrupts nur so kurz wie mglich gesperrt werden.
Eine entsprechende Modifikation des Hauptprogramms knnte wie folgt aussehen.
// Sinnvollere Implementierung des Hauptprogramms
void main ()
{
unsigned short Schwelle_lokal;
InitSystem();
while (1) {
Schwelle_lokal = UIF();
GICR &= ~(1<<INT0); // INT0 sperren
Schwelle = Schwelle_lokal;
GICR |= (1<<INT0); // INT0 freigeben
}
}
Zusammenfassend lsst sich festhalten, dass die folgenden berlegungen und Regeln
bei der Verwendung von Interrupts beachtet werden sollten.
Interrupts sollten, wenn berhaupt, so kurz wie mglich vom Hauptprogramm
gesperrt werden.
Da nach dem Aufruf einer ISR keine weiteren Interrupts zugelassen sind, sollte eine
ISR eine mglichst kleine Rechenzeit bentigen.
Fr die Kommunikation zwischen dem Hauptprogramm und einer ISR sollte geprft
werden, ob die implementierte Kommunikation atomar ist. Gegebenenfalls sollte
die Implementierung des Programms angepasst werden, um sporadische Fehler zu
vermeiden.
517
518
14Mikrocontroller
Fllstand = 0
Fllstand = 1
Fllstand = 2
Fllstand = 1
Fllstand = 3
Fllstand = 4
Fllstand = 0
Initialzustand
Fllstand = 0
(leer)
(voll)
(leer)
519
520
14Mikrocontroller
521
522
14Mikrocontroller
{
unsigned char tmp_data;
unsigned char num;
// Wert in FIFO eintragen
num = FIFO_Write(tx_fifo,data);
// Falls Sendepuffer leer, Wert ausgeben
if (UCSRA & (1<<UDRE)) {
UCSRB &= ~(1<<TXCIE);
FIFO_Read(tx_fifo,&tmp_data);
UDR = tmp_data;
UCSRB |= (1<<TXCIE);
}
return num;
}
// Wert aus Empfangs-FIFO lesen (Aufruf durch Hauptprogramm)
unsigned char UART_GetFifo(unsigned char *data)
{
return (FIFO_Read(rx_fifo,data));
}
// Interrupt-Service-Routinen fr Senden und Empfangen
ISR (USART_TXC_vect)
{
unsigned char data;
// Falls FIFO Daten enthlt, diese bertragen
if (FIFO_Read(tx_fifo,&data)) UDR = data;
}
ISR (USART_RXC_vect)
{
// Empfangenen Wert in Empfangs-FIFO schreiben
FIFO_Write(rx_fifo,UDR);
}
523
if (UART_InitFIFOTransfer(9600,16,16)) {
sei();
while (1) {
if (UART_GetFifo(&data)) UART_PutFifo(data);
}
}
}
14.8.1 Hardwareauswahl
Fr die AVR-Mikrocontroller werden von verschiedenen Herstellern zahlreiche Boards
als Fertiggerte oder als Bausatz angeboten. Neben dem Controller selbst stehen auf diesen Boards hufig auch weitere Bauteile wie LEDs, Taster, Lautsprecher oder Summer,
LCD-Displays usw. zur Verfgung. In vielen Fllen steht auch eine Schnittstelle zur Verbindung mit einem PC zur Verfgung, mit welcher die entwickelten Programme in den
Flashspeicher des Controllers bertragen werden knnen. Ein wesentliches Kriterium
fr die Auswahl eines Boards sollte neben dem Preis die Mglichkeiten zur Erweiterung
durch eigene Schaltungsteile sein.
Eine Alternative zu bereits vorgefertigten Boards stellt die Anschaffung eines Steckbrettes dar. Viele Controller der AVR-Familie sind auch in Dual-Inline-Gehusen (DIL)
verfgbar. Mithilfe dieser Controller ist die Realisierung einfacher Systeme auf einem
Steckbrett mglich.
14.8.2 Entwicklungsumgebungen
Fr die AVR-Mikrocontroller steht die Entwicklungsumgebung Atmel Studio zur Verfgung, die kostenlos von der Homepage der Firma Atmel (www.atmel.com) heruntergeladen
werden kann. Atmel Studio ist eine unter Windows-PCs lauffhige Entwicklungsumgebung, die neben der Erstellung von Programmen auch die Programmierung und das Debuggen der Controller untersttzt. Darber hinaus besteht ber einen integrierten Simulator die
Mglichkeit, Programme auch ohne Anschaffung von Hardware zu testen.
524
14Mikrocontroller
14.8.3.1Programmiergerte
Im Internet wird eine Vielzahl unterschiedlicher Programmiergerte von diversen Herstellern angeboten. Sowohl die Preise wie auch die Funktionalitt dieser Gerte differieren stark. Die gnstigsten Gerte werden bereits ab ca. 15EUR angeboten.
In der Regel ist es empfehlenswert, auf Originalgerte der Firma Atmel zurckzugreifen. Auf diese Weise kann ausgeschlossen werden, dass Inkompatibilitten des Programmieradapters zu Fehlern fhren. Ein interessantes Gert stellt der AVR-Dragon dar. Es
untersttzt verschiedene Programmierprotokolle, unter anderem ISP und JTAG. Die Kosten fr dieses Gert liegen bei etwa 70EUR.
14.8.3.2Fuse-Bits
Bei der Durchfhrung eigener Experimente wird man recht schnell auf die sogenannten Fuse-Bits stoen. Fuse-Bits sind einzelne Bits, in der die Konfiguration des
525
Mikrocontrollers abgespeichert wird. Bei der Programmierung der Fuse-Bits ist besondere
Vorsicht geboten. Wird durch eine falsche Programmierung des Fuse-Bits sowohl das ISPals auch das JTAG-Interface gesperrt, ist eine weitere Programmierung des Controllers
nicht mehr ber diese Schnittstellen mglich. Um eine falsche Programmierung der FuseBits zu korrigieren, muss der Controller in einem speziellen Programmiermodus betrieben
werden, der nur von wenigen Gerten (zum Beispiel AVR-Dragon) untersttzt wird.
Im Folgenden werden die Fuse-Bits am Beispiel des ATmega32 kurz erlutert:
OCDEN
Ist dieses Bit aktiviert, wird die oben beschriebene Mglichkeit des Debuggens im Zielsystem untersttzt.
JTAGEN
Mithilfe dieses Bits wird das JTAG-Interface zum Debuggen (OCDEN aktiviert) und/
oder Programmieren des Controllers aktiviert.
SPIEN
Ist SPIEN aktiviert, kann die Programmierung des Controllers ber die SPI-Schnittstelle
mittels ISP erfolgen.
CKOPT
Dieses Bit findet Verwendung, wenn der Takt mithilfe eines Keramikresonators erzeugt
wird und eine hohe Taktfrequenz bentigt wird. Im Normalfall sollte dieses Bit nicht
aktiviert werden.
EESAVE
Bei Aktivierung eines sogenannten Chip-Erase-Cycles (Lschen des gesamten Chips)
wird das EEPROM nicht gelscht, wenn das Bit EESAVE aktiviert ist.
BOOTSZ, BOOTRST
Diese Bits ermglichen es, den Einsprungpunkt nach einem Reset von der Programmspeicheradresse 0 an eine hohe Speicheradresse zu setzen. Mithilfe des so eingesprungenen Programms kann dann untere Bereich des Programmspeichers mit dem eigentlichen
Applikationscode programmiert. Programme, die nach dem Reset den eigentlichen Programmcode laden, werden als Bootloader bezeichnet.
BODLEVEL, BODEN
Die AVR-Controller erlauben es, die Betriebsspannung kontinuierlich zu berwachen.
Unterschreitet die Betriebsspannung einen vorprogrammierten Wert (Auswahlmglichkeiten im Fall des ATmega32: 2,7V oder 4,0V), wird ein Reset ausgelst. Diese auch als
Brown-Out-Detection bezeichnete Mglichkeit kann unter anderem dazu genutzt werden, ein System bei einem Ausfall der Spannungsversorgung geordnet herunterzufahren.
526
14Mikrocontroller
SUT_CKSEL
Diese unter dem Namen SUT_CKSEL zusammengefassten Fuse-Bits dienen zur Auswahl der Takterzeugung fr den Controller. Die gebruchlichsten Flle sind entweder die
Verwendung des intern erzeugten Taktes oder die Aktivierung des eingebetteten Quarzoszillators, welcher an den Anschlssen XTAL1 und XTAL2 einen externen Quarz
bentigt. Darber hinaus kann der Takt mithilfe eines externen RC-Gliedes, einem Keramikresonator oder von einer externen Quelle zugefhrt werden.
Im Auslieferungszustand sind die Fuse-Bits der AVR-Controller mit sinnvollen Werten vorbelegt, sodass eine Neuprogrammierung in der Regel entfallen kann. Eine Ausnahme stellt die Programmierung der Taktauswahl dar. Im Auslieferungszustand ist fr
die Takterzeugung der eingebettete RC-Oszillator als Taktquelle ausgewhlt. Viele Schaltungen verwenden jedoch einen externen Quarz zur Erzeugung des Taktsignals, sodass
die SUT_CKSEL-Bits zunchst entsprechend programmiert werden mssen.
14.9 bungsaufgaben
Die folgenden bungsaufgaben greifen einige Themen dieses Kapitels auf. Die Lsungen finden Sie am Ende des Buches.
Sofern nicht anders vermerkt, ist nur eine Antwort richtig.
Aufgabe 14.1
Welche der folgenden Aussagen ist richtig? (Mehrere Antworten sind richtig)
a) Typische Mikrocontroller besitzen immer eine CPU.
b) Typische Mikrocontroller besitzen immer interne Speicherkomponenten.
c) Typische Mikrocontroller besitzen immer Ports.
d) Typische Mikrocontroller besitzen immer A/D-Umsetzer.
Aufgabe 14.2
Welche Aussagen sind richtig? (Mehrere Antworten sind richtig)
a) Die SPI-Schnittstelle wird zur asynchronen bitseriellen Datenbertragung verwendet.
b) Bei Verwendung einer I2C-Schnittstelle erfolgt nach der bertragung einer Startbedingung immer die bertragung einer Bausteinadresse.
c) Das SPI-Protokoll verwendet getrennte Leitungen zur bertragung von Daten vom
Slave zum Master beziehungsweise vom Master zum Slave.
d) Das I2C-Protokoll verwendet getrennte Leitungen zur bertragung von Daten vom
Slave zum Master beziehungsweise vom Master zum Slave.
Aufgabe 14.3
Welche Aussage ber Unterprogramme ist richtig?
14.9bungsaufgaben
527
a) Beim Ausfhren eines Unterprogramms wird dessen Code auf dem Stack abgelegt
und anschlieend ausgefhrt.
b) Im aufrufenden Programmteil muss die Rcksprungadresse ber geeignete Assemblerbefehle ermittelt und vor einem Unterprogrammaufruf auf dem Stack abgelegt
werden.
c) Der aufrufende Programmteil kann einem Unterprogramm die Parameter ber den
Stack bergeben.
d) Der Code eines Unterprogramms muss im Programmspeicher immer vor dem Code
des aufrufenden Programmteils abgelegt sein.
Aufgabe 14.4
Welche Aussage ist richtig?
a) Wird ein Wert auf dem Stack des AVR abgelegt, wird der Stackpointer dekrementiert.
b) Der Stackpointer des AVR kann nicht durch die Befehle eines Programms modifiziert
werden.
c) Mithilfe des Befehls pop werden Daten auf dem Stack abgelegt.
d) Der Stackpointer der AVR-CPU zeigt immer auf den Wert, welcher als letztes auf
dem Stack abgelegt wurde.
Aufgabe 14.5
Welche Aussage ist richtig?
a) Der AVR enthlt nur Speicher, welche die gespeicherten Werte auch ohne Anliegen
einer Versorgungsspannung halten knnen.
b) Der Programmspeicher des AVR kann nicht zur Speicherung von Daten verwendet
werden, da kein Befehl existiert, mit dem der Programmspeicher gelesen werden kann.
c) Variablen eines C-Programms werden nicht im SRAM des AVR abgelegt.
d) Die Befehle eines AVR-Programms knnen nicht im EEPROM-Speicher abgelegt
werden.
Aufgabe 14.6
Welche Aussagen sind richtig? (Mehrere Antworten sind richtig)
a) Ein typischer Timer kann so programmiert werden, dass beim berlauf des timerinternen Zhlers ein Interrupt ausgelst wird.
b) Soll eine mglichst exakte Interruptrate (Interrupts pro Zeiteinheit) erzielt werden,
sollte ein Timer bevorzugt im CTC-Modus und nicht Normal-Mode betrieben
werden.
c) Eine Vorteiler-Einheit (Prescaler) ermglicht es die Zhlfrequenz eines Timers zu
erhhen.
d) Timer enthalten immer eine Input-Capture-Unit.
528
14Mikrocontroller
Aufgabe 14.7
Der Anschluss PA2 eines ATmega32 ist ber einen Taster mit Masse (GND) verbunden.
Am Anschluss PC6 ist eine LED angeschlossen. Die LED leuchtet, wenn an PC6 ein
High-Pegel ausgegeben wird.
a) Erstellen Sie ein Programm in der Programmiersprache C, das die LED leuchten lsst,
wenn der Taster geschlossen ist. Ist der Taster geffnet, soll die LED nicht leuchten.
b) Realisieren Sie das Programm in Assembler.
Aufgabe 14.8
Mithilfe eines UARTs sollen Daten an einen PC bertragen werden. Fr die Verbindung
gilt: 8 Nutzdatenbits, keine Paritt, 1 Stoppbit. Als Baudrate wird der Wert 9600 bps
gewhlt.
a) Skizzieren Sie den zeitlichen Verlauf des Signals am TXD-Anschluss des Controllers.
Verwenden Sie fr die Nutzdaten den Wert 0x35 (binr: 0011 0101).
b) Wie hoch ist die maximal erzielbare Netto-Datenrate (Daten-Bytes pro Sekunde)?
c) Nun wird auch ein Paritsbit bertragen. Bei der bertragung des Wertes 0x35 (binr:
0011 0101) sendet der Controller ein Parittsbit mit dem Wert 1. Welche Paritt
wurde gewhlt?
Aufgabe 14.9
Der nachfolgende Code zeigt Ausschnitte eines AVR-Programms.
charv8, *p8// 8-Bit-Variablebzw. Zeiger auf einen 8-Bit-Wert
short v16,*p16// 16-Bit-Variable bzw. Zeiger auf einen 16-Bit-Wert
longv32,*p32// 32-Bit-Variable bzw. Zeiger auf einen 32-Bit-Wert
// hier weiterer Programmcode
v8= 12;// Zuweisung 1
p8= &v8;// Zuweisung 2
v16 = 1234;// Zuweisung 3
p16 = &v16;// Zuweisung 4
v32 = 12345678; // Zuweisung 5
p32 = &v32;// Zuweisung 6
// hier weiterer Programmcode
a) Welche der Zuweisungen knnen mit einem AVR atomar ausgefhrt werden?
b) Statt eines AVR wird ein 32-Bit-Mikrocontroller eingesetzt. Welche Zuweisungen
sind nun atomar ausfhrbar?
15
In diesem Abschnitt finden Sie die Lsungen zu den bungsaufgaben der vorangegangenen
Kapitel.
Kapitel1
Aufgabe 1.1 c
Aufgabe 1.2 b
Aufgabe 1.3 c
Aufgabe 1.4 b
Aufgabe 1.5 c
Aufgabe 1.6 b
Aufgabe 1.7 b
Aufgabe 1.8 c
Aufgabe 1.9 c
Aufgabe 1.10 b
Kapitel2
Aufgabe 2.1
a) 1110012
b) 718
c) 3916
Aufgabe 2.2
a) 151
b) 105
c) 97
529
530
Aufgabe 2.3
a) 6bit
b) 7bit
c) 7bit
Aufgabe 2.4
a) [0,255]
b) [127,127]
c) [128,127]
Aufgabe 2.5
a) 111101, kein berlauf
b) 001011, berlauf
c) 000100, berlauf
d) Die Ergebnisse wren identisch
e) kein berlauf bei a und c, berlauf bei b
Aufgabe 2.6
a) 5A, Vorzeichenlos: kein berlauf, 2er-Komplement: kein berlauf
b) 23, Vorzeichenlos: berlauf, 2er-Komplement: berlauf
c) AB, Vorzeichenlos: berlauf, 2er-Komplement: kein berlauf
Aufgabe 2.7
a) 67, Vorzeichenlos: kein berlauf, 2er-Komplement: berlauf
b) 4C, Vorzeichenlos: kein berlauf, 2er-Komplement: berlauf
c) 9D, Vorzeichenlos: berlauf, 2er-Komplement: berlauf
Aufgabe 2.8
Wird ein Gray-codierter Wert inkrementiert, ndert sich das Codewort in genau einer Stelle.
Aufgabe 2.9
b. und c. sind Pseudotetraden
Aufgabe 2.10
a) Es werden 8bit bentigt.
b) Es knnen 8 unterschiedliche Werte dargestellt werden.
Aufgabe 2.11
bertrgt man die Zweierkomplement-Darstellung auf das Dezimalsystem, entsprche die
Codierung 999 dem Zahlenwert 1, da dies der Wert wre, den man bei Durchlaufen des
Zahlenkreises in negativer Richtung erhalten wrde. Aus dieser berlegung ergibt sich:
a) 000
b) 999
c) 998
d) 990
Kapitel3
Aufgabe 3.1 a
Aufgabe 3.2 a, b, d
Aufgabe 3.3 a, b
Aufgabe 3.4 a, c
Aufgabe 3.5
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity my_module is
port (a
b
c
q
end;
:
:
:
:
Aufgabe 3.6
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
531
532
entity my_module is
port (a : instd_logic_vector
b : instd_logic_vector
c : instd_logic_vector
q : out std_logic_vector
end;
(7
(7
(1
(7
downto
downto
downto
downto
0);
0);
0);
0) );
Aufgabe 3.7
process (a,b,c)
begin
case c is
when "00" =>q <= a;
when "01" =>q <= a and b;
when "10" =>q <= a or b;
when "11" =>q <= a xor b;
-- std_logic! => c kann mehr als 4 Werte annehmen
-- also bentigen wir auch den "others"-Fall
when others => q <= (others=>'X');
end case;
end process;
Aufgabe 3.8
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity my_module_16 is
port (a : instd_logic_vector (15 downto 0);
b : instd_logic_vector (15 downto 0);
c : instd_logic_vector (1 downto 0);
533
Kapitel4
Aufgabe 4.1 a
Aufgabe 4.2 a
Aufgabe 4.3
Die Funktionstabelle hat bei drei Eingangsvariablen acht mgliche Kombinationen.
Schrittweise muss jeweils eine weitere LED eingeschaltet werden.
D2
D1
D0
L7
L6
L5
L4
L3
L2
L1
Funktionstabelle Lautstrke-LEDs
Aufgabe 4.4
Die Funktionstabelle hat einen Eintrag ohne Tonausgabe (Mittelstellung), vier Eintrge
mit Ausgabe Ton T1 (Auslenkung in vier Richtungen) und vier Eintrge mit Ausgabe
Ton T2 (schrge Auslenkung in vier Ecken). Dies sind neun mgliche Kombinationen.
Insgesamt sind fr vier Eingnge 16 Kombinationen mglich, sodass fr die brigen sieben Kombinationen ein Dont-Care eingetragen wird.
534
O (oben)
U (unten)
L (links)
R (rechts)
T1 (Ton 1)
T2 (Ton 2)
Funktionstabelle Spielautomat
Aufgabe 4.5
Produktterme 1 und 3 aus Abb.15.1 sind erforderlich. Die Funktion fr die Ausgangsvariable lautet:
Y = A(3) & A(1) & A(0) A(3) & A(2) & A(1) A(3) & A(1)
Kapitel5
Aufgabe 5.1 a
Aufgabe 5.2 a
Aufgabe 5.3 d
Aufgabe 5.4 c
Aufgabe 5.5 c
Aufgabe 5.6 e
Aufgabe 5.7
535
A(1:0)=
00 01 11 10
A(3:2)=
00 0 0 0 0
Term 1
01
Term 2
11
Term 3
10
A(1:0)=
00 01 11 10
A(3:2)=
00 1 1 1 1
01
11
10
A(1:0)=
00 01 11 10
A(3:2)=
00 0 1 1 0
Term 1
Term 2
Term 3
Term 1
01
Term 2
11
Term 3
10
A(1:0)=
00 01 11 10
A(3:2)=
00 1 0 0 0
01
11
10
Term 1
Term 2
Term 3
536
S0: Motor steht. Beim nchsten Tastendruck fhrt die Jalousie herunter (Startzustand).
S1: Taste ist gedrckt, der Motor fhrt herunter.
S2: Motor steht. Beim nchsten Tastendruck fhrt die Jalousie herauf.
S3: Taste ist gedrckt, der Motor fhrt herauf.
Re
T=0
se
T=1
S0
M=00
T=1
T=0
S1
M=01
T=0
T=1
S2
M=00
T=1
S3
M=10
T=0
537
sn+1
T=0 T=1
S0 *
S0
S1
S2
S2
S2
S3
S0
* = Reset
00
01
00
10
S1
S1
S3
S3
Aufgabe 5.13
Der Automat speichert in den Zustnden den bisher eingeworfenen Geldbetrag. Der
Zustand mit der Bedeutung 50 Cent gibt an, dass die bentigte Summe erreicht ist und
der Automat mit dem Ausgang P=1 die Parkmnze ausgibt. Danach muss wieder neues
Geld eingeworfen werden, das heit, der Automat geht nach Ausgabe der Parkmnze
wieder zu 0 Cent.
10
Eingnge:
M(1:0)
01
01
C_10
P=0
00
11
01
C_20
P=0
00
11
10
01
01
C_30
P=0
00
11
10
10
C_40
P=0
00
11
Rese
C_0
P=0
10
C_50
P=1
00
11
XX
538
sn+1
M= 00
C_0
C_0 *
C_10
C_10
C_20
C_20
C_30
C_30
C_40
C_40
C_50
C_0
* = Reset
01
10
11
C_10
C_20
C_30
C_40
C_50
C_0
C_20
C_30
C_40
C_50
C_50
C_0
C_50
C_50
C_50
C_50
C_50
C_0
0
0
0
0
0
1
brigens werden im Zustand C_50 die Eingnge nicht ausgewertet. Der Automat geht
nach einem Takt mit P=1 wieder in den Startzustand. Dies ist mglich, da in der Aufgabenstellung spezifiziert ist, dass zwischen zwei Mnzeinwrfen mehrere Takte vergehen.
Aufgabe 5.14
Der Automat muss sich weiterhin merken, ob die nchste 1 unterdrckt oder ausgegeben
wird. Auerdem ist ein Zustand erforderlich, der nach der jeweils zweiten 1 die Ausgabe
fr einen Takt auf 1 setzt. Nach dieser Ausgabe wird die nchste 1 unterdrckt.
S0: Nchste 1 unterdrcken, Ausgabe 0. (Startzustand)
S1: Nchste 1 weitergeben, Ausgabe 0.
S2: Gerade wurde die zweite 1 erkannt, 1 ausgeben, nchste 1 unterdrcken.
Zustandsfolgediagramm und Zustandsfolgetabelle sind in Abb.15.9 und 15.10 dargestellt.
X=1
X=0
Rese
S0
Y=0
X=0
X=0
S1
Y=0
X=1
X=1
S2
Y=1
sn+1
X=0 X=1
S0 *
S0
S1
S1
S2
S0
* = Reset
S1
S2
S1
0
0
1
539
Aufgabe 5.15
Im Startzustand ist noch keine Stelle des Datenworts empfangen.
Wenn die erste Stelle empfangen wird, sind zwei Zustnde erforderlich, die sich merken, erste Stelle empfangen und Wert 0 oder 1.
Wenn die zweite Stelle empfangen wird, knnen vier Flle auftreten, und zwar: 00,
01, 10 und 11. Jetzt ist wichtig zu erkennen, dass der Automat nicht unterscheiden muss,
ob 01 oder 10 empfangen wurde. Beide Flle knnen den gleichen Zustand nutzen, denn
der Automat muss sich nur merken, dass eine 1-Stelle auftrat. Wenn man weiterberlegt,
kann man erkennen, dass auch eine Unterscheidung von 00 und 11 nicht ntig ist. Darum
sind fr die vier Flle nur zwei Zustnde erforderlich, und zwar: 2 Stellen empfangen,
ungerade und 2 Stellen empfangen, gerade.
Das gleiche gilt nach drei Stellen, wo wieder zwei Zustnde bentigt werden.
Beim Empfang der vierten Stelle wird eventuell das Fehlersignal E=1 ausgegeben
und der Automat geht direkt wieder in den Startzustand. Es ist also kein Zustand 4 Stellen empfangen ntig.
Insgesamt bentigt der Automat somit 7 Zustnde:
ST: Start, keine Stelle des Datenworts empfangen
1_G: Eine Stelle empfangen, Paritt gerade. (Dies entspricht einer empfangenen 0.
Die Bezeichnung wurde gewhlt, da dies zu den folgenden Zustnden passt.)
1_U: Eine Stelle empfangen, Paritt ungerade.
2_G: Eine Stelle empfangen, Paritt gerade.
2_U: Eine Stelle empfangen, Paritt ungerade.
3_G: Eine Stelle empfangen, Paritt gerade.
3_U: Eine Stelle empfangen, Paritt ungerade.
Zustandsfolgediagramm und Zustandsfolgetabelle sind in Abb.15.11 und 15.12 dargestellt. Nach jeweils vier Takten ist die Bearbeitung eines Datenworts abgeschlossen und
der Automat ist im Startzustand fr das nchste Datenwort.
Ein- /Ausgnge
D/E
Rese
ST
0/0
1_G
0/0
2_G
0/0
1/0
1/0
1/0
1/0
1/0
1_U
0/0
2_U
3_G
0/0
3_U
1/0
0/1
0/0
1/1
540
sn+1,E
D=
ST *
1_G,0
2_G,0
1_G
2_U,0
1_U
3_G,0
2_G
2_U
3_U,0
3_G
ST,1
3_U
ST,0
* = Reset
1
1_U,0
2_U,0
2_G,0
3_U,0
3_G,0
ST,0
ST,1
Kapitel6
Aufgabe 6.1 a
Aufgabe 6.2 e
Aufgabe 6.3 d
Aufgabe 6.4 c
Aufgabe 6.5 e
Aufgabe 6.6 c (4 Dateneingnge, 1 Datenausgang, 2 Steuerleitungen)
Aufgabe 6.7 d (1 Dateneingang, 8 Datenausgnge, 3 Steuerleitungen)
Aufgabe 6.8
Ein Modulo-2^10 Zhler durchluft 210=1024 Werte, gerundet 1000 Werte. Bei
50Mio. Werten pro Sekunde schafft der Zhler etwa 50.000 Zyklen pro Sekunde (Antwort b).
Aufgabe 6.9
Ein Modulo-2^8 Zhler durchluft 28=256 Werte, gerundet 250 Werte. Bei 500.000
Werten pro Sekunde schafft der Zhler etwa 2000 Zyklen pro Sekunde (Antwort b).
Aufgabe 6.10
Die Pipeline-Stufe sollte in der Mitte des kritischen Pfads eingefgt werden. Diese
Position liegt in der Verbindungsleitung fr den bertrag nach vier Volladdierern. Die
folgenden vier Volladdierer berechnen die zweite Hlfte der Addition im nchsten Taktzyklus. Damit die Informationen der Datenworte weiterhin zueinander passen, werden
das Ergebnis der ersten vier Volladdierer sowie die Eingangswerte der nchsten vier Volladdierer jeweils um einen Takt verzgert. Die Addiererschaltung mit Pipelining zeigt
Abb.15.13.
Der kritische Pfad durchluft 4 Addierer und besteht insgesamt aus:
541
D
C
D
C
D
C
D
C
D
C
D
C
D
C
D
C
D
C
D
C
D
C
D
C
D
C
D
C
D
C
D
C
0'
VA
VA
VA
VA
CLK
D
C
D
C
D
C
D
C
D
C
D
C
D
C
D
C
D
C
D
C
VA
D
C
D
C
VA
D
C
D
C
D
C
D
C
D
C
VA
VA
CLK
D
C
D
C
D
C
D
C
D
C
Dies ergibt in Summe 2,1ns. Die mgliche Taktfrequenz betrgt damit rund 475MHz.
Eventuell erscheint der Aufwand fr das Pipelining in Abb.15.13 recht hoch. Die
ursprngliche Schaltung hatte 8 Volladdierer und 25 Flip-Flop und erlaubt eine Taktfrequenz von 270MHz. Fr das Pipelining werden 13 zustzliche Flip-Flops bentigt. Volladdierer und Flip-Flop sind ungefhr gleich gro, so dass der Mehraufwand 13 von 33
Elementen, also rund 40% betrgt.
Im Gegenzug kann die Taktfrequenz, und damit die Rechenleistung, um 75% gesteigert werden. Die theoretische Verdopplung der Taktfrequenz wird nicht erreicht, da das
Pipeline-Flip-Flop eine Setup-Zeit sowie Verzgerungszeiten von Takt nach Ausgang
und der Verbindungsleitung bentigt.
Kapitel7
Aufgabe 7.1 b
Aufgabe 7.2 c
Aufgabe 7.3 d
Aufgabe 7.4 a, c
Aufgabe 7.5 b, c, d
Aufgabe 7.6 c
Aufgabe 7.7 a
Aufgabe 7.8 a, d
Kapitel8
Aufgabe 8.1 b
Aufgabe 8.2 a, d
Aufgabe 8.3 b
542
Aufgabe 8.4 b
Aufgabe 8.5 b
Aufgabe 8.6 c
Kapitel9
Aufgabe 9.1 a, b, d
Aufgabe 9.2 c
Aufgabe 9.3 d
Aufgabe 9.4 c
Aufgabe 9.5 c
Aufgabe 9.6 a, b, d
Kapitel10
Aufgabe 10.1 a
Aufgabe 10.2 b
Aufgabe 10.3 a
Aufgabe 10.4 c
Aufgabe 10.5 a
Aufgabe 10.6 b
Aufgabe 10.7 d
Aufgabe 10.8 d
Aufgabe 10.9 e
Aufgabe 10.10
Nur wenn A und B beide 0 sind, ist die Reihenschaltung der beiden p-Kanal-Transistoren (oben) leitend und verbindet den Ausgang Y mit VDD. Wenn ein oder beide
Eingnge 1 sind, verbindet die Parallelschaltung der n-Kanal-Transistoren (unten) den
Ausgang Y mit GND.
Verhalten der Transistorschaltung
A
543
Aufgabe 11.3 d
Aufgabe 11.4 d
Aufgabe 11.5 c
Aufgabe 11.6 d
Aufgabe 11.7
a) Die Berechnung erfolgt am einfachsten ber Zweierpotenzen. Mit 10 Adressleitungen lassen sich 210=1024 also 1K Adressen ansprechen. Fr den zustzlichen
Faktor 16 sind 4 Adressleitungen erforderlich, denn 24=16. In der Summe werden
10+4=14 Adressleitungen bentigt.
b) Zunchst werden wieder 10 Adressleitungen fr 1K Adressen bentigt. Fr den
zustzlichen Faktor 256 sind 8 Adressleitungen erforderlich, denn 28=256. In der
Summe werden 10+8=18 Adressleitungen bentigt.
Aufgabe 11.8
a) Mit 16 Adressleitungen lassen sich 216=65.536 Datenworten ansprechen. Jedes
Datenwort hat 8bit, somit betrgt die Speicherkapazitt 65.5368=524.288bit.
In der Praxis wird oft der Faktor 1024 zu 1K gerechnet. 16 Adressleitungen teilen
sich dann auf in 6 Adressleitungen fr den Faktor 26=64 und 210=1K, also 64K
Datenworte. Mit 8bit je Datenwort ergibt sich 512kbit Speicherkapazitt.
b) 20 Adressleitungen entsprechen zweimal 10 Adressleitungen fr 1K Adressen, miteinander multipliziert 1M Adressen. Mit 16bit je Datenwort betrgt die Speicherkapazitt 16Mbit.
Der exakte Wert betrgt 22016=16.777.216bit.
Aufgabe 11.9
Bei einer Dualzahl am Eingang des Speichermoduls entspricht die Reihenfolge der Speicherzellen zeilenweise ansteigenden Zahlen. Die erste Zeile entspricht also den Zahlen 0
bis 7, die zweite Zeile den Zahlen 8 bis 15, bis zur letzten Zeile mit den Zahlen 56 bis 63.
Primzahlen im mglichen Wertebereich 0 bis 63 sind die Zahlen: 2, 3, 5, 7, 11, 13, 17,
19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61.
Fr die Primzahlen wird in die Speicherzelle eine 1 gespeichert, ansonsten eine 0.
Das Ergebnis zeigt Abb.15.14.
Kapitel12
Aufgabe 12.1 A-2 B-1 C-3 D-4
Aufgabe 12.2 A-4 B-3 C-1 D-2
Aufgabe 12.3
a) Quantisierungsintervallbreite
000
ADDR(2:0)
Zeilendecoder
001
010
011
100
101
110
111
ADDR(5:0)
111
110
101
100
011
010
001
000
Leseverstrker
DATA
544
Spaltendecoder
ADDR(5:3)
Umax
= 2n 1 Q = 3 V (1023/1024) = 2,997 V
c) Die Eingangsspannung 1,2V dividiert durch die Quantisierungsintervallbreite ergibt
1, 2 V
= 409,6
3 V/1024
Der gerundete Wert 410 entspricht der Codierung 01 1001 1010.
545
d) Die Codierung 00 0100 1011 entspricht dem Wert 75 und ergibt den
Reprsentationswert
75 Q = 75 3 V/1024 = 0,2197 V
Die Eingangsspannung liegt im Bereich der Quantisierungsintervallbreite um den
Reprsentationswert
Als Digitalwert ergibt sich somit 01011001, also der Dezimalwert 89. Dies entspricht
dem Reprsentationswert
89 Q = 89 2 V/256 = 0,6953 V
Die Differenz zur Eingangsspannung von 0,7V betrgt 4,7mV und ist kleiner als die
Quantisierungsintervallbreite.
Anmerkung: Der Quantisierungsfehler ist grer als Q/2. Dies liegt daran, dass das
hier verwendete Berechnungsverfahren, wie im Text beschrieben, keine Rundung enthlt, sondern Nachkommastellen abschneidet. Der rechnerische Ausgangswert wre
0,7V/(2V/256)=89,6, Wenn Sie Q/2 zum Eingangswert 0,7V addieren, erhalten Sie
mit dem Verfahren den korrekt gerundeten Digitalwert. Rechnen Sie erneut!
Aufgabe 12.5
Der Zeitablauf ist in der Tabelle dargestellt.
546
Zeitschritt
Ux [in
V]
Udig [in
V]
10
11
12
13
14
15
0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2 0,2
0
0,8
1 0,2
0,8 1,2
0,8 1,2
0,6 0,6
0,2
Plus
[binr]
0,8 1,2
0,8 1,2
0,8
0,8 1,2
0,8 1,2
0,6 0,6
0,2
1 0,2
0,6 0,6
0,2
547
a)
#include <avr/io.h>
int main(void)
{
// internen Pull-Up Widerstand fr Tasteranschluss aktivieren
PORTA |= 1<<2;
// LED-Anschluss als Ausgang konfigurieren
DDRC |= 1<<6;
while (1){
// Nachfolgende Bedingung liefert "true"
// falls Taster nicht gedrckt
if (PINA & (1<<2))
DDRC &= ~(1<<6); // LED aus
else
DDRC |= 1<<6;// LED an
}
}
b)
.include "m32def.inc"
; Interner Pull-Up
inr16, PORTA;
orir16, (1<<2);
outPORTA, r16;
fr Taster aktivieren
PORTA nach r16
Bit 2 setzen
r16 wieder nach PORTA schreiben
548
led_on:
inr16, PORTC; PORTC holen
orir16, (1<<6); Bit 6 setzen
outPORTC, r16; und wieder nach PORTC schreiben => LED an
jmpmy_loop; fertig. Taster wieder abfragen
Anmerkung: Der Code lsst sich auch krzer schreiben, wenn die Befehle sbi und cbi
verwendet werden.
Aufgabe 14.8
a) (Abb.15.15).
b) 1 Frame besteht aus 10Bit. Mit jedem Frame wird 1Byte bertragen. Die BruttoDatenrate betrgt 9600bps. Also knnen 960Bytes/s bertragen werden, wenn die
Frames ohne Pause zwischen den Frames bertragen werden.
c) Die Anzahl der bertragenen Einsen (inklusive Parittsbit) ist ungerade. Es wurde
also ungerade Paritt gewhlt.
Aufgabe 14.9
Der AVR besitzt eine 8-Bit-CPU. Die Befehle verarbeiten also maximal 8Bit. Werden
Operanden mit einer greren Wortbreite verarbeitet, sind hierfr mehrere Befehle notwendig. Zwischen der Ausfhrung zweier Befehle kann ein Interrupt ausgelst werden.
Also sind nur die Zuweisungen atomar, die mit einem einzelnen Befehl durchgefhrt
werden knnen.
Im Fall des AVR ist dies die Zuweisung an eine 8-Bit-Variable. Die Zuweisung an
einen Zeiger ist nicht atomar, da der Zeiger eine grere Wortbreite als 8bit besitzt und
daher fr die Zuweisung mehrere Befehle erforderlich sind. Im Fall einer 32-Bit-CPU
sind alle Zuweisungen atomar (wenn vorausgesetzt wird, dass Zeiger eine maximale
Wortbreite von 32bit besitzen).
Fr die Aufgabe ergibt sich also:
a) Nur Zuweisung 1 ist atomar.
b) Alle Zuweisungen sind atomar.
Ruhe
Stopp
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Start
Ruhe
Literaturhinweise
549
550
Literaturhinweise
Weblinks
Fr Informationen zu einzelnen Komponenten empfehlen wir die Herstellerseiten. In der
nachfolgenden bersicht sind einige Webseiten exemplarisch aufgefhrt.
Standard-Logik:
Texas Instruments: www.ti.com/lsds/ti/logic/home_overview.page
NXP: www.nxp.com/products/logic
Programmierbare Logikbausteine (CPLDs, FPGAs):
Xilinx: www.xilinx.com
Altera: www.altera.com
Weblinks
551
Lattice: www.latticesemi.com
MicroSemi: www.microsemi.com
FPGA-Experimentierboards:
Digilent: www.digilentinc.com
Terasic: www.terasic.com
Speicher:
Samsung: www.samsung.com/semiconductor/
Hynix: www.skhynix.com
Micron Technology: www.micron.com
AD/DA-Umsetzer:
Microchip: www.microchip.com
Analog Devices: www.analog.com
AVR-Mikrocontroller:
allgemein: www.atmel.com/products/microcontrollers/avr/
ATmega32: www.atmel.com/devices/ATMEGA32.aspx
Eine bersicht ber verschiedene Hersteller, sowie Information zu Preisen und Verfgbarkeit von Bauelementen bieten Distributoren bzw. Elektronikversandhndler, zum
Beispiel
Digikey: www.digikey.de
Mouser: www.mouser.de
Reichelt-Elektronik: www.reichelt.de
Watterott: www.watterott.com
Viele Informationen zu digitalen Systemen und ein sehr gutes deutschsprachiges Forum
finden Sie auf der Seite
www.mikrocontroller.net
Stichwortverzeichnis
19
1-aus-N-Code, 43
6T-Zelle, 320
7-Segment-Code, 44
8b/10b-Code, 394
A
Abfallzeit, 208
Abtasthalteglied, 355
Abtasttheorem, 356
Abtastung, 354
Acknowledge, 499
Addierer, 177
Address Map, 400
Adressbus, 398
Adressdecoder, 176
Adresse, 317
Adressierung, 406, 452
absolute, 407, 410
indirekte, 407
indizierte, 408
PC-absolute, 410
PC-indirekte, 410
PC-relative, 410
relative, 410
unmittelbare, 406
Adressraum, 346
A/D-Umsetzer, 505
Amdahls Law, 412
Analog-Digital-Umsetzer, 353
Analoge Signaldarstellung, 11
Analog-Komparator, 510
Analog-Multiplexer, 505
Ansteuerungstabelle, 142
Anstiegszeit, 208
Anti-Fuse, 324
Antivalenz, 92
Application Specific Integrated Circuit (ASIC),
8, 210
Application Specific Standard Product (ASSP),
9, 211
Approximation, sukzessive, 364
quivalente Automaten, 149
quivalente Zustnde, 139
quivalenz, 93
Arbeitsregister, 402, 429, 456
Architecture, 56, 232, 254
Arithmetic Logical Unit (ALU), 398
Array, 229
ASCII-Code, 44
Assembler, 427, 430
Assembler-Beispiel
Addition, 447
Interrupt, 462
Multiplikation, 449
Ports, 469
setzen und Lschen von Bits, 444
stackbasierte Parameterbergabe, 456
Assembler-Direktiven, 461
Assert-Anweisung, 255
Assoziativgesetz, 96
Astabile Kippstufe, 129
Asynchroner Automat, 157
Asynchroner Reset, 125
VHDL-Beschreibung, 161
Atomare Operation, 515
Attribut, 238
Ausbeute, 308
Ausgangsfunktion, 130
553
554
Automat, 129
quivalenter, 149
asynchroner, 157
VHDL-Beschreibung, 163
B
Bad Blocks, 326
Ball Grid Array, 310
Baudrate, 487
Befehlssatz, 402
BGA-Gehuse (Ball Grid Array), 310
Bias-Darstellung, 36
Bibliothek, 55
ieee, 55
std, 55
work, 55
Binrdaten, 2
Binre Schaltfunktion, 86
Binary Coded Digit, 40
Binary Coded Digit Code (BCD-Code), 40
Bistabile Kippstufe, 129
Bit-Flipping, 326
Blockgenerator, 245
Block-RAM, 246, 278, 284
Bonding, 308
Boolean, 226
Boolesche Schaltfunktion, 86
Boot-Code, 331
Bottom-Up Entwurf, 174
Burst, 335
Bus
Adressbus, 398
Datenbus, 399
Steuerbus, 399
C
Capture-Unit, 475
Carry-Logik, 275
C-Beispiel
analoge Eingabe, 509
Bits setzen und Lschen, 431
FIFO, 518
I2C, 502
interrupt, 463
Ports, 467
SPI, 497
Temperaturberwachung, 512
Stichwortverzeichnis
UART, 491
Uhr, 481
Zugriff auf Peripherie, 430
Central Processing Unit (CPU), 398, 421
Character, 227
Chip, 7
Clock, 119
Clock-Domain, 193
Clock Skew, 276
CMOS-Technologie, 290
Codewortlnge, 144
Codierung
AD-Umsetzer, 354
optimierte, 147
von Zustnden, 144
Compact Disc (CD), 11, 356
Complex Instruction Set Computer (CISC), 416
Complex Programmable Logic Devices
(CPLD), 212, 271
Component-Anweisung, 240
Constant Propagation, 219
D
Datenbus, 399
Datenregister, 465
Datenrichtungsregister, 465
Datentransferrate, 318
Datenwort, 318
De Morgansche Gesetze, 97
Delay-Locked-Loop (DLL), 279
Demultiplexer, 176
D-Flip-Flop, 4, 122, 239, 276
Aufbau, 124
Aufbau in CMOS-Technologie, 298
Verwendung im FPGA, 271
VHDL-Beschreibung, 158
Die, 308
Differenzielle Nichtlinearitt, 383
Digital-Analog-Umsetzer, 353
Digitale Signaldarstellung, 11
DIL-Gehuse (Dual In-Line), 309
Direct Memory Access (DMA), 427
Direktverfahren (DAU), 375
Disjunktive Normalform, 99
Diskrete Signaldarstellung, 13
Diskrete Speicherbausteine, 332
Diskretisierung, 354
Distributed Memory, 247, 278
Stichwortverzeichnis
Distributivgesetz, 96
Dont-Care, 59, 87
im Karnaugh-Diagramm, 107
Dotierung, 292
Double-Data-Rate (DDR), 319, 392
Dual In-Line, 309
Dual-Port-Speicher, 248, 278, 330
Dual-Slope-Verfahren, 370
Durchsatz, 193
Duty Cycle, 119, 337, 340
Dynamic Random Access Memory (DRAM),
316, 321
diskreter Baustein, 337
Dynamische Verlustleistung, 301
E
Einheitsgatter, 207
Einschwingzeit, 385
Einstufige Logik, 93
Electrically Erasable Programmable Read-Only
Memory (EEPROM), 316, 324
diskreter Baustein, 340
Electronic Design Automation (EDA), 215
Embedded Memory, 318, 329
Enable, 127
VHDL-Beschreibung, 162
Endlicher Automat, 129
Energieeffizienz, 303
Entity, 56
Entwurf von Automaten, 135
Entwurfsprozesses, 53
Error Correcting Code (ECC), 326
F
Falling_edge(), 159, 240
Fan-in, 207
Fan-out, 207
Feldeffekttransistoren, 292
Ferroelectric RAM (FRAM), 316, 327
Fertigungstest, 307
Festkomma-Darstellung, 37
Field Programmable Gate Array (FPGA), 9,
212, 269, 273
FinFET-Transistoren, 311
Finite State Machine s. Automat
First-In-First-Out (FIFO), 246, 317, 517
Flags, 434
555
Flankenerkennung, 193
Flash-EEPROM, 317, 325
Flash-Umsetzer, 362
Floating-Gate, 324
Floating-Point-Unit, 404
Flchtige Speicher, 315
For-generate-Anweisung, 236
For-Schleife, 77
Frequenz, 119
Function, 231
Funktionstabelle, 87
Fuse-Bit, 524
G
Gated Clock, 277
Gate-Lnge, 296, 310
Gatter, 86
Gatternetzliste, 210
Gehuse, 309
Generate-Anweisung, 236
Generic, 235
Generic Array Logic (GAL), 269
Gleitkomma-Darstellung, 37
Glitch, 184
Grafikcontroller, 4
Gray-Code, 42, 197, 242
H
Halbaddierer, 179
Handshake, 488
Harmonische Verzerrungen, 386
Harvard-Architektur, 419
modifizierte, 420
Hazard, 184
High-Logik-Pegel, 2
Histogramm, 386
Hold-Zeit, 124
I
I2C, 497
Identitt, 93
If-Anweisung, 76
If-generate-Anweisung, 236
Implikation, 93
In-Circuit-Emulation (ICE), 524
Inferenz, 243
556
Inhibition, 93
Input-Capture-Unit, 475
Instanziierung, 79, 243
Instruktionssatz, 402
In-System-Programming (ISP), 524
Integer, 58
Integrated Circuit (IC), 7
Integrierte Schaltung, 7, 289
Inter-Integrated-Circuit-Bus, 497
Interrupt, 458, 480, 512
Interruptfreigabe, 459, 512
Interrupt-Vektor, 460
Inverter, 3, 90, 296
IO-Block (IOB), 274, 280
J
JESD204B, 393
JK-Flip-Flop, 128
JTAG, 524
K
Karnaugh-Diagramm, 98, 101
Karnaugh-Veitch-Diagramm, 101
Kippstufe
astabile, 129
bistabile, 129
Kohlenstoffnanorhre, 312
Kombinatorische Schaltung, 85
Kommutativgesetz, 96
Komplexgatter, 304
Konjunktive Normalform, 100
Kritischer Pfad, 190
KV-Diagramm, 101
L
Label, 429
Lastkapazitt, 210
Latch, 116
Latenzzeit, 193, 318
Layout, 294
Leckstrme, 301
Library-Anweisung, 55
Linear Feedback Shift Register (LFSR), 183
Logic Element, 273, 283
Logik
einstufige, 93
Stichwortverzeichnis
negative, 3
n-stufige, 93
positive, 2
zweistufige, 93
Logikbaustein, 8
Logikgatter, 3
Logik-Pegel, 2
Logikstufen, 93
Logiksymbole, US-amerikanische, 94
Logik-Zustand, 2
Look-up table (LUT), 267, 273, 274
Look-up-Tabelle, 267, 273, 274
Low-Logik-Pegel, 2
Low Voltage Differential Signaling
(LVDS), 392
M
Magnetoresistive RAM (MRAM), 316, 327
Majorittsschaltung, 87
Makrozelle, 271
Maxterm, 100
Mealy-Automat, 130, 149
Medwedew-Automat, 131, 156
Memory-Mapped-I/O, 400, 430
Metastabilitt, 124, 196
Microchip, 7
Mikrocontroller, 11, 213, 420
Minimale Codewortlnge, 144
Minimierung
logischer Funktionen, 98
von Zustnden, 139
Minterm, 98
Mixed-Signal-ASIC, 388
Mnemonic, 429
Modulo-m-Zhler, 180
Monostabile Kippstufe, 129
Monotonitt, 383
Moore-Automat, 131
Mooresches Gesetz, 310
Multi-Level-Cell (MLC), 326
Multiplexer, 175
N
Nachtriggerbares Monoflop, 129
NAND-EEPROM, 325
NAND-Gatter, 290
NAND-Verknpfung, 91
Stichwortverzeichnis
Natural, 225
Negation, 90
Negative Logik, 3
Netzliste, 219
Nichtflchtige Speicher, 315
Nichtlinearitt, 382
differenzielle, 383
N-Kanal-Transistor, 292
Non-Volatile Memory, 315
Non-Volatile RAM (NVRAM), 316, 326
diskreter Baustein, 344
NOR-EEPROM, 325
NOR-Verknpfung, 92
N-stufige Logik, 93
O
ODER-Gatter, 3
ODER-Verknpfung, 90
Offsetfehler, 381
On-Chip-Debugging, 524
One-Hot-Codierung, 144
Open-Collector-Ausgang, 199, 498
Open-Drain-Ausgang, 199, 498
Operation, atomare, 515
Optimierte Codierung, 147
Others, 63, 77
OTP-Speicher, 323
Oversampling-Technik, 373
P
Package, 241
Paket, 241
Parallel-Seriell-Wandlung, 182
Parallelverfahren, 362
erweitertes, 366
Paritt, 487
Periodendauer, 119
Pfad, kritischer, 190
Phase-Change RAM (PCRAM), 316, 328
Phase-Locked Loop (PLL), 279
Pipeline-ADU, 364, 368
Pipelining, 192, 411, 412, 418
P-Kanal-Transistor, 293
Placement, 220
Platzierung, 220
PLCC-Gehuse, 309
Polling, 458, 511
557
Port, 56, 421, 464
Port Mapped I/O, 400
Portfunktionen, alternative, 426, 470
Positive Logik, 2
Primterm, 99
Procedure, 232
Process, Voltage, Temperature (PVT), 299
Program Counter, 410, 433
Programmable Array Logic (PAL), 269
Programmable Logic Arrays (PLA), 266
Programmable Logic Device (PLD), 266
Prozess, 69
Pseudo-Tetrade, 40
Pull-Up-Widerstand, 498
Pulsweitenmodulation (PWM), 379
Q
QFP-Gehuse, 310
Quad-Data-Rate (QDR), 334
Quad-Flat-Pack-Gehuse, 310
Quad-Level-Cell (QLC), 326
Quantisierung, 354
Quantisierungsfehler, 380
Quantisierungsintervall, 354, 359
Querstrom, 302
R
R-2R-Leiternetzwerk, 377
Read(), 251
Readline(), 251
Read-Only-Memory (ROM), 316, 323
Real data, 225
Rechenregeln der Schaltalgebra, 95
Record, 230
Reduced Instruction Set Computer (RISC), 417
Redundante Codewortlnge, 144
Reduzierter Spannungshub, 318
Refresh, 322
Register, 122, 186
Registerausgabe, 154
VHDL-Beschreibung, 164
Registerpaar, 437
Register-Transfer-Level (RTL), 186, 217
Reset
asynchroner, 125, 161
synchroner, 126
Resistive RAM (R RAM), 316, 328
558
Resolution Function, 227
Ripple-Carry-Addierer, 178
Rising_edge(), 158, 240
Route, 220
RS-Flip-Flop, 116
asynchroner Automat, 158
Rckgekoppeltes Schieberegister, 183
Rckkopplung, 117
S
Schaltaktivitt, 302
Schaltalgebra, 86
Schaltfunktion, 86
binre, 86
boolesche, 86
Schaltglied, 86
Schaltsymbole, 3
Schaltung, sequenzielle, 115
Schaltungsentwurf durch Minimieren, 98
Schaltzeichen, 86, 174
Schaltzeit, 208
Schiebeoperationen, 448
Schieberegister, 182
rckgekoppeltes, 183
Schmitt-Trigger, 197
Sequenzielle Schaltung, 115
Serial Peripheral Interface (SPI), 345, 389, 492
Serializer, 274
Seriell-Parallel-Wandlung, 182
Setup-Zeit, 124, 276
Shannonsches Gesetz, 97
Shared Variable, 248
Sieben-Segment-Anzeige, 254
Sigma-Delta-Umsetzer, 371
Signal, 67
Signal-Rausch-Abstand, 385
SIgnal to Noise And Distortion ratio
(SINAD), 385
Signal to Noise Ratio(SNR)
Signal-Rausch-Abstand, 385
Signed Data, 62
Silizium, 290
Simple Programmable Logic Device (SPLD),
212, 269
Simulation, 52
Single-Slope-Verfahren, 370
Stichwortverzeichnis
Skipbefehl, 444
Soft-Prozessor, 280
Speicher, 315
Speichersystem, 345
Spezifikation, 136
Spike, 184
Sprungbefehl
bedingter, 405
unbedingter, 405
Stack, 409, 456
Stackpointer, 433, 456
Standardlogik-Bausteine, 204
Standardzellen, 304
Stapelspeicher, 409, 456
Stapelzeiger, 433, 456
Startbedingung, 498
Startbit, 486
Static Random Access Memory
(SRAM), 316, 319
diskreter Baustein, 334
Statische Verlustleistung, 301
Statusregister, 433, 444
Std_logic, 57, 59, 227
Std_logic_textio, 251
Std_logic_vector, 60, 227, 229
Std_ulogic, 227
Std_ulogic_vector, 60
Stellengewicht, 19
Steuerbus, 399
Steuerwerk, 401
Stimuli, 52, 218, 259
Stoppbedingung, 499
Stoppbit, 487
Strspannungsabstand, 208
String, 228, 252
Strukturgre, 310
Stufigkeit, 93
Substrat, 292
Subtypes, 228
Sukzessive Approximation, 364
Summation gewichteter Strme, 375
Superskalare Architektur, 412
Switch Matrix, 274
Synchroner Reset, 126
VHDL-Beschreibung, 160
Synthese, 52
System-on-Chip (SoC), 211, 281, 305
Stichwortverzeichnis
T
Takt, 4, 118
Taktbereich, 193
Taktflankensteuerung, 121
Taktfrequenz, 191
Taktkonzept, 186
Taktpegelsteuerung, 120
Taktbergang, 193
Tastverhltnis, 119
Testbench, 52, 218, 250, 254
Textausgabe, 252
Textio, 251
Time, 226
Timer, 470
CTC Mode, 472
Normal Mode, 471
PWM Mode, 473
To_integer, 63
To_signed, 63
To_unsigned, 63
Toggle-Flip-Flop, 128
Top-down Entwurf, 173
Total Negative Slack (TNS), 220
Total Hold Slack (THS), 221
Transiente Signalzustnde, 184
Transmission-Gate, 298
Triple-Level-Cell(TLC), 326
Tri-State-Ausgang, 198
Verwendung fr Datenbus, 349
Turingmaschine, 130
Two-Wire-Interface (TWI), 497
Type, 227
Type-Qualifier, 252
U
UART-Protokoll, 486
berlauf, 26, 28, 34
bertrag, 178
UND-Gatter, 3
UND-Verknpfung, 89
Universal Asynchronous Receiver/Transmitter
(UART), 485
Universal Synchronous Asynchronous Receiver/Transmitter (USART), 489
Unsigned Data, 62
Untermodul, 173
Unterprogrammaufruf, 455
559
US-amerikanische Logiksymbole, 94
Use-Anweisung, 55
V
Venn-Diagramm, 101
Verdrahtung, 220
Vereinfachungsregeln der Schaltalgebra, 95
Vergleich Mealy-Automat/Moore-Automat,
153
Verlustleistung, 300
statische, 301
Verstrkungsfehler, 381
Very-Long-Instruction-Word (VLIW), 412
Verzgerungszeit, 184, 209
VHDL-Beispiel
Attribute, 238
Component-Anweisung, 240
Dateizugriff, 251, 252
Fugngerampel, 187
Generate-Anweisung, 237
Generics, 235
Inferenz eines Speichers, 246
Paket, 242
Sequenzielle Schaltung, 159
Testbench, 254, 257
Volatile, 430
Volatile Memory, 315
Volladdierer, 178
Vollsubtrahierer, 179
Voltage-Controlled-Oscillator (VCO), 279
Von-Neumann-Architektur, 398, 419
Vorrangregeln der Schaltalgebra, 94
Vorzeichen-Betrag-Darstellung, 30
Vorzeichenerweiterung, 34
W
Wafer, 307
Wgeverfahren, 363
Wahrheitstabelle, 87
Wait-Anweisung, 254
Wartbarkeit, 154
Watchdog-Timer, 483
Waveform, 255
Waveform-Viewer, 52
Wear Leveling, 325
Wertdiskrete Signaldarstellung, 13
560
Wertkontinuierliche Signaldarstellung, 13
While-Schleife, 78
Wireload Model, 219
Worst Hold Slack (WHS), 221
Worst Negative Slack (WNS), 220
Write(), 251
Writeline(), 251
X
XOR-Gatter (exclusive or), 3
XOR-Verknpfung (exclusive or), 92
Y
Yield, 308
Stichwortverzeichnis
Z
Zahlenkreis, 25
Zhler, 180
Zhlverfahren, 365
Zeichenketten, 228, 252
Zeitdiskrete Signaldarstellung, 13
Zeitkontinuierliche Signaldarstellung, 13
Zero-One-Hot-Codierung, 144
Zustand, 130, 135
Zustandscodierung, 141
Zustandsfolgediagramm, 134
Zustandsfolgetabelle, 133
Zustandsbergangsfunktion, 130
Zustandsvariable, 130
Zuweisung, nebenlufige, 68
Zweierkomplement-Darstellung, 32
Zweistufige Logik, 93
Zweiwertigkeit, 2