Taktdiagramme Z80 CPU |
![]() |
![]() |
![]() |
Das Zeitverhalten der CPU U880 wird im wesentlichen durch den Systemtakt bestimmt. Die CPU tauscht in Abarbeitung der Befehle ihre Daten über den bidirektionalen Datenbus aus. Ebenso holt die CPU ihre Befehle durch Adressierung des Speichers über den Datenbus ein. Folgende Grundfunktionen werden ausgeführt:
|
![]() |
1. Maschinen-Zyklus-Diagramm |
![]() |
Alle Instruktionen werden auf der Basis der o. g. Grundfunktionen ausgeführt und sind teilweise Zusammensetzungen mehrerer Grundfunktionen. Die Gesamtzahl der Takte
einer Grundfunktion bilden einen Maschinenzyklus; ein oder mehrere Maschinenzyklen bilden einen Befehls- oder Instruktionszyklus. Grundsätzlich beginnt jeder
Instruktionszyklus mit dem Lesen eines Befehlskodes (Op-Kode). Dieser Maschinenzyklus wird als M1-Zyklus bezeichnet, und von der CPU wird ein Steuersignal Ml ausgesendet. Das M1-Signal wird im System als Synchronisationssignal für Instruktionszyklen verwendet. Da in jedem Instruktionszyklus mindestens ein M1-Zyklus enthalten ist, wird ein kontinuierlicher Refresh gesichert. Die Taktperioden werden auch als T-Zustände bezeichnet. rede Grundfunktion besteht aus drei bis sechs T-Zuständen die M1-Zyklen aus vier bis sechs. |
1. Maschinen-Zyklus-Diagramm |
![]() |
![]() |
![]() |
Maschinen-Zyklus-Diagramm für einen vollständigen Befehl ohne WAIT-States
2. M1-Zyklus |
![]() |
![]() |
![]() |
Die Bilder unten zeigen als Beispiel einen Instruktionszyklus, der aus drei Maschinenzyklen besteht. Bisher wurde vorausgesetzt, dass keine WAIT-Zustände zur Synchronisation der externen Signale eingeschoben wurden, die dann natürlich die Maschinenzyklen entsprechend verlängern.
M1-Zyklus-Diagramm ohne eingefügte WAIT-States |
![]() M1-Zyklus-Diagramm mit eingefügte WAIT-States
|
Bild oben zeigt das Zeitverhalten beim Lesen eines Befehlskodes (M1-Zyklus). Dieser
M1-Zyklus ist für den größten Teil der Instruktionen vier Taktzustände lang, unter der
Voraussetzung, dass kein WAIT-Zustand eingefügt wurde. Der
M1-Zyklus lässt sich in
zwei Teile untergliedern. Im ersten Teil erfolgt das Lesen des OP-Kodes, im zweiten Teil
der Refresh.
Zu Beginn des Ml-Zyklus wird der Inhalt des Programmzählers PC auf den Adressbus
gegeben. Nach einer halben Taktperiode werden die Signale
MREQ und
RD aktiv (L).
Mit diesen Signalen wird das Lesen des Speichers eingeleitet. Das Timing sichert,
dass
schon bei der fallenden Flanke von MREQ und
RD der Adressbus stabil ist. Damit ist es
möglich, die fallende Flanke von MREQ direkt einzusetzen- als Chipenable- (CE-) Takt
für dynamische und für flankenaktivierte Speicher. Das
RD-Signal zeigt der
Speicherlogik und der Systemlogik, dass der Datenbus für einen Signalfluss in Richtung CPU zu
schalten ist. Mit der fallenden Flanke von T2 wird die
WAIT-Leitung abgefragt. Die
Daten werden mit der steigenden Flanke von T3, also am Ende von T2, in die CPU übernommen. Es ist damit sichergestellt,
dass die CPU den Datenbus abgefragt hat, bevor
MREQ und
RD inaktiv werden.
Die Taktzustände T3 und T4 des Befehlskodelesezyklus werden innerhalb der CPU für
die Dekodierung und Ausführung des eingelesenen Befehls benötigt, so dass innerhalb
dieser Zustände keine weitere Operation ausgeführt wird. (Daten- und Adressbus sind von
der CPU nicht belegt für die Befehlsausführung.) Während T3 und T4 enthalten die
niederwertigsten 7 bit des Adreßbusses den Inhalt des Registers R, d. h. die
Refreshadresse.
MREQ und
RFSH dienen dazu, alle dynamischen Schreib-Lese-Speicher gleichzeitig anzusprechen und damit aufzufrischen. Das Lesesignal
RD wird während des Refresh nicht
aktiv, um Konflikte am Datenbus durch gleichzeitiges Ansprechen zu vermeiden. Damit infolge der UND-Verknüpfung von
MREQ und
RFSH für das gleichzeitige Ansprechen
aller Speicher keine Dekodierspitzen entstehen, wird das RFSH-Signal jeweils eine halbe Taktperiode breiter gemacht als Anfang und Ende des
MREQ. Das
RFSH-Signal kann
daher nicht direkt für den Speicherrefresh benutzt werden, da nicht sicher ist, dass schon zu Beginn des
RFSH-Signals der Adressbus mit der Refreshadresse eingeschwungen ist.
Bild rechts zeigt den Befehlskodelesezyklus, wenn während der Abfrage in T2 eine aktive
WAIT-Leitung festgestellt wird. Der
M1-Zyklus wird dann entsprechend
verlängert. Stellt die CPU während T2 ein aktives
WAIT fest, so wird ein zusätzlicher Zustand TW eingeführt. Auch während der fallenden Flanke des Taktes CP in TW wird das
WAIT-Signal abgefragt und bei Aktivität der Maschinenzyklus weiter verlängert. Damit ist es möglich, den Lesezyklus so zu verlängern, dass dieser an die Zeitbedingung
Zugriffszeit des Speichers (in den meisten Fällen ein ROM) angepasst werden kann.
3. Befehlslese-Zyklus |
![]() |
![]() |
![]() |
Memory-Read/Write--Zyklus-Diagramm ohne eingefügte WAIT-States |
![]() Memory-Read/Write-Zyklus-Diagramm mit eingefügte WAIT-States
|
Aus den Bildern oben werden die Unterschiede zwischen einem MI- oder Befehlskodelesezyklus und einem Speicherlese- oder -Schreibzyklus im Zeitverhalten deutlich. Die letzteren
Zyklen sind drei Taktperioden lang. Es erfolgt kein Refresh. Im Gegensatz zum M1-Zyklus werden. die Daten erst nach 2,5 Taktperioden, vom Aussenden der Adresse ab gerechnet,
durch die CPU abgefragt. Die Signale MREQ.und RD sowie die Adressaussendung das gleiche Zeitverhalten wie im M1-Zyklus zu Beginn des Zyklus. MREQ und RD sind um eine halbe Taktperiode, die Adresse ist für einen Takt verlängert.
Für die meisten Halbleiterspeicher ist es erforderlich, dass stabile Adressen und Daten den Schreibimpuls überlappen. Das WR-Signal erfüllt diese Bedingung und kann daher
direkt als Schreibimpuls verwendet werden.
Das Bild rechts zeigt den gleichen Zyklus mit Verlängerung durch Benutzung des WAIT-Eingangs der CPU. Die Verhältnisse entsprechen in diesem Punkt denen der
Verlängerung des M1-Zyklus durch WAIT.
4. Datenein- und Ausgabe |
![]() |
![]() |
![]() |
I/O-Read/Write--Zyklus-Diagramm ohne eingefügte WAIT-States |
![]() I/O-Read/Write-Zyklus-Diagramm mit eingefügte WAIT-States |
Bild 3.1.7 zeigt die Datenein- und -ausgabe. In diesem Bild sind der Lese- und der
Schreibzyklus gleichzeitig dargestellt, obwohl natürlich nur einer der beiden Zyklen auftreten
kann. Das entsprechende zweite Steuersignal (WR oder RD) befindet sich im inaktiven
Zustand, und der Datenbus enthält nur die für die Operation adäquaten Daten.
Ansonsten gelten die hier aufgeführten Fakten für beide Datentransfers. Man erkennt, dass nach
T2 ein WAIT-Zustand eingefügt ist. Dieser Zustand wird von der CPU automatisch
eingefügt, damit an die 1/0-Baugruppen keine hohen Geschwindigkeitsforderungen gestellt
werden müssen. Das betrifft insbesondere die Dekodierlogik, die festlegt, ob aufgrund des
Timing zusätzliche WAIT-Anmeldungen zu erfolgen haben. Es müsste dann die WAIT-Leitung zum Zeitpunkt der fallenden Flanke von T2 aktiv sein auf der Basis von IORQ
und der Portdekodierung, wofür nur etwa 40 ns zur Verfügung stünden. Der automatisch
generierte WAIT-Zustand ermöglicht die Verwendung von Ein-/Ausgabe-Bausteinen in
MOS-Technik. Während T2 wird aufgrund der o. g. Wirkungsweise die WAIT-Leitung im Gegensatz zu den Speicheroperationen nicht abgefragt, sondern nur in den WAIT-Zuständen. Bild 3.1.7b zeigt den um zwei extern verursachte WAIT-Zustände verlängerten Zyklus. Wie im Fall der Speicherschreiboperation ist das Timing von Daten und WR so
gestaltet, dass die Zeit stabiler Daten die Zeit des aktiven Schreibimpulses WR überlappt.
Dadurch kann WR als Takt für ein Ausgabeport verwendet werden. Die Daten können sowohl flankengesteuert mit der steigenden oder fallenden Flanke von WR in das Port eingeschrieben als auch zustandsgesteuert mit WR übernommen werden.
5. Busanforderung und -Bestätigung |
![]() |
![]() |
![]() |
Busanforderungs- und -bestätigungszyklus
M beliebiger Maschinenzyklus der CPU
DMA direkter Zugriff auf das Bussystem der CPU möglich
CP Systemtakt (LT letzter Taktzustand des Maschinenzyklus M; TI erster Taktzustand des auf M folgenden Maschinenzyklus)
BUSRQ, BUSAK Bussteuersignale der CPU
A0 ... A15, D0 ... D7 MREQ, IORQ, RD, WR Belegung des Mikrorechnerbussystems durch die CPU (während DMA floatend)
Bild oben zeigt die Zeitverhältnisse für den Vorgang einer Busanforderung und der nachfolgenden Bestätigung. Zu Beginn des letzten Taktzustands eines jeden Maschinenzyklus wird die Leitung BUSRQ durch die CPU abgefragt. Wird ein aktives Signal erkannt,
dann erfolgt mit der nächsten steigenden Taktflanke, d. h. also nach Abschluss des
laufenden Maschinenzyklus, die Freigabe des Busses durch die CPU und die Aussendung des Signals BUSAK als Bestätigung. Die CPU setzt ihre Daten- und Adressleitungen sowie
die Tristatesteuerleitungen in den hochohmigen Zustand. Dadurch kann eine andere Einheit den Bus steuern und einen Datenaustausch zum Speicher und den I/O-Ports
durchführen. Dieser Vorgang wird als DMA (direkter Speicherzugriff) auf der Basis „cycle stealing" (Zyklusstehlen) bezeichnet. Im Zustand BUSAK aktiv wird mit jeder steigenden
Taktflanke die Leitung BUSRQ abgefragt und bei Inaktivität nach dem nachfolgenden T-Zustand wieder zur normalen Arbeitsweise der CPU übergegangen. Prinzipiell lässt sich
die Busanforderung über eine beliebige Zeit ausdehnen. Es muss dann jedoch beachtet werden, dass
seitens der CPU kein Refresh dynamischer Speicher mehr erfolgt. Sind derartige Speicher im System vorhanden,
muss entweder die Zeit der Busübernahme begrenzt werden, oder das externe busanfordernde Gerät muss die Speicherauffrischung
sicherstellen.
Da BUSRQ eine höhere Priorität als der nichtmaskierbare und der maskierbare Interrupt hat, wird eine Interruptanforderung durch die CPU nicht akzeptiert.
6. Interruptanforderung und -bestätigung |
![]() |
![]() |
![]() |
Im Gegensatz zur Busanforderung wird der Interrupt nur mit der letzten steigenden Taktflanke des letzten Maschinenzyklus' einer Instruktion abgefragt. Dadurch ist
sichergestellt, dass jede Instruktion erst vollständig abgearbeitet wird. Bild 3.1.9 zeigt den Zeitablauf, wenn ein INT-Signal aktiv ist und ein Interrupt bestätigt wird. Voraussetzung
dafür ist, dass softwaremäßig durch die Maskierung ein Interrupt freigegeben wurde und kein BUSRQ aktiv ist. Die Bestätigung des INT = L erfolgt durch Erzeugung eines
speziellen M1-Zyklus. Dieser Ml-Zyklus ist dadurch gekennzeichnet, dass anstelle des MREQ das IORQ aktiv wird. Die unterbrechende Einheit kann diese Kombination von M1 und
IORQ dekodieren. M1 und IORQ werden von der CPU nur bei Interrupt gleichzeitig verwendet, da ansonsten M l das Lesen eines, Befehls kennzeichnet. In dem speziellen M1-Zyklus werden von der CPU automatisch nach T2 zwei WAIT-Zustände eingeführt, um der Prioritätskettenschaltung für den Interrupt ein Einschwingen zu ermöglichen. Diese zwei
WAIT-Zustände erlauben den Ein-/Ausgabe-Einheiten festzustellen, welche Einheit die höchste Anmeldepriorität besitzt.
Bild unten zeigt, wie das Zeitdiagramm durch Einfügung eines extern erzeugten WAIT-Zustands gedehnt wird.
Bild 3.1.10 zeigt die Antwort auf einen nichtmaskierbaren Interrupt (NMI). Ein NMI-Signal wird in der CPU zwischengespeichert; es wird ein entsprechendes Flipflop gesetzt, das durch die CPU wie die INT-Leitung am Ende einer Instruktion abgefragt
wird. Das NMI-Signal hat eine höhere Priorität als INT und eine geringere als BUSRQ; es kann softwaremäßig nicht gesperrt werden. Das ist sinnvoll, um auf besonders wichtige Ereignisse sofort reagieren zu können, z. B. auf eine Havarie, einen Netzausfall.
Die NMI-Bestätigung erfolgt dadurch, daß die CPU den aktuellen Programmzählerstand im externen Stack ablegt und die weitere Programmabarbeitung an der Stelle 0066H
fortsetzt. Dort beginnt das Programm der NMI-Routine, z. B. ein Rettungsprogramm.
Im Bestätigungszyklus werden durch die CPU natürlich keine WAIT eingefügt, da keine zeitaufwendigen oder zeitkritischen externen Vorgänge aufgrund der festen Startadresse der Interruptroutine ausgeführt werden müssen.
Interruptquittierungs--Zyklus-Diagramm ohne eingefügte WAIT-States
|
![]() Interruptquittierungs-Zyklus-Diagramm mit eingefügte WAIT-States |
NMI-Quittierungszyklus-Diagramm
|
7. Rücksprung aus HALT |
![]() |
![]() |
![]() |
Die HALT-Instruktion wird im Programm ausgeführt, wenn der normale Programmablauf beendet ist bzw. wenn die CPU weitere Daten benötigt, um das Programm fortsetzen zu können. Den Haltzustand kann die CPU nur dann verlassen, wenn ein NMI-oder INT-Signal bestätigt wird. Während HALT werden von der CPU NOP-Befehle ausgeführt. Der Zweck dieser NOP-Befehle ist der Refresh dynamischer Speicher. Die NOP bestehen aus M1-Zyklen, mit dem Unterschied, dass die Daten vom Speicher durch den
Kode für NOP ersetzt werden (0011). Während dieser NOP-Befehle wird von der CPU zur Bestätigung das Signal HALT ausgegeben. Bild 3.1.11 zeigt das zugehörige Zeitverhalten.
HALT-Rücksprung-Diagramm
M1 l Befehlsholezyklus der CPU, in dem der Befehl HALT dekodiert wurde
M12 automatisch von der CPU erzeugter Maschinenzyklus mit Befehlsabarbeitung NOP zur Aufrechterhaltung der Refreshfunktion (es können beliebig viele derartige Zyklen auftreten, bis eine Interruptlinie oder RESET aktiv werden)
M13 INT- bzw. NMI-Quittierungszyklus
CP Systemtakt (T1, T2, T3, T4 Taktzustände der CPU)
NMI, INT CPU-Steuersignaleingänge
HALT CPU-Steuersignalausgang
8. Dynamische Kennwerte der Z80-CPU |
![]() |
![]() |
![]() |
Dynamsiche Kennwerte der Z80-CPU
![]() zur Hauptseite |
© Samuel-von-Pufendorf-Gymnasium Flöha | © Frank Rost im Oktober 1998 |