-
Hochschule Karlsruhe Fakultät Elektro- und Informationstechnik
Studiengang Energie- und Automatisierungstechnik Dr. J.
Hülsemann
Inhalt:
8
Mikrocomputer-Systemarchitekturen..........................................................2
8.1 Adressierung von
Systemkomponenten..........................................................2
8.2
Multi-Master-Systeme.....................................................................................4
8.3 Timer / Counter
.............................................................................................11
8.4 Schnittstellen und Schnittstellen-Bausteine
..................................................17
9 Optimierungsstrategien
.............................................................................27
9.1 CISC- /
RISC-Architektur.............................................................................28
9.2 Queue, Cache, Pipelining und
Harvard.........................................................29
Skriptum „Mikrocontroller-Systeme“
Kapitel 8:
Mikrocomputer-Systemarchitekturen
Kapitel 9:
Optimierungsstrategien
-
Mikrocontroller 8.1 Adressierung von Systemkomponenten Seite 2
von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
8 Mikrocomputer-Systemarchitekturen • In den folgenden Kapiteln
wird die Sichtweise erweitert: nicht mehr der
Mikroprozessor / Mikrocontroller mit seiner Arbeitsweise und
Programmierung steht im Vordergrund, sondern das gesamte System
Mikrocomputer, bestehend aus einem Prozessor, seinem Daten- und
Adressbus sowie den daran angeschlossenen Systemkomponenten.
• Als Systemkomponenten wurden bisher betrachtet:
Speicherbausteine (Kapitel 2.4) Ein-/Ausgabebausteine (Kapitel 3.3)
Interrupt-Controller (Kapitel 7.4)
• In den folgenden Kapiteln werden als weitere Systemkomponenten
vorgestellt: Speicherkarten (Kapitel 8.1) DMA-Controller (Kapitel
8.2) Zähler-/Zeitgeberbausteine (Kapitel 8.3)
Schnittstellenbausteine (Kapitel 8.4)
8.1 Adressierung von Systemkomponenten • Bereits bei der
Betrachtung der Ein-/Ausgabebausteine wurden die zwei möglichen
Verfahren, die am Systembus angeschlossenen Komponenten zu
adressieren, vorgestellt:
Memory Mapped I/O (Speicherbezogene Adressierung der
Ein-/Ausgabekomponenten)
I/O Mapped (Isolierte Adressierung der
Ein-/Ausgabekomponenten)
• Dabei wurde sichtbar, dass der E/A-Baustein, der ja nur 4 Byte
im Adressraum belegt und diese über die Adressbus-Leitungen A0 und
A1 ausdekodiert, eine zusätzliche, externe Adressdekodierung
benötigt:
Mikro-prozessor
D0 - D7
A0
Ver
glei
cher
(A
dres
s-D
ekoc
oder
)
/CS
A1
A2
Port A
Port B
Port C
Control Word
E/A-Baustein
A15
Abbildung 8-1: E-/A-Baustein mit externer Adressdekodierung
Externe Adress-dekodierung
-
Mikrocontroller 8.1 Adressierung von Systemkomponenten Seite 3
von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
• In realen Mikrocomputersystemen ist meist der Adressraum, der
durch die Anzahl der Adressbus-Leitungen vorgegeben ist, wesentlich
größer, als der an dem Bussystem angeschlossenen Komponenten.
Deshalb müssen diese Komponenten mit ihrem kleineren, internen
Adressbereich im größeren, äußeren Adressraum durch zusätzliche,
externe Adressdekodierer platziert werden.
• Am Beispiel einer Speicherkarte von 8kB Gesamtvolumen, die an
einem Systembus mit 16-Bit-Adressbus angeschlossen ist, wird dies
in der folgenden Abbildung dargestellt.
Abbildung 8-2: Speicherkarte mit 8kB
Erklärung: Die 8 Speicherbausteine haben jeweils 1 kByte Inhalt,
der über ihren den eigenen Adressdekoder verwaltet wird.
Entsprechend sind sie nur an den Adressbusleitungen A0 bis A9 des
Systembus angeschlossen. Die Dekodierung der Adressbusleitungen A10
bis A12 übernimmt ein externer Dekoder, der für die
Speicherbausteine die Chipselect-Leitungen CS0 bis CS 7 aktiviert.
Damit sind die Speicherbausteine in einem Bereich von 8k
adressierbar. Um jedoch die gesamte Speicherkarte im Adressraum von
64 k (16-Bit-Adressbus) platzieren zu können, wird über drei
Schalter, die mit den Adressleitungen A15, A14 und A13 verglichen
werden und nur bei Gleichheit den Decoder freigeben, eingestellt,
in welchem 8-k-Adressbereich die Karte angesprochen werden kann
(mit dem Dekoder können 8 Adressräume ausgewählt werden, jeder von
diesen mit 8k Speicher).
-
Mikrocontroller 8.2 Multi-Master-Systeme Seite 4 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
• In Mikrocomputersystemen werden die Systemkomponenten - wie
das obige Beispiel zeigt - meist hierarchisch adressiert. Damit
kann der vorhandene Adressraum vollständig genutzt werden; es
müssen jedoch entsprechende Dekodiereinrichtungen vorhanden
sein.
Bit 15
0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
Bit 0
Karten-Adresse
Baustein-Adresse
Speicherzellen-Adresse
Abbildung 8-3: Adresshierarchie einer Speicherkarte
Frage: Die in Abbildung 8-3 dargestellte Adresse liegt in der
Karte, die in Abbildung 8-2 dargestellt ist. Unter welcher Adress
wird dieselbe Speicherzelle erscheinen, wenn man die Kartenadresse
auf "000" stellt?
8.2 Multi-Master-Systeme • Bisher betrachtete Systeme sind sog.
"Master-Slave"-System: der Prozessor als
Master liest und schreibt über den ADB / DB; die angeschlossenen
Komponenten als Slaves beschränken sich darauf, die Adressen zu
dekodieren und die Informationen über den DB in Empfang zu nehmen
bzw. Informationen für den Prozessor auf den DB aufzuschalten. Dies
kann (siehe Kapitel 2.4) mit synchroner oder asynchror
Bus-Steuerung erfolgen.
• Im Folgenden soll dieses System um weitere Master ergänzt
werden, wobei davon ausgegangen wird, dass weiterhin nur ein
Systembus vorhanden ist. Daraus ergeben sich für ein
Multi-Master-System folgende grundsätzliche Aufgaben, die unter dem
Begriff "Bus-Arbitration" zusammengefasst werden:
Priorisierung der Bus-Zuteilung Anforderung und Zuteilung des
Bus-Zugriffs Sicherung der Datenkonsistenz
• Grundsätzlich vorausgesetzt werden muss, dass die inaktiven
Busmaster vom Bus abgekoppelt werden können; dies erfordert
Tri-State-Logik der Bustreiber (siehe auch Kapitel 2.4).
• Grundsätzliche Anforderung an jede Art der Busarbitration: ein
einzelnerLese- oder Schreibvorgang eines Teilnehmers darf nicht
unterbrochen werden!
• Für die Bus-Arbitration können zwei Verfahren verwendet
werden:
Lokale Arbitration: die Busmaster regeln den Buszugriff
"untereinander"
Globale Arbitration: eine Zusätzliche Harware-Instanz, der
Busarbiter, entscheidet darüber, welcher Busmaster zu welchem
Zeitpunkt den Bus zugeteilt bekommt.
Adress-Hierarchie
Master-Slave
Multi-Master Bus-Arbitration Lesen / Schreiben ununter-brechbar
Verfahren zur Bus-Arbitration
-
Mikrocontroller 8.2 Multi-Master-Systeme Seite 5 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
• Bei der lokalen Busarbitration "besitzt" der Prozessor
zunächst den Bus; zusätzliche masterfähige Teilnehmer können den
Buszugriff beim Prozessor anfordern: sie sind eingeschränkte
Busmaster. Ist der Prozessor bereit, übergibt er den Bus an einen
dieser eingeschränkten Busmaster und koppelt sich selbst vom Bus
ab. Der eingeschränkte Busmaster kann nun frei über die Buszugriffe
verfügen.
• Einfachstes Realisierungsbeispiel für eine lokale
Busarbitration ist das "Daisy Chain"-Verfahren
("Gänseblümchenkette"):
Abbildung 8-4: Daisy Chain
Hinweis: die Darstellung ist vereinfacht und reduziert auf die
Steuerleitungen für die Priorisierung; Daten- und Adressbus selbst
sind nicht dargestellt. Erklärung: Die einzelnen Master melden ihre
Bus-Anforderung bei ihrem eigenen Arbiter an (Req) und erhalten
dann, wenn der Arbiter den Bus bekommt, das Bestätigungssignal
(Ack). Die Arbiter selbst melden die Bus-Anforderung über ein
gemeinsames Sammelsignal (Req, alle Einzel-Anforderungen sind
ODER-verknüpft) bei dem Mikroprozessor an. Dieser gibt sein
Freigabesignal (frei) an den ersten Master bzw. dessen Arbiter in
der "Daisy Chain" weiter. Hat dieser gerade keinen Bus-Bedarf, gibt
er dieses "frei"-Signal an seinem Ausgang weiter an den nächsten
Arbiter in der Kette. Wenn dieser den Bus benötigt, gibt er an
seinem Ausgang statts des "frei"-Signals einfach das invertierte
"nicht-frei"-Signal weiter. Der nächste Arbiter sieht an seinem
Eingang das "nicht-frei"-Signal, kann also den Buszugriff nicht
beanspruchen und gibt selbst dieses "nicht-frei"-Signal am Ausgang
weiter. Ein Arbiter, der den Bus übernimmt, schließt also alle
Arbiter rechts von sich von der Arbitrierung aus: die
Prioritätsvergabe der Buszuteilungs ist durch die Anordnung der
Teilnehmer in der "Daisy Chain"-Kette festgelegt. Mit der
gemeinsamen "BUSY"-Leitung kann während eines Buszugriffs der
nächste Arbiter bereits "frei" bekommen und den Buszugriff
vorbereiten.
Lokale Bus-Arbitration: Beispiel Daisy Chain Priorität durch
Reihenfolge
-
Mikrocontroller 8.2 Multi-Master-Systeme Seite 6 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
• Das "Daisy Chain"-Verfahren hat neben dem Vorteil, durch die
lokale, dezentrale Arbitrierung wenig Schaltungsaufwand zu
benötigen, den Nachteil, dass diese Art der Prioritätsvergabe für
Teilnehmer immer "unfairer" wird, je weiter sie in der Kette vom
Mikroprozessor entfernt sind.
• Macht man allerdings das Sammel-Anforderungssignal Req der
einzelnen Arbiter rücklesbar (in der vorigen Abbildung dadurch
kenntlich, dass das Signal mit einem Doppelpfeil zu den Arbitern
führt), so kann der einzelne Arbiter bei einer Bus-Anforderung
durch seinen Master diese Anforderung solange zurückstellen, wie er
auf der gemeinsamen Sammel-Req-Leitung Anforderungen anderer
Arbiter feststellt. Damit werden diese zuerst abgearbeitet.
Hinweis: Das "Daisy Chain"-Prinzip wird auch als einfaches
Verfahren benutzt, um mehrere Interrupt-Quellen zu priorisieren:
dabei wird aus dem "Req"-Sammelsignal in der oberen Abbildung das
Sammel-Interrupt-Anforderungssignal an den Mikroprozessor; aus dem
"frei"-Signal des Prozessors wird das
Interrupt-Acknowledge-Signal.
• Ein weiteres Realisierungsbeispiel für eine lokale
Bus-Arbitration stellt das Verfahren "Direct Memory Access (DMA)"
dar. Hier soll der Mikroprozessor von der Aufgabe entlastet werden,
Daten, die relativ langsam von einem Peripheriegerät geliefert
werden (z.B. Floppy-Controller, Serielle Schnittstelle usw.)
abzuholen und in den Speicher fortlaufend einzutragen. Diese
Aufgabe übernimmt nun ein DMA-Controller, der allerdings dafür den
Systembus benötigt (siehe folgende Abbildung). Im einfachsten Fall
kann die Bus-Arbitrierung über zwei Signale gelöst werden: der
DMA-Controller stellt die Anforderung mit dem HOLD-Signal, der
Prozessor schaltet seine Bus-Treiber hochohmig und gibt den Bus an
den DMA-Controller durch Aktivierung des HOLD-Acknowledge-Signals
ab. Dann ist der Controller Bus-Master.
Abbildung 8-5: Direct Memory Access
Hinweis: Diese Darstellung ist stark vereinfacht!
"faire" Buszuteilung "Daisy Chain" zur
Interrupt-Priorisierung
Lokale Bus-arbitration: Beispiel DMA-Controller
-
Mikrocontroller 8.2 Multi-Master-Systeme Seite 7 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
Hinweise: Das Peripheriegerät meldet das Vorhandensein von Daten
ebenfalls über Handshake-Signale an den DMA-Controller. Der
DMA-Controller kann die Daten aus dem Peripheriegerät direkt in den
Speicher kopieren oder über einen Zwischenspeicher im Controller.
Der DMA-Controller kann den Bus für die Übertragung eines einzelnen
Datums belegen; dann "stiehlt" er dem Mikroprozessor einzelne
Bus-Zyklen ("cycle steel mode") oder er überträgt ganze Datenblöcke
("burst mode").
• Wenn der Mikroprozessor während der Busbelegungszeit des
DMA-Controllers nicht intern weiterarbeiten kann (z.B. bei Befehlen
mit vielen Maschinenzyklen, jedoch ohne Zugriffsnotwendigkeit auf
weitere Operanden, oder beim Einsatz von Cache-Speichern siehe Kap.
9.2), liegt der Vorteil beim Einsatz eines DMA-Controllers darin,
dass für die Busbelegungszeiten der Mikroprozessor keinen
Verwaltungsaufwand benötigt - wie das bei einem
Interrupt-gesteuerten Abholen der Daten vom Peripheriegerät nötig
wäre.
• Bei der globalen Busarbitration wird ein gemeinsamer, globaler
Systembus von einem zentralen Busarbiter an mehrere
Mikrocomputersysteme verteilt. Diese Mikrocomputersysteme stellen
im allgemeinen Fall selbst wieder vollständige Systeme mit jeweils
einem lokalen Prozessor dar, der über ein eigenes, lokales
Bussystem mit dem lokalen Speicher, E/A-Geräten usw. verbunden
ist.
• Die lokalen Mikrocomputersysteme teilen sich den globalen
Systembus, um auf von allen gemeinsam genutzte Ressourcen
zuzugreifen, wie z.B. globale Speicher zur Datensicherung,
E/A-Peripherie oder Kommunikationsgeräte.
Abbildung 8-6: Globaler Arbiter
Zeitvorteil bei DMA
Globale Busarbitration
-
Mikrocontroller 8.2 Multi-Master-Systeme Seite 8 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
Erklärung: Jedes Teilsystem fordert mit dem Signale "BREQ" den
globalen Buszugriff beim Busarbiter an; dieser verbindet dann - je
nach Priorität des Teilsysems - den lokalen Bus mit dem globalen
Bus und gibt das "ACK"-Signal zurück.
• Der globale Arbiter kann unterschiedliche Vergabeprinzipien
beherrschen; einige sind im Folgenden aufgelistet:
Prioritäts-Steuerung: Jedes Teilsystem besitzt eine feste (oder
auch veränderliche) Priorität, nach der die Busvergabe erfolgt.
Zeitscheibenverfahren: Der Bus wird in einem festen Zeitraster
(Fenster) von einem Teilsystem zum nächsten weitergeschaltet.
Vorteile: einfacher Aufbau des Arbiters, faires, deterministisches
Verfahren Variante dazu: Der Bus wird fortlaufend, ohne festem
Zeitraster, einem Teilsystem nach dem anderen angeboten; hat ein
Teilsystem Bedarf, hält es den Bus mit dem Signal "LOCK" fest.
Vorteil: keine ungenutzen Busfenster, trotzdem faires und
deterministisches Verfahren (wenn die "LOCK"-Zeit der Teilnehmer
fest ist).
Bus-Token-Verfahren: Das Zugriffsrecht auf den Bus wird
möglichst fair, aber gesteuert durch die Anforderung der einzelnen
Teilsysteme weitergegeben. Vorteil: kein Zeitverlust durch
unnötiges Weiterschalten des Bus'.
• Mit dem Signal "LOCK" können zwei verschiedene Aufgaben in
Multimastersystemen gelöst werden:
"Festhalten" des gerade zugeteilten Bus, z.B. um das
Weiterschalten zwischen zwei Lesevorgängen (oder Schreibvorgängen)
zu verhindern und so einen Blocktransfer von Daten zu ermöglichen.
Dies verbessert das Verhältnis von Nutzungszeit zu Umschaltzeit und
damit den Gesamtdurchsatz. Seine Grenze ist (s.o.) durch die
Anforderung der Deterministik und der fairen Vergabe gegeben.
Semaphor-Technik (wird im Folgenden erklärt)
• Die Semaphore-Technik wird in Multimaster-Systemen benötigt,
wenn mehrere Prozessoren über einen globalen Bus auf gemeinsame
Betriebsmittel, wie z.B. einen bestimmten Speicherbereich im
Globalspeicher oder ein globales E/A-Gerät, zugreifen wollen. Das
gemeinsam genutzte Betriebsmittel wird dann über eine Semaphore
geschützt: dies ist eine zwischen allen Teilnehmern vereinbarte,
aber ansonsten beliebige Speicherzelle im Globalspeicher, in der
für das zu schützende Betriebsmittel ein "Besetzt"/"Frei"-Zeichen
eingetragen werden kann.
• Ein Prozessor, der auf das Betriebsmittel zugreifen will, muss
zuvor die Semaphore auslesen: steht dort "frei", darf er selbst
"besetzt" eintragen und anschließend beliebig auf das
Betriebsmittel zugreifen. Ein anderer Prozessor, der in der
Zwischenzeit ebenfalls auf das Betriebsmittel zugreifen will, prüft
ebenfalls die Semaphore, liest aber dort bereits "besetzt"; darf
also vorläufig nicht zugreifen.Um zu erfahren, wann das
Betriebsmittel wieder freigegeben ist, muss der zweite Prozessor
jetzt die Semaphore immer wieder auslesen (pollen).
Vergabe-Prinzipien bei der globalen Arbitrierung Bus-LOCK
Semaphore
-
Mikrocontroller 8.2 Multi-Master-Systeme Seite 9 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
Beispiel: Der gemeinsam von den Prozessoren A und B genutzte
Speicher ist als "Dual ported RAM" ausgebildet: er kann von den
beiden Prozessen sozusagen von links und von rechts beansprucht
werden. Die Verteilung der Zugriffe über zwei Bus-Systeme mit einem
globalen Arbiter (in der folgenden Abbildung nicht dargestellt)
sorgt dafür, dass nach jeweils einem kompletten Lesevorgang
(Schreibvorgang) des einen Prozessors der andere Prozessor
ebenfalls einen Lesevorgang (Schreibvorgang) durchführen kann.
Abbildung 8-7: Dual ported RAM mit Semaphorzelle
Der Algorithmus zur Zugriffsprüfung über die Semaphorzelle, den
Prozessor A und Prozessor B beide bearbeiten müssen, bevor sie auf
den gemeinsam genutzten Speicher zugreifen dürfen, ist in der
folgenden Abbildung dargestellt.
Anwendung einer Semaphor-zelle
-
Mikrocontroller 8.2 Multi-Master-Systeme Seite 10 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
Abbildung 8-8: Semaphor-Algorithmen mit Bus-Weitergabe
Erklärung: Der kritische Fall tritt dann auf, wenn die beiden
Algorithmen zeitversetzt so bearbeitet werden, dass nach dem
Auslesen der Semaphorzelle durch A der Bus durch den Arbiter an
Prozessor B weitergegeben wird (Markierung mit dickem Pfeil in der
Abbildung)! Beide würden dann zeitversetzt feststellen, dass die
Semaphore frei ist, und sie dann beide für "besetzt" erklären.
Dieses Problem kann nur gelöst werden durch ein Bus-LOCK-Signal,
wie es in der folgenden Abbildung dargestellt ist.
Abbildung 8-9: Sperren des Semaphor-Lesens mit Bus-LOCK
Beispiel: Semaphore und Bus-LOCK-Signal
-
Mikrocontroller 8.3 Timer / Counter Seite 11 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
• Multimastersysteme benötigen für das Semaphor-Verfahren
unbedingt einen Bus-Lock-Mechanismus: dieser kann auch durch den
Prozessor in Form eines Read-Modify-Write-Befehls realisiert
werden. Dabei wird die Semaphore ausgelesen und im selben - nicht
unterbrechbaren - Buszyklus das "besetzt"-Zeichen eingetragen.
• Das bisher vorgestellte Semaphor-Prinzip geht von einer
binären Semaphore aus: in der Semaphor-Zelle steht lediglich die
Information "besetzt/frei". In Multimastersystemen kann dieses
Verfahren erweitert werden um "zählende" Semaphoren: es wird dann
zusätzlich eingetragen, durch welchen Master das gemeinsame
Betriebsmittel belegt ist.
8.3 Timer / Counter • Zur Bildung von Zeiten kann man in
Mikrocomputersystemen von der Tatsache
Gebrauch machen, dass der Takt eines solchen Systems meist von
einem Quarz-Oszillator stammt und damit sehr genau bekannt ist.
Deshalb können Programmlaufzeiten taktgenau berechnet werden und
damit zur Zeitbildung verwendet werden. Je nach Länge der
benötigten Zeit können diese Zeiten auch durch "Schachtelung" von
Programmschleifen erzeugt werden (siehe folgendes
Struktogramm).
Abbildung 8-10: Schachtelschleifen zur Zeitbildung
Hinweis: Dieses Verfahren entspricht dem "beschäftigten Warten":
der Prozessor verschwendet 100 % seiner Rechenzeit darauf, auf den
Ablauf eines Zeitprogramms zu warten.
• Eine Zeitbildung durch eigene Timerbausteine entlastet den
Prozessor von diesen Aufgaben. Timerbausteine zählen den
Systemtakt; sie müssen vom Prozessor zunächst parametriert und
gestartet werden, arbeiten dann aber selbständig. Timerbausteine
können auch zum Zählen von extern anschließbaren Signalen verwendet
werden. Damit kann mit Timer/Counter-Bausteinen eine Vielzahl von
Aufgaben gelöst werden.
Zählen von Impulsen Messen von Zeiten und Frequenzen Erzeugen
von Impulsen Erzeugen von Pulsweitenmodulation (PWM)
Semaphore mit Read/Modify/Write Zählende Semaphore
Zeitbildung durch Programmlaufzeit
Zeitbildung durch Timer-Bausteine
-
Mikrocontroller 8.3 Timer / Counter Seite 12 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
• Als Beispiel für einen externen programmierbaren
Intervalltimer (PIT) ist in der folgenden Abbildung der
Zähler/Zeitgeber 8253 (INTEL) dargestellt:
Abbildung 8-11: Zähler-/Zeitgeberbaustein 8253
Erklärung (Auszug aus dem Manual): Der Baustein wird am
Systembus angeschlossen und bietet drei unabhängige 16-Bit-Zähler,
die jeweils mit einem eigenen Taktsignal CLK arbeiten. Der
GATE-Eingang kann zum externen Triggern des Zählens verwendet
werden; der Ausgang OUT zur Ausgabe von Signalen (hier kann z.B.
der Interrupteingang des Mikroprozessors angeschlossen werden). Die
Zähler sind über den Systembus jederzeit vom Prozessor auslesbar
und beschreibbar. Das Steuerwortregister dient zur Parametrierung
durch den Prozessor: hier können sechs verschiedene Betriebsarten
eingestellt werden. Allen Betriebsarten gemeinsam ist, dass die
Zähler von einem Anfangswert (der vom Prozessor vorgegeben wird)
herunterzählen.
• Drei Beispiele für die einstellbaren Betriebsarten: Nach dem
Einschreiben des Anfangswertes wird dieser über den
CLK-Eingang heruntergezählt; beim Erreichen von "0" wird das
OUT-Signal aktiviert und der Zähler bleibt stehen.
Programmierbares Monoflop: eine pos. Flanke am Gate-Eingang
startet das Herunterzählen; das OUT-Signal bleibt solange
aktiviert, bis "0" erreicht ist.
Periodische Erzeugung von Nadelimpulsen: nach n Takten (n ist
der Zähler-Anfangswert) geht das OUT-Signal jeweils für einen Takt
auf "0".
Betriebsarten des Timer/ Counter-Bausteins 8253
-
Mikrocontroller 8.3 Timer / Counter Seite 13 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
• Als Beispiel für On-Chip-Timer/Counter eines Mikrocontrollers
sind imFolgenden die Bausteine des C517 dargestellt: hier gibt es
drei allgemein verwendbare Timer und einen Vergleichszähler
(Compare timer, wird hier nicht weiter betrachtet).
• Auch diese Timer können in verschiedenen Funktionsweisen
(Modus) benutzt werden, die man über das Timer-Modus-Register TMOD
einstellen kann (Auszug):
Modus 0: 8-Bit Timer/Counter mit 1/12 Teiler Modus 1: 16-Bit
Timer/Counter Modus 2: 8-Bit Timer/Counter mit automatischem
Nachladen (reload) eines 8-Bit-Wertes
• Die folgenden Abbildungen zeigen als Beispiel den Timer 0 im
Modus 1 und Modus 2 in der Blockschaltbild-Darstellung.
Abbildung 8-12: Timer 0 , Modus 1 des C517 / Siemens Manual
/
Erklärung: Über das Steuerbit C/T im TMOD-Register wird zwischen
dem Zählen von externen Impulsen am Port P3.4 und der Zeitbildung
durch Zählen der Oszillator-Frequenz mit 1/12-Vorteiler
umgeschaltet. Control ( eigentlich über Gate im TMOD-Register UND
TR0 im TCON-Register gesteuert): der Zähler wird entweder nur über
den Start/Stop-Schalter TR0 gesteuert, oder über einen zusätzlichen
Pegel am Interrupteingang INT0 (Verwendung zur Pulsweiten-Messung)
. TL0 und TH0 bilden zusammen das eigentliche Zählerregister mit 16
Bit. Der Zähler zählt grundsätzlich nur aufwärts; beim Durchgang
durch "0" wird das TF0-Bit gesetzt und - falls per Software mit TR0
der Zähler nicht angehalten wird - weitergezählt ab "0". Das
Überlaufbit TF0 kann mit der passenden Interrupt-Parametrierung zum
Auslösen eines Interrupts verwendet werden (siehe dazu das Beispiel
auf der nächsten Seite).
Timer/Counter des C517 Modus
Modus 1: 16-Bit Timer
-
Mikrocontroller 8.3 Timer / Counter Seite 14 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
Abbildung 8-13: Timer 0, Modus 2 / Siemens Manual /
Erklärung: Ist der Modus 2 eingestellt, arbeitet der Timer als
8-Bit-Timer/Counter. Ein Überlauf des Zählregisters TL0 setzt dann
allerdings nicht nur das Flag TF0, sondern lädt automatisch aus dem
Register TH0 den dort eingetragenen Wert wieder in das TL0-Register
(reload). Hinweis: Das Register TMOD ist nicht bitadressierbar!
Beispiel: Timer 1 soll bei Aufruf eines Unterprogamms einmalig
einen Impuls von 100 Mikrosekunden Länge am Portbit P4.7 ausgeben.
Er soll dabei im 16-Bit-Modus arbeiten; Timer 0 darf nicht
beeinflusst werden. Die Taktfrequenz beträgt 12 MHz. 12 MHz-->
Zähltakt ist dann 1 MHz entsprechend 1 Mikrosekunde. Die Zahl +100d
(0064 h) muss wegen des Aufwärtszählens in -100d (FF9C h)
umgewandelt werden.
INIT: ANL TMOD, #0Fh ; für Timer1 alle Steuerbits =0 ; d.h. GATE
und C/T=0: freilaufender ; Timer am Systemtakt ORL TMOD, #10h ; für
Timer 1 Modus 1 einstellen ; (Abb. 8-12 und Abb. 8-14) MOV TH1,
#0FFh ; Zählwert vorbesetzen MOV TL1, # 09Ch SETB TR1 ; Start von
Timer 1 SETB P4.7 ; Impulsausgabe=1 SETB ET1 ; Interrupt bei Timer
1-Überlauf ; (siehe Abb. 7-14, Register IEN0) SETB EAL ; alle
Interrupts freigeben RET (Fortsetzung nächste Seite)
Modus 2: 8-Bit Reload-Timer
Beispiel für Timer 1
-
Mikrocontroller 8.3 Timer / Counter Seite 15 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
Fortsetzung: Interrupt-Serviceroutine bei Timer-1-Überlauf:
ORG 001Bh ; Interrupt-Vektor für Timer 1, ; (siehe Abb. 7-12)
CLR P4.7 ; Impulsausgabe auf 0 CLR TR1 ; Timer 1 anhalten RETI
Hinweis: In diesem Fall ist ein Aufruf eines eigenen
Interrupt-Unterprogramms nicht nötig, da die obigen Befehle direkt
in der Vektor-Einsprungtabelle genügend Platz haben.
• Die folgenden Abbildungen zeigen das Timer-Control-Register
TCON und das Timer-Modus-Register TMOD. Informationen über weitere
Modus befinden sich im Siemens Manual.
Abbildung 8-14: TCON-Register
Register TCON
-
Mikrocontroller 8.3 Timer / Counter Seite 16 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
Abbildung 8-15: TMOD-Register
Register TMOD
-
Mikrocontroller 8.4 Schnittstellen und Schnittstellen-Bausteine
Seite 17 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
8.4 Schnittstellen und Schnittstellen-Bausteine • Die
Übertragung von digital codierter Information zwischen Teilnehmern
ist am
Beispiel eines ganzen Mikrocomputersystems, bestehend aus
Prozessor, Speicher, E/A-Bausteine usw. bereits ausführlich
betrachtet worden: die Teilnehmer sind hier über Datenbusleitungen
miteinander verbunden. Über diese Datenbusleitungen wird die
Information parallel übertragen; pro Bit der Information steht zur
Übertragung eine eigene Leitung zur Verfügung.
• Sollen mehrere Informationseinheiten übertragen werden, werden
diese nacheinander, also seriell über den parallelen
Kommunikationsweg übertragen. Dafür ist ein zwischen den
Teilnehmern vereinbartes Verfahren (siehe Kapitel 2.4) notwendig:
ein Protokoll.
• Werden nicht nur die Systemteilnehmer über den Systembus
verbunden, sondern externe Geräte an ein solches System
angeschlossen, bezeichnet man diese Verbindung als Schnittstelle
(Interface). Wird in einer Zeiteinheit mehr als ein Bit (über mehr
als eine Datenleitung) übertragen, handelt es sich also um eine
parallele Schnittstelle.
• Vorteil einer Parallel-Schnittstelle: je mehr Leitungen, umso
mehr Informationen können zeitgleich übertragen werden.
• Nachteil einer Parallel-Schnittstelle: je mehr Leitungen, umso
teurer wird das Kabel.
• Beispiel für eine Parallelschnittstelle:
"Centronics-Schnittstelle". Sie ist im PC-Bereich zum Anschluss von
Druckern ("LPT") verbreitet und wurde benannt nach einer
Herstellerfirma für Drucker. Ursprünglich ein reiner
Industriestandard, ist sie in erweiterter Form seit 1994 unter IEEE
1284 normiert.
• Übertragungsraten der Centronics-Schnittstelle sind
Geräte-abhängig bis zu einige 1000 Bytes/Sekunde über eine
Entfernung von bis zu 5 m.
• Für die Realisierung dieser Schnittstelle wird meist ein
Paralle-Portbaustein vom Typ 8255 verwendet (siehe Kapitel
3.3).
• Das Centronic-Kabel besteht aus 36 Adern mit 25-poligem
PC-seitigem Stecker (Cannon) und 36-poligem, Drucker-seitigem
Stecker (Amphenol).
Abbildung 8-16: Centronics-Stecker (oben: Amphenol, unten:
Cannon)
Parallele Übertragung Parallele Schnittstelle Beispiel für
parallele Schnittstellen: Centronics-Schnittstelle
-
Mikrocontroller 8.4 Schnittstellen und Schnittstellen-Bausteine
Seite 18 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
• Ein Blick auf die Kontaktbelegung der Centronics-Schnittstelle
zeigt, dass von den 36 Leitungen alleine 18 Leitungen als
Masseleitungen verwendet werden, während lediglich 8 Leitungen (D0
bis D7) zur parallelen Informationsübertragung (Byte-parallel)
dienen.
Abbildung 8-17: Centronics-Steckerbelegung
• Den Ablauf einer Datenübertragung zwischen Rechner und Drucker
über ein Hardware-Protokoll ("Handshake") zeigt die folgende
Abbildung.
Hinweis: Die folgendeDarstellung zeigt die logische Sicht; dabei
gilt wieder: / Signal bedeutet "low-aktives Signal" Um die
physikalische Sicht, also die Zustände der Signalleitungen zu
erhalten, benötigt man die Zuordnung zwischen logischer Sicht und
physikalischer Sicht. Die Centronics-Schnittstelle verwendet hier
den sog. "TTL-Pegel" ("transistor-transistor-logic"): Low
entspricht 0 - 0,8 V High entspricht 2 - 5 V
Logische und physikalische Darstellung TTL-Pegel
-
Mikrocontroller 8.4 Schnittstellen und Schnittstellen-Bausteine
Seite 19 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
Daten
/ STROBE
BUSY
/ACKN
Abbildung 8-18: Centronics-Handshake beim Drucken
Erklärung: Daten: Der Rechner aktiviert die Datenleitungen D0
bis D7
entsprechend der zu übertragenden Information STROBE: Der
Rechner zeigt an, dass die Daten gültig sind BUSY: Der Drucker hat
die Daten übernommen, druckt und meldet
während dieser Zeit "beschäftigt" ACKN: Der Drucker meldet
"bereit für neues Zeichen"
• Zur Informationsübertragung über längere Strecken ist wegen
der Kabelkosten eine bitserielle Übertragung besser geeignet. Die
einzelnen Bits der Information werden dabei - im einfachsten Fall
über eine Zweidrahtleitung - zeitlich nacheinander als Spannungs-
oder Strom-Zustand codiert übertragen.
• Als Betriebsart einer solchen Übertragungsstrecke gibt es drei
Möglichkeiten: Simplex Nur eine Richtung der Übertragung
(Sender-->Empfänger) Halb-Duplex Datenübertragung in beide
Richtungen möglich, jedoch nicht
gleichzeitig. An beiden Seiten der Übertragungsstrecke exisitert
jeweils Sender und Empfänger, die sich wahlweise auf die Strecke
aufgeschaltet werden können.
Duplex Datenübertragung gleichzeitig in beide Richtungen
möglich.
• Die notwendige Synchronisation zwischen Sender und Empfänger
wird mit zwei verschiedenen Verfahren erreicht:
Synchrone Datenübertragung Hier wird entweder über ein
zusätzliches Taktsignal die Synchronität erzwungen, oder Sender und
Empfänger besitzen Taktgeneratoren gleicher Frequenz, müssen aber
in regelmäßigen Abständen ihre Takte "nachstellen". Dies erreicht
man durch das Übertragen von speziellen Synchronisationszeichen
nach jedem Block von Nutzzeichen.
Serielle Übertragung
Simplex Halb-Duplex Duplex
Synchrone Übertragung
-
Mikrocontroller 8.4 Schnittstellen und Schnittstellen-Bausteine
Seite 20 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
Asynchrone Datenübertragung Sender und Empfänger besitzen eigene
Taktgeneratoren gleicher Frequenz. Die Synchronisation erfolgt nach
jedem einzelnen Zeichen (üblich: 5 bis 8 Bit pro Zeichen) dadurch,
dass die Zeichen in einen festen Rahmen, bestehend aus Startbit und
Stopbit, verpackt werden.
• Im Folgenden wird die Asynchrone Datenübertragung detailliert
beschrieben. • Die Übertragungsgeschwindigkeit bei der seriellen
Übertragung wird in "Anzahl
von Bits pro Sekunde" angegeben. Durch mitübertragene
Synchronisationszeichen ist die effektive Übertragungsrate, bezogen
auf die Nutzzeichen, immer kleiner als die
Übertragungsgeschwindigkeit der Schnittstelle. Als
"Schrittgeschwindigkeit" wird die Anzahl der Taktschritte pro
Sekunde bezeichnet; diese hat die Einheit
1 Baud (Bd) = 1 Taktschritt / Sekunde Bei modernen
Übertragungsverfahren wird pro Taktschritt mehr als ein Bit
übertragen; hier ist die "Bauderate" nicht gleich der
Übertragungsgeschwindigkeit.
• Der Zeichenrahmen (Telegramm-Aufbau) bei der asynchronen
Übertragung ist in der folgenden Abbildung dargestellt.
01 0 0 1 1 1 0 0 1 space
mark
Start-bit
Stop-bit
LSB MSB
Paritäts-bit
Abbildung 8-19: Asynchroner Zeichenrahmen
Hinweis: Diese Darstellung zeigt die logische Sicht! Die
physikalische Sicht erhält man aus den nachfolgenden
Festlegungen.
• Der Ruhezustand der Übertragungsleitung wird "mark", der
aktive Zustand der Übertragungsleitung wird "space" genannt.
• Der Sychronisationsrahmen wird gebildet durch Start-/Stopbit;
das Startbit hat immer den Zustand "space", das Stopbit immer
"mark".
Asynchrone Übertragung
Übertragungs-geschwindig-keit Baud
logische Sicht: mark / space Start-/Stopbit
-
Mikrocontroller 8.4 Schnittstellen und Schnittstellen-Bausteine
Seite 21 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
• Als zusätzliche Datensicherung kann ein Paritätsbit
mitübertragen werden. Im dargestellten Beispiel werden die 7
Nutzdatenbits durch das Paritätsbit zur "geraden Parität" ergänzt.
Diese Vereinbarung wird vom Empfänger geprüft.
• Die Nutzdaten werden in der zeitlichen Reihenfolge: von LSB zu
MSB übertragen.
• Die physikalische Sicht auf die serielle, asynchrone
Schnittstelle ist durch verschiedene Standardisierungen festgelegt.
Die am weitesten verbreitete ist der Standard RS232C (RS:
recommended standard). Hier ein kurzer Blick auf die Entwicklung
dieses Standards:
1969 Electronic Industries Association (EIA): Standard für
mechanische, elektrische und logische Schnittstelle
1972 Consultative Commitee on International Telegraphy and
Telephony (CCITT): Festlegung der Liste der Leitungen in V.24,
Festlegung der elektrischen Kennwerte in V.28
RS232C entspricht V.24 +V.28 und DIN 66020; seit 1987:
"EIA-232-C"
• Die physikalischen Eigenschaften nach RS232C sind:
Spannungsübertragung (Pegel und Zuordnung zur logischen Sicht:
siehe
nachfolgende Abbildung) Erd-unsymmetrisch: Potentiale werden
gegen Erde gemessen Übertragungsrate 20 kBit/s; heute bis 115
kBit/s Kabellänge max. 15-20 m Stecker-Pinbelegung genormt (siehe
weiter unten) Signalquellen müssen kurzschlussfest sein: ohne
Beschädigung dürfen
RS232C-kompatible Geräte miteinander verbunden werden; jeder PIN
darf also z.B. zum Test mit jedem anderen verbunden werden. Dies
ist die wichtigste "RS232C-Kompatibilität"!
Abbildung 8-20: RS232C Spannungspegel
• Die RS232C-Schnittstelle definiert eigentlich die Verbindung
zwischen einem Rechner (Data Terminal Equipment DTE) und einer
Datenübertragungseinrichtung (Data Communication Equipment DCE).
Anstelle von DCE wird auch die Bezeichnung "Modem" (Data Set DS)
verwendet. Die dabei festgelegte Stecker-Pinbelegung zeigt die
folgende Abbildung.
Paritätsbit
RS 232C-Standard
Physikalische Eigenschaften der RS232C
DTE: Terminal DCE, DS: Modem
-
Mikrocontroller 8.4 Schnittstellen und Schnittstellen-Bausteine
Seite 22 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
Abbildung 8-21: Abbildung 8-22: DTE und DCE nach RS232C
verbunden
• Wie bereits die Bezeichnungen der einzelnen Signalleitungen
zeigen, wird in der RS232C alles aus der Sicht des Terminals
dargestellt ("Transmit", "Receive").
• Die minimal erforderlichen Signalleitungen TxD, RxD
(Duplexbetrieb) und Common werden ergänzt um eine Reihe von
Handshake-Signalen. Diese sind notwendig, da es sich um zwei
verschiedene Geräte handelt, die nicht nur den Datenfluss steuern
müssen, sondern auch noch verschiedene Betriebszustände einnehmen
können (Rechner ist ein, Modem noch ausgeschaltet usw.). Die
folgende Abbildung zeigt den vereinfachten Verlauf eines
Sendevorgangs (TD = TxD).
Abbildung 8-23: Handshake zwischen DTE und DCE (vereinfacht)
RS232C: Handshake-Signale
-
Mikrocontroller 8.4 Schnittstellen und Schnittstellen-Bausteine
Seite 23 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
Die genormten Belegung der Steckverbinder zeigt die folgende
Abbildung; rechnerseitig ist immer ein Stecker ("male") vorgesehen,
modemseitig eine Buches ("female") - allerdings ist heute in der
Praxis an beiden Seiten eines Verbindungskabels ein Stecker.
Abbildung 8-24: Steckerbelegung der RS232C (Auszug)
• Häufig wird die RS232C-Schnittstelle nicht für die vorgesehene
Kopplung von Rechner und Modem verwendet, sondern aus
Kompatibilitätsgründen z.B. für die Kopplung von Rechner und
Drucker. Da in diesen Fällen der Koppelpartner selbst sich wie ein
DTE verhält - ebenso wie der Rechner - emuliert er das
DTE-Verhalten, wie die folgende Abbildung zeigt.
Abbildung 8-25: PC und Drucker nach RS232C verbunden
(Beispiel)
Erklärung: Der PC sendet z.B. an den Drucker von PIN 2 aus an
PIN 3 (Simplex-Schnittstelle).Die beiden DTE geben sich jeweils
selbst die Handshake-Signale nach RS232C-Definition. Oft wird ein
ansonsten nicht benutzter PIN 19 als "Puffer-voll"-Signal an den
DSR-Eingang des PC geleitet.
PC über RS232C mit Drucker verbinden
-
Mikrocontroller 8.4 Schnittstellen und Schnittstellen-Bausteine
Seite 24 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
• Eine weitere Anwendung der RS232C-Schnittstelle zur Kopplung
zweier Rechner zeigt die folgende Abbildung.
Abbildung 8-26: "Nullmodem", Kopplung zweier DTE über RS232C
Erklärung: Beide DTE erzeugen sich normgerecht die
Handshake-Signale selbst. Vorteil: die Nullmodem-Verbindung wird
von vielen Standard-BIOS-Funktionen unterstützt. ACHTUNG: Oft wird
ein spezielles "Nullmodemkabel" mit gekreuzten TxD /
RxD-Signalleitungen verwendet. Dieses darf natürlich nicht für den
Anschluss eines "echten" Modems an den PC verwendet werden!
• Eine Schnittstellendefinition, die aus der Fernschreibtechnik
stammt, ist die "20 mA-Schnittstelle" (DIN 66 258, Teil1), auch
"TTY-Schnittstelle" genannt (Teletype). Sie ist besonders
störsicher, da hier die Information über eine Stromschleife
übertragen wird: logisch "0" entspricht 0 mA, "1" entspricht 20 mA.
Die Leerlaufspannung beträgt max. 24 V.
Nullmodem
20mA-TTY-Schnittstelle
-
Mikrocontroller 8.4 Schnittstellen und Schnittstellen-Bausteine
Seite 25 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
• Für die Realisierung einer seriellen Schnittstelle kann
prinzipiell ein Portbaustein (siehe Kap. 3.3) verwendet werden, bei
dem ein Ausgangs-Portbit über einen entsprechenden Leitungstreiber
(Umsetzung von 5 V auf RS232C-Pegel) die Sende- oder
Empfangsleitung ansteuert. Allerdings muss dann die Umsetzung eines
zu übertragenden Byte in einzelne Bits - entsprechend den
Signalzuständen am Portbit - einschließlich des Zeichenrahmens
(Startbit, Stopbit, Ermittlung des zusätzlichen Paritätsbits)
ausprogrammiert werden. Auch in diesem Fall überlässt man deshalb
diese ständig wiederkehrende - und wegen der Flusssteuerung auch
mit festen, genau einzuhaltenden Zeitbedingungen verknüpfte -
Tätigkeit einem eigenen Controller-Baustein. Dieser übernimmt dann
gleich Sende- und Empfangstätigkeit und wird deshalb UART
(universal asynchronous receiver transmitter) genannt.
• Die folgende Abbildung zeigt das Blockdiagramm eines einfachen
UART-Bausteins (8250; Nachfolgebausteine: 82450, 16450, 16550).
Abbildung 8-27: UART 8250 (Auszug aus dem Blockdiagramm)
Erklärung: Wandlung eines in das Sender-Register parallel
eingeschriebenen Byte in die serielle Übertragung am Ausgang
SOUT
Bereitstellen eines von SIN empfangenen Bitmusters im
Empfänger-Pufferregister zum parallelen Auslesen
Sender- und Empfängerteil getrennt mit jeweils eigenem, per
Software einstellbaren Taktgenerator
Interrupterzeugung möglich bei "Empfangs-/Senderegister leer",
"Break-Erkennung", "Übertragungsfehler" usw.
(Interrupt-Zusatzinformation im Interrupt-Register)
Vollduplexbetrieb Zeichenaufbau wählbar (5-8 Nutzbits, mit/ohne
Parität
gerade/ungerade Integrierte Modem-Steuerlogik für das
RS232C-Handshake
UART
-
Mikrocontroller 8.4 Schnittstellen und Schnittstellen-Bausteine
Seite 26 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
Abbildung 8-28: Anschluß-Signale des UART 8250 (Auszug)
Hinweis: Die sog. EIA-Leitungstreiber erzeugen aus der
5-V-Betriebsspannung des PC die Signalpegel +12V bis -12V an der
seriellen Schnittstelle (RS232C: +/- 15 V).
-
Mikrocontroller 8.4 Schnittstellen und Schnittstellen-Bausteine
Seite 27 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
9 Optimierungsstrategien Vorbemerkung: Die Entwicklung der
Mikrorechner ist geprägt durch eine ständige und rasante
Leistungssteigerung. Dies haben die Hersteller einerseits erreicht
durch die ständige Weiterentwicklung der Hardware (Verkleinerung
der Strukturen, Erhöhung der Taktraten usw.). Andererseits wurde
versucht, die Leistungssteigerung durch geschickte Konstruktion der
Hardware, also durch Optimierung der Rechner-Architektur, zu
erreichten. Einige Optimierungsstrategieen werden im Folgenden
vorgestellt; allerdings kann dies nur pauschal geschehen, Details
finden sich in /Flik, Liebig/ (siehe Literaturverzeichnis).
• Optimierung soll immer die Leistungsfähigkeit von Prozessoren
verbessern. Diese "Leistungsfähigkeit" ist aber eine sehr komplexe
Größe: nicht nur die reine Bearbeitungsgeschwindigkeit von
Befehlen, sondern auch Taskwechselzeiten,
Interrupt-Reaktionszeiten, Zusammenarbeit mit der umgebenden
Hardware spielt eine Rolle. Aussagekräftige Maßzahlen zum Vergleich
verschiedener Prozessoren lassen sich erst durch eine
Probe-Implementierung im echten Umfeld und mit echten Applikationen
als Test-Software erhalten.
• Auch wenn man den Blick verengt auf lediglich die
Befehlslaufzeiten und damit zur Maßzahl MIPS (million instructions
per second) kommt, kann man leicht Äpfel mit Birnen
vergleichen:
Beispiel: Die Aufgabe A = B + C wird von einem CISC-Rechner
(VAX) in einer Mikrosekunde ausgeführt; dieser hätte also 1 MIPS.
Dieselbe Aufgabe von einem RISC-Prozessor ausgeführt, der dafür
allerdings 4 Befehle benötigt, die zusammen eine Mikrosekunde
benötigen, würde zu 4 MIPS führen.
• Es dürfen also nicht nur die Befehlslaufzeiten gezählt werden,
sondern die ausgeführten Funktionen / Zeit. Allerdings stellt man
dann fest, dass solche Programm-Laufzeitmessungen wiederum davon
abhängen, welche Art von Funktion ausprogrammiert wurde. Kommen
z.B. in einem mathematisch-naturwissenschaftlichen Programm viele
Gleitpunktrechnungen vor, schneidet natürlich ein Prozessor ohne
Gleitpunkt-Coprozessor schlecht ab.
• Es sollten also zur Bildung von Vergleichs-Messzahlen
standardisierte Applikationen verwendet werden, sogenannte
"Benchmarks". Einige Beispiele:
Whetstone: Befehlsmix ("synthetischer Benchmark") mit
Schwerpunkt Numerik / Gleitpunkt (Programmiersprache Algol 60,
Fortran)
Dhrystone: 100 Anweisungen aus dem Bereich
Betriebssystemprogramme; keine Gleitpunktrechnung
(Programmiersprache ADA, C)
Linpack: "echte" Routinen zur Lösung von linearen
Gleichungssystemen (Fortran)
Maßzahlen für die Bewertung der Prozessor-leistung MIPS
Benchmark
-
Mikrocontroller 9.1 CISC- / RISC-Architektur Seite 28 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
9.1 CISC- / RISC-Architektur
• Betrachtet man die x86-Familie (Intel), die ja bis zum
"Pentium"-Prozessor aufwärtskompatibel entwickelt wurde, fällt die
große Anzahl von ca. 500 Befehlen (alle Einzelbefehle gezählt) auf.
Die überwiegend historischen Gründe dafür sind:
Zugriffe auf den externen Programmspeicher waren langsamer, als
die Prozessor-internen Zugriffe (schneller, statischer
RAM-Speicher). Damit war es eine Geschwindigkeitssteigerung, nach
einem externen Befehls-Lese-Vorgang möglichst lange
Prozessor-intern zu arbeiten. Dies führte dazu, dass neben den
einfachen Befehlen weitere, möglichst aufwendige Befehle definiert
wurden.
Dem Anwender sollten möglichst umfangreiche Befehlsfunktionen
angeboten werden: häufig benutzte Funktionen können damit als ein
Befehl aufgerufen werden (Ersatz eines Unterprogramms). Typisches
Beispiel hierfür: der Befehl "XLAT" nimmt ein Byte, das ihm im Akku
übergeben wird, adressiert über Pointer eine "look-up-table", also
eine Tabelle mit Codes, holt aus der Tabelle den zum Byte passenden
Code und gibt ihn im Akku zurück ("translate"). Auch Funktionen zur
Unterstützung von Betriebssystemtätigkeiten wurden auf Befehlsebene
unterstützt.
Auch wenn die Zeit über viele dieser Befehle hinweggegangen ist
und z.B. der Einsatz von Hochsprachen diese Befehle überflüssig
machte: keinen dieser Befehle konnte man als Prozessorhersteller
irgendwann wieder weglassen: dies hätte die Aufwärtskompatibilität
zunichte gemacht!
• Die Entwicklung von umfangreichen Befehlssätzen mit komplexen
Befehlsfunktionen stellt bereits eine erste Optimierungsstrategie
dar.
• Prozessoren mit einem solchen Befehlssatz nennt man "compex
instruction set computer" oder kurz CISC-Prozessoren.
Hinweis: Diese komplexen Befehle werden im Prozessor innerhalb
der Befehls-Ausführungssteuerung (siehe Kapitel 3.1) nicht
"hardwired" also festverdrahtet ausgeführt, sondern sie werden
zerlegt in mehrere Schritte. Jedem äußeren Befehl entspricht also
eine Sequenz von "Mikroprogramm-Befehlen". CISC-Prozessoren
zeichnen sich dadurch aus, dass ein mehr oder weniger großer Teil
ihres Befehlssatzes in einem Mikroprogramm realisiert wird. Dieses
Mikroprogramm bzw. sein Programmspeicher beansprucht einen
erheblichen Teil der Chipfläche und verursacht den entsprechenden
Anteil an der gesamten Verlustleistung des Prozessors.
CISC-Prozessoren
Mikro-programm
-
Mikrocontroller 9.2 Queue, Cache, Pipelining und Harvard Seite
29 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
• In den 80er Jahren wurden Assembler-Programme untersucht, die
von Hochsprachen-Compilern erzeugt worden waren. Dabei wurde
festgestellt, dass 90% des Programmcodes aus Befehlen bestand, die
nur 10% des zur Verfügung stehenden Befehlssatzes ausmachten. Grund
u.a.: die Compiler-Hersteller versuchen, möglichst nur die Befehle,
Register u.s.w. zu benützen, die in allen Prozessorvarianten zur
Verfügung stehen.
• Aus diesem Ansatz wurde die RISC-Architektur entwickelt
(reduced instruction set computer) mit folgenden Merkmalen:
nur ca. 60 einfache Befehle, die auch von speziellen Compilern
genutzt werden
jeder Befehl ist "hard-wired" und wird in einem Takt ausgeführt
kein Mikroprogramm minimale Chipfläche und damit minimale
Verlustleistung feste Befehlswortbreite (-->leichte Decodierung)
Zugriff auf externe Daten nur über zwei Befehle (load-/store); d.h.
möglichst
Arbeiten im Prozessor-internen RAM große Anzahl Register keine
Kompatibilität zu vorherigen Prozessoren
• Ziel der RISC-Prozessorarchitektur (auch "skalare" Architektur
genannt): eine Funktion nicht mit einem Befehl zu bearbeiten,, der
viele Takte benötigt, sondern in mehreren Befehlen, die jeweils nur
einen Takt benötigen. Dabei sollte dann die gesamte
Bearbeitungszeit kürzer sein als bei einem CISC-Prozessor. Der
kryptische Befehlssatz, die Notwendigkeit, auch einfache
Arithmetikfunktionen in ganze Befehlsketten aufzulösen, führt dazu,
dass RISC-Prozessoren nicht mehr in Assembler programmiert werden,
sondern in C. Der C-Compiler muss allerdings speziell auf den
einzelnen Prozessor zugeschnitten sein, er bestimmt maßgeblich die
Leistung des Prozessors.
• RISC-Prozessoren werden mit weiteren Optimierungsmaßnahmen
kombiniert (Cache-Speicher, Harvard-Architektur und Pipelining;
siehe folgendes Kapitel).
• In den 90er-Jahren wurden RISC-Merkmale auch in die
Architekturen der CISC-Prozessoren aufgenommen.
9.2 Queue, Cache, Pipelining und Harvard
• Analysiert man die Gesamtlaufzeit eines Befehls, zeigt sich,
dass sich diese aufteilt auf die einzelnen
Befehls-Bearbeitungsphasen (siehe Kap. 3.2). Am Beispiel des
Befehls:
ADD ANNA , AX ist dies in der folgenden Abbildung dargestellt.
Dabei sind die Bearbeitungsphasen auf die Zeiten verteilt, die
entweder der BUS benützt wird (Befehlscode lesen, Operand ANNA
lesen, Ergebnis-Operand ANNA zurückschreiben) oder die der
Prozessor intern arbeitet (Dekodieren des OPCODE, Ausführen der
Addition).
RISC-Prozessor
skalare Architektur
-
Mikrocontroller 9.2 Queue, Cache, Pipelining und Harvard Seite
30 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
Abbildung 9-1: BUS-Belegung und Prozessorbelegung (Beisp.: ADD
ANNA,AX)
• Nimmt man an, dass Programme überwiegend linear aufgebaut
sind, also auf einen Befehl an der Programmspeicheradresse X der
Befehl an der Programmspeicheradresse X+1 folgt, kommt man zu einer
der ältesten Optimierungsstrategien, der Queue:
Abbildung 9-2: Befehlswarteschlange (Queue) des 80x86
Erklärung: Die eigentliche Prozessoreinheit EU (Execution Unit,
siehe Kap. 3.2) des 80x86 wird ergänzt um eine BIU (Bus Interfache
Unit). Diese adressiert den externen Speicher selbständig (genau:
führt die Segmentregister) und kann über einen eigenen Program
Counter von einer Startadresse an die nächsten sechs Befehlscodes
in eine Warteschlange einlesen (auch "Prefetch" genannt). Dann
beginnt die eigentliche Befehlsbearbeitung in der EU, die
allerdings immer nur den ersten Befehl aus der Warteschlange holt
und bearbeitet. Die BIU holt in Zeiten, in denen der BUS von der EU
nicht benötigt wird, weitere Befehle, füllt also die Warteschlange
nach. Daraus ergibt sich dann ein Zeitverlauf entsprechend
folgender Abb.:
Befehls-Warte-schlange "Queue"
Prefetch
-
Mikrocontroller 9.2 Queue, Cache, Pipelining und Harvard Seite
31 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
Abbildung 9-3: BUS-Belegung und Prozessorbelegung mit Queue
• Die Optimierungsstrategie "Queue" führt also im Idealfall
dazu, dass die Fetch-Zeiten parallel zu den internen
Bearbeitungszeiten der Befehle liegen, also bei der Messung der
Befehlslaufzeit nicht mitgezählt werden (z..B. von Write Op-1 bis
Write Op-2, also der Laufzeit des Befehls 2, misst man lediglich
einen Execute und einen Decode-Zyklus)
• Wenn der lineare Ablauf des Programms allerdings unterbrochen
wird durch einen Sprung oder einen Unterprogramm-Aufruf, sind alle
Befehle, die bereits in der Queue nach diesem Befehl auf ihre
Bearbeitung warten, überflüssig. In diesem Fall erhält die BIU die
Sprungziel-Adresse und füllt von hier aus zunächst die Queue mit
sechs Befehlen auf. Während dieser Zeit steht die EU.
• Diese Optimierungsstrategie geht also - wie die nachfolgenden
auch - von bestimmten Annahmen über den Programm-Aufbau aus.
• Eine weitere Möglichkeit, Programmlaufzeiten zu optimieren,
liegt in der Ausnutzung der Speicher-Hierarchie: große RAM-Speicher
werden aus Kosten- und Platzgründen als externe DRAM realisiert,
kleine RAM Speicher können als SRAM auf dem Prozessorchip
integriert werden (siehe Kapitel 2.4). Entsprechend ergibt sich
eine hierarchische Staffelung der Zugriffszeit: externe DRAMs sind
langsamer anzusprechen als interne SRAM. Zwischen beiden liegen
Laufzeit- und Größenmäßig die extern aufgebauten SRAMs.
• Kopiert man einen Ausschnitt aus dem Programmspeicher in einen
solchen, schnellen SRAM-Zwischenspeicher, so nennt man diesen
Cache. Der Prozessor adressiert und holt die Befehle dann
grundsätzlich nur im Cache. Dadurch werden wiederholt ausgeführte
Befehle entsprechend schneller bearbeitet.
• Droht der der Prozessor bei der Programmbearbeitung den im
Cache befindlichen Programmausschnitt zu verlassen, muss
rechtzeitig ein neuer Teil aus dem externen Programmspeicher in den
Cache kopiert werden. Für diese Tätigkeit ist also eigene
Intelligenz in Form eines Cache-Controllers nötig. Die folgende
Abbildung zeigt die Anordnung eines einfach vorhandenen Cache als
Pufferspeicher zwischen Prozessor und externem Hauptspeicher.
Optimierung ist abhängig von Programm-Struktur
Speicher-Hierarchie Cache Cache-Controller
-
Mikrocontroller 9.2 Queue, Cache, Pipelining und Harvard Seite
32 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
Abbildung 9-4: Cache
• In modernen PC-Architekturen wird zusätzlich zu einem Cache
für den Programmspeicher auch ein Cache für Daten verwendet. Damit
wird natürlich die Aufgabe für den Controller schwieriger: er muss
nicht nur das Laden und Adressieren erledigen, sondern auch noch
für die Datenkonsistenz zwischen Daten im Cache und den Kopien im
Hauptspeicher sorgen.
• Realisiert man - wie oben beschrieben - eine dreistufige
Speicherhierarchie, so nennt man den Cache, der im Prozessor
realisiert ist "Level-1-Cache", den extern realisierten Cache
"Level-2-Cache".
Hinweis: Der grundsätzliche Unterschied zwischen einer Queue und
einem Code-Cache zeigt sich dann, wenn im Programm ein Sprungbefehl
auftritt:
Ist das Sprungziel innerhalb des Programmausschnittes, der sich
gerade im Cache-Speicher befindet (sog. "hit"), wird der
Sprungbefehl und alle nachfolgenden Befehle weiterhin mit der
vollen Zugriffsgeschwindigkeit ausgeführt.
Bei der Queue muss auf jeden Fall der Warteschlangen-Inhalt
komplett verworfen werden und die neuen Befehle nachgeladen
werden!
Ein Sprungbefehl wird bei der Cache-Lösung nur dann die Laufzeit
verlängern, wenn er aus dem Programmausschnitt, der sich gerade im
Cache befindet, herausführt. Dann gilt auch hier: der Cache muss
zunächst neu geladen werden.
Daten-Cache L-1-Cache, L-2-Cache
-
Mikrocontroller 9.2 Queue, Cache, Pipelining und Harvard Seite
33 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
• Zerlegt man die Ausführung eines Befehls wieder in seine
Bearbeitungsphasen und lässt jetzt jede Bearbeitungsphase in einer
eigenen Hardware-Instanz durchführen, so wird ein Befehl praktisch
wie auf einem Fließband von einer Instanz zur nächsten
weitergereicht. Diese Optimierungsstrategie nennt sich
Pipelining.
• Dadurch kann z.B. die erste Instanz, die für den Befehlsfetch
zuständig ist, gleich nach dem Holen des ersten Befehls mit dem
Holen des nachfolgenden, zweiten Befehls weitermachen usw. Sie
übergibt einfach den geholten Befehlscode an die nächste Instanz,
die die Decodierung durchführt (siehe nächste Abbildung); diese
übergibt nach der Decodierung den Befehl an die Ausführungseinheit.
Dort wird die eigentliche Befehlsfunktion bearbeitet und
anschließend - in diesem Beispiel - ein Operand in den Speicher
zurückgeschrieben.
Abbildung 9-5: Pipelining
• Bei einem vierstufigen Pipelining sind also gleichzeitig 4
Befehle in Bearbeitung. Betrachtet man die Zeitpunkte, an denen ein
Befehl fertig wird, also der Ergebnisoperand in den Speicher
zurückgeschrieben ist, so sieht man, dass im Idealfall pro Takt des
Prozessors ein Befehl fertiggestellt ist.
• Damit ist es möglich, auch lange Befehle, die eigentlich - wie
oben dargestellt - vier Takte benötigen, scheinbar in einem Takt
bearbeitet werden. Dieses Verfahren lässt sich beliebig erweitern -
solange man Befehlsbearbeitungsphasen findet, die in eigenen
Hardware-Instanzen realisiert werden können. Damit steigen dann
natürlich auch die Kosten eines solchen Systems.
• Ähnlich wie die Queue hat auch das Pipelining das Problem,
dass bestimmte Annahmen über den Verlauf des Programms zutreffen
müssen, ansonsten kommt das "Fließband" ins Stocken. Dies kann z.B.
ein Sprungbefehl sein: wie bei der Queue holt die Fetch-Instanz
immer nur den nächsten, im Programmspeicher stehenden Befehl (siehe
nächste Abbildung).
Pipelining
Pipelining mit Sprungbefehl
-
Mikrocontroller 9.2 Queue, Cache, Pipelining und Harvard Seite
34 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
Abbildung 9-6: Pipelining mit Sprungbefehl und Leerzyklus
Erklärung: Die Decodier-Instanz erkennt den Sprungbefehl und
fügt für die nachfolgende Instanz einen Leerzyklus ein. Dieser
wandert durch die Instanzen hindurch, während die Fetch-Instanz den
Befehl-X von der Sprungzieladresse holt.
• Eine weitere Annahme über den Ablauf des Programms, die in der
Abbildung 9-2 vorausgesetzt wird, wird schnell sichtbar, wenn man
sich die Frage stellt, wie eigentlich eine Instanz das
Operations-Ergebnis in den Speicher zurückschreiben kann, während
gleichzeitig eine andere Instanz einen Befehlsfetch, also ein Lesen
des nächsten Befehlscodes aus dem Speicher durchführen soll. Die
bisher betrachteten Systemarchitekturen, bei denen der Prozessor
mit einem Adreß- und Datenbus am Speicher für Code und Daten
angeschlossen ist (von Neumann-Architektur) würden diesen
BUS-Konflikt auflösen durch Einfügen von Leerzyklen. Dies könnte
etwa wie folgt aussehen:
Abbildung 9-7: Pipelining bei von Neumann-Architektur
Erklärung: Das Zurückschreiben des Operanden für Befehl-n hat
Vorrang vor dem Fetch des Befehls-n+3. Damit häufen sich die
Leerzyklen im Pipelining.
Pipelining ohne Sprung-Befehl (oben) und mit Sprungbefehl
(unten)
von Neumann-Architektur
-
Mikrocontroller 9.2 Queue, Cache, Pipelining und Harvard Seite
35 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
• Pipelining wird nur dann effektiv, wenn man gleichzeitig auf
Befehle und Daten zugreifen kann: wenn also zwei getrennte
BUS-Systeme vorhanden sind. Diese Form der Rechnerarchitektur nennt
man "Harvard-Architektur". Nur damit ist ein konstanter Strom von
Befehlen und Daten in den Prozessor erreichbar. Dies ist natürlich
auch die teuerste Form der Optimierung.
Abbildung 9-8: Rechner-Architekturen
• Abschließend soll die Blockstruktur des Pentium-Prozessors
zeigen, dass viele der hier dargestellten Optimierungsstrategien
sich dort wiederfinden.
Harvard-Architekture
-
Mikrocontroller 9.2 Queue, Cache, Pipelining und Harvard Seite
36 von 36
HS Karlsruhe, Studiengang Energie- und Automatisierungstechnik
Dr. J. Hülsemann
V 1.00
Abbildung 9-9: Pentium-Blockstruktur (aus: H.P. Messmer,
„PC-Hardware“,
Addison-Wesley)
8 Mikrocomputer-Systemarchitekturen8.1 Adressierung von
Systemkomponenten8.2 Multi-Master-Systeme8.3 Timer / Counter8.4
Schnittstellen und Schnittstellen-Bausteine
9 Optimierungsstrategien9.1 CISC- / RISC-Architektur9.2 Queue,
Cache, Pipelining und Harvard