100% fanden dieses Dokument nützlich (4 Abstimmungen)
3K Ansichten577 Seiten

Digitaltechnik VHDL

VHDL

Hochgeladen von

schaltegger
Copyright
© © All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen
100% fanden dieses Dokument nützlich (4 Abstimmungen)
3K Ansichten577 Seiten

Digitaltechnik VHDL

VHDL

Hochgeladen von

schaltegger
Copyright
© © All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen
Sie sind auf Seite 1/ 577

Winfried Gehrke

Marco Winzker
Klaus Urbanski
Roland Woitowitz

Digitaltechnik
Grundlagen, VHDL, FPGAs, Mikrocontroller
7. Auflage

Springer-Lehrbuch

Winfried Gehrke Marco Winzker


Klaus Urbanski Roland Woitowitz

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

OnlinePlus Material zu diesem Buch finden Sie auf


http://www.springer.com/978-3-662-49731-9
ISSN 0937-7433
Springer-Lehrbuch
ISBN 978-3-662-49730-2
ISBN 978-3-662-49731-9 (eBook)
DOI 10.1007/978-3-662-49731-9
Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detail
lierte bibliografische Daten sind im Internet ber http://dnb.d-nb.de abrufbar.
Springer Vieweg
Springer-Verlag GmbH Deutschland 1995, 1997, 2000, 2004, 2007, 2012, 2016
Das Werk einschlielich aller seiner Teile ist urheberrechtlich geschtzt. Jede Verwertung, die nicht
ausdrcklich vom Urheberrechtsgesetz zugelassen ist, bedarf der vorherigen Zustimmung des Verlags.
Das gilt insbesondere fr Vervielfltigungen, Bearbeitungen, bersetzungen, Mikroverfilmungen und die
Einspeicherung und Verarbeitung in elektronischen Systemen.
Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt
auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichenund Markenschutz-Gesetzgebung als frei zu betrachten wren und daher von jedermann benutzt werden
drften.
Der Verlag, die Autoren und die Herausgeber gehen davon aus, dass die Angaben und Informationen in diesem
Werk zum Zeitpunkt der Verffentlichung vollstndig und korrekt sind. Weder der Verlag noch die Autoren
oder die Herausgeber bernehmen, ausdrcklich oder implizit, Gewhr fr den Inhalt des Werkes, etwaige
Fehler oder uerungen.
Gedruckt auf surefreiem und chlorfrei gebleichtem Papier
Springer Vieweg ist Teil von Springer Nature
Die eingetragene Gesellschaft ist Springer-Verlag GmbH Germany
Die Anschrift der Gesellschaft ist: Heidelberger Platz 3, 14197 Berlin, Germany

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

Vorwort zur ersten Auflage

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

Vorwort zur ersten Auflage

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

Digitale Codierung von Informationen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17


2.1 Grundlagen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2 Vorzeichenlose Zahlen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.2.1 Stellenwertsysteme. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.2.2 Darstellung vorzeichenloser Zahlen inder Digitaltechnik. . . . . . 20
2.2.3 Umwandlung zwischen Zahlensystemen. . . . . . . . . . . . . . . . . . . 22
2.2.4 Beispiele zur Umwandlung zwischen Zahlensystemen. . . . . . . . 22
2.2.5 Wertebereiche und Wortbreite. . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.2.6 Zahlendarstellung mit begrenzter Wortbreite. . . . . . . . . . . . . . . . 25
2.2.7 Binre vorzeichenlose Addition. . . . . . . . . . . . . . . . . . . . . . . . . . 26

XI

XII

Inhaltsverzeichnis

2.2.8 Binre vorzeichenlose Subtraktion . . . . . . . . . . . . . . . . . . . . . . . 27


2.2.9 Binre vorzeichenlose Multiplikation und Division . . . . . . . . . . 29
2.3 Vorzeichenbehaftete Zahlen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.3.1 Vorzeichen-Betrag-Darstellung. . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.3.2 Zweierkomplement-Darstellung . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.3.3 Addition und Subtraktion inZweierkomplement-Darstellung. . . 34
2.3.4 Multiplikation und Division in
Zweierkomplement-Darstellung . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.3.5 Bias-Darstellung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.3.6 Darstellbare Zahlenbereiche. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.4 Reelle Zahlen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.4.1 Festkomma-Darstellung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.4.2 Gleitkomma-Darstellung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.4.3 Reelle Zahlen indigitalen Systemen. . . . . . . . . . . . . . . . . . . . . . 39
2.5 Codes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.5.1 BCD-Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.5.2 Gray-Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.5.3 1-aus-N-Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.5.4 ASCII-Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
2.5.5 7-Segment-Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
2.6 bungsaufgaben. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3

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

VHDL fr kombinatorische Schaltungen. . . . . . . . . . . . . . . . . . . . . . . . . 110


4.6.1 Beschreibung logischer Verknpfungen. . . . . . . . . . . . . . . . . . . . 110
4.6.2 Beschreibung der Funktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
4.7 bungsaufgaben. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

Sequenzielle Schaltungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115


5.1 Speicherelemente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
5.1.1 RS-Flip-Flop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
5.1.2 Taktsteuerung von Flip-Flops. . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
5.1.3 D-Flip-Flop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
5.1.4 Erweiterung des D-Flip-Flops. . . . . . . . . . . . . . . . . . . . . . . . . . . 125
5.1.5 Weitere Flip-Flops. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
5.1.6 Kippstufen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
5.2 Endliche Automaten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
5.2.1 Automatentheorie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
5.2.2 Beispiel fr einen Automaten. . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
5.2.3 Entwurf von Automaten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
5.2.4 Codierung von Zustnden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
5.2.5 Entwurf von Mealy-Automaten. . . . . . . . . . . . . . . . . . . . . . . . . . 149
5.2.6 Vergleich von Mealy- und Moore-Automat. . . . . . . . . . . . . . . . . 153
5.2.7 Registerausgabe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
5.2.8 Asynchrone Automaten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
5.3 Entwurf sequenzieller Schaltungen mit VHDL. . . . . . . . . . . . . . . . . . . . 158
5.3.1 Grundform des getakteten Prozesses. . . . . . . . . . . . . . . . . . . . . . 158
5.3.2 Erweiterte Funktion des getakteten Prozesses. . . . . . . . . . . . . . . 159
5.3.3 Steuerleitungen fr Flip-Flops. . . . . . . . . . . . . . . . . . . . . . . . . . . 160
5.3.4 Entwurf von Automaten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
5.3.5 Programmierstile fr VHDL-Code. . . . . . . . . . . . . . . . . . . . . . . . 166
5.4 bungsaufgaben. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167

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

6.4.1 Verzgerungszeit realer Schaltungen. . . . . . . . . . . . . . . . . . . . . . 184


6.4.2 Transiente Signalzustnde. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
6.4.3 Signalbergnge inkomplexen Schaltungen. . . . . . . . . . . . . . . . 185
6.5 Taktkonzept inrealen Schaltungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
6.5.1 Register-Transfer-Level (RTL). . . . . . . . . . . . . . . . . . . . . . . . . . . 186
6.5.2 Beispiel fr Entwurf mit Register-Transfer-Level:
Ampelsteuerung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
6.5.3 Kritischer Pfad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
6.5.4 Pipelining. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
6.5.5 Taktbergnge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
6.5.6 Metastabilitt von Flip-Flops. . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
6.5.7 Taktbergang mehrerer Signale. . . . . . . . . . . . . . . . . . . . . . . . . . 196
6.6 Spezielle Ein-/Ausgangsstrukturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
6.6.1 Schmitt-Trigger-Eingang. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
6.6.2 Tri-State-Ausgang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
6.6.3 Open-Kollektor-Ausgang. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
6.7 bungsaufgaben. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
7

Realisierung digitaler Systeme. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203


7.1 Standardisierte Logikbausteine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
7.1.1 Charakteristische Eigenschaften digitaler Schaltkreise. . . . . . . . 206
7.1.2 Lastfaktoren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
7.1.3 Strspannungsabstand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
7.1.4 Schaltzeiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
7.1.5 Logikfamilien. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
7.2 Komponenten fr digitale Systeme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
7.2.1 ASICs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
7.2.2 ASSPs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
7.2.3 FPGAs und CPLDs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
7.2.4 Mikrocontroller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
7.2.5 Vergleich der Alternativen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
7.2.6 Kombination von Komponenten . . . . . . . . . . . . . . . . . . . . . . . . . 214
7.3 VHDL-basierter Systementwurf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
7.3.1 Designflow. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
7.3.2 VHDL-Eingabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
7.3.3 Simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
7.3.4 Synthese. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
7.3.5 Platzierung und Verdrahtung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
7.3.6 Timinganalyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
7.3.7 Inbetriebnahme. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
7.3.8 Der digitale Entwurf als iterativer Prozess. . . . . . . . . . . . . . . . . . 222
7.4 bungsaufgaben. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

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

Programmierbare Logik. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263


9.1 Grundkonzepte programmierbarer Logik . . . . . . . . . . . . . . . . . . . . . . . . 264
9.1.1 Zweistufige Logik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
9.1.2 Tabellenbasierte Logikimplementierung. . . . . . . . . . . . . . . . . . . 267
9.2 Simple Programmable Logic Device (SPLD). . . . . . . . . . . . . . . . . . . . . 269
9.3 Complex Programmable Logic Device (CPLD) . . . . . . . . . . . . . . . . . . . 271
9.4 Field Programmable Gate Arrays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
9.4.1 Allgemeiner Aufbau eines FPGAs. . . . . . . . . . . . . . . . . . . . . . . . 273
9.4.2 Taktverteilung im FPGA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
9.4.3 Typische Spezialkomponenten. . . . . . . . . . . . . . . . . . . . . . . . . . . 277
9.5 FPGA-Familien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
9.5.1 Vergleich ausgewhlter FPGA-Familien. . . . . . . . . . . . . . . . . . . 282
9.6 Hinweise zum Selbststudium. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
9.7 bungsaufgaben. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286

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

11.4 Diskrete Speicherbausteine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332


11.4.1 Praktischer Einsatz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
11.4.2 QDR-II-SRAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
11.4.3 DDR3-SDRAM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
11.4.4 EEPROM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
11.4.5 FRAM mit seriellem Interface. . . . . . . . . . . . . . . . . . . . . . . . . . 344
11.5 Speichersysteme. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
11.5.1 Adressdecodierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
11.5.2 Multiplexing des Datenbusses. . . . . . . . . . . . . . . . . . . . . . . . . . 348
11.5.3 Ansteuerung diskreter Speicherbausteine. . . . . . . . . . . . . . . . . 350
11.6 bungsaufgaben. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
12 Analog-Digital- und Digital-Analog-Umsetzer. . . . . . . . . . . . . . . . . . . . . . . 353
12.1 Grundprinzip von Analog-Digital-Umsetzern. . . . . . . . . . . . . . . . . . . . . 353
12.1.1 Systeme zur Umsetzung analoger indigitale Signale. . . . . . . . 355
12.1.2 Abtasttheorem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
12.1.3 Abtasthalteglied (AHG). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
12.1.4 Erreichbare Genauigkeit fr ADUs abhngig von der
Codewortlnge. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
12.1.5 Codierung der ADU-Werte . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
12.2 Verfahren zur Analog-Digital-Umsetzung. . . . . . . . . . . . . . . . . . . . . . . . 361
12.2.1 Parallelverfahren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
12.2.2 Wgeverfahren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
12.2.3 Zhlverfahren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
12.2.4 Erweitertes Parallelverfahren. . . . . . . . . . . . . . . . . . . . . . . . . . . 366
12.2.5 Erweitertes Zhlverfahren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
12.2.6 Single- und Dual-Slope-Verfahren. . . . . . . . . . . . . . . . . . . . . . . 370
12.2.7 Sigma-Delta-Umsetzer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
12.3 Verfahren zur Digital-Analog-Umsetzung. . . . . . . . . . . . . . . . . . . . . . . . 374
12.3.1 Direktverfahren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
12.3.2 Summation gewichteter Strme. . . . . . . . . . . . . . . . . . . . . . . . . 375
12.3.3 R-2R-Leiternetzwerk. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
12.3.4 Pulsweitenmodulation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
12.4 Eigenschaften realer AD- und DA-Umsetzer. . . . . . . . . . . . . . . . . . . . . . 380
12.4.1 Statische Fehler. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
12.4.2 Dynamische Fehler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
12.5 Ansteuerung von diskreten AD- und DA-Umsetzern. . . . . . . . . . . . . . . . 388
12.5.1 Serielle Ansteuerung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
12.5.2 Parallele Ansteuerung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
12.5.3 Serielle Hochgeschwindigkeitsschnittstelle JESD204B. . . . . . 393
12.6 bungsaufgaben. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395

Inhaltsverzeichnis

XIX

13 Grundlagen der Mikroprozessortechnik. . . . . . . . . . . . . . . . . . . . . . . . . . . . 397


13.1 Grundstruktur eines Mikrorechnersystems . . . . . . . . . . . . . . . . . . . . . . . 397
13.2 Befehlsabarbeitung ineinem Mikroprozessor. . . . . . . . . . . . . . . . . . . . . 401
13.3 Typische Befehlsklassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
13.3.1 Aufbau eines Befehlswortes . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
13.3.2 Arithmetische und logische Befehle. . . . . . . . . . . . . . . . . . . . . 403
13.3.3 Transferbefehle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
13.3.4 Befehle zur Programmablaufsteuerung. . . . . . . . . . . . . . . . . . . 405
13.3.5 Spezialbefehle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
13.4 Adressierung von Daten und Befehlen. . . . . . . . . . . . . . . . . . . . . . . . . . . 406
13.4.1 Unmittelbare Adressierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
13.4.2 Absolute Adressierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
13.4.3 Indirekte Adressierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
13.4.4 Indirekte Adressierung mit dem Stackpointer. . . . . . . . . . . . . . 409
13.4.5 Befehlsadressierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410
13.5 Manahmen zur Steigerung der Rechenleistung. . . . . . . . . . . . . . . . . . . 410
13.5.1 Erhhung der Taktfrequenz. . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
13.5.2 Parallelitt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
13.5.3 Pipelining. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
13.5.4 Befehlssatzerweiterungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
13.6 Grundlegende Mikroprozessorarchitekturen. . . . . . . . . . . . . . . . . . . . . . 416
13.6.1 CISC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
13.6.2 RISC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
13.6.3 RISC und Harvard-Architektur. . . . . . . . . . . . . . . . . . . . . . . . . 418
13.7 Mikrocontroller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
13.8 bungsaufgaben. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
14 Mikrocontroller. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
14.1 Die Mikrocontroller-Familie AVR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
14.2 Programmierung von Mikrocontrollern. . . . . . . . . . . . . . . . . . . . . . . . . . 427
14.2.1 Programmierung inAssembler . . . . . . . . . . . . . . . . . . . . . . . . . 429
14.2.2 Programmierung inC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430
14.3 Die AVR-CPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
14.4 Der AVR-Befehlssatz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
14.4.1 Arithmetische und logische Befehle. . . . . . . . . . . . . . . . . . . . . 436
14.4.2 Transferbefehle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
14.4.3 Befehle zur Programmablaufsteuerung. . . . . . . . . . . . . . . . . . . 437
14.5 Verwendung der AVR-Befehle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
14.5.1 Arithmetische und logische Grundfunktionen. . . . . . . . . . . . . . 444
14.5.2 Befehle fr den Zugriff auf Speicher und
Peripheriekomponenten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
14.5.3 Programmverzweigungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453

XX

Inhaltsverzeichnis

14.6 Grundlagen der Interruptverarbeitung. . . . . . . . . . . . . . . . . . . . . . . . . . . 458


14.6.1 Interruptfreigabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459
14.6.2 Interrupt-Service-Routinen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460
14.7 Eingebettete Peripheriekomponenten. . . . . . . . . . . . . . . . . . . . . . . . . . . . 463
14.7.1 Ports. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464
14.7.2 Timer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
14.7.3 Schnittstellen fr die serielle Datenbertragung. . . . . . . . . . . . 484
14.7.4 SPI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
14.7.5 TWI/I2C. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
14.7.6 Analoge Peripheriekomponenten. . . . . . . . . . . . . . . . . . . . . . . . 504
14.7.7 Interrupt-basierte Kommunikation mit
Peripheriekomponenten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
14.8 Hinweise zum praktischen Selbststudium. . . . . . . . . . . . . . . . . . . . . . . . 523
14.8.1 Hardwareauswahl. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523
14.8.2 Entwicklungsumgebungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523
14.8.3 Programmierung und Debugging von AVR-Mikrocontrollern. . . 524
14.9 bungsaufgaben. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526
15 Lsungen der bungsaufgaben. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529
Literaturhinweise. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549
Stichwortverzeichnis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553

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

Field Programmable Gate Array


Ferroelectric Random Access Memory
Graphics Processing Unit
Inter-Integrated Circuit
Integrated Circuit
International Electrotechnical Commission
Institute of Electrical and Electronics Engineers
Integrale Nichtlinearitt
Input Output Block
In System Programming
Interrupt Service Routine
Joint Test Action Group
Konjunktive Normalform
Logic Element
Least Significant Bit (Niederwertigstes Bit)
Look-Up Table
Low Voltage Differential Signaling
Low Voltage Transistor-Transistor-Logic
Multi Level Cell
Metal Oxide Semiconductor
Magnetoresistive Random Access Memory
Most Significant Bit (Hchstwertigstes Bit)
Non-Volatile Random Access Memory
Oversampling Ratio
One Time Programmable
Program Counter, Personal Computer
Phase-Change Random Access Memory
Programmable Logic Array
Plastic Leaded Chip Carrier
Programmable Logic Device
Phase Locked Loop
Pulse Width Modulation, Pulsweitenmodulation
Quad Data Rate
Quad Flat Pack
Quad Level Cell
Random Access Memory
Reduced Instruction Set Computer
Read Only Memory
Resistive Random Access Memory
Register Transfer Level
Successive Approximation Register
Synchronous Dynamic Random Access Memory
Signal-to-Interference Ratio including Noise and Distortion
Signal-to-Noise Ratio
Serial Peripheral Interface

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.

Springer-Verlag GmbH Deutschland 2016


W. Gehrke et al., Digitaltechnik, Springer-Lehrbuch,
DOI10.1007/978-3-662-49731-9_1

1Einfhrung

1.1 Arbeitsweise digitaler Schaltungen


Ein wichtiges Kennzeichen der Digitaltechnik ist die Darstellung von Informationen mit
den Werten 0 und 1. Dieses Prinzip wird als Zweiwertigkeit bezeichnet. Daten mit zwei
mglichen Werten werden Binrdaten genannt. Wenn eine Information mehr als zwei
Werte haben kann, wird sie mit mehreren Stellen dargestellt. Am bekanntesten ist sicher
das Byte, ein Datenwort mit acht Bit, also acht Stellen mit dem Wert 0 oder 1.

1.1.1 Darstellung von Informationen


Binrdaten werden meistens mit Spannungspegeln dargestellt, beispielsweise die 0 mit
0V und die 1 mit 3,3V. Dabei sind auch geringe Abweichungen der Spannung erlaubt,
das heit auch eine Spannung von beispielsweise 0,2V wird noch als 0 akzeptiert. Dies
ist eine wichtige Eigenschaft der Digitaltechnik, denn dadurch ist sie gegenber kleinen
Strungen und Rauschen unempfindlich. Erst bei groen Strungen kann der Wert einer
Information nicht mehr korrekt erkannt werden.
Fr die Darstellung von Binrdaten mit Spannungspegeln gibt es mehrere Standards.
Beispielsweise wird im Standard LVTTL der Spannungsbereich von 0 bis 0,8V als logische 0 und von 2,0 bis 3,3V als logische 1 interpretiert. Der Bereich zwischen 0,8 und
2,0V ist der bergangsbereich und diese Spannungen drfen nur kurz beim Wechsel
zwischen 0 und 1 auftreten. Die Bezeichnung LVTTL bedeutet brigens Low-VoltageTransistor-Transistor-Logik und hat gewissermaen historischen Ursprung. Sie ist eine
spannungsreduzierte Version (Low-Voltage) eines anderen Standards (TTL).
Es gibt, neben LVTTL, eine Vielzahl weiterer Standards fr Spannungspegel. Frher wurden oft hhere Spannungen, z.B. 5V, verwendet, sodass auch hhere Pegel
gebruchlich waren. Innerhalb von integrierten Schaltungen, z.B. der CPU in Ihrem
Computer, werden heutzutage geringere Spannungen im Bereich von 1V benutzt.
Die Werte 0 und 1 knnen je nach Anwendung auch durch andere physikalische Gren dargestellt werden, beispielsweise Lichtimpulse in einer Glasfaserleitung oder durch
elektrische Ladung auf einem Kondensator.

1.1.2 Logik-Pegel und Logik-Zustand


Die Begriffe Logik-Pegel und Logik-Zustand unterscheiden Spannungswerte und Information einer binren Variablen. Der Logik-Pegel wird durch L (Low) und H (High) und
der Logik-Zustand durch die Ziffern 0 und 1 bezeichnet. Fr die Beschreibung des physikalischen Verhaltens einer digitalen Schaltung dienen somit die Logik-Pegel, whrend
das logische Verhalten durch Logik-Zustnde gekennzeichnet wird.
Die Zuordnung von L und H zu 0 und 1 erfolgt fast immer in positiver Logik, das
heit der Pegel L entspricht einer logischen 0 und Pegel H entspricht einer logischen 1.

1.1 Arbeitsweise digitaler Schaltungen

Prinzipiell ist auch eine umgekehrte Zuordnung mglich, die als negative Logik bezeichnet wird. Diese Zuordnung wird in der Praxis jedoch kaum verwendet.

1.1.3 Verarbeitung von Informationen


Digitalschaltung knnen die logischen Werte 0 und 1 fr Berechnungen und Entscheidungen verwenden. Das Ergebnis einer Berechnung ist dabei wieder der Wert 0 oder 1.
Die Grundelemente zur Berechnung werden als Logikgatter bezeichnet. Die wichtigsten
Logikgatter sind:
Inverter: Der Inverter ergibt am Ausgang das Gegenteil des Eingangs. Das heit
eine 0 wird zur 1, eine 1 zur 0.
UND-Gatter: Das UND-Gatter hat zwei oder mehr Eingnge. Es ergibt am Ausgang
eine 1, wenn alle Eingnge 1 sind. Mit anderen Worten: Der eine und der andere Eingang mssen 1 sein.
ODER-Gatter: Das ODER-Gatter hat ebenfalls zwei oder mehr Eingnge. Es ergibt
1, wenn mindestens ein Eingang 1 ist. Auch der Fall, dass mehrere Eingnge 1 sind ist
erlaubt. Mit anderen Worten: Der eine oder der andere oder beide Eingnge mssen 1
sein.
XOR-Gatter: Das XOR-Gatter ist in der Grundform fr zwei Eingnge definiert. Die
Bezeichnung bedeutet ausschlieendes Oder (engl. exclusiv-or). Es ist eine Abwandlung des ODER-Gatters, die jedoch keine 1 ausgibt, wenn beide Eingnge 1 sind. Mit
anderen Worten: Fr eine 1 am Ausgang mssen der eine oder der andere Eingang
aber nicht beide Eingnge 1 sein.
Fr die Logikgatter gibt es Schaltsymbole, die in Abb.1.1 dargestellt sind. Die Eingnge
sind immer auf der linken Seite, der Ausgang ist rechts. Das Dreieck im Symbol des
Inverters steht fr eine Weiterleitung oder Verstrkung, der Kreis gibt die Invertierung,
also Umkehrung des Wertes an. Das Zeichen & steht fr und. Im ODER-Gatter meint

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.

1.1.4 Beispiel: Einfacher Grafikcontroller


Damit Sie sich die Arbeitsweise einer Digitalschaltung vorstellen knnen, soll eine
Schaltung als Beispiel vorgestellt werden. Es handelt sich um einen Controller fr ein
einfaches Grafikmodul. Moderne PC-Grafikkarten sind sehr leistungsfhig und knnen
realistische Bilder in hoher Geschwindigkeit erzeugen. Allerdings wrde die Beschreibung eines solchen Grafikcontrollers wahrscheinlich das ganze Buch fllen. Die hier
vorgestellte Schaltung ist deutlich einfacher zu verstehen und findet sich in Gerten mit
geringen Grafikanforderungen. Sie entspricht auch in etwa den PC-Grafikkarten der
1980er Jahre.
Der Grafikcontroller setzt den Bildschirm aus einzelnen Zeichen zusammen. Fr dieses Beispiel gehen wir davon aus, dass der Bildschirm 800 Bildpunkte breit und 600
Bildpunkte hoch ist. Jedes Zeichen soll 10 Bildpunkte breit und 15 Bildpunkte hoch sein.
Abb.1.2 Schaltsymbol des
D-Flip-Flop (D-FF)

Dateneingang
Takt

1D
C1

Datenausgang

1.1 Arbeitsweise digitaler Schaltungen

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.

Abb.1.3 Buchstabe A und


Ziffer 1 als 10 mal 15 Grafik

von Prozessor
Daten
Addr.

RAM
40x80 Byte
Takt

an Display
Daten
Addr.

ROM

128 Zeichen,
10x15 Pixel

Zhler
Spalte
Zhler
Zeile

Abb.1.4Schaltungsstruktur eines einfachen Grafikcontrollers

=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.

1.1.5 Beispiel: Zhler im Grafikcontroller


In einen Teil des Grafikcontrollers soll noch etwas detaillierter geschaut werden. Damit
ein Zeichen auf dem Bildschirm dargestellt wird, muss die aktuelle Spalte an den ROMSpeicher gegeben werden. Hierzu wird ein Zhler eingesetzt, der nacheinander die Zahlen von 0 bis 9 ausgibt und danach wieder ab der 0 weiterzhlt. Diese Schaltung ist ein
Teil des Blocks Zhler Spalte in Abb.1.4.
Die Schaltung fr so einen Zhler ist in Abb.1.5 dargestellt. Der Zhlerstand wird als
Dualzahl dargestellt, das heit, eine Ziffer Z besteht aus vier Stellen z(3:0), wobei jede
Stelle 0 oder 1 sein kann. Der Wert 0000 entspricht dem Zhlerstand Null, 0001 entspricht Eins und so weiter. Die ausfhrliche Darstellung von Dualzahlen folgt spter in
Kapitel 2.
In der Schaltung von Abb. 1.5 wird der aktuelle Stand des Zhlers in vier Flip-Flops
fr die vier Stellen der Zahl Z gespeichert. Aus dem aktuellen Wert wird mit einigen Gattern der neue Zhlerstand berechnet. Der Takt sorgt fr die Datenbernahme, das heit

1.2 Technische Realisierung digitaler Schaltungen

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 Technische Realisierung digitaler Schaltungen


Eine Digitalschaltung kann auf verschiedene Art und Weise implementiert, also aufgebaut werden. Der Oberbegriff fr eine Schaltungsimplementierung ist Integrierte Schaltung, englisch Integrated Circuit (IC). Der Begriff bezieht sich darauf, dass mehrere
Transistoren auf dem gleichen Bauelement zusammengefasst, also integriert sind. Auf
den ersten integrierten Schaltungen begann dies mit bis zu 50 Transistoren, heute knnen
es ber eine Milliarde Transistoren sein.
Weitere Bezeichnungen sind Chip und Microchip. Diese Begriffe beziehen sich auf
das kleine Siliziumplttchen innerhalb eines ICs. In der Praxis werden diese Begriffe
gleichbedeutend fr IC verwendet.
Die wichtigsten Arten von ICs werden im Folgenden kurz vorgestellt.

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

verschiedener Bausteine angeboten, die in Tabellenbchern und Datenblttern von den


Herstellern beschrieben werden.
Ein Beispiel fr einen Logikbaustein ist der IC 7408 mit vier Und-Gattern. Er ist in
Abb.1.6, dargestellt. Die jeweils zwei Eingnge und ein Ausgang der Und-Gatter sind
auf Anschlussbeinchen, sogenannten Pins, aus dem Gehuse herausgefhrt und knnen
mit anderen Bauelementen verbunden werden. Am Logikbaustein sind auerdem Versorgungsspannung (VDD) und Masse (GND) vorhanden, so dass der Baustein 14 Pins hat.
Sehr kleine Schaltungen, wie etwa der Zhler aus Abb.1.5 knnen prinzipiell mit einzelnen Logikbausteinen realisiert werden. Fr grere Digitalschaltungen wren jedoch
viel zu viele Bausteine ntig. In der Praxis werden Logikbausteine eingesetzt, wenn
kleine Schaltungen mit wenigen Gattern bentigt werden.

1.2.2 Kundenspezifische Integrierte Schaltung


Eine groe Digitalschaltung kann aufgebaut werden, indem Logikgatter und Flip-Flop
nach Bedarf verschaltet werden und dann eine Integrierte Schaltung nach diesem Bauplan hergestellt wird. So eine Schaltung wird als Kundenspezifische Integrierte Schaltung
oder ASIC (Application Specific Integrated Circuit) bezeichnet.
Der Entwurf eines ASIC erfordert jedoch hohe Entwicklungskosten und eine relativ lange Entwicklungszeit. Die Entwicklung einer solchen Schaltung lohnt sich darum
meist erst ab einer Stckzahl von 10 000, besser 100 000 ICs. Ein ASIC kann entweder
nur in eigenen Produkten eingesetzt werden oder auch anderen Firmen zum Kauf angeboten werden.

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

Abb.1.6IC 7408 mit vier Und-Gattern

7408

1A
1B

&

1Y

2A
2B

&

2Y

3A
3B

&

3Y

4A
4B

&

4Y

1.2 Technische Realisierung digitaler Schaltungen

Standard Product). Bekannte Beispiele hierfr sind Prozessoren und Speicherbausteine


fr Computer. Abb.1.7 zeigt den Minicomputer Raspberry Pi3, der auf der linken Seite
einen IC mit Prozessor und Grafikcontroller enthlt. Auf der rechten Seite ist ein etwas
kleinerer IC, der fr die Netzwerk- und USB-Verbindung sorgt.
Aber auch fr viele andere Anwendungen sind ASSPs verfgbar. Wenn fr eine Problemstellung ein ASSP verfgbar ist, kann damit meistens schnell und mit vertretbaren
Kosten eine Schaltung aufgebaut werden.

1.2.4 Programmierbare Schaltung


Einen Mittelweg zwischen Standardbauelementen und ASIC bieten programmierbare
Schaltungen, sogenannte FPGAs (Field Programmable Gate Arrays). Ein FPGA ist,
genau wie ein ASSP, als IC direkt verfgbar. Anders als ein ASSP hat ein FPGA aber
keine festgelegte Funktion, sondern wird vom Entwicklerteam programmiert.
Abb.1.8 zeigt den prinzipiellen Aufbau eines FPGAs. Der Baustein enthlt verschiedene Logikblcke, die als Logikgatter und Flip-Flop programmiert werden knnen.
Durch programmierbare Verbindungsleitungen und Ein-/Ausgnge knnen Schaltungen
erstellt werden. Im Bild wird durch die fett gedruckten Elemente eine einfache Digitalschaltung implementiert.

Abb.1.7Minicomputer Raspberry Pi

10

1Einfhrung

Ein-/
Ausgnge
Logik

A
B
C
D

Verbindungsnetzwerk

&

1D
C1

Takt

Abb.1.8Programmierbare Schaltung (FPGA)

Ein FPGA kann zehntausende Logikgatter und Flip-Flops enthalten. Im Vergleich zu


ASICs sind Entwicklungskosten und Entwicklungszeit fr eine FPGA-Schaltung geringer, sodass ein Produkt eher am Markt sein kann. Allerdings sind die Stckkosten und
die Verlustleistung etwas hher.
Als Beispiel nehmen wir an, eine Firma mchte einen Monitor fr medizinische
Anwendungen entwickeln. Fr die Darstellung von Rntgenbildern ist eine sehr hohe
Abstufung von Grauwerten erforderlich.
ASSPs zur Ansteuerung von Monitoren sind verfgbar. Sie sind jedoch nur fr Computer-Anwendungen mit normaler Farbabstufung ausgelegt.
Die Firma knnte ein eigenes ASIC als Grafikcontroller entwerfen. Der Markt fr die
geplanten Monitore ist jedoch nicht besonders gro und die Firma erwartet Verkaufszahlen von einigen hundert Monitoren pro Jahr. Fr diese geringe Stckzahl lohnt
sich der Entwurf eines ASIC nicht.
Ein FPGA ist die bevorzugte Lsung zur Implementierung der Monitoransteuerung.
Die Digitalschaltung kann mit der bentigten Farbabstufung aufgebaut werden. Da
FPGAs als Komponente verfgbar sind, ist keine aufwendige Fertigung erforderlich.

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.

1.3 Digitale und analoge Informationen

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.

1.3 Digitale und analoge Informationen


1.3.1 Darstellung von Informationen
Die Begriffe digital und analog beschreiben die Darstellung von Signalen. Die Aufgabe
von analogen und digitalen Schaltungen ist oft die Verarbeitung von physikalischen Gren, wie Audiosignale, Bildsignale oder Sensorinformationen. Eine analoge Darstellung
bersetzt eine physikalische Gre in eine andere, zweite physikalische Gre. Diese
zweite physikalische Gre ist in der Elektronik normalerweise eine elektrische Spannung. Wenn beispielsweise ein Temperatursensor die Wassertemperatur misst, kann die
Temperatur von 0 bis 100C durch eine analoge Spannung von 0 bis 1V dargestellt
werden. Theoretisch kann ein analoges Signal beliebig viele Werte einnehmen.
Bei einem digitalen Signal ist die Anzahl der mglichen Werte festgelegt. Dies ist
der wesentliche Unterschied zu einem analogen Signal. Wenn eine Wassertemperatur
verarbeitet werden soll, kann beispielsweise festgelegt werden, dass eine Abstufung in
1-Schritten sinnvoll ist. Das digitale Signal kann dann nur 101 verschiedene Werte einnehmen, also die Werte 0, 1, 2, bis 100. Diese Abzhlbarkeit der mglichen Werte
steckt auch hinter der Bezeichnung digital, denn das Wort digit hat eigentlich die Bedeutung Finger und meint damit das Abzhlen (per Finger).
Beispielsweise kann Musik auf analoger Schallplatte oder digitaler CD gespeichert
werden. Bei der Schallplatte werden die Schallwellen in kleine Auslenkungen einer
Rille bersetzt. Die Auslenkung reprsentiert somit das Musiksignal. Bei der CD wird
das Musiksignal digital gespeichert. Pro Sekunde werden 44.100 Signalwerte als Zahl
gespeichert. Mit 16 Bit pro Zahl sind 65.536 verschiedene Signalwerte mglich.

1.3.2 Vor- und Nachteile der Darstellungen


Analoge Signalverarbeitung hat den Vorteil, dass ein Signal theoretisch beliebig genau
dargestellt werden kann. Digitale Signale haben eine begrenzte Genauigkeit, diese kann
aber so gewhlt werden, dass die Abstufungen ausreichend fein sind.
Die 65.536 mglichen Signalwerte der CD knnen strungsfrei ausgelesen und wiedergegeben werden. Die Schallplatte hat theoretisch eine unbegrenzte Auflsung. Diese
wird durch die kleinen Abmessungen der Schallplattenrille sowie durch Staub und

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.3.3 Wert- und zeitdiskret


Die digitale Darstellung von Signalen wird durch die Fachbegriffe wertdiskret und
zeitdiskret beschrieben. Das Wort diskret bedeutet dabei voneinander abgetrennt,
einzelstehend.
Mit wertdiskret ist gemeint, dass fr die Signalwerte nur bestimmte, einzelne Werte
mglich sind. Das Gegenteil ist wertkontinuierlich, das heit es gibt keine Lcken zwischen den mglichen Werten.
Mit zeitdiskret ist gemeint, dass die Signalwerte nur zu bestimmten Zeiten vorhanden
sind. Das Gegenteil ist zeitkontinuierlich, das heit zu jeder Zeit ist das Signal definiert.

1.4bungsaufgaben
Abb.1.9 Verlauf eines
analogen und digitalen Signals

13
f(t)

f(t)
analog

digital

Betrachten wir wieder CD und Schallplatte:


Ein Musiksignal auf einer CD ist wertdiskret, denn es sind fest definierte 65.536 verschiedene Werte mglich. Und es ist zeitdiskret, denn pro Sekunde sind genau 44.100
Signalwerte definiert. Die Werte zwischen diesen Zeitpunkten sind nicht abgespeichert. Fr die Wiedergabe kann man diese Zwischenwerte problemlos interpolieren,
aber sie sind nicht auf der CD enthalten.
Ein Musiksignal auf Schallplatte ist wertkontinuierlich, denn die Schallplattenrille ist
stufenlos verschoben. Und es ist zeitkontinuierlich, denn die Rille hat keine Lcke.
Fr jede Position, also fr jeden Zeitpunkt ist eine Verschiebung der Rille vorhanden.
Abb.1.9 zeigt ein analoges und ein digitales Signal im Zeitverlauf. Das analoge Signal
ist durchgngig ber der horizontalen Zeitachse und der vertikalen Werteachse. Das digitale Signal ist nur zu bestimmen Zeiten definiert und kann nur bestimmte Werte einnehmen. Die Schrittweite im digitalen Signal ist zur Verdeutlichung sehr gro gewhlt. In
der Realitt sind die Abstnde so klein, dass ein digitales Signal keine erkennbaren Stufen zeigt.
Digitale Signale sind also wertdiskret und zeitdiskret, analoge Signale sind wertkontinuierlich und zeitkontinuierlich. Es gibt Spezialflle von wertdiskret und zeitkontinuierlich oder zeitdiskret und wertkontinuierlich. Diese werden jedoch nicht gesondert
betrachtet, sondern sind meist analog. Ein solcher Spezialfall sind Kinofilme auf Filmrolle. Pro Sekunde sind typischerweise 24 Einzelbilder vorhanden (zeitdiskret), die Farbinformationen der einzelnen Bilder sind stufenlos (wertkontinuierlich).

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

a) Binrdaten stellen einen Zahlenwert dar


b) Binrdaten arbeiten mit 0 und 3,3V
c) Es gibt zwei Zustnde
Aufgabe 1.2
Was gilt IMMER fr einen Inverter?
a) Ein Inverter hat eine Verzgerungszeit von 1 ns
b) Eine 0 am Eingang wird zu einer 1 am Ausgang
c) Wenn am Eingang 3,3V anliegt, ergibt der Ausgang 0V
Aufgabe 1.3
Was gilt fr ein UND-Gatter?
a) Nur wenn genau ein Eingang 1 ist, ist der Ausgang 1
b) Wenn mindestens ein Eingang 1 ist, ist der Ausgang 1
c) Nur wenn alle Eingnge 1 sind, ist der Ausgang 1
Aufgabe 1.4
Was gilt fr ein ODER-Gatter?
a) Nur wenn alle Eingnge 1 sind, ist der Ausgang 1
b) Wenn mindestens ein Eingang 1 ist, ist der Ausgang 1
c) Nur wenn genau ein Eingang 1 ist, ist der Ausgang 1
Aufgabe 1.5
Was gilt fr ein XOR-Gatter (mit zwei Eingngen)?
a) Wenn mindestens ein Eingang 1 ist, ist der Ausgang 1
b) Nur wenn alle Eingnge 1 sind, ist der Ausgang 1
c) Nur wenn genau ein Eingang 1 ist, ist der Ausgang 1
Aufgabe 1.6
Was gilt fr ein UND-Gatter?
a) Nur wenn alle Eingnge 0 sind, ist der Ausgang 0
b) Wenn mindestens ein Eingang 0 ist, ist der Ausgang 0
c) Nur wenn genau ein Eingang 0 ist, ist der Ausgang 0

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

Digitale Codierung von Informationen

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 Digitale Codierung von Informationen

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

Tab.2.2Binre Vorstze fr Zweierpotenzen


Zweierpotenz Abkrzung
(gesprochen)

Abgeleitet von z.B. Speicherkapazitt in bit

z.B. Speicherkapazitt in Byte

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)

2.2 Vorzeichenlose Zahlen

19

(International Electrotechnical Commission) in der Norm IEC 60027 neue Vorstze fr


binre Vielfache festgelegt. In Tab.2.2 sind diese Vorstze zusammengefasst.
Die IEC-Norm hat sich bisher nur zum Teil in der Praxis verbreitet. In vielen Fllen werden die Vorstze fr Zehnerpotenzen verwendet, obwohl eigentlich Vorstze fr
Zweierpotenzen gemeint sind.

2.2 Vorzeichenlose Zahlen


In diesem Abschnitt werden Zahlendarstellungen und grundlegende arithmetische Operationen fr vorzeichenlose duale Ganzzahlen erlutert. Der betrachtete Zahlenraum
umfasst also die natrlichen Zahlen inklusive der Null.

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

2 Digitale Codierung von Informationen

Z7 =

N1


zi 7i

i=0

Da sich somit eine Einerstelle, eine Siebenerstelle und eine Neunundvierzigerstelle


ergibt, wrde die Ziffernfolge 123 dem Zahlenwert Sechsundsechzig entsprechen.
Diese berlegungen lassen sich auf beliebige Anzahlen von Ziffernsymbolen erweitern.
Werden B Ziffernsymbole verwendet, ergibt sich der codierte Zahlenwert aus der Formel:

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:

6610 = 1028 = 1237 = 10024 = 21103


In vielen Fllen wird jedoch auf den Index verzichtet, da aus dem Zusammenhang
bereits deutlich wird, welche Basis verwendet wird.
Einer der Vorteile der hier vorgestellten Stellenwertsysteme gegenber anderen Zahlensystemen ist die einfache Mglichkeit alle vier Grundrechenarten mit bersichtlichen
Regeln umzusetzen.
Eine Zahlendarstellung, die nicht auf Stellenwertigkeiten basiert, ist beispielsweise
das Rmische Zahlensystem. Eine Addition lsst sich in diesem System durch Zusammenziehen der beiden Operanden relativ einfach realisieren. Eine Multiplikation ist
dagegen deutlich aufwendiger als im dezimalen Stellenwertsystem.

2.2.2 Darstellung vorzeichenloser Zahlen inder Digitaltechnik


Zur Implementierung digitaler Systeme werden nur zwei Zustnde verwendet. Daher ist
es konsequent, genau zwei Ziffernsymbole zu verwenden. Es wird also die Basis 2 fr
die Darstellung von Zahlen gewhlt. Eine Zahl wird in diesem Dualsystem durch eine
Folge von Nullen und Einsen dargestellt und ergibt sich entsprechend der berlegungen
des vorangegangenen Abschnitts zu:

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.

2.2 Vorzeichenlose Zahlen

21

Um die Darstellung dualer Zahlen bersichtlicher zu gestalten, knnen mehrere Bits


einer Dualzahl zusammengefasst werden. So knnen zum Beispiel 3 Bits zu einer neuen
Ziffer kombiniert werden. Der Wert dieser neuen Ziffer kann 8 verschiedene Werte
annehmen. Man erhlt ein Zahlensystem zur Basis 8, das Oktalsystem.
In der Praxis wird sehr hufig eine Gruppierung von jeweils vier Bits vorgenommen.
Dieses ist insbesondere dann sinnvoll, wenn die Zahlenwerte mit Vielfachen von vier
Bits codiert werden, was bei allen heute blichen Rechnersystemen der Fall ist. Da sich
bei einer Kombination von vier Bits zu einer neuen Ziffer 16 mgliche Werte ergeben,
reichen die Ziffernsymbole des Dezimalsystems nicht mehr aus. Es werden neben den
Symbolen 0 bis 9 noch sechs weitere Symbole fr die Werte 10 bis 15 bentigt. Hierfr
werden die ersten Buchstaben des Alphabets verwendet. Auf diese Weise erhlt man das
sogenannte Hexadezimalsystem, ein Stellenwertsystem zur Basis 16.
Die verschiedenen Darstellungen von Zahlenwerten in unterschiedlichen Zahlensystemen fasst Tab.2.3 fr die Zahlen von 0 bis 1810 zusammen. Bei der Verwendung des Oktaloder des Hexadezimalsystems arbeitet die zugrundeliegende digitale Hardware weiterhin
mit einzelnen Bits, also im Dualzahlensystem. Die Kombination von Bits zu einer Oktaloder Hexadezimalziffer dient lediglich der kompakteren Darstellung der Zahlenwerte.

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

2 Digitale Codierung von Informationen

2.2.3 Umwandlung zwischen Zahlensystemen


Fr die Umrechnung eines Zahlenwertes aus einem System zur Basis B1 in ein System
zur Basis B2 kann direkt unter Verwendung der bereits vorgestellten Summenformel
erfolgen:

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.

2.2.4 Beispiele zur Umwandlung zwischen Zahlensystemen


Beispiel 1
Die Zahl 1100102 soll in eine Dezimalzahl umgewandelt werden. Hier kann die Summenformel direkt angewendet werden:

Z=

N1


zi 2i = 1 21 + 1 24 + 1 25 = 2 + 16 + 32 = 50

i=0

Die gesuchte Dezimalzahl ist 50.

2.2 Vorzeichenlose Zahlen

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:

83ED16 = 1000 0011 1110 11012


Beispiel 4
Die Dualzahl 10111110111011112 soll in eine Hexadezimal gewandelt werden. Nach der
Gruppierung der Dualzahl in Gruppen zu jeweils 4Bit ergibt sich das Ergebnis wiederum durch Ablesen aus Tab.2.3:

1011 1110 1110 11112 = B E E F16


Beispiel 5
Die Zahl 145056 soll in eine Oktalzahl umgewandelt werden. In diesem Fall bietet sich
ein Vorgehen in zwei Schritten an.
Zunchst wird die gegebene Zahl mithilfe der Summenformel in eine Dezimalzahl
umgewandelt 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

2 Digitale Codierung von Informationen


Iteration

Dividend

Divisor

Quotient

Rest

2345

293

293

36

36

2.2.5 Wertebereiche und Wortbreite


Fr alle Zahlendarstellungen gilt, dass mit einer konkreten Anzahl an Stellen nur eine
begrenzte Anzahl von Zahlenwerten dargestellt werden kann. Besitzt eine Dezimalzahl
beispielsweise drei Stellen, kann diese nur die Werte von 0 bis 999 annehmen. Mit einer
7-stelligen Dualzahl kann nur der Zahlenbereich von 0 bis 11111112=12710 dargestellt
werden.
Werden zwei Dualzahlen addiert, kann es (je nach Zahlenwerten) passieren, dass fr
die Summe mehr Bits als fr die beiden Operanden bentigt werden. So kann beispielsweise die Summe der Zahlen 11012 (1310) und 01012 (510) nicht mit 4Bit dargestellt
werden. Fr das Ergebnis 1810 werden 5Bit bentigt (1810=100102).
Generell gilt, dass bei der Addition von n binren Zahlen log2(n) zustzliche Bits fr
das Ergebnis bentigt werden. Addiert man beispielsweise 8 Zahlen mit der Wortbreite
6Bit, muss fr das Ergebnis eine Wortbreite von 6+log2(8)=9Bit vorgesehen werden.
Vermutlich finden Sie diese Erkenntnis nicht sonderlich bemerkenswert, da wir aus
dem tglichen Leben daran gewhnt sind, dass das Ergebnis einer Rechnung mehr Stellen als die Operanden bentigt. Zur Veranschaulichung dieses Sachverhalts wird bereits
in den ersten Jahren der Schulausbildung der Zahlenstrahl eingefhrt. Mit ihm lassen
sich unter anderem auch die Addition und Subtraktion bersichtlich grafisch darstellen.
Durchluft man den Zahlenstrahl von Null in Richtung positiver Zahlen, wird mit jedem
Schritt eine 1 addiert (Additionsrichtung). Durchlaufen des Zahlenstrahls in entgegengesetzter Richtung entspricht der Subtraktion (Subtraktionsrichtung). Je weiter man sich
auf dem Zahlenstrahl vom Wert Null entfernt, desto grer werden die Zahlen. An der
Grenze zu einer Zehnerpotenz (zum Beispiel 99) wird die Anzahl der Stellen zur Darstellung der Zahlen erhht (statt zwei Stellen fr 99 werden drei Stellen fr die Darstellung
des Wertes 100 verwendet).
Fr ein digitales System ist dieses Prinzip jedoch schwer umsetzbar. Ist ein System
einmal realisiert, steht nur eine feste Anzahl von Stellen in der Hardware zur Verfgung.
Das Prinzip ich nehme mir so viele Stellen wie ich brauche funktioniert in digitalen
Systemen daher nicht. Hieraus ergeben sich einige Konsequenzen fr die arithmetischen Komponenten eines digitalen Systems, die im folgenden Abschnitt nher erlutert
werden.

2.2 Vorzeichenlose Zahlen

25

2.2.6 Zahlendarstellung mit begrenzter Wortbreite


Stellen Sie sich vor, Sie sollen ein digitales System realisieren, dass intensiv von der
Addition Gebrauch macht. Fr die Implementierung der Addierer des Systems knnten
Sie sich entscheiden, dass immer die bentigte Anzahl von Ergebnisbits zur Verfgung
stehen soll, das Ergebnis also ein Bit mehr als die Operanden umfasst. Allerdings ist zu
beachten, dass die Wortbreite der Ergebnisse mit zunehmender Anzahl durchgefhrter
Additionen kontinuierlich wchst. Besitzen die Eingangswerte des Systems zum Beispiel
eine Wortbreite von 8bit, wrde das Ergebnis einer ersten Addition eine Wortbreite 9bit
bentigen. Werden die so berechneten Zwischenergebnisse mit einer weiteren Addition
weiterverarbeitet, sind bereits 10bit fr diese Ergebnisse erforderlich.
Selbstverstndlich kann man ein digitales System realisieren, das beispielsweise vier
8-Bit-Zahlen addieren kann und ein Ergebnis mit der Wortbreite 10bit liefert. Aber stellen Sie sich vor, Sie sollen eine arithmetische Komponente fr ein Rechnersystem entwerfen. Sie wissen nicht welches Programm spter auf dem Rechner laufen wird und
welche Wortbreiten fr Operanden und Ergebnisse sinnvoll sind. Darber hinaus besitzen die Speicherstellen eines Rechners, in denen auch Zwischenergebnisse abgelegt
werden, feste Wortbreiten (meist Vielfache eines Bytes). Daher verwenden die arithmetischen Einheiten eines Rechners meist identische Operanden- und Ergebniswortbreiten. Ergibt sich bei einer Berechnung ein Ergebnis, das eine grere Wortbreite als die
implementierte Ergebniswortbreite bentigt, werden die fhrenden Bits des Ergebnisses
einfach weggelassen. Die Ausgabe der arithmetischen Einheit wre in diesem Fall also
nicht korrekt. Nehmen wir an, dass mithilfe eines Addierers die Zahlen 10112=1110
und 10012=910 addiert werden. Es steht ein Addierer mit einer Wortbreite von 4bit zur
Verfgung. Der Addierer kann also Operanden und Ergebnisse im Bereich von 0 bis 15
verarbeiten bzw. ausgeben. Das korrekte Ergebnis der Summe aus 11 und 9 ist jedoch 20
und berschreitet damit den mglichen Zahlenbereich der Ergebnisse des 4-Bit-Addierers. Statt des korrekten Ergebnisses 101002 wird der Addierer fhrende 1 verwerfen und
01002=410 ausgegeben.
Was bedeutet die begrenzte Wortbreite fr die grafische Darstellung von Zahlen? Am Beispiel eines 4-Bit-Addierers lsst sich dies anschaulich erlutern: Startet
man bei 0 und addiert sukzessive eine 1, durchluft das Ergebnis die Zahlen von 0 bis
1510=11112. Bei der Addition von 1510 und 1 erreicht man wieder den Ausgangspunkt:
Das vom Addierer ausgegebene Ergebnis ist 00002, da die Zahl 1610=100002 nicht mit
4Bit dargestellt werden kann.
Die grafische Darstellung dieses Verhaltens kann also kein Zahlenstrahl sein. Vielmehr ergibt sich ein Zahlenkreis, der bei Addition im Uhrzeigersinn durchlaufen wird.
Entsprechend wird der Kreis bei der Subtraktion entgegen dem Uhrzeigersinn durchlaufen (Abb.2.1).

26

2 Digitale Codierung von Informationen

Abb.2.1 Zahlenkreis fr
positive Zahlen mit einer
Wortbreite von 4bit





















6XEWUDNWLRQV
ULFKWXQJ




$GGLWLRQV
ULFKWXQJ























2.2.7 Binre vorzeichenlose Addition


Die Regeln zur Addition und Subtraktion im Dualsystem sind mit denen des Dezimalsystems vergleichbar. Beide Operationen werden stellenweise, beginnend mit der niederwertigsten Stelle (die Stelle mit dem niedrigsten Stellengewicht), durchgefhrt. Bei
dieser Operation kann wie im Dezimalsystem ein berlauf auftreten, welcher entsprechend zu bercksichtigen ist. Der wesentliche Unterschied zwischen dem Dezimal- und
dem Dualsystem ist, dass der 10er-bergang des Dezimalsystems einem 2er-bergang
im Dualsystem entspricht. Fr die Addition zweier Dualzahlen bedeutet dies, dass ein
bertrag in der nchsthheren Stelle zu bercksichtigen ist, wenn die Summe der Ziffern den Wert 1 berschreitet. Es ergeben sich 8 mgliche Flle fr die einstellige binre
Addition, welche in Tab.2.6 zusammengefasst sind.
Zur Verdeutlichung ein Beispiel: Die beiden binren Zahlen 0011 und 1001 sollen
addiert werden. Die Addition der beiden niederwertigsten Stellen ergibt den Wert 2. Dieses Ergebnis wird durch eine 1 in der nchsthheren Stelle (bertrag) und eine 0 in der
aktuellen Stelle dargestellt (vgl. Abb.2.2). Unter Bercksichtigung des bertrags und
der zwei Operandenbits der nchsthheren Stelle ergibt sich wiederum ein bertrag 1
und ein Ergebnisbit mit dem Wert 0. Dieses Verfahren wird fr alle Operandenbits durchgefhrt und man erhlt ein Ergebnis mit der Wortbreite 4bit.
berlaufsdetektion bei der vorzeichenlosen Addition
Variante 1: Betrachtung des hchstwertigen bertragsbits
Ist das hchstwertige bertragsbit bei der Addition zweier vorzeichenloser Zahlen 0,
ist das Ergebnis korrekt. Andernfalls ist bei der Addition ein berlauf aufgetreten und
das ausgegebene Ergebnis nicht korrekt.

2.2 Vorzeichenlose Zahlen


Tab.2.6bersicht ber
die einstellige binre
Addition

27
Eingabewerte
Ausgabewerte
1. Summand 2. Summand bertragsbit Summenbit bertragsbit
0

Abb.2.2 Beispiel fr die


binre Addition

+
bertrag:

0011
1001
0011
1100

Variante 2: Betrachtung der hchstwertigen Bits der Operanden und des


Ergebnisses
Sind beide hchstwertigen Bits der Operanden identisch, tritt bei der Addition ein
berlauf auf, wenn diese Bits gleich 1 sind. Sind die beiden hchstwertigen Bits der
Operanden unterschiedlich, ist ein berlauf aufgetreten, wenn das hchstwertige Ergebnisbit gleich 0 ist. In allen anderen Fllen ist kein berlauf aufgetreten.

2.2.8 Binre vorzeichenlose Subtraktion


Bei der binren Subtraktion knnen hnliche Rechenregeln angewandt werden wie sie
aus dem Dezimalsystem bekannt sind. Sukzessive werden die einzelnen Bits des Minuenden und Subtrahenden beginnend mit dem niederwertigsten Bit betrachtet. Es wird die
Differenz aus dem Minuendenbit und dem Subtrahendenbit bestimmt. Sofern ein bertrag zu bercksichtigen ist, wird dieser mit negativem Vorzeichen einbezogen. Es ergeben sich wie bei der Addition 8 mgliche Flle (Tab.2.7)
Soll beispielsweise die binre Zahl 0111 von der Zahl 1100 subtrahiert werden, ergibt
sich die in Abb.2.3 dargestellte Rechnung. Die Subtraktion der beiden niederwertigsten
Stellen ergibt den Wert 1. Dieses Ergebnis wird durch einen (negativ bewerteten) bertrag mit dem Wert 1 in der nchsthheren Stelle und einem Ergebnisbit mit dem Wert
1 in der aktuellen Stelle dargestellt. Unter Bercksichtigung des bertrags und der zwei
Operandenbits der nchsthheren Stelle ergibt sich ein bertrag 1 und ein Ergebnisbit
mit dem Wert 0. Dieses Verfahren wird fr alle Bits der Operanden durchgefhrt und so
die Differenz mit der Wortbreite 4bit bestimmt.

28
Tab.2.7bersicht ber die
einstellige binre Subtraktion

Abb.2.3 Beispiel fr die


binre Subtraktion

2 Digitale Codierung von Informationen


Eingabewerte
Minuend
Subtrahend

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.

2.2 Vorzeichenlose Zahlen

29

2.2.9 Binre vorzeichenlose Multiplikation und Division


Fr die Addition und Subtraktion im Binrsystem gelten vergleichbare Regeln wie im
Dezimalsystem. Es ist lediglich zu beachten, dass der 10er-bergang des Dezimalsystems
einem 2er-bergang im Binrsystem entspricht. Unter Beachtung dieser Besonderheit lassen sich auch Vorgehensweisen zur Durchfhrung der binren Multiplikation oder Division formulieren, die weitgehend den bekannten Regeln des Dezimalsystems entsprechen.
Fr die Durchfhrung der Multiplikation wird der Multiplikator sukzessive mit den
einzelnen Stellen des Multiplikanden multipliziert. Da die Ziffern des Multiplikanden
nur die Werte 0 oder 1 annehmen knnen, ist das Ergebnis dieser stellenweisen Multiplikation also entweder Null oder identisch mit dem Multiplikator.
Schreibt man die einzelnen Produkte entsprechend dem Stellengewicht des verwendeten Multiplikandenbits untereinander und summiert anschlieend die gebildeten Produkte erhlt man als Ergebnis das Produkt der beiden Operanden.
In vielen Fllen mchte man mgliche berlufe bei der Multiplikation vermeiden
und whlt fr die Produktwortbreite einen Wert, der sich aus der Summe der Wortbreiten
des Multiplikanden und des Multiplikators ergibt.
Die binre Multiplikation ist fr die Zahlen 0101 und 1011 in Abb.2.4 dargestellt.
Ebenso kann die Division der Grundschulmathematik auf die binre Division bertragen werden. Hierbei wird der Divisor testweise von einem Teil des Dividenden subtrahiert. Tritt bei der Subtraktion kein berlauf auf, ergibt sich ein Quotientenbit mit dem
Wert 1 und das Ergebnis der Subtraktion wird fr weitere Berechnungen weiterverwendet.
Ist dagegen ein berlauf aufgetreten, ist das berechnete Quotientenbit 0 und das Ergebnis
der Subtraktion wird verworfen. Es wird mit dem Minuenden weiter gerechnet. Vor der
nachfolgenden Subtraktion zur Bestimmung eines weiteren Quotientenbits wird ein weiteres Bit des Dividenden an die berechnete Differenz (kein berlauf) bzw. den Minuenden (bei aufgetretenem berlauf) angefgt. Auf diese Weise wird sukzessive der gesamte
Dividend durchlaufen. Das Ergebnis der letzten Subtraktion ergibt den Rest der Division.
Es ist zu beachten, dass die fhrenden Nullen des Divisors nicht bercksichtigt werden.
Die Vorgehensweise fr eine binre Addition wird in fr einen Dividenden mit dem
Wert 01010101 und einem Divisor mit dem 1011 verdeutlicht (Abb.2.5).

Abb.2.4 Beispiel fr die


binre Multiplikation

0101 * 1011
+
+
+
+

0101
0101
0000
0101
0001000
00110111

30

2 Digitale Codierung von Informationen







  













Abb.2.5Beispiel fr die binre Division

Die vorgestellten Rechenvorschriften knnen als Basis fr die Implementierung digitaler


Arithmetikschaltungen verwendet werden. In der Praxis kommen teilweise auch modifizierte
Verfahren zum Einsatz, die Vorteile im Hinblick auf die Rechenzeit oder den Schaltungsaufwand bieten. Die Schaltungsstruktur eines Addierers wird in Kapitel6 vorgestellt.

2.3 Vorzeichenbehaftete Zahlen


In vielen Fllen ist die ausschlieliche Verwendung vorzeichenloser Zahlen nicht ausreichend
und es mssen sowohl positive als auch negative Zahlen verwendet werden. Hieraus ergibt
sich zwangslufig die Frage nach einer geeigneten Codierung vorzeichenbehafteter Zahlen.
Eine naheliegende Idee wre es, die Zahlendarstellung des tglichen Lebens auch
auf Dualzahlen anzuwenden. blicherweise kennzeichnen wir Zahlenwerte mit einem
vorangestellten Vorzeichen, einem Plus- oder Minuszeichen. Der Zahlenwert nach dem
Vorzeichen entspricht dem Betrag der Zahl. Diese Form der Zahlendarstellung wird als
Vorzeichen-Betrag-Darstellung bezeichnet. Die am weitesten verbreitete Darstellungsform vorzeichenbehafteter Zahlen ist die sogenannte Zweierkomplement-Darstellung, die
in Abschn.2.3.2 vorgestellt wird.

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

2.3 Vorzeichenbehaftete Zahlen

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

2 Digitale Codierung von Informationen

Tab.2.8Fallunterscheidung fr die Addition in Vorzeichen-Betrag-Darstellung


Vorzeichenbit der
Erforderliche Schritte
Operanden
1. Summand 2. Summand Operanden
Ausgefhrte
vertauschen
Operation

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.

2.3 Vorzeichenbehaftete Zahlen

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.

2.3.2.1Negieren einer Zweierkomplement-Zahl


Mchte man eine vorzeichenbehaftete Zahl in Zweierkomplement-Darstellung negieren,
kann man die vorgestellte Summenformel verwenden um den Wert der Ausgangszahl zu
bestimmen. Anschlieend wird das Vorzeichen der Zahl invertiert und wiederum mithilfe
der Summenformeln die Codierung der gesuchten Zahl bestimmt. Dieses Vorgehen ist
jedoch relativ umstndlich und fehlertrchtig.
Aufgrund der Eigenschaften der Zweierkomplement-Zahlen lsst sich glcklicherweise ein einfacheres zweischrittiges Verfahren definieren: Zunchst werden alle Stellen
der Ausgangszahl invertiert. Anschlieend wird dieses Zwischenergebnis inkrementiert
(= eine 1 addiert). Das Ergebnis stellt die entsprechende negierte Zahl dar.
Hierzu ein Beispiel: Die 6bit breite Zweierkomplement-Zahl 011101 soll negiert
werden.

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

2 Digitale Codierung von Informationen

NEG(011101) = 011101 + 1 = 100010 + 1 = 100011


Mithilfe der Summenformel fr Zweierkomplement-Zahlen kann das Ergebnis berprft
werden:

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.

2.3.3 Addition und Subtraktion inZweierkomplement-Darstellung


Fr die Bestimmung der Ergebnisbits einer Addition oder Subtraktion von Zahlen in
Zweierkomplement-Darstellung gilt das gleiche Vorgehen wie fr vorzeichenlose Zahlen. Dies bedeutet unter anderem, dass eine Additions- bzw. Subtraktionsschaltung fr
vorzeichenlose Zahlen unverndert auch fr Zweierkomplement-Zahlen eingesetzt werden kann. Dieses ist insbesondere dann vorteilhaft, wenn in einem digitalen System
sowohl vorzeichenlose als auch vorzeichenbehaftete Zahlen verarbeitet werden, wie dies
zum Beispiel in digitalen Rechnern der Fall ist.
Fr die Bestimmung von berlufen und Unterlufen bei der ZweierkomplementAddition bzw. -Subtraktion gelten andere Regeln als bei vorzeichenlosen Zahlen. Eine
berschreitung des darstellbaren Zahlenbereichs kann ebenfalls durch die Betrachtung
der hchstwertigen Bits der Operanden und des Ergebnisses detektiert werden. Fr die
Addition gilt beispielsweise, dass nur dann ein berlauf oder Unterlauf auftreten kann,
wenn beide Summanden das gleiche Vorzeichen besitzen. Besitzen beispielsweise beide
Operanden ein positives Vorzeichen (reprsentiert durch eine fhrende Null), so muss
auch die Summe ein positives Vorzeichen besitzen. Besitzt das Ergebnis dagegen eine
fhrende Eins und reprsentiert somit einen negativen Zahlenwert, ist dieses offenbar
falsche Ergebnis auf einen berlauf zurckzufhren. Entsprechendes gilt fr den Fall der
Addition zweier negativer Zahlen. Die berlegungen fr die Addition lassen sich entsprechend fr die Subtraktion anstellen. Hierbei gilt, dass eine Bereichsberschreitung
nur dann auftritt, wenn die beiden Operanden unterschiedliche Vorzeichen besitzen.
ber-/Unterlaufsdetektion bei der vorzeichenbehafteten Addition
Sind beide hchstwertigen Bits der Operanden identisch und ist das hchstwertige Ergebnisbit ungleich der hchstwertigen Operandenbits, ist ein berlauf bzw.

2.3 Vorzeichenbehaftete Zahlen

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.

2.3.4 Multiplikation und Division inZweierkomplementDarstellung


Fr die Multiplikation und die Division von Zweierkomplement-Zahlen bietet sich als
einfachste Vorgehensweise ein dreischrittiges Verfahren an. Hierbei werden zunchst die
Betrge der Operanden berechnet und anschlieend die eigentliche Operation mit vorzeichenlosen Zahlen durchgefhrt. Im letzten Schritt wird gegebenenfalls das Ergebnis
durch Negierung korrigiert, falls die Operanden unterschiedliche Vorzeichen besitzen.
Diese Korrektur muss fr das Produkt bei der Multiplikation oder dem Quotienten bei
der Division ausgefhrt werden. Fr die Korrektur des Restes einer binren Zweierkomplement-Division wird lediglich das Vorzeichen des Dividenden bercksichtigt: Ist der
Dividend negativ, ist eine Korrektur des Restes durch Negierung vorzunehmen.
Alternativ zu der oben beschriebenen Vorgehensweise kann beispielsweise fr Multiplikation eine Vorgehensweise gewhlt werden, die bercksichtigt, dass das hchstwertige Bit der Operanden negativ zu gewichten ist. Unter Bercksichtigung dieser
Eigenschaft der Zweierkomplement-Zahlen kann die Multiplikation quivalent zur
Multiplikation vorzeichenloser Zahlen ausgefhrt werden. Hierbei ergeben sich in den
Teilprodukten einzelne negativ zu bewertende Einsen, die bei der Summation der Teilprodukte negativ zu bercksichtigen sind. Das nachfolgende Beispiel verdeutlicht die
Vorgehensweise, wobei negativ zu bercksichtigende Bits kursiv dargestellt sind.
Sollen zum Beispiel die beiden vorzeichenbehafteten Zahlen 1101 und 1001 multipliziert werden, ergbe sich das in Abb.2.8 dargestellte Vorgehen.
Abb.2.8 Beispiel fr
die ZweierkomplementMultiplikation

 







36

2 Digitale Codierung von Informationen

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

2.3.6 Darstellbare Zahlenbereiche


Hufig ergibt sich beim Entwurf eines digitalen Systems die Frage, welche Wortbreite
fr die Darstellung von Zahlenwerten verwendet werden muss. Um Aufwand zu sparen mchte man natrlich so wenige Bits wie mglich verwenden. Andererseits muss
die Wortbreite aber ausreichend sein, um den gewnschten Zahlenbereich abzudecken.
Tab.2.9 fast den darstellbaren Zahlenbereich fr Zahlen mit einer Wortbreite von N bit
zusammen:
Tab.2.9Darstellbarer
Zahlenbereich in Abhngigkeit
der verwendeten Wortbreite
N bit

Zahlendarstellung
Vorzeichenlos
Vorzeichen-Betrag
Zweierkomplement
Bias (B=2N11)

Kleinster Wert
0
2N1+1

2N1

2N1+1

Grter Wert
2N1
2N11
2N11
2N1

2.4 Reelle Zahlen

37

2.4 Reelle Zahlen


In den vorangegangenen Abschnitten wurde die binre Darstellung ganzer Zahlen
betrachtet. Viele Problemstellungen der Digitaltechnik lassen sich mit ausreichender Genauigkeit mithilfe ganzer Zahlen lsen. Es gibt aber auch Anwendungen, die
den Einsatz reeller Zahlen erfordern. Im Folgenden wird daher eine bersicht ber die
Mglichkeiten zur binren Darstellung reeller Zahlen gegeben, wobei die Varianten Festkomma-Darstellung und Gleitkomma-Darstellung unterschieden werden.

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

fr vorzeichenlose Zahlen bzw.

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

2 Digitale Codierung von Informationen

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

Abb.2.9 Beispiel fr die


Festkomma-Addition





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.4.3 Reelle Zahlen indigitalen Systemen


In der Praxis steht man hufig vor der Problemstellung einen Algorithmus entwerfen zu
mssen, welcher im Anschluss in einem digitalen System in Software oder Hardware
implementiert werden soll. Fr die Entwicklung eines Algorithmus mag es bequem
erscheinen, wenn man sich ber die Wortbreiten der verwendeten Zahlen mglichst
wenig Gedanken machen muss. Also ist es naheliegend alle Berechnungen mit einer
mglichst flexiblen Zahlendarstellung, wie zum Beispiel einer Gleitkomma-Darstellung
mit doppelter Genauigkeit, durchzufhren. Soll der Algorithmus spter in Form einer
digitalen Hardware realisiert werden, wird man allerdings auf Probleme stoen, da die
Hardware-Umsetzung von Berechnungen in Gleitkomma-Darstellung relativ aufwendig ist. Kann dieser Aufwand, zum Beispiel aus Kostengrnden, nicht betrieben werden, mssen die algorithmischen Vorgaben in Gleitkomma-Darstellung in eine weniger
komplexe ganzzahlige Darstellung umgewandelt werden. Hierbei werden mglicherweise wichtige Eigenschaften des entwickelten Algorithmus verndert, sodass nicht ohne
Weiteres gewhrleistet werden kann, dass das finale Produkt den ursprnglich ins Auge
gefassten Qualittsvorgaben entspricht.
In der Praxis werden daher frhzeitig die erforderlichen Wortbreiten ermittelt. Auf
den Einsatz einer Gleitkomma-Darstellung wird verzichtet. Dies gilt insbesondere dann,
wenn ein Algorithmus in digitale Hardware berfhrt oder in Software auf einem preisgnstigen Rechnersystem, wie zum Beispiel einem einfachen Mikrocontroller, ausgefhrt werden soll.

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 Digitale Codierung von Informationen

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

2 Digitale Codierung von Informationen

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.

Abb.2.11 Beispiel des


zeitlichen Verlaufs der Ausgabe
eines digitalen Thermometers
mit dualer Codierung

ts3
ts2
ts1
ts0
TSdual

8
t

2.5Codes
Tab.2.11Gray-Code fr eine
Wortbreite von 4bit

Abb.2.12 Beispiel des


zeitlichen Verlaufs der Ausgabe
eines digitalen Thermometers
mit Gray-Codierung

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

2 Digitale Codierung von Informationen


Codierter Wert

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 %

ACK SYN &

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

2 Digitale Codierung von Informationen

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

Code fr die Ansteuerung der Segmente


a
b
c
d
e
f

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

2 Digitale Codierung von Informationen

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

In Kapitel 1 wurden bereits die wichtigsten Grundelemente digitaler Systeme vorgestellt.


Eine digitale Hardware verarbeitet Informationen, indem die Eingangssignale zum Beispiel mithilfe von logischen Grundelementen, den Gattern, verknpft werden. Wie kann
man nun festlegen wie die Gatter verschaltet werden sollen, um die Ausgangssignale
einer Schaltung zu berechnen?
Mglicherweise kennen Sie Schaltplne fr elektrische Gerte. Durch grafische
Symbole werden die Komponenten des Gertes beschrieben und die elektrischen Verbindungen werden durch Striche dargestellt. Eine naheliegende Mglichkeit wre es,
diese grafische Darstellung auch zur Spezifikation einer digitalen Schaltung zu verwenden. Die elektrisch zu verbindenden Komponenten knnten dann zum Beispiel logische
Grundelemente sein. Man kann hierbei auch eine hierarchische Darstellung whlen,
indem einzelne Elemente zu Blcken zusammenfasst werden, die dann in anderen Teilen
des Schaltplans als Module eingesetzt werden. Diese Form der Schaltungsbeschreibung
wurde tatschlich in den Anfngen der Digitaltechnik eingesetzt. Allerdings durchlief die
Digitaltechnik von Beginn an eine rasante Entwicklung. Bis heute verdoppelt sich etwa
alle zwei Jahre die Anzahl der Schaltfunktionen, die sich in einer einzelnen elektronischen Komponente (einem Chip) integrieren lsst. Dies bedeutet unter anderem, dass
die Komplexitt digitaler Systeme kontinuierlich zunimmt. Mit den Fortschritten der
Digitaltechnik wurden die Schaltplne zunehmend komplexer und man suchte etwa ab
Mitte der 1980er-Jahre nach Alternativen zur Schaltplaneingabe.
Als Lsung wurden die sogenannten Hardwarebeschreibungssprachen (engl. Hardware Description Language, HDL) erfunden. Diese Sprachen ermglichen es, die Funktion einer digitalen Schaltung, hnlich wie ein Programm fr einen Rechner, in textueller
Form zu beschreiben. Im Gegensatz zu den blichen Software-Programmiersprachen wie
C/C++ oder Java, besitzen Hardwarebeschreibungssprachen Sprachelemente, die besonders fr die Beschreibung digitaler Hardware geeignet sind. In der Praxis werden zwei
Springer-Verlag GmbH Deutschland 2016
W. Gehrke et al., Digitaltechnik, Springer-Lehrbuch,
DOI10.1007/978-3-662-49731-9_3

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.

3.1 Designmethodik im berblick


Der Ausgangspunkt einer HDL-basierten Beschreibung sind eine oder mehrere VHDLDateien, welche die Funktion der spteren digitalen Hardware festlegen. Wie bei der
Erstellung von Software handelt es sich um Textdateien, die eine fr den Menschen lesbare Beschreibung der gewnschten Module enthalten.
Nicht jeder syntaktisch richtige VHDL-Code kann auch in Hardware berfhrt werden. VHDL bietet zum Beispiel Sprachkonstrukte um Dateien einzulesen oder Texte
auszugeben. Diese Sprachelemente knnen nicht in Hardwaremodule bersetzt werden.
Der Compiler, welcher aus den VHDL-Beschreibungen Hardware erzeugt, wrde entsprechende Warn- bzw. Fehlermeldungen ausgeben. Da der bersetzungsprozess in der
Regel als Synthese bezeichnet wird, spricht man auch von synthesefhigem oder synthetisierbarem VHDL-Code.
Die nicht-synthetisierbaren Sprachelemente werden vielfach in sogenannten Testbenches eingesetzt. Als eine Testbench wird VHDL-Code bezeichnet, der zur berprfung
der Funktion des synthetisierten Codes geschrieben wurde.
Die VHDL-Dateien werden mithilfe eines sogenannten Simulators auf einem PC ausgefhrt. Der Simulator ermglicht es, den zeitlichen Verlauf aller Signale zu visualisieren oder in Dateien auf dem PC abzulegen.
Fr die Simulation werden die zu testenden VHDL-Module als Komponenten in
den Testbench-Code eingefgt. Der Code der Testbench legt wechselnde Eingangssignale (im Fachjargon Stimuli) an die Eingnge der zu prfende Komponente an. Das
Konzept einer VHDL-Testbench, in die eine zu prfende VHDL-Komponente eingesetzt
wird, ist in Abb.3.1 dargestellt.
Der zeitliche Verlauf von Eingangs- und Ausgangssignalen als auch von internen
Signalen einer VHDL-Beschreibung kann whrend der Simulation mithilfe sogenannter Waveform-Viewer visualisiert werden. Die grafische Darstellung der Signalverlufe
gibt hufig wichtige Hinweise zur Lokalisierung eines Fehlers und ist ein nicht wegzudenkendes Handwerkszeug der VHDL-Entwicklung. Ein Beispiel fr die Ausgabe eines
Waveform Viewers ist in Abb.3.2 dargestellt. In diesem Beispiel wird das Ergebnis der
UND-Verknpfung von a und b dem Signal q zugewiesen.

3.1 Designmethodik im berblick

53
Testbench
(VHDL)

Testsignal
Generator

Prfling
Stimuli

(VHDL)

Reaktion

Auswertung
und
Ergebnisanzeige

Abb.3.1Verifikation einer Komponente mithilfe einer VHDL-Testbench

Abb.3.2Waveform Viewer

In Abb.3.3 ist der Ablauf eines VHDL-basierten Entwurfsprozesses dargestellt: Der


Ausgangspunkt sind VHDL-Dateien, welche die gewnschte Funktion der digitalen
Hardware beschreiben. Darber hinaus werden Testbench-Dateien erstellt. Mithilfe der
Simulation der VHDL-Hardware-Module in Kombination mit den Testbench-Dateien
wird die korrekte Funktion der Hardware-Beschreibung berprft und gegebenenfalls
entdecktes Fehlverhalten korrigiert. Anschlieend kann die Synthese, also die berfhrung der VHDL-Hardware-Beschreibungen in digitale Hardware, erfolgen. Auch nach
diesem Schritt knnen nderungen am VHDL-Code erforderlich werden um beispielsweise den bentigten Realisierungsaufwand zu reduzieren oder das zeitliche Verhalten
des Systems zu verbessern. Der Entwurfsprozess ist also ein iterativer Prozess, bei dem
(insbesondere bei komplexen Systemen) die Schritte Simulation und Synthese mehrfach
durchlaufen werden.

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

3.2 Grundstruktur eines VHDL-Moduls


Ein VHDL-Modul reprsentiert meistens einen Teil eines greren Systems und wird in
Form einer Textdatei beschrieben. In diesem Abschnitt werden einige grundlegende Konzepte und Sprachelemente vorgestellt, die bei einem VHDL-basierten Hardwareentwurf
verwendet werden.

3.2 Grundstruktur eines VHDL-Moduls

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

In diesem Beispiel wird der VHDL-Compiler vcom aufgerufen. Mithilfe des


Schalters -work wird der Name der zu verwendenden Bibliothek angegeben in diesem Beispiel my_work_lib.
Drei Bibliotheken sind besonders wichtig: work, std und ieee.
Der Bibliotheksname work ist ein Synonym fr die jeweils aktuelle Arbeitsbibliothek, in der die Ergebnisse des bersetzungsvorgangs abgelegt werden. Es ist zum Beispiel mglich, alle VHDL-Elemente in einer Bibliothek my_work_lib abzulegen und die
bereits bersetzten Elemente wahlweise ber den Namen work oder my_work_lib zu
referenzieren. Da work ein vordefinierter symbolischer Name fr die aktuelle Arbeitsbibliothek ist, sollte work nicht als Bibliotheksname verwendet werden. Andernfalls htte
die Referenzierung der Bibliothek work zwei mgliche Bedeutungen: Es kann sich um
die aktuelle Arbeitsbibliothek (welche einen beliebigen Namen besitzen kann) oder um
die Bibliothek mit dem Namen work handeln.
In der Bibliothek std sind einige grundlegende Sprachkonstrukte und Datentypen definiert. Darber hinaus enthlt die Bibliothek std auch Funktionen zur Ein- und Ausgabe.
Die Bibliothek ieee enthlt wichtige und hufig verwendete Datentypen sowie viele
hilfreiche Funktionen. Die wichtigsten Elemente dieser Bibliothek werden im Verlauf
dieses Kapitels vorgestellt und in Kapitel 8 weiter vertieft.
Sollen Bibliotheken, die nicht bereits im VHDL-Standard vordefiniert sind (dies ist
fr die Bibliotheken work und std der Fall), mssen sie vor ihrer Verwendung mithilfe
einer Library-Anweisung bekanntgemacht werden. Anschlieend wird mithilfe einer
Use-Anweisung ausgewhlt, welche Teile der Bibliothek in dem nachfolgenden VHDLCode verwendet werden sollen. Hinter dem Schlsselwort use folgt zunchst die Angabe
der gewnschten Bibliothek und dann, durch Punkte abgetrennt, das zu verwendenden
Paket der Bibliothek sowie die Elemente aus dem jeweiligen Paket. Meist ist eine explizite Auswahl einzelner Elemente nicht erforderlich: Man whlt mit dem Schlsselwort

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;

3.2.2 Entity und Architecture


VHDL-Beschreibungen entsprechen einzelnen Hardware-Komponenten. Damit eine solche Komponente vollstndig beschrieben ist, mssen vor allem zwei Teile der Beschreibung erstellt werden:
1. Die ueren Anschlsse der Komponente: Welche Signale werden in das Modul hineingefhrt und welche kommen heraus? Welche Wortbreite haben die Signale?
2. Die Funktion des Moduls: Nach welcher digitalen Rechenvorschrift werden die Ausgangssignale aus den Eingangssignalen berechnet?
Die Beschreibung der Sicht von auen wird als Entity und das Innenleben als
Architecture bezeichnet. Diese beiden Teile eines VHDL-Moduls werden hufig in
einer gemeinsamen Textdatei abgelegt. Die Beschreibung einer Entity beginnt mit dem
VHDL-Schlsselwort entity. Der Name des Moduls wird durch die Schlsselwrter entity
und is eingerahmt. Das Ende der Entity-Beschreibung wird durch end gekennzeichnet. Zwischen dem Beginn und dem Ende der Entity werden die von auen sichtbaren
Eigenschaften des Moduls definiert. Anschlsse fr Eingangs- und Ausgangssignale, im
englischen Sprachgebrauch als Ports bezeichnet, werden in Form einer Liste angegeben,
welche mit dem Schlsselwort port eingeleitet wird. Der eigentliche Inhalt der Portliste
wird in Klammern angegeben, wobei die einzelnen Listenelemente durch ein Semikolon
voneinander getrennt werden. Fr jeden Port wird ein Name angegeben und festgelegt,
ob es sich um einen Eingang oder einen Ausgang handelt (Schlsselwrter in und out).

3.2 Grundstruktur eines VHDL-Moduls

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

Fr die Erstellung von VHDL-Code ist ein kontextsensitiver Editor empfehlenswert,


der Schlsselwrter automatisch farblich hervorhebt. Damit kann zum Beispiel erkannt
werden, ob versehentlich ein Schlsselwort als Bezeichnung eines VHDL-Elements verwendet wird.

3.3 Grundlegende Datentypen


Genauso wie Programmiersprachen zur Entwicklung von Software, stellt VHDL verschiedene Datentypen zur Verfgung. In diesem Abschnitt werden die wichtigsten
Datentypen vorgestellt.

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.

3.3 Grundlegende Datentypen

59

Das Syntheseprogramm, das die VHDL-Beschreibung in Hardware berfhrt, wird


fr Integer-Werte zunchst eine Wortbreite von 32 Bit annehmen unabhngig davon,
ob diese Wortbreite fr die zu verarbeitenden Daten wirklich bentigt wird. Es besteht
daher die Gefahr, dass das Syntheseprogramm nicht erkennt, dass die in VHDL beschriebene Aufgabe auch mit einer geringeren Wortbreite lsbar ist und letztlich eine Schaltung fr 32 Bit realisiert, obwohl auch eine weniger komplexe Schaltung ausreichen
wrde. Um diese Gefahr zu vermeiden knnen die im Folgenden vorgestellten Datentypen std_logic_vector, signed und unsigned eingesetzt werden. Sie zeichnen sich dadurch
aus, dass man die zu verwendende Wortbreite explizit angibt.

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

Dont-Care (fr Eingnge: Wert ist beliebig)

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:

3.3 Grundlegende Datentypen

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.

3.3.4 Signed und Unsigned


Der Datentyp std_logic_vector ist eine Zusammenfassung einzelner Bits zu einem Vektor. Welche Information durch den Bitvektor dargestellt wird, ist durch den Datentyp

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.

3.3 Grundlegende Datentypen

63

Konstanten vom Datentyp std_logic_vector oder signed bzw. unsigned werden in


Anfhrungszeichen in binrer Form angeben. Mit einem vorangestellten x lassen sich die
Werte auch in hexadezimaler Schreibweise angeben, wobei jede Hexadezimalstelle exakt
4 bit reprsentiert.
Die Zuweisung eines std_logic-Wertes erfolgt in einfachen (halben) Anfhrungszeichen.
Die folgenden Beispiele verdeutlichen die Mglichkeiten zur Angabe von Konstanten.
-- Exemplarische Konstantenzuweisungen
i <= 1234;-- integer, dezimal
i <= 16#ABC#;-- integer, hexadezimal
i <= 8#175#;-- integer, oktal
i <= 2#01010111#; -- integer, dual
sv8 <= "01000111";-- std_logic_vector
sv8 <= "0UUX0111";-- std_logic_vector
sv8 <= x"EF";-- std_logic_vector, hexadezimal
s <= '1';-- std_logic
b <= true;-- boolean

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');

3.3.6 Umwandlung zwischen Datentypen


Fr die Umwandlung zwischen den Datentypen integer, signed/unsigned und std_logic_
vector stehen verschiedene Funktionen zur Verfgung. So lsst sich beispielsweise ein
Unsigned- bzw. Signed-Wert mit der Funktion to_integer() in einen Integer-Wert umwandeln. Fr die umgekehrte Typumwandlung steht die Funktion to_unsigned() beziehungsweise to_signed() zur Verfgung. Fr eine Umwandlung vom Datentyp unsigned bzw.
signed in den Datentyp std_logic_vector kann die Funktion std_logic_vector() verwendet
werden. Eine Umwandlung in die Datentypen signed und unsigned kann entsprechend
mit den Funktionen signed() und unsigned() erfolgen.
In Abb.3.4 sind die Funktionen zur Umwandlung zwischen den Datentypen std_
logic_vector, signed/unsigned und integer grafisch dargestellt.

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

Abb.3.4Umwandlung zwischen wichtigen VHDL-Datentypen

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.3.7 Datentyp Bit


In VHDL existiert auch der Datentyp bit. Objekte dieses Typs knnen die Werte 0 bzw.
1 annehmen, was auf den ersten Blick ausreichend erscheinen mag. In der Praxis besteht
jedoch hufig der Wunsch einem Signal noch weitere Zustnde, auer 0 oder 1, zuweisen zu knnen. Ein typisches Beispiel hierfr ist der Zustand eines Signals nach dem
Einschalten eines Systems. Ist es 0 oder ist es 1? Mglicherweise fllt das Signal auf
einen zuflligen Initialwert, es ist also nach dem Einschalten manchmal 0 und manchmal 1. Der Einschaltzustand des Signals ist also weder eindeutig 0 noch eindeutig 1,

3.4Operatoren

65

sondern undefiniert. Die Modellierung des undefinierten Einschaltzustands ist mithilfe


des Datentyps std_logic mglich, mit dem Datentyp bit dagegen nicht. Daher wird in
der Praxis der Typ std_logic bevorzugt eingesetzt und hat die Verwendung des Typs bit
verdrngt.

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

Quotient der Ganzzahldivision

rem

Rest der Ganzzahldivision

**

Potenzierung

Integer

Falls Konstanten

abs

Absolutwert

Numerisch

Ja

Tab.3.5VHDL-Operatoren
fr Vergleiche

Abhngig vom verwendeten


Synthese-Programm

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

-- Exemplarische Anwendungen des "Zusammenfgeoperators"


sv6<= "010" & '1' & "100" & '0'; -- Ergebnis: "01011000"
sv10 <= "00" & sv8; -- Vorzeichenlose Erweiterung 8 bit -> 10 bit
s9 <= s8(7) & s8; -- Vorzeichenerweiterung eines signed-Wertes
-- "Rotieren" eines 6 bit breiten Wertes um zwei Stellen nach rechts
-- Beispiel: Aus "011001" wird "010110"
sv6 <= sv6(1 downto 0) & sv6(5 downto 2);

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.

3.5.1 Definition und Verwendung von Signalen


Nehmen wir an, die in Abb.3.5 dargestellte Schaltung soll in VHDL beschrieben werden.
Die Eingnge a und b werden durch ein UND-Gatter zum Signal z verknpft, welches
nur innerhalb des Moduls sichtbar ist. Mithilfe der ODER-Verknpfung von z und dem
Eingangssignal c wird das Ausgangssignal q berechnet. Die Signale a, b und q sind Ports
der Entity dieses Moduls. Das Signal z muss dagegen in der Architecture des Moduls
definiert werden. VHDL stellt hierfr das Schlsselwort signal zur Verfgung. Hinter
dem Schlsselwort signal werden der gewnschte Signalname sowie der Datentyp des
Signals angegeben. Signale werden im sogenannten Deklarationsteil der Architecture
definiert, welcher sich vor dem begin der Architecture befindet.

Abb.3.5 Beispiel einer


logischen Funktion

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;

Hat man bereits Erfahrungen mit Programmiersprachen fr die Softwareentwicklung


gesammelt, mag dieses Verhalten zunchst ungewhnlich erscheinen. Aber eine genauere Betrachtung zeigt, dass sich die Zuweisungen genauso verhalten mssen: Ein Gatter in einer digitalen Schaltung reagiert immer auf die Signale an den Gattereingngen,
unabhngig davon, ob andere Gatter in der Schaltung existieren oder ob andere Gatter
ebenfalls nderungen ihrer Eingangssignale beobachten. Somit sind die beiden Gatter
der Beispielschaltung also immer und unabhngig voneinander aktiv. Das UND-Gatter

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.

3.6.1 Syntaktischer Aufbau von Prozessen


Prozesse werden mithilfe des Schlsselwortes process eingeleitet. Wie bei einer VHDLArchitecture beginnt die eigentliche Beschreibung des Verhaltens nach dem Schlsselwort begin. Zwischen process und begin befindet sich der Deklarationsteil, welcher zum
Beispiel zur Definition von Variablen verwendet werden kann.
Im Gegensatz zu nebenlufigen Signalzuweisungen werden Prozesse nicht automatisch ausgefhrt, wenn sich eines der verknpften Signale ndert. Die im Rahmen dieses Kapitels betrachteten Prozesse besitzen eine sogenannte Sensitivittsliste, welche die
Signale enthlt, deren nderung zu einer Ausfhrung des Prozesses fhren soll. Die Signale werden in Klammern nach dem Schlsselwort process angeben.
Im Folgenden wird die Struktur von Prozessen anhand des Beispiels aus Abb.3.5
erlutert.
architecture and_or_proc of and_or is
begin
my_process: process (a,b,c)
begin
q <= (a and b) or c;
end process;
end;

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.

3.6.2 Ausfhrung von Prozessen


Prozesse besitzen eine gewisse hnlichkeit mit Funktionen hherer Programmiersprachen. Allerdings existiert zwischen den Funktionen einer Programmiersprache und den
VHDL-Prozessen ein entscheidender Unterschied. Eine Software-Funktion wird vom
Programmierer durch einen entsprechenden Aufruf im Code aktiviert und einmalig
ausgefhrt. Dieses Prinzip kann fr Prozesse nicht gelten: Ein Prozess beschreibt eine
digitale Hardware-Komponente, die kontinuierlich aktiv ist. Eigentlich msste also ein
Prozess eine Endlosschleife enthalten, die immer wieder den Kern des Prozesses ausfhrt. Genauso arbeitet ein VHDL-Prozess tatschlich. Die Endlosschleife ist jedoch im
VHDL-Code nicht in Form einer Schleifenanweisung sichtbar, da mit der Verwendung
eines VHDL-Prozesses bereits implizit festgelegt ist, dass der Code des Prozesses kontinuierlich ausgefhrt wird.
Endlosschleifen in einer Software fhren hufig dazu, dass ein Programm nicht
mehr reagiert. In VHDL sind dagegen Endlosschleifen bewusst gewollt? Genauso ist es
tatschlich.
Ein Software-Programm wird sequenziell, also Befehl fr Befehl, von einem Rechner ausgefhrt. Sie haben aber nur einen Rechner zur Ausfhrung der Software zur Verfgung und wenn dieser mit der Verarbeitung einer Endlosschleife beschftigt ist, kann
er keine anderen Aufgaben ausfhren. Wenn Sie dagegen aus einer VHDL-Beschreibung

72

3 Einfhrung in VHDL

Hardware generiert haben, existieren sozusagen viele kleine Rechner gleichzeitig.


Diese fhren kontinuierlich, also im Prinzip in einer Endlosschleife, immer das gleiche
Programm aus, welches zuvor durch Prozesse beschrieben wurde.
Aber wie kann dann eine Simulation mehrerer VHDL-Prozesse auf einem nicht-parallelen, sequenziell arbeitenden Rechner ausgefhrt werden? Ein PC wre ja schon mit der
Ausfhrung eines einzelnen VHDL-Prozesses komplett ausgelastet.
Um diese Problematik zu lsen, ist in VHDL die bereits erwhnte Sensitivittsliste
eingefhrt worden. In dieser Liste werden alle Signale eingetragen, die innerhalb des
jeweiligen Prozesses gelesen werden. Der Prozess wird genau einmal durchlaufen, wenn
sich eines der Signale der Sensitivittsliste ndert. ndert sich keines der Signale, ruht
die Ausfhrung des jeweiligen Prozesses. Auf diese Weise wird in der Simulation einer
VHDL-Beschreibung zu einem beliebigen Zeitpunkt immer maximal ein Prozess aktiv
sein. Die Aktivierung eines Prozesses fhrt zu Signalnderungen, die dann wiederum
die Ausfhrung weiterer Prozesse zur Folge haben. Auf diese Weise kann sukzessive das
gesamte Verhalten der parallelen Hardware auf einem sequenziell arbeitenden PC nachgebildet werden.
Wird beim Anlegen der Sensitivittsliste ein Signal bersehen, ist dies fr die Hardwaregenerierung mittels Synthese relativ unbedeutend. Die meisten Syntheseprogramme
wrden zwar Warnungen ausgeben, aber dennoch eine funktionstchtige Hardware
erzeugen.
Fr die Simulation ist die korrekte Angabe der Sensitivittsliste dagegen sehr wichtig:
Wrde bei dem in Abschn.3.6.1 gezeigten Beispiel das Signal b nicht in der Sensitivittsliste aufgefhrt sein, wrde der Prozess bei nderungen von b nicht aktiviert werden.
Somit wrde trotz einer nderung von b das Ausgangssignal q seinen Wert behalten und
die Simulation der Schaltung ein anderes Ergebnis liefern als die zugehrige Hardware.
Eine umfassende berprfung der VHDL-Beschreibung mithilfe einer Simulation wre
also nicht mglich.

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

proc_with_variable : process (a,b)


variable my_var : std_logic;
begin
my_var := a and b; -- Variablenzuweisung
q <= my_var;-- Signalzuweisung
end process;

Aufgrund der sequenziellen Ausfhrung eines Prozesses sind die im Beispielcode


gezeigten Zuweisungen nicht vertauschbar.
Im Prinzip wird eine Zuweisung an eine Variable zunchst komplett durchgefhrt,
bevor die nchste Zeile des Prozesses abgearbeitet wird. Dies ist genau das Verhalten,
das auch fr Variablen in Programmiersprachen wie C/C++ oder Java gilt.
Zuweisungen an Signale blockieren den Prozessablauf dagegen nicht. Der Prozess
luft also weiter, ohne dass die Zuweisung eine Wirkung auf den Wert des Signals hat.
Das Signal behlt bis zu einer Prozessunterbrechung bzw. dem Prozessende seinen alten
Wert. Erst bei einer Beendigung oder Unterbrechung des Prozesses werden die zuvor
ausgefhrten Signalzuweisungen wirksam und die Signale erhalten neue Werte.
Wrde also die Zuweisung an q vor der Zuweisung an my_var stehen, wrde der
VHDL-Code im Gegensatz zum obigen Beispiel kein einfaches UND-Gatter mehr
beschreiben.
Da insbesondere das oben erwhnte Verhalten von Signalzuweisungen innerhalb von
Prozessen fr viele VHDL-Einsteiger etwas gewhnungsbedrftig ist, wird dieses Verhalten im nachfolgenden Abschnitt ausfhrlicher erlutert.

3.6.4 Signalzuweisungen inProzessen


Fr die Zuweisungen von Signalen innerhalb von VHDL-Prozessen gelten zwei wichtige
Regeln:
1. Die an ein Signal zugewiesenen Werte werden erst nach einer Unterbrechung des Prozesses sichtbar.
2. Wird ein Signal mehrfach in einem Prozess zugewiesen, zeigt nur die zuletzt ausgefhrte Zuweisung Wirkung. Alle vorangegangenen Zuweisungen werden verworfen.
Da Signale allen Prozessen einer VHDL-Architecture zur Verfgung stehen, muss sichergestellt werden, dass die nderung eines Signals in allen Prozessen gleichzeitig sichtbar
wird. Dieser Forderung wird durch die erste Regel Rechnung getragen.
Wird eine VHDL-Beschreibung simuliert, werden alle Zuweisungen an Signale
zunchst gesammelt. Die eigentliche Zuweisung an das Signal und die damit verbundene Sichtbarmachung eines Signalwechsels geschieht erst mit der Unterbrechung des
Prozesses oder mit der Beendigung des Prozessdurchlaufs. Dies bedeutet auch, dass

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.

3.6.5 Wichtige Sprachkonstrukte inVHDL-Prozessen


VHDL-Prozesse bieten vielfltige Sprachkonstrukte zur Beschreibung einer HardwareKomponente. In diesem Abschnitt werden die gebruchlichsten und wichtigsten Elemente zur Beschreibung von Prozessen vorgestellt.

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> =>

{when <Wert> =>


{when others =>
end case;

<Anweisungen>
<Anweisungen>}
<Anweisungen>}
<Anweisungen>}

Ein Anwendungsbeispiel der Case-When-Anweisung wird durch den folgenden Code


dargestellt.
case a_vec is -- a_vec ist vom Typ std_logic_vector(2 downto 0)
when "000" =>
q <= a and c;
r <= a;
when "001"|"010" =>
q <= b;
r <= a and c;
when "111" =>
q <= '1';
r <= d;
when others =>
q <= '0';
r <= '0';
end case;

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

{loop_label:} while <Bedingung> loop


<Anweisungen>
end loop {loop_label};

Ein Beispiel fr die Verwendung einer While-Schleife zeigt das nachfolgende


Codefragment.
i := 0;
while i < 8 loop
a(i) := b(i) xor c(7-i);
i:= i + 1;
end loop;

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

architecture struct of add_2 is


begin
process (op1,op2)
begin
sum <= std_logic_vector(unsigned(op1) + unsigned(op2));
end process;
end;

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

c : instd_logic_vector (7 downto 0);


q : out std_logic_vector (7 downto 0));
end;
architecture struct of add_3 is
signal tmp : std_logic_vector (7 downto 0);
begin
a1: entity work.add_2 port map (op1 => a, op2 => b, sum => tmp);
a2: entity work.add_2 port map (op1 => tmp, op2 => c, sum => q);
end;

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

Digitalschaltungen, deren Ausgnge nur von den aktuellen Eingangswerten abhngen,


nennt man kombinatorische Schaltungen. Eine solche Schaltung arbeitet nur mit Logikgattern und enthlt weder Rckkopplungen noch Flip-Flops. Die Eingangswerte werden
durch die Schaltung kombiniert (daher der Name) und ein Ergebnis berechnet. Da keine
Flip-Flops verwendet werden, knnen keine Informationen gespeichert werden.
Kombinatorische Schaltungen sind normalerweise Teil einer greren Schaltung. Sie
werden zusammen mit Flip-Flops eingesetzt, wobei der kombinatorische Teil die Berechnungen vornimmt und die Flip-Flops die Ergebnisse speichern. Die gesamte Schaltung
mit den Flip-Flops ist dann eine sequenzielle Schaltung, also eine Schaltung deren Ergebnis von der zeitlichen Abfolge (der Sequenz) ihrer Eingnge abhngt. In diesem Kapitel
werden zunchst die Funktion und der Entwurf kombinatorischer Schaltungen erlutert.
Flip-Flops und sequenzielle Schaltungen werden im nchsten Kapitel vorgestellt.
Als Beispiel fr eine kombinatorische Schaltung ist in Abb.4.1 eine einfache Alarmanlage dargestellt. Dabei sollen eine Tr (T) und zwei Fenster (F1, F2) berwacht werden. Mit einem Schalter (S) wird die Alarmanlage ein- oder ausgeschaltet. Diese vier
Eingangssignale sollen binre Werte also 0 oder 1 sein. Die 1 bedeutet dabei jeweils
aktiv, das heit Tr oder Fenster ist offen, beziehungsweise Anlage ist eingeschaltet.
Die kombinatorische Schaltung wertet die vier Eingangssignale aus und berechnet, ob
ein Alarm ausgelst werden soll oder nicht. Dafr gibt es einen Ausgang A, der mit einer
1 einen Alarmfall anzeigt. Andernfalls ist der Ausgang 0. Am Ausgang A ist eine Alarmhupe angebracht.
Wie man systematisch die kombinatorische Schaltung entwirft, wird spter in diesem
Kapitel erlutert. Fr dieses einfache Beispiel kann man die Schaltung direkt aus der
Aufgabenstellung ableiten. Der Alarm soll berwachen, ob Tr oder Fenster offen sind
und dabei melden, wenn einer oder mehrere der Kontakte auf 1 sind. Dies entspricht der
ODER-Verknpfung der drei Signale T, F1, F2. Dieses Zwischenergebnis fhrt zu einem
Alarm, wenn die Anlage eingeschaltet ist, also muss das Ergebnis der ODER-Verknpfung
Springer-Verlag GmbH Deutschland 2016
W. Gehrke et al., Digitaltechnik, Springer-Lehrbuch,
DOI10.1007/978-3-662-49731-9_4

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.1.1 Schaltfunktion und Schaltzeichen


Bei der Beschreibung von Schaltfunktionen werden die Eingangsvariablen meist mit den
Buchstaben A, B, C, und die Ausgangsvariable mit dem Buchstaben Y bezeichnet. Y
ist damit eine Funktion von A, B, C, und kann durch ein Schaltzeichen dargestellt
werden (Abb.4.2).

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.

4.1.3 Funktionstabelle mit Dont-Care


Als Besonderheit kann es bei Funktionstabellen vorkommen, dass fr eine oder mehrere Eingangskombinationen keine Ausgabe spezifiziert werden muss. Dies ist dann der
Fall, wenn bestimmte Eingangskombinationen laut Aufgabenstellung nicht vorkommen

88

4 Kombinatorische Schaltungen

Abb.4.3 Funktionstabelle der


Majorittsschaltung

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.

4.2 Funktionen der Schaltalgebra


Die Grundfunktionen der Schaltalgebra sind UND-Verknpfung, ODER-Verknpfung und
Negation. Alle anderen Schaltfunktionen lassen sich aus Kombinationen dieser Grundfunktionen darstellen. Zusammengesetzte Funktionen sind NAND-Verknpfung, NORVerknpfung, XOR-Verknpfung (Antivalenz) und XNOR-Verknpfung (quivalenz).

4.2 Funktionen der Schaltalgebra

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.

Tab.4.1Funktionen fr zwei Eingangsvariablen


Ausgabe fr AB =
11
01
10
0
0
0
0
0
0
0
0
1
0
0
1

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.

4.2.3 Negation, Inverter


Die Negation gibt das Gegenteil des Eingangswerts aus, also bei einer 0 eine 1 und
bei einer 1 eine 0 (Abb.4.8). In Formeln wird die Negation durch einen Strich ber der
Variablen oder Voranstellen des Zeichens dargestellt. Auch ganze Ausdrcke knnen durch einen Strich oberhalb negiert werden. Ein Beispiels dafr ist das XNOR in
Tab.4.1.
Das Schaltungselement wird Inverter genannt. In Schaltzeichen wird die Negation
durch einen Kreis dargestellt. Als Schaltzeichen fr den Inverter werden drei verschiedene Varianten verwendet (Abb.4.8). Das untere Schaltsymbol mit dem Dreieck ist am
prgnantesten und wird in der Praxis meist benutzt.
Das Sonderzeichen ist etwas umstndlich zu erzeugen, darum wird auch der
Schrgstrich / als Prfix oder die Raute # als Suffix zum Kennzeichen einer Negation
verwendet. Die Invertierung des Wertes A schreibt sich dann also /A oder A#.

4.2 Funktionen der Schaltalgebra


Abb.4.7 Funktionstabelle
und Schaltzeichen der ODERVerknpfung

Abb.4.8 Funktionstabelle der


Negation und drei Variationen
des Schaltzeichens fr einen
Inverter

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

4.2 Funktionen der Schaltalgebra

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.8 Weitere Verknpfungen


Neben den genannten Verknpfungen sind weitere Funktionen mglich. Bei nur einem
Eingang gibt es noch die Identitt, bei der der Ausgang gleich dem Eingang ist.
Alle mglichen Verknpfungen mit zwei Eingngen sind in Tab.4.1 aufgefhrt. Eine
Funktionstabelle fr zwei Eingnge hat vier Eintrge und fr jeden Eintrag sind zwei
Werte 0 und 1 mglich. Also sind 24=16 Funktionen theoretisch denkbar. Einige dieser Funktionen sind trivial, beispielsweise Ausgang ist immer 0 oder Ausgang ist identisch Eingang A. Einige Funktionen sind die oben genannten Verknpfungen, also UND,
ODER, XOR und so weiter.
Daneben gibt es noch Implikation und Inhibition als weitere Verknpfungen. Die
Funktionen selbst werden verwendet, aber die Begriffe sind in der Praxis nicht blich.
Stattdessen wird die Funktion ber eine Grundfunktion beschrieben, also beispielsweise
A und nicht B fr Eintrag drei der Tabelle.

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

Beispiele fr Logikfunktionen mit verschiedenen Stufen:


Einstufige Logik: Y = A B  


Zweistufige Logik: Y = A & B C & D



E ))
4-stufige Logik: Y = A & B (C & (D
Bedeutung hat die Stufenzahl insbesondere fr eine Schaltungsrealisierung. Jede Verknpfung entspricht einem Logikgatter in der Schaltung. Dabei addieren sich die Verzgerungszeiten smtlicher Stufen. Deshalb sollte fr zeitkritische Entwrfe die Anzahl der
Stufen so klein wie mglich sein.

4.2.10 US-amerikanische Logiksymbole


In englischsprachiger Literatur und in Datenblttern finden Sie auch Logiksymbole in
US-amerikanischer Darstellungsweise. Diese sind in Abb.4.13 dargestellt. Durch einen
Kreis am Ausgang werden die Varianten mit invertiertem Ausgang gekennzeichnet, also
aus AND wird NAND, aus XOR wird XNOR.
Man kann sich die Symbole merken, indem man bei der geraden linken Kante des
AND an die vertikalen Striche des A und bei der gebogenen linken Kante des OR an die
Rundungen des O denkt.

4.3 Rechenregeln der Schaltalgebra


4.3.1 Vorrangregeln
Genau wie in der elementaren Algebra hat auch die Schaltalgebra Vorrangregeln. In der
elementaren Algebra gilt Punktrechnung vor Strichrechnung, also hat die Multiplikation Vorrang vor der Addition.
In der Schaltalgebra hat das Negationszeichen den grten Vorrang und es kann fr
eine einzelne Variable oder fr einen gesamten Ausdruck stehen. An nchster Stelle sind
nach DIN die Verknpfungszeichen fr UND, ODER, NAND und NOR gleichrangig.
Danach folgen im Vorrang die Symbole fr Implikation, quivalenz und Antivalenz, die

4.3 Rechenregeln der Schaltalgebra

95

untereinander wiederum gleichrangig sind. Da die Verknpfungszeichen fr UND sowie


ODER die gleiche Prioritt haben, mssen innerhalb einer Gleichung mit UND- und
ODER-Verknpfungen also die einzelnen Terme in Klammern gesetzt werden.
Allerdings wird der Vorrang in der Praxis anders gehandhabt. Den strksten Vorrang
hat weiterhin das Negationszeichen. Dann gilt allerdings UND vor ODER, das heit
die UND-Verknpfung hat Vorrang vor der ODER-Verknpfung. Dies spart oftmals
Schreibarbeit und Klammern. Alle anderen Verknpfungen werden blicherweise per
Klammer geordnet, um Missverstndnisse zu vermeiden.
Auch in diesem Buch wird die Praxisregel UND vor ODER benutzt. Abb.4.14
zeigt die verschiedenen Schreibweisen. Alle drei Ausdrcke sind gleichwertig.

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.

4.3.2.1Vereinfachungsregeln fr eine Variable


Es gibt eine Reihe von Vereinfachungsregeln, die gelten, wenn nur eine Variable und
eventuell eine Konstante vorhanden ist.
Eine Variable ODER die Konstante 0 ergibt die Variable:
A0=A
Eine Variable ODER die Konstante 1 ergibt 1:

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

Abb.4.14 Vorrangregeln der


Schaltalgebra

Y = (A & B) v (C & D)

korrekt nach DIN

=A&BvC&D

UND vor ODER

=ABvCD

verkrzt ohne &

96

4 Kombinatorische Schaltungen

Eine Variable UND sich selbst ergibt die Variable:

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:

4.3 Rechenregeln der Schaltalgebra

97

A & (B C) = (A & B) (A & C)


A (B & C) = (A B) & (A C)

4.3.2.5De Morgansche Gesetze


Die de Morganschen Gesetze sind zwei Regeln, die besagen:
Eine NAND-Verknpfung kann ersetzt werden durch eine ODER-Verknpfung mit
negierten Operatoren.
Eine NOR-Verknpfung kann ersetzt werden durch eine UND-Verknpfung mit
negierten Operatoren.

A & B & C & . . . & X = A B C . . . X


A B C . . . X = A & B & C & . . . & X
Anschaulich gesagt, kann also die Negation des gesamten Ausdrucks ersetzt werden
durch Negation der einzelnen Operanden und Tauschen von UND nach ODER beziehungsweise ODER nach UND. Diese Gesetze gelten fr beliebig viele Operatoren.
Zu den de Morganschen Gesetzen gibt es kein quivalent in der elementaren Algebra,
sodass diese Regeln eventuell etwas berraschend aussehen.

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 Schaltungsentwurf durch Minimieren


Beim Schaltungsentwurf wird fr eine bestimmte Aufgabenstellung eine Schaltung entworfen. Aus der Spezifikation wird die logische Funktion erstellt. Diese logische Funktion entspricht einer Schaltung aus Gattern, welche die Funktion ausfhrt.
In diesem Abschnitt wird die prinzipielle Vorgehensweise erlutert. Fr den praktischen Entwurf ist das grafische Verfahren mit Karnaugh-Diagramm gut geeignet, welches im nchsten Abschnitt beschrieben wird. Des Weiteren kann die Minimierung
rechnergesttzt erfolgen. Dabei knnen, je nach Algorithmus, auch mehrstufige Logikfunktionen entstehen. Mit dem hier vorgestellten Verfahren wird stets eine zweistufige
Logik erzeugt.

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 & B & C ; A & B & C ; A & B & C


Das Besondere am Minterm ist, dass er bei genau einer Kombination der Eingangsvariablen den Ausgangswert 1 ergibt und sonst 0 ist. Dies ergibt sich dadurch, dass die UNDBedingung ja nur bei einer Kombination erfllt ist. Abb.4.15 zeigt fr drei Minterme
die Funktionstabelle. Wenn die nicht-negierten Eingnge gleich 1 und die negierten Eingnge gleich 0 sind, ist der Ausgang gleich 1.

4.4.2 Schaltungsentwurf mit Mintermen


Mit den Mintermen kann direkt eine kombinatorische Schaltung entworfen werden.
Dazu werden die Minterme ausgewhlt, welche eine 1 ausgeben sollen. Die Minterme
Abb.4.15 Funktionstabelle
fr drei Minterme

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

4.4 Schaltungsentwurf durch Minimieren

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)

4.4.3 Minimierung von Mintermen


Die disjunktive Normalform, also die ODER-Verknpfung der Minterme ist eine logische Gleichung, welche die geforderte Funktion ausfhrt. Allerdings kann die Normalform meist noch vereinfacht werden. Diese Vereinfachung wird als Minimierung
bezeichnet. Dabei werden Terme anhand der Rechenregeln der Schaltalgebra zusammengefasst. Wenn ein Term nicht mehr weiter zusammengefasst werden kann, wird er als
Primterm bezeichnet.


Bei der Majorittsschaltung knnen unter anderem die Terme A & B & C sowie
(A & B & C) zusammengefasst werden. In beiden Termen mssen B und C den Wert 1
haben. A soll im ersten Term 0, im zweiten Term 1 sein. Das heit, beide mgliche Werte
fr A sind erlaubt und daher braucht A nicht beachtet zu werden. Die Terme knnen deshalb zum Primterm (B & C) zusammengefasst werden.
Diese anschauliche Erklrung lsst sich auch ber die Rechenregeln herleiten:






Assoziativgesetz: 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.

4.4.5 Schaltungsentwurf mit Maxtermen


Auch aus den Maxtermen kann direkt eine kombinatorische Schaltung entworfen werden. Dazu werden die Maxterme ausgewhlt, welche eine 0 ausgeben und dann UNDverknpft, damit diese Nullen in Kombinationen der Gesamtschaltung eine 0 ergeben.
Diese Beschreibung wird als konjunktive Normalform (KNF) bezeichnet. Konjunktion ist
dabei eine andere Bezeichnung fr die UND-Funktion.
Die Majorittsschaltung gibt fr vier Eingangskombinationen eine 0 aus. Die Maxterme fr diese vier Kombinationen werden ausgewhlt und UND-verknpft. Dies ergibt
die Funktion:

 
 

Y = (A B C) & A B C & A B C & A B C

4.4.6 Minimierung von Maxtermen


Auch die konjunktive Normalform, also die UND-Verknpfung von Maxtermen kann
meist noch vereinfacht werden.
Abb.4.16 Funktionstabelle
fr drei Maxterme

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

4.5 Schaltungsminimierung mit Karnaugh-Diagramm

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)

4.5 Schaltungsminimierung mit Karnaugh-Diagramm


Im vorherigen Abschnitt wurde gezeigt, dass disjunktive und konjunktive Normalformen
durch Minimierung vereinfacht werden knnen. Ein Karnaugh-Diagramm (Aussprache
Karnoh) fhrt diese Vereinfachung grafisch durch. Durch die Darstellung kann direkt
erkannt werden, welche Terme miteinander verbunden werden knnen. Eine Minimierung mit Karnaugh-Diagramm ist sehr gut fr Funktionen mit zwei bis vier Variablen
geeignet. Fr fnf oder sechs Variablen ist das Verfahren ebenfalls mglich, erfordert
dann aber etwas bung und gutes rumliches Vorstellungsvermgen.
Das Verfahren kann sowohl fr die disjunktive als auch fr die konjunktive Normalform durchgefhrt werden. Hier soll hauptschlich die disjunktive Normalform vorgestellt
werden. Das Verfahren ist auch unter dem Namen Venn-Diagramm, Karnaugh-VeitchDiagramm (Aussprache Karnoh-Fietsch) oder KV-Diagramm bekannt.
Das Karnaugh-Diagramm ist insbesondere wichtig, da es die Zusammenhnge von
Schaltalgebra, logischen Verknpfungen und Schaltungsimplementierung verdeutlicht.
In der Praxis erfolgt die Schaltungsminimierung heutzutage meist durch Computerprogramme zur Schaltungssynthese.

4.5.1 Grundstzliche Vorgehensweise


Das Karnaugh-Diagramm ist im Prinzip eine andere Anordnung der Wahrheitstabelle.
Die Eingangsvariablen werden am horizontalen und vertikalen Rand eines schachbrettartig unterteilten Rechtecks angeordnet. Fr n Eingangsvariablen erhlt man somit 2n Felder. Dabei sind sie so angeordnet, dass jedes Feld einem Minterm entspricht und sich
zwei horizontal oder vertikal benachbarte Felder nur in einer Eingangsvariablen unterscheiden. In die Felder werden die Werte 0 und 1 der Ausgangsvariablen eingetragen.
Benachbarte 1-Felder werden dann wie im Abschn.4.5.4 zusammengefasst:




(A & B) A & B = A & B B = A
Im Karnaugh-Diagramm sind auch Felder am rechten und linken bzw. oberen und unteren Rand benachbart, denn auch sie unterscheiden sich nur in einer Variablen. Es mssen mglichst viele benachbarte 1-Felder zu einem Block zusammengefasst werden. Die
logische Gleichung wird dann minimal, wenn die Blcke mglichst viele Felder enthalten und die Anzahl der Blcke minimal ist.
Die Vorgehensweise zum Aufstellen der disjunktiven Minimalform lautet:

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.

4.5.2 Karnaugh-Diagramm fr zwei Variablen


Bei zwei Variablen hat die Funktionstabelle vier Eintrge. Im Karnaugh-Diagramm in
Abb.4.17 werden diese Eintrge in vier Feldern dargestellt. Jeder Eintrag entspricht
einem Feld und die horizontale Richtung unterscheidet zwischen verschiedenen Werten der Variable B, die vertikale Richtung unterscheidet zwischen verschiedenen Werten
der Variable A. Die Buchstaben p bis s zeigen die Korrespondenz zwischen Tabelle und
Diagramm.
Um eine Funktion zu minimieren, werden die Ausgabewerte der Funktionstabelle
in das Diagramm eingetragen. Die beispielhaft gewhlte Funktionstabelle in Abb.4.18
hat einen Eintrag mit Funktionswert 0 und drei Eintrge mit Funktionswert 1 und diese
Werte finden sich im Karnaugh-Diagramm wieder. Jede 1 entspricht einem Minterm, das
heit, die Funktion knnte durch drei Minterme dargestellt werden.
Im Diagramm kann man jetzt erkennen, welche 1-Eintrge, also welche Minterm nebeneinander liegen. Diese benachbarten Minterme knnen zu einem Term
Abb.4.17 Zuordnung im
Karnaugh-Diagramm

A
0
0
1
1

B
0
1
0
1

Y
p
q
r
s

B=
0

A=

4.5 Schaltungsminimierung mit Karnaugh-Diagramm

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

4.5.3 Karnaugh-Diagramm fr drei Variablen


Fr drei Variablen wird das Diagramm auf acht Felder erweitert (Abb.4.20). An der
langen Kante werden dafr zwei Variablen angeordnet. Die Reihenfolge der beiden
Variablen ist so zu whlen, dass sich benachbarte Felder weiterhin in nur einer Variable unterscheiden. Diese Reihenfolge entspricht dadurch dem Gray-Code. Beachten Sie,
dass linker und rechter Rand benachbart sind.
Das Diagramm enthlt somit zwei Terme, die sich aus jeweils zwei Mintermen, also
zwei 1-Stellen zusammensetzen. Die minimierte Funktion ergibt sich zu:

(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.

4.5.4 Karnaugh-Diagramm fr vier Variablen


Fr vier Eingangsvariablen wird das Diagramm auf 16 Felder erweitert, so dass auch die
vertikale Achse zwei Variablen enthlt, wiederum mit der Reihenfolge in Gray-Codierung. Abb.4.23 zeigt die Anordnung und zwei Gruppen.

Abb.4.21 KarnaughDiagramm mit Vierergruppen

B,C=

00

01

11

10

01

11

10

C=1

A=

Abb.4.22 Linker und rechter


Rand sind im KarnaughDiagramm benachbart

B ,C = 00
0

B,C=

00

01

11

10

A=

A=

A=1

A=0,
C=0

C=0

4.5 Schaltungsminimierung mit Karnaugh-Diagramm


Abb.4.23 KarnaughDiagramm mit vier Variablen

105

A,B=
00

C,D=
00 01

11

10

01

11

10

A=0, D=0

A=1, C=0, D=1

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:



Einzelnes 1-Feld mit allen vier Variablen


Zweiergruppe mit drei Variablen
Vierergruppe mit zwei Variablen
Achtergruppe mit einer Variablen (siehe Abb.4.24)

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.

Abb.4.24 KarnaughDiagramm mit Achtergruppen

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

4.5.5 Auswahl der erforderlichen Terme


Nachdem die 1-Felder zu mglichst groen Gruppen, den Primtermen, zusammengefasst
sind, muss im nchsten Schritt berprft werden, welche Terme erforderlich sind. Dabei
sind manchmal alle Primterme erforderlich und manchmal werden Primterme nicht bentigt, sind also redundant. Die Bedingung fr die Auswahl der Primterme ist, dass alle 1-Felder in mindestens einem Primterm enthalten sein mssen. Je weniger Primterme bentigt
werden und je grer die Terme sind, umso gnstiger ist die entstehende Schaltung.
Als Beispiel wird eine Funktion mit sieben 1-Feldern betrachtet, die in Abb.4.26 im
Karnaugh-Diagramm eingetragen sind. Es lassen sich vier Primterme bilden, und zwar
eine Vierergruppe und drei Zweiergruppen. Da alle 1-Felder in einem der Primterme enthalten sein mssen, ist Term 1 erforderlich, denn nur er enthlt die 1-Felder in der linken
Spalte. Auch Term 2 und Term 4 sind erforderlich, denn nur sie enthalten die 1-Felder in
der dritten Spalte (fr C,D =11). Term 3 hingegen ist nicht erforderlich, denn sein oberes 1-Feld ist bereits in Term 1, das untere 1-Feld in Term 4 enthalten.

4.5.6 Ermittlung der minimierten Funktion


Wenn die erforderlichen Primterme bekannt sind, mssen die logischen Funktionen fr diese
Terme bestimmt werden. Die Terme sind dabei eine UND-Verknpfung von nicht-negierten
und negierten Eingangsvariablen. Welche Eingangsvariablen im Term enthalten sind, ergibt
sich durch die Position des Primterms im Karnaugh-Diagramm. Drei Flle sind mglich:

Abb.4.26 Auswahl der


Primterme

A,B=
00

C,D=
00 01

11

10

Term 1

Term 2

01

Term 3

11

Term 4

10

4.5 Schaltungsminimierung mit Karnaugh-Diagramm

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:

Y = A & C A & B & D A & B & D

4.5.7 Karnaugh-Diagramm mit Dont-Care


Wenn fr bestimmte Kombinationen von Eingangswerten keine Ausgabe spezifiziert ist,
kann diese Freiheit benutzt werden, um die minimierte Funktion mglichst einfach zu
erstellen. Ein Beispiel fr Funktionen mit Dont-Care wurde am Anfang des Kapitels in
Abschn.4.2.4 erlutert.
Die Behandlung von Dont-Care-Eintrgen bei der Minimierung nach Karnaugh ist
relativ einfach. Zunchst werden die Dont-Cares als Strich - in das Karnaugh-Diagramm eingetragen. Bei der Ermittlung der Primterme werden die Dont-Cares einbezogen, um mglichst groe Primterme zu bilden. Bei der Auswahl der erforderlichen
Primterme werden die Dont-Cares dann nicht bercksichtigt, denn sie mssen nicht in
einem Primterm enthalten sein.

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:

Y = A(2) & A(1) A(2) & A(0)


Durch die gewhlten Terme werden vier der sechs Dont-Care-Felder umfasst. Fr diese
Felder ergibt sich also eine 1 als Ausgabe, fr die anderen beiden Dont-Care-Felder eine
0. Da laut Aufgabenstellung diese Eingangskombinationen nicht auftreten, konnten sie
frei belegt werden.

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

Abb.4.27Karnaugh-Diagramm fr Primzahlerkennung mit Dont-Cares

Term 3

4.5 Schaltungsminimierung mit Karnaugh-Diagramm

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.

4.5.8 Karnaugh-Diagramm fr mehr als vier Variablen


Auch Funktionen mit fnf oder sechs Variablen knnen prinzipiell mit dem KarnaughDiagramm minimiert werden. Allerdings sind dafr mehr als zwei Dimensionen erforderlich und man muss sich die Felder rumlich hintereinander oder bereinander
vorstellen. Abb.4.28 zeigt eine Darstellung mit 32 Feldern fr fnf Variable, bei der die
beiden Hlften gedanklich an der mittleren, dickeren Linie geknickt werden. Felder aus
rechter und linker Hlfte liegen dadurch bereinander. Eine mgliche Vierergruppe ist
zur Verdeutlichung eingetragen. Fr sechs Variable msste man in einem 64er-Feld auch
eine obere und untere Hlfte bereinander legen.
Diese Darstellung ist allerdings unbersichtlich und daher fehleranfllig. Ein rechnergesttztes Verfahren wre daher sinnvoll.

4.5.9 Karnaugh-Diagramm der konjunktiven Normalform


Bisher wurde stets die disjunktive Normalform beschrieben, aber in hnlicher Weise kann
auch die konjunktive Normalform aufgestellt werden. Entsprechend der Symmetrie der
Schaltalgebra (siehe de Morgansche Gesetze in Abschn.4.3.2.5) ist die Vorgehensweise
praktisch spiegelbildlich. Es werden also anstatt der 1-Felder die 0-Felder verbunden, gegebenenfalls mithilfe der Dont-Care-Felder. Dann werden die ODER-Terme UND-verknpft.
Als Beispiel soll die Primzahlerkennung auch in der konjunktiven Normalform minimiert werden. In Abb.4.29 werden aus den 0-Feldern mithilfe der Dont-Cares eine
Achtergruppe und drei Vierergruppen gebildet. Term 1 und 3 sind erforderlich, da es

Abb.4.28 KarnaughDiagramm fr fnf Variablen

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

Abb.4.29Primzahlerkennung in der konjunktiven Normalform

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.

4.6 VHDL fr kombinatorische Schaltungen


4.6.1 Beschreibung logischer Verknpfungen
Im Kapitel3 haben Sie die Schaltungsbeschreibung mit VHDL kennengelernt. Die logischen VHDL-Operatoren knnen verwendet werden, um eine Funktion zu beschreiben.
Die gerade in Abschn.4.5.9 berechnete Logikfunktion wrde dann wie folgt lauten:
y <= (a(2) or a(1)) and ((not a(2)) or a(0));

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.

4.6 VHDL fr kombinatorische Schaltungen

111

4.6.2 Beschreibung der Funktion


Bei der Funktionsbeschreibung in VHDL wird die Spezifikation durch If- und CaseAnweisungen sowie Zuweisungen beschrieben. Die Funktion soll ja die Primzahl aus
dem 4-Bit-Wert A erkennen. Eine VHDL-Beschreibung wrde darum A zunchst in
einen Unsigned umwandeln und dann eine Case-Anweisung aufrufen.
signal a_u : unsigned (3 downto 0);

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

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.7
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=1, 3, 8, 11, 13, 14
0 bei A=0, 2, 4, 5, 6
Dont-Care sonst
a) Stellen Sie das Karnaugh-Diagramm auf.
b) Ermitteln Sie die Produktterme mit Nutzung der undefinierten Ausgnge. Welche Produktterme sind erforderlich?
c) Geben Sie die Funktion fr die Ausgangsvariable an.
Aufgabe 4.8
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, 5, 14, 15
0 bei A =1, 2, 3, 6, 7, 8, 12, 13
Dont-Care sonst
a) Stellen Sie das Karnaugh-Diagramm auf.
b) Ermitteln Sie die Produktterme mit Nutzung der undefinierten Ausgnge. Welche Produktterme sind erforderlich?
c) Geben Sie die Funktion fr die Ausgangsvariable an.

Sequenzielle Schaltungen

Whrend kombinatorische Schaltungen nur die aktuellen Werte der Eingangssignale


verwenden, knnen sich sequenzielle Schaltungen Informationen merken. Die Ausgangswerte einer sequenziellen Schaltung knnen damit von den aktuellen und den vorangegangenen Werten der Eingangssignale abhngen. Dieses Gedchtnis wird durch
Flip-Flops als Speicherelemente erreicht.
Beispielsweise kann der Kanal eines Fernsehers durch Zifferntasten sowie durch +
und -Taste ausgewhlt werden. Durch Drcken der Taste 4 wird der Kanal Vier ausgewhlt. Der Fernseher hat hierfr eine sequenzielle Schaltung, die sich den aktuellen
Kanal merkt, auch wenn keine Taste mehr gedrckt ist. Durch Drcken von + wechselt
der Fernseher auf Kanal Fnf. Wird gedrckt, geht der Fernseher wieder auf Kanal
Vier. Der Kanal kann also auf verschiedene Arten angewhlt werden. Wie die Kanalauswahl erfolgte, ist nicht wichtig. Wenn der Kanal Vier gewhlt ist, braucht sich die sequenzielle Schaltung nicht zu merken, ob dies durch die Taste 4 oder oder + geschah.
Sequenzielle Schaltungen werden in der Digitaltechnik sehr oft eingesetzt und dabei
meist durch einen Takt angesteuert. Dieser Takt erreicht fr eine Hochleistungs-CPU
Frequenzen von ber 3GHz, whrend fr viele Anwendungen eine Geschwindigkeit im
Bereich 10 bis 100MHz ausreicht. Sequenzielle Schaltungen werden beispielsweise als
Flankendetektor, als Zhler oder als Steuerung eingesetzt.
Ein Flankendetektor erkennt die nderung eines Eingangswertes und gibt einmalig
ein Signal weiter. Wenn beim Fernseher die +-Taste gedrckt wird, soll nur ein
Kanal weitergeschaltet werden, selbst wenn die Taste etwas lnger gedrckt wird.
Ein Zhler ist beispielsweise in einer CPU enthalten und zhlt pro Takt jeweils einen
Wert weiter, um den nchsten Befehl auszufhren. Bei einer Verzweigung kann der
Zhler auch auf einen bestimmten Wert gesetzt werden.
In diesem und dem nchsten Kapitel werden einige Schaltungen ausfhrlich erlutert.
Springer-Verlag GmbH Deutschland 2016
W. Gehrke et al., Digitaltechnik, Springer-Lehrbuch,
DOI10.1007/978-3-662-49731-9_5

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

Abb.5.5 Entwurf des


RS-Flip-Flops

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

Qn+1 = R & (Qn S)


Mit dem De Morganschen Gesetz wird die UND-Verknpfung durch eine NOR-Verknpfung mit negierten Operatoren ersetzt. Aus dem ODER in der Klammer wird dann
ein NOR und die Negierung von R entfllt. Somit ergibt sich die in Abb.5.3 gezeigte
Struktur mit zwei NOR-Gattern.

Qn+1 = R & (Qn S) = R (Qn S)

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.

5.1.2 Taktsteuerung von Flip-Flops


5.1.2.1Takt
Fast alle in der Realitt eingesetzten Schaltungen benutzen einen Takt zur Ansteuerung
der Speicherelemente. Der Takt ist ein periodisches Signal, welches in gleichmigem
Rhythmus zwischen 0 und 1 wechselt. Ein 0-1-Zyklus wird als Taktzyklus, Taktschritt
oder Taktperiode bezeichnet.

Abb.5.6 Minimierung nach


Karnaugh fr den Entwurf des
RS-FF

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

Abb.5.9 Zeitverlauf beim


taktpegelgesteuerten RS-FlipFlop

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

Abb.5.11Taktflankensteuerung und Schaltsymbol

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.

Abb.5.12 Taktsymbol des


D-FFs

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.

Abb.5.14 Zeitverhalten eines


D-Flip-Flops

C
D
Q

124

5 Sequenzielle Schaltungen

1. Der Dateneingang D wechselt vor der Taktflanke.


2. Kurz vor und nach der Taktflanke ist D stabil und wird korrekt bernommen ().
3. Nach der Taktflanke kann D wieder wechseln.
4. Whrend der nchsten Taktflanke ist D nicht stabil und wird nicht korrekt bernommen (). Der Ausgang des Flip-Flops ist undefiniert. Er kann 0, 1 oder sogar einen
unzulssigen Zwischenzustand haben.
5. Bei der nchsten Taktflanke ist D stabil. Dennoch kann das Flip-Flop einige Zeit
bentigen, um sich zu fangen. Dies wird als Metastabilitt bezeichnet. Im Bild ist
angenommen, dass der Ausgang bei dieser Taktflanke wieder normal den Eingangswert bernimmt.
Die bentigten Zeiten vor und nach der Taktflanke werden als Setup- und Hold-Zeit
bezeichnet. Das Eingangssignal D muss vor der Taktflanke fr die Setup-Zeit tsetup und
nach der Taktflanke fr die Hold-Zeit thold stabil sein.
Abb.5.16 zeigt die Zeiten und verwendet die in der Digitaltechnik bliche Darstellung. Der horizontale Strich in der Mitte zwischen 0 und 1 gibt an, dass der Wert beliebig wechseln darf. Zwei parallele Striche bei 0 und 1 geben einen konstanten Wert 0 oder
1 an.
Die bentigten Zeiten von tsetup und thold hngen von der verwendeten Technologie
ab und sind in Datenblttern angegeben. Bei modernen integrierten Schaltungen sind die
Zeiten im Bereich von 0,1 ns oder kleiner. Die Hold-Zeit wird oft zu Null angestrebt,
damit sich der Eingangswert direkt nach der Taktflanke ndern darf.

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
???

Abb.5.16 Setup- und HoldZeiten beim D-FF

tsetup
C
D
Q

thold
Wert kann zwischen
0' und 1' wechseln
Wert konstant
0' oder 1'

5.1Speicherelemente

125

Abb.5.17 Mglichkeit zum


Aufbau eines D-Flip-Flops
(nach Datenblatt TI SN7474)

&
&

&

&

CLK
&

&

Eine weitere Schaltung zur Implementierung eines Flip-Flops wird spter im Kapitel
Halbleitertechnik vorgestellt (Kapitel10).

5.1.4 Erweiterung des D-Flip-Flops


Die Grundfunktion des D-Flip-Flops kann durch weitere Steuereingnge erweitert
werden.

5.1.4.1Asynchroner Reset und Set


Der Dateneingang des D-FF wird nur bei der Taktflanke ausgewertet. Manchmal ist es
jedoch erforderlich, dass der Wert eines D-FFs sofort gendert wird. Hierzu dient ein
asynchroner Reset oder Set. Der Begriff asynchron meint dabei nicht synchron, also
nicht mit dem Takt gekoppelt. Normalerweise hat ein D-FF entweder Reset oder Set,
je nachdem welchen Wert das D-FF bei Aktivierung einnehmen soll.
Ein asynchroner Reset setzt das D-FF sofort auf 0.
Ein asynchroner Set setzt das D-FF sofort auf 1.
Mit sofort ist hierbei gemeint, dass nicht auf die nchste Taktflanke gewartet werden muss. Natrlich hat das Flip-Flop eine kurze Verzgerungszeit, in der die Gatter
umschalten.
Reset und Set sind normale Eingnge des Flip-Flops und werden an der linken Kante
des Schaltsymbols eingezeichnet (Abb.5.18). Negative Polaritt wird wieder durch den
Inverterkreis symbolisiert. Abb.5.18 zeigt beispielhaft den Set mit negativer Polaritt.
Genauso wre ein Reset mit negativer Polaritt mglich.
Das Zeitverhalten eines D-Flip-Flops mit asynchronen Reset zeigt Abb.5.19. Bei den
steigenden Taktflanken sind Hilfslinien eingezeichnet, um die Taktzyklen zu verdeutlichen.
1. Mit der steigenden Taktflanke wird der Wert 1 des Eingangs D gespeichert.
2. Durch eine 1 am Reset wird das D-FF sofort auf 0 gesetzt, also ohne auf eine Taktflanke zu warten.

126

5 Sequenzielle Schaltungen

Abb.5.18 Schaltsymbole von


D-FFs mit asynchronem Set
(hier mit negativer Polaritt)
und Reset

Abb.5.19 Zeitverhalten eines


D-Flip-Flops mit asynchronem
Reset

/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.1.4.2Synchroner Reset und Set


Alternativ kann Reset und Set auch ganz normal mit der Taktflanke ausgewertet werden, also synchron. Wie in Abb.5.20 gezeigt, hat der Steuereingang dann die Ziffer 1, als
Kennzeichnung der Abhngigkeit vom Takt.
Der synchrone Set ist prinzipiell ein weiterer Dateneingang, das heit, der Ausgang
des Flip-Flops wird 1, wenn whrend der Taktflanke D oder S auf 1 sind. Deswegen
knnte die Schaltung auch durch ein normales D-FF und ein ODER-Gatter implementiert werden (Abb.5.20, rechts). Entwurf und Darstellung als synchroner Set sind jedoch
bersichtlicher und der Set kann direkt in die Flip-Flop-Schaltung integriert werden.

5.1Speicherelemente

127

Abb.5.20 Symbol und


Schaltung eines D-FFs mit
synchronem Set

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.

5.1.4.4Kompakte Darstellung von D-Flip-Flops


Fr die Darstellung von D-Flip-Flops in einer greren Schaltung wird in der Praxis
hufig eine kompakte Form gewhlt und die Ziffern der Eingangsabhngigkeit weggelassen (Abb.5.22, links).
Abb.5.21 Symbol und
Zeitverhalten eines D-FF mit
Enable

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 Weitere Flip-Flops


Es gibt neben D-Flip-Flops und ihren Erweiterungen auch andere taktflankengesteuerte
Flip-Flops. Diese werden allerdings in der Praxis nur selten eingesetzt und darum hier
nur kurz erwhnt.

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:



Beide Eingnge auf 0: Flip-Flop behlt seinen Wert.


J auf 1 (und K auf 0): Flip-Flop geht auf 1
K auf 1 (und J auf 0): Flip-Flop geht auf 0
Beide Eingnge auf 1: Flip-Flop invertiert seinen Wert, geht also von 0 auf 1 oder von
1 auf 0.

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.

5.2 Endliche Automaten

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.

5.2 Endliche Automaten


Eine sequenzielle Schaltung, die aus Speicherelementen und Logikgattern besteht, wird
als Automat, oder genauer als endlicher Automat bezeichnet.

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.

5.2 Endliche Automaten


Abb.5.23 Struktur des
Mealy-Automaten

131

X
Z

Zustands- Zn+1 SpeicherbergangsGlieder


funktion
(Flip-Flops)

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.

Abb.5.24 Struktur des


Moore-Automaten

Zustands- Zn+1 SpeicherGlieder


Zn bergangsfunktion
(Flip-Flops)

Takt

Ausgangsfunktion

132

5 Sequenzielle Schaltungen

5.2.2 Beispiel fr einen Automaten


5.2.2.1Schaltungsanalyse
Um die Funktionsweise eines Automaten zu verstehen, wird in diesem Abschnitt ein vorhandener Automat analysiert. Im darauffolgenden Abschnitt lernen Sie dann, wie Automaten entworfen werden.
Startpunkt der Analyse ist das Schaltbild des Automaten in Abb.5.25. Vergleichen
Sie ihn auch mit den Grundstrukturen von Mealy- und Moore-Automat in Abb.5.23 und
Abb.5.24.
Im Schaltbild sind die drei Blcke des Automaten hervorgehoben:
Die Zustandsbergangsfunktion besteht aus fnf Logikgattern.
Als Speicherglieder werden zwei D-Flip-Flops verwendet.
Die Ausgangsfunktion besteht aus einem Logikgatter.
Die drei Variablengruppen des Automaten sind:
Es gibt eine Eingangsvariable X
Es gibt eine Ausgangsvariable Y
Es gibt zwei Zustandsvariable Z(0), Z(1)
Auerdem ist das Taktsignal CLK vorhanden.
Eine Betrachtung der Struktur zeigt, dass es sich um einen Moore-Automaten handelt,
denn der Ausgang Y hngt nur von den Zustandsvariablen und nicht auch noch von der
Eingangsvariablen ab.
Zur weiteren Analyse werden die Funktionstabellen der beiden kombinatorischen Schaltungen fr Zustandsbergangsfunktion und Ausgangsfunktion aufgestellt. Die Zustandsbergangsfunktion hat drei Eingnge, also mssen fr 23=8
Speicherglieder

Zustandsbergangsfunktion
X

&

n+1
1 Z (0)

Zn(0)

&
&

Ausgangsfunktion

&
n+1
1 Z (1)

D
C

CLK

Abb.5.25Schaltbild eines Automaten

Zn(1)

5.2 Endliche Automaten

133

Eingangskombinationen die Funktionswerte ermittelt werden. Die Ausgangsfunktion


hat zwei Eingnge, also 22=4 Eingangskombinationen. Die Funktionstabellen werden
direkt berechnet, indem alle Kombinationen in die Grafik oder die logische Funktion eingesetzt werden. Wenn Sie mchten, knnen Sie dies als bung selbst berechnen, ansonsten finden Sie das Ergebnis in Abb.5.26.
Beachten Sie die Unterscheidung fr die Zustandsvariable Z(0), Z(1). Die aktuellen
Werte Zn(0), Zn(1) sind Eingnge fr beide Funktionstabellen. Die Werte Zn+1(0), Zn+1(1)
fr den nchsten Zeitschritt sind die Ausgabe der Zustandsbergangsfunktion.

5.2.2.2Zustnde und Zustandsfolgetabelle


Da der Automat zwei Zustandsvariable hat, knnen vier verschiedene Zustnde gespeichert werden. Zur besseren Anschaulichkeit werden diese Zustnde durch Buchstaben A,
B, C, D gekennzeichnet. Als allgemeine Bezeichnung fr Zustnde wird der Buchstabe
s (engl. State) verwendet. Die Zuordnung zwischen Zustandsvariablen und Zustnden
zeigt Abb.5.27.
Jetzt knnen Zustandsbergangsfunktion und Ausgangsfunktion mit der Codierung
der Zustnde kombiniert werden. In Tabelle Abb.5.26 werden also Z(0) und Z(1) durch
die Zustandsnamen A, B, C, D aus Abb.5.27 ersetzt. Das Ergebnis wird als Zustandsfolgetabelle (Abb.5.28) bezeichnet. Die acht Zeilen der Zustandsbergangsfunktion
(Abb.5.26) sind umsortiert, so dass die Zustnde in vier Zeilen und die Eingangsvariable
in zwei Spalten angeordnet sind.
In der Zustandsfolgetabelle Abb.5.28 steht links der aktuelle Zustand sn. Auf der
rechten Seite ist fr die beiden Mglichkeiten der Eingangsvariablen der jeweilige Folgezustand sn+1 angegeben. Ganz rechts findet sich die Ausgangsvariable Y. Wie oben
gesagt, ergibt sich Abb.5.28 direkt aus den Funktionstabellen und der Zustandscodierung. Zum Nachvollziehen knnen Sie als bung die Zustandsfolgetabelle selbst noch
einmal erstellen.
Abb.5.26 Funktionstabellen
fr Zustandsbergangsfunktion
(links) und Ausgangsfunktion
(rechts)

Abb.5.27 Codierung der


Zustnde

X
0
0
0
0
1
1
1
1

Zn(1) Zn(0) Zn+1(1) Zn+1(0)


0
0
1
1
0
0
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

5.2 Endliche Automaten

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 zeigt das Zeitverhalten des Automaten beispielhaft fr einen Zeitverlauf am


Eingang X. Das Eingangssignal wird jeweils bei der steigenden Taktflanke ausgewertet und daraus ergeben sich der Zustand und das Ausgabesignal Y fr den jeweiligen
Taktzyklus.
In praktischen Anwendungen arbeiten fast alle Schaltungen mit einem Taktsignal.
Deshalb verwenden auch alle Automaten, die in diesem Buch beschrieben sind, einen
Takt und die Informationen am Eingang eines Automaten werden immer nur bei der steigenden Taktflanke ausgewertet. Die Beschreibung Der Eingang X war dreimal 1. meint
daher eigentlich Der Eingang X war bei drei steigenden Taktflanke auf 1.

5.2.3 Entwurf von Automaten


Normalerweise ist in der Praxis der Ablauf umgekehrt zu dem zuvor erluterten Beispiel.
Bei einer Entwicklung ist meist eine Aufgabe gegeben und hierzu soll eine Schaltung
entworfen werden. Der Ablauf beim Entwurf umfasst die folgenden Schritte:
1. Spezifikation des Verhaltens
2. Aufstellen der Zustandsfolgetabelle
3. Minimierung der Zustnde
4. Codierung der Zustnde
5. Aufstellen der Ansteuerungstabelle
6. Logikminimierung

Abb.5.30 Zeitdiagramm fr
den analysierten Automaten

CLK
X
Zustand
Y

136

5 Sequenzielle Schaltungen

5.2.3.1Spezifikation des Verhaltens


Das gewnschte Verhalten eines Automaten ist meist in Textform gegeben. Ein einfacher
Automat kann in einem Absatz beschrieben werden. Fr eine komplexe Schaltung, z. B.
einen Mikroprozessor, kann die Spezifikation aber auch mehrere 100 Seiten Umfang haben.
Gerade bei greren Spezifikationen knnen Unklarheiten auftreten, zum Beispiel weil
nicht alle mglichen Flle des Eingangsverhaltens spezifiziert sind. Diese Unklarheiten
mssen dann whrend des Entwurfs durch Rckfragen bei den Verantwortlichen fr die
Spezifikation geklrt werden.
In diesem Unterkapitel soll eine Schaltung mit folgender Spezifikation entworfen
werden:
Zum Entprellen eines Tasters soll ein Automat entwickelt werden. Der Automat soll am
Ausgang Y den entprellten Wert des Eingangs X angeben. Wenn am Eingang drei Takte lang
der gleiche Wert 0 oder 1 anliegt, soll der Ausgang Y diesen Wert annehmen. Ansonsten soll
der letzte Eingangswert, der mindestens drei Takte anlag ausgegeben werden.
Beim Einschalten soll der Wert 0 ausgegeben werden.

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.

5.2.3.2Aufstellen der Zustandsfolgetabelle


Das Aufstellen der Zustandsfolgetabelle ist der eigentliche kreative Schritt bei der Entwicklung eines Automaten. Am bersichtlichsten und einfachsten ist die grafische Darstellung als Zustandsfolgediagramm und sptere Abschrift als Tabelle.
Als Erstes muss entschieden werden, ob eine Implementierung als Mealy- oder
Moore-Automat erfolgen soll. Bei bungsaufgaben ist normalerweise der Typ vorgegeben. Hier soll ein Moore-Automat erstellt werden. Wenn Sie mehrere Automaten entworfen haben, knnen Sie selbst beurteilen, welcher Automatentyp gnstiger ist.
Das Zustandsfolgediagramm wird schrittweise erstellt und dieser Entwurf soll hier
auch in einzelnen Schritten erklrt werden, damit Sie die Vorgehensweise nachvollziehen
knnen.
Schritt 1
Um einen Anfang fr das Diagramm zu haben, wird mit einem ersten Zustand begonnen.
In diesem Beispiel wird der Fall betrachtet, dass die Eingabe immer 0 ist. In diesem Fall
ist auch die Ausgabe 0 und der Automat bleibt immer im gleichen Zustand.
Abb.5.31 Zeitdiagramm fr
Entprell-Automat

CLK
X
Y

5.2 Endliche Automaten

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

Abb.5.32Zustandsfolgediagramm des Entprell-Automaten Schritt 1

Re
se

X=0

X=1

stabil 0 X=1 1-mal 1 X=1 2-mal 1 X=1 stabil 1


Y=0
Y=0
Y=0
Y=1

Abb.5.33Zustandsfolgediagramm des Entprell-Automaten Schritt 2

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

Abb.5.34Zustandsfolgediagramm des Entprell-Automaten Schritt 3

139

5.2 Endliche Automaten

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

Abb.5.35Zustandsfolgediagramm des Entprell-Automaten Schritt 4

Aufstellen der Zustandsfolgetabelle


Aus dem Zustandsfolgediagramm kann jetzt als textuelle Form die Zustandsfolgetabelle
erstellt werden. Dazu wird fr jeden Zustand eine Zeile und fr jede mgliche Eingangskombination eine Spalte angelegt. In diese Felder wird fr jede Kombination aus Eingangswerten und Zustand der Folgezustand eingetragen.
Auerdem erhalten die Ausgangswerte eine Spalte.
Die Zustandsfolgetabelle des Automaten in Abb.5.36 bentigt also sechs Zeilen fr
die sechs Zustnde. In zwei Spalten werden die Folgezustnde fr X=0 und X=1 eingetragen; eine dritte Spalte gibt den Wert des Ausgangs Y an. In die Felder werden die
Informationen des Zustandsfolgediagramms (Abb.5.35) eingetragen. Der Startzustand
wird mit einem Stern gekennzeichnet. Das Aufstellen der Tabelle ist eher formell, die
kreative Arbeit wurde bei der Erstellung des Diagramms geleistet. Natrlich sollte noch
einmal die Plausibilitt des Automaten berprft werden, also ob fr jeden mglichen
Fall auch ein Folgezustand definiert wurde.

5.2.3.3Minimierung der Zustnde


In diesem Schritt wird geprft, ob die Anzahl der Zustnde reduziert werden kann, oder
ob die Anzahl bereits minimal ist. Eine Vereinfachung ist mglich, wenn quivalente
(also gleichbedeutende) Zustnde zusammengefasst werden knnen. Zwei Zustnde sind
quivalent, wenn fr alle Eingangskombinationen die Folgezustnde gleich oder quivalent sind und auerdem die Ausgangswerte gleich sind.

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

Abb.5.36Zustandsfolgetabelle des Entprell-Automaten

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

Abb.5.37Nicht minimales Zustandsfolgediagramm des Entprell-Automaten

X=1

5.2 Endliche Automaten

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.

5.2.3.4Codierung der Zustnde


Als nchster Entwurfsschritt wird fr die Zustnde des Automaten eine Zustandscodierung bestimmt. Es muss also festgelegt werden, welche 0-1-Kombinationen fr die
Zustnde gelten. Die Codewortlnge n muss so gewhlt werden, dass alle m Zustnde
dargestellt werden knnen. Mathematisch ausgedrckt muss also gelten:
2n m
Aufgelst nach der Codewortlnge n ergibt sich folgende Formel, bei der ld den Zweierlogarithmus bezeichnet:

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:

ld 6 = log 6/ log 2 = 0, 778/0, 301 = 2, 58


Ziel der Zustandscodierung ist ein mglichst geringer Aufwand, eine mglichst hohe Taktgeschwindigkeit oder eine Kombination aus diesen beiden Anforderungen. Fr die Codierung gibt es prinzipiell sehr viele Mglichkeiten, sodass diese nicht alle ausprobiert werden
knnen. Es gibt darum verschiedene Strategien, die im Abschn.5.2.4 noch erlutert werden.
In der Praxis wird oft eine einfache Zuordnung gewhlt und das soll auch fr das hier
betrachtete Beispiel so erfolgen. Als Codierung werden die Zustnde entsprechend der

142

5 Sequenzielle Schaltungen

Abb.5.38 Codierung des


Entprell-Automaten mit
minimaler Codewortlnge

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
-

Abb.5.39Ansteuerungstabelle des Entprell-Automaten

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.

5.2.3.5Aufstellen der Ansteuerungstabelle


Mit der gewhlten Codierung kann jetzt die Funktionstabelle fr die kombinatorischen
Schaltungen im Automat erstellt werden. In der Zustandsfolgetabelle werden also die
Namen der Zustnde durch die Codierung ersetzt. Diese neue Tabelle wird als Ansteuerungstabelle bezeichnet.
Abb.5.39 zeigt die Ansteuerungstabelle fr die Codierung aus Abb.5.38. Eine Besonderheit sind die beiden unbenutzten Codierungen fr die keine Folgezustnde und Ausgabewerte definiert sind. Fr sie werden Dont-Care-Werte eingetragen.
Fr sicherheitskritische Schaltungen kann fr die unbenutzten Codierungen auch ein
bestimmter Folgezustand gewhlt werden. Falls die Schaltung durch eine Strung, beispielsweise einen Spannungseinbruch, in einen undefinierten Zustand gert, wird somit
im Folgeschritt wieder ein gltiger Zustand erreicht.
5.2.3.6Logikminimierung
Aus der Ansteuerungstabelle knnen jetzt die Logikfunktionen durch Minimierung,
also mit Karnaugh-Diagramm ermittelt werden. Dies sind insgesamt vier KarnaughDiagramme fr Ausgangswert Y und die drei neuen Zustandsvariable Zn+1(2:0). Die

143

5.2 Endliche Automaten

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

Abb.5.40Schaltbild des Entprell-Automaten

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.

5.2.4 Codierung von Zustnden


Fr die Codierung der Zustnde gibt es verschiedene Strategien. Wichtiges Unterscheidungsmerkmal ist die Codewortlnge.

5.2.4.1Codierung mit minimaler Codewortlnge


Die Codierung mit minimaler Codewortlnge wurde im vorstehenden Beispiel bereits
verwendet. Bei der Zuordnung von Zustnden und Codewrtern gibt es mehrere Mglichkeiten. Theoretisch knnte man hier verschiedene Codierungen ausprobieren, um zu
versuchen, mglichst einfache kombinatorische Schaltungen zu erhalten.
In der Praxis wird meist eine einfache Zuordnung gewhlt, beispielsweise das oben
verwendete Durchnummerieren der Zustnde entsprechend der Dualzahlen. Der Aufwand zum kompletten Ausprobieren verschiedener Mglichkeiten ist meist zu hoch.
5.2.4.2Codierung mit redundanter Codewortlnge
Eine andere Strategie zur Codierung benutzt mehr Stellen des Codewortes als eigentlich
erforderlich wren. Die Codewortlnge ist also redundant und erfordert mehr Flip-Flops
als bei minimaler Codewortlnge. Dies erscheint zunchst nicht sinnvoll, allerdings
werden oft die kombinatorischen Schaltungen fr Zustandsbergangsfunktion und Ausgangsfunktion einfacher und schneller.
Hufig verwendete Codes sind die One-Hot-Codierung sowie die Zero-One-HotCodierung. Die One-Hot-Codierung ist ein 1-aus-n-Code, das heit von den n Stellen
des Codeworts ist genau eine Stelle 1 (also Hot), die anderen sind 0. Die Anzahl der
mglichen Codewrter ist genauso gro wie die Codewortlnge.
Die Zero-One-Hot-Codierung ist eine Variante, bei der zustzlich das Codewort mit
nur 0-Stellen erlaubt ist. Bei n Stellen sind also n+1 Codewrter mglich.
Der Entprell-Automaten aus Abschn.5.2.3 hat 6 Zustnde, so dass eine One-HotCodierung die Codewortlnge 6 hat. Die Zero-One-Hot-Codierung ergibt die Codewortlnge 5. Eine Zuordnung von Codierung und Zustnden ist in Abb.5.41 angegeben.
Zum Vergleich der Codierungen soll der Entprell-Automat auch mit der One-HotCodierung implementiert werden. Genau wie im vorherigen Abschnitt wird in die
Zustandsfolgetabelle die Codierung eingesetzt, so dass sich die Ansteuerungstabelle in
Abb.5.42 ergibt. Durch die Codewortlnge 6 sind 26=64 Codierungen mglich, von
denen 6 benutzt sind. Die 58 unbenutzten Codierungen haben Dont-Care als Folgezustand und Ausgabe und knnen somit zur Optimierung benutzt werden.

145

5.2 Endliche Automaten


Abb.5.41 Codierung des
Entprell-Automaten mit
redundanter Codewortlnge

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
-

Abb.5.42Ansteuerungstabelle des Entprell-Automaten fr One-Hot-Codierung

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:

Z n+1 (5) = X & Z n (4)


Z n+1 (4) = X & Z n (3)
Z n+1 (3) = X & Z n (1) & Z n (0)
Z n+1 (2) = X & Z n (1)
Z n+1 (1) = X & Z n (0)
Z n+1 (0) = X & Z n (4) & Z n (3)
Y = Z n (2) & Z n (1) &Z n (0)
Zwei Dinge fallen bei den Gleichungen auf:
Die Zustandsvariable Zn(5) wird nicht verwendet. Es sind also nur fnf Stellen des
Codeworts und damit auch nur fnf Flip-Flops ntig. Damit wird die Codierung zu
einer Zero-One-Hot-Codierung, allerdings mit anderer Zuordnung als in Abb.5.41.

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

Abb.5.43Schaltbild des Entprell-Automaten mit One-Hot-Codierung

5.2 Endliche Automaten

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.

Abb.5.44 Analyse der


Zustandsfolgetabelle zur
Optimierung

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

Abb.5.45 Codierung des


Entprell-Automaten mit
optimierter Codierung

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, die bei


X=1 folgen

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

Abb.5.46Schaltbild des Entprell-Automaten mit optimierter Codierung

Auch fr andere Automaten knnen oft optimierte Codierungen entsprechend der


Ausgabe oder der Folgezustnde gefunden werden.

5.2.4.4Vergleich der Codierungen


Um die Codierung der Zustnde und die Struktur des Automaten besser zu verstehen,
sollen hier noch einmal die drei Varianten verglichen werden:
Codierung mit minimaler Codewortlnge und einfacher Durchnummerierung der
Zustnde, Abb.5.40
Codierung mit redundanter Codewortlnge und One-Hot-Codierung, Abb.5.43
Codierung mit optimierter Zustandscodierung durch Analyse der Zustandsfolgetabelle, Abb.5.46

5.2 Endliche Automaten

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).

5.2.5 Entwurf von Mealy-Automaten


Der Entwurf eines Mealy-Automaten gleicht in weiten Teilen dem eines Moore-Automaten.

5.2.5.1Unterschied zum Moore-Automaten


Der wesentliche Unterschied beim Mealy-Automaten ist, dass die Ausgabe nicht von
den Zustnden sondern den Zustandsbergngen abhngt. Das bedeutet, im Zustandsfolgediagramm wird die Ausgabe nicht in die Zustandskreise, sondern an den Pfeilen der
Zustandsbergnge eingetragen (Abb.5.47).
Dieser Unterschied kommt daher, dass beim Mealy-Automat die Ausgabe ja auch
von den aktuellen Eingangswerten und nicht nur vom Zustand abhngt. Auch in der
Abb.5.47 Vergleich der
Zustandsfolgediagramme fr
Moore- und Mealy-Automat

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

Abb.5.48 Vergleich der


Zustandsfolgetabellen fr
Moore- und Mealy-Automat

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.

5.2.5.2Beispiel fr einen Mealy-Automaten


Am Anfang des Entwurfs steht wieder eine Spezifikation des Verhaltens. Als Beispiel
soll ein Mealy-Automat mit folgender Spezifikation entworfen werden:
Ein Automat soll die Anzahl von Takten mit dem Wert 1 halbieren. 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.

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.

5.2.5.3Aufstellen der Zustandsfolgetabelle


Um den Automat zu entwerfen, wird zunchst berlegt, welche Informationen sich der
Automat merken muss. Der Automat gibt nur jede zweite 1 am Eingang weiter und
unterdrckt die jeweils andere 1. Er muss sich also merken, ob die nchste 1 weitergegeben oder unterdrckt wird. Mit dieser Grundidee an Zustnden wird der Automat wieder
grafisch, durch das Aufstellen des Zustandsfolgediagramms entworfen.
Schritt 1
Es wird mit zwei Zustnden entsprechend obiger berlegung gestartet (Abb.5.50). Sie
erhalten den Namen next-0 und next-1 mit der Bedeutung:
Abb.5.49 Zeitdiagramm fr
Halbieren der 1-Werte

CLK
X
Y

5.2 Endliche Automaten

151

es
R
et

next-0

next-1

Abb.5.50Zustandsfolgediagramm zum Halbieren der 1-Werte Schritt 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

Abb.5.51Zustandsfolgediagramm zum Halbieren der 1-Werte Schritt 2

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.

5.2.5.4Implementierung des Mealy-Automaten


Nchster Schritt zur Implementierung ist die Codierung der Zustnde. Bei nur zwei
Zustnden ist ein Codewort mit nur einer Stelle erforderlich. Die Wahl der Codierung
lsst nicht viele Optionen zu und wird so gewhlt, dass next-0 mit Z=0 und next-1 mit
Z=1 codiert wird.
Nach Aufstellen der Ansteuerungstabelle kann der Automat mit einem Flip-Flop fr
den Zustandsspeicher, einem EXOR- sowie einem UND-Gatter implementiert werden
(Abb.5.53).
5.2.5.5Vereinfachte Darstellung des Zustandsfolgediagramms
Die Darstellung des Zustandsfolgediagramms muss natrlich nicht exakt den Beispielen
in Abb.5.35 oder 5.51 entsprechen. Wenn mehrere Eingabe- oder Ausgabewerte vorhanden sind oder die Zustandsbezeichnungen zu lang werden, kann ein Diagramm auch
unbersichtlich werden. Ziel sollte eine kompakte grafische Darstellung sein.

sn+1,Y
X=0

X=1

next-0 *
next-0, 0
next-1
next-1, 0
* = Reset

next-1, 0
next-0, 1

Abb.5.52Zustandsfolgetabelle zum Halbieren der 1-Werte


Zustandsbergangsfunktion

Speicherglied

Ausgangsfunktion

&
=1

Zn+1

Zn

D
C

CLK
RESET

Abb.5.53Schaltbild des Mealy-Automaten zum Halbieren der 1-Werte

5.2 Endliche Automaten

153

Einige Mglichkeiten zur vereinfachten Darstellung sind in Abb.5.54 dargestellt:


1. Ein- und Ausgnge mssen nicht mit X, Y bezeichnet werden, sondern knnen natrlich Abkrzungen entsprechend der Spezifikation haben, beispielsweise im Bild A1,
A2, P, T.
2. Eingangs- und Ausgangswerte mssen nicht stets neu benannt werden, sondern knnen in einer festen Reihenfolge angegeben werden. Eine empfohlene Reihenfolge ist:
Eingangswerte, Schrgstrich, Ausgangswerte
3. Wenn fr mehrere Eingangskombinationen derselbe Folgezustand eingenommen werden soll, kann dies an einen gemeinsamen bergangspfeil angetragen werden
4. Zustnde knnen einfach durchnummeriert werden (S0, S1, ) und die Bedeutung
wird als Liste dokumentiert.
Eine andere Vereinfachung ist fr die Zustandsbergnge mglich. Es kommt vor, dass
fr einen Zustandsbergang nur ein Teil der Eingangsvariablen beachtet werden muss.
Dies kann man darstellen, indem man die erforderliche Eingabe benennt (Abb.5.55,
links) oder die nicht erforderliche Eingabe mit X, fr Eingang beliebig bezeichnet
(Abb.5.55, rechts).
Wichtig ist, dass smtliche 2n Eingangskombinationen bei n Eingangswerten bercksichtigt sind. Auerdem darf ein Diagramm auch nicht kryptisch kurz werden. In der
Praxis muss man nach zwei Wochen, zwei Monaten oder zwei Jahren das Diagramm
immer noch lesen und verstehen knnen.

5.2.6 Vergleich von Mealy- und Moore-Automat


Anhand der vorgestellten Beispiele knnen die Charakteristika von Mealy- und MooreAutomat jetzt verglichen werden. Der Mealy-Automat hat mehr Mglichkeiten, denn
eine Ausgabe ist fr jeden bergangspfeil und nicht nur fr die Zustandskreise definiert.

Abb.5.54 Vereinfachte
Darstellung eines
Zustandsfolgediagramms

Abb.5.55 Zwei Varianten


zur Zusammenfassung von
Zustandsbergngen

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.

5.2 Endliche Automaten

155

5.2.7.2Moore-Automat mit Registerausgabe


Fr den Moore-Automaten kann eine Registerausgabe durch eine Vernderung des
Blockschaltbilds erreicht werden. Dies ist in Abb.5.56 dargestellt ist. Die nderung funktioniert so, dass die Ausgangsfunktion nicht mit der gespeicherten aktuellen
Zustandsvariable Zn rechnet, sondern mit der neuen Zustandsvariable Zn+1. Dadurch
liegt das Ergebnis Y* der Ausgangsfunktion bereits frher vor. Damit das gleiche Zeitverhalten wie im ursprnglichen Blockschaltbild entsteht, werden die Variablen Y* in
einer Registerstufe gespeichert und ergeben den Ausgang Y. Die Ausgangsfunktion wird
also vor die Flip-Flops geschoben und die Ausgabe zum Ausgleich durch Flip-Flops
gespeichert.
Beide Strukturen des Moore-Automaten sind quivalent, haben also die gleiche logische Funktion. Allerdings ist das Zeitverhalten anders. Durch das Verschieben der Ausgabefunktion gibt der Automat die Werte fr Y direkt aus Flip-Flops aus, was fr das
Taktkonzept gewnscht ist. Die nachfolgende Schaltung hat die komplette Zeit des Taktzyklus fr ihre Berechnungen.
Eine ausfhrliche Erluterung von Taktkonzept und Laufzeiten befindet sich in
Kapitel6.
5.2.7.3Beispiel fr Moore-Automat mit Registerausgabe
Der im Abschn.5.2.3 entworfene Moore-Automat zum Entprellen eines Signals wurde
auf Registerausgabe umgestellt. Als Ausgangsbasis wurde das Schaltbild in Abb.5.40
verwendet. Fr die Registerausgabe wird die Ausgangsfunktion vor die Speicherglieder
X
n

Zustandsbergangsfunktion

Zn+1

SpeicherGlieder
(Flip-Flops)

Zn

Ausgangsfunktion

Takt

Ausgangsfunktion

X
Zn

Zustandsbergangsfunktion

Y*

Zn+1

Takt

Abb.5.56Struktur des Moore-Automaten mit Registerausgabe

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

Abb.5.57Entprell-Automat mit Registerausgabe

R
Zn(2)

D
C

5.2 Endliche Automaten


Abb.5.58 Struktur des
Medwedew-Automaten

157
X
Z

Zustands- Zn+1 Speicher- Zn=Y


bergangsGlieder
funktion
(Flip-Flops)

Takt

5.2.8 Asynchrone Automaten


Eine weitere Form von Automaten sind asynchrone Automaten. Sie werden in der Praxis
sehr selten entworfen und daher wird hier nur kurz ihre prinzipielle Struktur erlutert.

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.

Abb.5.59 Struktur eines


asynchronen Automaten

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

Rckfhrung des Zustands ohne Flip-Flop

5.2.8.2Beispiel eines asynchronen Automaten


Das in Abschn.5.1.1 beschriebene RS-Flip-Flop ist ein Beispiel fr einen asynchronen
Automaten. Abb.5.60 zeigt erneut den Aufbau des RS-FFs (wie in Abb.5.3) mit den
Strukturelementen des asynchronen Automaten. Die Rckfhrung des Zustands Q erfolgt
ohne Verzgerung oder Flip-Flop.
5.2.8.3Einsatz
Der praktische Einsatz von asynchronen Automaten ist nicht einfach, denn beim Entwurf
sind wesentlich mehr Bedingungen zu beachten als bei synchronen Automaten.
Ein asynchroner Automat ist nur stabil, wenn die nderung einer Zustandsvariablen
nicht erneut zu immer weiteren nderungen von Zustandsvariablen fhrt. Ansonsten
kann der Automat zwischen verschiedenen Zustnden schwingen.
Die kombinatorische Schaltung darf keine kurzzeitigen Zwischenwerte ausgeben.
Ansonsten kann der Automat in einen falschen Zustand bergehen.
Aufgrund dieser Bedingungen sind asynchrone Automaten wesentlich schwieriger zu
entwerfen, denn Fehler beim Einhalten der Bedingungen lassen sich nur schwer entdecken. Das Risiko beim Entwurf eines asynchronen Automaten ist relativ hoch.
In der Praxis werden darum asynchrone Automaten so gut wie nicht entworfen. In der
Regel werden lediglich bewhrte und besonders geprfte Grundschaltungen eingesetzt,
wie zum Beispiel das RS-Flip-Flop.

5.3 Entwurf sequenzieller Schaltungen mit VHDL


5.3.1 Grundform des getakteten Prozesses
Der Entwurf sequenzieller Schaltungen erfolgt in VHDL mit einer besonderen Form
des bereits beschriebenen Prozesses. Der Prozess bentigt keine Sensitivity-Liste und
beginnt mit einem Wait-Statement fr die steigende Taktflanke. Dieses Wait-Statement
hat die Schreibweise wait until rising_edge(clk); und sagt aus, dass die nachfolgenden
Anweisungen nur bei einer steigenden Taktflanke ausgefhrt werden sollen. Nach dem
Wait-Statement steht der VHDL-Code, der bei der steigenden Taktflanke ausgefhrt werden soll.

5.3 Entwurf sequenzieller Schaltungen mit VHDL

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.

5.3.2 Erweiterte Funktion des getakteten Prozesses


Die Grundform des Prozesses erscheint zunchst relativ aufwendig, denn fr ein einzelnes Flip-Flop werden vier Zeilen VHDL-Code bentigt. Die Strke von VHDL liegt
darin, dass nach dem Wait-Statement weitere Funktionen beschrieben werden knnen.
Es sind If-Abfragen, Case-Bedingungen und logische Verknpfungen, auch ineinander
geschachtelt, mglich. Die Optimierung der Schaltung wird von einem Synthese-Programm bernommen.
Als immer noch kleines Beispiel wird eine berlauferkennung betrachtet. count ist
eine Zahl mit dem Wertebereich von 0 bis 15 und in VHDL als unsigned-Signal mit 4 bit
Wortbreite definiert. Eine Schaltung soll berprfen, ob der Zahlenwert grer als zehn
ist und das Ergebnis in einem Flip-Flop speichern. Dies knnte zum Beispiel anzeigen,
dass ein Speicher berluft.

Abb.5.61 Schaltung des in


VHDL beschriebenen D-FlipFlops

a
clk

D
C

160

5 Sequenzielle Schaltungen

signal count : unsigned(3 downto 0);


signal overflow : std_logic;

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.

5.3.3 Steuerleitungen fr Flip-Flops


Durch VHDL-Beschreibungen knnen auch die am Anfang dieses Kapitels in
Abschn.5.1.4 beschriebenen Erweiterungen des D-Flip-Flops realisiert werden, also
Reset, Set und Enable. Die Reset- und Set-Eingnge knnen entweder als synchrone
oder als asynchrone Eingnge implementiert werden. Fr die VHDL-Beschreibung wird
ein synchrones Rcksetzen der Schaltung empfohlen. Zum einen wird dies in der Praxis
meist verwendet, zum andern ist die VHDL-Beschreibung etwas einfacher.

5.3.3.1Synchroner Reset und Set


Der synchrone Reset und Set wird durch eine If-Abfrage des Steuersignals beschrieben.
Diese If-Abfrage folgt direkt nach der Wait-Anweisung und beschreibt erst das Verhalten
bei der Initialisierung und dann in der Else-Verzweigung die regulre Verarbeitung.
Der folgende VHDL-Code erzeugt zwei D-Flip-Flops, f mit synchronem Reset und g
mit synchronem Set. Beim Steuersignal wird blicherweise der Name reset verwendet,

Abb.5.62 Schaltung der


in VHDL beschriebenen
berlauferkennung

value(3)
value(2)

&

value(3)
value(1)
value(0)

&

clk

D
C

overflow

5.3 Entwurf sequenzieller Schaltungen mit VHDL

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;

Im Else-Zweig knnen, wie im Beispiel gezeigt, Berechnungen und Verknpfungen


programmiert werden. Fr den Reset-Fall sind jedoch nur feste Werte, also 0 oder 1
mglich. Der Grund hierfr ist, dass die VHDL-Beschreibung in eine digitale Schaltung
umgewandelt werden soll. Dabei wird der Reset-Wert fr die Auswahl des Flip-Flops
verwendet. Deswegen muss ein fester Wert vorhanden sein, anhand dessen entweder ein
Flip-Flop mit Reset oder Set verwendet wird.
Steht im Reset-Zweig die Anweisung f <= 0; wird ein Flip-Flop mit Reset erzeugt.
Steht im Reset-Zweig die Anweisung f <= 1; wird ein Flip-Flop mit Set erzeugt.
Steht im Reset-Zweig die Anweisung f <= a; oder f <= b or c; kann nicht entschieden werden, ob ein Flip-Flop mit Set oder Reset erzeugt wird. Stattdessen wird ein
Flip-Flop ohne Rcksetzfunktion erzeugt und die Funktion wird durch Logikgatter
umgesetzt. Dies ist normalerweise nicht erwnscht, wenn der VHDL-Code eine Initialisierung beschreibt.

5.3.3.2Asynchroner Reset und Set


Sequenzielle Schaltungen mit asynchronem Reset und Set werden durch einen VHDLProgrammierstil ohne Wait-Statement beschrieben. Stattdessen wird der Prozess mit
einer Sensitivity-Liste fr Takt und Steuersignal aufgerufen. Die Beschreibung der
sequenziellen Schaltung erfolgt durch eine If-Elsif-Abfrage. Das Reset-Verhalten wird
im If-Zweig, der Takt im Elsif-Zweig beschrieben. Die Syntax fr Reset und Set ist
gleich; die Unterscheidung erfolgt durch Zuweisung einer 0 oder 1.
Die Reihenfolge von If- und Elsif-Zweig entspricht der Prioritt, denn das asynchrone
Rcksetzen erfolgt ja unabhngig vom Takt. Die Takt-Abfrage folgt mit elsif, denn sie
wird nur ausgefhrt, wenn kein Reset anliegt.

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.

5.3 Entwurf sequenzieller Schaltungen mit VHDL

163

5.3.4 Entwurf von Automaten


Mit einem Prozess kann auch ein kompletter Automat beschrieben werden. Zuvor mssen das Zustandsfolgediagramm und die Zustandsfolgetabelle erstellt werden (vgl.
Abschn.5.2.3). Die weiteren Schritte, also Codierung der Zustnde und Generierung der
Logik wird dann durch VHDL-Beschreibung und Logiksynthese bernommen.

5.3.4.1Elemente der VHDL-Beschreibung


Im VHDL-Code wird die Funktion des Automaten nach der Wait-Anweisung beschrieben (vgl. Abschn.5.3.2). Auerdem erfolgt ein Reset des Automaten.
Eine Besonderheit ist die Beschreibung des Zustands. Es ist empfehlenswert, fr die
Speicherung des Zustands einen neuen, individuellen Datentyp zu definieren. Dies hat
zwei Vorteile:
Der VHDL-Code wird lesbarer.
Das Syntheseprogramm wei durch diese Beschreibung, dass ein Automat synthetisiert werden soll und kann die Schaltung optimieren.
Die Definition des Datentyps erfolgt in der Architecture mit dem Befehl:
type<type_name> is (value_0, value_1, );

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

Abb.5.63Zustandsfolgediagramm des Entprell-Automaten fr die VHDL-Beschreibung

164

5 Sequenzielle Schaltungen

typestate_type is (stabil_0, einmal_1, zweimal_1,


stabil_1, einmal_0, zweimal_0);
signal state:state_type;

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';

5.3 Entwurf sequenzieller Schaltungen mit VHDL

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.

5.3.4.2Kompletter VHDL-Code des Automaten


library ieee;
use ieee.std_logic_1164.all;
entity entprell is
port (clk:instd_logic;
reset:instd_logic;
x:instd_logic;
y:out std_logic);
end;
architecture behave of entprell is
typestate_type is (stabil_0, einmal_1, zweimal_1,
stabil_1, einmal_0, zweimal_0);
signal state:state_type;

begin
process
begin
wait until rising_edge(clk);
if reset = '1' then

state <= stabil_0;


y<= '0';
else
case state is
when stabil_0 =>
if x='0' thenstate <= stabil_0;y <= '0';

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';

stabil_0;y <= '0';


zweimal_1;y <= '0';

stabil_0;y <= '0';


stabil_1;y <= '1';

stabil_1;y <= '1';


einmal_0;y <= '1';

stabil_1;y <= '1';


zweimal_0;y <= '1';

stabil_1;y <= '1';


stabil_0;y <= '0';

5.3.5 Programmierstile fr VHDL-Code


Wie in jeder Programmiersprache sind auch fr VHDL verschiedene Programmierstile
mglich. Wir haben einen Programmierstil gewhlt, der gut lesbar und wenig fehleranfllig ist. In der Praxis werden Sie sicherlich auch VHDL-Code in anderer Schreibweise
begegnen. Fr den Einstieg in VHDL empfehlen wir, zunchst bei einer Schreibweise zu
bleiben.
Der VHDL-Code wird durch ein Syntheseprogramm in eine Schaltung umgewandelt.
Heutige Syntheseprogramme sind so intelligent, dass sie fr die meisten Programmierstile eine kompakte und schnelle Schaltung erzeugen.
In der Praxis gibt es innerhalb grerer Entwicklerteams oft eigene Richtlinien fr
Programmierstile, damit von verschiedenen Personen geschriebener Code nicht zu inhomogen wird.

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:



M=00 Motor ausgeschaltet


M=01 Motor fhrt herunter
M=10 Motor fhrt herauf
M=11 nicht zulssig

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:



20 Cent, 20 Cent, 10 Cent


50 Cent
20 Cent, 20 Cent, 20 Cent (10 Cent verfallen)
20 Cent, 50 Cent (ungeschickte Reihenfolge, 20 Cent verfallen)

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.

&/.
'
(

Abb.5.65 Zeitdiagramm fr die Fehlererkennung mit Parity-Stelle

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.

6.1 Grundstrukturen digitaler Schaltungen


Wenn Sie die hier gezeigten Grundstrukturen kennen, knnen Sie oft eine digitale
Schaltung direkt aus diesen Strukturen zusammenstellen. Sie sparen sich damit mglicherweise den allgemeinen Entwurfsweg ber Funktionstabelle oder Zustandsfolgediagramm. In Abschn.6.5.2 wird hierzu ein ausfhrliches Beispiel gezeigt.

6.1.1 Top-down Entwurf


Grere Digitalschaltungen werden Top-down entworfen, also von oben nach unten.
Damit ist gemeint, dass eine Schaltung schrittweise in immer kleinere Teile aufgeteilt
wird. Das Gesamtsystem besteht also aus Teilschaltungen, die auch als Untermodul
bezeichnet werden. Die Untermodule knnen wiederum aus weiteren Untermodulen
zusammengesetzt sein. Auf dem untersten Schritt der Aufteilung befinden sich Grund
elemente. Dies knnen Schaltungsstrukturen dieses Kapitels sein, aber auch Automaten
(Kapitel4) oder einzelne Gatter und Flip-Flops.

Springer-Verlag GmbH Deutschland 2016


W. Gehrke et al., Digitaltechnik, Springer-Lehrbuch,
DOI10.1007/978-3-662-49731-9_6

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.

6.1.2 Darstellung von Schaltungsstrukturen


In den bisherigen Kapiteln wurden bereits grafische Symbole (Schaltzeichen) fr die
Darstellung von Schaltungselementen verwendet. Gemeint sind die rechteckigen Ksten,
bei denen sich die Eingnge auf der linken Seite und die Ausgnge auf der rechten Seite
befinden. An der oberen und unteren Kante knnen sich Steuersignale befinden.
Auch fr Schaltungsstrukturen werden solche Schaltzeichen verwendet. Es gibt eine
standardisierte Darstellung, die in Abb.6.1 zu sehen ist. Die Eingnge sind links, die Ausgnge rechts angeordnet. Der obere Block erhlt Steuersignale, welche die Datensignale
beeinflussen. Der untere Block umfasst die Datensignale. Dabei trennt ein horizontaler
Strich unabhngige Datensignale voneinander. Abkrzungen und Symbole bei * und **
geben die Funktion an.
Die Verwendung dieser Darstellung ist in der Praxis allerdings sehr uneinheitlich.
Englischsprachige Quellen verwenden die Symbole kaum und darum findet sich auch in
Deutschland oft eine einfachere Darstellung. Meist wird ein einfaches Rechteck verwendet und die Funktion durch eine Beschriftung verdeutlicht.

Abb.6.1 Standardisierte
Darstellung eines
Schaltungselements

A
B

**

D(0)
D(1)
D(2)

Y(0)
Y(1)
Y(2)

6.2 Kombinatorische Grundstrukturen

175

6.2 Kombinatorische Grundstrukturen


6.2.1 Multiplexer
Eine wichtige Grundstruktur fr kombinatorische Schaltungen ist der Multiplexer, kurz
Mux. Abhngig von Steuersignalen wird einer von mehreren Eingngen ausgewhlt
und auf den Ausgang gegeben. Je nach Anzahl der Auswahlmglichkeiten sind ein oder
mehrere Steuerleitungen erforderlich.
1-aus-2-Multiplexer: Fr zwei Dateneingnge ist eine Steuerleitung erforderlich
1-aus-4-Multiplexer: Fr vier Dateneingnge sind zwei Steuerleitungen ntig, denn
die zwei Steuerleitungen knnen vier Mglichkeiten anzeigen
1-aus-8-Multiplexer: Fr acht Dateneingnge sind drei Steuerleitungen ntig
Auch Multiplexer fr mehr Eingnge sind mglich. Mit n Steuerleitungen kann aus 2n
Eingngen ausgewhlt werden.
Das Schaltsymbol fr einen 1-aus-4-Multiplexer ist in Abb.6.2 dargestellt. Links
befindet sich das Symbol in der standardisierten Darstellung mit dem Steuerblock und
den zwei Steuerleitungen A(1:0). Entsprechend der Werte an A wird einer der vier Dateneingnge D(3:0) ausgewhlt und an den Ausgang Y gegeben. In der Mitte ist ein vereinfachtes Symbol dargestellt, welches in der Praxis hufig verwendet wird.
Ebenfalls in Abb.6.2 gezeigt ist die Funktionstabelle fr den 1-aus-4-Multiplexer. Die
Leitung A gibt als Binrzahl an, welcher Eingangswert auf Y geschaltet wird. Es wird
als ein Datenwert ausgewhlt und die Schaltung wird darum auch als Datenselektor
bezeichnet.
VDHL-Beschreibung
Ein Multiplexer kann durch das bereits bekannte Case-Statement erzeugt werden. Als
Bedingung wird das Steuersignal a verwendet. Im Code sind die Signale definiert als:
a : std_logic_vector(1 downto 0);
d : std_logic_vector(3 downto 0);
y : std_logic;

Abb.6.2 Symbole und


Funktionstabelle fr 1-aus-4Multiplexer

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

Abb.6.3 Symbol und


Funktionstabelle fr 1-auf-4Demultiplexer

A(0)
A(1)
D

Abb.6.4 Multiplexer und


Demultiplexer

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)

6.2 Kombinatorische Grundstrukturen


Abb.6.5 Funktionstabelle
eines Adressdecoders fr 8
Leitungen

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

auswhlt. Die Schaltung entspricht exakt einem 1-auf-8-Demultiplexer des Datensignals G.


Je nach Anwendungsgebiet ist die Bezeichnung als Adressdecoder jedoch verstndlicher.
VHDL-Beschreibung
Auch der Demultiplexer kann durch ein Case-Statement erzeugt werden. Zunchst
werden alle Ausgangssignale y auf 0 gesetzt. Der Eingang d wird dann einer der vier
Ausgangsleitungen zugewiesen und damit fr diesen Ausgang die Zuweisung der Null
wieder berschrieben. Da die zwei Zuweisungen nacheinander innerhalb eines Prozesses
ausgefhrt werden, hat die erste Zuweisung fr die Hardware-Synthese keine Wirkung.
Am ausgewhlten Ausgang wird also nicht kurzzeitig eine 0 (erste Zuweisung) und
danach auf der Wert von d (zweite Zuweisung) zu beobachten sein.
Die Signale sind definiert als:
a : std_logic_vector(1 downto 0);
d : std_logic;
y : std_logic_vector(3 downto 0);
y <= "0000";
case a is
when "00"=>
when "01"=>
when "10"=>
when others =>
end case;

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

6.2 Kombinatorische Grundstrukturen

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

Abb.6.7Ripple-Carry-Addierer fr Binrzahlen mit 8 Stellen

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)

Abb.6.8 Symbol und


Funktionstabelle fr einen
Volladdierer

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;

6.3 Sequenzielle Grundstrukturen


6.3.1 Zhler
Zhler sind wichtige Grundschaltungen, um Ablufe in digitalen Schaltungen zu steuern.
Dabei wird als Grundoperation eine Binrzahl mit jedem Takt um eins erhht. Auch ein
Rckwrtszhlen ist mglich, aber nicht so anschaulich. Gezhlt wird stets ab dem Wert
Null, also nicht ab Eins.
Die meisten Zhler beginnen nach Erreichen des letzten Ausgabewertes automatisch
wieder beim ersten Ausgabewert, also der Null. Man bezeichnet dies als Modulo-m Zhler, wobei m die Anzahl der Zustnde ist.
Beispielsweise zhlt ein Modulo-5 Aufwrtszhler 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1,
Besonders einfach sind Modulo-2n Zhler. Sie durchlaufen alle n-stelligen Binrzahlen. Um alle 10-stelligen Binrzahlen zu durchlaufen wird ein Modulo-210 Zhler eingesetzt. Er luft von 0 bis 1023 und startet danach wieder bei 0.
Diese Grundfunktion kann verndert und durch verschiedene Steuersignale erweitert
werden.
Enable: Der Zhler geht nur zum nachfolgenden Wert, wenn ein Steuereingang enable=1 ist.
Clear: Der Zhler springt wieder auf den Startzustand. Dies entspricht einem Reset.
Load: Der Zhler ldt auf einen Wert von einem Eingang.
Up/Down: Die Zhlrichtung kann gewhlt werden, das heit der Zhler zhlt auf
Wunsch in die negative Richtung.
Kein automatischer Neustart, das heit der Zhler hlt beim Erreichen des Maximalwerts an und startet erst nach Clear erneut.
Ein ausfhrliches Beispiel fr die Verwendung von Zhlern folgt in Abschn.6.5.2.
Implementierung
Ein Zhler wird mit der gleichen Struktur wie ein Moore-Automat implementiert. Der
aktuelle Zhlerstand ist in Flip-Flops gespeichert und aus diesem Wert sowie den Steuersignalen berechnet eine kombinatorische Schaltung den nchsten Zhlerstand (Abb.6.9).

6.3 Sequenzielle Grundstrukturen

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

Abb.6.11Schieberegister zur Parallel-Seriell-Wandlung

M
U
X

serieller
Datenausgang
D
C

D(n)

6.3 Sequenzielle Grundstrukturen

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;

6.3.3 Rckgekoppeltes Schieberegister


Bei einem rckgekoppelten Schieberegister werden einige Stellen XOR-verknpft und wieder in das Schieberegister gegeben. Die englische Bezeichnung hierfr ist Linear Feedback
Shift Register oder LFSR. Abb.6.12 zeigt ein LFSR mit 4 Stellen. Die Daten an Position 3
und 4 werden XOR-verknpft und wieder an Position 0 in das Schieberegister gegeben.
Bei geeigneter Wahl der Rckkopplung werden bei einem n-Bit-Schieberegister 2n1
verschiedene Zustnde durchlaufen. Von den 2n mglichen Kombinationen treten also
smtliche Werte auf, ausgenommen alle Stellen auf 0. Die Werte treten dabei nicht in der

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.4.2 Transiente Signalzustnde


Beim Wechsel einer oder mehrerer Eingangsvariablen treten aufgrund der Verzgerungszeiten oft kurze Zwischenzustnde auf. Diese werden als Spike, Glitch oder Hazard bezeichnet.
Zum besseren Verstndnis wird die Schaltung in Abb.6.13 betrachtet. Bei ihr wechselt der mittlere Eingang von 1 auf 0. Fr beide Eingangswerte ist der Ausgang Y auf 1.
Durch Verzgerungszeiten der Gatter kann jedoch ein kurzzeitiger Spike am Ausgang Y
auftreten. Dieser entsteht durch den folgenden Ablauf:

6.4Zeitverhalten

185

1
1 0
1

&

1 0
1

&
0 1

1
0
1
Y, real
0

Y , ideal

Abb.6.13Spike beim Wechsel eines Eingangssignals

Der mittlere Eingang wechselt von 1 auf 0.


Das obere UND-Gatter wechselt dadurch von 1 auf 0.
An beiden Eingngen des ODER-Gatters liegt 0 an und der Ausgang ist kurzzeitig 0.
Das untere UND-Gatter ist durch den vorgeschalteten Inverter etwas langsamer als
das obere UND-Gatter und wechselt spter von 0 auf 1.
Der untere Eingang des ODER-Gatters wird 1 und der Ausgang wird wieder 1.

6.4.3 Signalbergnge inkomplexen Schaltungen


Bei komplexen Schaltungen knnen auch mehrere bergnge auftreten, bis der endgltige Ausgangswert erreicht ist. Dies lsst sich beim Ripple-Carry-Addierer aus Abb.6.7
gut nachvollziehen. Eine Summenstelle hngt von den Eingangswerten der aktuellen
Stelle sowie von allen tieferen Stellen ab. Summenstelle S(6) beispielsweise hngt von
A(6) und B(6) sowie dem bertrag aus allen vorherigen Stellen also A(5) bis A(0) und
B(5) bis B(0) ab. Wenn zwei neue Zahlen fr die Berechnung am Addierer anliegen, liegt
an Stelle 6 die Information von A(6) und B(6) sofort an. Die Informationen aus den vorherigen Stellen mssen jedoch erst durch mehrere Volladdierer weitergegeben werden
und treffen spter an der Stelle 6 ein.
Als ein Beispiel werden die Signalwechsel des Ripple-Carry-Addierers simuliert. An
den Eingngen A und B liegen zunchst die Werte 8510 und 17010, also binr 010101012
und 101010102 an. Dann wechseln die Werte auf 17110 und 8510, binr 101010112 und
010101012. Als Verzgerungszeit fr einen Volladdierer wird 0,3ns angenommen.
Auerdem wird angenommen, dass der Eingang B eine etwas lngere Anschlussleitung
und dadurch eine zustzliche Laufzeit von 0,1ns hat.
Das Ergebnis der Simulation ist in Abb.6.14 zu sehen. Die Summe wechselt von
25510 auf 25610, binr von 0111111112 auf 1000000002. Durch die schrittweise Verarbeitung des bertrags wechseln die hheren Summenausgnge S mehrfach den
Wert.

186

6Schaltungsstrukturen

Abb.6.14Simulation eines Ripple-Carry-Addierers (VHDL-Simulator Modelsim)

6.5 Taktkonzept inrealen Schaltungen


6.5.1 Register-Transfer-Level (RTL)
Der mehrfache Wechsel von Signalzustnden lsst sich in Digitalschaltungen kaum vermeiden. Er stellt aber auch kein Problem dar, denn fast alle Schaltungen werden durch
einen Takt gesteuert. Das allgemeine Taktkonzept ist in Abb.6.15 dargestellt. Die Eingangssignale einer Schaltung werden zunchst in Flip-Flops gespeichert. Die Flip-FlopAusgnge werden dann in einer kombinatorischen Schaltung verarbeitet. Dabei knnen
mehrfache Signalwechsel auftreten. Wenn alle Wechsel der kombinatorischen Schaltung
erfolgt sind, werden die Informationen in einer zweiten Flip-Flop-Stufe gespeichert. Von
dort werden die Daten in der nachfolgenden Taktperiode an die nchste kombinatorische
Schaltung gegeben, nach der sich erneut eine Flip-Flop-Stufe befindet.
Die Flip-Flop-Stufen werden auch als Register bezeichnet und als kompakte Darstellung das in Abb.6.15 gezeigte Schaltsymbol verwendet. Das Taktkonzept bezeichnet
man als Register-Transfer und diese Schaltungsstruktur ermglicht ein sicheres Arbeiten

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

6.5 Taktkonzept in realen Schaltungen

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.

6.5.2 Beispiel fr Entwurf mit Register-Transfer-Level: Ampelsteuerung


Der Entwurf im Register-Transfer-Level, kurz RTL-Design, wird mit einem ausfhrlichen
Beispiel verdeutlicht. Dabei werden auch die Grundstrukturen aus Abschn.6.3 verwendet.
Aufgabenstellung
Eine Fugngerampel soll durch eine Digitalschaltung angesteuert werden. Die Strae
hat eine Ampel mit drei Lichtzeichen Rot, Gelb, Grn und der Fugngerberweg
eine Ampel mit zwei Lichtzeichen Rot, Grn (Abb.6.16). Um die Schaltung einfach
zu halten, sollen keine Tasten ausgewertet werden, sondern stets folgender Ablauf
stattfinden:






10 s grn fr die Strae


1 s gelb fr die Strae
1 s rot fr die Strae
5 s grn fr die Fugnger
2 s rot fr die Fugnger
1 s rot und gelb fr die Strae
Zyklus beginnt erneut

Fr eine echte Fugngerampel wre diese Steuerung sicher zu einfach, deswegen


nehmen wir an, die Schaltung sei fr eine Modelleisenbahn.
Die Digitalschaltung verwendet einen Takt mit der Frequenz 50MHz.

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;

6.5 Taktkonzept in realen Schaltungen


architecture behave of ampel is
signalenable: std_logic;
signalcount_a : unsigned(25 downto 0);
signalcount_b : unsigned(4 downto 0);
begin
process
begin
wait until rising_edge(clock_50);
-- Zhler fr
if count_a >=
count_a <=
enable<=
else
count_a <=
enable<=
end if;

1 Impuls je Sekunde
49999999 then
(others => '0');
'1';
count_a + 1;
'0';

-- Zhler fr 20 Schritte der Ampel


if enable = '1' then
if count_b >= 19 then
count_b <= (others => '0');
else
count_b <= count_b + 1;
end if;
end if;
-- Abfrage fr Lichter der Ampel
ifcount_b < 10 then
-- 10 Sekunden grn fr Strae, rot fr Fussweg
strasse <= "001"; fussweg <= "10";
elsifcount_b < 11 then
-- 1 Sekunde gelb fr Strae
strasse <= "010"; fussweg <= "10";
elsifcount_b < 12 then
-- 1 Sekunde rot fr Strae
strasse <= "100"; fussweg <= "10";
elsifcount_b < 17 then
-- 5 Sekunden grn fr Fuweg
strasse <= "100"; fussweg <= "01";
elsifcount_b < 19 then
-- 2 Sekunden rot fr Fuweg

189

190

6Schaltungsstrukturen

strasse <= "100"; fussweg <= "10";


else
-- 1 Sekunde rot/gelb fr Strae
strasse <= "110"; fussweg <= "10";
end if;
end process;
end;

6.5.3 Kritischer Pfad


Die Speicherung in einer Flip-Flop-Stufe darf erst erfolgen, wenn alle Wechsel der kombinatorischen Schaltung abgelaufen sind. Hierfr muss die maximale Verzgerungszeit der kombinatorischen Schaltung berechnet werden. Der langsamste Weg durch die
Schaltung wird als kritischer Pfad bezeichnet. Ein Pfad beginnt bei einem Flip-FlopAusgang und endet bei einem Flip-Flop-Eingang.
Als Beispiel ist in Abb.6.17 der kritische Pfad eines Ripple-Carry-Addierers dargestellt (vergleiche Abb.6.7). Die Summanden A und B sowie die Summe S werden entsprechend der RTL-Methodik in Flip-Flop-Stufen gespeichert. Der kritische Pfad beginnt
bei der untersten Stelle eines Summanden und endet bei der hchsten Stelle des Ergebnisses. Dazwischen mssen die acht Volladdierer des Ripple-Carry-Addierers durchlaufen werden.
Fr die Verzgerungszeit des kritischen Pfads werden die Verzgerungszeiten aller
Gatter sowie die Signallaufzeiten der Leitungen addiert. Auerdem hat auch der Ausgang
des Flip-Flops am Start des Pfads eine Verzgerungszeit. Beim Flip-Flop am Ende des
Pfads muss die Setup-Zeit eingehalten werden, also die Zeit vor der steigenden Taktflanke, in der das Eingangssignal stabil sein muss (siehe Kapitel5).
Als ein Beispiel wird der kritische Pfad des Ripple-Carry-Addierers berechnet. Dazu
werden folgende Verzgerungszeiten angenommen.
Verzgerungszeit eines Volladdierers: 0,3ns
Setup-Zeit eines Flip-Flops: 0,2ns

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

Abb.6.17Kritischer Pfad eines Ripple-Carry-Addierers

6.5 Taktkonzept in realen Schaltungen

191

Verzgerungszeit von Takt nach Flip-Flop-Ausgang: 0,2ns


Laufzeit einer Leitung: 0,1ns
Fr einen 8-Bit-Addierer besteht der kritische Pfad dann aus:



Flip-Flop-Ausgang: 0,2ns
8 Volladdierer: 80,3ns=2,4ns
9 Verbindungsleitungen: 90,1ns=0,9ns
Flip-Flop Setup-Zeit: 0,2ns

Dies ergibt in Summe 3,7ns.


Fr einen 32-Bit-Addierer mssen 32 Volladdierer und 33 Verbindungsleitungen
bercksichtigt werden. Der kritische Pfad betrgt dann 13,3ns.
In der Praxis wird der kritische Pfad durch Entwurfsprogramme ermittelt, indem
smtliche Pfade der Schaltung berechnet werden. In Abb.6.17 knnte auch der andere
Eingang des ersten Volladdierers sowie der andere Ausgang des letzten Volladdierers
Anfang und Ende des kritischen Pfads sein. Dies hngt von den Verbindungsleitungen
und dem inneren Aufbau der Volladdierer ab.

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

Taktfrequenz und kritischer Pfad


Die Analyse des kritischen Pfads und der Vergleich mit der geforderten Taktfrequenz zeigen, ob die Geschwindigkeitsanforderungen an die Schaltung eingehalten werden. Wenn
die Geschwindigkeit ausreicht, ist normalerweise keine weitere Optimierung erforderlich. Falls der kritische Pfad jedoch lnger als die verfgbare Zeit ist, muss die Schaltung
optimiert werden.
Zur Verkrzung des kritischen Pfads kann berlegt werden, ob die Verarbeitung einfacher aufgebaut oder in mehr Teilschritte aufgeteilt werden kann.
Beispielsweise wird in der Ampelsteuerung aus Abschn.6.5.2 ein Zhler bis 50Mio.
eingesetzt. Falls dieser Zhler nicht mit der geforderten Taktfrequenz arbeitet, knnte er
in zwei nacheinander geschaltete Zhler bis 10.000 und 5.000 aufgeteilt werden.
Einfgen von Flip-Flop-Stufen
Wenn eine Schaltung nicht umstrukturiert werden kann oder soll, lsst sich durch das
Einfgen von Flip-Flop-Stufen die Verarbeitungsgeschwindigkeit erhhen. Dies wird als
Pipelining bezeichnet und in digitalen Schaltungen sehr hufig eingesetzt.
Abb.6.18 zeigt das Einfgen einer Pipeline-Stufe. Die kombinatorische Logik wird
durch einen Schnitt aufgeteilt und in smtliche Verbindungsleitungen werden FlipFlops eingefgt. Wichtig ist, dass tatschlich alle Signale gleich verzgert werden, da
die Informationen sonst zeitlich gegeneinander verschoben wren. In Abb.6.18 wird die

&

&
&

&

&
1

&

CLK

&

&
&

CLK

Abb.6.18Einfgen einer Pipeline-Stufe

&

&
1

&

6.5 Taktkonzept in realen Schaltungen

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 CPU arbeitet mit einem Takt zwischen 3 und 4 GHz.


Der DRAM-Speicher arbeitet mit einem Takt im Bereich von 1 GHz.
Die Grafikkarte arbeitet mit einem Takt zwischen 500 und 1000 MHz.
Peripheriebausteine fr LAN und USB nutzen eigene Taktsignale.

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

Abb.6.19 Schaltung zur


Flankenerkennung

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

6.5 Taktkonzept in realen Schaltungen

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;

6.5.6 Metastabilitt von Flip-Flops


Ein weiteres Problem bei der Taktbernahme ist die Einhaltung der Setup- und HoldZeiten (siehe Kapitel5). Damit ein Flip-Flop Daten korrekt bernimmt, muss der Eingang kurz vor (Setup) bis kurz nach (Hold) der Taktflanke unverndert sein. Wenn sich
Daten unabhngig vom Takt ndern, wird diese Bedingung nicht immer eingehalten.

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.

6.5.7 Taktbergang mehrerer Signale


Schwieriger ist der Fall, wenn mehrere Signale gleichzeitig bernommen werden mssen. Wenn sich Daten unabhngig vom Empfangstakt ndern, ist nicht sicher, ob alle
zusammengehrigen Informationen mit der gleichen Taktflanke gespeichert werden. Bei
einem 8-Bit-Wert knnte es beispielsweise passieren, dass Bit 0 noch rechtzeitig von
einer Taktflanke bernommen wird, Bit 1 jedoch erst von der nchsten Taktflanke. Dies
ist ein Problem, da die Informationen eines Datenworts so auseinandergezogen werden.
Zur Vermeidung dieses Fehlers gibt es mehrere Mglichkeiten:
Warten auf langsamste Information: Die empfangende Schaltung kann ein oder zwei
Takte warten, bis alle Stellen einer Information anliegen und erst dann die Daten auswerten. Dies ist relativ einfach, aber nur mglich, wenn sich die Daten deutlich langsamer als der Takt ndern.

6.6 Spezielle Ein-/Ausgangsstrukturen

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 Spezielle Ein-/Ausgangsstrukturen


Fr Ein- und Ausgnge von digitalen Schaltungen gibt es spezielle Schaltungsstrukturen.

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.

Abb.6.23 Symbol und


Zeitverhalten eines SchmittTriggers

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.24 Symbol fr TriState- und Open-KollektorAusgang

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

6.6 Spezielle Ein-/Ausgangsstrukturen

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

d) Hchstfrequenz eines Taktsignals


e) Verzgerungszeit bei Flip-Flops
Aufgabe 6.5
Wie bezeichnet man den langsamsten Weg durch eine kombinatorische Schaltung?
a) Periodendauer
b) Hold-Zeit
c) Zyklus
d) Setup-Zeit
e) Kritischer Pfad
Aufgabe 6.6
Wie viele Signalleitungen (Ein-/Ausgnge, keine Versorgungsspannung/Masse) hat ein
1-aus-4 Multiplexer/Datenselektor?
a) 9
b) 5
c) 7
d) 4
e) 6
Aufgabe 6.7
Wie viele Signalleitungen (Ein-/Ausgnge, keine Versorgungsspannung/Masse) hat ein
1-auf-8 Demultiplexer?
a) 8
b) 10
c) 11
d) 12
e) 9
Aufgabe 6.8
Ein Modulo-2^10 Zhler hat einen Takt von 50MHz. Wie viele Zhlzyklen schafft der
Zhler pro Sekunde (gerundet)?
a) 5.000.000
b) 50.000
c) 50.000.000
d) 2.000
e) 100.000.000

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.

Realisierung digitaler Systeme

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.

Springer-Verlag GmbH Deutschland 2016


W. Gehrke et al., Digitaltechnik, Springer-Lehrbuch,
DOI10.1007/978-3-662-49731-9_7

203

204

7 Realisierung digitaler Systeme

7.1 Standardisierte Logikbausteine


Unter Standardlogik-Bausteinen werden Komponenten verstanden, die kuflich zu
erwerben sind und eine einfache digitale Hardware-Funktion zur Verfgung stellen, welche durch den Anwender nicht modifiziert werden kann.
Standardlogik-Bausteine sind in Bausteinfamilien bzw. -serien zusammengefasst. Die
wichtigsten Familien sind die sogenannte 4000er-Serie sowie die 7400er-Serie (bzw.
kurz 74er-Serie). Die Bezeichnung dieser Familien geht auf die Kennzeichnung der
zugehrigen Schaltkreise zurck. So beginnt die Bezeichnung eines Bausteins der 74erSerie immer mit der Zahl 74. Diese wird meist von mehreren Buchstaben gefolgt, die
die Implementierungstechnologie und damit auch einige Eigenschaften (zum Beispiel
Logikpegel) des Bausteins beschreiben. Eine abschlieende Zahl kennzeichnet die logische Funktion. So besitzen ein 74HC374 und ein 74LVC374 zwar die gleiche logische
Funktion (acht D-Flip-Flops), aber ein unterschiedliches Zeitverhalten und unterschiedliche elektrische Eigenschaften.
Als ein Vertreter der 74er-Familie ist in Abb.7.1 der Baustein 74HC04 abgebildet,
welcher sechs Inverter enthlt. Die Buchstaben SN stehen fr den Hersteller und das N
am Ende der Bausteinkennzeichnung gibt die Gehuseform an.
In den 1970er Jahren wurden die Standardlogik-Bausteine noch zur Realisierung von
Computern eingesetzt. Die hiermit verbundenen Nachteile liegen auf der Hand: Groe
Bauform, hohe Kosten, groe Verlustleistung. Die damaligen Computer waren so gro
wie Kleiderschrnke, hatten eine Stromaufnahme, die mit mehreren hundert heutiger
PCs vergleichbar ist und boten fr 6-stellige Dollar-Betrge eine Rechenleistung, fr die
heute vermutlich niemand auch nur einen Euro bezahlen wrde.

Abb.7.1 Baustein 74HC04:


Sechs Inverter in einem
gemeinsamen Gehuse

7.1 Standardisierte Logikbausteine

205

Obwohl die Standardlogik-Komponenten heute keine Bedeutung fr die Realisierung


ganzer Systeme mehr haben, haben sie dennoch ihre Daseinsberechtigung. Sie werden
zum Beispiel dann eingesetzt, wenn einfache logische Funktionen mithilfe von ein paar
wenigen Gattern realisiert werden sollen. Ebenso knnen einige dieser Bausteine auch
als Leitungstreiber oder zur Pegelanpassung zwischen Komponenten mit unterschiedlichen Versorgungsspannungen eingesetzt werden.
Zur Verdeutlichung, welche logischen Funktionen in der 74er-Serie zur Verfgung
stehen, sind einige ausgewhlte Funktionen in Tab.7.1 zusammengestellt. Eine umfassende Dokumentation der verfgbaren digitalen Funktionen kann von den Herstellern
(Texas Instruments, NXP, STM, u.v.a.) bezogen werden.
Die ersten Standard-Logikbausteine der 74er-Serie wurden mithilfe von BipolarTransistoren realisiert. Inzwischen hat auch in diesem Bereich die CMOS-Technologie (vgl. Kapitel10) die reine bipolare Implementierung verdrngt. Einige Familien
werden auch mit einer Kombination von bipolaren und MOS-Transitoren realisiert.
Die Eingnge sowie die logische Funktion werden dann mithilfe der CMOS-Technik
Tab.7.1Ausgewhlte Logikfunktionen der 74er-Serie
Baustein
(letzte Ziffern)

Funktion

00

4 NAND2

02

4 NOR2

04

6 Inverter

07

6 Treiber/Buffer (mit OC-Ausgang)

08

4 AND2

10

3 NAND3

25

2 NOR4

46

BCD nach Siebensegment Decoder

74

2 D-Flip-Flops mit Set- und Reset-Eingngen

138

3:8 Demultiplexer/Decoder

148

8:3 Priorittsencoder

165

8 Bit Parallel-In/Serial-Out Schieberegister

190

4 Bit Aufwrts-/Abwrtszhler

244

8 Bit Leitungstreiber mit Tristate-Ausgngen

245

8 Bit Bidirektionaler Bustreiber mit Tristate-Ausgngen

373

8 pegelgesteuerte D-Flip-Flops mit Tristate-Ausgngen

374

8 flankengesteuerte D-Flip-Flops mit Tristate-Ausgngen

573

8 pegelgesteuerte D-Flip-Flops mit Tristate-Ausgngen

574

8 flankengesteuerte D-Flip-Flops mit Tristate-Ausgngen

595

8 Bit Serial-in/Parallel-out Schieberegister mit Tristate-Ausgngen

206

7 Realisierung digitaler Systeme

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.1 Charakteristische Eigenschaften digitaler Schaltkreise


Bevor ein Baustein fr den Entwurf eines digitalen Systems ausgewhlt wird, mssen
dessen Merkmale bekannt sein. In den Datenblttern integrierter Schaltungen wird meist
eine Reihe von Kenndaten angegeben, die die Eigenschaften des Bausteins beschreiben.
Neben dem erlaubten Versorgungsspannungsbereich sind unter anderem die Pegel sowie
die zulssigen Strme an Ein- und Ausgngen von Bedeutung (vgl. Abb.7.2).
Fr diese Parameter definieren die Datenbltter die zulssigen Wertbereiche. Einige
der wichtigsten Parameter sind in Tab.7.2 zusammengefasst. Die Formelzeichen entsprechen denen, die in englischsprachigen Datenblttern verwendet werden. Daher wird hier
der Buchstabe V als Formelzeichen fr die elektrische Spannung verwendet.

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

Abb.7.2Anschlussbezeichnung digitaler Schaltungen

207

7.1 Standardisierte Logikbausteine


Tab.7.2Wichtige Parameter zur Charakterisierung digitaler Schaltkreise
Formelzeichen Bedeutung

Bemerkungen

GND

Masse

Alternative Bezeichnung: VSS

VDD

Versorgungsspannung

Alternative Bezeichnung: VCC

VI

Eingangsspannung

II

Eingangsstrom

VO

Ausgangsspannung

IO

Ausgangsstrom

VI,Hmin

Minimale Eingangsspannung, die als


High-Pegel erkannt wird

VI,Lmax

Maximale Eingangsspannung, die als


Low-Pegel erkannt wird

II,H

Eingangsstrom bei High-Pegel

Abhngig von Versorgungsspannung

II,L

Eingangsstrom bei Low-Pegel

Bei CMOS-Schaltkreisen meist


vernachlssigbar

VO,Hmin

Garantierte minimale Ausgangsspannung


bei High-Pegel

Abhngig von Versorgungsspannung


und Ausgangsstrom

VO,Lmax

Garantierte maximale Ausgangsspannung


bei Low-Pegel

IO,Hmax, IO,Lmax Maximal zulssiger Ausgangsstrom bei


High- bzw. Low-Pegel

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

7 Realisierung digitaler Systeme

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

7.1 Standardisierte Logikbausteine


Abb.7.4 Verzgerungszeiten
einer digitalen Schaltung am
Beispiel eines Inverters

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)

tT (ns) tP (ns) Bemerkungen

(Keine)

Standard TTL (veraltet)

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

Advanced High-Speed CMOS 2,0 ~ 5,5

4,5

VCC=5,0V; CL=15pF

LVC

Low Voltage CMOS

1,65 ~ 3,6 2

3,0

VCC=3,3V; CL=50pF

ALVC

Adv. Low Voltage CMOS

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

Adv. Ultra Low Voltage


CMOS

0,8 ~ 2,7

1,5

VCC=1,8V; CL=30pF

210

7 Realisierung digitaler Systeme

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 Komponenten fr digitale Systeme


Fr die Implementierung einer digitalen Schaltung kommen verschiedene Strategien in
Betracht, die in diesem Abschnitt vorgestellt werden. Reale digitale Systeme verwenden
hufig eine Kombination dieser Strategien.

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

7.2 Komponenten fr digitale Systeme

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.

7.2.3 FPGAs und CPLDs


Die Produktion eines ASICs ist ein sehr attraktiver Weg zur Realisierung eines digitalen
Systems wenn sie nicht mit erheblichen Grundkosten verbunden wre. Wre es also

212

7 Realisierung digitaler Systeme

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.

7.2 Komponenten fr digitale Systeme

213

Aber es existieren Alternativen zu einem Standard-PC: Bereits in den 1970er Jahren


erkannten die Halbleiterhersteller den Bedarf an kostengnstigen, stromsparenden Rechnersystemen, die sich auf einem Stck Silizium unterbringen lieen. Diese Bausteine
sind nicht als PC-Ersatz gedacht, sondern werden hufig dort eingesetzt, wo sich Steuerungs- und Regelungsaufgaben elegant in Software realisieren lassen und nur moderate
Rechenleistungen bentigt werden. Aufgrund dieses Anwendungsbereiches brgerte sich
schnell die Bezeichnung Mikrocontroller fr diese Art von Bausteinen ein.
Mikrocontroller enthalten in einem einzelnen Gehuse alles, was einen Rechner
ausmacht: Einen Mikroprozessor zur Abarbeitung eines Programms, Speicher fr Programme und Daten und Ein-/Ausgabe-Schnittstellen fr die Kommunikation mit der
Auenwelt.
Obwohl das Grundkonzept eines PCs und eines Mikrocontrollers hnlich ist, unterscheiden sie sich doch erheblich: Whrend PCs fr interaktives Arbeiten ausgelegt sind
und vorrangig eine hohe Rechenleistung bieten sollen, stehen bei Mikrocontrollern vor
allem der Preis und eine kompakte Bauform im Vordergrund. Mikrocontroller besitzen
daher eine (im Vergleich zu einem aktuellen PC) geringe Rechenleistung und einen deutlich kleineren Speicher. Trotz dieser Einschrnkungen werden jedes Jahr mehrere Milliarden Mikrocontroller verbaut (Abb.7.5).
Wenn Sie einen Gang durch Ihren Haushalt machen, werden Sie vermutlich viele
Gerte entdecken, die einen Mikrocontroller enthalten. Betrachten wir als ein Beispiel
eine Waschmaschine: Die Aufgaben an die Steuerung sind vielfltig. Es wird eine Benutzerschnittstelle in Form von Tastern, Drehschaltern und Displays bentigt. Die Drehrichtung und Geschwindigkeit des Trommelmotors mssen geregelt werden. Und nicht zuletzt
mssen Wasserzu- und -ablauf sowie die Heizung korrekt angesteuert werden. Besitzt
man einen Rechnerbaustein mit digitalen Ein- und Ausgngen kann die Steuerung auf elegante Weise in Software implementiert werden. Die Rechenleistung heutiger Mikrocontroller reicht fr die Regelungsalgorithmen einer typischen Waschmaschine vllig aus.
Das Einsatzgebiet der Mikrocontroller ist natrlich nicht auf den Haushalt beschrnkt.
berall wo Steuerungen und Regelungen bentigt werden, werden Mikrocontroller
Abb.7.5 Beispiel eines
Mikrocontrollers: Von auen
ist nicht zu erkennen, dass
es sich um einen kompletten
Rechner handelt

214

7 Realisierung digitaler Systeme

eingesetzt. Hufig sind diese Rechnersysteme nicht sofort erkennbar, weshalb sie auch
als eingebettete Systeme (Embedded System) bezeichnet werden.

7.2.5 Vergleich der Alternativen


Die mglichen Alternativen fr die Implementierung einer digitalen Schaltung unterscheiden sich in Flexibilitt, Entwicklungszeit, Entwicklungskosten und Stckkosten.
Tab.7.4 gibt einen groben Vergleich der Alternativen ASIC, ASSP, Mikrocontroller (C)
und FPGA. Die Symbole zur Bewertung bedeuten sehr gut(++), gut (+), mittel (),
schlecht (), sehr schlecht ().
Die Wahl einer Alternative ist abhngig von den Randbedingungen des Entwicklungsprojektes, also unter anderem Komplexitt der Schaltung, Zeitdruck, Kostendruck, Konkurrenzsituation. Die Entscheidung fr ein Implementierungskonzept ist daher in der
Praxis das Ergebnis einer ausfhrlichen Analyse und wird zwischen Entwicklungsteam,
Produktmarketing und Unternehmensleitung abgestimmt.

7.2.6 Kombination von Komponenten


In komplexeren digitalen Systemen wird die Systemfunktion hufig auf verschiedene
Bausteine verteilt. Die zentrale Komponente ist dann hufig ein programmierbarer Baustein, der einen Mikroprozessor enthlt und mit Programmiersprachen wie C/C++
programmiert werden kann. Der Mikroprozessor kann durch programmierbare Logikbausteine, wie FPGAs oder CPLDs ergnzt werden. Auf diese Weise knnen einige
Systemfunktionen in der programmierbaren Logik implementiert werden, wodurch der
zentrale Mikroprozessor entlastet wird.
Wenn das System einen Speicherbedarf von einigen Megabyte oder mehr besitzt, werden zustzlich spezielle Speicherbausteine bentigt, die als eigenstndige Komponenten
auf der Systemplatine untergebracht werden.
Tab.7.4Alternativen zur
Implementierung digitaler
Schaltungen

ASIC
Hohe Flexibilitt

Geringe Entwicklungszeit

Geringe Entwicklungskosten

Geringe Stckkosten

++

Rechenleistung
Verlustleistung
Geringe Stckzahlen mglich
Hohe Stckzahlen mglich

ASSP
-

++

++

++

++

++

++

++

++

++

FPGA

++

++

++

++

++

7.3 VHDL-basierter Systementwurf

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 VHDL-basierter Systementwurf


Fr den Entwurf digitaler Systeme wird Software eingesetzt, die den Entwicklungsprozess auf dem Weg von der Idee zum fertigen System untersttzt. Der rechnergesttzte
Schaltungsentwurf wird als Electronic Design Automation (EDA) und die Programme fr
die Schaltungsentwicklung als EDA-Programme oder EDA-Tools bezeichnet. Mithilfe
dieser Programme kann VHDL-Code eingegeben, simuliert und in Hardware berfhrt
werden. Das Ergebnis des Entwurfsprozesses ist eine binre Datei, die mithilfe eines
Programmiergertes auf ein FPGA bertragen bzw. zur Fertigung eines ASICs an die
Halbleiterfabrik bergeben wird.
Im Folgenden wird der VHDL-basierte Systementwurf nher beschrieben. Aufgrund
der groen Bedeutung von programmierbaren Logikbausteinen, erfolgt die Beschreibung
fr ein FPGA-Design.

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

7 Realisierung digitaler Systeme

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

7.3 VHDL-basierter Systementwurf

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

Abb.7.7Struktur eines RTL-Designs

Kombinatorik

Register

Ausgnge

Register

Eingnge

Kombinatorik

218

7 Realisierung digitaler Systeme

Simulation wiederholt werden. Die Eingabe-Kommandos mssen wiederholt werden,


was zeitaufwendig und fehlertrchtig ist. In der Praxis wird daher meist eine Methode
gewhlt, bei der der zu prfende VHDL-Entwurf in eine Testbench eingebunden wird.
Auch die Testbench wird in VHDL programmiert.
Fr kleinere Entwrfe bentigt man hufig nur einfache Testbenches, die Eingangsdaten (Stimuli) fr den zu testenden VHDL-Code erzeugen. Die Korrektheit des Entwurfs wird durch die manuelle Inspektion der Signalverlufe berprft. Diese interaktive
Simulation ist jedoch mit dem Nachteil verbunden, dass die berprfung manuell erfolgt
und daher auch Fehler bersehen werden knnen.
Die bessere Variante ist eine selbstberprfende (self-checking) Testbench, bei der die
Ausgaben des getesteten Codes mit erwarteten Ergebnissen verglichen werden. Hierzu
mssen die erwarteten Werte zum Beispiel als Textdatei zur Verfgung stehen.
Die Stimuli werden von der Testbench aus einer Datei eingelesen und an das zu berprfende Design angelegt. Die erwarteten Ausgabewerte des Systems werden durch ein
sogenanntes Known-Good-Device, zum Beispiel eine Beschreibung als C-Programm,
erzeugt. Die erwartete Ausgabe wird ebenfalls von der Testbench eingelesen und mit
den Ausgabewerten des Designs verglichen. Eventuell auftretende Differenzen werden
whrend der Simulation in einer Protokolldatei aufgezeichnet und knnen anschlieend
zur Fehlersuche verwendet werden. Das Prinzip der self-checking Testbench verdeutlicht
Abb.7.8.
Eine self-checking Testbench bietet unter anderem den Vorteil, dass Simulationen
automatisiert gestartet werden knnen und so selbst aufwendige Tests ohne interaktiven
Eingriff mglich sind. Dies ist insbesondere fr komplexe Systeme vorteilhaft, deren
Simulationszeit mehrere Stunden betrgt.

Testbench
(VHDL)

Design
(VHDL)

Vergleich

=?
Protokoll-Datei

C-Programm
Stimuli-Datei

Abb.7.8Struktur einer selbstcheckenden Testbench

Referenz-Datei

7.3 VHDL-basierter Systementwurf

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

7 Realisierung digitaler Systeme

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.5 Platzierung und Verdrahtung


Nach dem Syntheseschritt erfolgt die Platzierung (Placement bzw. Place) und Verdrahtung (Routing bzw. Route) der identifizierten Grundelemente. Das Programm whlt fr
jedes Grundelement der Netzliste ein physikalisch vorhandenes Element des FPGAChips aus. Nach diesem Platzierungs-Schritt sind die Positionen aller Netzlistenelemente
festgelegt. Nun werden die Ein- und Ausgnge der Elemente verbunden. Dazu muss das
Routing-Programm die durch das Syntheseergebnis vorgeschriebenen Verbindungen
herstellen.
Nachdem die Verdrahtung abgeschlossen ist, kann eine genauere Abschtzung des
Zeitverhaltens erfolgen, da nun die exakten Verbindungsleitungen bekannt sind.

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).

7.3 VHDL-basierter Systementwurf

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

7 Realisierung digitaler Systeme

Abb.7.9FPGA-Experimentierplatine mit Programmiergert

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.3.8 Der digitale Entwurf als iterativer Prozess


Die in diesem Kapitel beschriebenen Entwurfsschritte mssen bei komplexeren Designs
unter Umstnden mehrfach durchlaufen werden. Zeigt der erste Syntheselauf, dass das
angestrebte Zeitverhalten nicht eingehalten werden kann oder das geplante Ressourcenbudget berschritten wird, kann bei kleinen Zielabweichungen versucht werden, durch
geeignete Einstellungen der Entwurfsprogramme ein besseres Ergebnis zu erzielen. Bei
greren Abweichungen bleibt meist nur der Schritt zurck zum VHDL-Code, um zum
Beispiel den zeitlich kritischen Pfad im Design zu optimieren. Bei sehr anspruchsvollen Designs knnen diese nderungen nun wiederum Probleme an anderen Stellen des
Codes nach sich ziehen, sodass der Designflow vom Schreiben des VHDL-Codes bis zur
Platzierung und Verdrahtung mehrfach durchlaufen werden muss.

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

7 Realisierung digitaler Systeme

a) Fr den Entwurf eines ASICs werden meist Bibliotheken mit Standardzellen


verwendet.
b) Ein ASIC-Entwurf ist sowohl fr kleine als auch fr groe Stckzahlen sinnvoll.
c) Ein ASIC-Entwurf ist mit relativ hohen Fixkosten verbunden.
d) Die digitale Funktion eines ASICs kann nicht mithilfe von VHDL beschrieben werden.
Aufgabe 7.5
Welche Aussagen treffen fr den Vergleich eines Mikrocontrollers mit einem PC zu?
(Mehrere Antworten sind richtig)
a)
Mikrocontroller besitzen im Gegensatz zu einem PC keine
Ausgabe-Schnittstellen.
b) Mikrocontroller sind kostengnstiger als PCs.
c) Typische Mikrocontroller besitzen eine geringere Rechenleistung als PCs.
d) Typische Mikrocontroller besitzen eine geringere Speicherkapazitt als PCs.

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.

8.1 Weitere Datentypen


Einige wichtige Datentypen sind bereits aus Kapitel3 bekannt. In diesem Abschnitt
werden weitere ntzliche Datentypen behandelt.

8.1.1 Natural und Real


Der Datentyp natural dient zur Darstellung natrlicher Zahlen im Bereich von 0
bis +2311, also dem Bereich der positiven Zahlen, der sich auch mit dem Datentyp
integer darstellen lsst. Ergnzend zu den ganzzahligen Datentypen, bietet VHDL auch
die Verwendung von Gleitkommazahlen an, die mit dem Datentyp real definiert werden
knnen.
Im Gegensatz zum Datentyp real sind die Ganzzahl-Datentypen synthetisierbar. VHDL-Beschreibungen auf Basis dieser Datentypen knnen also in eine digitale
Springer-Verlag GmbH Deutschland 2016
W. Gehrke et al., Digitaltechnik, Springer-Lehrbuch,
DOI10.1007/978-3-662-49731-9_8

225

226

8VHDL-Vertiefung

Hardware berfhrt werden, whrend die Verwendung von Gleitkommadatentypen auf


Testbenches beschrnkt ist.

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';

clk <= not clk after 5 ns;

Auch die Definition eigener physikalischer Datentypen ist in VHDL mglich. Allerdings wird hiervon selten Gebrauch gemacht, sodass dieser Aspekt hier nicht weiter vertieft wird.

8.1 Weitere Datentypen

227

8.1.4 Std_ulogic, Std_ulogic_vector


Neben den Datentyp std_logic und std_logic_vector wird im IEEE-Paket auch der
Datentyp std_ulogic und std_ulogic_vector definiert. Es handelt sich dabei um eine
Alternative zu den Datentypen std_logic und std_logic_vector. Diese bereits vorgestellten Datentypen haben eine sogenannte Auflsungsfunktion (engl. resolution function).
Die Auflsungsfunktion ist immer dann relevant, wenn einem Signal gleichzeitig zwei
Werte zugewiesen werden. Mithilfe der beim Datentyp std_logic definierten Auflsungsfunktion wird fr diese Flle der sich ergebende Wert des Signals bestimmt. Wird
einem Signal beispielsweise gleichzeitig der Wert 0 und der Wert 1 zugewiesen, wre das
Ergebnis bei Verwendung von std_logic der Wert X (unknown).
In den Datentypen std_ulogic und std_ulogic_vector steht das u fr unresolved und
drckt aus, dass fr diesen Datentyp keine Auflsungsfunktion existiert. Werden einem
Signal gleichzeitig zwei Werte zugewiesen, wrden die Entwurfswerkzeuge bereits
beim bersetzungsvorgang der VHDL-Beschreibung einen Fehler ausgeben. Es ist eine
individuelle Entscheidung, ob diese Eigenschaft als ein Vorteil angesehen wird. In der
Praxis werden die meisten VHDL-Beschreibungen auf Basis des Datentyps std_logic
geschrieben. Daher wird in diesem Buch auf die Verwendung des Datentyps std_ulogic
verzichtet.

8.1.5 Benutzerdefinierte Datentypen


Mithilfe des Schlsselwortes Type knnen in VHDL auch benutzerdefinierte Datentypen,
zum Beispiel fr die Codierung der Zustnde eines endlichen Automaten (vgl. Kapitel5)
angelegt werden.
Die Definition des benutzerdefinierten Typs Farbe kann zum Beispiel wie folgt formuliert werden:
type farbe is (rot,gruen,blau,lila);

8.1.6 Zeichen und Zeichenketten


Fr einzelne Zeichen bietet der VHDL-Standard den Datentyp character an. Dieser
Datentyp ist ein Aufzhlungstyp, der insgesamt 256 Werte umfasst, wobei die ersten 128
Werte dem 7-Bit-ASCII-Code (vgl. Kapitel2) entsprechen und die letzten 128 Werte
Umlaute und Sonderzeichen enthalten. Da die Definition des Datentyps im Paket std
erfolgt, kann der Datentyp ohne Use-Anweisung in allen VHDL-Beschreibungen eingesetzt werden. Die Typdefinition zeigt der folgende Codeausschnitt:

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.

8.1 Weitere Datentypen

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

type my_int_array_type_1D is array (1 to 20) of integer;


type my_int_array_type_2D is array (1 to 10) of my_int_array_type_1D;
signal my_2D_ints : my_int_array_type_2D;

my_2D_ints(7)(5) <= 12; -- zweidimensionaler Arrayzugriff

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.

8.2 Sprachelemente zur Code-Strukturierung

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';

data_in <= bus_in.data;

8.2 Sprachelemente zur Code-Strukturierung


VHDL untersttzt den Entwicklungsprozess mit einigen ntzlichen Sprachelementen
bei der Strukturierung des Codes. Einige der Konstrukte sind in hnlicher Form auch in
Software-Programmiersprachen vorhanden.

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

bin <= Gray2Bin(gray);

8.2.2 Procedure
VHDL-Prozeduren knnen ebenso wie Funktionen im Deklarationsteil einer Architecture oder in Paketen definiert werden.

8.2 Sprachelemente zur Code-Strukturierung

233

Im Gegensatz zu Funktionen knnen Prozeduren mehrere Rckgabewerte besitzen.


Die Rckgabe der Ergebnisse einer Prozedur erfolgt durch Modifikation der Werte der
bergebenen Parameter und es ist daher erlaubt, auf die bergebenen Parameter schreibend zuzugreifen. Um festzulegen, ob ein Parameter nur gelesen, nur beschrieben oder
sowohl gelesen als auch beschrieben werden darf, wird mit den Parametern eines der
Schlsselwrter in, out oder inout angegeben.
Als Parameter knnen Variablen, Signale oder Konstanten verwendet werden. Bei der
Definition einer Prozedur muss festgelegt werden, welcher der drei Parameterklassen
von der Prozedur erwartet wird.
Ein weiterer Unterschied zu Funktionen ist, dass innerhalb einer Prozedur Zuweisungen an Signale erlaubt sind, wenn die Prozedur innerhalb eines Prozesses definiert wird.
Darber hinaus drfen Wait-Anweisungen in Prozeduren verwendet werden. Allerdings sind diese Prozeduren dann nicht mehr synthetisierbar und der Einsatz solcher Prozeduren bleibt auf Testbenches beschrnkt.
Der grundlegende Aufbau einer VHDL-Prozedur ist einer Funktion recht hnlich:
procedure <Prozedurname> (<Parameterliste>) is
<Deklarationen>
begin
<Anweisungen>
end procedure;

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;

>=
:=
:=
:=

med_v then -- min/med tauschen?


med_v;
min_v;
tmp_v;

if med_v
tmp_v
max_v
med_v
end if;

>=
:=
:=
:=

max_v then -- max/med tauschen?


max_v;
med_v;
tmp_v;

if min_v
tmp_v
med_v
min_v
end if;

>=
:=
:=
:=

med_v then -- und noch einmal ggf. min/med tauschen


med_v;
min_v;
tmp_v;

min <= min_v;


med <= med_v;
max <= max_v;
end procedure;
-- Beispiel fr den Aufruf der Procedure

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

8.2.3 Entity-Deklaration mit Generics


Stellen Sie sich vor, Sie mchten eine logische Funktion in VHDL realisieren, die
Signale vom Typ std_logic_vector verknpft. Da es sich um eine grundlegende Funktion
handelt, die Sie hufig bentigen, muss Sie fr Vektoren mit unterschiedlicher Wortbreite
zur Verfgung stehen.
Natrlich kann man fr jede bentigte Wortbreite ein eigenes Entity-ArchitecturePaar realisieren. Allerdings kann dies sehr aufwendig werden, wenn viele unterschiedliche Wortbreiten bentigt werden. Es wre eleganter, wenn man der Instanz des Moduls
irgendwie die bentigte Wortbreite als Parameter mitteilen knnte. Wenn dieser Parameter in der Entity und der Architecture des instanziierten Moduls entsprechend bercksichtigt werden wrde, kann die Erstellung eines einzelnen Entity-Architecture-Paares
ausreichend sein.

8.2 Sprachelemente zur Code-Strukturierung

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.

-- Verwendung der Default-Werte fr die Parameter D und N,


-- also D=3 und N=8
u0 : delay_unit port map (clk => clk, d_in => x_sv8, d_out => q_sv8);
-- berschreiben der Default-Werte: D=5, N=32
-- Die Ein- und Ausgnge dieser Instanz haben die Wortbreite 4
u1 : delay_unit
generic map (D=> 5, N => 32)
port map (clk => clk, d_in => x_sv32, d_out => q_sv32);

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;

Mithilfe der If-Generate-Anweisung knnen nebenlufige Anweisungen mit einer


Bedingung versehen werden. Nur wenn die Bedingung erfllt ist, ist dieser Code aktiv.
Auf diese Weise knnen zum Beispiel Instanziierungen oder Prozesse in Abhngigkeit
von Generics aktiviert werden.

8.2 Sprachelemente zur Code-Strukturierung

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;

Die For-Generate-Anweisung wird fr eine wiederholte Ausfhrung nebenlufiger


Zuweisungen oder Modul-Instanziierungen eingesetzt. Der Einsatz dieser Anweisung wird
im Folgenden anhand eines sehr einfachen Beispiels verdeutlicht. Nehmen wir an, Sie
haben ein AND2-Modul, also ein UND-Gatter mit zwei Eingngen realisiert und mchten dieses fr die VHDL-Beschreibung eines UND-Gatters mit N Eingngen verwenden.

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:

8.2 Sprachelemente zur Code-Strukturierung

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;

In manchen VHDL-Beschreibungen findet sich das Attribut event in Verbindung mit


Signalen. Falls innerhalb eines VHDL-Modells eine Flanke des Signals clk eine Aktion
bewirken soll, so lsst sich diese Flanke auch durch die Bedingung if clkevent and
clk=1 then abfragen.
Die folgenden Schreibweisen beschreiben beispielsweise ein D-Flip-Flop:

-- D-FF mit der IEEE-Funktion rising_edge()


process begin
wait until rising_edge(clk);
q <= d;
end process;
-- D-FFs mit Abfrage des Attributs 'event
-- Diese Schreibweise ist nicht empfehlenswert
process begin
-- Prozess unterbrechen bis ein Ereignis (Zuweisung eines neuen
-- Wertes) auf dem Signal clk stattgefunden hat UND das Signal
-- den Wert 1 angenommen hat
wait until clk'event and clk='1';
q <= d;
end process;

In manchen VHDL-Beschreibungen ist die Schreibweise clkevent and clk=1zu


finden. Allerdings deckt diese Schreibweise alle Signalwechsel ab, bei denen das abgefragte Signal clk von einem Wert ungleich 1 auf 1 wechselt und sollte daher nicht
verwendet werden.

240

8VHDL-Vertiefung

So wrde beispielsweise ein Wechsel von H zu 1 in der Simulation als steigende


Flanke interpretiert. Dies ist jedoch inkorrekt, da H eine schwache Eins und 1 eine
starke 1 darstellt. Der Wechsel von H zu 1 stellt also keine steigende Flanke dar.
Demgegenber wrde beispielsweise ein Wechsel von 0 zu H welcher eine steigende
Flanke darstellt, nicht als solche erkannt werden.
Die falsch interpretierten Signalwechsel wirken sich nur in der Simulation aus. Die synthetisierte Hardware, die ja nur Nullen und Einsen kennt, wrde sich dagegen korrekt
und damit anders als die Simulation verhalten.
Fr die Erkennung einer Taktflanke wird darum die Verwendung der Funktion rising_
edge() (beziehungsweise falling_edge() fr fallende Signalflanken) empfohlen, die expliziter und damit besser lesbar ist.

8.2.6 Instanziierung mit der Component-Anweisung


In Kapitel3 wurde die Instanziierung von Modulen durch Angabe der Bibliothek und der
Entity bereits vorgestellt. Im Folgenden wird eine alternative Vorgehensweise zur Instanziierung von Modulen beschrieben, die ebenfalls sehr hufig angewendet wird. Daher
wird Ihnen diese Variante dann begegnen, wenn Sie beispielsweise VHDL-Code aus
Internet-Quellen verwenden mchten.
Angenommen Sie haben ein Modul beschrieben und mchten dieses in einem anderen Modul verwenden. Als Beispiel verwenden wir ein einfaches UND-Modul mit zwei
Eingngen. Die Entity des Grundmoduls kann wie folgt aussehen:
entity and_2 is
port (a : instd_logic;
b : instd_logic;
q : out std_logic);
end;

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;

8.2 Sprachelemente zur Code-Strukturierung

241

b : instd_logic;-- Sieht fast wie die Entity aus


q : out std_logic) -- Aber: Nach der Klammer kein Semikolon
end component;

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

sinnvoll, wenn grundlegende Funktionen oder Datentypen in mehreren VHDL-Dateien


verwendet werden sollen.
In einem Paket knnen unterschiedliche VHDL-Elemente abgelegt sein. Dies sind in
der Praxis neben selbst definierten Datentypen, Funktionen oder Prozeduren hufig auch
Component-Anweisungen. Wird beispielsweise ein Paket, das Component-Anweisungen
enthlt, in einer VHDL Beschreibung durch geeignete Library- und Use-Anweisungen
bekannt gemacht, knnen die hierin enthaltenen Component-Anweisungen im nachfolgenden Code entfallen. Der Code wird dadurch krzer und bersichtlicher.
Pakete werden in einen Header- und einen Body-Teil aufgespalten. Der Header enthlt die von auen sichtbaren Deklarationen, zum Beispiel welche Aufrufparameter
eine Prozedur besitzt. Der Package-Body legt die Implementierung der im Header deklarierten Elemente fest.
Der Package-Header wird mit dem Schlsselwort package eingeleitet, whrend ein
Package-Body durch package body gekennzeichnet wird:
package <Paketname> is
<Typdefinitionen>
<Definition oder Deklaration von Konstanten>
<Signaldefinitionen>
<Deklaration von Funktionen und Prozeduren>
<Component-Anweisungen>
end package;
package body <Paketname> is
<Definition von Konstanten, falls im Header nur deklariert>
<Definitionen von Funktionen und Prozeduren>
end package body;

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;

8.2 Sprachelemente zur Code-Strukturierung

243

function bin2gray (bin_val : std_logic_vector)


return std_logic_vector;
end package;
------- Package Body
-----package body gray_pkg is
-- Implementierung: 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;
-- Implementierung: Bin2Gray -function bin2gray (bin_val : std_logic_vector)
return std_logic_vector is
constant vlen : integer := bin_val'length;
begin
return ('0' & bin_val(vlen-1 downto 1)) xor bin_val;
end function;
end package body;

8.2.8 Einbindung von Spezialkomponenten


Fr FPGAs und ASICs sind Spezialkomponenten wie Multiplizierer, Speicher oder
Elemente zur Taktaufbereitung verfgbar. Doch wie knnen diese Elemente in einem
VHDL-basierten Design eingesetzt werden? Hierzu werden zwei Anstze unterschieden: Die Instanziierung und die Inferenz (engl. instantiation beziehungsweise inference).
Beide Anstze werden im Folgenden nher erlutert.

244

8VHDL-Vertiefung

Instanziierung beim FPGA-Entwurf


Bei der Instanziierung wird ein bestimmtes Modul, zum Beispiel ein Multiplizierer,
explizit als eine Komponente aufgerufen. Damit wird dem Synthesetool vorgeschrieben
dieses konkret benannte Modul zu verwenden.
Fr die Instanziierung stellen die FPGA-Hersteller spezielle VHDL-Bibliotheken
zur Verfgung, in denen alle Grundelemente hinterlegt sind. Man kann also auf die verfgbaren Hardwarekomponenten explizit zugreifen. Theoretisch knnten auch einzelne
Logikzellen ausgewhlt und durch den Designer verdrahtet werden. Da man hiermit aber
die Intelligenz der Synthesetools nicht nutzen wrde, wird von dieser Mglichkeit in der
Praxis kein Gebrauch gemacht. Die Instanziierung wird im Allgemeinen nur dort eingesetzt, wo dies unumgnglich ist, weil die gewnschten Elemente nicht automatisch durch
die Synthese ausgewhlt werden knnen. Ein Beispiel hierfr sind PLLs zur Taktaufbereitung. Fr diese Elemente existiert keine Entsprechung in VHDL und daher mssen sie
per Instanziierung ausgewhlt werden.
Die Parameter der jeweiligen Instanz werden im VHDL-Code durch bergabe von
Generics festgelegt. Da dies in einigen Fllen etwas umstndlich ist, werden grafische
Blockgeneratoren angeboten. Mithilfe der Generatoren ist es mglich, die Eigenschaften des zu instanziierenden Blocks interaktiv ber eine grafische Oberflche festzulegen.
Als Ergebnis liefern die Generatoren einen Block, der in einer VHDL-Beschreibung als
Komponente instanziiert werden kann.
Inferenz beim FPGA-Entwurf
In einigen Fllen kann man auch auf die Intelligenz des Synthesetools setzen: Fr
bestimmte VHDL-Konstrukte erkennt die Synthese automatisch, dass hier ein Hardmakro (zum Beispiel ein Multiplizierer-Modul oder ein FPGA-interner Speicher) in
Betracht kommt. Da sich die Verwendung der Makros aus dem VHDL-Code ergibt, wird
dieses Vorgehen als Inferenz bezeichnet.
Die Syntheseprogramme untersttzen meist die Inferenz von Speichern, Multiplizieren und einfachen arithmetischen Komponenten wie zum Beispiel die in der Signalverarbeitung hufig vorkommende Kombination eines Multiplizierers mit einem
nachfolgenden Addierer. Fr die Inferenz eines Multiplizierers gengt es beispielsweise,
die entsprechende Operation im VHDL-Code zu verwenden.
Die Instanziierung und Inferenz wird im Folgenden anhand des Beispiels eines
FPGA-internen Speichers fr einen FPGA-Baustein der Xilinx Serie 7 nher beleuchtet.

8.2.8.1Beispiel: Instanziierung eines Speichers


Der nachfolgend dargestellte VHDL-Code zeigt die Instanziierung eines Speichers. Es
wird das Modul BRAM_SDP_MACRO, welches in der von der Firma Xilinx zur Verfgung gestellten Bibliothek unisim vorliegt, aufgerufen und mit den Signalen des Designs
verbunden. ber Generics lassen sich verschiedene Parameter, wie die Wortbreite oder
die Gre des Speichers, auswhlen.

8.2 Sprachelemente zur Code-Strukturierung

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.

8.2.8.2Beispiel: Instanziierung eines Speichers mit Blockgenerator


Alternativ stellen die FPGA-Hersteller Modul-Generatoren zur Verfgung um SpeicherModule ber eine grafische Oberflche zu konfigurieren. Der Blockgenerator erstellt

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.

8.2.8.3Beispiel: Inferenz eines Speichers


Der nachfolgende Code zeigt die Realisierung eines Speichers. Die Wortbreite und die
Gre des Speichers kann ber Generics ausgewhlt werden. Da der Lesezugriff synchron implementiert ist, whlen die Syntheseprogramme die auf dem FPGA-Baustein
verfgbaren RAM-Speicherelemente (sogenanntes Block-RAM) aus.
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity dmem_sp is
generic (
DW: integer := 16;-- Data Width
AW: integer := 10);-- Address Width
port (
clk :
en:
we:
a:
d:

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

8.2 Sprachelemente zur Code-Strukturierung

247

q: out std_logic_vector(DW-1 downto 0)); -- Data out


end;
architecture rtl of dmem_sp is
type tmem is array(0 to 2**AW-1) of std_logic_vector(DW-1 downto 0);
signal mem : tmem;
begin
process begin
wait until rising_edge(clk);
q <= mem(to_integer(unsigned(a)));
if en = '1' then
if we = '1' then
mem(to_integer(unsigned(a))) <= d;
end if;
end if;
end process;
end;

Da keine Aussagen ber die FPGA-Technologie im Code vorgenommen werden,


ist die Speicherinferenz auch auf andere FPGAs bertragbar. Darber hinaus kann die
Speichergre und Wortbreite flexibel ber die Generics angegeben werden, ohne eine
genauere Kenntnis der zugrunde liegenden FPGA-Technologie zu haben.
Mchte man dagegen statt der Block-RAM-Module lieber Flip-Flops als Speicher verwenden, ist nur eine kleine nderung des Codes erforderlich. Zieht man die
Zuweisung an den Datenausgang q vor den Prozess, wird ein asynchroner Lesezugriff
beschrieben. Mit einer derartigen VHDL-Beschreibung werden dann Flip-Flops als Speicherelemente (sogenanntes Distributed Memory) ausgewhlt. Dies kann zum Beispiel
vorteilhaft sein, wenn nur ein sehr kleiner Speicher bentigt wird: Block-RAMs stehen
meist nur in Vielfachen von 1 oder 2kByte zur Verfgung. Bentigt man zum Beispiel
nur 256 Bit Speicherplatz und sind die Block-RAM-Ressourcen knapp, ist der Einsatz
von Distributed Memory erwgenswert.
Die entsprechenden nderungen fr die Verwendung von Distributed Memory sind
im folgenden Code-Ausschnitt dargestellt.
begin
q <= mem(to_integer(unsigned(a))); -- Asynchroner Lese-Zugriff
process begin
wait until rising_edge(clk);
if en = '1' then

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

Diese Spezialmodule mssen entweder durch eine VHDL-Instanziierung oder durch


einen Blockgenerator im System eingebaut werden. Die nheren Einzelheiten ber die
zu verwendenden Bibliothek oder den Aufruf des entsprechenden Moduls in VHDL ist
bei Bedarf in der Dokumentation der Anbieter der Synthesetools zu finden.

8.2.8.4Beispiel: Inferenz eines Dual-Port-Speichers


FPGAs stellen meist auch sogenannte Dual-Port-Speicher zur Verfgung. Hierbei handelt es sich um Speicher, die zwei getrennte Anschlsse fr Lese- und Schreibzugriffe
besitzen. Es kann also gleichzeitig von zwei unterschiedlichen Modulen auf die Elemente des Speichers zugegriffen werden.
Dual-Port-Speicher erlauben es, beide Module mit unterschiedlichen Taktfrequenzen zu betrieben. In diesem Fall muss die Inferenz des Dual-Port-Speichers mithilfe
zweier getrennter VHDL-Prozesse (ein Prozess fr jeden der beiden Schreib-Lese-Ports)
beschrieben werden.
Da beide Prozesse auch einen Schreibzugriff auf die Speicherelemente untersttzen
mssen, ergibt sich hier eine Besonderheit: Das Speicher-Array kann nicht durch eine
Variable innerhalb einer der beiden Prozesse realisiert werden, da dann der andere Prozess keinen Zugriff auf die Variable htte. Aber auch die Realisierung mithilfe eines
VHDL-Signals ist nicht mglich: Beide Prozesse wrden schreibend auf das Array-Signal zugreifen, was whrend der Synthese zu Fehlermeldungen fhren wrde.
Um diese Problematik zu lsen, knnen Variablen eingesetzt werden, die (wie Signale) im Deklarationsteil der Architecture definiert werden und in allen Prozessen der
Architecture sichtbar sind. Diese Art der Variablen wird in VHDL als Shared Variables
bezeichnet. Die Beschreibung eines synchronen Dual-Port-Speichers kann wie folgt realisiert werden:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity bmem_dp is
generic (
DW: integer := 16;-- Data Width
AW: integer := 10); -- Address Width
port (
-- Port 1
clk1 : instd_logic;-- Clock
we1: instd_logic;-- Write enable
a1: instd_logic_vector(AW-1 downto 0); -- Address
d1: instd_logic_vector(DW-1 downto 0); -- Data in
q1: out std_logic_vector(DW-1 downto 0); -- Data out

8.2 Sprachelemente zur Code-Strukturierung

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.

8.3 Sprachelemente zur Verifikation


Wie bereits in Kapitel7 beschrieben, ist die Simulation mit einer Testbench ein wesentlicher Schritt zur Verifikation von VHDL-Code. VHDL bietet dabei die Mglichkeit whrend der Simulation auf Dateien zuzugreifen. Dieses kann zum Beispiel sinnvoll sein, um
Ausgabewerte oder Statusmeldungen whrend der Simulation in einer Datei abzulegen,
die anschlieend auch ohne erneuten Simulationsaufruf zur Verfgung stehen.
Grundstzlich ist die binre Ein-/Ausgabe und die Ein-/Ausgabe von Textdateien zu
unterscheiden. Binre Dateien enthalten die gespeicherten Werte in binrer Form whrend die gespeicherten Werte in Textdateien im ASCII-Code vorliegen und mithilfe eines
Editors betrachtet und modifiziert werden knnen.

8.3.1 Binre Ein-/Ausgabe


Um auf eine Datei zugreifen zu knnen, muss in VHDL zunchst ein Dateidatentyp angelegt werden. Dies erfolgt mithilfe der Definition eines benutzerdefinierten Datentyps.
Anschlieend wird mithilfe dieses Datentyps ein sogenannter Dateideskriptor angelegt,
welcher fr alle weiteren Zugriffe auf die verwendet wird. Das nachfolgende Beispiel
zeigt die erforderlichen Definitionen fr eine Datei, die mit dem Datentyp integer arbeitet.
type my_file_type is file of integer;
file my_file : my_file_type;

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.

8.3 Sprachelemente zur Verifikation

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;

8.3.2 Ein-/Ausgabe mit Textdateien


Whrend fr die binre Ein-/Ausgabe keine besonderen Pakete bentigt werden, muss
fr den Zugriff auf Textdateien das standardisierte Paket textio, welches ein Teil der
Standardbibliothek std ist, mithilfe einer Use-Anweisung bekannt gemacht werden.
Dieses Paket umfasst die textuelle Ein-/Ausgabe fr die im VHDL-Standard definierten
Datentypen. Sollen Daten vom Typ std_logic eingelesen oder ausgegeben werden, steht
das zustzliche Paket std_logic_textio aus der Bibliothek ieee zur Verfgung.
Die textuelle Ein-/Ausgabe erfolgt zeilenbasiert. So wird bei der Ausgabe zunchst
eine Textzeile (vom Datentyp line) mit der Write-Prozedur beschrieben. Ist eine Textzeile erstellt, kann diese mit der Prozedur writeline() ausgeben werden. Entsprechendes
gilt fr die Eingabe: Zunchst wird eine Zeile mit der Prozedur readline() eingelesen und
anschlieend mithilfe der Read-Prozedur auf den Inhalt der Zeile zugegriffen.

252

8VHDL-Vertiefung

Eine Besonderheit ist zu beachten, wenn Zeichenketten (strings) ausgegeben werden


sollen. Die folgenden Zeilen wrden zu einer Fehlermeldung fhren:
write (my_line, "Hallo"); -- Fehler! Ist dies wirklich eine Zeichenkette?
write (my_line, "10010");-- Auch falsch! String oder std_logic_vector?
-- oder etwas anderes ???

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

8.3 Sprachelemente zur Verifikation

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);

8.3.3 Wait-Anweisungen in Testbenches


In den vorangegangenen Kapiteln wurde die Wait-Anweisung bereits eingefhrt. Die
Wait-Anweisung wurde verwendet, um sequenzielle Schaltungen vom einfachen D-FlipFlop bis hin zu komplexeren endlichen Automaten zu beschreiben. Zur Erinnerung ist
hier noch einmal die VHDL-Beschreibung eines Prozesses angegeben, der die Funktion
eines D-Flip-Flops realisiert:
process begin
wait until rising_edge(clk);
q <= d;
end process;

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.

8.3.4 Testbench mit interaktiver berprfung


Eine Testbench besitzt keine Eingangs- oder Ausgangssignale. Daher kann die Entity
sehr einfach realisiert werden. Sie besteht im Allgemeinen aus zwei Zeilen:
entity tb is
end;

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;

Fr immer warten: Der Prozess wird unterbrochen und nie fortgesetzt

wait for <Zeitangabe>;

wait for 10ns;

Prozessunterbrechung fr einen bestimmten


Zeitraum

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

8.3 Sprachelemente zur Verifikation

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.

8.3.5 Testbench mit Assert-Anweisungen


Sind die erwarteten Ausgabewerte des Prflings bekannt, kann die Verifikation im Rahmen auch durch die Testbench selbst erfolgen. Hierzu kann die Assert-Anweisung eingesetzt werden. Diese Anweisung berprft whrend der Simulation eine angegebene
Bedingung. Ist diese nicht erfllt, wird eine Meldung ausgegeben. Der Schweregrad der
Verletzung der angegebenen Bedingung kann explizit angegeben werden. Zur Auswahl
stehen hierbei note, warning, error und failure. Welcher Schweregrad zu einem Abbruch
der Simulation fhrt, kann mithilfe der Aufrufparameter des Simulators ausgewhlt werden. Erfolgt keine Auswahl, fhren in der Regel die Schweregrade error und failure zu
einem Abbruch der Simulation.
Die folgenden Beispiele zeigen den typischen Aufbau von Assert-Anweisungen:

256

8VHDL-Vertiefung

-- Signal a wird gegen einen erwarteten Wert a_exp getestet


assert a /= a_exp report "Fehler in der Simulation" severity error;
-- Eine Warnung ausgeben falls der Wert von i 10 berschreitet
assert i <= 10 report "i ist groesser als 10" severity warning;
-- Eine Simulation mit Hilfe der Assert-Anweisung beenden
assert false report "Simulation wird beendet" severity failure;

Die Verwendung der Assert-Anweisung fr die Verifikation eines UND-Gatters zeigt


der folgende Code. Die erwarteten Ausgabewerte werden in der Variablen q_expected
abgelegt und mit den Ausgabewerten des Prflings verglichen. Die Variable q_expected
beschreibt, dass die erwartete Ausgabe fr die Eingangswerte 00, 01 und 10 jeweils 0 ist.
Nur fr die Eingabe 11 wird am Ausgang des UND-Gatters eine 1 erwartet. Tritt ein Fehler auf, wird mithilfe einer Assert-Anweisung eine entsprechende Meldung ausgegeben.
process
variable i_sv: std_logic_vector (1 downto 0);
variable q_expected : std_logic_vector (3 downto 0) := "1000";
begin
for i in 0 to 3 loop
i_sv := std_logic_vector(to_unsigned(i,2));
a <= i_sv(0);
b <= i_sv(1);
wait for 10 ns;
assert q = q_expected(i) report "Fehler!" severity error;
end loop;
wait;
end process;

Die Anwendung der Assert-Anweisung ist nicht auf Testbench-Code beschrnkt.


Auch in synthetisierbaren VHDL-Beschreibungen knnen Assert-Anweisungen eingesetzt werden, um beispielsweise das Einhalten eines erwarteten Wertebereichs zu berprfen. Bei der Synthese der VHDL-Beschreibung wird aus den Assert-Anweisungen
keine Hardware generiert. Sie werden vom Syntheseprogramm ignoriert.

8.3.6 Testbench mit Dateiein-/-ausgabe


Hufig entsteht bei dem Entwurf eines digitalen Systems der Wunsch Stimuli oder
erwartete Ausgabewerte aus Dateien einzulesen oder Ausgaben der Simulation in einer
Datei abzulegen. Dieses Vorgehen hat verschiedene Vorteile:
Die Stimuliwerte sind bersichtlich in einer Datei zusammengefasst und knnen
leicht gendert werden.

8.3 Sprachelemente zur Verifikation

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

text; -- Filedeskriptoren anlegen


text;
FILE_OPEN_STATUS; -- Filestatus
FILE_OPEN_STATUS;
line; -- Variable vom Typ line fuer

258
variable
variable
variable
variable
begin

8VHDL-Vertiefung
stim:
exp:
wait_time:
errors_detected:

std_logic_vector(3 downto 0);


std_logic_vector(6 downto 0);
time;
natural := 0;

-- 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;

8.3 Sprachelemente zur Verifikation

259

-- Simulation mit Assert-Anweisung beenden


assert false report "Simulation finished." severity failure;
end process;
end;

Die Stimulidatei stimuli.txt besitzt ein recht bersichtliches zeilenorientiertes Format.


In einer Zeile stehen zunchst die Stimuliwerte. Daran schliet sich die Angabe der Zeit
an, die zwischen Anlegen der Stimuliwerte und Auswertung der Ausgangswerte vergehen soll. Am Ende der Zeile ist der erwartete Ausgabewert des Prflings angegeben.
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111

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

1110 0000001 Error -- Expected: 1111001


1111 1110001 Ok
-------Total Error Count: 2
--------

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

Welche Ausgabe erwarten Sie in der Datei test.txt?


a.
1
2
3
4
5

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

In Kapitel7 wurden programmierbare Logikbausteine bereits kurz vorgestellt. Diese


Bausteine zeichnen sich dadurch aus, dass ihre logische Funktion durch den Anwender
festgelegt werden kann. Viele programmierbare Logikbausteine lassen sich mehrfach programmieren, so dass sich eventuelle Designfehler innerhalb kurzer Zeit durch eine Neuprogrammierung beheben lassen. Ebenso knnen beispielsweise auch nderungen der
Spezifikation des Zielsystems selbst in spten Phasen des Entwicklungsprozesses eingearbeitet werden. Auf Grund dieser Vorteile haben sich programmierbare Logikbausteine in
vielen Bereichen durchgesetzt. Mit einigen dieser Bausteine lassen sich nur wenige Gatter
ersetzen, andere ermglichen dagegen die Realisierung von komplexen digitalen Systemen.
Zur Beschreibung der gewnschten logischen Funktion wird meist VHDL verwendet.
Der VHDL-Code wird von Software-Tools, die teilweise kostenlos von den BausteinHerstellern zur Verfgung gestellt werden, interpretiert und fr den Zielbaustein optimiert. Das Ergebnis ist eine binre Datei, die auf die programmierbare Logikkomponente
geladen wird. Erst durch diesen Programmiervorgang erhlt der Baustein seine finale
digitale Funktion.
Die Preise der Bausteine unterscheiden sich erheblich: Whrend einfache Bausteine
fr wenige Cent erworben werden knnen, mssen fr komplexere Bausteine zwei- oder
dreistellige Eurobetrge aufgebracht werden. Auch fr extrem komplexe Spezialanwendungen stehen Bausteine zur Verfgung. Da diese Bausteine jedoch eine relativ groe
Siliziumflche bentigen und sie nur in relativ kleinen Stckzahlen verkauft werden,
erreichen die Preise dieser Komponenten vier- oder sogar fnfstellige Eurobetrge.
Auch wenn der Begriff Programmierbarkeit eine Nhe zu Software-Programmen
nahelegt, handelt es sich dennoch um unterschiedliche Konzepte. Ein Software-Programm wird auf einen Computer geladen und dann sequenziell vom Prozessor des Rechners ausgefhrt. Im Fall programmierbarer Logik wird zwar auch die Information ber
die auszufhrende Funktion auf den Baustein geladen, die Ausfhrung dieser Funktion
geschieht jedoch direkt in Hardware und nicht durch eine sequenzielle Interpretation
Springer-Verlag GmbH Deutschland 2016
W. Gehrke et al., Digitaltechnik, Springer-Lehrbuch,
DOI10.1007/978-3-662-49731-9_9

263

264

9 Programmierbare Logik

der Befehle eines Computerprogramms. Um den Unterschied der Konzepte deutlich


zu machen, werden programmierbare Logikbausteine auch als konfigurierbare Logik
bezeichnet.
Im Rahmen der folgenden Abschnitte werden zunchst die technischen Grundkonzepte programmierbarer Logikbausteine erlutert. Diese werden anschlieend aufgegriffen und es werden unterschiedliche Typen programmierbarer Logikbausteine vorgestellt.

9.1 Grundkonzepte programmierbarer Logik


Fr die Realisierung eines Bausteins, dessen Funktion erst durch den Anwender festgelegt wird, knnen zwei grundlegende Konzepte verfolgt werden, die im Folgenden nher
erlutert werden.

9.1.1 Zweistufige Logik


Eine beliebige kombinatorische Funktion lsst sich mithilfe des KV-Diagramms oder bei
komplexeren Funktionen mithilfe eines geeigneten Computerprogramms in eine zweistufige Darstellung berfhren. Wird beispielsweise eine disjunktive Darstellung der Funktion angestrebt, besteht die erste Logikstufe aus UND-Verknpfungen whrend in einer
zweiten Stufe ODER-Verknpfungen verwendet werden. Um einen Baustein zu realisieren, dessen logische Funktion vom Anwender in disjunktiver Form programmiert werden
kann, muss dieser Baustein also eine zweistufige UND-/ODER-Struktur enthalten. Durch
die Auswahl, ob ein Eingangssignal in der UND-Stufe bercksichtigt wird, knnen die
Produktterme der gewnschten Funktion in der UND-Stufe realisiert werden. Die Produktterme werden mit der ODER-Stufe zum Ausgangssignal der Funktion zusammengefasst.
Um die Auswahl der zu bercksichtigenden Eingangssignale und Produktterme zu
ermglichen, werden neben UND- und ODER-Gattern elektrische Schalter bentigt, die
die Eingangssignale beziehungsweise Produktterme mit den Eingngen der Gatter verbinden. Soll ein Gattereingang unbercksichtigt bleiben, wird der Schalter so programmiert, dass eine logische 1 (bei UND-Gattern) beziehungsweise eine logische 0 (bei
ODER-Gattern) zugefhrt wird.
Die Grundstruktur eines solchen programmierbaren Logikbausteins ist in Abb.9.1
dargestellt. Der Baustein besitzt die drei Eingnge X1, X2 und X3. Die an diesen Eingngen anliegenden Signale knnen den UND-Gattern negiert oder nicht-negiert zugefhrt werden. In dem dargestellten Beispiel knnen mithilfe der beiden UND-Gatter
insgesamt zwei Produktterme gebildet werden. Wird nur ein Term bentigt, kann einer
der Eingnge des nicht bentigten UND-Gatters auf Null gesetzt werden. Auf diese
Weise wird sichergestellt, dass der Ausgang des UND-Gatters, unabhngig von den Werten der anderen Eingnge, den Wert 0 besitzt und somit in der nachfolgenden ODERStufe nicht bercksichtigt wird.

9.1 Grundkonzepte programmierbarer Logik


Abb.9.1 Struktur
eines zweistufigen
programmierbaren
Logikbausteins mit 3
Eingngen und einem Ausgang

X1

265
X2

X3

"1"

&

P1

"0"

Y
&
P2

"0"

Mit der in Abb.9.1 gezeigten Beispielprogrammierung werden die Terme P1 und P2


durch die folgenden logischen Gleichung beschrieben:

P1 = X1 & X2 & X3
beziehungsweise

P2 = X2 & X3
Damit ergibt sich der Ausgangswert fr Y zu

Y = P1 P2 = (X1 & X2 & X3) (X2 & X3)


Mithilfe der dargestellten Schaltung lassen sich beliebige kombinatorische Funktionen
realisieren, wenn diese maximal drei Eingangsvariablen besitzen und sie sich mithilfe
von maximal zwei Termen beschreiben lassen.
Um auch komplexere logische Funktionen realisieren zu knnen, kann die Grundschaltung mit mehr UND-Gattern ausgestattet werden. Sollen darber hinaus auch
mehrere Ausgangssignale gleichzeitig berechnet werden, werden weitere ODER-Gatter hinzugefgt. Es ist nachvollziehbar, dass eine vollstndige grafische Darstellung
eines solchen Bausteins schnell unbersichtlich werden kann. Daher wird hufig eine
kompaktere Darstellung gewhlt, bei der die Eingnge der UND-Gatter in einem einzelnen Strich zusammengefasst werden. Hierbei entfllt auch die explizite Darstellung
der Schalter. Diese werden durch Punkte ersetzt. Ein gesetzter Punkt deutet an, dass

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

Y 1 = P1 P2 = (X1 & X2 & X3) (X2 & X3)


Abb.9.2 Beispiel
eines programmierbaren
Logikbausteins in kompakter
grafischer Darstellung

X1

X2

X3

"0"
P1

&

Y
P2

&

Abb.9.3 Programmierbarer
Logikbaustein mit mehrfach
verwendetem Produktterm

X1

X2

X3

&
&
&

P1

P2

P3

Y1

Y2

9.1 Grundkonzepte programmierbarer Logik

267

und

Y 2 = P1 P3 = (X1 & X2 & X3) (X1 & X2)


mithilfe eines PLAs realisiert.
Die Programmierung des PLAs kann dann wie in Abb.9.3 dargestellt realisiert
werden.

9.1.2 Tabellenbasierte Logikimplementierung


Eine logische Funktion kann auch durch eine Tabelle definiert werden, welche die mglichen Eingangswerte mit den zugehrigen Ausgangswerten auflistet. Diese tabellarische
Darstellungsform kann fr eine direkte Implementierung in Hardware verwendet werden. Als Grundelemente werden in diesem Fall statt Gatter sogenannte Lookup-Tabellen
(engl. look-up table, LUT) verwendet. Eine Lookup-Tabelle ist ein kleiner Speicher in
dem fr alle Eingangskombinationen die jeweiligen Ausgangswerte abgelegt sind.
Besitzt die LUT beispielsweise vier Eingnge, mssen fr die Implementierung der
Tabelle 16 Speicherstellen bereitgestellt werden. Die Auswahl, welche der gespeicherten
Werte am Ausgang erscheint, erfolgt durch Anlegen eines 4 bit breiten Wertes an die Eingnge der LUT.
Mchte man eine LUT aus digitalen Grundelementen aufbauen, kann dies beispielsweise mithilfe von D-Flip-Flops und einem Multiplexer erfolgen. Ein Beispiel fr eine
Realisierung einer solchen LUT ist in Abb.9.4 dargestellt. Dabei wird auf eine genauere
Darstellung der Logik zum Schreiben der gespeicherten Werte aus Grnden der bersichtlichkeit verzichtet.
Abb.9.4 Implementierung
einer Lookup-Tabelle mit
D-Flip-Flops

Logik zur Beschreiben der DFFs

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

Abb.9.5LUT-basierte Realisierung eines UND- und eines ODER-Gatters

9.2 Simple Programmable Logic Device (SPLD)

269

Das in diesem Abschnitt skizzierte Prinzip der LUT-basierten Implementierung in


Kombination mit einem programmierbaren Verdrahtungskonzept setzen die Field Programmable Gate Arrays (FPGA) ein. Reale FPGAs realisieren die Speicherelemente der
LUTs zur Reduktion der bentigten Chipflche auf Basis von speziellen Speichertechnologien (zum Beispiel SRAM). Eine detailliertere Diskussion der FPGA-Technologie ist
in Abschn.9.4 zu finden.

9.2 Simple Programmable Logic Device (SPLD)


Die ersten programmierbaren Bausteine wurden bereits 1971 von der Firma Monolithic Memories Inc. entwickelt und unter dem Namen PAL (Programmable Array Logic)
vermarktet. Heute werden diese Bausteine und ihre Nachfolger hufig auch als Simple
Programmable Logic Device (SPLD) bezeichnet. Mit diesen Bausteinen lassen sich
kombinatorische Schaltungen in disjunktiver Form realisieren.
Die Eingangssignale werden hierzu in einer Eingangsstufe verstrkt und in negierter
und nicht-negierter Form fr die weitere Verarbeitung zur Verfgung gestellt. Die aufbereiteten Eingangsgren werden einem UND-Array zugefhrt, welches die bentigten
Produktterme berechnet. Eine feste Verdrahtung der UND-Ausgnge mit den ODEREingngen sorgt fr die gewnschte disjunktive Verknpfung der Produktterme. Die
Grundstruktur eines PALs entspricht also den in Abschn.9.1.1 dargestelltem Ansatz
einer zweistufigen disjunktiven Logikimplementierung, bei der die Programmierbarkeit
durch konfigurierbare Verbindungen im UND-Array erreicht wird, whrend das ODERFeld festverdrahtet ist.
Darber hinaus bieten die Bausteine die Mglichkeit, einige der Ausgnge wahlweise
auch als Eingang zu nutzen. So knnen auch komplexere Funktionen, die eine hhere
Anzahl an Eingangssignalen bentigen, mithilfe des Bausteins realisiert werden. Die
Ausgnge werden hierzu mit Tri-State-Treibern versehen, deren Ausgnge durch eine
entsprechende Programmierung des Bausteins in einen hochohmigen Zustand versetzt
werden knnen. An diesen Anschlssen knnen dann Eingangssignale angelegt werden,
deren Werte ebenfalls im UND-Feld verarbeitet werden knnen.
Die Grundstruktur eines PAL-Bausteins mit Eingngen (I), Ausgngen (O) und Ein-/
Ausgngen (I/O) ist in Abb.9.6 dargestellt.
Da mithilfe derartiger Bausteine auch endliche Automaten realisiert werden sollen, ist
es sinnvoll, die hierfr notwendigen Register auf dem Chip vorzusehen. Daher wurden
neben PALs mit der in Abb.9.6 gezeigten Struktur auch Bausteine entwickelt, die bereits
D-Flip-Flops enthalten. Die Grundstruktur eines solchen Bausteins zeigt Abb.9.7.
Eine besondere Eigenschaft von PALs ist es, dass eine einmal programmierte Funktion nicht modifiziert werden kann. Dieser Nachteil wurde mithilfe der sogenannten
GALs (Generic Array Logic) vermieden. Das Grundprinzip dieser Bausteine ist allerdings sehr hnlich. Teilweise knnen GALs auch als Ersatz fr PALs eingesetzt werden.

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

Abb.9.6 Struktur eines PALBausteins

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

9.3 Complex Programmable Logic Device (CPLD)

9.3 Complex Programmable Logic Device (CPLD)


Eine Weiterentwicklung des PLA-Konzeptes stellen die sogenannten Complex Programmable Logic Devices (CPLDs) dar. Viele dieser Bausteine bedienen sich dem
PLA-Konzept und kombinieren mehrere PLA-Blcke mit einer programmierbaren Verbindungsmatrix, die es ermglicht, die Ausgnge eines PLA-Blocks mit den Eingngen
eines anderen Blocks zu verbinden. Auf diese Weise ist die Implementierung der logischen Funktion nicht allein auf die disjunktive Form beschrnkt. Es knnen auch mehrere disjunktive Stufen kaskadiert werden. Dies kann insbesondere bei komplexeren
Funktionen zu einer gnstigeren Realisierung fhren.
Die Grundstruktur eines CPLDs ist in Abb.9.8 dargestellt. Neben den programmierbaren UND/ODER-Strukturen (PLA) besitzen CPLDs sogenannte Makrozellen (Macro Cell,
MC). Die Makrozellen knnen als eine Erweiterung der Registerstufen einfacher PLABausteine aufgefasst werden. Der schematische Aufbau der Makrozelle eines CPLDs der
Coolrunner-II-Serie (Fa. Xilinx) ist in Abb.9.9 dargestellt. Der Kern der Makrozelle ist
ein D-Flip-Flop, dessen D-Eingang mit der PLA-Struktur verbunden ist. Mithilfe eines
Exklusiv-Oder-Gatters kann entschieden werden, ob der durch die UND/ODER-Struktur
berechnete Term nicht-invertiert oder invertiert an das D-Flip-Flop weitergereicht wird.
Die Rckfhrung des Terms in die Verbindungsmatrix kann sowohl asynchron (Abgriff
vor dem Flip-Flop) oder synchron (Abgriff hinter dem Flip-Flop) erfolgen. Ebenso kann
fr die Ausgabe eines Wertes ausgewhlt werden, ob diese asynchron oder synchron erfolgen soll. Das Flip-Flop der dargestellten Makrozelle besitzt Enable-, Set- und Reset-Eingnge, die ebenfalls mithilfe der PLA-Struktur angesteuert werden.
In der Praxis stellt sich die Frage, welcher CPLD-Baustein zur Lsung eines konkret
vorliegenden Problems geeignet ist. Neben der bentigten Anzahl an Ein- und Ausgngen
spielt hierbei auch die Frage, wie viele Gatter durch ein bestimmtes CPLD ersetzt werden

I/O

MC
MC

PLA

MC

MC

I/O

MC
MC

PLA

Programmierbare
Verbindungsmatrix

Clk

Clk

Abb.9.8Struktur eines CPLDs auf PLA-Basis

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

Weitere Signale, z.B. zum


asynchronen Setzen oder
Rcksetzen des D-Flip-Flops

Abb.9.9Schematischer Aufbau einer Makrozelle

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.

Tab.9.2Parameter der CPLD-Familie CoolRunner-II (Xilinx)


Baustein
XC2C32A XC2C64A XC2C128 XC2C256 XC2C384 XC2C512
Makrozellen
Max. I/Os
Max. Taktfrequenz
Fsystem (MHz)

32

64

128

256

384

512

33

64

100

184

240

270

323

263

244

256

217

179

9.4 Field Programmable Gate Arrays

273

Tab.9.3Parameter der CPLD-Familie MAX V (Altera)


Baustein
5M40Z 5M80Z 5M160Z 5M240Z 5M570Z 5M1270Z 5M2210Z
Logic Elements

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

Um einen Vergleich mit PLA-basierten CPLDs zu untersttzen geben die Hersteller


zum Teil an, wie vielen Makrozellen ein CPLD entspricht. Als ein Beispiel hierfr sind
in Tab.9.3 einige Parameter der MAX V Serie der Firma Altera angegeben. Das Kernelement dieser CPLDs ist ein Logic Element (LE). Ein Logic Element enthlt eine LUT mit
4 Eingngen, ein Flip-Flop sowie Logik zum Setzen oder Rcksetzen des Flip-Flops.

9.4 Field Programmable Gate Arrays


Der Begriff Gate Array bezeichnete ursprnglich Bausteine, die aus einem groen Feld
vorgegebener Logikgatter bestand. Die Verdrahtung der Gatter, und damit die zu realisierende logische Funktion, konnte vom Kunden festgelegt werden. Die Verdrahtung
der Gatter wurde dann im Auftrag des Kunden in einer Halbleiterfabrik realisiert. Auch
die Funktion der heute blichen Form der Gate-Arrays, die Field Programmable Gate
Arrays, kann durch den Anwender festgelegt werden. Da die Programmierung elektrisch
erfolgt, sind keine zeitaufwendigen Produktionsschritte in einer Halbleiterfabrik erforderlich: Mithilfe eines Programmiergertes kann die gewnschte logische Funktion in
wenigen Sekunden auf ein FPGA geladen werden. Da FPGAs zu attraktiven Preisen
angeboten werden, haben Sie sich in vielen Bereichen durchgesetzt. Im Folgenden werden die Grundkonzepte dieser Bausteine nher vorgestellt.

9.4.1 Allgemeiner Aufbau eines FPGAs


Wie bei anderen programmierbaren Logikbausteinen lsst sich die digitale Funktion
eines FPGAs im Feld programmieren. Ein wesentliches Merkmal von FPGAs ist es, dass
sich deutlich komplexere Funktionen realisieren lassen, als dies mit PALs oder CPLDs
mglich wre. Auch im Hinblick auf die technische Realisierung der Programmierbarkeit unterscheiden sich FPGAs von vielen CPLDs. Whrend einfache Logikbausteine
(hierzu zhlen wir auch CPLDs) im Kern eine zweistufige UND/ODER-Struktur einsetzen, basieren FPGAs auf einer tabellenbasierten Implementierung.

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.

9.4 Field Programmable Gate Arrays

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

Abb.9.11 Aufbau eines


Logikblocks

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

9.4.2 Taktverteilung im FPGA


In digitalen Systemen werden die Datenausgabe und die Datenbernahme der Flip-Flops
mithilfe von Taktsignalen gesteuert. Im Idealfall sehen alle Flip-Flops eines Systems
zum gleichen Zeitpunkt die steigende Flanke eines Taktsignals. In der Praxis lsst sich
dieser Idealfall nicht realisieren, da Taktsignale, wie alle anderen Signale, ber Leitungen des Chips an die Flip-Flops herangefhrt werden mssen. Reale Leitungen besitzen
eine Verzgerungszeit, so dass Flip-Flops, die nah an einer Taktquelle platziert sind, eine
steigende Flanke etwas eher sehen als ein Flip-Flop, das am Ende einer Taktleitung liegt.
Dass dies ein potentielles Problem fr die Realisierung eines Systems darstellen kann,
macht folgendes Beispiel deutlich: Nehmen wir vereinfachend an, dass die verwendeten
D-Flip-Flops eine Setup-Zeit und ein Clock-to-Q-Delay (also die Zeit, die bentigt wird, um
nach der steigenden Taktflanke den im Flip-Flop gespeicherten Wert am Ausgang zur Verfgung zu stellen) von jeweils 1 ns besitzen. Nehmen wir weiterhin an, die Logik und die
Verdrahtung zwischen zwei derartigen Flip-Flops habe eine Verzgerungszeit von 3 ns. Mit
diesen Werten wrde sich eine minimale Taktperiode von 1 ns+1 ns+3 ns=5 ns ergeben.
Dieses System kann also bei idealer Taktverteilung mit maximal 200MHz betrieben werden.
Erhlt das zweite Flip-Flop die steigende Flanke frher als das erste Flip-Flop, vergrert sich die maximale Periodendauer entsprechend, da das empfangende (zweite)
Flip-Flop bereits frher stabile Daten am Eingang erwartet. Nehmen wir an, die zeitliche
Verschiebung des Taktsignals (im Fachjargon auch Clock Skew genannt) betrage 2 ns.
Dann wrde sich die minimale Taktperiode um diese 2 ns auf 7 ns erhhen und damit die
maximale Taktfrequenz des Systems auf etwa 140MHz absinken.
Was kann man also tun? Nun, die Signalverzgerungen beruhen auf physikalischen
Gesetzen und knnen daher nicht eliminiert oder umgangen werden. Aber ein erster Schritt zur Problemlsung ist es, die Verzgerungen des Taktsignals innerhalb des
Chips zu kennen. Auf Basis dieser Kenntnis kann fr jedes Flip-Flop, dessen Ausgang
mit einem anderen Flip-Flop verbunden ist, die Verzgerung des Taktsignals abgeschtzt
und bei der Logik-Synthese entsprechend bercksichtigt werden. Aber natrlich lst
dies noch nicht das eigentliche Problem, dass groe Verzgerungen des Taktsignals zu
einer signifikanten Reduktion der Systemfrequenz und damit der Rechenleistung fhren
knnen. Um dieses zu Problem zu reduzieren, setzen FPGAs spezielle Verbindungsnetzwerke zur Verteilung der Taktsignale ein. Ein Beispiel fr den Aufbau eines Taktnetzwerks mit zentralen Taktreibern ist in Abb.9.12 dargestellt.
Die Taktsignale werden baumartig im System verteilt. Auf diese Weise wird erreicht,
dass der Clock-Skew in einem akzeptablen Rahmen gehalten werden kann und es kann
davon ausgegangen werden, dass Flip-Flops, die sich in rtlicher Nhe befinden, in etwa
das gleiche zeitliche Verhalten des Taktes sehen. Werden zwei Flip-Flops, die weit voneinander entfernt liegen, miteinander verbunden, kann hierbei natrlich weiterhin ein signifikanter Clock-Skew auftreten. So sehen zum Beispiel Flip-Flops, die in der Nhe der
Takttreiber liegen, die steigende Flanke deutlich eher als Flips-Flops, die in den Ecken
des FPGAs platziert sind.

9.4 Field Programmable Gate Arrays

277

Abb.9.12 Taktnetzwerk mit


zentralen Takttreibern

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.

9.4.3 Typische Spezialkomponenten


Um die Implementierung von logischen Funktionen besser zu untersttzen, enthalten
heutige FPGAs vielfach Spezialkomponenten, die zustzlich zu den Logikblcken fr

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.

9.4 Field Programmable Gate Arrays

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

Abb.9.13Aufbau einer PLL

Speicher-Controller. In lteren FPGA-Generationen musste die Speicheranbindung


noch mithilfe der Standard-FPGA-Ressourcen (Logikblcke, IO-Blcke) erfolgen. Dass
hierbei wertvolle Ressourcen fr eine standardisierte und hufig bentigte Funktion
eingesetzt werden mssen, ist eher ein untergeordnetes Problem. Viel schwerwiegender ist hufig das Problem, dass die maximalen Taktfrequenzen, und damit die erzielbare Speicherbandbreite, bei einer Implementierung mit den blichen FPGA-Ressourcen
begrenzt sind. Um die hohen Datenraten wie sie von modernen Speicherbausteinen angeboten werden, auch fr ein FPGA-basiertes Design nutzbar zu machen, werden spezialisierte Speichercontroller bentigt. Diese Komponenten sind fr die Anbindung von
externem Speicher optimiert und untersttzen Datenraten von mehreren GByte/s, die
sich mithilfe von Logikblcken nicht realisieren lieen. In einem beschrnkten Umfang
knnen diese Module konfiguriert werden. So sind zum Beispiel die Auswahl des Speichertyps oder auch einige Eigenschaften der FPGA-internen Schnittstelle whlbar.
Ein anderes Beispiel fr ein spezielles Peripheriemodul ist eine PCI Express (PCIe)
Schnittstelle. Der PCIe-Bus hat sich als wichtiger Standard fr die Verbindung von Komponenten etabliert. Da die Implementierung einer PCIe-Schnittstelle besondere Anforderungen (insbesondere im Hinblick auf das Zeitverhalten) stellt, ist eine Implementierung
mit Standard-FPGA-Ressourcen schwierig und aufwendig. Dieser Nachteil wird durch
die Bereitstellung von PCIe-Hard-Macros vermieden und die entsprechende Funktion
kann so effizienter und mit geringerem Aufwand implementiert werden.

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

Wre es da nicht logisch, in einem FPGA neben den spezialisierten Hard-Makros


auch Prozessoren oder am besten gleich ganze Prozessorsysteme anzubieten?
Genau dieser Ansatz wird von einigen Herstellern verfolgt. So bieten zum Beispiel
die Firmen Xilinx und Altera Chips an, die neben einem FPGA-Teil auch MultikernRechner-Systeme beinhalten. Die maximalen Taktfrequenzen, und damit die erzielbare
Rechenleistung dieser Systeme erreichen ein Vielfaches von dem der Soft-Prozessoren.
Da diese Chips nicht mehr als reine FPGAs anzusehen sind, werden sie von den Herstellern unter dem Begriff System-on-Chip (SoC) vermarktet. Dieser Begriff soll deutlich
machen, dass es sich um komplette Systeme handelt, deren Funktion sich als Kombination von Software (auf dem CPU-Subsystem) und Hardware (auf dem FPGA-Teil) festlegen lsst.

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

Altera Positionierung High density, high


performance

Stratix

Balance of
cost, power and
performance

Low system cost plus


performance

Xilinx Familie

Kintex

Artix

Virtex

Xilinx Positionierung System performance Price Performance


with low power

System performance
per Watt for cost sensitive applications

282

9 Programmierbare Logik

Tab.9.5Zeitpunkt der Markteinfhrung und verwendete Halbleitertechnik der Stratix-Familie


(Fa. Altera)
Generation/Name

Stratix

Stratix II

Stratix III

Stratix IV

Stratix V

Stratix
10

Jahr der Einfhrung

2002

2004

2006

2008

2010

2013

Halbleitertechnologie(nm)

130

90

65

40

28

14

Halbleitertechnologie fr das Beispiel der High-Performance-Familie Stratix der Firma


Altera zusammen. Die jeweils verwendeten Produktionstechnologien entsprechen in
etwa denen, die auch bei der Produktion von anspruchsvollen Spitzenprodukten wie PCProzessoren, zum Einsatz kommen. Genauso wie bei PC-Prozessoren wird also auch bei
der Produktion von FPGAs angestrebt, die neueste verfgbare Produktionstechnologie
einzusetzen.

9.5.1 Vergleich ausgewhlter FPGA-Familien


Innerhalb der Stratix-Familie werden unterschiedliche Bausteine angeboten. Eine bersicht ber die Eigenschaften dieser FPGAs ist in Tab.9.6 zusammengefasst. Die Abkrzung ALM (Adaptive Logic Module) ist eine Hersteller-spezifische Abkrzung. Die
wesentlichen Elemente eines ALM sind eine LUT mit 7 Eingngen, Logik fr schnelle
Addition und 4 Register.
Zum Vergleich zu der High-Performance-Familie Stratix 10 fasst Tab.9.7 einige der
Eigenschaften von Vertretern der Familie Cyclone V zusammen.
Die interne Speicherkapazitt lsst sich relativ leicht, auch ber FPGA-Generationen
hinweg, vergleichen. Ein Vergleich der Logikelemente ist dagegen schwieriger, da der
Aufbau der programmierbaren Grundelemente von Generation zu Generation wechseln
kann. Ein einfacher Vergleich der Anzahl der ALMs ist nicht unbedingt zielfhrend, weil
sich ALMs unterschiedlicher Generationen in ihrem Aufbau unterscheiden knnen. Fr
einen groben Vergleich unterschiedlicher Bausteine gibt die Firma Altera daher das Ma

Tab.9.6bersicht ber einige Eigenschaften von ausgewhlten FPGAs der Stratix-10-Familie


Bezeichnung

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

Tab.9.7bersicht ber einige Eigenschaften von ausgewhlten FPGAs der Cyclone-V-Familie


Bezeichnung

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

XCVU065 XCVU125 XCVU440

Anzahl CLBs

25.391

41.460

82.920

44.760

Anzahl Flip-Flops
Block-RAM (Mbit)

89.520

316.620

406.256 663.360 1.326.720 716.160

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.

9.6 Hinweise zum Selbststudium

285

Tab.9.9Eigenschaften von Low-Power FPGAs am Beispiel der Ice40-Serie


UltraLite

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

Stat. Stromaufnahme (A)

9.6 Hinweise zum Selbststudium


In vielen Fllen werden die Programme zum Entwurf von FPGA-Systemen in kostenlosen Varianten angeboten und knnen von Internetseiten der Hersteller heruntergeladen
werden. Fr die Bedienung der Software bieten die Hersteller Online-Tutorials, Trainingsvideos und eine umfangreiche Dokumentation an, die es ermglichen, erste eigenstndige Schritte im Bereich des VHDL-Entwurfs fr programmierbare Logikbausteine
durchzufhren.
Da der Entwurf einer FPGA-Platine eine herausfordernde Aufgabe ist, bieten sich fr
eigene Experimente fertige Boards an, die teilweise auch zu vergnstigten Preisen fr
Studierende und andere nicht-kommerzielle Nutzer angeboten werden. Fr erste eigene
Schritte bieten sich gnstige Boards an, die bereits fr deutlich unter 100 zum Kauf
angeboten werden.
Fr die beiden Marktfhrer Xilinx und Altera bieten die Firmen Digilent (www.digilentinc.com) beziehungsweise Terasic (www.terasic.com) gnstige Einsteigerboards an.
Da diese Boards auch ein integriertes Programmiergert besitzen, lassen sie sich ohne
weitere Kosten fr eigene Experimente verwenden.
Sehr interessant sind die Boards, die mit FPGAs ausgestattet sind, die auch ein CPUSubsystem als Hardmacro beinhalten. Als ein Beispiel fr ein solches Board ist das mit
Xilinx-Baustein Zynq ausgestattete ZyBo-Board der Firma Digilent in Abb.9.14 dargestellt. In der Mitte des Boards ist der FPGA-Baustein zu sehen. Darunter ist einer der
beiden SDRAM-Speicher untergebracht. Dieses Board verfgt ber viele Anschlussmglichkeiten wie VGA, HDMI, Ethernet, USB, Audio, sowie Buchsen fr die Anbindung
eigener Hardware.
Mithilfe dieser Boards lassen sich auch erste Schritte im Bereich des FPGA-Enwurfs
durchfhren ohne das CPU-System zu nutzen. Spter kann dann die Verwendung
des CPU-Subsystems einbezogen werden. So knnen interessante Experimente bis
hin zur Einbindung von eigener Hardware unter dem Betriebssystem Linux durchgefhrt werden. Obwohl diese Boards mit einem Preis ab ca. 100 etwas teurer sind als
die einfachsten FPGA-Experimentierboards, kann sich die Anschaffung auf Grund der
erweiterten Mglichkeiten lohnen.

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

c) Sie besitzen intern eine UND/ODER-Struktur.


d) Sie enthalten grundstzlich keine Flip-Flops. Daher kann mit den Bausteinen immer
nur eine Kombinatorik realisiert werden.
Aufgabe 9.3
Wodurch zeichnen sich CPLDs aus?
a) CPLDs sollten aus Kostengrnden nur fr Systeme eingesetzt werden, die in sehr
hohen Stckzahlen gefertigt werden.
b) Im Vergleich zu PALs bieten CPLDs eine deutlich geringere Komplexitt.
c) Sie enthalten grundstzlich keine Flip-Flops. Daher kann mit den Bausteinen immer
nur eine Kombinatorik realisiert werden.
d) Die Funktion der Schaltung kann mithilfe von VHDL beschrieben werden.
Aufgabe 9.4
Wodurch zeichnen sich FPGAs aus?
a) Typische FPGAs realisieren logische Funktionen auf Basis einer zweistufigen UND/
ODER-Struktur.
b) Sie knnen nicht zur Realisierung von endlichen Automaten verwendet werden.
c) FPGAs realisieren logische Funktionen mithilfe von Lookup-Tabellen.
d) Alle FPGAs besitzen einen Mikroprozessor in Form eines Hardmacros.
Aufgabe 9.5
Wie viele unterschiedliche logische Funktionen knnen mit einer LUT mit 5 Eingngen
realisiert werden?
a) 5
b) 25
c) 32
d) 64
Aufgabe 9.6
Welche der folgenden Komponenten sind in typischen FPGAs enthalten? (Mehrere Antworten sind richtig)
a) Spezialmodule fr ausgewhlte arithmetische Operationen, zum Beispiel Multiplizierer
b) Speicher
c) Spezialmodule zur Beschleunigung von 3D-Grafik-Anwendungen
d) Module zur Takterzeugung

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.1.1 Prinzipieller Aufbau


Der Aufbau und die Funktionsweise einer CMOS-Schaltung werden am Beispiel eines
NAND-Gatters mit zwei Eingngen deutlich. Abb.10.1 zeigt links den prinzipiellen Aufbau eines NAND-Gatters. Die zwei Eingnge A und B sind an insgesamt vier Schalter
angeschlossen. Abhngig von dem Wert der Steuerleitung sind die Schalter geffnet oder
geschlossen. Dadurch verbinden sie den Ausgang Y entweder mit 0 oder 1.
Natrlich sind in Integrierten Schaltungen keine mechanischen Schalter, sondern
Transistoren eingebaut. Es werden zwei Transistorarten verwendet. Der p-Kanal-Transistor leitet bei einer 0 (niedrige Spannung) am Eingang und sperrt bei einer 1 (hohe
Spannung). Der n-Kanal-Transistor leitet dagegen bei einer 1 am Eingang und sperrt
bei einer 0. Abb.10.1 zeigt auf der rechten Seite das Schaltbild des NAND-Gatters. Die
Masse wird als Ground (GND) bezeichnet. VDD ist die Versorgungsspannung (mit V fr

10.1CMOS-Technologie

291

1'

1' = VDD

Schaltertyp:
ffner

p-Kanal
Transistoren

A
Schaltertyp:
Schlieer

n-Kanal
Transistoren

0'

0' = GND

Abb.10.1Grundprinzip und reales Schaltbild eines NAND-Gatters

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

Abb.10.3 Aufbau eines


n-Kanal-Feldeffekttransistors

Gate-Weite W

Gate

Gate-Oxid

Source

Drain

Substrat
Poly-Silizium

n
Gate-Lnge L
p-dotiertes Silizium

Abb.10.4 Funktion des


n-Kanal-Feldeffekttransistors

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

Abb.10.6Transistor im Elektronenmikroskop. (Foto: Chipworks)

Abb.10.7 Layout eines


Transistors

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

Abb.10.8Layout eines NAND-Gatters

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 Grundschaltungen inCMOS-Technik


In diesem Abschnitt wird fr einige Grundschaltungen der Aufbau in CMOS-Technik
erlutert. Das Ziel ist dabei, dass Sie sich vorstellen knnen, wie Digitalschaltungen aus
Transistoren aufgebaut werden.

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

10.2 Grundschaltungen in CMOS-Technik


Abb.10.9 Schaltbild und
Layout eines Inverters

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

Transistoren fr A und B in Reihe und C ist parallel dazu. Im n-Kanal-Netzwerk sind A


und B parallel geschaltet und C liegt in Reihe dazu.
Nach dem gezeigten Grundprinzip lassen sich viele weitere Logikgatter entwerfen.
Ein Kennzeichen von CMOS-Logikgattern ist, dass Funktionen mit einer Invertierung
einfacher zu implementieren sind. Dies bedeutet, dass beispielsweise die NAND-Funktionen einfacher als eine UND-Funktion aufgebaut sein kann, denn die NAND-Funktion
nutzt die Eigenschaft, dass eine 0 die Transistoren nach VDD ffnet.
Fr ein Gatter ohne Invertierung wird ein Inverter angefgt. Ein UND-Gatter besteht
beispielsweise aus dem NAND-Gatter (Abb.10.1), ergnzt um den Inverter aus Abb.10.9.
Die Schaltung bentigt 6 Transistoren, vier fr das NAND, zwei fr den Inverter. Im Layout werden die beiden Schaltungsteile kombiniert, um wenig Flche zu belegen.

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

leiten oder zu sperren. Die entsprechende Schaltungsstruktur wird als Transmission-Gate


bezeichnet und ist in Abb.10.11, links dargestellt. Ein n-Kanal und ein p-Kanal-Transistor
sind parallel geschaltet und geben abhngig vom Steuersignal EN den Eingang auf den
Ausgang weiter. Da die Transistoren bei unterschiedlichem Pegel der Steuersignale leiten,
ist das Signal EN in positiver und negativer Polaritt erforderlich.
Der Vorteil dieser Schaltungsstruktur ist der geringe Schaltungsaufwand. Manche
Funktionen lassen sich mit deutlich weniger Transistoren umsetzen, als bei der Struktur mit komplementren Transistornetzwerken ntig wre. Der Nachteil der Struktur ist,
dass ein Transmission-Gate keine Treiberfhigkeit besitzt. Dies ist jedoch meist kein
Problem, denn der Treiber des Eingangssignals kann blicherweise ein oder sogar mehrere Transmission-Gates treiben. Falls die Treiberfhigkeit nach dem Transmission-Gate
zu gering ist, kann ein Inverter als Treiber eingefgt werden.
Vielleicht haben Sie beim Blick auf Abb.10.11 berlegt, ob nicht ein Transistor als
Transmission-Gate ausreichen wrde. Dies ist ungnstig, denn der n-Kanal-Transistor
schaltet eine 0 mit vollem Pegel, reduziert aber eine 1 um die Schwellenspannung. Umgekehrt schaltet der p-Kanal-Transistor die 1 mit vollem und die 0 mit reduziertem Pegel.
Erst die Kombination beider Transistoren gibt ein gutes Schaltverhalten.
Ein Logikgatter, welches die Transmission-Gate-Struktur verwendet, ist in
Abb.10.11, rechts zu sehen. Es handelt sich um einen 1-aus-2-Multiplexer mit Steuereingang S und Dateneingngen A und B. Die Dateneingnge sind jeweils durch ein
Transmission-Gate mit dem Ausgang Y verbunden. Da die Ansteuerung fr die Transmission-Gates unterschiedliche Polaritt hat, ist genau ein Gate geffnet, das andere sperrt.
Die Schaltung bentigt nur sechs Transistoren, zwei fr den Inverter und vier in den
Transmission-Gates, und ist damit sehr kompakt.

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

Abb.10.11 TransmissionGate und Anwendung in einem


Multiplexer

Transmission-Gate

Y
EN

Multiplexer

EN
A

10.2 Grundschaltungen in CMOS-Technik


Abb.10.12 Schaltbild des
Transmission Gate Pulsed
Latch. (Quelle: M. Alioto,
IEEE Transactions on VLSI
Systems, 2011)

299
VDD

P
CK
CK
/CK
P

&

/D

/Q

/CK
GND

Zeitdiagramm angegeben sowie einige interne Signalknoten mit Bezeichnung markiert.


Dateneingang D, Takteingang CK sowie Datenausgang Q sind fett dargestellt.
Funktionsweise des Transmission Gate Pulsed Latch (TGPL):
1. Das TGPL enthlt auf der linken Seite eine Taktaufbereitung. Der Takteingang CK
wird durch drei Inverter verzgert und in der Polaritt gedreht (Signal /CK, siehe
Zeitdiagramm). Durch ein NAND-Gatter werden dann CK und /CK verknpft und das
Pulssignal P entsteht. P ist meist 1 und wird nur bei einer steigenden Taktflanke kurz
0. Damit steuert dieses Pulssignal die Datenbernahme an der Taktflanke.
2. Der Dateneingang D luft zunchst durch einen Inverter, der als Treiber dient. /D wird
gespeichert, indem das Pulssignal P beim Pegel 0 ein Transmission-Gate ffnet. Das
gespeicherte Datensignal liegt dann am internen Knoten /Q an. Durch den Eingangsinverter hat es die umgekehrte Polaritt. Kurz nach der Taktflanke wechselt P wieder
auf den Wert 1 und schliet das Transmission-Gate.
3. Jetzt wird zur Datenspeicherung der interne Knoten /Q durch den Inverter und die
vier Transistoren auf der rechten Seite der Schaltung wieder nach /Q gegeben. Dieser
Schaltungsteil ist eine Rckkopplung, die den Wert an /Q speichert. Nur wenn P auf
0 ist, also bei einer steigenden Taktflanke, unterbricht die Rckkopplung, damit ein
neuer Eingangswert D gespeichert werden kann.
4. Durch den Inverter rechts unten wird der interne Knoten /Q auf den Datenausgang Q
gegeben. Die Invertierung am Eingang wird wieder durch den Ausgangsinverter aufgehoben, so dass der richtige Signalwert ausgegeben wird.
Fr die sichere Funktion muss das Zeitverhalten der Schaltung genau abgestimmt werden. Die Laufzeit der drei Inverter bei muss ein Pulssignal P erzeugen, welches den
Eingang D sicher bernimmt. Andererseits sollte das Pulssignal auch nicht zu lange
0 sein, denn whrend dieser Zeit darf sich D nicht ndern. Die Dauer des Pulssignals
bestimmt also Setup- und Hold-Zeit.
Auerdem muss die Verzgerungszeit von Transmission-Gate bei , sowie Rckkopplung bei zueinander passen, damit die Schaltungsteile sicher zusammenarbeiten.
Dieses Zeitverhalten muss bei allen Variationen der Arbeitsbedingungen sicher funktionieren. Als Variationen der Arbeitsbedingungen sind drei Einflussgren zu beachten,
die unter der Abkrzung PVT zusammengefasst sind:

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

10.3.1 Statische Verlustleistung


CMOS-Schaltungen haben zwar keinen Ruhestrom, der durch einen geffneten Transistor fliet. Dennoch flieen winzige sogenannte Leckstrme, da der Transistor natrlich
keine galvanische Trennung des Stromflusses vornimmt. Diese Leckstrme addieren
sich ber die Milliarden Transistoren eines Chips und verursachen eine statische
Verlustleistung.
Leckstrme entstehen an verschiedenen Stellen des Transistoraufbaus. Insgesamt gibt
es vier Anteile, die in Abb.10.13 dargestellt sind (vergleiche Abb.10.4 und 10.5). Der
Anschluss B ist dargestellt, da auch ber das Substrat (Bulk) Leckstrme flieen knnen.
Subthreshold Leakage Isubth entsteht, da der Kanal nicht vollstndig ausgeschaltet
werden kann.
Gate Leakage Igate ergibt sich auf Grund von Ladungstrgerbertragung durch sehr
dnnes Gate-Oxyd.
Reverse Bias Junction Leakage Irev ist der Sperrstrom des pn-bergangs zum Substrat.
Gate Induced Drain Leakage Igidl ist der Leckstrom vom Drain-Anschluss, verursacht
durch die Feldstrke der Drain-Spannung.
Der Hauptanteil der statischen Verlustleistung entsteht durch die Subthreshold Leakage
Isubth. Einen geringeren Anteil tragen Gate Leakage Igate und Reverse Bias Junction
Leakage Irev bei. Die Gate Induced Drain Leakage Igidl ist normalerweise vernachlssigbar. Allgemein fhrt eine erhhte Temperatur zu steigenden Leckstrmen.
Die Subthreshold Leakage ist exponentiell von der Schwellenspannung abhngig. Je
hher die Schwellenspannung, umso geringer sind die Leckstrme. Andererseits reduziert eine hhere Schwellenspannung auch die Verarbeitungsgeschwindigkeit, so dass ein
Kompromiss gefunden werden muss.

10.3.2 Dynamische Verlustleistung


Die dynamische Verlustleistung entsteht bei Aktivitt der Schaltung. Zum Verstndnis
wird die Inverter-Schaltung aus Abschn.10.2.1 erneut betrachtet. Abb.10.14 zeigt den
Inverter sowie Spannungen und Strme bei Schaltungsaktivitt. Zustzlich zu den beiden Transistoren ist ein Kondensator mit der Kapazitt CL abgebildet. Dieser stellt die

Abb.10.13 Leckstrme bei


einem CMOS-Transistor

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)

Abb.10.14CMOS-Inverter mit Zeitverlauf von Spannungen und Strmen

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.

10.3.3 Entwurf energieeffizienter Schaltungen


Um Schaltungen mit geringer Verlustleistung zu entwerfen, werden mglichst alle Einflussgren optimiert. Ein Faktor ist die Versorgungsspannung, die frher bei 5Volt lag
und heute bis auf Werte von etwa 1Volt reduziert wurde. Dies ist ohnehin erforderlich,
damit die Feldstrken in den kleiner werdenden Transistoren nicht zu stark ansteigen.
Durch die geringere Versorgungsspannung reduzieren sich statische und dynamische
Verlustleistung.
Die statische Verlustleistung kann durch Wahl der Parameter des Halbleiterprozesses,
also Transistorgeometrie und Dotierungsstrken reduziert werden. Weil dadurch auch die
Geschwindigkeit einer Schaltung sinkt, kann ein Hersteller einen Halbleiterprozess in
verschiedenen Varianten anbieten. Beispielsweise kann eine Version angeboten werden,
die im Hinblick auf die Schaltgeschwindigkeit optimiert ist. Weitere Varianten des Halbleiterprozesses knnten eine Low-Power-Version oder eine balancierte Version, die
einen Kompromiss aus Rechenleistung und Stromverbrauch darstellt, sein.
Die dynamische Verlustleistung kann reduziert werden, indem eine geringere Kapazitt CL umgeladen wird. Dies kann durch einen Prozess mit geringeren physikalischen
Abmessungen erfolgen. Aber auch eine geringere Anzahl an Schaltungselementen reduziert die Anzahl an Schaltungsknoten und damit die Lastkapazitt. Eine Mglichkeit ist
beispielsweise, wenn eine Rechenoperation nur eine Genauigkeit von 16bit anstatt 32bit
erfordert.
Als weitere Einflussgre kann eine geringere Hufigkeit der Signalwechsel die
dynamische Verlustleistung reduzieren. Eine Mglichkeit hierfr ist das Abschalten

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.

10.4 Integrierte Schaltungen


Eine komplette Integrierte Schaltung setzt sich aus vielen einzelnen Gattern und FlipFlops zusammen.

10.4.1 Logiksynthese und Layout


Standardzellbibliothek
Die in Abschn.10.2 beschriebenen Grundschaltungen werden vom Hersteller eines
Halbleiterprozesses in einer Bibliothek zur Verfgung gestellt. Diese Grundschaltungen
werden als Standardzellen bezeichnet. Eine Standardzellbibliothek umfasst beispielsweise 100 bis 200 Zellen, darunter:
Inverter und Treiber, also nacheinander geschaltete Inverter, fr grere Lastkapazitten
Logikgatter, also UND-, ODER-, NAND-, NOR-, XOR-Gatter mit unterschiedlicher
Anzahl an Eingngen
Komplexgatter, fr kombinierte Logikfunktionen, beispielsweise die Funktion
Y = (A B) & C aus Abb.10.10 oder der Multiplexer aus Abb.10.11
Arithmetische Schaltungen, beispielsweise Volladdierer
Flip-Flops in verschiedener Konfiguration, beispielsweise mit Set oder Reset
Auerdem knnen fr manche Zellen Varianten mit verschiedener Treiberstrke vorhanden sein. Ein Flip-Flop, das nur ein weiteres Gatter ansteuert, bentigt einfache Treiberstrke. Falls mehrere Gatter angesteuert werden, knnte die vierfache Treiberstrke
sinnvoll sein.
Logiksynthese
Die Auswahl der passenden Standardzelle erfolgt normalerweise durch ein EDA-Programm. Dazu schreiben Sie VHDL-Code und das Programm sucht dann die passende
Standardzelle fr die beschriebene Funktion. Anhand der Verbindungen zu weiteren
Standardzellen, entscheidet das Programm auch, welche Treiberstrke eingesetzt werden
soll. Dieser Schritt wird als Logiksynthese bezeichnet.

10.4 Integrierte Schaltungen

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

Abb.10.15Teil eines Chip-Layouts. (Quelle: Infineon)

Abb.10.16Chip-Foto eines System-on-Chip fr ein Smartphone. (Foto: Chipworks)

10.4 Integrierte Schaltungen

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

Abb.10.17Silizium-Wafer. (Foto: imec)

Abb.10.18 Substrat vor


und whrend der Dotierung
von Source und Drain eines
CMOS-Transistors

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.

10.4 Integrierte Schaltungen

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

Abb.10.20Verschiedene Gehuse fr Integrierte Schaltungen

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.

10.5 Miniaturisierung der Halbleitertechnik


Die erste Integrierte Schaltung wurde 1958 von Jack Kilby entwickelt, der dafr den
Nobelpreis fr Physik erhielt. Seitdem hat sich die Halbleitertechnik kontinuierlich weiterentwickelt. Ein wesentlicher Fortschritt ist, dass es durch geschickte Fertigungstechnik gelungen ist, die Gre eines Transistors immer weiter zu reduzieren.
Als Angabe wie klein die Strukturen einer Halbleitertechnologie sind, wird die sogenannte Strukturgre als Grenangabe verwendet. Frher entsprach die Strukturgre
der Gate-Lnge L des Transistors (vergleiche Abb.10.3). Durch verschiedene Mglichkeiten fr die Gestaltung der Transistorgeometrie hat die Strukturgre heute jedoch
keinen direkten Bezug zu einer bestimmten Geometrie. Eine kleinere Strukturgre
kennzeichnet einen moderneren Prozess, der mehr Transistoren enthalten kann. Durch
die kleineren Abmessungen arbeitet er schneller und mit weniger Verlustleistung. Die
Strukturgre betrgt aktuell 10 Nanometer (Stand 2016). Diese Angabe finden Sie oft in
Zeitschriftenartikeln, beispielsweise als neue CPU in 10nm Technologie. Ein menschliches Haar hat brigens einen Durchmesser von rund 80m, ist also 8000mal so dick.

10.5.1 Mooresches Gesetz


Durch die Miniaturisierung passen immer mehr Transistoren auf einen einzelnen Chip.
Diese Entwicklung wird als Mooresche Gesetz bezeichnet.
Das Mooresche Gesetz besagt: Die Anzahl der Transistoren pro Integrierter Schaltung verdoppelt sich alle zwei Jahre.

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

10.5 Miniaturisierung der Halbleitertechnik


Abb.10.21 Das Mooresche
Gesetz beschreibt die stetige
Zunahme an Transistoren je
integrierter Schaltung

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

Transistoranzahl fr einige Computer-Prozessoren dar, angefangen beim Intel 4004, dem


ersten in Serie produzierten Mikroprozessor.
Gordon Moore, ein Mitbegrnder der Firma Intel, hat die nach ihm benannte Aussage, die natrlich kein Naturgesetz, sondern eine Prognose ist, bereits 1965, also am
Anfang der Geschichte integrierter Schaltkreise formuliert. Ursprnglich wurde sogar
eine jhrliche Verdopplung prognostiziert, 1975 dann auf den Zeitraum von zwei Jahren zurckgenommen. Das Moores Law ist oft zitiertes Synonym fr das strmische
Wachstum der Halbleiterindustrie. Ein Ende dieser Entwicklung wurde zwar oft vorausgesagt, scheint aber fr die nchsten Jahre noch nicht in Sicht.

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

Abb.10.22Dreidimensionaler Aufbau eines FinFET-Transistors

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.5.3 Weitere Technologieentwicklung


In den nchsten Jahren werden Fortschritte in der Fertigungstechnik fr eine weitere Miniaturisierung sorgen. Techniken in der Erprobung sind unter anderem dreidimensionaler
Aufbau von Schaltungen und Verbindungen mit Kohlenstoffnanorhren (CNT, englisch
Carbon Nanotubes). Das Grundprinzip digitaler Schaltungen, also das Schalten von Nullen
und Einsen bleibt auch fr die vorgeschlagenen neuen Fertigungstechniken erhalten.
Das Problem fr eine neue Fertigungstechnik ist oft die Zuverlssigkeit in der industriellen Fertigung. Wenn im Labor ein Aufbau funktioniert, ist dies nur der erste Schritt.
Eine neue Technik muss auch in der Massenfertigung zu vertretbaren Kosten eine hohe
Fertigungsausbeute ergeben.

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

c) Zwei Inverter sind in Reihe geschaltet


d) n-Kanal und p-Kanal-Transistor sind parallel geschaltet
e) Es werden nur n-Kanal-Transistoren verwendet
Aufgabe 10.8
Was besagt das Mooresche Gesetz?
a) Die Flche von Integrierten Schaltungen verdoppelt sich alle zwei Jahre
b) Der Stromverbrauch Integrierter Schaltungen ist proportional zur Anzahl an
Transistoren
c) Die Flche von Integrierten Schaltungen halbiert sich alle zwei Jahre
d) Die Anzahl der Transistoren pro Integrierter Schaltung verdoppelt sich alle zwei Jahre
e) Der Stromverbrauch Integrierter Schaltungen ist proportional zur Flche
Aufgabe 10.9
Was kennzeichnet einen FinFET-Transistor?
a) Die Dotierung wird besonders schwach gewhlt
b) Der Kanal ist oberhalb des Gatters
c) Die Dotierung wird besonders stark gewhlt
d) Es handelt sich um einen Bipolartransistor
e) Das Gate liegt um den Kanal herum
Aufgabe 10.10
Welche Funktion hat die Schaltung in Abb.10.23?
Hinweis: Bei einer 0 am Eingang leiten die p-Kanal-Transistoren (oberes Netzwerk),
bei einer 1 am Eingang leiten die n-Kanal-Transistoren (unteres Netzwerk). Stellen Sie
eine Funktionstabelle fr die vier mglichen Eingangskombinationen auf und ermitteln
Sie, welcher Spannungswert am Ausgang anliegt. Aus der Funktionstabelle knnen Sie
die Logikfunktion erkennen.
Abb.10.23 Schaltung fr
Aufgabe 10.10

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.

Springer-Verlag GmbH Deutschland 2016


W. Gehrke et al., Digitaltechnik, Springer-Lehrbuch,
DOI10.1007/978-3-662-49731-9_11

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

Flash-EEPROM bezeichnet eine hufig genutzte Variante des EEPROMs. Dabei


knnen Speicherzellen nicht einzeln gendert werden, sondern beim ndern des Speicherinhalts werden ganze Speicherblcke zurckgesetzt (geflasht).
Auch der Begriff RAM, also Random Access Memory, hat historischen Hintergrund.
Heutige Speicher haben fast immer einen wahlfreien Zugriff auf die gespeicherten
Informationen. Frher wurden auch FIFO-Speicher verwendet, die Daten in der gleichen Reihenfolge ausgeben, mit der sie geschrieben werden. Der Begriff FIFO steht fr
First-In-First-Out und diese Speicher schieben intern die Daten wie in einem Flieband
schrittweise weiter.
Auch heute werden noch FIFOs verwendet, beispielsweise in Computer-Netzwerken,
wenn Datenpakete empfangen und in der gleichen Reihenfolge weitergegeben werden.
In diesen FIFOs ist jedoch mittlerweile ein SRAM-Speicher enthalten, welcher in fester
Reihenfolge angesteuert wird.

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.1.3 Physikalisches Interface


Die Geschwindigkeit eines Datenzugriffs ist natrlich wichtig fr die Leistungsfhigkeit
eines Speichers. Dabei unterscheidet man zwischen Latenzzeit und Datentransferrate.
Die Latenzzeit ist die Reaktionszeit auf einen Datenzugriff und hngt von der Organisation des Speichers ab. Die Datentransferrate ist die Geschwindigkeit mit der Daten zwischen Speicher und System bertragen werden.
Die hchste Datentransferrate ist mglich, wenn der Speicher sich auf demselben
Chip wie das restliche System befindet. Dies wird als interner Speicher oder Embedded
Memory bezeichnet. Fr separate Speicherbausteine, also externen Speicher, ist die Verbindung, das physikalische Interface zwischen Speicher und System, entscheidend fr
die Datentransferrate.
Zur Beschleunigung des Datentransfers werden verschiedene Schaltungstechniken
eingesetzt.
Reduzierter Spannungshub mit Referenzspannung
Die Leitungen zwischen System und Speicher haben Kapazitten, die bei Signalwechseln umgeladen werden mssen. Um dies zu beschleunigen, wird der Spannungshub auf
den Leitungen reduziert. Allerdings sinkt dadurch auch der Strabstand, denn der bergangsbereich zwischen Low- und High-Pegel wird sehr klein. Als Ausgleich wird eine
Referenzspannung eingefhrt. Wenn der Signalpegel hher als die Referenzspannung ist,

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)

Abb.11.2Speicherzellen eines SRAMs

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

DRAM-Zelle mit Trench-Kondensator sind in Abb.11.5 dargestellt. WL (Write Line)


bezeichnet die Adressleitung.
Begrenzte Datenerhaltung
Die Ladung des Kondensators wird nicht, wie beim SRAM, durch eine Rckkopplung
automatisch erhalten. Dies muss fr die Speicherung und fr den Lesevorgang bercksichtigt werden.
Bei der Speicherung wird der Kondensator durch Leckstrme langsam entladen. Die
Daten werden also nur fr einen kurzen Zeitraum gespeichert und mssen durch einen
Refresh periodisch erneuert werden. Die garantierte Speicherzeit zwischen zwei Refresh
vorgngen ist abhngig von der Halbleitertechnologie und liegt in der Grenordnung
von 100ms.
Beim Lesevorgang wird der Transistor am Kondensator geffnet und die Ladung ber
die Datenleitung gelesen. Dies erfordert einen sehr empfindlichen Leseverstrker, der
erkennen muss, ob ein kleiner Kondensator am Ende einer langen Datenleitung geladen
oder nicht geladen war. Auerdem wird durch das Lesen des Kondensators die Information gelscht. Nach dem Lesen einer Zelle muss also immer die Information wieder in
die Kondensatoren zurckgeschrieben werden.
Dies hrt sich zunchst nach einem sehr hohen Aufwand an. Gemildert wird der Aufwand dadurch, dass beim Lesen eine ganze Zeile in den Leseverstrker geladen wird.
Weitere Datenzugriffe in die gleiche DRAM-Zeile knnen darum sehr schnell erfolgen,
da die Daten bereits im Leseverstrker vorhanden sind.
Als Zahlenbeispiel nehmen wir wieder den oben betrachteten Speicher mit 220 Datenworten zu 16Bit. Wenn er als DRAM implementiert ist, wird zunchst eine der 4096
Zeilenadressen angesprochen und in den Leseverstrker geladen. Dort stehen dann 256
Worte zu 16Bit fr den schnellen Datenzugriff bereit.

Trench Kondensator

Transistor
Source

Gate

Drain

Polysilizium

Isolation
Substrat

Abb.11.5DRAM-Speicherzelle mit Trench-Kondensator als physikalischer Aufbau und im


Elektronenmikroskop. (Foto: Chipworks)

11.2Speichertechnologien

323

Aufgrund des geringeren Platzbedarfs fr die Speicherzellen wird fr die Speicherung


groer Datenmengen oft ein DRAM eingesetzt. Beispielsweise wird der Hauptspeicher
eines PCs durch DRAM-Speicher implementiert.

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

...

Abb.11.6 Struktur eines


ROMs

...

Eine besondere Art eines nichtflchtigen Speichers stellt der Einmalprogrammierbare


Speicher dar. Er wird als OTP, also One-Time-Programmable bezeichnet. Ein OTP-Speicher kann nach der Programmierung nicht mehr verndert werden und gegebenenfalls
muss ein kompletter Baustein ausgetauscht und weggeworfen werden. In der Anfangszeit der Mikroelektronik war eine Programmierung nicht anders mglich. Heute ist diese
Einschrnkung fr viele Anwendungen nicht mehr akzeptabel.
Fr programmierbare Schaltungen (FPGAs) wird eine Einmalprogrammierung jedoch
weiterhin eingesetzt. Sie hat den Vorteil, dass sie Sicherheit gegen unbeabsichtigte nderung oder Manipulation einer Schaltung bietet. Ein Anwendungsbeispiel sind FPGAs fr
Satelliten und Raumfahrt, bei denen die Programmierung durch kosmische Strahlung
nicht gestrt werden darf. Bei der Entwicklung werden eventuell einige wenige Bausteine mit Testversionen programmiert und ausgetauscht. Danach kann eine Kleinserie
mit dem gewnschten Speicherinhalt programmiert und in Gerte eingebaut werden.

2
...
1
...
0
...

Datenleitung

...

324

11Speicher

Implementiert werden Einmalprogrammierbare Speicher durch Sicherungen und


Antisicherungen. Eine Sicherung brennt bei zu hohem Strom durch, whrend eine
Anti-Sicherung (Anti-Fuse) bei Anlegen einer Programmierspannung eine elektrische
Verbindung herstellt. In der Praxis sind heutzutage Anti-Fuses gebruchlich, da diese
zuverlssiger programmiert werden knnen.
Das Grundprinzip eines PROM zeigt Abb.11.7. An jeder Verbindung von Adressleitung und Datenleitung ist eine Sicherung oder Anti-Fuse in Reihe zu einer Diode
geschaltet. Bei der Programmierung wird festgelegt, welche Verbindungen bentigt
werden.

11.2.5 EEPROM

...

...

Abb.11.7 Struktur eines


OTP-Speichers

...

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

Abb.11.9 Interne EEPROMSpeicherzellenstruktur in


NOR- und NAND-Technik

...

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.

11.2.6 Innovative Speichertechniken


In den letzten Jahren ist der Markt fr nicht-flchtige Halbleiterspeicher (NVRAM)
kontinuierlich gewachsen. Grund dafr ist, dass diese Speicher in immer mehr Gerten
eingesetzt werden und dabei auch die Speichergren steigen. NVRAMs finden sich in
USB-Speicher-Sticks, Digitalkameras, Mobiltelefonen, Tablets, Solid-State-Festplatten
und weiteren Elektronikgerten.
Darum werden weitere Speichertechniken entwickelt, die hhere Speicherkapazitten,
geringere Kosten oder einfachere Ansteuerung verglichen mit EEPROMs ermglichen.

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

Abb.11.10Kristallstruktur eines FRAM-Speichermaterials

328

11Speicher

Aluminiumdioxid (Al2O3) gegenber einer weiteren magnetischen Schicht (siehe


Abb.11.11). Die obere Magnetschicht ist magnetisch weich und kann in ihrer magnetischen Orientierung gedreht werden. Die untere Magnetschicht ist magnetisch hart und
hat eine feste Orientierung. Der Strom durch das Dielektrikum ist durch einen Tunneleffekt abhngig davon, ob die magnetische Orientierung parallel oder antiparallel ist.
PCRAM
PCRAM, also Phase-Change-RAM, Phasenwechselspeicher, nutzt ein Material, welches
eine kristalline oder amorphe Struktur einnehmen kann. Je nach Struktur ist der elektrische Widerstand unterschiedlich und zeigt so eine 0 oder 1 an. Der Wechsel zwischen
den Strukturen erfolgt ber Aufheizen durch elektrischen Strom. Je nach Geschwindigkeit der Abkhlung wird das Material kristallin oder amorph (Abb.11.12).
RRAM
RRAM, auch ReRAM, fr Resitive RAM, verndert hnlich wie PCRAM den Widerstand eines Speichermaterials. Dabei befindet sich ein Metalloxid zwischen zwei Elektroden. Durch einen Strom kann der Widerstand des Metalloxids zwischen hohem und
niedrigem Widerstand wechseln. Dafr ist allerdings keine Erwrmung und Abkhlung
des Materials ntig, so dass ein Speichervorgang prinzipiell einfacher erfolgen kann. Ein
Ausschnitt aus der Speichermatrix ist in Abb.11.13 dargestellt.

Strom
ferromagnetisch weich
Tunnelbarriere (Al2 O3 )
ferromagnetisch hart
Parallele Magnetisierung
Logischer Zustand: 0'

Antiparallele Magnetisierung
Logischer Zustand: 1'

Abb.11.11Aufbau eines MRAM-Speicherelements

Abb.11.12 Speicherprinzip
eines Phase-Change-RAM

Elektrode

Halbleiterlegierung
Kristalline Struktur
Logischer Zustand: 0'

Amorphe Struktur
Logischer Zustand: 1'

11.3 Eingebetteter Speicher

329

Elektroden
Metalloxid

Horizontalleitung
Vertikalleitung

Abb.11.13Dreidimensionale Struktur eines RRAMs

Ansteuerung innovativer NVRAMs


Die Ansteuerung erfolgt fr alle Speichertechnologien wieder in Matrixstruktur mit
Adress- und Datenleitungen. Die Einbindung des Speichermaterials ist abhngig davon,
welche elektrische Eigenschaft sich fr die Datenspeicherung ndert. Teilweise wird ein
Transistor bentigt, der die Speicherzelle freischaltet.
Eine besonders kompakte Anordnung ist fr bestimmte RRAMs mglich. Durch horizontale und vertikale Leitungen kann eine einzelne Speicherzelle direkt angesprochen
werden (Abb.11.13). Durch eine Diode in der Speicherzelle, wie beim ROM, haben
andere Zellen keinen Einfluss auf die Leseelektronik. Mehrere Lagen an Zellen sollen
gestapelt werden, um die Speicherkapazitt zu erhhen. Dabei kann eine Leitung gemeinsam fr zwei Ebenen an Speicherzellen genutzt werden (Vertikalleitung in Abb.11.13).

11.3 Eingebetteter Speicher


Als eingebetteter Speicher, engl. Embedded Memory, werden Speicherblcke bezeichnet,
die sich gemeinsam mit einer greren Schaltung auf einem Chip befinden.

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)

11.3 Eingebetteter Speicher

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

Abb.11.15 Symbol und


Ausschnitt der Wertetabelle
fr ein ROM zur WurzelBerechnung

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.

11.4 Diskrete Speicherbausteine


Wenn in einem digitalen System grere Datenmengen gespeichert werden mssen, werden hierzu hufig diskrete Speicherbausteine eingesetzt. Das System besteht dann aus
mehreren Chips, also zum einen aus Signalverarbeitungschips, gefertigt in einem Standard-CMOS-Prozess, zum anderen aus einem oder mehreren Speicher-Chips, gefertigt in
speziellen CMOS-Varianten.

11.4 Diskrete Speicherbausteine

333

11.4.1 Praktischer Einsatz


Ein Beispiel hierfr ist ein PC. Er enthlt auf dem Motherboard unter anderem die Chips fr
CPU und Chipset, gefertigt in Standard-CMOS. Als Hauptspeicher wird DRAM eingesetzt,
der sich auf steckbaren Speichermodulen befindet. Jedes Speichermodul enthlt mehrere,
beispielsweise acht, DRAM-Chips. Der Boot-Code fr das PC-System, bekannt als BIOS
(Basic Input Output System), sowie Grundeinstellungen befinden sich in einem NVRAM.

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

11.4 Diskrete Speicherbausteine

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:









A, 20Bit, Adresse, gemeinsame fr Schreib- und Lese-Interface


D, 36Bit, Dateneingang
Q, 36Bit, Datenausgang
/WPS, Write-Port-Select aktiviert einen Schreibzugriff
/RPS, Read-Port-Select aktiviert einen Lesezugriff
K und /K, Takt fr Schreib-Interface in positiver und negativer Polaritt
C und /C, Takt fr Lese-Interface in positiver und negativer Polaritt
CQ und /CQ, Ausgabe des Takts C fr Anpassung an Laufzeiten
VREF, Referenzspannung fr Datenleitungen
weitere Pins fr Steuerfunktionen, Stromversorgung und Fertigungstest

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

q00 q01 q10 q11 q20 q21

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.

11.4 Diskrete Speicherbausteine

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

11.4 Diskrete Speicherbausteine

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

Abb.11.17Zeitablauf zweier Leseoperationen eines DDR3-SDRAMs

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.

11.4 Diskrete Speicherbausteine

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:



IO, 8Bit, I/O-Port


CLE, Command Latch Enable, bernahmesignal fr Befehle
ALE, Address Latch Enable, bernahmesignal fr Adresse
/CE, Chip Enable

342

11Speicher

/WE, Write Enable


/RE, Read Enable
RY/BY, Ready/Busy, zeigt an, ob der Baustein noch einen Befehl ausfhrt
/WP, Write Protect, fr einen Schreibschutz
Pins fr Stromversorgung

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.

Abb.11.18 Zeitablauf beim


Lschen eines EEPROMBlocks

CLE
/CE
/WE
ALE
/RE
IO
RY/BY

...
...
...
...
...
6016 A-0 A-1 A-2

D016

...
...

7016

sts

11.4 Diskrete Speicherbausteine

343

Bei einem NAND-EEPROM kann es vorkommen, dass Speicherblcke fehlerhaft sind


oder im Gebrauch fehlerhaft werden. Dies wrde durch das Statuswort angezeigt und
der Controller verwendet einen solchen Block dann nicht mehr. Fr den hier betrachteten Baustein werden 60.000 Lschzyklen angegeben, wobei mit zunehmender Anzahl an
Lschzyklen einige Blcke unbrauchbar werden knnen. Laut Datenblatt bleiben ber
die spezifizierte Lebensdauer mindestens 4016 der 4096 Blcke funktionsfhig.
Schreiben von Daten
Das Schreiben von Daten erfolgt vorzugsweise fr einzelne Seiten mit 4096 plus
256Bytes. Der Zeitablauf ist in Abb.11.19 dargestellt. Die Steuersignale werden hnlich
wie beim Lschen angesteuert und fr bekannte Schritte nicht einzeln erlutert.
1. Das Kommando 8016 gibt an, dass ein Schreibvorgang ausgefhrt werden soll.
2. Die Adresse von Block und Seite wird in fnf Teilen von A-0 bis A-4 bertragen.
3. Jetzt werden nacheinander die Daten jeweils mit der steigenden Flanke von /WE
bertragen. Bis zu 4352Byte sind mglich, das heit D-x wre dann D-4351. CLE
und ALE auf 0 zeigen an, dass es sich weder um ein Kommando (CLE) noch um
Adressen (ALE) handelt.
4. Das Kommando 1016 startet den Schreibvorgang. Die Daten sind bisher in einem internen
Zwischenspeicher und werden jetzt in die Speichermatrix geschrieben. Das EEPROM
berprft den Schreibvorgang und versucht eventuell mehrfach zu schreiben. Durch RY/
BY wird die Aktivitt angezeigt. Die Programmierung einer Seite dauert 300 bis 700s.
5. Nach Ende des Schreibvorgangs muss mit dem Kommando 7016 berprft werden, ob
das Schreiben erfolgreich war.
6. Der Baustein antwortet mit einem Statuswort (sts).
Fr die Verwendung des EEPROMs ist die interne Organisation zu beachten. Der Con
troller schreibt Daten auf freie Seiten des Speichers. Nicht mehr bentigte Seiten werden
nicht sofort gelscht, sondern zunchst als ungltig gekennzeichnet. Erst wenn alle Seiten eines Blocks ungltig sind, wird ein ganzer Block gelscht. Hierfr kann es eventuell
ntig sein, noch gltige Seiten in andere Blcke zu kopieren.
Damit der Controller Schreibzugriffe und das Lschen von Blcken optimieren kann,
wird empfohlen, den Speicher nicht komplett zu fllen.

Abb.11.19 Zeitablauf beim


Schreiben in ein EEPROM

CLE
/CE
/WE
ALE
/RE
IO
RY/BY

8016 A-0

...

...

...

...

...

...

...

...

...

...

...

...

...

...

...
...

A-4

D016 ...
...

...
D-x

1016

...
...

7016

sts

344

11Speicher

Lesen von Daten


Das Lesen von Daten erfolgt hnlich wie das Schreiben von Daten. Zunchst wird ein
Lesekommando gegeben, dann die Leseadresse in fnf Teilen und ein weiteres Kommando. Daraufhin ldt der Baustein die Daten aus der Speichermatrix in den Leseverstrker und gibt nacheinander die Daten ab der angeforderten Adresse aus. Das Lesen der
Daten aus der Speichermatrix bentigt 25s.

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.4.5 FRAM mit seriellem Interface


11.4.5.1bersicht
Als ein Beispiel fr ein NVRAM mit einer innovativen Speichertechnik wird der
Baustein MB85RS64V von Fujitsu betrachtet. Es handelt sich um ein Ferroelektrisches RAM mit 8192 Worten zu 8bit und seriellem Interface. Jede Zelle kann einzeln
beschrieben werden. Mit der Speicherkapazitt von 8kByte handelt es sich um eine
kleine Speichergre. Dafr ist der Baustein allerdings auch sehr kompakt und hat ein
Gehuse mit nur 8 Pins. Bausteine mit hnlichem Interface und Speichergre sind auch
als EEPROM von verschiedenen Herstellern verfgbar.
Als besonderer Vorteil sind fr das FRAM 1012 mgliche Zugriffe pro Zelle spezifiziert. Fr EEPROMs werden blicherweise 105 bis 106 Schreibvorgnge angegeben.
Die Anschlsse des Bausteins sind:






SCK, Serial Clock, Takt fr den seriellen Zugriff


SI, Serial Data Input, serieller Dateneingang
SO, Serial, Data Output, serieller Datenausgang
/CS, Chip Select, zum Aktivieren des Bausteins
/WP, Write Protect, Schreibschutz
/HOLD, pausiert einen Zugriff
Versorgungsspannung und Masse

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

...

Abb.11.21 Aufbau eines


Speichersystems aus mehreren
Speichermodulen

...

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

0x8000 0xffff: EEPROM


0x6000 0x7fff: unbelegt
0x4000 0x5fff: SRAM
0x1000 0x3fff: unbelegt
0x0000 0x0fff: ROM

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

11.5.2 Multiplexing des Datenbusses


Jetzt betrachten wir den Datenbus auf der linken Seite von Abb.11.21. Daten knnen
von der Steuerlogik zu einem Speicher oder vom Speicher zur Steuerlogik bertragen
werden. Fr die Implementierung gibt es zwei Mglichkeiten. Entweder sind getrennte
Datenleitungen fr Schreib- und Leseoperationen vorhanden, die dann durch Multiplexer
ausgewhlt werden. Oder es wird eine gemeinsame Datenleitung verwendet, auf die alle
Busteilnehmer mit Tri-State-Ausgngen schreiben.
Innerhalb Integrierter Schaltungen werden stets getrennte Datenleitungen fr Schreibund Leseoperationen verwendet. Tri-State-Leitungen sind innerhalb eines ICs zwar technisch mglich, aber fr Fertigung und Herstellungstest sehr problematisch. Auch fr die
Ansteuerung diskreter Speicherbausteine knnen getrennte Datenleitungen verwendet
werden. Beispiele dafr sind das QDR-II-SRAM und das FRAM aus Abschn.11.4.
Der Schaltungsaufbau bei getrennten Datenleitungen ist in Abb.11.23 dargestellt,
wiederum fr das Speichersystem mit EEPROM, SRAM und ROM. Alle drei Speichermodule haben einen Datenausgang, aber nur das SRAM hat einen Dateneingang. Hier
wird angenommen, dass die Programmierung des EEPROMs ber ein eigenes Programmier-Interface erfolgt (nicht dargestellt); die Steuerlogik schreibt nicht in das EEPROM.
Die Richtung von Schreiben und Lesen bezieht sich jeweils auf die Sicht der Steuerlogik. Der Schreibbus fhrt direkt vom Datenausgang (D_OUT) der Steuerlogik an den
Dateneingang (D_IN) des Speichermoduls. Auch mehrere Speichermodule knnen an
den Schreibbus angeschlossen werden, da nur die Steuerlogik Daten schreiben kann.
Der Lesebus hat mehrere Quellen, und zwar die Datenausgnge aller Speichermodule. Darum ist ein Multiplexing erforderlich, damit nur die Daten des adressierten

&

...
...

&

...

...

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

Abb.11.23Datenbusse des Speichersystems mit drei Speichermodulen

11.5Speichersysteme

349

...
...

Datenbus
auf Platine
(8 Bit)

D_IN(7:0)

...

Speichermoduls an die Steuerlogik gegeben werden (siehe Abb.11.23). Zunchst wird


fr jedes Speichermodul die RD-Leitung mit der CS-Leitung UND-verknpft. Das verknpfte Signal ist 1, wenn ein Lesezugriff auf das entsprechende Modul erfolgt. Zum
Multiplexing wird der Datenausgang des Speichermoduls durch UND-Gatter weitergegeben. Falls das Modul nicht aktiv ist, bleibt der Ausgang dieser UND-Gatter auf 0. Da
immer nur ein Speichermodul adressiert sein kann, ist auch nur ein Lesebus aktiviert und
die anderen Lesebusse sind 0. Fr den Dateneingang der Steuerlogik werden die einzelnen Lesebusse ODER-verknpft.
Ein Datenbus mit Tri-State-Leitungen kann fr die Ansteuerung diskreter Bauelemente verwendet werden. Dies hat den Vorteil, dass die Datenleitungen gemeinsam
zum Lesen und Schreiben verwendet werden, denn die Anzahl der Anschlsse eines
ICs ist begrenzt. Beispiele dafr sind das DDR3-SDRAM und das Flash-EEPROM aus
Abschn.11.4. Beim Flash-EEPROM wurde der Datenbus auch fr Kommandoworte und
Adresse genutzt, um noch mehr Pins zu sparen.
Abb.11.24 zeigt ein Speichersystem mit Tri-State-Leitungen. Die Blcke fr Speicher und Steuerlogik stellen jetzt jeweils eigene diskrete Bauelemente dar und sind zur
Verdeutlichung mit dickeren Linien gezeichnet. Sowohl die Speicher als auch die Steuerlogik mssen fr den Betrieb an einem Tri-State-Bus vorgesehen sein und entsprechende
Treiber an den Anschlssen besitzen. Im Chip der Steuerlogik wird der Tri-State-Treiber
durch das Write-Signal angesteuert, bei den Speichern durch UND-Verknpfung aus
Read und jeweiligem Chip-Select-Signal.

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)

Abb.11.24Speichersystem mit diskreten Bauelementen und Tri-State-Leitungen

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.5.3 Ansteuerung diskreter Speicherbausteine


Die vier in Abschn.11.4 vorgestellten diskreten Speicherbausteine haben Schnittstellen,
die unterschiedlich komplexe Ansteuerungen bentigen:
Das serielle NVRAM kann relativ einfach angesprochen werden.
Das NAND-EEPROM hat ein recht einfaches Interface, erfordert jedoch Fehlerkorrektur und Beachtung defekter Blcke.
Das SRAM hat ein einfaches logisches Interface, erfordert jedoch bei hheren Taktfrequenzen eine spezielle Taktbehandlung sowie eine physikalische Ansteuerung mit
Logikpegeln bezogen auf eine Referenzspannung.
Das DRAM erfordert ein komplexes Protokoll fr die Ansteuerung, Beachtung der Bankstruktur sowie Taktbehandlung und physikalische Ansteuerung mit
Referenzspannung.
Fr die Ansteuerung diskreter Speicherbausteine sind verschiedene Funktionselemente
vorhanden, die fr den Aufbau eines Systems genutzt werden knnen.
Logisches Interface
Fr die logische Ansteuerung werden Controller angeboten, welche die Ansteuerung der
Bausteine ausfhren. Diese Controller sind teilweise als VHDL-Code oder Gatter-Netzliste verfgbar und knnen in eigene Schaltungsentwrfe bernommen werden. Solche
Schaltungsbeschreibungen werden als Intellectual Property (IP) bezeichnet und mssen
blicherweise als Lizenz gekauft werden. Fr programmierbare Bausteine (FPGAs) werden von den Herstellern IP-Blcke angeboten. Diese sind fr Kufer der FPGAs oft ohne
weitere Kosten verfgbar.
Physikalisches Interface
Die physikalische Ansteuerung von SRAMs und DRAMs erfolgt ber Pins mit speziellen
Logikpegeln. Fr Tri-State-Busse sind ebenfalls entsprechende Pins erforderlich. Die Hersteller von ICs und FPGAs bieten diese Ein- und Ausgangstreiber als Bibliothekselement an.

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

d) Zugriff auf verschiedene Speicherblcke


e) Aufladen von Kondensatoren
Aufgabe 11.6
Wie erfolgt die Datenspeicherung in EEPROMs?
a) Kondensator
b) Magnetfeld
c) Rckkopplung von Invertern
d) Transistor mit Floating-Gate
e) Brennen von Sicherungen
Aufgabe 11.7
a) Wie viele Adressleitungen braucht ein SRAM mit 16K Datenworten?
b) Wie viele Adressleitungen braucht ein SRAM mit 256K Datenworten?
Aufgabe 11.8
a) Ein SRAM hat 16 Adressleitungen und 8 Datenleitungen. Wie hoch ist die
Speicherkapazitt?
b) Ein SRAM hat 20 Adressleitungen und 16 Datenleitungen. Wie hoch ist die
Speicherkapazitt?
Aufgabe 11.9
Abb.11.25 zeigt ein einfaches Speichermodul mit 6 Adressleitungen und 1 bit Wortbreite.
Damit soll ein Primzahl-Detektor realisiert werden. Programmieren Sie die Speicherelemente
mit 0 oder 1, so dass der Speicher eine 1 ausgibt, wenn eine Primzahl am Eingang anliegt.
Abb.11.25 Einfaches
Speichermodul fr PrimzahlDetektor

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

Analog-Digital- und Digital-AnalogUmsetzer

12

Analog-Digital-Umsetzer (ADU), engl. Analog-Digital-Converter (ADC), sind Bindeglieder


zwischen analogen Signalquellen wie Messwandler fr Druck, Temperatur, Weg, Beschleunigung, Mikrofonen und digital arbeitenden Systemen. Sie wandeln einen analogen
Spannungswert in eine digitale Darstellung. Digital-Analog-Umsetzer (DAU) engl. DigitalAnalog-Converter (DAC), wandeln dann einen digitalen Wert wieder in die analoge Welt.
Technische Herausforderungen beim Einsatz von ADUs und DAUs liegen in den
Anforderungen an Genauigkeit und Geschwindigkeit der Umsetzung. Wirtschaftliche
Herausforderungen liegen in den Kosten der Umsetzer, denn ein Gesamtsystem kann aus
Analog-Digital-Umsetzer, digitaler Verarbeitung und Digital-Analog-Umsetzer bestehen.
Im Vergleich mit einem rein analogen System mssen die Kosten vergleichbar sein oder
die digitale Verarbeitung muss eine bessere Qualitt der Verarbeitung ermglichen.
Generelle Vorteile der digitalen gegenber der analogen Technik bestehen unter anderem durch:
Geringere Stranflligkeit digitaler Signale, bzw. Fehlerkorrektur nach Strungen
Einsatzmglichkeit besonders hoch integrierter Digitalbausteine wie FPGAs, Mikroprozessoren, Signalprozessoren, Speicher usw.
Mglichkeit zur Datenkomprimierung und Verschlsselung von Daten

12.1 Grundprinzip von Analog-Digital-Umsetzern


Analog-Digital-Umsetzer sind Systeme, die einer analog vorliegenden elektrischen Messgre (z.B. einer Spannung U) eine digitale Reprsentationsgre (z.B. eine binre
Zahl) zuordnen. Bei analogen Systemen liegt demgegenber die Reprsentationsgre,

Springer-Verlag GmbH Deutschland 2016


W. Gehrke et al., Digitaltechnik, Springer-Lehrbuch,
DOI10.1007/978-3-662-49731-9_12

353

354

12 Analog-Digital- und Digital-Analog-Umsetzer

beispielsweise der Zeigerausschlag eines Messgertes, in analoger Form vor. Analoge


Gren sind zeit- und wertkontinuierlich wie Abb.12.1 zeigt.
Ein ADU ordnet der analogen Eingangsgre eine zeit- und wertdiskrete Reprsentationsgre zu, beispielsweise Binrzahlen, wie Abb.12.2 zeigt. Ein ADU bildet demzufolge ein Signalintervall (Quantisierungsintervall Q) auf einen diskreten Wert ab.
Dadurch werden systematische Fehler, die Quantisierungsfehler, verursacht.
Beim Vorliegen zeit- und wertkontinuierlicher, also analoger Signale bewirkt der
ADU eine Diskretisierung in zweifacher Hinsicht:
Diskretisierung in eine endliche Anzahl zugelassener Amplitudenwerte, auch Quantisierung genannt.
Diskretisierung im Zeitbereich, denn ein Amplitudenwert gilt fr eine bestimmte
Mindestzeit. Diesen Vorgang nennt man Abtastung.
Weiterhin liefert der ADU die digitale Information in einem bestimmten Code, beispielsweise dem Dual-Code. Dieser Vorgang heit Codierung. Die erforderlichen Verarbeitungsschritte beim bergang vom analogen zum digitalen Signal sind in Abb.12.3
veranschaulicht.
Wesentliche Anwendungsgebiete fr ADUs und DAUs sind:
Digitalmessinstrumente: Analoge Messgren wie Strom, Spannung, Widerstand, Frequenz, Temperatur, Gewicht usw. werden mit endlicher Auflsung als Ziffern angezeigt.

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

12.1 Grundprinzip von Analog-Digital-Umsetzern

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)
...

101 111 110

t
T

...

Digitalsignal
zweiwertig und
zeitdiskret

1
0
0

t
T

Abb.12.3Verarbeitungsschritte beim bergang von analogen zu digitalen Signalen

Nachrichtentechnische Einrichtungen: Sprach- und Videosignale, die zunchst in analoger


Form vorliegen, werden digitalisiert und digital bertragen oder gespeichert. Beispiele:
Telefonie per Voice-over-IP, Videocodierung fr Digitalfernsehen oder Blu-Ray Disc.
Digitale Signalverarbeitung: Sprach-, Bild- und Videosignale werden durch digitale
Verarbeitung verndert. Beispiel: Bildverbesserung in Digitalkameras.
Digitale Regelungssysteme und Prozesssteuerung: Ein Digitalregler kann einen oder
mehrere Regelkreise betreiben. Beispiele: Werkzeugmaschinen, Lebensmittelproduktion, allgemeine Prozessablufe, berwachung von Verbundsystemen zur elektrischen
Energieversorgung.

12.1.1 Systeme zur Umsetzung analoger indigitale Signale


Die Analog-Digital-Umsetzung umfasst prinzipiell die folgenden vier Schritte:
1. Bandbegrenzung durch Tiefpassfilter
2. Abtastung im Abtasthalteglied (AHG, engl. Sample & Hold)
3. Quantisierung
4. Codierung

356

12 Analog-Digital- und Digital-Analog-Umsetzer

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
 

T = Tabt < 1/ 2fg

Das bedeutet, die in einem Signalgemisch auftretende hchstfrequente spektrale


Komponente muss wenigstens zweimal pro Periode Tg abgetastet werden. Dieses lsst
sich sowohl im Zeit- als auch im Spektralbereich begrnden. Die Formel fr Tabt wird
auch mit dem Formelzeichen kleiner-gleich angegeben, aber das Gleichheitszeichen
hat nur theoretische und keine praktische Bedeutung. Wird das Abtasttheorem verletzt,
entstehen Signalfehler, die in der Regel nicht zu eliminieren sind.
Als Beispiel soll ein Audiosignal betrachtet werden. Das menschliche Gehr kann Frequenzen bis zu 20kHz wahrnehmen. Die Abtastrate muss darum grer als 40kHz sein.
Fr die Speicherung auf einer Audio-CD wird eine Abtastrate von 44,1kHz verwendet.

Analogsignal

Tiefpass
fg

Abtasthalteglied

Quantisierer

Ablaufsteuerung

Abb.12.4Gesamtsystem zur Digitalisierung analoger Signale

Codierer

Digitalsignal

12.1 Grundprinzip von Analog-Digital-Umsetzern

357

12.1.3 Abtasthalteglied (AHG)


Das Abtasthalteglied soll dem vorliegenden Signal in Abstnden, die durch das Abtasttheorem festgelegt sind, Signalproben entnehmen und diese whrend der Umsetzdauer
tu des ADUs konstant halten (speichern), wie Abb.12.5 zeigt. Die Haltedauer tH muss
grer als die Umsetzdauer tu des ADUs gewhlt werden, so dass gilt:

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

und nach tu umgestellt:

s(t)

sa(t)

tH

AHG

t
T

nT

Abb.12.5Prinzipielle Wirkungsweise eines Abtasthaltegliedes

t
T

358

12 Analog-Digital- und Digital-Analog-Umsetzer

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

12.1 Grundprinzip von Analog-Digital-Umsetzern

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.

12.1.4 Erreichbare Genauigkeit fr ADUs abhngig von der


Codewortlnge
Durch die Codewortlnge n ist die Anzahl der mglichen Codewrter gegeben. Hieraus
lassen sich die Quantisierung der Messwerte und die erreichbare Genauigkeit berechnen.
Zur besseren Anschaulichkeit wird im Folgenden angenommen, dass der Messbereich
bei 0V beginnt.
Ein Wert fr die mgliche Genauigkeit eines ADUs ist die Quantisierungsintervallbreite Q. Sie berechnet sich aus der Codewortlnge n und dem Aussteuerbereich Umax.
Fr einen n-Bit-ADU ergibt sich Q als:

Q=

Umax
2n

Der hchste codierbare Spannungswert betrgt dann:





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

Die Quantisierungskennlinie dieses ADUs ist in Abb.12.8 dargestellt. Es existieren 8


darstellbare Spannungswerte und 7 Intervalle zwischen diesen Werten. Jedem Codewort
entspricht ein Reprsentationswert, beispielsweise fr den Code 011 der Wert 0,375V.
Die Eingangswerte des zugehrigen Quantisierungsintervalls werden diesem Wert zugewiesen. Fr den Code 011 sind beispielsweise die bergangswerte 0,3125 und 0,4375V.
Der hchste darstellbare Digitalwert ist 0,875V und um ein Quantisierungsintervall kleiner als die maximale Eingangsspannung Umax.

360

12 Analog-Digital- und Digital-Analog-Umsetzer


Quantisierungsintervall Q

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

Abb.12.8Quantisierungskennlinie eines 3-Bit-ADUs mit Umax=1V

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

Fr einen 3-Bit-ADU betrgt der Fehler Frel beispielsweise 1/16=6,25%.


Wird bei einer Digitalisierung eine bestimmte relative Genauigkeit Frel verlangt, so
kann daraus die erforderliche Wortbreite fr den ADU berechnet werden. Sie ergibt sich
aus dem nchstgreren ganzzahligen Wert und dem Zweierlogarithmus der bentigten
Genauigkeit nach der Formel:

n n = 1 ld Frel

12.2 Verfahren zur Analog-Digital-Umsetzung


Tab.12.1Reprsentationswerte und Codeworte fr einen
12-Bit-ADU

Codewort-Nummer
0

361
Reprsentationswert
in V
0

Codierung
0000 0000 0000

0,0024414

0000 0000 0001

0,0048828

0000 0000 0010

1024

2,5000000

2048

4095

0100 0000 0000

5,0000000
9,9975586

1000 0000 0000


1111 1111 1111

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.

12.1.5 Codierung der ADU-Werte


Fr das eben genannte Beispiel eines 12-Bit-ADU mit Aussteuerbereich Umax von 10V
ist die Codetabelle in Tab.12.1 auszugsweise dargestellt. Die Codeworte werden als
Dualzahl dargestellt.
Falls mit dem ADU auch negative Spannungen gemessen werden, ist eine Darstellung
als Dualzahl mit Offset oder als Zweierkomplement mglich. Bei der Offsetdarstellung
beginnt der Code bei der geringsten Spannung mit dem Codewort Null und steigt bis
zum hchsten codierbaren Spannungswert an. Bei der Zweierkomplementdarstellung
werden negative Spannungswerte durch eine negative Zahl angegeben. Manche Bausteine bieten auch die Datenausgabe im Gray-Code. Die Codierung eines ADUs ist im
Datenblatt definiert und kann teilweise durch Konfigurationssignale ausgewhlt werden.

12.2 Verfahren zur Analog-Digital-Umsetzung


Fr die eigentliche AD-Umsetzung sind verschiedene Verfahren mglich, die sich in
Aufwand und Geschwindigkeit deutlich unterscheiden. Fr die folgenden Erluterungen
werden meistens die Reprsentationswerte der einzelnen Quantisierungsschritte verwendet, da dies anschaulicher ist (siehe Abb.12.8). In realen Schaltungen erfolgen Vergleiche hingegen mit den bergangswerten.

362

12 Analog-Digital- und Digital-Analog-Umsetzer

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

Abb.12.9Blockschaltbild eines ADUs nach dem Flash-Verfahren

Digitalausgang
n-1
0

12.2 Verfahren zur Analog-Digital-Umsetzung

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

12 Analog-Digital- und Digital-Analog-Umsetzer

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

Abb.12.10Blockschaltbild des Rckkopplungscodierers mit schrittweiser Annherung (Sukzessive


Approximation)

12.2 Verfahren zur Analog-Digital-Umsetzung

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

12 Analog-Digital- und Digital-Analog-Umsetzer

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.

12.2.4 Erweitertes Parallelverfahren


Das Parallelverfahren ist zwar sehr schnell, hat aber den Nachteil, dass der Aufwand an Przisionsbauteilen exponentiell mit der Auflsung steigt; denn es werden
N=m=2n1 Normale fr einen n-Bit-Umsetzer bentigt. Abhilfe schafft hier das
erweiterte Parallelverfahren, dessen Funktion zwischen Parallel- und Wgeverfahren
liegt.
Im folgenden Abschnitt wird zunchst das allgemeine Prinzip des erweiterten Parallelverfahrens dargelegt und anschlieend eine moderne Realisierung dieses Prinzips
anhand des Pipeline-A/D-Umsetzers erlutert.

12.2.4.1Allgemeines Prinzip des erweiterten Parallelverfahrens


Man erhht, ausgehend von einem Parallelverfahren, die Anzahl der Messschritte von
Z=1 auf Z> 1, beispielsweise auf Z=2, bildet im ersten Schritt (m+1) Grobstufen
und unterteilt die Grobstufe, in der der unbekannte Wert x liegt, in (m+1) Feinstufen.
Die Gesamtauflsung betrgt dann m+1=(m+1)(m+1), und die Zahl der
Normale verringert sich auf N=m+m.
Das soll am Beispiel verdeutlicht werden. Fr einen 8-Bit-ADU gilt
m=281=255. Dann muss z. B. fr Z=2 Messschritte gelten: m+1=(m+1)
(m+1)=256. Hierfr gibt es die in Tab.12.2 dargestellten Mglichkeiten.

Aufwand

Wandlungsdauer
Parallelverfahren
Wgeverfahren
Zhlverfahren

Abb.12.11Vergleich der drei klassischen AD-Umsetzverfahren hinsichtlich Hardwareaufwand


und Geschwindigkeit

12.2 Verfahren zur Analog-Digital-Umsetzung


Tab.12.2Mglichkeiten
fr die Realisierung eines
ADUs nach dem erweiterten
Parallelverfahren, mit n=8 bit
und Z=2 Schritten

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

und die erforderliche Normalenzahl betrgt N=Zm.


Als einfaches Beispiel soll ein 8-Bit-ADU in Z=4 Schritten mit minimaler Normalenzahl aufgeteilt werden. Die minimale Normalenzahl ergibt sich fr

 
 
 

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

12 Analog-Digital- und Digital-Analog-Umsetzer


Analog- Ux
eingang

Stufe 1

Digitalausgang b7 b6 b5

Stufe 2

Stufe 3

b4 b3 b2

b1 b0

Abb.12.12Struktur eines dreischrittigen 8-Bit-ADU nach dem erweiterten Parallelverfahren mit


minimaler Normalenzahl

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

12.2 Verfahren zur Analog-Digital-Umsetzung


Analogeingang
Ux

Verstrker
AHG

3-BitADU
3

3-BitDAU

369
Verstrker

AHG
3-BitADU

3-BitDAU

Verstrker
3-BitADU

AHG
3-BitADU

3-BitDAU

Steuerung und Korrekturlogik

10

Digitalausgang

Abb.12.14Blockschaltbild eines Pipeline-Analog-Digital-Umsetzers

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.

12.2.5 Erweitertes Zhlverfahren


Das erweiterte Zhlverfahren liegt in seiner Funktion zwischen dem Zhl- und dem
Wgeverfahren. Das Zhlverfahren hat zwar den Vorteil minimalen Aufwands an Przisionsbauelementen, dafr ist aber die Schrittzahl und damit die Umsetzdauer die hchste
der drei klassischen Umsetzverfahren. Beispielsweise sind fr einen 8-Bit-Umsetzer 255
Schritte erforderlich.
Eine Reduzierung der Umsetzdauer lsst sich prinzipiell durch eine Aufteilung in eine
Grobmessung und eine Feinmessung erreichen. In der Grobmessung knnte ein Normal
der Gre 2Q verwendet werden, was bei 8Bit 127Schritte erfordert. In der Feinmessung wird dann in einem einzelnen Schritt ein Normal der Gre Q verwendet. Somit
wird die Anzahl der erforderlichen Schritte etwa halbiert. Auch eine weitere Aufteilung
mit Zwischenmessungen ist denkbar.
Eine praktische Bedeutung bei der Realisierung von ADUs hat das erweiterte Zhlverfahren bislang nicht.

370

12 Analog-Digital- und Digital-Analog-Umsetzer

12.2.6 Single- und Dual-Slope-Verfahren


Bisher wurden ausschlielich Umsetzverfahren betrachtet, bei denen die elektrische
Spannung direkt gemessen wurde. Bei indirekten Verfahren wird dagegen die Messgre
zunchst in eine Hilfsgre berfhrt, welche genauer, schneller oder mit kleinerem Aufwand messbar ist. Die wichtigsten Hilfsgren sind eine messgrenproportionale Frequenz sowie eine messgrenproportionale Zeit.
Die Messung mithilfe einer variablen Zeit erfolgt durch Zhlung mit einem Taktsignal. Das Grundprinzip dieses Verfahren wird als Single-Slope-Verfahren bezeichnet. Die
Funktion wird an einem Blockschaltbild beschrieben (Abb.12.15). Ein Sgezahngenerator erzeugt eine linear ansteigende Spannung Uk, die zum Beginn einem Messzyklus
gestartet wird. Wenn diese die Spannung Null erreicht, wechselt der logische Pegel am
unteren Komparator auf High und der Zhler startet. Erreicht Uk die unbekannte Messspannung Ux, wechselt der logische Pegel am oberen Komparator auf Low und der Zhler stoppt. Der so ermittelte Zhlerstand ergibt den digitalen Messwert. Es handelt sich
also um ein Zhlverfahren, wobei die Spannungsnderung dUk/dt whrend einer Taktperiode einem Quantisierungsintervall entspricht.
Dieses einfache Verfahren wird in der Praxis jedoch nicht eingesetzt, denn der Sgezahngenerator hat durch alterungs- oder temperaturbedingte nderungen seiner Bauelemente nur eine begrenzte Genauigkeit.
Praktisch eingesetzt wird das Doppelflanken- oder Dual-Slope-Verfahren. Hierbei
wird, anders als beim Single-Slope-Verfahren, die Messgre Ux und nicht eine Referenzspannung ber eine feste Zeit t1 integriert. Abb.12.16 und 12.17 zeigen Prinzipschaltbild und Zeitverlauf bei einer Messung. Whrend der festen Messdauer t1 wird
in einem Integrator die unbekannte Spannung Ux bis zur Endspannung Ua aufintegriert.
Anschlieend schaltet der Zhler fr t1 um und die Spannung Ua wird ber eine negative Referenzspannung -Uref wieder bis auf die Spannung 0 integriert. Die Zeit t2, die
hierfr erforderlich ist, wird gemessen und ergibt den digitalen Messwert fr die Spannung Ux.
Der Vorteil dieser Messung liegt darin, dass die Bauteile R und C fr beide Integrationszyklen verwendet werden. Dadurch ist die Messung unabhngig von Parameterschwankungen bei diesen Bauteilen. Es ist lediglich eine stabile Referenzspannung
erforderlich, die durch Band-Gap-Dioden mit hoher Genauigkeit zur Verfgung steht.

Abb.12.15 Blockschaltbild
eines ADUs nach dem SingleSlope-Verfahren

Analog- Ux
eingang
t

Sgezahngenerator

Komparatoren

&
Uk

Digitalausgang
Zhler
Takt

12.2 Verfahren zur Analog-Digital-Umsetzung

Analogeingang
Ux

371

Integrator
R

Komparator
&

ua(t)

-Uref
Referenzspannung

Zhler
t2

Digitalausgang

Takt
Zhler
t1

Abb.12.16Prinzipschaltbild eines AD-Umsetzers nach dem Dual-Slope-Verfahren


ua(t)
Ua
Ux
steigend

Ua
t
t1

t2

t2

Abb.12.17Spannungsverlufe im Dual-Slope-Umsetzer whrend des Messzyklus

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

12 Analog-Digital- und Digital-Analog-Umsetzer


Analogeingang
Ux

Integrator
Udiff

Komparator
Uint

Plus
Takt

Udig

Abtastung
D
C

Digitalfilter

Digitalausgang

1-BitDAU

Abb.12.18Blockschaltbild eines Sigma-Delta-Umsetzers

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%.

12.2 Verfahren zur Analog-Digital-Umsetzung

373

Tab.12.3Zeitablauf einer AD-Umsetzung mit Sigma-Delta-Umsetzer


Zeit
schritt

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

0,4 0,4 1,6

Uint [in
V]

0,6

0,2 0,2 1,4

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,4 0,4 0,4 1,6

0,4

0,4 0,4 0,4 0,4 1,6


1,0

0,6

0,2 0,2 1,4


1

1,0

0,6

0,2 0,2 1,4


1

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

12 Analog-Digital- und Digital-Analog-Umsetzer

4. Wegen der sehr hohen Abtastfrequenz kommt der Sigma-Delta-Umsetzer generell


ohne Abtast-Halteglied aus.
5. Derzeit liefert dieses Verfahren die hchsten verfgbaren Auflsungen.
Den Vorteilen stehen auch einige Nachteile gegenber:
1. Wegen des mittelwertbildenden digitalen Filters gibt es eine groe Latenzzeit
zwischen dem ersten Abtastwert und dem ersten Codewort. Daher eignet sich dieser
Umsetzer nicht zum Multiplexbetrieb fr mehrere Signalquellen.
2. Gegenber Flash-Umsetzern arbeitet das Sigma-Delta-Verfahren langsam.
Sigma-Delta-Umsetzer nach dem Oversampling-Prinzip haben sich inzwischen mit
Auflsungen von 16 bit in der hochwertigen Tonsignalverarbeitung etabliert. Weiterhin
wird dieses Verfahren in der Telemetrie und zur przisen berwachung langsam
vernderlicher Signale, beispielsweise bei Dehnungsmessstreifen eingesetzt.

12.3 Verfahren zur Digital-Analog-Umsetzung


Digital-Analog-Umsetzer (DAU) dienen der Rckgewinnung des Analogsignals aus
codierten digitalen Werten. Dabei verursacht die Zeitdiskretisierung prinzipiell keine
Fehler, wenn das Abtasttheorem eingehalten wird. Die Wertdiskretisierung fhrt zu
Quantisierungsfehlern, die systematischer Natur sind und nicht mehr eliminiert werden
knnen. Durch Wahl einer hohen Auflsung knnen die Quantisierungsfehler jedoch sehr
klein gehalten werden.
Bei der Umsetzung liefert der DAU Impulse endlicher Breite ts und mit der Hhe, die
durch die Digitalwerte vorgegeben ist (Abb.12.19). Dieses Signal ist also noch zeitdiskret. Durch anschlieende Filterung in einem Tiefpass (Interpolator-Tiefpass) wird dieses Signal wieder zu einer stetigen Analogfunktion interpoliert.
Theoretisch sollte die Impulsbreite ts mglichst klein sein, um keine zustzlichen Frequenzen fr das Ausgangssignal zu erzeugen. In der Realitt wird jedoch aus zwei Grnden eine grere Impulsbreite gewhlt, die meist der Periodendauer der Abtastung Tabt
entspricht.
Durch die grere Breite des Signals ist eine hhere Signalleistung vorhanden.
Es ist keine Abschaltung des Signals zwischen den Ausgabewerten erforderlich.
Das resultierende Rechtecksignal ergibt eine merkliche Verzerrung des Ausgangssignals,
denn das Spektrum des digitalen Signals wird mit dem Spektrum einer Rechteckfunktion
der Breite Tabt multipliziert. Diese Verzerrung kann jedoch durch ein nachfolgendes
analoges Filter wieder eliminiert werden. Die Struktur eines DAUs entspricht damit
Abb.12.20.

12.3 Verfahren zur Digital-Analog-Umsetzung

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.

12.3.2 Summation gewichteter Strme


Das Verfahren der Summation gewichteter Strme basiert auf dem Prinzip, dass fr
jedes auf 1 gesetzte Bit des Dualwortes ein dem Bitgewicht entsprechender Strom
erzeugt wird. Dann werden alle Strme rckwirkungsfrei summiert, beispielsweise
durch einen Operationsverstrker (OP). Fr einen DAU mit n bit ergibt sich daraus die
in Abb.12.22 gezeigte Schaltung. Das digitale Codewort steuert die Schalter b0 bis
bn1. Die Ausgangsspannung des OPs betrgt dann:
Abb.12.19 Das
Ausgangssignal eines DAU
besteht prinzipiell aus
Impulsen endlicher Breite

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

12 Analog-Digital- und Digital-Analog-Umsetzer

UDA = RF (b0 i0 + b1 i1 + b2 i2 + . . . + bn1 in1 )


Fr die Strme gilt

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

12.3 Verfahren zur Digital-Analog-Umsetzung


Abb.12.22 Prinzipschaltbild
eines DAU nach dem
Summationsprinzip
gewichteter Strme

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

12 Analog-Digital- und Digital-Analog-Umsetzer

Widerstandswerte wird diese Schaltung auch als R-2R-Leiternetzwerk bezeichnet. Der


Wert fr den Widerstand R kann frei gewhlt werden.
Fr die Verwendung als ADU wird an die Klemmen A und B eine Referenzspannung
Uref angeschlossen. Der Spannungsteilerkette werden ber Stromschalter die Einzelstrme gem dem vorliegenden Binrwort entnommen und am Summationspunkt eines
OP rckwirkungsfrei addiert (Abb.12.24).
Fr die eingetragenen Spannungen gilt:

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

Die Stromschalter werden in Bipolar- oder CMOS-Technik realisiert. Es tritt lediglich


das gut realisierbare Widerstandsverhltnis 2:1 auf. Ein typischer Wert fr R ist 500.
Nach diesem Prinzip arbeiten die meisten kuflichen DAUs in monolithischer und hybrider Technik. Auerdem ist in ADUs mit sukzessiver Approximation im Gegenkopplungspfad ein DAU dieses Typs enthalten.

Abschluss
2R

2R

2R

2R

Abb.12.23R-2R-Leiternetzwerk fr einen Digital-Analog-Umsetzer

12.3 Verfahren zur Digital-Analog-Umsetzung


R

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

Abb.12.24Prinzipschaltbild eines 4-Bit-DAUs mit R-2R-Leiternetzwerk

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%

12 Analog-Digital- und Digital-Analog-Umsetzer


Tastverhltnis 70%

u(t)

UH
UL

t
0

tH,70 Tper
Tastverhltnis 20%

u(t)

UH
UL

t
0 tH,20

Tper

12.4 Eigenschaften realer AD- und DA-Umsetzer


Reale Umsetzerbausteine sind mit Fehlern behaftet. Sie sind bauelemente-, schaltungsoder prinzipbedingt und knnen sowohl im ADU als auch im DAU auftreten. Sie lassen
sich in statische und dynamische Fehler unterteilen.
Die zunchst betrachteten statischen Fehler treten in ADUs und bis auf den Quantisierungsfehler auch in DAUs auf. Die in den folgenden Kapiteln hierzu dargestellten
Diagramme beziehen sich auf ADUs. Durch Spiegelung an der Einheitsgeraden erhlt
man daraus die entsprechenden Darstellungen fr DAUs. Bei dynamischen Fehlern muss
zwischen ADUs und DAUs unterschieden werden.

12.4.1 Statische Fehler


Als statische Fehler werden solche Fehler bezeichnet, die nach dem Abklingen aller Einschwingvorgnge brig bleiben.

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

12.4 Eigenschaften realer AD- und DA-Umsetzer

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

Dann betrgt der maximal erreichbare Signal-Rausch-Abstand (Signal to Noise Ratio)


fr das mit n bit digitalisierte Sinussignal

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

12 Analog-Digital- und Digital-Analog-Umsetzer

Abb.12.26 Kennlinie eines


idealen AD-Umsetzers

Id
e

al

er

W
an

dl

er

Digitalsignal

111...1

000...0
0

Analogsignal

U*max

Die Angabe des Verstrkungsfehlers im Datenblatt erfolgt entweder absolut in LSB


oder relativ in % des Aussteuerbereichs. Der Verstrkungsfehler hat einen TemperaturKoeffizienten, der nur mit groem Aufwand kompensiert werden kann.

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

Abb.12.27Kennlinien mit Offsetfehler und Verstrkungsfehler

Analogsignal

U*max

12.4 Eigenschaften realer AD- und DA-Umsetzer

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

12 Analog-Digital- und Digital-Analog-Umsetzer

Abb.12.29 Differenzielle
Nichtlinearitt

111...1
Quantisierungskennlinie:
Real

Digitalsignal

Ideal

Real
Ideal
000...0
0

Analogsignal

U*max

12.4.2 Dynamische Fehler


Dynamische Fehler an Umsetzern treten auf, wenn diese unter nichtstatischen Bedingungen, insbesondere in der Nhe ihrer maximalen Geschwindigkeit, betrieben werden. Sie
lassen sich aus den statischen Fehlerkenndaten in der Regel nicht gewinnen.
Dabei muss stets das gesamte System betrachtet werden, das heit auch das Abtasthalteglied bei ADUs sowie Analogverstrker am Eingang von ADUs und am Ausgang
von DAUs tragen zur Systemcharakteristik bei. Sie knnen die dynamischen Umsetzereigenschaften wegen ihrer Einschwingcharakteristik deutlich einschrnken.
Die wichtigsten heute weiterhin blichen Kenndaten zur Beschreibung des dynamischen Verhaltens von ADUs sind der Signal-Rausch-Abstand, die Effektive Auflsung,
die Harmonischen Verzerrungen und das Histogramm. Sie werden in den folgenden
Kapiteln dargestellt. Ihre Messung erfolgt auf digitaler Ebene mit schnellen Rechnern
und, bis auf das Histogramm, anhand der Fast-Fourier-Transformation (FFT). Daher
werden fr die Charakterisierung keine Przisions-DAUs bentigt. Eine fr DAUs wichtige dynamische Kenngre ist die Glitch-Flche.

Digitalsignal

111...1

Nichtmonotone
Kennlinie

Missing
Code

Nichtlinearitt = 2 LSB

000...0
0

Analogsignal

Abb.12.30Umsetzerkennlinie mit Monotoniefehler

U*max

12.4 Eigenschaften realer AD- und DA-Umsetzer

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):

SNR = (1, 76 + 6, 02 n)dB


Fr einen idealen ADU mit einer Auflsung von n=12 bit ergibt sich daraus ein Wert
von SNR=74dB.
Reale Umsetzer liefern kleinere Werte, die darber hinaus mit steigender
Signalfrequenz abnehmen. Die Darstellung des ber die FFT gemessenen SINAD ber
Endwert + LSB
Stationrer Endwert
Endwert - LSB

s(t)
Verzgerungszeit

berschwingzeit

Anstiegszeit

t
Einschwingzeit

Abb.12.31Definition der Einschwingzeit (Acquisition Time) eines DAU oder Abtast-Haltegliedes

386

12 Analog-Digital- und Digital-Analog-Umsetzer

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

U12 + U22 + U32 + U42 + U52


dB
U02

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

12.4 Eigenschaften realer AD- und DA-Umsetzer

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

12 Analog-Digital- und Digital-Analog-Umsetzer

12.5 Ansteuerung von diskreten AD- und DA-Umsetzern


Analog-Digital- und Digital-Analog-Umsetzer knnen als Teil eines greren ASICs
implementiert werden. Ein ASIC mit analogen und digitalen Schaltungsteilen wird als
Mixed-Signal-ASIC bezeichnet. Beispiele hierfr sind:
Ein Controller fr einen LCD-Monitor nimmt Videosignale aus der analogen VGASchnittstelle entgegen. Sie werden dann digital verarbeitet, also, wenn erforderlich,
auf Bildschirmgre skaliert, mit On-Screen-Display berlagert und dann an das
eigentliche Display weitergegeben.
Ein ASIC fr einen USB-Musik-Player liest digitale Daten aus einem NVRAM und
decodiert sie aus dem komprimierten Format. Die digitalen Signale werden dann auf
dem ASIC in analoge Signale umgesetzt und ausgegeben.
Mikrocontroller enthalten oft Analog-Digital-Umsetzer, um analoge Informationen
direkt verarbeiten zu knnen.
Oftmals werden allerdings auch rein digitale ASICs verwendet und eine AD- und DAUmsetzung in diskreten Bausteinen implementiert. Die Aufteilung eines Systems in
Digital-ASIC und diskrete Umsetzer hat insbesondere folgende Vorteile:
Es ist eine Vielzahl von diskreten ADUs und DAUs verfgbar, die eine Wahl bezglich Geschwindigkeit, Genauigkeit und Preis ermglichen.
Die digitale Verarbeitung in einem Mixed-Signal-ASIC kann den analogen Schaltungsteil stren und die Qualitt der Umsetzung einschrnken.
Ein Mixed-Signal-ASIC ist aufwendiger als ein Digital-ASIC und daher teurer.
Der Zugang zu Mixed-Signal-Fertigungstechnik ist schlechter verfgbar. Auerdem
mssen im Entwicklerteam ausreichende Kompetenzen fr analoge Schaltungstechnik
vorhanden werden.
Bei FPGAs gibt es kaum Bausteine mit AD- oder DA-Umsetzen.
In diesem Abschnitt wird erlutert, wie diskrete AD- und DA-Umsetzer angesteuert werden. Dabei werden serielle und parallele Ansteuerung verwendet.

12.5.1 Serielle Ansteuerung


Die serielle Ansteuerung diskreter Umsetzer hat den Vorteil, dass nur wenige Leitungen bentigt werden. Die Taktgeschwindigkeit normaler Signalleitungen liegt meist im
Bereich von 10 bis 100 MHz. Fr einen Datenwert sind, je nach Protokoll und Auflsung, 10 bis 20 Bit erforderlich. Eine serielle Ansteuerung ist also fr Abtastraten im
Bereich von kHz bis wenige MHz geeignet.

12.5 Ansteuerung von diskreten AD- und DA-Umsetzern

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:





IN+ und IN-, analoge Eingnge


DOUT, Datenausgang
CLK, Takteingang
/CS, Chip-Select und Shutdown
VREF, Referenzspannung
VDD und VSS, Versorgungsspannung und Masse

Anmerkung: Im Datenblatt werden fr Datenausgang und Takt die Bezeichnungen


DOUT und CLK verwendet. Um die Beschreibung allgemein zu halten, werden hier die
SPI-Bezeichnungen SDO und SCK verwendet.
Der Baustein ermittelt die Differenz zwischen den beiden analogen Eingnge IN+
und IN. Dabei gibt es jedoch die Einschrnkung, dass IN nur um 100mV vom
Massepegel abweichen darf, sodass kein vollstndiger differenzieller Eingang vorhanden
ist. Die getrennten Spannungsversorgungen VDD und VREF ermglichen die Verwendung einer besonders stabilisierten Referenzspannung.
Die Ansteuerung und Datenbertragung ist in Abb.
12.34 dargestellt. Eine
AD-Umsetzung wird durch Wechsel des Eingangs /CS von 1 auf 0 gestartet. Von
der nchsten fallenden Flanke an SCK wird fr eineinhalb Taktzyklen der analoge
Eingangswert im Abtast-Halte-Glied (AHG) erfasst. Die Taktfrequenz an SCK darf
1,6MHz betragen, so dass eine Sample-Zeit tsample von etwa 1s mglich ist. Mit den
nchsten Takten an SCK erfolgt dann die Umsetzung in sukzessiver Approximation und
es werden nacheinander eine 0 sowie die Stellen des ermittelten Wertes ausgegeben. In
der sukzessiven Approximation wird zuerst das hchstwertige Bit (MSB) ermittelt und
darum wird dieses Bit auch zuerst ausgegeben. Nach zwlf Takten ist die Umsetzung
beendet (tu) und es ist noch ein weiterer Takt fr die Ausgabe des LSB erforderlich
(tdata). Weitere Takte sind erlaubt; eine neue AD-Umsetzung wird jedoch erst durch eine
fallende Flanke an /CS gestartet.
Die Ansteuerung kann direkt durch die SPI-Schnittstelle eines Mikrocontrollers
erfolgen. Dazu werden Steuerbefehle gegeben, die zwei Byte einlesen. Die

390

12 Analog-Digital- und Digital-Analog-Umsetzer

Abb.12.34 Ansteuerung und


Datenbertragung des ADUs
MCP3201 von Microchip

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:






VOUT, analoger Ausgang


SDI, Dateneingang
SCK, Takteingang
/CS, Chip-Select
/LDAC, bernahmesignal fr Daten (Latch DAC, Verwendung optional)
VREF, Referenzspannung
VDD und VSS, Versorgungsspannung und Masse

Anmerkung: Hier werden im Datenblatt schon die SPI-Bezeichnungen verwendet.


Die Ansteuerung des Bausteins zeigt Abb.12.35. Mit /CS auf 0 wird der Datentransfer
begonnen. Dann werden fr einen analogen Ausgabewert 16Bit im SPI-Protokoll
bertragen. Das erste bertragungsbit ist 0, danach kommen drei Steuerbits (werden im
nchsten Absatz erlutert) und darauf die 12Bits, welche als Analogwert ausgegeben
werden sollen. Nach der bertragung wird durch Setzen von /LDAC auf 0 der
Analogwert am Ausgang VOUT aktualisiert. Durch diese Steuerleitung knnen mehrere
DAUs zeitgleich ihre Ausgabe ndern. Falls keine Synchronisation durch /LDAC
bentigt wird, kann dieser Wert konstant auf 0 gelegt werden und der Ausgang wird nach
der Datenbertragung automatisch aktualisiert.
Bei der bertragung werden drei Steuerbits angegeben, die folgende Bedeutung
haben. In Abb.12.35 werden zur besseren bersichtlichkeit die ersten Buchstaben B, G,
S angegeben.
BUF: Die Referenzspannung kann gepuffert werden, was zu hherer Eingangsimpedanz bei leichten Einschrnkungen in der Umsetzungsqualitt fhrt.

12.5 Ansteuerung von diskreten AD- und DA-Umsetzern


Abb.12.35 Ansteuerung
des DAUs MCP4921 von
Microchip

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.

12.5.2 Parallele Ansteuerung


Fr hhere Datenraten ist eine Datenbertragung ber SPI nicht mehr mglich. Eine
Geschwindigkeitssteigerung kann ber parallele Datenleitungen erfolgen.

12.5.2.1AD-Umsetzer AD9200 mit einfachem Parallelausgang


Der Baustein AD9200 ist ein Pipeline-Analog-Digital-Umsetzer von Analog Devices mit
10 bit Auflsung und einer Abtastrate von 20MHz. Es sind zwei Gehuse mit 28 und 48
Pins verfgbar. Die digitale Schnittstelle besteht aus den Anschlssen:




D9 bis D0, Datenausgang mit 10 bit Wortbreite


OTR, Out-of-Range Indicator
STBY, Standby, setzt den AD-Umsetzer in den Ruhezustand
THREE-STATE, schaltet die Ausgangsleitungen ab
CLK, als Takt fr die interne Operation des Umsetzers sowie fr den Datenausgang

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.

12.5.2.2AD-Umsetzer AD9467 mit differenziellem Parallelausgang


Bei hheren Taktgeschwindigkeiten wird ab etwa 100MHz die Datenbertragung
auf einer Platine stranfllig. Fr bessere bertragungseigenschaften werden dann
differenzielle Leitungen eingesetzt. Dies bedeutet, ein Ausgang verwendet nicht mehr
eine einzelne Leitung, sondern zwei Leitungen, die entgegengesetzte Spannungspegel

392

12 Analog-Digital- und Digital-Analog-Umsetzer

einnehmen. Diese werden durch + und gekennzeichnet, das heit beispielsweise


der Takt CLK wird auf den Leitungen CLK+ und CLK bertragen.
Durch die differenzielle bertragung kann der Spannungshub zwischen Low- und
High-Pegel deutlich verringert werden, denn Strungen betreffen immer beide Leitungen. Aufgrund des geringeren Spannungshubs sind dann auch hhere Taktfrequenzen
mglich. Die differenzielle bertragung wird als LVDS (Low Voltage Differential Signaling) bezeichnet.
Der Baustein AD9467 ist ein Pipeline-Analog-Digital-Umsetzer von Analog Devices
mit 16 bit Auflsung und einer Abtastrate bis zu 250MHz. Das Gehuse hat 72 Pins und
die digitale Schnittstelle besteht aus einem parallelen LVDS-Datenausgang und einem
seriellen Steuereingang.
Der parallele LVDS-Datenausgang arbeitet mit Double-Data-Rate (DDR), einer
Technik, die bereits in Kapitel 11 in Zusammenhang mit DDR-SDRAMs vorgestellt
wurde. Das heit, es werden pro Taktzyklus nacheinander zwei Bit auf einer Datenleitung ausgegeben. Diese Datenleitung ist dann in zwei Polaritten vorhanden, also
als + und . Die Datenleitungen fr beispielsweise die Bits 15 und 14 werden als
D15+/D14+ und D15/D14 bezeichnet. Der Datenausgang hat insgesamt die folgenden Anschlsse:
D15+/D14+ und D15/D14 bis D1+/D0+ und D1/D0, Datenausgang mit 8
bit LVDS-Werten auf 16 Leitungen
OTR+ und OTR, Out-of-Range Indicator (2 Leitungen)
CLK+ und CLK, Takteingang (2 Leitungen)
DCO+ und DCO, Taktausgang (2 Leitungen)
Der Zeitablauf von Datenerfassung und -ausgabe ist in Abb.12.36 dargestellt. Die steigende Flanke am Takteingang CLK+ bestimmt die Abtastzeitpunkte des analogen Eingangssignals. Der Datenausgang hat ein eigenes Taktsignal DCO, mit dem die Datenbits
von der nachfolgenden Schaltung bernommen werden mssen.
Die Umsetzung des analogen Eingangswerts bentigt aufgrund des Pipeline-Verfahrens 16 Takte, sodass der Ausgangswert erst nach dieser Latenzzeit ausgegeben wird.
Whrend der Umsetzung werden weitere Daten erfasst und jeweils nach der Latenzzeit
von 16 Takten ausgegeben. Die Latenzzeit entspricht der Wortbreite des ADUs von 16 bit.
Der vergrerte Ausschnitt in Abb.12.36 zeigt den Zeitablauf bei der Datenausgabe.
Mit der steigenden Flanke von DCO+ wird Bit 15 fr den Abtastwert N-16 ausgegeben (Bezeichnung: D15N16). Mit der fallenden Flanke an DCO+ folgt einen halben
Takt spter Bit 14 fr diesen Abtastwert. Im darauffolgenden Takt folgen die Daten fr
Abtastwert N-15. Parallel liegen auf den anderen 7 LVDS-Leitungen die weiteren Bits des
Datenworts an.
Auerdem enthlt der Baustein AD9467 einen seriellen Steuereingang mit SPI-
Protokoll (vergleiche Abb.12.34). Hierber knnen Konfigurationsregister geschrieben

12.5 Ansteuerung von diskreten AD- und DA-Umsetzern


Abtastzeitpunkt
N-1

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

Abb.12.36Datenerfassung und LVDS-Datenausgang des ADUs AD9467

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

12.5.3 Serielle Hochgeschwindigkeitsschnittstelle JESD204B


Die im vorherigen Abschnitt vorgestellte parallele Schnittstelle bentigt 20 Leitungen,
die auf einer Platine paarweise parallel gefhrt mssen und zudem die gleichen Lnge
haben sollen. Eine Alternative zu dieser aufwendigen Verbindung ist die serielle Hochgeschwindigkeitsschnittstelle JESD204B, welche von der Standardisierungsorganisation
JEDEC (Joint Electron Device Engineering Council) definiert wird.
Ein wesentliches Problem bei hohen bertragungsgeschwindigkeiten auf der Platine
ist nicht unbedingt die Geschwindigkeit des Datensignals sondern die Synchronisierung
von Daten und Takt. Aus diesem Grund wird beim, im vorherigen Abschnitt beschriebenen, parallelen Interface des AD9467 der Takt zusammen mit den Daten ausgegeben,
damit diese mglichst die gleiche Laufzeit haben. Noch hhere Taktraten sind mglich,
wenn der Empfnger den Takt aus den empfangenen Daten rekonstruieren kann. Dieses
Prinzip wird fr die JESD204B-bertragung genutzt.

394

12 Analog-Digital- und Digital-Analog-Umsetzer

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

werden von den Herstellern JESD204B-Interfaces angeboten, welche die Verwendung


dieser Schnittstelle vereinfachen.

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

12 Analog-Digital- und Digital-Analog-Umsetzer

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]

Abb.12.38 Zeitablauf der


Pulsweitenmodulation (PWM)

u(t)

3V
0V
0

10

18

20

28

30

t
[ms]

Grundlagen der Mikroprozessortechnik

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.

13.1 Grundstruktur eines Mikrorechnersystems


Mikrorechner sind digitale Systeme, deren Aufgabe es ist, Daten zu verarbeiten. Diese
Aufgabe zerfllt in drei grundlegende Schritte, die von einem Mikrorechnersystem ausgefhrt werden mssen: Dateneingabe, Datenverarbeitung und Datenausgabe. Die Steuerung dieser Schritte wird durch ein Programm festgelegt, welches die Reihenfolge der
bentigten Verarbeitungsschritte festlegt.
Springer-Verlag GmbH Deutschland 2016
W. Gehrke et al., Digitaltechnik, Springer-Lehrbuch,
DOI10.1007/978-3-662-49731-9_13

397

398

13 Grundlagen der Mikroprozessortechnik

In der Regel mssen mehrere eingelesene Daten miteinander verknpft werden, um


einen Ausgabewert zu berechnen. Hieraus ergibt sich zwangslufig, dass die Mglichkeit
bestehen muss, Eingabewerte oder auch Zwischenergebnisse speichern zu knnen, die
sich whrend der Verarbeitung ergeben.
Aus diesen grundlegenden Betrachtungen knnen die wesentlichen Komponenten
eines Mikrorechnersystems abgeleitet werden: Es werden Eingabe- und Ausgabekomponenten, Speicher und mindestens eine Verarbeitungseinheit bentigt. Ein Rechnersystem auf Basis dieser Komponenten wurde in den 1940er Jahren von John von Neumann
beschrieben und ist als sogenannte Von-Neumann-Architektur bekannt geworden.
Auch heutige Rechnersysteme, vom PC bis hin zu Mikrorechnersystemen, welche
zum Beispiel die Steuerung Ihrer Waschmaschine bernehmen, knnen als eine spezielle
Implementierung der Von-Neumann-Architektur aufgefasst werden (Abb.13.1).
Eine Von-Neumann-Architektur besteht aus drei wesentlichen Komponenten: Die
Ein-/Ausgabe-Einheit dient dem Datenaustausch mit externen Komponenten wie Tastaturen, Anzeigen oder auch Sensoren und Aktuatoren.
Die zentrale Verarbeitungseinheit (engl. Central Processing Unit, CPU) dient der
eigentlichen Verarbeitung der Daten. Sie besteht aus einem Steuerwerk, einem Rechenwerk und Registern. Die zentrale Aufgabe des Steuerwerks ist die Interpretation der
Befehle des auszufhrenden Programms und die zugehrige Ablaufsteuerung innerhalb
der CPU, whrend das Rechenwerk (engl. Arithmetic Logical Unit, ALU) logische und
arithmetische Operationen ausfhrt. Die Operanden und Ergebnisse der Operationen
werden in den CPU-internen Registern, die auch als Arbeitsregister bezeichnet werden,
abgelegt.
Die dritte Komponente einer Von-Neumann-Architektur ist der Speicher, in welchem
sowohl die Befehle des Programms als auch Daten abgelegt werden.
Fr die Verbindung der einzelnen Komponenten eines Rechnersystems werden in der
Regel sogenannte Busse eingesetzt. Busse knnen als die logische Zusammenfassung
einzelner Signalleitungen verstanden werden, wobei diese Leitungen zusammengehrende Informationen bertragen. Die in einem Mikrorechnersystem verwendeten Busse
knnen grob in drei verschiedene Typen eingeteilt werden:
Der Adressbus dient zur Auswahl einer Komponente mit der die CPU Daten
austauschen mchte. Dies kann zum Beispiel eine Speicherstelle innerhalb des Speichers

Abb.13.1 Blockschaltbild
eines Rechners auf Basis der
Von-Neumann-Architektur

CPU
Register

Speicher

Rechenwerk
(ALU)
Steuerwerk

Ein-/Ausgabe

399

13.1 Grundstruktur eines Mikrorechnersystems

sein. Da die einzelnen Speicherstellen unterschiedliche Adressen besitzen, kann anhand


der Adresse das angesprochene Speicherelement ausgewhlt werden.
Die Daten selbst werden ber den Datenbus bertragen. Die Daten knnen hierbei
sowohl von der CPU an die Speicher- und Ein-/Ausgabe-Komponenten als auch von diesen Komponenten an die CPU gesendet werden.
Neben den Leitungen fr den Datentransfer und den Adressleitungen wird ein Steuerbus bentigt. Der Steuerbus bermittelt alle Informationen, die neben Daten und
Adressen an die einzelnen Komponenten des Systems bertragen werden mssen. Ein
Beispiel fr eine solche Information ist, ob von der ausgewhlten Adresse Daten gelesen werden sollen, oder ob die Daten, die von der CPU auf den Datenbus gelegt worden
sind, geschrieben werden sollen. Weiterhin kann der Steuerbus beispielsweise zur bertragung eines Taktsignals zur Systemsynchronisation oder zur bermittlung von Fehlercodes verwendet werden.
Ein exemplarisches Blockschaltbild eines einfachen Mikrorechnersystems mit einem
unidirektionalen Adressbus und einem bidirektionalen Datenbus ist in Abb.13.2 dargestellt. Dieses System besitzt zwei verschiedene Speicher. Ein Flashspeicher dient der
Aufnahme von Daten, die auch nach dem Abschalten der Versorgungsspannung erhalten bleiben sollen. Wird in diesem Speicher das Programm abgelegt, steht es direkt
nach dem Einschalten zur Verfgung und kann sofort ausgefhrt werden. Darber hinaus knnen im Flashspeicher Konstanten abgelegt werden, die fr die Ausfhrung des
Programms bentigt werden. Da sich die Variablen eines Programms whrend der Programmlaufzeit hufig ndern, ist es nicht sinnvoll, Variablen ebenfalls in einem Flashspeicher abzulegen, da das hufige Beschreiben des Flashspeichers eine frhe Alterung
des Speichers nach sich ziehen wrde. Daher ist in dem Beispielsystem ein RAM-Speicher vorgesehen, der zur Speicherung von Variablen verwendet wird.
Neben den Speichern besitzt das System Eingabe- und Ausgabekomponenten. Die CPU
kann mit den Komponenten des Systems kommunizieren, indem die entsprechende Adresse

&38
6WHXHUEXV
'DWHQEXV

$GUHVVEXV
)ODVK

5$0

$XVJDEH

6SHLFKHU

Abb.13.2Blockschaltbild eines einfachen Mikrorechnersystems

(LQJDEH

400

13 Grundlagen der Mikroprozessortechnik

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

Abb.13.3Mgliche Address Maps fr das Beispielsystem

0x0000

Eingabe

13.2 Befehlsabarbeitung in einem Mikroprozessor

401

13.2 Befehlsabarbeitung ineinem Mikroprozessor


Die Befehle eines Programms werden in binrer Form im Programmspeicher abgelegt.
Jeder Befehl enthlt Informationen ber die auszufhrende Operation, die bentigten
Operanden und wo Ergebnisse des Befehls abgespeichert werden sollen. Fr die Abarbeitung eines Befehls ist es erforderlich, die binr codierten Befehle zunchst in der CPU
zu decodieren. Im Anschluss hieran werden die bentigten Operanden dem Rechenwerk
der CPU zugefhrt. Das Rechenwerk fhrt dann die im Befehl codierte arithmetische
oder logische Operation aus und speichert das Ergebnis ab. Somit sind fnf Schritte fr
die Ausfhrung eines Befehls erforderlich:
1. Befehl aus dem Programmspeicher holen und in die CPU bertragen
2. Befehl decodieren, die Operanden bestimmen und die auszufhrende Operation aus
dem Befehlswort extrahieren
3. Werte der Operanden bestimmen, zum Beispiel Werte aus dem Datenspeicher in die
CPU bertragen
4. Operation mithilfe des Rechenwerks ausfhren
5. Ergebnis der Operation abspeichern
Die Steuerung des Ablaufes dieser Schritte wird vom Steuerwerk der CPU bernommen.
Grundstzlich kann das Steuerwerk als ein endlicher Automat aufgefasst werden, der die
bentigten Arbeitsschritte zur Ausfhrung eines Befehls sequenziell durchluft. In der
Praxis wird das Steuerwerk eines Mikroprozessors hufig nicht als ein einzelner Mealyoder Moore-Automat realisiert, sondern besteht aus einer hierarchischen Anordnung
mehrerer Automaten. Mikroprozessoren sind im Allgemeinen synchrone Systeme, deren
interne Ablufe durch ein zentrales Taktsignal synchronisiert werden. Im einfachsten Fall
werden die einzelnen Schritte der Befehlsabarbeitung in jeweils einem Taktzyklus ausgefhrt. Somit wrde die Abarbeitung eines einzelnen Befehls gem den oben dargestellten Schritten jeweils 5 Taktzyklen bentigen.
Bei realen Mikroprozessoren kann die Anzahl der bentigten Taktzyklen zur Ausfhrung sowohl von Prozessor zu Prozessor als auch fr die einzelnen Befehle eines
Prozessors unterschiedlich sein. Ein Grund fr dieses Verhalten ist in den technologischen Randbedingungen zu suchen, die fr die Herstellung eines Prozessors gelten. So
kann beispielsweise ein Zugriff auf den Programmspeicher im Vergleich zu den anderen Verarbeitungsschritten deutlich mehr Zeit in Anspruch nehmen. In diesem Fall wre
es denkbar, dass der erste Schritt, also der Zugriff auf den Programmspeicher, in einem
Taktzyklus ausgefhrt wird, whrend die weiteren Schritte zusammengefasst in einem
weiteren Taktzyklus durchgefhrt werden. In diesem Fall wrde die Abarbeitung eines
Befehls also lediglich zwei Taktzyklen bentigen.
Darber hinaus ist es denkbar, dass einzelne Befehle komplexere Verarbeitungsschritte bentigen als andere Befehle des gleichen Prozessors. Es kann sein, dass fr
die bertragung der Operanden einzelner Befehle eine aufwendige Berechnung der

402

13 Grundlagen der Mikroprozessortechnik

Speicheradresse erforderlich ist, fr die mehrere Taktzyklen bentigt werden. Andere


Befehle kommen dagegen mit weniger komplexen Berechnungen aus und werden in krzerer Zeit ausgefhrt.

13.3 Typische Befehlsklassen


Bei dem Entwurf eines Mikroprozessors kommt der Frage, welche Befehle zur Verfgung gestellt werden sollen, eine zentrale Bedeutung zu. Hierbei existieren viele
Freiheitsgrade. So gibt es nicht einen ultimativen Satz von Befehlen, der von allen Prozessoren gleichermaen untersttzt wird. Vielmehr besitzt jeder Prozessor einen eigenen Befehlssatz, der mit Rcksicht auf unterschiedliche Kriterien wie CPU-Kosten,
Speicherbedarf fr Programme, Rechenleistung etc. entworfen worden ist. Auch wenn
der Befehlssatz eines Prozessors also nicht allgemeingltig angegeben werden kann, so
lassen sich dennoch Gemeinsamkeiten der Befehlsstze erkennen.
Fr einen typischen Prozessor knnen die Befehle in Befehlsklassen zusammengefasst
werden, die im Folgenden kurz vorgestellt werden.

13.3.1 Aufbau eines Befehlswortes


Ein Programm besteht aus einzelnen Befehlsworten, die nacheinander ausgefhrt werden. Mit jedem Befehlswort wird dem Prozessor mitgeteilt, welcher Teilschritt als nchstes auszufhren ist. Dies kann zum Beispiel eine arithmetische Operation oder auch
der Sprung an eine andere Stelle im Programm sein. Das Befehlswort besteht aus einer
definierten Anzahl von Nullen und Einsen, die vom Steuerwerk des Prozessors interpretiert werden. Sowohl die Wortbreite der einzelnen Befehle als auch die Bedeutung der in
einem Befehlswort vorhandenen Bits knnen bei der Definition eines Instruktionssatzes
frei gewhlt werden.
Um die Decodierung eines Befehls durch das Steuerwerk zu vereinfachen, benutzen viele Prozessoren Befehlsworte, deren Bits zu Feldern zusammengefasst sind.
Eines dieser Felder gibt dann zum Beispiel die auszufhrende Operation (zum Beispiel
Addition oder Sprung) an. Die weiteren Bits stellen ergnzende Informationen zur
Verfgung. So muss beispielsweise bei einem arithmetischen Befehl angegeben werden, aus welchen Arbeitsregistern die Operanden geholt werden sollen und in welchem
Arbeitsregister das Ergebnis abgelegt werden muss.
Betrachten wir zur Verdeutlichung einen Prozessor, dessen Befehle 32 Bit umfassen,
und schauen uns eine mgliche Codierung eines Additions- und eines Sprungbefehls
an: Um eine ausreichend groe Anzahl an unterschiedlichen Befehlen zu ermglichen
wird die auszufhrende Operation mit 6Bit codiert. Um beispielsweise 32 verschiedene
Arbeitsregister auswhlen zu knnen, werden pro Register 5Bit bentigt. Fr eine Addition mssen drei Arbeitsregister ausgewhlt werden (zwei fr die Summanden und eines

13.3 Typische Befehlsklassen

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.

13.3.2 Arithmetische und logische Befehle


Die Aufgabe eines Mikroprozessors besteht darin, Daten mithilfe von mathematischen
Operationen zu verknpfen. Fr die meisten der hierzu bentigten Grundoperationen
wird ein entsprechender Befehl zur Verfgung gestellt. Ein typischer Prozessor besitzt
arithmetische Befehle, die zum Beispiel die Negierung eines Operanden und die

Abb.13.4 Beispiele fr
den Aufbau eines 32-BitBefehlswortes

Addition von zwei Arbeitsregistern


31

26
Op

21
Re

16
Ro1

11
Ro2

0
ungenutzt

Addition eines Arbeitsregisters mit einer Konstanten


31

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 Grundlagen der Mikroprozessortechnik

Addition oder Subtraktion zweier Operanden untersttzen. Darber hinaus werden


logische Befehle untersttzt, welche die bitweise UND-, ODER, und Exklusiv-ODERVerknpfung oder das bitweise Rechts- oder Links-Schieben durchfhren.
Der Implementierungsaufwand eines Rechenwerkes fr diese Operationen ist relativ
gering. Daher werden diese Operationen von allen Prozessoren untersttzt. Ein Befehl
zur Multiplikation oder Division erfordert dagegen einen hheren Aufwand fr die Realisierung des Rechenwerks und ist daher nicht in allen CPUs enthalten. Fehlt die Hardwareuntersttzung fr eine arithmetische Operation, mssen diese Funktionen durch
eine Folge von mehreren Befehlen, im Fall der Multiplikation beispielsweise durch
Additions- und Schiebeoperationen, implementiert werden.
Ein weiterer wichtiger Faktor im Hinblick auf den Implementierungsaufwand des
Rechenwerks ist die Wortbreite der Operationen. Einfache Prozessoren besitzen hufig Rechenwerke mit einer Wortbreite von 8bit. Viele Prozessoren mit einer mittleren
Rechenleistung verwenden in der Regel Rechenwerke mit einer Wortbreite von 32bit.
Hochleistungsprozessoren, wie sie zum Beispiel in PCs eingesetzt werden, besitzen
dagegen Rechenwerke, welche die Verarbeitung von Operanden mit einer Wortbreite von
128bit und mehr ermglichen.
Werden in einem Programm hufig Gleitkommavariablen verwendet, ist es wnschenswert, dass die zugehrigen arithmetischen Grundoperationen mithilfe eines einzelnen Befehls ausgefhrt werden knnen. Hierzu wird innerhalb des Rechenwerkes eine
Einheit zur Ausfhrung von Operationen mit ganzzahligen Operanden (Integer-Unit) und
eine Einheit zur Ausfhrung von Gleitkommaoperationen (Floating-Point-Unit) implementiert. Der hiermit verbundene Realisierungsaufwand ist bei vielen Prozessoren des
unteren bis mittleren Kostenbereichs hufig nicht kommerziell sinnvoll. Aus diesem
Grund werden Gleitkommaeinheiten in Mikroprozessoren dieses Segmentes in der Regel
nicht eingesetzt. In diesem Fall mssen Gleitkommaoperationen durch eine Folge von
Ganzzahloperationen realisiert werden, wodurch die Rechenzeit des Programms ansteigt.

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.

13.3 Typische Befehlsklassen

405

13.3.4 Befehle zur Programmablaufsteuerung


Ist ein arithmetischer Befehl oder ein Transferbefehl von der CPU ausgefhrt worden,
wird die Programmausfhrung mit dem nchsten im Programmspeicher abgelegten
Befehl fortgesetzt. Die Mglichkeiten zum Erstellen von Programmen sind jedoch allein
mit Transferbefehlen oder arithmetischen Befehlen sehr eingeschrnkt. Selbst einfache
Programme bentigen die Mglichkeit, Befehle wiederholt auszufhren (Schleifen) oder
einzelne Programmteile unter bestimmten Bedingungen zu berspringen (bedingte Verzweigungen). Um diese Programmkonstrukte zu untersttzen, stellen Mikroprozessoren
Befehle zur Steuerung des Programmablaufs zur Verfgung. Die zu dieser Gruppe zhlenden Befehle umfassen:
Unbedingte Sprungbefehle
Nach Ausfhrung eines unbedingten Sprungbefehls wird die Ausfhrung des Programms
an einer durch den Befehl spezifizierten Adresse im Programmspeicher fortgesetzt und
es wird an eine andere Position im Programmspeicher gesprungen.
Bedingte Sprungbefehle
Bedingte Sprungbefehle fhren, den Sprung nur aus, wenn eine im Befehl angegebene
Bedingung erfllt ist. Ist die Bedingung dagegen nicht erfllt, wird das Programm mit
dem nachfolgenden Befehl fortgesetzt.
Als Bedingungen knnen Informationen herangezogen werden, die sich aus der Ausfhrung vorangegangener Befehle ergeben. So kann zum Beispiel eine Programmverzweigung erfolgen, falls das Ergebnis der vorangegangenen Operation Null ist. Ebenso
kann eine Verzweigung ausgefhrt werden, falls das Ergebnis des zuvor ausgefhrten
Befehls negativ ist oder ein arithmetischer berlauf aufgetreten ist.
Unterprogrammaufrufe
Nach dem Ende eines Unterprogramms muss zur aufrufenden Position im Programm
zurckgekehrt werden. Die CPU muss beim Aufruf eines Unterprogramms also die aktuelle Befehlsadresse zwischenspeichern.
Ein Befehl zum Aufruf eines Unterprogramms besitzt daher die Funktionalitt eines
unbedingten Sprungs. Zustzlich wird bei der Ausfhrung des Befehls die aktuelle Programmspeicheradresse gesichert. Auch fr das Beenden eines Unterprogramms wird ein
besonderer Befehl verwendet. Dieser Befehl sorgt dafr, dass das Programm an der beim
Aufruf des Unterprogramms gespeicherten Programmspeicherposition fortgesetzt wird.

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

13 Grundlagen der Mikroprozessortechnik

NOP-Befehl (engl. no operation), der lediglich einen Befehlszyklus ausfhrt, hierbei


jedoch weder Daten transportiert noch Daten in irgendeiner Weise verndert. Dieser auf
den ersten Blick wenig sinnvoll erscheinende Befehl kann zum Beispiel fr die Realisierung einfacher Warteschleifen eingesetzt werden. Weiterhin besitzen viele Mikroprozessoren spezielle Befehle, die auf den jeweiligen Prozessor zugeschnitten sind und sich
nicht in allen typischen Prozessoren wiederfinden lassen.

13.4 Adressierung von Daten und Befehlen


Fr die Ausfhrung einer Operation mithilfe des Rechenwerks mssen zunchst die
bentigten Operanden bestimmt werden. Dies bedeutet, dass der auszufhrende Befehl
Informationen darber enthalten muss, ob ein Operand zum Beispiel im Datenspeicher
des Systems zu finden ist und mit welcher Berechnungsvorschrift die Speicheradresse
des Operanden aus den im Befehl enthaltenen Informationen bestimmt werden soll. Die
von einem Mikroprozessor fr die Adressierung zur Verfgung gestellten Berechnungsvorschriften werden in der Regel als Adressierungsarten bezeichnet. In diesem Abschnitt
werden typische Adressierungsarten vorgestellt. Zur Vereinfachung bezieht sich die
Darstellung auf den Zugriff der Operanden eines Befehls. Die hier vorgestellten Adressierungsarten knnen, mit Ausnahme der unmittelbaren Adressierung, ebenso fr die
Adressierung beim Abspeichern des Ergebnisses eines Befehls verwendet werden.

13.4.1 Unmittelbare Adressierung


Die einfachste Adressierungsart ist die unmittelbare Adressierung. In diesem Fall wird
der Wert des zu verarbeitenden Operanden direkt als Teil des Befehls angegeben. Da
der Wert des Operanden somit Teil des ausgefhrten Programms ist und sich whrend
der Programmlaufzeit nicht ndert, wird diese Adressierungsart hufig fr Konstanten
verwendet.
Abb.13.5 verdeutlicht die unmittelbare Adressierung, bei dem sich der Operand
direkt aus einem Teil des Befehlswortes ergibt. Das aus dem Programmspeicher gelesene Befehlswort ist hierbei abstrakt dargestellt. Insbesondere wurde auf die genauere
Darstellung der fr die Adressierung irrelevanten Teile des Befehlswortes, wie zum Beispiel die auszufhrende Operation, verzichtet. Diese Teile des Befehlswortes sind dunkler dargestellt.

Abb.13.5 Unmittelbare
Adressierung

Befehlswort
Operand

zum
Rechenwerk

407

13.4 Adressierung von Daten und Befehlen

13.4.2 Absolute Adressierung


Im Fall der absoluten Adressierung ist ebenfalls eine Konstante im Befehlswort abgelegt.
Diese wird jedoch anders als im Fall der unmittelbaren Adressierung nicht als Operand
sondern als Adresse interpretiert.
Dementsprechend wird diese Konstante auf dem Adressbus ausgegeben. Der adressierte Wert wird aus dem Datenspeicher beziehungsweise einer Ein-/Ausgabekomponente ausgelesen und dem Rechenwerk als Operand zugefhrt (Abb.13.6).

13.4.3 Indirekte Adressierung


Die indirekte Adressierung kann als eine Erweiterung der absoluten Adressierung aufgefasst werden. Die im Befehlswort codierte Konstante wird ebenfalls als Registerauswahl
interpretiert. Der in dem ausgewhlten Register liegende Wert wird als Adresse verwendet wird.
In Abb.13.7 ist das Grundprinzip der indirekten Adressierung dargestellt.
Die indirekte Adressierung kann auch mit einer Modifikation des verwendeten
Registers kombiniert werden. Dies ist sinnvoll, wenn ein Prozessor auf mehrere aufeinanderfolgende Adressen zugreifen soll. In der Regel ist die Adressmodifikation auf das
Inkrementieren (Erhhung des Wertes um 1) und Dekrementieren (Verringern um 1)
beschrnkt. Da die Modifikation des Adressspeichers automatisch mit der Ausfhrung
des zugehrigen Befehls stattfindet, spricht man auch von indirekter Adressierung mit
Auto-Inkrement beziehungsweise Auto-Dekrement.
Bei der Ausfhrung eines Befehls, der die indirekte Adressierung mit Auto-Inkrement
beziehungsweise -Dekrement verwendet, wird einerseits der Datenspeicher adressiert
und andererseits ein Registerwert modifiziert. Die Reihenfolge dieser beiden Schritte

Abb.13.6 Absolute (direkte)


Adressierung

'DWHQVSHLFKHU
%HIHKOVZRUW
$GUHVVH

2SHUDQG

Register

Datenspeicher

Adresse

Operand

]XP
5HFKHQZHUN

Befehlswort
Register
auswahl

Abb.13.7Indirekte Adressierung

zum
Rechenwerk

408

13 Grundlagen der Mikroprozessortechnik

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

Abb.13.8Indirekte Adressierung mit Post-Inkrement

Datenspeicher

Register
Befehlswort
Register
auswahl

Adresse

Abb. 13.9Indirekte Adressierung mit Pre-Dekrement

-1

Operand

zum
Rechenwerk

409

13.4 Adressierung von Daten und Befehlen


Datenspeicher

Register
Befehlswort
Offset

Register
auswahl

Adresse

Operand

zum
Rechenwerk

Abb.13.10Indirekte Adressierung mit Verschiebung

13.4.4 Indirekte Adressierung mit dem Stackpointer


Eine der wichtigsten Anwendungen der indirekten Adressierung ist die Realisierung
eines Stapelspeichers (engl. Stack). Bei Verwendung eines Stapelspeichers ist die Adressierung der Daten eingeschrnkt. Es gibt zu einem Zeitpunkt immer nur eine Position
innerhalb des Speichers, die gelesen oder beschrieben werden kann. Diese Eigenschaft
ist vergleichbar mit einem Papierstapel, auf dem nur ein neues Blatt oben auf dem Stapel abgelegt werden kann oder nur das oberste Blatt entfernt werden kann. Durch diese
Analogie wird eine weitere wichtige Eigenschaft des Stapelspeichers deutlich: Bei einem
Lesezugriff wird der jeweils zuletzt geschriebene Wert vom Stapelspeicher gelesen,
genauso wie das zuletzt abgelegte Blatt als erstes von einem Papierstapel entfernt werden wrde.
Diese Eigenschaft des Stapelspeichers lsst sich besonders gut fr Unterprogrammaufrufe nutzen, bei denen die aktuelle Befehlsadresse zwischengespeichert werden muss.
Wird bei dem Aufruf eines Unterprogramms die aktuelle Befehlsadresse auf einem Stapelspeicher abgelegt, sind auch Unterprogrammaufrufe innerhalb eines Unterprogramms
einfach realisierbar. Beim Verlassen des zuletzt aufgerufenen Unterprogramms wird die
zuletzt abgespeicherte Programmspeicheradresse vom Stapelspeicher entfernt, und die
Programmausfhrung wird mit dem aufrufenden Unterprogramm fortgesetzt. Die Verschachtelungstiefe von Unterprogrammen ist somit lediglich durch die maximale Gre
des Stapelspeichers begrenzt.
Die Funktion eines Stacks lsst sich auf verschiedene Weisen realisieren. Fr einen
typischen Prozessor wird meist eine Variante bevorzugt, bei der die auf dem Stack abgespeicherten Werte im Datenspeicher abgelegt werden. Darber hinaus wird die aktuelle
Schreib-/Leseposition in einem besonderen Register der CPU, dem Stapelzeiger (engl.
Stackpointer), abgelegt.
blicherweise verweist der Stackpointer auf die Speicherstelle, die beim nchsten
Schreibzugriff berschrieben wird. Ein Schreibzugriff fhrt darber hinaus zum Dekrementieren des Stackpointers. Wiederholte Schreibzugriffe wrden also zum Beschreiben
des Datenspeichers an niedrigeren Adressen fhren. Dieses Verhalten wird hufig auch
mit der Aussage der Stack wchst nach unten umschrieben. Fr die Implementierung

410

13 Grundlagen der Mikroprozessortechnik

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.

13.5 Manahmen zur Steigerung der Rechenleistung


Die Aufgabe eines Mikroprozessors ist es, eine mglichst hohe Rechenleistung unter
gegebenen Randbedingungen (Kosten, Verlustleistung, usw.) zur Verfgung zu stellen.
In den folgenden Abschnitten werden technische Mglichkeiten aufgezeigt, die zu einer
Steigerung der Rechenleistung von Mikroprozessoren eingesetzt werden knnen.

13.5 Manahmen zur Steigerung der Rechenleistung

411

13.5.1 Erhhung der Taktfrequenz


Da Mikroprozessoren als synchrone Systeme realisiert werden, ist es ein naheliegender
Ansatz, die Taktfrequenz des Systems zu erhhen. Mit der Erhhung der Taktfrequenz
lsst sich eine annhernd proportionale Steigerung der Rechenleistung erzielen.
Es muss jedoch bercksichtigt werden, dass die Mglichkeit zur Erhhung der Taktfrequenz fr einen Mikroprozessor begrenzt ist. Wird die Dauer eines Taktzyklus ber
eine kritische Grenze hinaus verringert, knnen Fehlfunktionen auftreten. Diese kritische Grenze ergibt sich aus dem kritischen Pfad, also der maximal auftretenden Signallaufzeit zwischen zwei Flip-Flops des Systems. Eine Mglichkeit, diese Signallaufzeit
zu verringern, stellt das sogenannte Pipelining dar, welches in Abschn.13.5.3 fr Mikroprozessoren erlutert wird. Darber hinaus ist zu beachten, dass bei Verwendung von
CMOS-Technologien, wie sie heute fr die Realisierung von Mikroprozessoren verwendet werden, die dynamische Verlustleistung proportional zur Taktfrequenz ansteigt. Dieser Effekt kann ebenfalls zu einer Limitierung der maximal verwendbaren Taktfrequenz
fhren.

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)

mit: G Rechenleistungsgewinn (engl. Speedup)

412

13 Grundlagen der Mikroprozessortechnik

p Durch Parallelverarbeitung beschleunigter Programmanteil


s Anteil des Programms mit konstanter Rechenzeit
N Parallelitt des Systems, zum Beispiel Anzahl paralleler Operationen
Die Grundlagen zu dieser Betrachtung wurden erstmals von Gene M. Amdahl formuliert und sind als Amdahls Law in die Geschichte der Computerwissenschaft eingegangen. Auch wenn diese Betrachtung starke Vereinfachungen vornimmt, macht sie dennoch
deutlich, dass bereits ein geringer Anteil an nicht-parallelisierbaren Programmteilen zu
einer signifikanten Begrenzung des realisierbaren Rechenleistungsgewinns fhren kann.
Darber hinaus erfordert der sinnvolle Einsatz paralleler Einheiten, dass diese mit den
jeweils zu verarbeitenden Daten versorgt werden. Hierzu wird hufig ein hoher schaltungstechnischer Aufwand bentigt, der zustzlich zu dem Aufwand der bentigten parallelen Einheiten erforderlich wird.
Darber hinaus mssen in den Befehlsworten des Prozessors entweder mehrere Operationen codiert werden oder es mssen mehrere Befehle gleichzeitig verarbeitet werden knnen, was zu einer weiteren Erhhung des Realisierungsaufwands fhrt. Diese
Anstze werden als Very-Long-Instruction-Word-Architekturen (VLIW) beziehungsweise
superskalare Architekturen bezeichnet
Parallele Rechenwerke werden im Bereich der PC-Prozessoren eingesetzt, mit separaten Rechenwerken fr Integer- und Floating-Point-Operationen. Bei PC-Prozessoren
haben sich Multi-Core-Systeme durchgesetzt, bei denen mehrere Prozessoren in einem
Gehuse integriert werden. Diese Form der Rechenleistungserhhung wurde notwendig,
da sich die zuvor verfolgte Strategie einer mit jeder Prozessorgeneration steigenden Taktfrequenz aus technologischen Grnden nicht mehr durchhalten lie.

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

13.5 Manahmen zur Steigerung der Rechenleistung

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

Befehlausdem Programmspeicher holen


Befehldekodieren
Operandenlesen
Operationausfhren
Ergebnisabspeichern

Abb.13.11Zeitlicher Verlauf der Befehlsverarbeitung mit und ohne Pipelining

414

13 Grundlagen der Mikroprozessortechnik

Der schaltungstechnische Aufwand zur Realisierung einer einfachen Befehlspipeline


ist moderat. Im einfachsten Fall ist es ausreichend die einzelnen Stufen der Befehlsausfhrung durch Flip-Flops (sog. Pipeline-Register) zu entkoppeln. Auf diese Weise kann
in jedem Taktzyklus die Ausfhrung eines neuen Befehls gestartet werden.
Auf den ersten Blick mag der Einsatz von Pipelining als ein sehr effizientes Mittel
zur Steigerung der Rechenleistung erscheinen. In der Tat setzen die meisten der heute
verfgbaren Prozessoren Pipelining ein. Dennoch wird in der Praxis meist nicht ein
zu der Anzahl der Pipelinestufen proportionaler Rechenleistungsgewinn erzielt. Der
ausschlaggebende Grund fr diesen Effekt ist das Bestehen von Abhngigkeiten
zwischen den Befehlen, die zeitgleich verarbeitet werden. Exemplarisch soll dies im
Folgenden anhand der Datenabhngigkeit zweier Instruktionen verdeutlicht werden:
Wird ein Befehl ausgefhrt, der als Operanden das Ergebnis des vorangegangenen
Befehls bentigt, fhrt dies zu einem Konflikt. Erst wenn die vorangegangene
Instruktion die W-Stufe durchlaufen hat, kann das Ergebnis von der R-Stufe als
Operand fr einen nachfolgenden Befehl gelesen werden. Betrachtet man zwei
aufeinanderfolgende Befehle, wird deutlich, dass der zweite Befehl die R-Stufe bereits
durchlaufen hat, wenn sich der erste Befehl in der W-Stufe befindet (vgl. Abb.13.12).
Ohne weitere Manahmen zu ergreifen, wrde der zweite Befehl somit einen veralteten,
falschen Wert als Operanden einlesen.
Die einfachste Mglichkeit diesen Konflikt aufzulsen, besteht darin, die Ausfhrung
des zweiten Befehls zu verzgern. So wird sichergestellt, dass der zweite Befehl die
R-Stufe erst durchluft nachdem der erste Befehl in der W-Stufe verarbeitet wurde
(vgl. Abb.13.13). Diese Verzgerung der Befehlsausfhrung fhrt jedoch zu einer
Verringerung der pro Zeiteinheit verarbeiteten Befehle, was somit zu einer Verringerung
der Rechenleistung fhrt. Moderne Prozessoren setzen daher verschiedene komplexe
Manahmen zur Verringerung des negativen Einflusses der Abhngigkeit zwischen

Befehl 1

Befehl 2

Ergebnis des Befehls 1


steht in Register zur Verfgung

Ergebnis des Befehls 1


wird von Befehl 2 bentigt
t

Abb.13.12Beispiel eines Konfliktes bei der Befehlsabarbeitung

13.5 Manahmen zur Steigerung der Rechenleistung

Befehl 1

Befehl 2

415

Ergebnis des Befehls1


stehtin Register zur Verfgung

Ergebnis des Befehls1


wird von Befehl 2 bentigt
t

Abb.13.13Auflsung eines Pipelinekonfliktes durch Verzgerung der Befehlsabarbeitung

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 Grundlagen der Mikroprozessortechnik

Andere Prozessorhersteller haben ebenso verschiedenste Befehlssatzerweiterungen


entwickelt und mit unterschiedlichen Bezeichnungen auf dem Markt etabliert.
Spezielle Befehle zur Untersttzung typischer Operationsfolgen lassen sich nicht nur
in PC-Prozessoren finden. Selbst Mikroprozessoren der unteren Preisklasse setzen das
Prinzip der Befehlssatzerweiterung ein. Die im nachfolgenden Kapitel vorgestellte AVRCPU besitzt beispielsweise besondere Befehle zum Setzen oder Lschen einzelner Bits.

13.6 Grundlegende Mikroprozessorarchitekturen


Fr den Entwurf und die Auswahl eines Mikroprozessors stellen sich viele Fragen, die
die Architektur des Prozessors beeinflussen. Einige dieser Fragestellungen sind:
Welche Wortbreite wird fr die Daten- und Adressbusse verwendet?
Welche Wortbreite besitzt das Rechenwerk, und ist eine Floating-Point-Unit zur
Beschleunigung von Gleitkommaoperationen vorhanden?
Welche Befehle werden untersttzt?
Wie werden die Befehle binr codiert und welche Wortbreite wird fr die Codierung
der Befehle verwendet?
In welchem Umfang sind innerhalb der CPU Speicherelemente, zum Beispiel zum
Abspeichern von Zwischenergebnissen vorhanden?
In welchen Teilschritten werden die Befehle abgearbeitet?
In welchem Umfang wird Pipelining fr die Befehlsausfhrung eingesetzt?
Wie werden Parameter wie Rechenleistung, Kosten und Verlustleistung ausbalanciert?
Welche Halbleitertechnologie wird fr die Realisierung verwendet?
Anhand dieser Auswahl von Fragestellungen wird deutlich, dass fr den Entwurf eines
Mikroprozessors eine Vielzahl von Freiheitsgraden existiert, die zu unterschiedlichen
architektonischen Varianten fhrt. Trotz dieser Detailvielfalt knnen Mikroprozessoren
in zwei grundlegende Architekturklassen eingeteilt werden, deren Eigenschaften in den
folgenden Abschnitten nher beleuchtet werden.

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

13.6 Grundlegende Mikroprozessorarchitekturen

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

13 Grundlagen der Mikroprozessortechnik

Relativ hohe Registeranzahl


RISC-Prozessoren besitzen meist deutlich mehr Register als CISC-Prozessoren. Die
whrend der Abarbeitung eines Programms anfallenden Zwischenergebnisse knnen so
innerhalb des Prozessors abgelegt werden. Die Anzahl fr zustzliche Befehle zum Ablegen der Zwischenergebnisse im Datenspeicher kann auf diese Weise reduziert werden.
Universell verwendbare Register
Die CPU-internen Register knnen sowohl fr die Verarbeitung von Daten als auch zur
Berechnung von Adressen verwendet werden. Eine Unterscheidung zwischen Daten- und
Adressregistern, wie sie teilweise bei CISC-Prozessoren verwendet wurde, findet nicht
statt.
Einfache Befehlscodierung
Um die Decodierung eines Befehls zu vereinfachen und damit zu beschleunigen, wird
eine einheitliche Codierung der Befehle angestrebt. Hierbei wird das Befehlswort in der
Regel in einzelne Felder unterteilt, in denen unabhngig vom Befehl, immer die gleiche
Information (zum Beispiel die auszufhrende Operation oder die fr die Operation zu
verwendenden Register) gespeichert ist.

13.6.3 RISC und Harvard-Architektur


Wie im vorigen Abschnitt beschrieben, ist eine wesentliche Eigenschaft von RISC-Prozessoren die Verwendung von Instruktionspipelining zur Verarbeitung von Befehlen.
Der Einsatz von Instruktionspipelining ermglicht eine Erhhung des Befehlsdurchsatzes (Anzahl der verarbeiteten Befehle pro Taktzyklus), da in jedem Taktzyklus mehrere
unterschiedliche Befehle in den einzelnen Stufen der Pipeline verarbeitet werden. Wird
ein RISC-Prozessor auf Basis einer Von-Neumann-Architektur implementiert, ergibt
sich ein Engpass, durch die Verwendung eines gemeinsamen Speichers fr Befehle und
Daten.
Dieser Engpass entsteht, da bei Verwendung von Instruktionspipelining in jedem
Taktzyklus die Ausfhrung eines neuen Befehls gestartet werden kann. Dabei wird mit
jedem Taktzyklus ein Zugriff auf den Speicher ausgefhrt. Werden Befehle ausgefhrt,
die einen Zugriff auf den Datenspeicher ausfhren, fhrt dies zu einem Konflikt:
Innerhalb eines Taktzyklus msste sowohl der Zugriff auf die Befehle des Programms
als auch der Zugriff auf die im gemeinsamen Programm- und Datenspeicher abgelegten
Daten erfolgen. Der gemeinsame Speicher fr Daten und Befehle einer Von-NeumannArchitektur ermglicht jedoch nur einen Zugriff, entweder auf Daten oder auf Befehle.
Somit mssen die Zugriffe auf Daten und Befehle in unterschiedlichen Taktzyklen
erfolgen. Es kann also nicht mehr in jedem Taktzyklus ein Zugriff auf die Befehle des
Programms erfolgen und der Befehlsdurchsatz sowie die erzielbare Rechenleistung

13.6 Grundlegende Mikroprozessorarchitekturen

419

werden reduziert. Der beschriebene Engpass der Von-Neumann-Architektur wird auch


als Von-Neumann-Bottleneck bezeichnet.
Es ist mglich, einen RISC-Prozessor auf Basis einer Von-Neumann-Architektur
zu realisieren, sofern die beschriebene Reduktion der Rechenleistung fr das
Anwendungsgebiet des Prozessors tolerierbar ist. Ist es dagegen das Ziel, einen
mglichst hohen Befehlsdurchsatz zu erzielen, ist es sinnvoll, den Speicherkonflikt
durch Realisierung getrennter Speicher fr Befehle und Daten aufzulsen. Dieser
architektonische Ansatz wird als Harvard-Architektur bezeichnet. Die Struktur eines
Mikrorechnersystems auf Basis einer Harvard-Architektur ist in Abb.13.14 dargestellt.
Der Programmspeicher der in Abb.
13.14 Architektur kann beispielsweise als
nichtflchtiger Flashspeicher realisiert werden. Der Datenspeicher wird dagegen meist
auf Basis eines flchtigen SRAMs realisiert.
In der Regel bentigen Programme Konstanten, die beim Start des Programms
definierte Werte enthalten. Einerseits handelt es sich bei diesen Konstanten um Daten,
die somit im flchtigen Datenspeicher abgelegt werden mssen, der jedoch nach dem
Einschalten der Versorgungsspannung keine definierten Werte enthlt. Daher werden die
Konstanten zusammen mit dem Programm im Flashspeicher abgelegt und stehen sofort
nach dem Einschalten des Systems zur Verfgung. Zu Beginn des Programms werden
die Konstanten aus dem Flashspeicher in den Datenspeicher kopiert. Fr diesen initialen
Kopiervorgang muss der Programmspeicher jedoch wie ein Datenspeicher betrieben
werden. Da dies nicht dem reinen Grundkonzept einer Harvard-Architektur entspricht,
werden Architekturen mit getrennten Daten- und Programmspeichern, die einen

Programm-Speicher
Flash
Steuer-, Adress- und Datenbus fr den
Zugriff auf den Programmspeicher
CPU
Steuerbus
Datenbus

Adressbus
EEPROM

SRAM

Ausgabe

Eingabe

Daten-Speicher

Abb.13.14Struktur eines Mikrorechners auf Basis einer Harvard-Architektur

420

13 Grundlagen der Mikroprozessortechnik

datenorientierten Zugriff auf den Programmspeicher erlauben, auch als modifizierte


Harvard-Architektur bezeichnet.
Die Idee, Daten und Befehle in getrennten Speichern abzulegen, um eine mglichst
hohe Rechenleistung zu erzielen, mag einfach erscheinen. Allerdings wurde dieser
Ansatz von ersten integrierten Mikrorechnersystemen nicht verwendet. Bei typischen
CISC-Prozessoren, wie sie insbesondere in den 1970er bis 1990er Jahren realisiert wurden, tritt kein Zugriffskonflikt auf, da ein Befehl immer komplett abgearbeitet wird,
bevor die Verarbeitung des nachfolgenden Befehls gestartet wird. Darber hinaus ist die
Realisierung getrennter Speicher aufwendiger und kann die Kosten des Systems erhhen.
Erst bei Einsatz von Instruktionspipelining, welches zuerst in Spezialprozessoren fr die
digitale Signalverarbeitung (Digitale Signalprozessoren, DSP) eingesetzt wurde, wurden
getrennte Speicher fr Daten und Befehle fr die Realisierung von Mikrorechnersystemen eingesetzt. Spter wurden die zunchst CISC-basierten Standardprozessoren mehr
und mehr durch RISC-Prozessoren ersetzt. Als Folge des hierbei verwendeten Instruktionspipelinings bekam die Harvard-Architektur eine immer grere Bedeutung fr die
Realisierung integrierter Mikroprozessoren und Mikrorechnersysteme.

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

13 Grundlagen der Mikroprozessortechnik

Takterzeugung

Programmspeicher

Datenspeicher

Timer

Digitale
Schnittstellen

Analoge
Ein-/Ausgabe

Bussystem

CPU

Ports

Abb.13.15Architektur eines Mikrocontrollers

In vielen Abwendungsfllen muss ein Mikrocontroller ber standardisierte digitale


Schnittstellen mit anderen Komponenten eines Systems oder externen Gerten
kommunizieren. Grundstzlich kann diese Kommunikation mithilfe von Ports realisiert
werden, indem das jeweilige Schnittstellenprotokoll in Software implementiert wird.
Durch diesen Ansatz wird jedoch ein bestimmter Anteil der CPU-Rechenleistung
fr die SW-basierte Implementierung des Schnittstellenprotokolls bentigt, sodass
die zur Verfgung stehende Rechenleistung fr die eigentliche Applikation reduziert
wird. Um diesen Nachteil zu vermeiden, bieten Mikrocontroller verschiedene digitale
Schnittstellen (zum Beispiel USB oder Ethernet) als integrierte Hardwaremodule an.
Diese Schnittstellen implementieren das Protokoll zur Datenbertragung in HW und
entlasten so die CPU des Controllers, die lediglich die zu sendende Daten bereitstellen
beziehungsweise empfangene Daten von der Schnittstelle abholen muss.
Darber hinaus enthalten viele Mikrocontroller Schnittstellen, die der Erweiterung
des auf dem Controller integrierten Speichers dienen und mit externen SRAM- oder
SDRAM-Speicherbausteinen kommunizieren knnen. Neben der digitalen Ein-/Ausgabe
ermglichen viele Mikrocontroller das Einlesen oder Ausgeben analoger Werte durch
integrierte A/D- beziehungsweise D/A-Umsetzer.
Eine weitere typische Mikrocontrollerkomponente sind die sogenannten Timer, die im
deutschen Sprachgebrauch zum Teil auch als Zeitgeber bezeichnet werden. Im Grunde
handelt es sich bei Timern um integrierte Zhler, die entweder mit einem internen
Takt des Controllers oder mit einem von auen zugefhrten Takt betrieben werden
knnen. In Abhngigkeit vom Zhlerstand knnen verschiedene, programmierbare

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

13 Grundlagen der Mikroprozessortechnik

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.

14.1 Die Mikrocontroller-Familie AVR


Die AVR-Mikrocontroller sind relativ einfach strukturiert und eignen sich gut fr erste
Lernschritte im Bereich der Mikrorechnertechnik. Viele der AVR-Mikrocontroller werden in DIP-Gehusen (Dual-Inline-Package) angeboten, die sich gut fr vertiefende
Experimente auf einem Steckbrett eignen.
Springer-Verlag GmbH Deutschland 2016
W. Gehrke et al., Digitaltechnik, Springer-Lehrbuch,
DOI10.1007/978-3-662-49731-9_14

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.

14.2 Programmierung von Mikrocontrollern


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

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

Abb.14.1 Pinbelegung des


Mikrocontrollers ATmega32 im
40-poligen DIL-Gehuse

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.

14.2 Programmierung von Mikrocontrollern


Die Programmierung von Mikrocontrollern kann in Assembler oder in einer Hochsprache erfolgen. Bei der Programmierung in Assembler besteht das Programm aus
Befehlen, die genau wie im Programm angegeben, von der CPU ausgefhrt werden.
Diese Art der Programmierung hat verschiedene Vorteile: So kann zum Beispiel die

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

14.2 Programmierung von Mikrocontrollern

429

neue Ausgangswerte berechnet, die anschlieend ber die Ausgabeeinheiten ausgegeben werden. Dieser Grundstruktur folgen sowohl Assemblerprogramme als auch
Hochsprachenprogramme.

14.2.1 Programmierung inAssembler


Im Gegensatz zu einem Hochsprachenprogramm darf in jeder Zeile eines Assemblerprogramms maximal ein CPU-Befehl stehen.
CPU-Befehle bestehen aus einer Bitkombination, die im Programmspeicher des
Rechners abgelegt werden. Da jedoch niemand ein Programm schreiben mchte, das
aus einer Textdatei mit Nullen und Einsen besteht, werden CPU-Befehle in einer fr den
Menschen lesbaren Form angegeben. Hierzu werden die Befehle als Mnemonics (Krzel,
die meist aus 1 bis 4 Buchstaben bestehen) angegeben. Nach dem Befehlskrzel werden
zu verarbeitenden Operanden angeben.
Fr die AVR-CPU kann man den Befehl zur Addition der Werte in den Arbeitsregistern r5 und r7 in binrer Form so schreiben:
0000110001010111

Deutlich besser lesbar ist diese Variante:


add r5, r7

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.

14.2.2 Programmierung inC


Ein wesentlicher Aspekt der Mikrocontrollerprogrammierung ist der Zugriff auf die
eingebettete Peripherie. Um beispielsweise einen digitalen Wert an einem Mikrocontrolleranschluss ausgeben zu knnen, muss die CPU den Ausgabewert in Registern der
Peripheriekomponenten ablegen. Zwei wichtige Aspekte, die fr die MikrocontrollerProgrammierung in C wichtig sind, werden in diesem Abschnitt vorgestellt.

14.2.2.1Zugriff auf Peripheriekomponenten


Viele Mikrocontroller verwenden Memory-Mapped-I/O (vgl. Kapitel13) um Zugriffe auf
die Komponenten, zum Beispiel Ein-/Ausgabe-Einheiten, zu ermglichen. Auf die Peripherie kann dann genauso wie auf den Datenspeicher zugegriffen werden. Auf welche Komponente zugegriffen wird, ergibt sich aus der verwendeten Adresse. Whrend es fr normale
Variablen vllig egal ist, an welcher Stelle sie im Speicher abgelegt werden, ist es fr einen
Peripheriezugriff essenziell, genau die richtige Adresse anzusprechen. Man muss also, im
Gegensatz zu typischen PC-Programmen, dem Compiler vorschreiben, auf welche Adresse
er zugreifen soll. Dies lsst sich relativ einfach mithilfe von Zeigern realisieren.
Nehmen wir an, Sie mchten auf eine Peripheriekomponente zugreifen, die unter der
Adresse 234 erreichbar. Ein entsprechender Programmausschnitt, welcher der Peripheriekomponente den Wert 7 bergibt, kann dann wie folgt aussehen.
// Zeiger definieren und initialisieren
// Anschlieend verweist der Zeiger auf die gewnschte Adresse
volatile char *periph_ptr = (char *) 234;
// Der Peripheriekomponente einen Wert bergeben
// Hierzu wird an die Adresse, auf die der Zeiger verweist,
// der gewnschte Wert abgelegt
*periph_ptr = 7;

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

14.2 Programmierung von Mikrocontrollern

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.

14.2.2.2Setzen und Lschen von Bits


Hufig sind in einem Register einer Peripheriekomponente mehrere unterschiedliche
Informationen zusammengefasst. Die einzelnen Bits des Registers besitzen also eine
unterschiedliche Wirkung. In vielen Fllen mchte man daher nur einzelne Bits eines
Registers modifizieren.
Nehmen wir zum Beispiel an, dass ber den oben verwendeten Zeiger output_ptr der
Ausgangswert von 8 Mikrocontrolleranschlssen festgelegt werden kann. Jedem Bit des
Peripherieregisters, auf das output_ptr verweist, ist genau ein Portausgang des Controllers zugeordnet.
Nehmen wir an, Sie mchten am Anschluss 3 eine 1 ausgeben. Hierzu muss also das
Bit 3 des Registers gesetzt werden. Nehmen wir darber hinaus an, dass die anderen
Ausgabewerte unverndert bleiben sollen. Es darf also nur das Bit 3 des Registers modifiziert werden.
Dies lsst sich durch eine bitweise ODER-Verknpfung, in C/C++ der Operator |,
des Registerwertes mit dem Wert 8 (Bit 3 ist gesetzt, alle anderen Bits sind Null) erreichen. In C kann dies so erfolgen:

432

14Mikrocontroller

// Beispiel fr das Setzen eines Bits


char tmp;
tmp = *output_ptr; // aktuellen Registerwert holen
tmp = tmp | 8; // Bit 3 setzen -- Achtung! Dies ist ein bitweises
ODER
// Nicht mit dem logischen ODER verwechseln: ||
*output_ptr = tmp; // und wieder in das Register schreiben

In C/C++ kann man dies auch in einer Zeile schreiben:


*output_ptr |= 8; // Bit 3 setzen - die kurze Variante

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

14.3 Die AVR-CPU

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);

14.3 Die AVR-CPU


Der Mikroprozessor der AVR-Controller ist eine RISC-CPU, die auf einer HarvardArchitektur basiert. Der Prozessor beinhaltet 32 Arbeitsregister mit einer Wortbreite von
8bit, die sowohl fr arithmetisch-logische Operationen als auch fr Adressberechnungen
eingesetzt werden knnen. Diese Register werden als r0,r1,, r30, r31 bezeichnet. Da
die CPU auf einer Load/Store-Architektur basiert, knnen arithmetisch-logische Operationen nur mit Daten ausgefhrt werden, die sich in den Arbeitsregistern befinden. Fr
das Laden der Register beziehungsweise das Abspeichern von Registerwerten stehen entsprechende Transferbefehle zur Verfgung.
Neben den Arbeitsregistern enthlt der Mikroprozessor der AVR-Controller die folgenden Register:
Programmzhler (Program Counter, PC)
Der Programmzhler enthlt die Adresse des als nchsten auszufhrenden Befehls und
besitzt eine Wortbreite, die es ermglicht, den gesamten Programmspeicher des jeweiligen Controllers zu adressieren.
Statusregister
Das Statusregister besitzt eine Wortbreite von 8bit. Jedes dieser Bits wird auch als Flag
bezeichnet. Die Flags enthalten unter anderem Informationen ber die ausgefhrten Operationen (zum Beispiel Auftreten arithmetischer berlufe).
Stackpointer
Der Stackpointer (Stapelzeiger) ist ein Register, welches die aktuelle SRAM-Adresse des
Stapels enthlt.
Befehlsregister
Das Befehlsregister dient der Zwischenspeicherung des aus dem Programmspeicher ausgelesenen Befehls. Das Befehlsregister ist bei der Programmierung nicht sichtbar und
der Inhalt kann nicht durch Befehle modifiziert werden.
Der Mikroprozessor enthlt darber hinaus ein Steuerwerk, welches die Decodierung
der Befehle vornimmt und CPU-interne Steuersignale zur Verarbeitung eines Befehls
generiert. Das Rechenwerk des AVR-Prozessors enthlt eine 8-Bit-ALU, welche die in

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)

Abb.14.2Struktur der AVR-CPU

Rechenwerk
(ALU)

Arbeitsregister
(r0 r31)
32 x 8 bit

Stackpointer
(SP)

Adressen & Daten


(zum/vom Datenspeicher)

14.3 Die AVR-CPU

435

Tab.14.1Statusregister der AVR-CPU


Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

InterruptFlag

Bit-Transfer- HalfSign-Flag OverflowFlag


Carry-Flag
Flag

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.

14.4 Der AVR-Befehlssatz


Dieser Abschnitt gibt eine bersicht ber den Befehlssatz der AVR-CPU. Mithilfe von
arithmetischen und logischen Befehlen werden Arbeitsregister der CPU modifiziert.
Transferbefehle werden genutzt um Daten aus den Registern in die Peripheriekomponenten oder den Speicher zu bertragen, beziehungsweise um Daten aus den Systemkomponenten in die Arbeitsregister zu transferieren. Eine weitere Gruppe sind die Befehle,
die zur Steuerung des Programmablaufs genutzt werden. Mithilfe dieser Befehle knnen
Sprnge, Verzweigungen und Schleifen realisiert werden.

14.4.1 Arithmetische und logische Befehle


Als Operanden fr die arithmetischen und logischen Befehle knnen die Arbeitsregister verwendet werden. Die AVR-CPU verwendet ein sogenanntes Zwei-Adress-Format.
Das bedeutet, dass maximal zwei Operanden durch einen Befehl adressiert werden. Das
Ergebnis der ausgefhrten Operation wird hierbei in einem der beiden Operandenregister
abgelegt und der darin gespeicherte Wert wird berschrieben. Exemplarisch kann dies
anhand des Additionsbefehls verdeutlich werden. Der Befehl add r7,r12 fhrt eine Addition der Inhalte der Register r7 und r12 aus. Die Summe der beiden Operanden wird
anschlieend im erstgenannten Register r7 abgelegt.
Darber hinaus kann fr einige Befehle auch die unmittelbare (engl. immediate)
Adressierung verwendet werden. In diesem Fall ist der zweite Operand eine 8bit breite
Konstante, welche im Befehlswort abgelegt wird. Soll beispielsweise die Konstante 17
vom Inhalt des Registers r23 subtrahiert werden, kann dies mithilfe des Befehls subi
r23,17 erfolgen. Der Buchstabe i ist hierbei das Krzel fr immediate.
Fr alle Befehle, die eine unmittelbare Adressierung verwenden, gilt die Einschrnkung, dass sie nur mit der oberen Hlfte des Arbeitsregistersatzes, also mit r16 bis r31,
verwendet werden knnen. Der Grund hierfr ist die Beschrnkung der Befehlswortbreite auf 16bit. Da die Konstante bereits 8Bit belegt und fr die Codierung der auszufhrenden Operation weitere 4Bit bentigt werden, verbleiben lediglich 4Bit zur
Codierung des Arbeitsregisters, womit nicht alle 32 Register adressiert werden knnen.
Bei vielen Mikrocontrollern der AVR-Serie werden auch einige Befehle mit Operanden der Wortbreite 16bit untersttzt. Da die Arbeitsregister der AVR-CPU eine Wortbreite von 8bit besitzen, werden die Operanden aus zwei aufeinanderfolgenden Registern

14.4 Der AVR-Befehlssatz

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.

14.4.3 Befehle zur Programmablaufsteuerung


Zur Steuerung des Programmablaufs besitzen die Mikrocontroller der AVR-Familie
verschiedene Sprungbefehle, mit denen unbedingte oder bedingte Sprnge ausgefhrt

438

14Mikrocontroller

Tab.14.2Arithmetische und logische Befehle der AVR-CPU

(Fortsetzung)

14.4 Der AVR-Befehlssatz

439

Tab14.2 (Fortsetzung)

(Fortsetzung)

440

14Mikrocontroller

Tab14.2 (Fortsetzung)

(Fortsetzung)

14.4 Der AVR-Befehlssatz

441

Tab14.2 (Fortsetzung)

Tab.14.3Statusregister der
AVR-CPU

Tab.14.4Alternative
Bezeichnungen fr Register
der AVR-CPU

Flag

Befehl zum Setzen

Befehl zum Lschen

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

Tab.14.5Transferbefehle der AVR-CPU

(Fortsetzung)

14.4 Der AVR-Befehlssatz


Tab14.5 (Fortsetzung)

443

444

14Mikrocontroller

In Tab.14.6 sind die wichtigsten Sprungbefehle der AVR-CPU zusammengestellt.


Neben den oben genannten Sprungbefehlen besitzt die AVR-CPU Befehle, mit denen
ein einzelner nachfolgender Befehl bersprungen werden kann. Diese sogenannten Skipbefehle sind in Tab.14.7 zusammengefasst.
Fr die Ausfhrung von bedingten Sprngen knnen die Befehle BRBC und BRBS
verwendet werden. Hierbei ist die Angabe des abzufragenden Flags des Statusregisters
erforderlich. Da dies das Programm unbersichtlicher machen kann, stehen fr jedes Bit
des Statusregisters spezielle Sprungbefehle zur Verfgung. Diese Befehle stellen keine
zustzlichen Befehle dar, sondern sind lediglich synonyme Bezeichnungen fr die entsprechenden Varianten des BRBC- beziehungsweise BRBS-Befehls. Tab.14.8 fasst die
Synonyme fr bedingte relative Sprungbefehle zusammen.

14.5 Verwendung der AVR-Befehle


In diesem Abschnitt wird die Verwendung des Befehlssatzes anhand einiger Beispiele
verdeutlicht. Hierzu werden Programmfragmente vorgestellt, die auch in greren AVRProgrammen eingesetzt werden knnen.

14.5.1 Arithmetische und logische Grundfunktionen


Die Mikroprozessoren der AVR-Familie untersttzen Befehle zur Verarbeitung von Byteoperanden. Sollen Operanden mit einer greren Wortbreite verarbeitet werden, mssen
hierzu mehrere aufeinander folgende Befehle verwendet werden. Im Folgenden wird dies
fr einige arithmetische und logische Grundfunktionen vorgestellt.

14.5.1.1Setzen und Lschen einzelner Bits


Zum Setzen oder Lschen einzelner oder auch mehrerer Bits stehen die Befehle sbr und
cbr zur Verfgung. Alternativ knnen hierfr auch die logischen Befehle and, andi beziehungsweise or oder ori eingesetzt werden. Sowohl fr die Befehle sbr und cbr als auch
fr alle Befehle mit unmittelbarer Adressierung wie andi oder ori drfen nur die Register
r16 bis r31 verwendet werden.
; Setzen des Bits 4 im Register r20
sbrr20,16
orir20,0x10; Alternative mit identischer Funktion
; Lschen des Bits 2 im Register r23
cbrr23,4
andir23,0xFB; Alternative mit identischer Funktion

14.5 Verwendung der AVR-Befehle


Tab.14.6Sprungbefehle der AVR-CPU

445

446

14Mikrocontroller

Tab.14.7berblick ber die Skipbefehle

Tab.14.8berblick ber bedingte relative Sprungbefehle


Flag
C
N
Z
V
S
H
T
I

Bedingter Sprungbefehl
0

BRCC, BRSH

Branch if Carry Cleared, Branch if Same or Higher

BRCS, BRLO

Branch if Carry Set, Branch if Lower

BRPL

Branch if Plus

BRMI

Branch if Minus

BRNE

Branch if Not Equal

BREQ

Branch if Equal

BRVC

Branch if Overflow Cleared

BRVS

Branch if Overflow Set

BRGE

Branch if Greater or Equal (signed)

BRLT

Branch if Less Than (signed)

BRHC

Branch if Half-Carry Cleared

BRHS

Branch if Half-Carry Set

BRTC

Branch if T-Flag Cleared

BRTS

Branch if T-Flag Set

BRID

Branch if Interrupt Disabled

BRIE

Branch if Interrupt Enabled

14.5 Verwendung der AVR-Befehle

447

14.5.1.2Addition und Subtraktion


Im folgenden Programmfragment wird davon ausgegangen, dass die zu addierenden
16bit breiten Operanden in den Registerpaaren r25:r24 und r27:r26 stehen. Die Summe
wird im Registerpaar r25:r24 abgelegt.
; Addition zweier 16-Bit-Operanden
addr24,r26; untere 8 Bit der Operanden addieren
adcr25,r27; obere 8 Bit der Operanden addieren

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

Analog zur Addition kann die Subtraktion ausgefhrt werden:


; Subtraktion zweier 16-Bit-Operanden
subr24,r26; untere Bytes der Operanden subtrahieren
sbcr25,r27; obere Bytes der Operanden subtrahieren

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

14.5.1.3Arithmetische und logische Schiebeoperationen


Fr logische oder arithmetische Schiebeoperationen stehen die Befehle lsr, lsl, ror, rol
und asr zur Verfgung, die einen Wert um ein Bit nach rechts beziehungsweise links verschieben. Das jeweils herausgeschobene Bit, beim Rechtsschieben beispielsweise das
unterste Bit des Operanden, wird im Carry-Flag abgelegt. Die Rotationsbefehle ror und
rol bertragen den Wert des Carry-Flags in das frei gewordenen Bit des Arbeitsregisters.
In Abb.14.3 ist die Funktionsweise der Schiebe- und Rotationsbefehle veranschaulicht.
Die Schiebebefehle arbeiten mit 8-Bit-Operanden. Durch mehrfache Anwendung von
Schiebebefehlen knnen auch breitere Operanden verarbeitet werden. Exemplarisch wird
dies anhand eines 16-Bit-Wertes gezeigt, welcher in zwei Arbeitsregistern abgelegt ist.
; Schieben nach links
lslr24; unteres Byte schieben
rolr25; oberes Byte schieben
; Schieben nach rechts (logisch bzw. vorzeichenlos)
lsrr25; oberes Byte schieben
rorr24; unteres Byte schieben
Logisches Schieben
LSR
C-Flag
1

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

Abb.14.3Schiebe- und Rotationsbefehle

ROL
C-Flag
1

Operand
0 1 1 0 0 0 1 0

1 1 0 0 0 1 0 1
Ergebnis

14.5 Verwendung der AVR-Befehle

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.

Abb.14.4 Prinzip der 16x16Multiplikation mithilfe von


8x8-Multiplikationsbefehlen

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

; Vorzeichenlose 16x16 Multiplikation


clrr18; Produktbits (23:16) auf 0 setzen
clrr19; Produktbits (31:24) auf 0 setzen
mulr24,r26; op1_l * op2_l (1. Teilergebnis mit Gewicht 16:0)
movr16,r0; Ergebnis in die Produktbits (7:0)
movr17,r1; und (15:8) kopieren
mulr25,r26; op1_h * op2_l (2. Teilergebnis mit Gewicht 24:8)
addr17,r0; Ergebnis zu den Produktbits (15:8)
adcr18,r1; und (23:16) addieren
mulr24,r27; op1_l * op2_h (3. Teilergebnis, mit Gewicht 24:8)
addr17,r0; Ergebnis zu den Produktbits (15:8)
adcr18,r1; und (23:16) addieren
mulr24,r27; op1_h * op2_h (4. Teilergebnis mit Gewicht 31:16)
addr18,r0; Ergebnis zu den Produktbits (23:16)
adcr19,r1; und (31:24) addieren

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

14.5 Verwendung der AVR-Befehle

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

14.5.2 Befehle fr den Zugriff auf Speicher und


Peripheriekomponenten
In diesem Abschnitt werden die Befehle zum Transfer von Daten zwischen der CPU
und dem Speicher beziehungsweise den eingebetteten Peripheriekomponenten nher
erlutert. Da die AVR-CPU eine Load-Store-Architektur besitzt, mssen alle Daten, die
durch ein Programm verarbeitet werden sollen, zunchst durch einen Ladebefehl (load)
in ein Arbeitsregister der CPU bertragen werden. Anschlieend knnen die Daten mit
arithmetischen oder logischen Befehlen verarbeitet werden. Die Ergebnisse dieser Operationen knnen fr weitere arithmetisch-logische Befehle im Register verbleiben oder
werden mithilfe eines Speicherbefehls (store) in den Speicher oder die Peripheriekomponenten bertragen
Fr die Adressierung des SRAMs im Controller stehen mehrere Load- und Storebefehle zur Verfgung, welche sich durch die verwendete Adressierungsart unterscheiden.
Diese Befehle sind in Tab.14.9 zusammengefasst.
Tab.14.9Adressierung des SRAMs ber Lade- und Speicherbefehle
Addressierungsart

Load-Befehl

Storebefehl

Absolut

lds

sts

Indirekt

ld

st

Indirekt mit Pre-Drekrement oder Post-Inkrement

ld

st

Indirekt mit Verschiebung

ldd

std

Absolut

lds

sts

452

14Mikrocontroller

Als Zielarbeitsregister der Load-Befehle beziehungsweise Quellarbeitsregister fr die


Store-Befehle knnen alle 32 Arbeitsregister der CPU verwendet werden. Fr die Adressierung des Speichers im Fall der indirekten Adressierung knnen nur die Register X, Y
und Z verwendet werden. Der Offset bei indirekter Adressierung mit Verschiebung darf
nur positiv sein und den Wert 63 nicht berschreiten. Darber hinaus wird diese Adressierungsart nur fr die Register Y und Z untersttzt.
Im Folgenden sind Codebeispiele zur Verwendung der Load- und Storebefehle angegeben. Alle Beispiele fhren die gleiche Operation aus: Das Kopieren des Wertes in der
SRAM-Speicherstelle 228 in die SRAM-Speicherstelle 254.
; Speicherstelle kopieren mit absoluter Adressierung
ldsr7,228; Wert aus SRAM laden
sts254,r7; Wert in SRAM speichern
; Speicherstelle kopieren mit indirekter Adressierung
ldir30,228; Low-Byte des Z-Registers laden
ldir31,0; High-Byte des Z-Registers laden
ldir26,255; Low-Byte des X-Registers laden
ldir27,0; High-Byte des X-Registers laden
ldr3,Z; Wert indirekt aus SRAM laden
st-X,r3; mit Pre-Dekrement speichern
; Kopieren mit indirekter Adressierung mit Verschiebung
ldir28,220; Low-Byte des Y-Registers laden
ldir29,0; High-Byte des Y-Registers laden
lddr5,Y+8; Wert aus SRAM laden
stdY+34,r5; Wert in SRAM speichern

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+;

Verwendung des Befehls lpm


r0 mit Wert aus Programmspeicher laden
identisch zu voriger Zeile
hier wird r8 berschrieben
r17 laden, anschlieend Z inkrementieren

Der Zugriff auf die Peripheriekomponenten kann sowohl memory-mapped (mithilfe


der zuvor beschriebenen Load-/Storebefehle) als auch port-mapped erfolgen. Fr einen
port-mapped-basierten Zugriff stellt die AVR-CPU die Befehle in und out zur Verfgung.

14.5 Verwendung der AVR-Befehle

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.

14.5.3.1Bedingte Verzweigungen und Programmschleifen


Soll eine bedingte Verzweigung oder eine Programmschleife realisiert werden, knnen hierzu die bedingten Sprungbefehle oder auch die Skip-Befehle verwendet werden. Exemplarisch kann die Verwendung der AVR-Sprungbefehle anhand zweier
einfacher Beispiele verdeutlich werden, die in Abb.14.6 als Flussdiagramme dargestellt sind.
Die bedingte Ausfhrung eines Befehls (Abb. 14.6a) lsst sich mithilfe eines Vergleichs und eines bedingten Sprungbefehls realisieren.

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

; Verzweigung mit bed. Sprung (if)


cpr24,r25; R24 und R25 vergleichen (Flags wie SUB)
brneweiter; falls ungleich: springen
subir28,10; Subtraktion ausfhren
weiter:

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:

14.5 Verwendung der AVR-Befehle

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.

14.5 Verwendung der AVR-Befehle


Tab.14.10Belegung
des Stacks fr das
Beispielprogramm

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

; Beispiel fr Unterprogrammaufrufe mit


; stackbasierter Parameterbergabe
haupt_prg:
ldir24,42; 1. Beispielwert laden
pushr24; 1. Wert auf dem Stack ablegen
ldir24,37; 2. Beispielwert laden
pushr24; 2. Wert auf dem Stack ablegen
rcall up_add; Unterprogramm aufrufen
popr24; Stackpointer durch pop-Befehle
popr24; wieder herstellen
; Das Ergebnis steht nun in r24
; weitere Befehle zur Verarbeitung des Ergebnisses
up_add:
pushr30; r30, r31 (= Z-Register)
pushr31; auf dem Stack sichern
pushr24; temporr verwendete Register sichern
pushr25
inr30,SPL; untere 8Bit des Stackpointers nach r30
inr31,SPL; obere 8 Bit des Stackpointers nach r31
lddr24,Z+8; 1. Wert vom Stack nach r24 kopieren
lddr25,Z+7; 2. Wert vom Stack nach r25 kopieren
addr24,r25; Parameter addieren
stdZ+8,r24; Ergebnis anstelle des 1. Wertes auf dem Stack ablegen
popr25; gesicherte Register wieder herstellen
popr24; Aufgrund der Struktur des Stapelspeichers
popr31; geschieht dies in umgekehrter Reihenfolge
popr30; (Beispiel: Das zuerst gesicherte Register wird
; zuletzt vom Stack geholt)
ret; Unterprogramm verlassen

458

14Mikrocontroller

14.6 Grundlagen der Interruptverarbeitung


Eine wichtige Aufgabe eines Mikrorechnersystems ist es, auf Ereignisse reagieren zu
knnen. Derartige Ereignisse knnen zum Beispiel Eingaben des Benutzers oder auch
das Bereitstellen von Daten eines Sensors sein. Ebenso knnten eingebettete Peripheriekomponenten wie Timer oder Kommunikationsschnittstellen Ereignisse auslsen, auf
die das Programm reagieren muss. Eine besondere Eigenschaft dieser Ereignisse ist, dass
sie asynchron zum laufenden Programm auftreten. Dies heit, dass man bei der Erstellung eines Programms nicht wei, welcher Teil des Programms gerade abgearbeitet wird,
wenn das Ereignis auftritt.
Es existieren zwei grundlegende Alternativen, um auf diese Ereignisse zu reagieren. Diese Alternativen werden im Folgenden mit dem englischen Fachbegriff Polling
(deutsch: Abfragen) und als Interruptverarbeitung oder kurz Interrupts bezeichnet.
Eine Analogie aus dem tglichen Leben kann helfen, die Grundprinzipien dieser beiden Strategien zu verdeutlichen: Sie haben Gste eingeladen, wissen aber nicht
genau, wann die Gste erscheinen werden. Zur Bewirtung Ihrer Gste mssen Sie noch
Getrnke kalt stellen.
Eine denkbare Strategie wre es, auf dem Flur der Wohnung im Kreis zu laufen. Jedes
Mal bei Erreichen der Wohnungstr wird diese geffnet, um nachzuschauen, ob die
Gste schon eingetroffen sind. Um die Wartezeit sinnvoller zu nutzen, knnte auch ein
Weg durch die Kche gewhlt werden, um mit jedem Durchlauf eine Getrnkeflasche in
den Khlschrank zu stellen. Diese Vorgehensweise entspricht in etwa dem Prinzip des
Pollings: Die Abfrage des Ereignisses (Gste sind da) wird wiederholt (in einer Warteschleife) ausgefhrt ohne zu wissen, ob das Ereignis wirklich eingetreten ist. Zustzlich
zur Abfrage des Ereignisses kann in der Warteschleife ein Teil der sonst noch anstehenden Aufgaben (Getrnke kalt stellen) abgearbeitet werden.
In der Realitt wrden die meisten Menschen vermutlich eine andere Strategie whlen, da sie eine Trklingel besitzen: Sie arbeiten die Aufgabe Getrnke kalt stellen ab
und unterbrechen diese Arbeit sobald die Klingel lutet. Die Gste werden hereingelassen und die unterbrochene Arbeit wird wieder aufgenommen. Diese Strategie entspricht
der Interruptverarbeitung: Das Ereignis (Gste sind da) wird durch eine besondere
Hardware (Klingel) signalisiert. Solange das Ereignis nicht eintritt, werden andere
Aufgaben abgearbeitet.
Obwohl die oben dargestellte Analogie nicht berstrapaziert werden sollte, kann sie
einige Konsequenzen der unterschiedlichen Strategien zur Verarbeitung von Ereignissen
verdeutlichen:
Fr die interruptbasierte Verarbeitung wird zustzliche Hardware bentigt, die zur
Unterbrechung einer von der CPU abgearbeiteten Aufgabe fhrt.
Potenziell knnte Polling zu krzeren Reaktionszeiten fhren. (ffnen der Tr genau
in dem Moment, in dem die Gste die Tr erreichen).

14.6 Grundlagen der Interruptverarbeitung

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

Fr die Auswahl, welches konkrete Ereignis (Low-Pegel, High-Pegel, steigende oder


fallende Flanke des an dem Anschluss zugefhrten Signals) zu einer Programmunterbrechung fhrt, existieren weitere Register, wie das Microcontroller Unit Control Register
(MCUCR) und das Microcontroller Unit Control and Status Register (MCUCSR).

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

14.6 Grundlagen der Interruptverarbeitung

461

Tab.14.12Zuordnung von Ereignissen und Interruptvektoren


InterruptInterruptquelle
vektor (hex.) Kurzbezeichnung

Erluterungen

Gruppe

00

RESET

Reset des Systems (nicht sperrbar)

Reset

02

INT0

Ereignis an Anschluss INT0

04

INT1

Ereignis an Anschluss INT1

Externe
Interruptquellen

06

INT2

Ereignis an Anschluss 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

SPI: bertragung abgeschlossen

1A

USART_RXC

USART: Datenempfang
abgeschlossen

1C

USART_UDRE

USART: Sendedatenspeicher leer

1E

USART_TXC

USART: Senden eines Datums


abgeschlossen

20

ADC

Umsetzung des Analogwertes fertig

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.

14.7 Eingebettete Peripheriekomponenten

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
}

Insbesondere bei Verwendung der Hochsprache C wird deutlich, dass Interrupt-


Service-Routinen grundstzlich keine Argumente und auch keine Rckgabewerte besitzen. Diese Eigenschaft ergibt sich aus der Tatsache, dass man nicht wissen kann, welcher
Programmteil gerade ausgefhrt wird, wenn eine ISR aufgerufen wird. Somit knnen
auch keine Parameter in Arbeitsregistern oder auf dem Stack abgelegt werden, die dann
von einer ISR verarbeitet werden knnten. Die einzige Mglichkeit eine Kommunikation zwischen Hauptprogramm und ISR zu realisieren, ist die Verwendung gemeinsamer
Speicherpltze, zum Beispiel im SRAM.

14.7 Eingebettete Peripheriekomponenten


Mikrocontroller sind universell einsetzbare digitale Systeme, die auf einem Chip integriert sind. Neben einer CPU enthalten Sie eine Vielzahl von verschiedenen Peripheriekomponenten fr sehr unterschiedliche Aufgaben. Die Hersteller von Mikrocontrollern

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

14.7 Eingebettete Peripheriekomponenten

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

Funktion des Portanschlusses

Eingang, hochohmig

Eingang, Pull-up-Widerstand aktiviert

Ausgang, Ausgabe einer 0

Ausgang, Ausgabe einer 1

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

Abb.14.7Einfache Mikrocontrolleranwendung mit LED und Taster

+5V

LED

14.7 Eingebettete Peripheriekomponenten

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;//
}
}

PA2 = 1 => Taster nicht gedrckt


PORTA(6) lschen (LED aus)
PA2 = 0 => Taster gedrckt
PORTA(6) setzen (LED an)

Neben der Portprogrammierung verdeutlicht dieses einfache Beispielprogramm einige


weitere wichtige Aspekte der Programmierung von Mikrocontrollern der AVR-Serie. Im
Folgenden werden die einzelnen Zeilen des Programms nher erlutert:
#define __AVR_ATmega32__ // Auswahl des Controllers

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

Die korrekte Programmierung des Datenrichtungsregisters des verwendeten Ports


geschieht mithilfe dieser Zeilen. In der ersten Zeile wird der aktuelle Wert des Datenrichtungsregisters gelesen und mithilfe einer bitweisen ODER-Verknpfung mit der hexadezimalen Konstanten 0x40 (binr: 0100 0000) verknpft. Das Ergebnis der Verknpfung
wird im Datenrichtungsregister des Ports A, DDRA, abgelegt. Durch diese Form der Programmierung des Datenrichtungsregisters wird sichergestellt, dass das Bit 6 des Datenrichtungsregisters DDRA, welches die Datenrichtung des Portanschlusses PA6 festlegt,
auf 1 gesetzt wird. Alle anderen Bits des Datenrichtungsregisters behalten ihren Wert.
Analog wird in der zweiten Zeile das Lschen des Bits 1 im Datenrichtungsregister
durch die Verwendung einer bitweisen UND-Verknpfung durchgefhrt.
Da bei geffnetem Taster kein eindeutiger logischer Pegel an dem Anschluss PA1
anliegt, wird mithilfe der dritten Zeile der interne Pull-Up-Widerstand dieses Portanschlusses aktiviert. Bei geffnetem Taster wrde an dem Portanschluss ber den PullUp-Widerstand eine logische 1 anliegen, whrend bei gedrcktem Taster eine logische 0
anliegt.
while (1)

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

14.7 Eingebettete Peripheriekomponenten

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

14.7 Eingebettete Peripheriekomponenten

Vorteiler

Taktauswahl

Anschluss fr
Zufhrung eines
externen Taktes

Zhler
stand

Takt
Zhler

Zhlerstandberprfung

TimerEreignis

Systemtakt

Abb.14.8Prinzipieller Aufbau eines einfachen Timers

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

Abb.14.9Verlauf des Zhlerstandes und eines Ausgangssignals im Normal Mode

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

14.7 Eingebettete Peripheriekomponenten

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

Abb.14.10Verlauf des Zhlerstandes und eines Ausgangssignals im CTC Mode

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

Im zweiten Fall des Phase-Correct-PWM-Modus, der auch als Dual-Slope-PWM-Modus


bezeichnet wird, zhlt der Timer zunchst aufwrts und nach Erreichen des Endwertes abwrts.
Nach Erreichen des Wertes 0 zhlt der Zhler wiederum aufwrts. Dabei findet ein Wechsel der
Polaritt des Ausgangssignals nur dann statt, wenn der Vergleichswert erreicht wird.
Hieraus ergeben sich die folgenden Gleichungen fr die Frequenz beziehungsweise
das Tastverhltnis des erzeugten Signals:

fPCPWM =

fin
2 NVor (TOP + 1)

VPCPWM = VFPWM =

OCR
TOP

Das zugehrige Zeitverhalten ist in Abb.14.12 dargestellt.


Zhlerstand
Endwert

Vergleichswert
(OCR-Register)
0

Ausgangssignal
1

Abb.14.11Verlauf des Zhlerstandes und eines Ausgangssignals im Fast-PWM-Mode

14.7 Eingebettete Peripheriekomponenten

475

Zhlerstand
Endwert

Vergleichswert
(OCR-Register)
0

Ausgangssignal
1

Abb.14.12Signalerzeugung im Phase-Correct-PWM-Mode (Dual-Slope-PWM-Mode)

14.7.2.4Die Timer des ATmega32


Der Mikrocontroller ATmega32 besitzt drei Timer, welche als Timer 0, Timer 1 und
Timer 2 bezeichnet werden.
Timer 0 ist ein 8-Bit-Timer. Er besitzt einen Vergleichswert (I/O-Register: OCR0) und
kann mit dem internen Systemtakt oder mit einem externen Takt (Anschluss: T0) betrieben werden.
Der Timer 1 ist ein 16-Bit-Timer, der ebenso mit dem internen Systemtakt oder einem
externen Takt (Anschluss: T1) betrieben werden kann. Er besitzt zwei Vergleichswerte
(OCR1A, OCR1B) und kann gleichzeitig zwei verschiedene Signale an den Controlleranschlssen OC1A und OC1B ausgeben.
Timer 1 besitzt darber hinaus eine sogenannte Input-Capture-Unit (ICU). Die Aufgabe der ICU ist es, den aktuellen Zhlerwert bei Auftreten eines zuvor programmierten Ereignisses in ein spezielles Register (I/O-Register ICR1) zu bertragen. Dieser Wert
bleibt bis zum nchsten Auftreten des Ereignisses im ICP-Register gespeichert und kann
von der CPU ausgelesen werden. Die ICU kann unter anderem zum zeitlichen Vermessen von digitalen Signalen verwendet werden. Wird beispielsweise als ICU-Ereignis das
Auftreten einer steigenden Flanke des Eingangssignals am Anschluss ICP1 ausgewhlt,
ist es mglich, die Periodendauer des Eingangssignals durch zeitliches Vermessen zweier
Taktflanken zu bestimmen. Hierzu muss lediglich der Wert des ICR1-Registers bei Auftreten der zweiten Taktflanke von dem ICR1-Wert bei Auftreten der ersten Taktflanke
subtrahiert werden. Die Periodendauer Tin des Signals ergibt sich dann zu:
Tin =

(ICRFlanke2 ICRFlanke2 ) NVor


fin

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.

14.7.2.5Register des Timers 0


Der aktuelle Zhlerstand des Timers 0 kann durch einen Zugriff auf das Register TCNT0
gelesen oder auch geschrieben werden. ber das Register OCR0 wird auf den Vergleichswert des Timers 0 zugegriffen.
Die Auswahl des Betriebsmodus des Timers 0 erfolgt ber ein Steuerregister (Timer/
Counter Control Register, TCCR0). Neben dem Betriebsmodus werden mithilfe dieses Registers auch der Wert des Vorteilers und die Quelle des Timertaktes festgelegt
(Tab.14.14).
Das Bit FOC0 dient dem softwarebasierten Auslsen eines Compare-Match-Ereignisses (Zhlerstand=Vergleichswert) unabhngig vom aktuellen Wert des OCR0Registers oder des Zhlerstandes. Die Bedeutung der anderen Bits dieses Registers ist in
Tab.14.15 und 14.16 zusammengefasst.
Tab.14.14Belegung des Registers TCCR0
TCCR0
Bit

Name

FOC0

WGM00

COM01

COM00

WGM01

CS02

CS01

CS00

Tab.14.15Bedeutung der Bits CS00, CS01 und CS02


CS02

CS01

CS00

Bedeutung

Keine Taktauswahl, Timer ist abgeschaltet

Systemtakt mit Vorteiler =1

Systemtakt mit Vorteiler =8

Systemtakt mit Vorteiler =64

Systemtakt mit Vorteiler =256

Systemtakt mit Vorteiler =1024

Externer Takt an Anschluss T0, aktive Flanke = fallende Flanke

Externer Takt an Anschluss T0, aktive Flanke = steigende


Flanke

14.7 Eingebettete Peripheriekomponenten

477

Tab.14.16Bedeutung der Bits WGM00, WGM01, COM00 und COM01


WGM00 COM01 COM00 WGM01 Bedeutung
0

Normal Mode, Signalerzeugung aus

CTC-Modus, Signalerzeugung aus

Normal Mode, Invertierung des OC0-Ausgangs bei


Erreichen des Vergleichswertes

CTC-Modus, Invertierung des OC0-Ausgangs bei Erreichen des Vergleichswertes

Normal Mode, Lschen des OC0-Ausgangs bei Erreichen des Vergleichswertes

CTC-Modus, Lschen des OC0-Ausgangs bei Erreichen des Vergleichswertes

Normal Mode, Setzen des OC0-Ausgangs bei Erreichen


des Vergleichswertes

CTC-Modus, Setzen des OC0-Ausgangs bei Erreichen


des Vergleichswertes

Phase-Correct-PWM-Modus, Signalerzeugung aus

Fast-PWM-Modus, Signalerzeugung aus

Reserviert (ungltige Konfiguration)

Reserviert (ungltige Konfiguration)

Phase-Correct-PWM-Modus, Lschen des OC0-Ausgangs bei Erreichen des Vergleichswertes whrend des
Aufwrtszhlens, Setzen whrend des Abwrtszhlens

Fast-PWM-Modus, Lschen des OC0-Ausgangs bei


Erreichen des Vergleichswertes whrend des Aufwrtszhlens, Setzen nach Zhlerberlauf

Phase-Correct-PWM-Modus, Setzen des OC0Ausgangs bei Erreichen des Vergleichswertes whrend des Aufwrtszhlens, Lschen whrend des
Abwrtszhlens

Fast-PWM-Modus, Setzen des OC0-Ausgangs bei


Erreichen des Vergleichswertes whrend des Aufwrtszhlens, Lschen nach Zhlerberlauf

14.7.2.6Register des Timers 1


Da der Timer 1 auf einem Zhler mit einer Wortbreite von 16bit basiert, sind Register,
die sich auf den Zhlerstand beziehen in Form von zwei 8bit breiten Registern implementiert. So kann beispielsweise der Zhlerstand des Timers ber die Register TCNT1L
(niederwertiges Byte) und TCNT1H (hherwertiges Byte) geschrieben und gelesen werden. Analog kann auf die Vergleichswerte mithilfe der Register OCR1AL und OCR1AH
sowie OCR2AL und OCR2AH zugegriffen werden. Entsprechendes gilt fr den ICR-Wert

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

COM1A1 COM1A0 COM1B1 COM1B0 FOC1A

FOC1B

WGM11 WGM10

CS11

CS10

TCCR1B
Bit

Name

ICNC1

ICES1

WGM13 WGM12 CS12

Tab.14.18Bedeutung der Bits COM1A1, COM1B1, COM1A0 und COM1B0


COM1A1 COM1A0 Bedeutung
COM1B1 COM1B0
0

Signalerzeugung aus

Normal, CTC: Invertieren des OC-Ausgangs bei Erreichen des


Vergleichswertes
PWM-Modi: Signalerzeugung aus.
Ausnahme WGM1 =1001,1110 oder 1111: Invertieren des OC1AAusgangs bei Erreichen des Vergleichswertes

Normal, CTC: Lschen des OC-Ausgangs bei Erreichen des


Vergleichswertes
Fast PWM: Lschen des OC-Ausgangs bei Erreichen des Vergleichswertes whrend, Setzen nach Erreichen von TOP
PC-PWM: Lschen des OC-Ausgangs bei Erreichen des Vergleichswertes whrend des Aufwrtszhlens, Setzen whrend des Abwrtszhlens

Normal, CTC: Setzen des OC-Ausgangs bei Erreichen des


Vergleichswertes
Fast PWM: Setzen des OC-Ausgangs bei Erreichen des Vergleichswertes whrend, Lschen nach Erreichen von TOP
PC-PWM: Setzen des OC-Ausgangs bei Erreichen des Vergleichswertes
whrend des Aufwrtszhlens, Lschen whrend des Abwrtszhlens

14.7 Eingebettete Peripheriekomponenten

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.

14.7.2.7Register des Timers 2


Die Register des Timers 2 entsprechen den Registern des Timers 0. Zur Unterscheidung
der Timer werden die Register des Timers 2 mit der Ziffer 2 (statt 0) gekennzeichnet,
also TCNT2 statt TCNT0, OCR2 statt OCR0, usw. Entsprechendes gilt fr die einzelnen
Bits der Timer-Register (zum Beispiel WGM21 statt WGM01). Eine Ausnahme bilden
die Bits CS22 bis CS20 zur Steuerung des Vorteilers (s.Tab.14.20).
Als Taktquelle kann neben dem Systemtakt auch ein separater Quarzoszillator verwendet werden, welcher mit einem externen Quarz (typischerweise mit einem 32-kHzUhrenquarz) betrieben wird. Zur Steuerung dieser Funktion besitzt der Timer 2 ein
weiteres Register, welches als Asynchronous Status Register (ASSR) bezeichnet wird
(Tab.14.21).
Ist das Bit AS2 gesetzt, wird der Timer 2 ber den separaten Quarzoszillator mit
einem Taktsignal versorgt. Ist das Bit dagegen gelscht, wird dem Timer der Systemtakt
zugefhrt. Die drei anderen Bits des ASSR-Registers dienen der Synchronisation zwischen der CPU und dem Timer: Wird beispielsweise ein Schreibzugriff auf das OCR2Register ausgefhrt, wird das Bit OCR2UB (OCR2 Update Busy) gesetzt. Erst wenn
Tab.14.19Bedeutung der Bits WGM13, WGM12, WGM11 und WGM10
WGM13

GM12

WGM11

WGM10

Bedeutung
Normal Mode, TOP = 0xFFFF

Phase-Correct-PWM-Modus, TOP = 0x00FF

Phase-Correct-PWM-Modus, TOP = 0x01FF

Phase-Correct-PWM-Modus, TOP = 0x03FF

CTC-Modus, TOP = OCR1A

Fast-PWM-Modus, TOP = 0x00FF

Fast-PWM-Modus, TOP = 0x01FF

Fast-PWM-Modus, TOP = 0x03FF

Phase-and-Frequency-Correct-PWM, TOP = ICR1


Phase-and-Frequency-Correct-PWM, TOP =
OCR1A

Phase-Correct-PWM-Modus, TOP = ICR1

Phase-Correct-PWM-Modus, TOP = OCR1A

CTC-Modus, TOP = ICR1

Reserviert

Fast-PWM-Modus, TOP = ICR1

Fast-PWM-Modus, TOP = OCR1A

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

AS2 TCN2UB OCR2UB TCR2UB

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.

14.7.2.8Timer als Interruptquellen


Die Timer des ATmega32 knnen auch als Interruptquellen genutzt werden. Es knnen
mithilfe aller Timer Interrupts ausgelst werden, wenn ein Timer-berlauf aufgetreten
ist oder der Zhlwert des Timers den Vergleichswert erreicht hat. Zustzlich kann fr den
Timer 1 das Auftreten eines Input-Capture-Ereignisses als Interruptquelle genutzt werden. Die Freigabe der jeweiligen Interrupts geschieht durch Setzen des zugehrigen Bits
im Timer/Counter-Interrupt-Mask-Register (TIMSK).
Darber hinaus ermglichen die Timer das Abfragen des jeweiligen Interrupt-Status
durch das Timer/Counter-Interrupt-Flag-Register (TIFR). Mithilfe dieses Registers ist es
zum Beispiel mglich, das Auftreten einer der oben genannten Interruptbedingungen durch
die CPU anzufragen, ohne eine interruptbasierte Verarbeitung zu nutzen (Tab.14.22).
Die Bits OCIEx und OCFx sind den Vergleichsereignissen (Zhlerstand = Vergleichswert) und die Bits TOIEx und TOVx den berlaufereignissen zugeordnet, whrend die
Bits TICIE1 und ICF1 der Input Capture Unit des Timers 1 zugeordnet sind.
Die Anwendungsmglichkeiten der Timer-Interrupts sind sehr vielfltig. Ein sehr einfaches Beispiel ist die zyklische Erzeugung von Interrupts zur Unterbrechung des Hauptprogramms, um regelmig anfallende Aufgaben abzuarbeiten. Darber hinaus sind
regelmige Timer-Interrupts eine wesentliche Grundlage vieler Betriebssysteme.
Eine wichtige Bedeutung kommt der Timer-Interrupt-Programmierung auch bei
der Erzeugung von Ausgangssignalen zu. Hufig ist es erforderlich, die Parameter des

14.7 Eingebettete Peripheriekomponenten

481

Tab. 14.22Belegung der Register TIMSK und TIFR


TIMSK
Bit

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;
}
}
}
}

14.7 Eingebettete Peripheriekomponenten

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

WDP2 WDP1 WDP0

484

14Mikrocontroller

Tab.14.24Bedeutung der Bits WDP2, WDP1 und WDP0


WDP2

WDP1

WDP0

Zeit bis zum Erreichen des Zhlerstands 0


(circa)

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.

14.7.3 Schnittstellen fr die serielle Datenbertragung


Fast alle Mikrocontroller stellen eingebettete Peripheriekomponenten zur Verfgung, die
eine bitserielle Datenbertragung untersttzen. Der wesentliche Vorteil einer bitseriellen
bertragung im Gegensatz zu einer bitparallelen bertragung ist die Reduktion des Verdrahtungsaufwands zwischen Sender und Empfnger. Die Reduktion dieses Aufwands
Tab.14.25Belegung des Registers MCUCSR
MCUCSR
Bit

Name

JTD

ISC2

JTRF

WDRF

BORF

EXTRF

PORF

Tab.14.26Bedeutung der Bits im MCUCSR-Register


JTRF

Reset durch das JTAG-Programmier- und Debug-Interface

WDRF

Watchdog-Reset

BORF

Brownout-Detection-Reset
(Versorgungsspannung unterschreitet programmierten Wert)

EXTRF

Externer Reset-Anschluss wurde aktiviert

PORF

Versorgungsspannung wurde eingeschaltet


(Power-On-Reset)

14.7 Eingebettete Peripheriekomponenten

485

kann insbesondere bei einfachen, kostensensitiven Systemen einen wichtigen Aspekt


darstellen.
In den folgenden Abschnitten wird die Diskussion auf die in Mikrocontrollern hufig
anzutreffenden seriellen Schnittstellen beschrnkt. Zunchst wird jeweils das verwendete
bertragungsprotokoll vorgestellt und im Anschluss daran wird die spezifische Implementierung der Schnittstellen am Beispiel des ATmega32 nher erlutert.

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.

14.7.3.2Datenbertragung mit dem UART-Protokoll


Der Empfnger erhlt nur das vom Sender generierte Datensignal. Um allein aus der
Kenntnis des Datensignals die bertragenen Daten zu extrahieren knnen, muss der
Empfnger den Beginn einer Datenbertragung erkennen knnen. Der Beginn einer
Datenbertragung wird durch ein sogenanntes Startbit gekennzeichnet, welches den vordefinierten Wert 0 besitzt. Anschlieend erfolgt die bertragung einer zwischen Sender
und Empfnger vereinbarten Anzahl von Datenbits. Hierbei gilt die Vereinbarung, dass
zuerst das niederwertigste Bit (Least Significant Bit, LSB) bertragen wird. In der Regel
wird eine bertragung von 8 Datenbits ausgewhlt.

Tab.14.27Belegung der 9-poligen Sub-D-Steckverbindungen


Nr.

Krzel Name

Bedeutung

Datenrichtung

DCD

DCE erhlt einlaufende Daten

DCE DTE

Data Carrier Detect

RXD

Receive Data

Empfangsdaten (des DTE, z.B. PC)

TXD

Transmit Data

Sendedaten (des DTE, z.B. PC)

DTR

Data Terminal Ready

Einsatzbereitschaft des DTE

GND

Ground

Signalmasse

DSR

Data Set Ready

Einsatzbereitschaft des DCE

RTS

Ready To Send

CTS

Clear To Send

DCE kann Daten entgegennehmen

RI

Ring Indicator

Modem erkennt Anruf

DCE DTE

DTE DCE

DTE DCE
DCE DTE

DTE (z.B. PC) mchte Daten bertragen DTE DCE


DCE DTE

DCE DTE

14.7 Eingebettete Peripheriekomponenten

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.

14.7.3.3Handshake zwischen Sender und Empfnger


In vielen Anwendungsfllen kann davon ausgegangen werden, dass der Empfnger die
vom Sender empfangenen Daten stets verarbeiten kann. Dies ist zum Beispiel der Fall,

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

Abb.14.13Zeitdiagramm fr die bertragung eines Bytes


Tab.14.28In der Praxis
hufig verwendete Baudraten

Baudrate (in bit/s)

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.

14.7 Eingebettete Peripheriekomponenten

489

Dieser Nachteil kann durch das sogenannte Hardware-Handshake vermieden werden.


Hierfr knnen die beiden Signale RTS und CTS herangezogen werden. Ein DTE (zum
Beispiel ein PC) teilt einem DCE mit, dass es Daten senden mchte indem es die Leitung RTS aktiviert (RTS =0). Das DCE setzt daraufhin das Signal CTS auf 0 sobald es
fr den Datenempfang bereit ist. Fr das DTE wird bei Verwendung dieses Handshakes
angenommen, dass es jederzeit alle vom DCE gesendeten Daten korrekt verarbeiten
kann. Gegebenenfalls kann jedoch vom DTE das DTR-Signal deaktiviert werden um so
ein Senden von Daten zu unterbrechen.
In vielen Anwendungen wird der RTS-Anschluss als RTR-Signal (Ready To Receive)
verwendet. In diesem Fall zeigt eine logische 0 auf der RTS-Leitung an, dass das DTE
Daten empfangen kann. Das DCE signalisiert die Empfangsbereitschaft dagegen durch
das Aktivieren der CTS-Leitung (CTS =0).
Darber hinaus knnen auch die Signale DSR und DTR zur Realisierung eines Hardware-Handshakes verwendet werden, welche in hnlicher Weise wie die Signale RTR
und CTS angesteuert werden knnen.
Obwohl in vielen Mikrocontrollern eingebettete Peripheriekomponenten zur Datenbertragung mithilfe des RS232-Protokolls zur Verfgung stehen, werden von diesen
Komponenten hufig nur die Signale RXD und TXD bedient. Soll die Kommunikation
mithilfe eines Hardware-Handshakes erfolgen, ist hierfr die softwarebasierte Ansteuerung von zustzlichen Portanschlssen erforderlich. Das Hardware-Handshake wird in
diesem Fall also durch das Programm in Software implementiert.

14.7.3.4Der USART im AVR


Viele Mikrocontroller der AVR-Serie besitzen eine eingebettete Schnittstelle zur Realisierung einer asynchronen seriellen Kommunikation. Im Fall des ATmega32 wird
diese Peripheriekomponente als USART (Universal Synchronous Asynchronous
Receiver/Transmitter) bezeichnet. Diese Komponente untersttzt serielle bertragungen mit 5 bis 9 Datenbits und 1 oder 2 Stoppbits. Neben der Analyse des Parittsbits
existieren weitere Mglichkeiten zur Erkennung von bertragungsfehlern, die in diesem
Abschnitt beschrieben werden. Wie die Bezeichnung USART andeutet, kann diese Komponente sowohl in einem asynchronen als auch in einem synchronen Modus betrieben
werden. Im Folgenden wird nur auf den asynchronen Betriebsmodus nher eingegangen.
Der USART des ATmega32 stellt die beiden Signale TXD (Datenausgang) und RXD
(Dateneingang) zur Verfgung. Diese Signale werden an den Anschlssen PD0 und PD1
als alternative Portfunktionen herausgefhrt. Wird der USART durch das auf dem Controller laufende Programm aktiviert, stehen die Portanschlsse PD0 und PD1 nicht mehr
als frei programmierbare Portanschlsse zur Verfgung.
Fr die Konfiguration des USARTs werden drei USART-Control-and-Status-Register
(UCSRA, UCSRB, UCSRC) sowie zwei Bitratenregister (UBBRL, UBBRH) bereitgestellt
(s.Tab.14.29).
Mit Setzen der Bits TXEN (Transmitter Enable) beziehungsweise RXEN (Receiver
Enable) wird der Sender beziehungsweise Empfnger der seriellen Schnittstelle des
ATmega32 aktiviert.

490

14Mikrocontroller

Tab.14.29USART-Control- und Statusregister: UCSRA, UCSRB, UCSRC


UCSRA
Bit

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

14.7 Eingebettete Peripheriekomponenten

491

Tab.14.31Bedeutung der Bits der UCSR-Register


Bit

Name

Bedeutung

RXC

Receive Complete

1: Daten eines Frames empfangen

TXC

Transmit Complete

1: Daten eines Frames versendet

UDRE

Data Register Empty

1: Daten-Register (UDR) ist leer

FE

Frame Error

1: Ein empfangenes Stoppbit hatte den Wert 0

DOR

Data Overrun

1: Daten im UDR-Register wurden nicht


rechtzeitig gelesen worden und wurden von
neuen empfangenen Daten berschrieben

PE

Parity Error

1: Parittsfehler erkannt

U2X

Double Speed

1: Verdopplung der
bertragungsgeschwindigkeit

MPCM

Multiprocessor Communication Mode 1: Multiprocessor Modus aktiviert

RXCIE

Receive Complete
Interrupt Enable

Lokale Interruptfreigabe

TXCIE

Transmit Complete
Interrupt Enable

Lokale Interruptfreigabe

UDRIE

Data Register Empty


Interrupt Enable

Lokale Interruptfreigabe

URSEL

Register Select

0: Zugriff auf UBRRH; 1: Zugriff auf UCSRC

UMSEL Mode Select

0: asynchroner Modus, 1: synchroner Modus

UPM1/0 Parity Mode

00: keine Paritt; 10: Gerade Paritt; 11:


Ungerade Paritt

USBS

0: 1 Stoppbit; 1: 2 Stoppbits

Stop Bit Select

UCPOL Clock Polarity

Polaritt des Taktsignals im synchronen


Modus

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.

14.7.4.1Datenbertragung mit dem SPI-Protokoll


Das Protokoll arbeitet nach dem Master-Slave-Prinzip. Ein SPI-Master initiiert die
Datenbertragung und ist insbesondere fr die Erzeugung des Taktsignals verantwortlich. SPI-Slaves empfangen das Taktsignal die vom Master bermittelten Daten. Gleichzeitig werden Daten vom Slave an den Master bertragen.
Fr die Bezeichnung der Anschlsse eines SPI-Interfaces sind keine allgemeingltigen Namen spezifiziert. Die in der Praxis hufig verwendeten Anschlussbezeichnungen
sind in Tab.14.32 zusammengefasst.
Sowohl der Master als auch der Slave enthalten Schieberegister, in die die Daten bitse
riell eingeschrieben werden. Die bernahme eines Bits in diese Schieberegister erfolgt
mit der aktiven Taktflanke des Taktsignals SCK.
Hufig knnen auf der Seite des SPI-Masters die wesentlichen bertragungsparameter konfiguriert werden. Hierzu zhlen die Auswahl der aktiven Taktflanke (fallende
oder steigende Flanke), die Wortlnge der bertragung und die Auswahl, ob zuerst das
hchstwertigste Bit (MSB first) oder das niederwertigste Bit (LSB first) bertragen werden sollen.
Die Auswahl, welcher Slave an der Kommunikation teilnehmen soll, erfolgt durch
den Slave-Select-Anschluss (/SS) des Slaves. Wird dieser auf 0 gelegt, nimmt der Slave

14.7 Eingebettete Peripheriekomponenten

493

Tab.14.32Anschlussbezeichnungen eines SPI-Interfaces


Signalbezeichnungen

Bedeutung

Datenrichtung

MOSI, SDI, SIMO

Daten (Master Out, Slave In)

MISO, SDO, SOMI

Daten (Master In, Slave Out)

Master Slave

SCK, SCLK

Takt (Serial Clock)

/SS, /SSEL, /CS, /STE

Slaveauswahl (Slave Select)

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.14Struktur der SPI-Verbindung zwischen einem Master und einem Slave

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

14.7 Eingebettete Peripheriekomponenten

495

Abb.14.17 SPISternverbindung mit einem


Master und drei Slaves

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.

14.7.4.2SPI-Interface der AVR-Mikrocontroller


Die Mikrocontroller der AVR-Familie stellen ein SPI-Interface als eingebettete Peripheriekomponente zur Verfgung. Im Folgenden werden die Register der SPI-Schnittstelle
eines ATmega32 beschrieben. Der ATmega32 stellt die SPI-spezifischen Anschlsse als
alternative Portfunktionen an den Anschlssen PB4 (/SS), PB5 (MOSI), PB6 (MISO) und
PB7 (SCK) zur Verfgung. Die Schnittstelle kann sowohl im Master- als auch im SlaveModus betrieben werden.
Fr die Programmierung der SPI-Schnittstelle stehen ein Steuerregister (SPI Control
Register, SPCR), ein Statusregister (SPI Status Register, SPSR) und ein Datenregister
(SPI Data Register, SPDR) zur Verfgung.
Die Belegung des Steuerregisters SPCR ist in Tab.14.33 dargestellt. Das Register
dient der Konfiguration der SPI-Schnittstelle. Die Bedeutung der einzelnen Bits dieses
Registers ist in Tab.14.34 zusammengefasst.
Die im Master-Modus erzeugte Frequenz des SPI-Taktsignals wird aus den Bits
SPR1, SPR0 und SPI2X (Bit 0 im Register SPSR) gem Tab.14.35 aus dem Systemtakt
abgeleitet.

Tab.14.33Belegung des Registers SPCR


SPCR
Bit

Name

SPIE

SPE

DORD

MSTR

CPOL

CPHA

SPR1

SPR0

496

14Mikrocontroller

Tab.14.34Bedeutung der SPCR-Steuerregisterbits


Bit

Name

SPIE

SPI Interrupt Enable 1: Lokale Interruptfreigabe


Ein Interrupt wird jeweils nach der bertragung eines Bytes
ausgelst.

SPE

SPI Enable

Bedeutung

0: normale Portfunktion (SPI deaktiviert)/1: SPI-Schnittstelle


aktiviert

DORD Data Ordering

0: MSB first/1: LSB first

MSTR Master Mode

0: Betrieb als SPI-Slave/1: Betrieb als SPI-Master

CPOL

Ruhezustand des Taktes


(= Polaritt des Taktsignals, wenn keine bertragung stattfindet)

Clock Polarity

CPHA Clock Phase

Tab.14.35Festlegung der
SPI-Taktfrequenz mit den Bits
SPR1, SPR0 und SPI2X

Mit diesem Bit wird festgelegt, welche Taktflanke verwendet


wird:
0: Die erste Flanke nach Verlassen des Ruhezustands des Taktes
ist die aktive Taktflanke
1: Die zweite Flanke nach Verlassen des Ruhezustands des Taktes
ist die aktive Taktflanke

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.

14.7 Eingebettete Peripheriekomponenten

497

Tab.14.36Belegung des Registers SPSR


SPSR
Bit

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

14.7 Eingebettete Peripheriekomponenten

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

SDA darf modifiziert


werden

Abb.14.19Zeitlicher Verlauf einer I2C-bertragung

14Mikrocontroller
Startbedingung

Abb.14.21 Start- und


Stoppbedingung des I2CProtokolls

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.

Bausteinadresse (Master->Slave): 0x35

Lesen

Start

I2C-bertragung Teil I

Besttigung
vom Slave

14.7.5.2I2C-Interface der AVR-Mikrocontroller


Viele Mikrocontroller der AVR-Serie besitzen eine Hardware-Komponente, welche
die Datenbertragung nach dem I2C-Protokoll untersttzt. Im Folgenden wird auf die

SCL

Daten (Slave->Master): 0xA5

SCL

SDA
Abb.14.22Beispiel einer I2C-bertragung

Stop

I2C-bertragung Teil II
(Fortsetzung des oberen Diagramms)

Besttigung
vom Master

SDA

14.7 Eingebettete Peripheriekomponenten

501

Schnittstelle eines ATmega32-Controllers eingegangen. Der Hersteller Atmel bezeichnet


die I2C-Schnittstelle als Two-Wire-Interface, TWI.
Die I2C-Schnittstelle kann sowohl im Master- als auch im Slave-Betrieb arbeiten. Die
Bausteinadresse fr den Slavemodus kann durch eine entsprechende Programmierung
durch den Controller frei festgelegt werden. Der AVR untersttzt SCL-Taktfrequenzen
von bis zu 400kHz, was dem sogenannten Fast-Mode entspricht. Da viele I2C-Bausteine nur den Standard-Mode mit einer Taktfrequenz von 100kHz untersttzen, muss
vor der Inbetriebnahme eines I2C-Systems berprft werden, ob die gewhlte Taktfrequenz von allen Bausteinen des Systems untersttzt wird.
Die Programmierung des I2C-Interfaces eines AVR ist sehr bersichtlich, da diese
Hardwarekomponente lediglich 5 Register besitzt, die im Folgenden nher vorgestellt
werden.
Das TWI Control Register (TWCR) dient zur Steuerung der I2C-Hardwarekomponente. Mithilfe dieses Registers kann die Komponente ein- oder ausgeschaltet oder die
lokale Interruptfreigabe sowie einige bertragungsparameter konfiguriert werden. Das
TWI Status Register (TWSR) enthlt 5Bits, die als Statusinformation vom Programm
ausgewertet werden knnen. Auf dieses Weise ist es mglich, bertragungsfehler (zum
Beispiel Slave hat auf die bertragung einer Adresse nicht mit einer Besttigung geantwortet) im Programm zu erkennen. Das TWSR-Register enthlt darber hinaus zwei
Bits (TWPS1 und TWPS0), die zusammen mit dem Register TWBR (TWI Bitrate Register) die verwendete Taktfrequenz im Masterbetrieb festlegen. Hierbei wird I2C-Frequenz
aus der Systemtaktfrequenz fsys gem der nachfolgenden Formel abgeleitet:

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

Tab.14.37Belegung des Registers TWCR


TWCR
Bit

Name

TWINT

TWEA

TWSTA

TWSTO TWWC

TWEN

TWIE

502

14Mikrocontroller

Tab.14.38Bedeutung der einzelnen Bits des TWCR-Registers


Bit

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

TWINT TWI Interrupt Flag

TWEA

TWI Enable Acknowledge 1: Die Komponente generiert ein Besttigungssignal,


wenn Daten empfangen wurden oder falls (Slavemodus)
die eigene Bausteinadresse empfangen wurde

TWSTA TWI Start Condition

1: Startbedingung generieren

TWSTO TWI Stop Condition

1: Stoppbedingung generieren (Mastermodus), Rcksetzen des Interfaces (zur Fehlerbehandlung im Slavemodus)

TWWC

TWI Write Collision

1: Das Datenregister (TWDR) wurde beschrieben bevor


eine zuvor gestartete bertragung abgeschlossen wurde

TWEN

TWI Enable

1: Die I2C-Komponente ist aktiviert

TWIE

TWI Interrupt Enable

Lokale Interruptfreigabe

Tab.14.39Belegung des Registers TWSR


TWSR
Bit

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)

14.7 Eingebettete Peripheriekomponenten

503

Tab.14.40Statusinformationen fr den Masterbetrieb


Statusbits im Register Konstante in
TWSR
C-Bibliothek

Modus

Bedeutung

0x08

TW_START

Alle

START bertragen

0x10

TW_REP_START

Alle

Repeated START bertragen


(Startbed. ohne vorherige
Stoppbed.)

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

Ein anderer Master hat die


Kontrolle
der I2C-Leitungen bernommen

0x40

TW_MR_SLA_ACK

Master
Receiver

Adresse + Read bertragen,


Besttigung (ACK) empfangen

0x48

TW_MR_SLA_NACK

Master
Receiver

Adresse + Read bertragen,


keine Besttigung (NACK)
empfangen

0x50

TW_MR_DATA_ACK

Master
Receiver

Daten empfangen, Besttigung


(ACK) gesendet

0x58

TW_MR_DATA_NACK Master
Receiver

Daten empfangen, keine Besttigung NACK gesendet

{
// --- 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();//

Adresse nach TWDR


bertragung starten
Adr. gesendet?
Status prfen

// --- Daten --TWDR = twi_data;// Daten nach TWDR

504

14Mikrocontroller

TWCR = (1<<TWINT) | (1<<TWEN);// bertragung starten


while (!(TWCR & (1<<TWINT)));// Daten gesendet?
if (TWSR != TW_MT_DATA_ACK) TWI_ERR();// Status prfen
// --- Stoppbedingung --TWCR = (1<<TWINT)|(1<<TWEN)| (1<<TWSTO);// STOP senden
}
// Empfangen eines Bytes
#include <util/twi.h>// I2C-Header-Datei
unsigned char TWI_recbyte (unsigned char twi_addr)
{
unsigned char twi_data;
// --- 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_addr << 1) | TW_READ;//
TWCR = (1<<TWINT) | (1<<TWEN);//
while (!(TWCR & (1<<TWINT)));//
if (TWSR != TW_MR_SLA_ACK) TWI_ERR();//

Adresse nach TWDR


bertragung starten
Adr. gesendet?
Status prfen

// --- Daten --TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWEA);


while (!(TWCR & (1<<TWINT)));// Daten empf. ?
twi_data = TWDR;// Daten sichern
// --- Stoppbedingung --TWCR = (1<<TWINT)|(1<<TWEN)| (1<<TWSTO);// STOP senden
return twi_data;
}

14.7.6 Analoge Peripheriekomponenten


Neben digitalen Ein-/Ausgabekomponenten stellen Mikrocontroller vielfach auch
analoge Komponenten zur Verfgung. Der im Rahmen dieses Kapitels exemplarisch
betrachtete Mikrocontroller ATmega32 verfgt ber einen A/D-Umsetzer und einen Analog-Komparator. Im Folgenden werden diese Komponenten nher vorgestellt.

14.7 Eingebettete Peripheriekomponenten

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

Register: ADCSRA, ADMUX

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

Abb.14.23Struktur des A/D-Umsetzers

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 =

(Upos Uneg ) V 512


Uref

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

Tab.14.42Auswahl der Referenzspannung mit den Bits REFS1 und REFS0


REFS1

REFS0

Referenzspannung Uref

Anschluss AREF

Anschluss AVCC

reserviert

Interne 2.56V Referenzspannung (Kapazitt an AREF empfohlen)

14.7 Eingebettete Peripheriekomponenten

507

Tab.14.43Bedeutung der Bits des ADMUX-Registers


ADCH (ADLAR =0)
Bit

Name

ADC9

ADC8

ADCL (ADLAR =0)


Bit

Name

ADC7

ADC6

ADC5

ADC4

ADC3

ADC2

ADC1

ADC0

ADCH (ADLAR =1)


Bit

Name

ADC9

ADC8

ADC7

ADC6

ADC5

ADC4

ADC3

ADC2

ADCL (ADLAR =1)


Bit

Name

ADC1

ADC0

Tab.14.44Auswahl der Eingangsmultiplexer in Abhngigkeit von MUX0 bis MUX4


MUX3

MUX2 MUX1 MUX0 Analogeingang (MUX4=0) Analogeingang (MUX4 =1)


0

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

Interne Spannung (1,22V)

(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

Tab.14.45Belegung des Registers ADSCRA


ADSCRA
Bit

Name

ADEN

ADSC

ADATE

ADIF

ADIE

ADPS2

ADPS1

ADPS0

Tab.14.46Bedeutung der Bits des Registers ADSCRA


Bit

Name

Bedeutung

ADEN

ADC Enable

Ein-/Ausschalten des A/D-Umsetzers (0: aus, 1: ein)

ADSC

ADC Start Conversion

1: Start einer A/D-Umsetzung


Dieses Bit muss auch im Free-Running-Mode (automatisch wiederholte Messungen) zum Start der ersten
Wandlung gesetzt werden.

ADATE ADC Auto Trigger Enable 0: Start der A/D-Umsetzungen durch SW


1: Kontinuierliche A/D-Umsetzung
ADIF

ADC Interrupt Flag

1: A/D-Umsetzung abgeschlossen
(Lschen des Bits durch Schreiben einer 1)

ADIE

ADC Interrupt Enable

1: Lokale Interruptfreigabe. Auslsen einer Unterbrechung


nach Abschlieen der A/D-Umsetzung

ADPS

ADC Prescaler Selection

Auswahl des Taktes des A/D-Umsetzers

Tab.14.47Einstellung der ADC-Taktfrequenz durch Teilung der Systemfrequenz


ADPS2

ADPS1

ADPS0

ADC-Taktfrequenz

fsys /2

fsys /2

fsys /4

fsys /8

fsys /16

fsys /32

fsys /64

fsys /128

Tab.14.48Belegung des Registers TWSR


SFIOR
Bit

Name

ADTS2

ADTS1

ADTS0

ACME

PUD

PSR2

PSR10

14.7 Eingebettete Peripheriekomponenten

509

Tab.14.49Auswahl der Triggerquelle zum Start der A/D-Umsetzung


ADTS2 ADTS1 ADTS0 Trigger-Quelle zum Start einer A/D-Umsetzung
0

Free Running Mode: A/D-Umsetzung wird automatisch nach dem


Beenden der vorangegangenen Umsetzung gestartet

Analog-Komparator

Externer Interrupt (Anschluss INT0)

Timer0: Zhler des Timers = Vergleichswert (Compare Match)

Timer0: Zhlerberlauf (Timer Overflow)

Timer1: Zhler des Timers = Vergleichswert B (Compare Match B)

Timer1: Zhlerberlauf (Timer Overflow)

Timer1: Ereignis der Input-Capture-Unit (Capture Event)

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

// Start der Umsetzung per Software


ADCSRA |= (1<<ADSC);
// Auf Ende der Umsetzung warten
while (ADCSRA & (1<<ADSC)) _delay_us(1);
// Ergebnis lesen
adc = ADCL;
adc |= (ADCH<<8);
return adc;
}

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

Tab.14.50Belegung des Registers ACSR


ACSR
Bit

Name

ACD

ACBG

ACO

ACI

ACIE

ACIC

ACIS1

ACIS0

14.7 Eingebettete Peripheriekomponenten

511

Tab.14.51Signalauswahl am Komparatoreingang
Bit

Name

Bedeutung

ACD

Analog Comparator Disable

Ein-/Ausschalten des Komparators (0: ein, 1: aus)

ACBG Analog Comparator Bandgap Select Auswahl des Signals am positiven


Komparator-Eingang
0: Anschluss AIN0
1: Intern erzeugte Referenzspannung (typ. 1,23 V)
ACO

Analog Comparator Output

Aktueller Status des Komparatorausgangs


(zur Abfrage durch die CPU)

ACI

Analog Comparator
Interrupt Flag

1: Ereignis (entspr. der ACIS-Bits) ist aufgetreten


und es wird ein Interrupt ausgelst, sofern der ACInterrupt freigegeben ist

ACIE

Analog Comparator
Interrupt Enable

1: Lokale Interruptfreigabe

ACIC

Analog Comparator
Input Capture Enable

1: Ereignis des Analog-Komparators lst CaptureEvent in Timer1 aus.

ACIS

Analog Comparator
Interrupt Mode Select

00: Interrupt bei Wechsel des Ausgangs ACO


01: reserviert
10: Interrupt bei fallender Flanke des Ausgangs
ACO
11: Interrupt bei steigender Flanke des Ausgangs
ACO

14.7.7 Interrupt-basierte Kommunikation mit


Peripheriekomponenten
Die Kommunikation zwischen CPU und eingebetteten Peripheriekomponenten kann
Polling-basiert erfolgen. Beispiele hierzu wurden in den vorangegangenen Abschnitten
fr einzelne Peripheriekomponenten eines AVR-Mikrocontrollers dargestellt. Polling
stellt die einfachste Mglichkeit dar, mit einer eingebetteten Komponente zu kommunizieren und besitzt den Vorteil, dass der Programmcode meist relativ gut nachvollziehbar
ist, da er streng sequenziell ausgefhrt wird. Mit Polling ist jedoch der Nachteil verbunden, dass ein signifikanter Anteil der verfgbaren Rechenleistung fr Warteschleifen zur
Abfrage von Peripheriekomponenten aufgebracht werden muss. Darber hinaus muss bei
Verwendung von Polling sichergestellt sein, dass die Komponenten ausreichend hufig
abgefragt werden, da andernfalls Ereignisse (zum Beispiel der Empfang von Daten) verpasst werden knnten. Fr sehr einfache Anwendungen kann Polling durchaus ein sinnvoller Ansatz zur Realisierung einer Anwendung auf einem Mikrocontroller sein. Fr
komplexere Anwendungen ist er meist nicht zu empfehlen, da entweder die rechtzeitige
Abfrage aller Peripheriekomponenten nicht gewhrleistet werden kann oder auch der
Verbrauch der Rechenleistung fr Warteschleifen zur Abfrage der Peripheriekomponenten nicht toleriert werden kann.

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

14.7 Eingebettete Peripheriekomponenten

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
}
}

14.7.7.1Interruptverarbeitung und atomare Operationen


Nun soll das System zur Temperaturberwachung zunchst so erweitert werden, dass
der Benutzer ber eine entsprechende Schnittstelle den Schwellwert zur Auslsung
eines Alarms einstellen kann. Zur Bedienung der Schnittstelle wird dem Programm die
Funktion UIF() hinzugefgt. Diese Funktion knnte zum Beispiel mithilfe einer Tastatur
und eines Displays mit dem Benutzer kommunizieren und den jeweils aktuell gewhlten Schwellwert als Rckgabewert liefern. Die Implementierung dieser Funktion ist hier
irrelevant und wird nicht nher betrachtet. Da die Benutzereingabe durch die Bedienung
der Tastatur jedoch einige Zeit bentigt, muss bercksichtigt werden, dass die Ausfhrungszeit der Funktion nicht exakt bestimmbar ist und mehrere 100ms oder auch mehrere Sekunden betragen kann. Ein erweitertes Programm, welches einen einstellbaren
Alarmwert untersttzt, kann wie folgt realisiert werden.
// Temperaturberwachung mit einstellbarem Alarmwert
#include <avr/io.h>
#include <avr/interrupt.h>
volatile unsigned char Schwelle;
void InitSystem() {
// Programmcode wie oben angegeben
}
unsigned char UIF() {
// User-Interface, die genaue Implementierung ist irrelevant
}
ISR(INT0_vect) {
// PB0 = 1 falls Alarmschwelle berschritten
if (PINA > Schwelle) PORTB |= (1<<PB0);
}

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();

14.7 Eingebettete Peripheriekomponenten

515

nher betrachtet werden.


Der Aufruf des Unterprogramms und die Zuweisung an die globale Variable Schwelle
wrde vom Compiler in den folgenden Assemblercode umgesetzt werden:
call0x92; Aufruf von UIF, Rckgabewert in r24 und r25
sts0x61, r25; Zuweisung des hherwertigen Bytes
sts0x60, r24; Zuweisung des niederwertigen Bytes

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.

14.7 Eingebettete Peripheriekomponenten

517

14.7.7.2FIFO-basierte Kommunikation mit Peripheriekomponenten


In vielen Fllen ist es wnschenswert, die Kommunikation mit einer Peripheriekomponente nicht byteweise auszufhren, sondern zunchst eine Zwischenspeicherung vorzunehmen. Da die Reihenfolge der Daten durch den Speicher nicht verndert werden soll,
bietet sich die Implementierung eines First-In-First-Out-Speichers (FIFO) an. Eine mgliche FIFO-Realisierung ist im Folgenden dargestellt.
Die im Folgenden dargestellte Implementierung eines FIFOs verwendet zur Speicherung der Daten einen Bereich im SRAM des Controllers. Der Speicherbereich wird mithilfe der C-Bibliotheksfunktion malloc() reserviert. Zur Adressierung der Daten werden
zwei Zeiger verwendet. Ein Schreibzeiger (wp) dient zur Adressierung der Daten, die in
den FIFO-Speicher geschrieben werden. Ein Lesezeiger (rp) adressiert die Daten, die bei
einem Lesezugriff auf das FIFO ausgeben werden. Die zur Verwaltung des FIFOs bentigten Daten (Schreibzeiger, Lesezeiger, Gre des FIFOs sowie ein Zeiger auf den im
SRAM allokierten Speicherbereich) werden in einer Datenstruktur abgelegt.
Der allokierte Speicherbereich mit der Gre N Bytes wird als Ringspeicher genutzt.
Fr die Adressierung des Speichers bieten sich verschiedene Varianten an.
Bei der im Folgenden verwendeten Variante durchlaufen der Lese- und der Schreibzeiger einen Wertebereich von 0 bis 2N1. Das FIFO ist leer, wenn die Werte des
Schreib- und des Lesezeigers identisch sind. Dagegen ist das FIFO voll, wenn die Differenz zwischen Schreib- und Lesezeiger genau N betrgt. Ein gesondertes Mitfhren der
Voll/Leer-Information oder des FIFO-Fllstandes ist bei dieser Variante nicht erforderlich. Werden die Zeiger als Bytevariablen ausgelegt, kann die atomare Ausfhrung
des Codes sichergestellt werden, ohne dass Interrupts kurzzeitig gesperrt werden mssten. Der Nachteil dieses Ansatzes ist jedoch, dass die beiden Zeiger nur dann direkt zur
Adressierung des Speichers verwendet werden, wenn ihre Werte kleiner als N1 sind.
Andernfalls muss vor der Adressierung vom Wert des Zeigers N subtrahiert werden.
Abb.14.26 zeigt verschiedene Beispiele fr mgliche Zustnde der gewhlten FIFOImplementierung. Es ist jeweils der Fllstand (= Anzahl gltiger Werte im FIFO) sowie
der Wert des Schreibzeigers und des Lesezeigers angegeben.
Die FIFO-Implementierung stellt verschiedene C-Funktionen zur Verfgung. Die Funktion FIFO_Init() allokiert Speicher fr den Pufferspeicher zur Aufnahme der zu speichernden Daten und die Parameter des FIFOs (Schreibzeiger, Lesezeiger, FIFO-Gre und
einen Zeiger auf den Pufferspeicher). Der Rckgabewert dieser Funktion ist ein Zeiger auf
die angelegte Datenstruktur zur Verwaltung des FIFOs, die fr die folgenden Funktionen
als Parameter verwendet wird. Da die Allokation des Speichers dynamisch erfolgt, kann
es vorkommen, dass der bentigte Speicherbereich zur Laufzeit des Programms nicht zur
Verfgung steht. In diesem Fall ist der Rckgabewert der Funktion NULL.
Mithilfe der Funktionen FIFO_Read() beziehungsweise FIFO_Write() knnen Daten
aus dem FIFO-Speicher gelesen beziehungsweise in das FIFO geschrieben werden. Diese
Funktionen sind nicht blockierend (non-blocking). Dies bedeutet, dass beispielsweise
der Aufruf der Funktion FIFO_Write() auch bei einem vollen FIFO nicht wartet, bis ein
Eintrag im FIFO frei wird. In diesem Fall wird die Funktion mit dem Rckgabewert 0

518

14Mikrocontroller
Fllstand = 0

Fllstand = 1

Fllstand = 2

Fllstand = 1

Fllstand = 3

Fllstand = 4

Fllstand = 0

Initialzustand

Fllstand = 0
(leer)

(voll)

(leer)

Abb.14.26Beispiele fr Zustnde der FIFO-Implementierung am Beispiel eines FIFOs mit 4


Eintrgen

verlassen, um dem aufrufenden Programmteil anzuzeigen, dass der Schreibvorgang nicht


erfolgreich ausgefhrt wurde. Das aufrufende Programm kann mithilfe dieser Information
entscheiden, ob die Fortsetzung des Programms sinnvoll ist oder gegebenenfalls in einer
Warteschleife auf das Freiwerden eines Eintrages im FIFO warten und den Schreibvorgang erneut anstoen. Entsprechendes gilt fr die Funktion FIFO_Read(). Die Funktion
FIFO_Free() gibt den mit FIFO_Init() belegten Speicherbereich wieder frei.
Der folgende Code zeigt eine mgliche FIFO-Implementierung in der Programmiersprache C.
// ************************************************************
// File:fifo.h
// ************************************************************
#ifndef __FIFO_H__
#define __FIFO_H__
#include <stdlib.h>
// FIFO Struktur zur Aufnahme der FIFO-Parameter
typedef volatile struct {
unsigned char size;// FIFO Gre
unsigned char rp;// Lesezeiger
unsigned char wp;// Schreibzeiger
unsigned char *buffer; // Zeiger auf Pufferspeicher
} TS_Fifo;
// FIFO Initialisierung (Speicher wird mittels malloc allokiert)
extern TS_Fifo* FIFO_Init(unsigned char log2size);
// FIFO Speicher freigeben

14.7 Eingebettete Peripheriekomponenten

519

extern void FIFO_Free(TS_Fifo *fifo);


// Wert aus FIFO lesen
extern unsigned char FIFO_Read(TS_Fifo *fifo, unsigned char* value);
// Wert in FIFO schreiben
extern unsigned char FIFO_Write(TS_Fifo *fifo, unsigned char value);
#endif
// ************************************************************
// File:fifo.c
// ************************************************************
#include "fifo.h"
TS_Fifo* FIFO_Init(unsigned char size)
{
TS_Fifo *fifo;
if (size>127) return NULL;
fifo = malloc(sizeof(TS_Fifo));
if (fifo==NULL) return NULL;
fifo->buffer = malloc(size);
if (fifo->buffer==NULL) {
free((void*)fifo);
return NULL;
}
fifo->size = size;
fifo->rp = 0;
fifo->wp = 0;
return (fifo);
}
void FIFO_Free(TS_Fifo *fifo)
{
free((void*)fifo->buffer);
free((void*)fifo);
}
unsigned char FIFO_Read(TS_Fifo *fifo, unsigned char *value)
{
unsigned char wp_tmp;
unsigned char rp_tmp;
unsigned char rp_adr;
wp_tmp = fifo->wp;
rp_tmp = fifo->rp;
rp_adr = (rp_tmp>=fifo->size)? rp_tmp-fifo->size:rp_tmp;
if (wp_tmp==rp_tmp) {// FIFO leer ?
return 0;
} else {
*value = fifo->buffer[rp_adr]; // Wert holen
rp_tmp++;// Lesezeiger erhhen

520

14Mikrocontroller

// Bei berlauf rp auf 0 setzen


if (rp_tmp==2*fifo->size) rp_tmp = 0;
fifo->rp = rp_tmp;// atomare Zuweisung
return 1;
}
}
unsigned char FIFO_Write(TS_Fifo *fifo, unsigned char value)
{
unsigned char wp_tmp;
unsigned char rp_tmp;
unsigned char wp_adr;
unsigned char rp_adr;
wp_tmp = fifo->wp;
rp_tmp = fifo->rp;
wp_adr = (wp_tmp>=fifo->size)?wp_tmp-fifo->size:wp_tmp;
rp_adr = (rp_tmp>=fifo->size)?rp_tmp-fifo->size:rp_tmp;
if (wp_adr==rp_adr && wp_tmp!=rp_tmp) {
// FIFO ist voll
return 0;
} else {
// Wert in FIFO eintragen
fifo->buffer[wp_adr] = value; // Wert schreiben
wp_tmp++;// Schreibzeiger erhhen
// Bei berlauf wp auf 0 setzen
if (wp_tmp==2*fifo->size) wp_tmp = 0;
fifo->wp = wp_tmp;// atomare Zuweisung
return 1;
}
}

Die FIFO-Funktionen knnen fr die Kommunikation mit Peripheriekomponenten


verwendet werden. Der nachfolgende Code verwendet FIFO-Speicher fr die Kommunikation ber den USART. Es werden zwei FIFOs angelegt. Ein FIFO nimmt die empfangenen Daten in einer Interrupt-Service-Routine auf und legt diese in einem Empfangs-FIFO
(rx_fifo) ab. Die empfangenen Daten werden mithilfe der Funktion UART_GetFifo() an
das Hauptprogramm bergeben. Fr das Senden von Daten wird ein weiteres FIFO (tx_
fifo) verwendet. Das Hauptprogramm legt Daten durch Aufruf der Funktion UART_PutFifo() in diesem Sende-FIFO ab. Mithilfe einer ISR werden die Daten aus diesem FIFO
ausgelesen und an die eingebettete serielle Schnittstelle des Mikrocontrollers bergeben.
// ************************************************************
// File:uart_fifo.h
// ************************************************************
#ifndef __UART_H__
#define __UART_H__

14.7 Eingebettete Peripheriekomponenten


#include <avr/io.h>
#include <avr/interrupt.h>
#include "fifo.h"
// Interruptbasierter Transfer mit FIFOs
extern unsigned char UART_InitFIFOTransfer (unsigned long baudrate,
unsigned char rx_size, unsigned char tx_size);
// Zeichen aus RX FIFO abholen
// Rckgabewert ist 0 falls kein Zeichen verfgbar, sonst 1
extern unsigned char UART_GetFifo(unsigned char *data);
// Zeichen in TX FIFO schreiben
// Rckgabewert ist 0 falls Schreibpuffer voll, sonst 1
extern unsigned char UART_PutFifo(unsigned char data);
#endif
// ************************************************************
// File:uart_fifo.c
// ************************************************************
#include "uart_fifo.h"
static volatile TS_Fifo *rx_fifo;
static volatile TS_Fifo *tx_fifo;
// Initialisierung des UARTs und der FIFOs
unsigned char UART_InitFIFOTransfer (unsigned long baudrate,
unsigned char rx_size,unsigned char tx_size)
{
unsigned long bdrate;
// Uebertragungsrate setzen
bdrate = (F_CPU+baudrate*8)/(baudrate*16)-1;
UBRRH = (bdrate>>8)&0xFF;
UBRRL = bdrate&0xFF;
//Uebertragungsformat: 8 data bits, no parity, 1 stop bit
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
// FIFOs initialisieren
rx_fifo = FIFO_Init(rx_size);
if (rx_fifo == NULL) return 0;
tx_fifo = FIFO_Init(tx_size);
if (tx_fifo == NULL) return 0;
// UART einschalten
UCSRB = (1<<RXEN)|(1<<TXEN);
// Lokale Interruptfreigabe
UCSRB |= (1<<RXCIE)|(1<<TXCIE);
return 1;
}
// Wert in Sende-FIFO schreiben (Aufruf durch Hauptprogramm)
unsigned char UART_PutFifo(unsigned char data)

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);
}

Ein einfaches Anwendungsbeispiel fr die oben dargestellten Funktionen stellt das


nachfolgende Hauptprogramm dar. Das Programm liest empfangene Daten ein und gibt
diese ber den USART unverndert wieder aus.
// ************************************************************
// File:UartFifoDemo.c
// ************************************************************
#include "uart_fifo.h"
int main ()
{
unsigned char data;

14.8 Hinweise zum praktischen Selbststudium

523

if (UART_InitFIFOTransfer(9600,16,16)) {
sei();
while (1) {
if (UART_GetFifo(&data)) UART_PutFifo(data);
}
}
}

14.8 Hinweise zum praktischen Selbststudium


In den vorangegangenen Abschnitten wurden die Grundlagen der Mikrorechnertechnik
am Beispiel der AVR-Mikrocontroller-Familie behandelt. Die AVR-Controller zeichnen
sich durch eine relativ einfache Struktur aus und sind fr einen Einstieg in die Mikrorechnertechnik gut geeignet. Um das Verstndnis der vorgestellten Themen zu vertiefen,
ist es sehr empfehlenswert, eigene praktische Experimente mit Mikrocontrollern durchzufhren. Dieser Abschnitt soll einer ersten Orientierung dienen und so den Einstieg in
das praktische Selbststudium erleichtern.

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 Programmierung und Debugging von AVR-Mikrocontrollern


Die bertragung von Programmen in den Flashspeicher eines AVR-Mikrocontrollers
kann ber die SPI-Schnittstelle des Controllers erfolgen. Ebenso knnen ber diesen
Weg auch Daten im eingebetteten EEPROM abgelegt werden. Fr die Programmierung
muss der Controller nicht aus der Zielapplikation entfernt werden. Daher wird dieser
Vorgang als In-System-Programming (ISP) bezeichnet. Da das Protokoll zur Programmierung des Controllers offengelegt ist, sind verschiedene Programmiergerte erhltlich,
die eine Programmierung von AVR-Controllern untersttzen. Ein wesentlicher Nachteil
des ISP-Verfahrens ist es, dass es nur zur Programmierung, nicht jedoch zum Debugging
des Controllers verwendet werden kann.
Im Gegensatz zu ISP existieren fr die AVR-Controller verschiedene Anstze um
ein Programm auch innerhalb des Systems zu debuggen. Hierbei knnen zum Beispiel
Breakpoints gesetzt oder Variablenwerte ausgelesen werden, auch wenn sich der Mikrocontroller im Zielsystem befindet. Dieser als On-Chip-Debugging (OCD) oder In-CircuitEmulation (ICE) bezeichnete Ansatz vereinfacht die Fehlersuche erheblich. Daher ist es
auch fr Einsteiger sinnvoll ein Programmiergert anzuschaffen, welches das Debuggen
im Zielsystem untersttzt. Hierbei ist jedoch darauf zu achten, dass nicht alle AVR-Controller den gleichen Ansatz verfolgen. Viele Controller der ATtiny-Serie untersttzen ein
Verfahren, das von der Firma Atmel als Debug-Wire bezeichnet wird. Bei diesem Verfahren muss (abgesehen von der Versorgungsspannung des Mikrocontrollers) lediglich die
Resetleitung des Controllers mit dem Programmiergert verbunden werden, was insbesondere fr Controller mit einer geringen Anzahl von Anschlssen von Vorteil ist. Viele
Controller der ATmega-Serie untersttzen dagegen ein Debuggen mittels eines JTAGInterfaces. In diesem Fall mssen neben dem Reset-Anschluss auch die Anschlsse TDO,
TDI, TMS und TCK mit dem Programmieradapter verbunden werden. Diese Anschlsse
stehen dann nicht mehr uneingeschrnkt als Portanschlsse fr die Zielapplikation zur
Verfgung. Darber hinaus kommt insbesondere bei den Mikrocontrollern der XmegaSerie eine als Program and Debug Interface (PDI) Schnittstelle zum Einsatz.

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

14.8 Hinweise zum praktischen Selbststudium

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?

Lsungen der bungsaufgaben

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

Springer-Verlag GmbH Deutschland 2016


W. Gehrke et al., Digitaltechnik, Springer-Lehrbuch,
DOI10.1007/978-3-662-49731-9_15

529

530

15 Lsungen der bungsaufgaben

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

15 Lsungen der bungsaufgaben

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;

:
:
:
:

instd_logic_vector (7 downto 0);


ininteger;
instd_logic;
out std_logic_vector (7 downto 0) );

architecture behave of my_module is


signal tmp : unsigned (7 downto 0);
begin
process
variable vi : unsigned (7 downto 0);
begin
tmp <= unsigned(A);
vi:= to_unsigned(B,8);
if (c = '1') then
q <= std_logic_vector(vi - tmp);
else
q <= std_logic_vector(vi + tmp);
end if;
end process;
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;

15 Lsungen der bungsaufgaben

(7
(7
(1
(7

downto
downto
downto
downto

0);
0);
0);
0) );

architecture behave of my_module is


begin
process (a,b,c)
begin
ifc="00" then q <= a;
elsif c="01" then q <= a and b;
elsif c="10" then q <= a or b;
elsif c="11" then q <= a xor b;
-- std_logic! => c kann mehr als 4 Werte annehmen
-- dies wird ber das nachfolgende else abgefangen
elseq <= (others=>'X');
end if;
end process;
end;

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);

15 Lsungen der bungsaufgaben

533

q : out std_logic_vector (15 downto 0) );


end;
architecture behave of my_module_16 is
begin
my_module_inst1 : entity work.my_module
port map (
a => a(7 downto 0),
b => b(7 downto 0),
c => c,
q => q(7 downto 0) );
my_module_inst2 : entity work.my_module
port map (
a => a(15 downto 8),
b => b(15 downto 8),
c => c,
q => q(15 downto 8) );
end;

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

15 Lsungen der bungsaufgaben

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(2) & A(0) A(3) & A(1)


Aufgabe 4.6
Alle Produktterme aus Abb.15.2 sind erforderlich. Die Funktion fr die Ausgangsvariable lautet:

Y = A(2) A(3) & A(1) & A(0) A(1) & A(0)


Aufgabe 4.7
Produktterme 1 und 3 aus Abb.15.3 sind erforderlich. Die Funktion fr die Ausgangsvariable lautet:

Y = A(2) & A(0) A(3)


Aufgabe 4.8
Alle Produktterme aus Abb.15.4 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)

15 Lsungen der bungsaufgaben


Abb.15.1 KarnaughDiagramm zu Aufgabe 4.5

Abb.15.2 KarnaughDiagramm zu Aufgabe 4.6

Abb.15.3 KarnaughDiagramm zu Aufgabe 4.7

Abb.15.4 KarnaughDiagramm zu Aufgabe 4.8

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

15 Lsungen der bungsaufgaben

a) Periodendauer T=100ns, Taktfrequenz f=10MHz, Duty-Cycle D=80%


b) Periodendauer T=1ms, Taktfrequenz f=1kHz, Duty-Cycle D=70%
c) Periodendauer T=0,5ms=500s, Taktfrequenz f=2kHz, Duty-Cycle D=40%
Aufgabe 5.8
Das Codewort muss 4 Stellen fr 11 Zustnde besitzen. Die Berechnung kann ber den
Zweierlogarithmus von 11 erfolgen, der aufgerundet 4 ergibt.

ld11 = log 11/ log 2 = 1,041/0,301 = 3,46


Als alternativer Rechenweg knnen die Zweierpotenzen betrachtet werden. Mit 3
Stellen sind 23, also 8 Kombinationen mglich. Dies reicht nicht aus. 4 Stellen sind ausreichend, denn Sie ergeben 24, also 16 Kombinationen.
Aufgabe 5.9
Das Codewort muss 9 Stellen besitzen, denn die One-Hot-Codierung bentigt fr jeden
der 9 Zustnde eine Stelle.
Aufgabe 5.10
Mit 5 Stellen sind 25, also 32 unterschiedliche Codierungen mglich.
Aufgabe 5.11
Es knnen 8 Zustnde codiert werden, also genau so viele wie Stellen in der One-HotCodierung vorhanden sind.
Aufgabe 5.12
Der Automat bentigt vier Zustnde mit den folgenden Bedeutungen:



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.

Zustandsfolgediagramm und Zustandsfolgetabelle sind in Abb.15.5 und 15.6 dargestellt.

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

Abb.15.5Zustandsfolgediagramm des Automaten Jalousie

537

15 Lsungen der bungsaufgaben


sn

sn+1

T=0 T=1
S0 *
S0
S1
S2
S2
S2
S3
S0
* = Reset

00
01
00
10

S1
S1
S3
S3

Abb.15.6Zustandsfolgetabelle des Automaten Jalousie

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.





C_0: 0 Cent eingeworfen (Startzustand)


C_10: 10 Cent eingeworfen
C_20: 20 Cent eingeworfen
C_30: 30 Cent eingeworfen
C_40: 40 Cent eingeworfen
C_50: 50 Cent oder mehr eingeworfen, Parkmnze wird ausgegeben

Der Startzustand war nicht ausdrcklich in der Aufgabenstellung angegeben, sondern


ergibt sich durch berlegung.
Zustandsfolgediagramm und Zustandsfolgetabelle sind in Abb.15.7 und 15.8 dargestellt. Die beiden Eingnge werden in der kompakten Form M(1:0) angegeben. Da der
Eingang zwei Signale mit vier Kombinationsmglichkeiten hat, sind fr jeden Zustand
vier Folgezustnde mglich. In manchen Fllen sind einige dieser Folgezustnde gleich.

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

Abb.15.7Zustandsfolgediagramm des Automaten Parkmnze

C_50
P=1
00

11

XX

538

15 Lsungen der bungsaufgaben


sn

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

Abb.15.8Zustandsfolgetabelle des Automaten Parkmnze

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

Abb.15.9Zustandsfolgediagramm des Automaten Halbieren


sn

sn+1

X=0 X=1
S0 *
S0
S1
S1
S2
S0
* = Reset

S1
S2
S1

0
0
1

Abb.15.10Zustandsfolgetabelle des Automaten Halbieren

15 Lsungen der bungsaufgaben

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

Abb.15.11Zustandsfolgediagramm des Automaten Parity

3_U

1/0
0/1
0/0
1/1

540

15 Lsungen der bungsaufgaben


sn

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

Abb.15.12Zustandsfolgetabelle des Automaten Parity

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:



Flip-Flop Takt nach Ausgang: 0,2ns


4 Volladdierer: 40,3ns=1,2ns
5 Verbindungsleitungen: 50,1ns=0,5ns
Flip-Flop Setup-Zeit: 0,2ns

541

15 Lsungen der bungsaufgaben


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

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

Abb.15.13Ripple-Carry-Adder mit Pipeline-Stufe

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

15 Lsungen der bungsaufgaben

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

Verhalten der Transistorschaltung


Dieses Verhalten entspricht der NOR-Funktion.
Kapitel11
Aufgabe 11.1 d
Aufgabe 11.2 e

15 Lsungen der bungsaufgaben

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

Q = Umax /2n = 3 V/1024 = 2,93 mV

15 Lsungen der bungsaufgaben

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)

Abb.15.14Speichermodul als Primzahl-Detektor

b) Hchster codierbarer Spannungswert





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.

15 Lsungen der bungsaufgaben

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

74, 5 Q = 0,2183 V Ux 0,2212 V = 75,5 Q


Aufgabe 12.4
a) Quantisierungsintervallbreite

Q = Umax /2n = 2 V/256 = 7,8125 mV


b) Schrittweiser Vergleich mit jeweils halber Spannung, beginnend bei 2n1Q=1V







0,7V1V? Nicht erfllt, also b7=0


0,7V0,5V? Erfllt, also b6=1 und Reduktion der Spannung um 0,5V auf 0,2V
0,2V0,25V? Nicht erfllt, also b5=0
0,2V0,125V? Erfllt, also b4=1 und Reduktion der Spannung um 0,125V auf
0,075V
0,075V0,0625V? Erfllt, also b3=1 und Reduktion der Spannung um
0,0625V auf 0,0125V
0,0125V0,03125V? Nicht erfllt, also b2=0
0,0125V0,015625V? Nicht erfllt, also b1=0
0,0125V0,0078125V? Erfllt, also b0=1 (letzter Schritt)

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]

15 Lsungen der bungsaufgaben


1

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

Udiff [in 0,2


V]

0,8 1,2

0,8 1,2

Uint [in 0,2


V]

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

Sigma-Delta-Umsetzer mit Messbereich von 1V und Analogeingang Ux=0,2V.


Die Pulsfolge enthlt zu 40% den Wert 1. Dieser Anteil bezieht sich auf den Messbereich von 1V und entspricht

Ux = 1 V + 0,4 2 V = - 1 V + 0,8 V = - 0,2 V


Aufgabe 12.6
Im Zeitverlauf ist die Dauer des High-Pegels 8ms bei einer Periodendauer von 10ms.
Dies entspricht einem Tastverhltnis von 80%. Der High-Pegel ist 3V und der LowPegel 0V, so dass sich fr die Ausgangsspannung ergibt
8 ms
3 V = 2,4 V
UDA = 0V +
10 ms
Kapitel13
Aufgabe 13.1 c, d
Aufgabe 13.2 b
Aufgabe 13.3 c, d
Aufgabe 13.4 a, b, c, d
Aufgabe 13.5 c
Kapitel14
Aufgabe 14.1 a, b, c (A/D-Umsetzer sind weit verbreitet, aber nicht immer vorhanden)
Aufgabe 14.2 b, c
Aufgabe 14.3 c
Aufgabe 14.4 a
Aufgabe 14.5 d
Aufgabe 14.6 a, b
Aufgabe 14.7

15 Lsungen der bungsaufgaben

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

; LED-Anschluss auf Ausgabe


inr16, DDRC; DDRC nach r16
orir16, (1<<6); Bit 6 setzen
outDDRC, r16; und wieder in das Datenrichtungsregister schreiben
; Hier ist die Endlosschleife, in der
; der Taster abgefragt und die LED ein- oder ausgeschaltet wird
my_loop:
inr16,PINA; Wert von PINA holen
andi r16,(1<<6); nur Bit 6 ist von Interesse
breq led_on; falls 0, springen
inr16, PORTC; sonst Bit 6
andi r16,~(1<<6); in PORTC lschen
outPORTC, r16; und so LED ausschalten
jmpmy_loop; fertig. Taster wieder abfragen

548

15 Lsungen der bungsaufgaben

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

Abb.15.15Zeitverlauf des TXD-Signals bei bertragung des Wertes 035

Literaturhinweise

Im Folgenden finden Sie Hinweise auf ergnzende und weiterfhrende Informationen,


die wir nach den Themen des Lehrbuchs gegliedert haben.

Digitale Informationsverarbeitung und Grundlagen digitaler


Schaltungen (Kapitel1, 2, 4, 5, 6)
C. Maxfield, Bebop to the Boolean Boogie, An Unconventional Guide to Electronics, Newnes, 2008.
M. Alioto, E. Consoli, G. Palumbo, Analysis and Comparison in the Energy-DelayArea Domain of Nanometer CMOS Flip-Flops, IEEE Trans. VLSI Systems, 2011.
M. Aguirre-Hernandez, M. Linares-Aranda, CMOS Full-Adders for Energy-Efficient
Arithmetic Applications, IEEE Transactions on Very Large Scale Integration (VLSI)
Systems, 2011.

Systementwurf mit VHDL (Kapitel3, 8)


P. Ashendon, The Student's Guide to VHDL, Morgan Kaufmann Publishers, 2008.
B. Mealy, F. Tappero, Free Range VHDL, www.freerangefactory.org
J. Bergeron, Writing Testbenches: Functional Verification of HDL Models, Springer
2003.
J. Reichardt, B. Schwarz, VHDL-Synthese, De Gruyter Oldenbourg, 2015.
A. Mder, VHDL kompakt, Universitt Hamburg, Fakultt fr Mathematik, Informatik und Naturwissenschaften, tams-www.informatik.uni-hamburg.de/vhdl/doc/ajmMaterial/vhdl.pdf

Springer-Verlag GmbH Deutschland 2016


W. Gehrke et al., Digitaltechnik, Springer-Lehrbuch,
DOI10.1007/978-3-662-49731-9

549

550

Literaturhinweise

Schaltungsrealisierung (Kapitel7, 10)


K.-H. Cordes, A. Waag, N. Heuck, Integrierte Schaltungen, Pearson, 2010.
H. Gbel, Einfhrung in die Halbleiter-Schaltungstechnik, Springer-Vieweg, 2014.
L. Chen et.al., Low Power Design Methodologies for Digital Signal Processors, in
N.N. Tan et.al. Ultra-Low Power Integrated Circuit Design, Springer 2014.
I. Kuon, J. Rose, Measuring the Gap Between FPGAs and ASICs, IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems, 2007.

FPGAs und Komponenten digitaler Systeme (Kapitel9, 11, 12)


M. Qazi, M. E. Sinangil, A. P. Chandrakasan, Challenges and Directions for LowVoltage SRAM, IEEE Design and Test of Computers, Jan/Feb 2011.
J.M. de la Rosa, Sigma-Delta Modulators: Tutorial Overview, Design Guide, and
State-of-the-Art Survey, IEEE Transactions on Circuits and Systems I, 2011.

Mikrocontroller (Kapitel13, 14)


J. Hennessy, D. Patterson, Rechnerorganisation und Rechnerentwurf: Die Hardware/
Software-Schnittstelle, Oldenbourg, 2011.
G. Schmitt, Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie,
Oldenbourg, 2010.
J. Wiegelmann, Softwareentwicklung in C fr Mikroprozessoren und Mikrocontroller, VDE Verlag, 2011.

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

Springer-Verlag GmbH Deutschland 2016


W. Gehrke et al., Digitaltechnik, Springer-Lehrbuch,
DOI10.1007/978-3-662-49731-9

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

Das könnte Ihnen auch gefallen