im Fachbereich Informatik Günther Fröhlich Band 1 ...
im Fachbereich Informatik Günther Fröhlich Band 1 ...
im Fachbereich Informatik Günther Fröhlich Band 1 ...
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Aufbau und Arbeitsweise von Rechenanlagen<br />
<strong>im</strong> <strong>Fachbereich</strong> <strong>Informatik</strong><br />
<strong>Günther</strong> <strong>Fröhlich</strong><br />
<strong>Band</strong> 1 - Rechnerarchitektur
1—2<br />
1 EINFÜHRUNG 1—7<br />
1.1 Entwurfsebenen 1—8<br />
1.2 Merkmale der Ebenen 1—9<br />
1.3 Aspekte der Rechnerarchitektur 1—9<br />
1.4 Thematische Einordnung und Ziel der Vorlesung 1—10<br />
1.5 Rechnergenerationen 1—11<br />
1.6 Aufbau der Zentraleinheit 1—12<br />
1.7 Zur vorläufigen Begriffsklärung: 1—13<br />
2 ELEMENTE DER REGISTER-EBENE 14<br />
2.1 Register 14<br />
2.1.1 einfaches Register 14<br />
2.1.2 Exkurs in die Gatterebene 15<br />
2.1.2.1 Digital-logische Schaltungen 15<br />
2.1.2.2 UND Schaltung - Konjunktion 15<br />
2.1.2.3 ODER Schaltung - Disjunktion 16<br />
2.1.2.4 EXOR Schaltung - exklusives ODER 16<br />
2.1.2.5 NOR Schaltung - Negiertes ODER 16<br />
2.1.2.6 NAND Schaltung - Negiertes UND 16<br />
2.1.2.7 NOT Schaltung - Negation, Komplement 16<br />
2.1.2.8 Flip-Flop - Beispiel der Verknüpfung logischer Funktionen 18<br />
2.1.2.9 Übung: zur Funktionsweise des Flip-Flops 18<br />
2.1.2.10 Beispiel einer physikalischen Realisierung des Schaltgatters Inverter mit Transistor 19<br />
2.1.2.11 Sind in den Computern noch Transistoren? - Zum Stand der Technik bei den Hardwarekomponenten 19<br />
2.1.3 Schieberegister 23<br />
2.1.3.1 Übung: Signaldiagramm eines 4 Bit Registers 23<br />
2.1.3.2 Übung: Multiplikation mit Schieberegister 24<br />
2.1.4 Zähler 24<br />
2.1.5 Modifizierter Zähler 25<br />
2.1.6 Ringzähler 25<br />
2.1.6.1 Übung: Funktionen eines Ringzählers 26<br />
2.1.6.2 Übung: 6 Bit Ringzähler 26<br />
2.2 Bus-System 28<br />
2.2.1 Topologie von Kommunikationspfaden 29<br />
2.2.2 Kennwerte moderner Standardbusse 31<br />
2.3 Tri-State-Register 32<br />
2.3.1 Übung: Datentransfer mit Tri-State-Registern 34<br />
2.4 Multiplexer 35<br />
2.5 Decodierer 36
2.6 Speicher 37<br />
2.6.1 ROM (read-only-memory) 38<br />
2.6.2 PROM, EPROM und EEPROM 39<br />
2.6.3 Siliziumfestplatten - die FLash-Speicher 40<br />
2.6.4 Tri-State-ROM 40<br />
2.6.5 RAM 41<br />
2.6.5.1 Bauformen für Hauptspeichermodule 41<br />
2.6.5.2 Aufbau von DRAM Bausteinen 41<br />
2.6.5.3 Beschleunigung von Blockzugriffen 42<br />
2.6.6 Tri-State RAM 43<br />
2.6.7 Ein kleiner 16 Worte * 8 Bit breiter Speicher 45<br />
2.6.8 Entwicklung der Speicherbausteine 46<br />
3 DIE ARCHITEKTUR DES SAP 48<br />
1—3<br />
3.1 Blockdiagramm des SAP 48<br />
3.2 Das Kontrollwort des SAP 49<br />
3.3 Program Counter PC (Befehlszähler) 49<br />
3.4 Akkumulator A 49<br />
3.5 Register B 49<br />
3.6 Arithmetisch-logische Einheit (ALU) 50<br />
3.6.1 Interner Aufbau der ALU 50<br />
3.6.2 Übung: Das Addierwerk 51<br />
3.7 Speicher 51<br />
3.8 Instruction Register IR (Befehlsregister) 52<br />
3.9 Output Register (Ausgabe-Register) 52<br />
3.10 Ablaufsteuerung 52<br />
4 DIE BEFEHLE DES SAP 53<br />
4.1 LDA 53<br />
4.2 ADD 53<br />
4.3 SUB 53<br />
4.4 OUT 53<br />
4.5 HLT 53<br />
4.6 Ein Beispiel-Programm 54<br />
4.6.1 Übung: Assemblierung eines Befehls 54<br />
4.6.2 Übung: ein SAP Additionsprogramm 54<br />
4.6.3 Übung: Programmierung des SAP 55
1—4<br />
5 DER MASCHINENZYKLUS 56<br />
5.1 Der Hole-Zyklus 57<br />
5.1.1 Die Adreßphase 57<br />
5.1.2 Die Inkrementphase 58<br />
5.1.3 Die Speicherphase 58<br />
5.2 Der Ausführungs-Zyklus 59<br />
5.2.1 LDA-Befehl 59<br />
5.2.1.1 T3-Phase 59<br />
5.2.1.2 T4-Phase 59<br />
5.2.1.3 T5-Phase 60<br />
5.2.2 Übung: LDA Impulsdiagramm 61<br />
5.2.3 ADD-Befehl 61<br />
5.2.3.1 T3-Phase 61<br />
5.2.3.2 T4-Phase 62<br />
5.2.3.3 T5-Phase 62<br />
5.2.4 Übung: ADD Impulsdiagramm 62<br />
5.2.5 SUB-Befehl 63<br />
5.2.6 OUT-Befehl 63<br />
5.2.6.1 T3-Phase 63<br />
5.2.6.2 T4 und T5-Phase 63<br />
5.2.7 HLT-Befehl 63<br />
5.3 Maschinenzyklus 63<br />
5.3.1 Übung: Zykluszeiten 64<br />
6 DIE ABLAUFSTEUERUNG 65<br />
6.1 Befehlsdecodierer 65<br />
6.2 Kontrollmatrix 65<br />
6.2.1 Die Signale des Hole-Zyklus: 66<br />
6.2.2 Die Signale des Ausführungszyklus: 67<br />
6.3 Takterzeugung 67<br />
6.3.1 Das Zusammenwirken mit den anderen Teilen des Rechners 68<br />
6.4 Die gesamte Ablaufsteuerung 68<br />
6.4.1 Übung: Addition 69<br />
6.4.2 Übung: Assemblierung 69<br />
6.4.3 Übung: Speicherphase 70<br />
6.4.4 Übung: der PC in der Inkrementphase 70<br />
6.4.5 Übung: Kontrollmatrix 71<br />
7 MIKROPROGRAMMIERUNG 72<br />
7.1 Das SAP Mikroprogramm 72<br />
7.2 Das Adressierungs-ROM 73<br />
7.2.1 Übung: Inhalt des Adressierungs-ROMs 74<br />
7.2.2 Beispiel: 74
1—5<br />
7.3 Der µ-Zähler 74<br />
7.4 Der Kontrollspeicher oder Mikrocode ROM 75<br />
7.4.1 Übung: Kontrollspeicher 76<br />
7.5 Veränderlicher Maschinenzyklus 76<br />
7.6 Gegenüberstellung µ-Programmierung - hardwired control 78<br />
7.6.1.1 Übung: ABL mit Mikroprogrammierung 79<br />
7.6.1.2 Übung: Erweiterung des SAP 79<br />
8 WEITERENTWICKLUNG DES SAP - DER 8085 80<br />
8.1 Beschränkungen des SAP 80<br />
8.2 Flags 80<br />
8.2.1 Übung: Das Sign-Flag 81<br />
8.2.2 Übung: Das Zero Flag 81<br />
8.2.3 Übung : Handassemblierung 82<br />
8.3 Zeitablauf bei dem Befehl STA 83<br />
8.4 Erzeugen von Sign- und Zero-Flag 83<br />
8.5 Blockdiagramm des 8085 (Intel Corporation) 84<br />
8.6 Der Befehlssatz des 8085 88<br />
8.7 Vergleich SAP - 8085 Befehlssatz 91<br />
8.8 Ein Assemblerprogramm 91<br />
8.9 Assemblieranweisungen 92<br />
8.9.1 Steuerung des Assembliervorganges 92<br />
8.9.2 Anweisungen 92<br />
9 DIE KLASSISCHE VON NEUMANN-MASCHINE 94<br />
9.1 Die Prinzipien 94<br />
10 SCHWÄCHEN DER VON NEUMANN-MASCHINE 95<br />
10.1 Der von Neumann Flaschenhals 95<br />
11 STEIGERUNG DER RECHNERLEISTUNG 97<br />
11.1 Fetch and Overlap 97<br />
11.2 Pipeline 97<br />
11.3 Erhöhung der Taktfrequenz der Prozessoren 98
1—6<br />
11.4 Erhöhung der Datenbreite der Prozessoren 98<br />
11.5 DMA - Direct Memory Access 98<br />
11.5.1 Beispiel einer parallelen Schnittstelle (ohne DMA) 99<br />
11.6 Parallelarbeit - Einprozessorsysteme 99<br />
11.7 Rückkehr zur hardwired-control: RISC Prozessoren 100<br />
11.8 Parallelarbeit - Multiprozessorsysteme 100<br />
12 LITERATUR 101
1 Einführung<br />
Rechnerarchitektur ist eine Übersetzung des englischen Begriffs computer architecture, wobei sich der Begriff architecture<br />
sowohl auf den Zusammenbau und das Zusammenspiel der Bausteine als auch auf den Aufbau und die Arbeitsweise<br />
der einzelnen Bausteine bezieht (Siehe dazu Abschnitt Aspekte der Rechnerarchitektur auf Seite 1—9).<br />
Die Grundaufgabe einer Rechenanlage ist die<br />
• Sammlung<br />
• Speicherung<br />
• Verarbeitung<br />
• Darstellung<br />
von Informationen. Das ist auf Anhieb einleuchtend, ist doch der Computer das Arbeitsmittel der elektronischen Datenverarbeitung.<br />
Aus der Frage:<br />
• welche Art von Daten liegen vor Meßdaten einer Elektronik,<br />
Buchungsaufträge, Graphiken,<br />
Sprache usw.<br />
• wie sollen sie verarbeitet werden real-t<strong>im</strong>e, interaktiv,<br />
Stapelaufträge<br />
• in welcher Form sollen sie dargestellt<br />
werden<br />
• wievielen Benutzern an welchen Orten sollen<br />
sie zur Verfügung stehen<br />
Listen, Graphiken oder<br />
Sprache<br />
Einplatzsysteme,<br />
Mehrplatzsysteme,<br />
lokaler Rechnerverbund,<br />
weltweiter Verbund usw<br />
ergeben sich unterschiedliche Anforderungen an die Rechenanlagen und damit unterschiedliche Architekturen.<br />
Rechnerarchitektur handelt also von<br />
• dem funktionellen Verhalten eines Systems<br />
Transformation Eingabe A --> Ausgabe B, oder B = f(A)<br />
• der Struktur eines Systems<br />
Funktionseinheiten und deren Verbindungen<br />
• dem Entwurf digitaler Rechner<br />
Die Aufgabe, die sich die Rechnerarchitektur gestellt hat, läßt sich wie folgt formulieren:<br />
Aus einer gegebenen Menge elementarer Funktionseinheiten mit definiertem Verhalten ist eine Struktur zu bilden, die<br />
das verlangte Verhalten eines zu entwerfenden Rechners zeigt.<br />
Zwei Architekturen sollen hier schon unterschieden werden:<br />
• Universalrechner-Architektur<br />
• Spezialrechner-Architektur<br />
Universalrechner sind Computer, die auf jedem beliebigen Gebiet einsetzbar sind, Spezialrechner sind für einen best<strong>im</strong>mten<br />
Zweck konzipiert worden. Einfache Beispiele: ein PC ist ein Universalrechner, weil er für die verschiedensten<br />
Aufgaben eingesetzt werden kann (Textverarbeitung, Tabellenkalkulation, Datenbanken, Meßdatenaufnahme, Datenfernübertragung<br />
usw.). Der Computer in der Waschmaschine, der für die Ausführung der verschiedenen Waschprogramme<br />
zuständig ist, der Computer in einem modernen Motor, der für die Zündung eingesetzt wird und ein Computer<br />
zur Prozeßsteuerung, der sofort auf Ereignisse reagieren muß, sind Spezialrechner.<br />
1—7
1—8<br />
Die Rechnerarchitektur entwickelt Konstruktionsregeln für den Aufbau von Computersystemen. Je nach Zweckbest<strong>im</strong>mung<br />
des Computers muß das übergeordnete Konzept für die Hard- und Software best<strong>im</strong>mte Forderungen möglichst<br />
opt<strong>im</strong>al erfüllen.<br />
Forderung nach wird erreicht durch<br />
• opt<strong>im</strong>aler Leistung Spezialrechner (z.B. Prozeßrechner)<br />
• hoher Ausfalltoleranz Ausfall einzelner Komponenten führt<br />
nicht zum Ausfall der Gesamtanlage;<br />
• Erweiterbarkeit des Systems Erweiterbarkeit durch verschiedene Ausbaustufen<br />
• gute Benutzbarkeit und Wartbarkeit.<br />
Architektur-Unterscheidungskriterien:<br />
Kriterium : Beispiele :<br />
Anwendungsbereich Universalrechner<br />
Spezialrechner<br />
Wissenschaftlicher Rechner<br />
Kommerzieller Rechner<br />
Materialien Relais, Röhren, Transistoren, integrierte<br />
Schaltungen<br />
Datendurchsatz:<br />
Wieviele Datenwerte<br />
und Befehle<br />
werden gleichzeitig<br />
bearbeitet ?<br />
SISD Single Instruction-Single Data<br />
SIMD Single Instruction-Multiple<br />
Data<br />
MISD Multiple Instruction-Single<br />
Data<br />
MIMD Multiple Instruction-Multiple<br />
Data<br />
Graphische Benutzeroberflächen, komplexe<br />
Betriebssysteme<br />
Ausgewogene Leistung für eine Reihe<br />
von Aufgaben<br />
Höhere Leistung für spezielle<br />
Aplikationen<br />
Hochleistungs-Gleitkomma-Einheit<br />
Unterstützung für COBOL Dez<strong>im</strong>alarithmetik),<br />
für Datenbanken und<br />
Transaktionsverarbeitung<br />
Neumann -<br />
Struktur<br />
Pipeline -<br />
Rechner<br />
--------<br />
Multiprozessor-Systeme<br />
"Die Materialien der Rechner-Architekten sind die integrierten Halbleiter-Bausteine, aus denen gewisse Komponenten<br />
realisiert werden, die wir die Hardware-Betriebsmittel nennen. Diese Komponenten - Prozessoren, Speicher, Verbindungseinrichtungen<br />
- werden zu einem Rechnersystem zusammengesetzt." 1<br />
Vorschriften für das Zusammenwirken der Komponenten eines Rechnersystems nennt man das Operationsprinzip der<br />
Rechnerarchitektur.<br />
Der Entwurf eines so komplexen Systems wie dem eines Rechners kann auf verschiedenen Ebenen betrachtet werden,<br />
abhängig von den Komponenten, die als unteilbar betrachtet werden.<br />
1.1 Entwurfsebenen<br />
Die drei wesentlichen Entwurfsebenen sind:<br />
1 Giloi W.K., Rechnerarchitektur, Springer-Verlag Berlin-Heidelberg-New York 1981 S.3
• Prozessor-<br />
• Register- und<br />
• Gatter-Ebene<br />
1.2 Merkmale der Ebenen<br />
Ebene<br />
Funktionseinheit<br />
(speichernde und<br />
verarbeitende)<br />
Prozessor CPU, Speicher E/A-<br />
Geräte<br />
Register (parallel<br />
mehrere Bits)<br />
Gatter (1 Bit Informationen)<br />
Der Tabelle läßt sich entnehmen:<br />
Register, Codierer,<br />
Decodierer<br />
Gatter,Flip-Flops<br />
• je komplexer die Komponenten: desto höher die Ebene<br />
Informationseinheit<br />
Wort-Blöcke Programme,Dateien<br />
Worte (Zahlen, Befehle,<br />
Zeichen)<br />
Bits<br />
• die Rechnerarchitektur befaßt sich insbesondere mit der Register- und Prozessorebener. 1<br />
1—9<br />
Zeiteinheit elementarer<br />
Operationen<br />
10-3 - 103sec (Prog.<br />
Ausführungszeiten)<br />
10-9 - 10-6sec<br />
10-10 - 10-8sec<br />
Um die Inhalte der Rechnerarchitektur besser ordnen und möglichst klar voneinander abgrenzen zu können, werden in<br />
dieser Veranstaltung vorwiegend die Begriffe einer Ebene benutzt: die der Registerebene.<br />
1.3 Aspekte der Rechnerarchitektur<br />
Vom Standpunkt des Rechnerarchitekten läßt sich der Entwurf eines Computers einteilen in<br />
• Befehlssatz-Architektur und<br />
• Implementierung.<br />
Diese unterteilt sich wieder in<br />
• Organisation und<br />
• Hardware<br />
Die Befehlssatz-Architektur bildet die Grenze zwischen der Hard- und Software. Auch wenn es an dieser Stelle etwas zu<br />
weit führt, muß darauf hingewiesen werden, daß es prinzipiell unterschiedliche Befehlssatz-Architekturen gibt, die sich<br />
hauptsächlich darin unterscheiden, wie die Operanden auf der CPU gespeichert werden. Die Hauptvarianten sind ein<br />
Stack, ein Akkumulator oder ein Registersatz. Die Operanden in Stack-Architekturen sind <strong>im</strong>plizit an der Spitze des<br />
Stack enthalten; in einer Akkumulator-Architektur ist ein Operand <strong>im</strong>plizit der Akkumulator. Universalregister-<br />
Architekturen haben nur explizite Operanden - entweder Register oder Speicherplätze.<br />
1 Vgl. Hayes, John P., Computer Architecture and Organisation, McGraw-Hill International Book Company, S. 70 f
1—10<br />
Bereitgestellter temporärer<br />
Speicher<br />
Beispiele Explizite Operanden<br />
pro ALU-Befehl<br />
Ziel für Ergebnisse Art des Zugriffs zu<br />
expliziten Operanden<br />
Stack B5500, HP 3000/70 0 Stack Push und Pop zum<br />
oder vom Stack<br />
Akkumulator PDP-8, Intel 8085,<br />
Motorola 6502 (z.B.<br />
in C64, Apple 2...)<br />
Registersatz IBM 360, DEC VAX<br />
und alle heute aktuellen<br />
Prozessoren<br />
1 Akkumulator Laden/Speichern<br />
Akkumulator<br />
2 oder 3 Register oder Speicher Laden/Speichern von<br />
Registern oder dem<br />
Speicher.<br />
Die vergleichsweise einfache Akkumulator-Architektur war bis in die 70ger Jahre aktuell. Der Intel 8086 sollte Sourcecode-kompatibel<br />
zum 8085 sein. Daraus ergab sich für die gesamte Intel 80x86 Reihe eine Mischform zwischen Akkumulator-<br />
und Registersatz-Architektur. Wenn Sie diesen Abschnitt überhaupt nicht verstanden haben, ist das nicht weiter<br />
schl<strong>im</strong>m. Sie können das sicherlich am Ende des Semesters besser einordnen (also, später nochmal die Einleitung lesen!).<br />
Es mußte aber thematisiert werden für die Zielbest<strong>im</strong>mung der Vorlesung <strong>im</strong> nächsten Abschitt.<br />
Der Begriff Organisation beinhaltet Aspekte wie Speichersystem, Busstruktur und den internen CPU-Entwurf. Es gibt<br />
Maschinen mit gleicher Befehlssatz-Architektur, aber unterschiedlicher Organisation (z.B. VAX 11/780 und VAX<br />
8600). Hardware kennzeichnet die Spezifika der Realisierung einer Maschine, wie detailierter Logikentwurf und und<br />
Gehäusetechnologie 1 .<br />
1.4 Thematische Einordnung und Ziel der Vorlesung<br />
Ziel dieser einführenden Vorlesung kann es nicht sein, möglichst vollständig den Stand der modernen Rechnerarchitektur<br />
abzuhandeln. Sie will vielmehr die Grundlagen für das Verständnis von Aufbau und Wirkungsweise digitaler Rechner<br />
auf Registerebene legen. Dazu bietet es sich an, den denkbar einfachsten Computer ( den SAP, s<strong>im</strong>ple as possible)<br />
eingehend darzustellen. Dabei werden alle oben genannten Aspekte des Rechnerentwurfes berücksichtigt. Im Sinne der<br />
Einfachheit handelt es sich be<strong>im</strong> SAP um eine Akkumulator-Architektur mit lediglich fünf Befehlen. Bei der Entwicklung<br />
der Funktionsweise des SAP werden an vielen Stellen Bezüge zu aktuellen Computern und Computerbausteinen<br />
hergestellt. Deshalb mündet die Behandlung des SAP anschließend in eine Beschreibung des 8085, eine Akkumulator-<br />
Maschine, die Industriestandard erreichte und verwand ist mit dem 8086, der in „Maschinenorientiertes Programmieren“<br />
an der Fachhochschule eingesetzt wird. Auch werden Themen der Gatterebene angerissen; einerseits um die Ebenen klar<br />
voneinander trennen zu können, andererseits um entsprechende Funktionen des SAP zu erläutern.<br />
Die thematische Einordnung der Vorlesung läßt sich mit folgendem Bild verdeutlichen:<br />
1 Vergl. Hennessy, Patterson Rechnerarchitektur -Analyse Entwurf, Implementierung, Bewertung, Vieweg 1994 S.13f
Gatter<br />
Ebene<br />
Betrachtungsebene<br />
Prozessor<br />
Ebene<br />
Register<br />
Ebene<br />
Kap. 8<br />
Kap. 2-7<br />
Kap. 2,6,8<br />
Kap. 11<br />
SISD SIMD MISD MIMD<br />
Rechnerklassifikation nach Flinn<br />
1—11<br />
Auf der Gatterebene werden die aktuellen Bauteile erläutert, die mit den integrierten Schaltungen zur Verfügung stehen.<br />
Bezüge zu älteren physikalischen Realisierungen werden aber auch hergestellt.<br />
Am SAP - ein Min<strong>im</strong>alsystem der Kategorie SISD- , wird das bis heute <strong>im</strong>mer noch gültige grundlegende Operationsprinzip<br />
entwickelt. Dabei werden insbesondere Zusammenhänge und funktionelles Verhalten digitaler Einheiten dargestellt.<br />
In Kapitel 9 wird dieses in den Prinzipien der von Neumann-Maschine systematisiert.<br />
Auf Grundlage von Kapitel „Der von Neumann Flaschenhals“ können die Schwächen dieser Architektur diskutiert<br />
werden. Das folgende Kapitel „Steigerung der Rechnerleistung“ stellt Architektur-Maßnahmen vor, um die Wirkung des<br />
von Neumann-Flachenhalses zu min<strong>im</strong>ieren.<br />
1.5 Rechnergenerationen<br />
Seit 1952 gab es Tausende neuer Rechner unterschiedlichster Technologie und mit breit gefächerten Eigenschaften. Um<br />
den Überblick über die Entwicklungen zu erleichtern, hat die Industrie Gruppen von Rechnern in Generationen eingeordnet.<br />
Die Einteilung erfolgte oft nach der Implementierungstechnik, wie in der folgenden Tabelle gezeigt wird. Typischerweise<br />
währt jede Generation 8-10 Jahre, wobei Dauer und Beginn besonders neuerer Generationen ziemlich umstritten<br />
sind. Einigkeit besteht darin, daß die erste Generation die kommerziellen elektronischen Rechner sind, <strong>im</strong> Unterschied<br />
zu den vorangegangenen mechanischen oder elektromechanischen Maschinen.<br />
.
1—12<br />
Generation Jahre Technologie Neuartiges Produkt Neue Firmen und Maschinen<br />
1 1950-19959 Röhren Kommerzielle elektronische<br />
Rechner<br />
IBM 701 UNIVAC1<br />
2 1960-1968 Transistoren Billige Rechner Burroughs 6500, NCR, CDC<br />
6600, Honeywell, IBM 360<br />
3 1969-1977 Integrierte Schaltungen Minicomputer 50 neue Firmen: DEC PDP-11,<br />
Data General Nova<br />
4 1978-199? LSI und VLSI PC und Workstation VAX 11/780, Apple II, Aplollo,<br />
SUN2<br />
5 199?-???? Parallelverarbeitung Multiprozessoren<br />
1.6 Aufbau der Zentraleinheit<br />
Anhand des folgenden Blockschaltbildes eines Taschenrechners sollen einige Begriffe zur Erläuterung der Funktionsweise<br />
eines Computers eingeführt, aber noch nicht wirklich erklärt werden.<br />
?<br />
Blockschaltbild eines Taschenrechners<br />
Was passiert eigentlich bei der Addition zweier Zahlen mit Hilfe eines Taschenrechners ?<br />
• die 1. Zahl (z.B. 5) wird mit der Tastatur eingegeben. Jede einzelne Taste ist über eine Leiterbahn mit dem Speicher<br />
verbunden. Wird die Taste ´5´ gedrückt, wird in einem best<strong>im</strong>mten Teil des Speichers eine Verschlüsselung (Codierung)<br />
abgerufen und die binäre Information landet <strong>im</strong> Speicher. Das Steuerwerk sorgt dafür, daß die ´5´ über die<br />
Ausgabecodetabelle umgewandelt und an die Ausgabeeinheit weitergeleitet und so <strong>im</strong> Display sichtbar wird.<br />
• das Kommando ´+´ wird eingegeben.
1—13<br />
• Mit der Codetabelle wird das Pluszeichen ebenso in eine binäre Information gewandelt wie vorher die ´5´. Das Steuerwerk<br />
interpretiert die Information als Befehl und nicht als Operand.<br />
• die 2. Zahl, (z.B. 2) wird eingegeben, vom Steuerwerk decodiert und <strong>im</strong> Speicher abgelegt und zwar so, daß später<br />
wieder eindeutig auf die Zahl zugegriffen werden kann. Wie <strong>im</strong> ersten Schritt wird wieder die Ausgabeeinheit aktiviert,<br />
also die eingetippte Zahl angezeigt.<br />
• die Taste ´=´ wird betätigt. Decodierung wie zuvor. Wird jetzt vom Steuerwerk als Startsignal interpretiert, die Rechenoperation<br />
auszuführen. Das Steuerwerk sorgt jetzt dafür, das ein Programm aus dem Programmspeicher aktiviert<br />
wird, um die beiden Zahlen <strong>im</strong> Rechenwerk zu addieren.<br />
Zu diesem Zweck werden die Operanden aus dem Datenspeicher an das Rechenwerk über einen Datenbus (Datenleitungen)<br />
geleitet. Das Ergebnis wird <strong>im</strong> Datenspeicher abgelegt und das Steuerwerk leitet das Ergebnis an die Ausgabeeinheit.<br />
Schon diese sinnfällige und formale Betrachtung eines Computers führt zum ersten Prinzip der Von Neumann Maschine<br />
(vgl. Kapitel 9):<br />
1. Der Rechner besteht zumindest aus Speicher, Rechenwerk, Steuerwerk und Ein/Ausgabegeräten (Min<strong>im</strong>alsystem).<br />
1.7 Zur vorläufigen Begriffsklärung:<br />
? Was ist ein Mikroprozessor ?<br />
Ein Mikroprozessor ist die Zusammenfassung des Rechenwerkes und des Steuerwerkes in einem Baustein. Weitere Erklärungen<br />
folgen <strong>im</strong> Abschnitt: Beispiel einer physikalischen Realisierung des Schaltgatters Inverter mit Transistor.<br />
? Was ist ein Mikrocomputer ?<br />
Wie der Name schon sagt, ist es ein kleiner Computer. Genauer gesagt ist es ein Computer, der einen Mikroprozessor,<br />
mehrere Speicher- und Ein/Ausgabe-Bausteine enthält. 1<br />
1 Vgl. Malvino, Digital Computer Electronics, An Introduction to Microcomputers, THM New Delhi, S.7
2 Elemente der Register-Ebene<br />
In diesem Kapitel werden vorwiegend Elemente (Funktionseinheiten) vorgestellt, die zur Erstellung des SAP erforderlich<br />
sind.<br />
2.1 Register<br />
Ein Register besteht aus einer Menge von Speicherelementen, die zu einer Einheit zusammengefaßt sind. In der einfachsten<br />
Form dient ein Register nur der Speicherung von einem binären Wort (mehrere Bits). Daneben gibt es Register, die<br />
die gespeicherten Bits nach rechts oder links verschieben können und Register, die zählen können.<br />
2.1.1 einfaches Register<br />
Einfaches Register<br />
Flankentriggerung<br />
Das Register kann ein Byte vom Eingang X übernehmen. Es ist steuerbar, wann genau die Übernahme dieser am Eingang<br />
anliegenden Daten stattfinden soll:<br />
Mit Hilfe der Steuersignale LOAD und CLK.<br />
LOAD = L : Eingangsdaten werden nicht übernommen,<br />
LOAD = H : Eingangsdaten werden bei der nächsten positiven Taktflanke von CLK übernommen.
Wenn dann LOAD wieder auf L geht, hat das X keinen Einfluß mehr auf das gespeicherte Byte. Das folgende Impulsdiagramm<br />
zeigt eine mögliche Signalfolge an den beiden Steuereingängen 1<br />
H<br />
CLK L<br />
steigende fallende<br />
Taktflanke Taktflanke<br />
t i<br />
Impulsdiagramm eines Ladevorgangs<br />
Die Daten X, die zum Zeitpunkt ti anliegen, werden in das Register übernommen.<br />
Zeitachse t<br />
Bedingt durch die interne Funktionsweise der Register (Hardware-Eigenschaft der Register), können die Daten<br />
am Eingang nur dann sicher übernommen werden, wenn<br />
• die am Eingang anliegenden Daten und das Load-Signal bereits für eine gewisse Zeit vor der schaltenden Flanke<br />
anliegen (setup-t<strong>im</strong>e)<br />
• die am Eingang anliegenden Daten und das Load-Signal noch für eine gewisse Zeit nach der schaltenden Flanke<br />
anliegen (hold-t<strong>im</strong>e).<br />
Manche Register besitzen zusätzlich einen Steuereingang CLR. Mit CLR = H wird der gespeicherte Inhalt gelöscht indem<br />
alle Bits auf 0 gesetzt werden. Die Steuereingänge LOAD und CLK wirken nur bei CLR = L.<br />
2.1.2 Exkurs in die Gatterebene<br />
Die Speicherfunktion eines Registers soll exemplarisch auf der Ebene unterhalb der Registerebene, der logischen Gatterebene,<br />
betrachtet werden. Dazu werden <strong>im</strong> folgenden einige digital-logische Schaltungen erläutert.<br />
tion. Im folgenden werden die logischen Grundfunktionen<br />
dargestellt.<br />
2.1.2.1 Digital-logische Schaltungen<br />
Alle physikalische digitale Schaltungen lassen sich mit<br />
Hilfe von logischen Funktionen beschreiben. Betrachtet<br />
man digitale Schaltungen auf der Ebene der logischen<br />
Funktionen, hat man den Vorteil, von der technischen<br />
Verwirklichung der Schaltung absehen zu können, denn<br />
auf der Ebene der logischen Funktionen ist es unerheblich,<br />
ob Relais, Transistorschaltungen oder integrierte<br />
Schaltungen eingesetzt werden. Ein Schaltgatter ist<br />
die physikalische Realisierung einer logischen Funk-<br />
1 Impulsdiagramme oder Zeitdiagramme sind die häufigst verwendete Form der Visualisierung und Beschreibung von elektrischen Signalen. Sie<br />
ähneln sehr den Zeitverläufen, von Signalen auf einem Logic Analyzer. Das Zeitdiagramm erlaubt es, sowohl einzelne Signalzustände als auch<br />
Zeitbedingungen und Kausalzusammenhänge zwischen Signalen zu erkennen.<br />
2.1.2.2 UND Schaltung - Konjunktion<br />
15<br />
Der Ausgang einer UND-Schaltung ist 1, wenn beide<br />
Eingänge 1 sind.<br />
Wahrheitstafel:
16<br />
X<br />
Y<br />
x y z = x ^ y<br />
0 0 0<br />
0 1 0<br />
1 0 0<br />
1 1 1<br />
Symbol:<br />
&<br />
2.1.2.3 ODER Schaltung - Disjunktion<br />
Der Ausgang einer ODER-Schaltung ist 1, wenn mindestens<br />
ein Eingang 1 ist.<br />
X<br />
Y<br />
Wahrheitstafel:<br />
x y z = x v y<br />
0 0 0<br />
0 1 1<br />
1 0 1<br />
1 1 1<br />
Symbol:<br />
�1<br />
2.1.2.4 EXOR Schaltung - exklusives<br />
ODER<br />
Der Ausgang einer EXOR-Schaltung ist 1, wenn genau<br />
ein Eingang 1 ist.<br />
Wahrheitstafel:<br />
Z<br />
Z<br />
x y z = x xor y<br />
0 0 0<br />
0 1 1<br />
1 0 1<br />
1 1 0<br />
Symbol<br />
X<br />
Y<br />
=1<br />
2.1.2.5 NOR Schaltung - Negiertes ODER<br />
Der Ausgang einer NOR-Schaltung ist 1, wenn beide<br />
Eingänge 0 sind.<br />
X<br />
Y<br />
Wahrheitstafel:<br />
x y z= x nor y<br />
0 0 1<br />
0 1 0<br />
1 0 0<br />
1 1 0<br />
Symbol:<br />
�1<br />
2.1.2.6 NAND Schaltung - Negiertes UND<br />
Der Ausgang einer NAND-Schaltung ist 0, wenn beide<br />
Eingänge 1 sind.<br />
X<br />
Y<br />
Wahrheitstafel:<br />
x y z = x nand<br />
y<br />
0 0 1<br />
0 1 1<br />
1 0 1<br />
1 1 0<br />
Symbol:<br />
&<br />
2.1.2.7 NOT Schaltung - Negation, Komplement<br />
Der Ausgang ist das Gegenteil des Eingangs.<br />
Z<br />
Z<br />
Z
Wahrheitstafel:<br />
x not x<br />
0 1<br />
1 0<br />
Symbol:<br />
X X<br />
17
18<br />
2.1.2.8 Flip-Flop - Beispiel der Verknüpfung logischer Funktionen<br />
Betrachten wir die Grundfunktion eines Registers: Speicherung eines Dateneingangs solange, wie es erforderlich ist. Ein<br />
8 Bit Register besteht aus 8 parallel geschalteten Elementen, die entweder eine 0 oder eine 1 speichern können. Ein solches<br />
Element heißt Flip-Flop. Es kann wie folgt aufgebaut werden:<br />
Schaltung eines Flip-Flops<br />
Das Flip-Flop hat die zwei Eingänge Steuerung (St) und Daten ein (Din) und einen Ausgang Daten aus (Dout).<br />
Wenn Steuerung angeschaltet wird (d.h. auf 1 gesetzt wird), dann ist Daten aus gleich Daten ein. Wenn nun Steuerung<br />
abgeschaltet wird (d.h. auf 0 gesetzt wird), kann Daten aus nicht wechseln, egal wie oft Daten ein wechselt. Deshalb<br />
behält das Flip-Flop, nachdem Steuerung ausgeschaltet ist, den letzten Wert, den Daten ein hatte, als Steuerung noch<br />
gleich 1 war.<br />
2.1.2.9 Übung: zur Funktionsweise des Flip-Flops<br />
Überprüfen Sie die Funktionsweise des Flip-Flops, indem Sie die folgende Tabelle vervollständigen.<br />
Vorraussetzung: In Daten aus steht eine 0<br />
St : Steuerung, entspricht dem LOAD-Signal des Registers<br />
DE : Daten ein<br />
DA : Daten aus<br />
Takt ST DE Gatter 1 Gatter 2 Gatter 3 Gatter 4 Gatter 5 6 = DA<br />
1 1 1<br />
2 0 1<br />
3 0 0<br />
4 1 0
2.1.2.10 Beispiel einer physikalischen Realisierung des Schaltgatters Inverter mit Transistor<br />
1<br />
Kurze Funktionsbeschreibung eines npn-Transistors:<br />
Ein Transistor ist ein Bauteil mit drei Zuleitungen: Wenn eine Spannung an der Basis anliegt, kann auch Strom vom<br />
Kollektor zum Emitter fließen. Liegt an der Basis keine Spannung an, ist der Stromfluß vom Kollektor zum Emitter<br />
unterbrochen. Ein Transistor ist ein elektronisch gesteuerter Schalter.<br />
Ein Invertiergatter mit Transistor sieht folgendermaßen aus:<br />
Ist x = 0, ist der Stromfluß vom Kollektor zum Emitter (Erdung) unterbrochen, also f(x) = 1. Im umgekehrten Fall (x=1)<br />
fließt ein Kollektor-Emitter Strom, der Ausgang F(x) n<strong>im</strong>mt den Wert 0 an.Der Wertebereich eines Transistors beträgt 2<br />
bis 5 V für logisch 1, 0 bis 0.5 V für 0 in der positiven Schaltungslogik.<br />
2.1.2.11 Sind in den Computern noch Transistoren? - Zum Stand der Technik bei den Hardwarekomponenten<br />
Ab 1959 wurden Computer auf der Basis von Halbleiterschaltungen mit einzelnen Transistoren, Dioden, Widerständen<br />
und Kondensatoren gebaut. Öffnet man heutzutage einen Computer, sucht man vergebens nach solchen (dem einen oder<br />
anderen) bekannten Bausteinen. Vielmehr sieht man diverse Platinen mit sogenannten Chips, diesen flachen, rechteckigen<br />
Bausteinen mit kleinen Metallfüßchen. In diesen Chips sind mehrere Transistorschaltungen integriert. Eine Grundlage<br />
dafür bildet heute häufig die Metalloxidschalttechnik (MOS), bei der die Transistoren auf einem gemeinsamen Substratplättchen<br />
mit den drei Schichten Metall, Siliziumoxid und Silizium aufgebaut werden. Wieviele Transistoren bilden<br />
eine in einem Chip integrierte Schaltung (IC = integrated circuit)? Auch das hat sich seit der Einführung der MOS Technologie<br />
(1969) ständig verändert. Je nachdem, wieviele Schaltungen in einem Chip integriert sind, spricht man von:<br />
1 Entnommen dem Script ´Rechnerarchitektur´ von Johannes Arz, 1991, S.21<br />
19
20<br />
Bezeichnung Anzahl Schaltelemente<br />
Small Scale Integration<br />
< 25<br />
SSI<br />
Medium Scale Integration<br />
< 210<br />
MSI<br />
Large Scale Integration<br />
< 215 z.B. Intel 8080<br />
LSI<br />
Very Large Scale Integration < 220 z.B. Intel 8086 -<br />
VLSI<br />
80386<br />
Motorola 680xx<br />
Familie<br />
Ultra Large Scale Integration > 220 z.B. Intel<br />
ULSI<br />
80486<br />
Seit Anfang der siebziger Jahre entwickelt sich das Gebiet der VLSI-Design in einem nahezu unvergleichlichen Innovationstempo.<br />
Das läßt sich am besten durch die Zunahme der Integrationsdichte ausdrücken: jeweils alle drei Jahre vervierfacht<br />
sich die Zahl der auf einem Chip integrierten Komponeneten.<br />
Die typischen heute eingesetzten VLSI-Bausteine sind der 16 MBit-DRAM-Speicherchip mit 35 bis 50 Millionen Einzelkomponenten<br />
und CPU-Chips, die wegen der höheren Architektur-Verbindungs- und Layout-Komplexität nur bis zu<br />
16 Millionen Komponenten enthalten. Die folgende Abbildung stellt grob die Entwicklungskurve dar, die dieser Zunahme<br />
der Integrationsdichte zugrundeliegt. (Moore´s Law). Wenn allein die Möglichkeiten der schon heute verwendeten<br />
Technologie ausgeschöpft werden, ist bis zum Jahr 2010 nicht mit einem Abflachen der Kurve zu rechnen. 1<br />
1 Vgl. Christian Märtin, Rechnerarchitektur, Struktur, Organisation, Implementierungstechnik, Hanser Studienbücher der <strong>Informatik</strong>, 1994, S. 74
Moores Law zur Entwicklung der VLSI-Integrationsdichte<br />
Neben der bereits erwähnten MOS-Technologie gibt es noch alternative Schaltkreisfamilien, mit denen die logischen<br />
Funktionen technisch realisiert werden können:<br />
21
22<br />
Bezeichnung<br />
Beschreibung Besonderheit Integrationsgrad<br />
• RTL Widerstand-Transistor Logik<br />
Gatter sind durch Widerstände<br />
und Transistoren realisiert<br />
• DL Diodenlogik<br />
Gatter sind durch Widerstände<br />
und Dioden realisiert<br />
• DTL Dioden-Transistor-Logik<br />
Gatter sind durch Widerstände<br />
Dioden und Transistoren realisiert.<br />
• TTL Transistor-Transistor Logik<br />
Gatter sind durch Widerstände<br />
und Transistoren realisiert. TTL<br />
ist eine Weiterentwicklung der<br />
DTL.<br />
• ECL Emittergekoppelte Logik<br />
Gatter sind durch Widerstände<br />
und Transistoren realisiert<br />
• MOS Metalloxydschalttechnik<br />
Der wesentliche Nachteil der Gatter in<br />
RTL ist ihre Belastungsabhängigkeit,<br />
d.h. die Veränderung des Schaltverhaltens<br />
bei Verbindung des Ausgangs mit<br />
den Eingängen anderer Gatter. Deshalb<br />
hat sich die Widerstand-Transistor-Logik<br />
nicht durchgesetzt.<br />
Vorteil gegenüber DTL:<br />
• kürzere Schaltzeit<br />
• geringerer Platzbedarf<br />
• Ausnutzung der Stromverstärkung<br />
der Transistoren<br />
Schaltzeit -<br />
Gatterlaufzeit<br />
25...30 ns.<br />
10 ns<br />
Verwendet bipolare Transistoren 10K ..200K 150...500 ps bei<br />
Kanallängen von<br />
0,3 µ bis 0,8 µ 1<br />
Ermöglicht besonders hohe Integrationsdichte<br />
MOS-Transistor gehört zur Gruppe der<br />
Feldeffekttransistoren<br />
Geringe Verlustleistung, also geringe<br />
Wärmebildung.<br />
Die CMOS-Technologie bildet eine<br />
Kombination von PMOS und NMOS<br />
Technologie und hat von allen dreien<br />
den geringsten Stromverbrauch.. CMOS-<br />
Schaltkreise sind zur Zeit in der Computer-Technik<br />
am weitesten verbreitet.<br />
BiCMOS (bipolar und CMOS)ist eine<br />
Verbindung von ECL und CMOS auf<br />
einem Siliziumchip. Hohe Integrationsdichte,<br />
geringer Leistungverbrauch und<br />
100K..2M<br />
200...1000 ps<br />
bei Kanallängen<br />
von 0,3µ bis 0,8<br />
µ<br />
1 1 µ ist ein Mikrometer und entspricht einem Tausendstel Mill<strong>im</strong>eter. Er ist die übliche Maßeinheit für die Breite der Leiterbahnen auf modernen,<br />
hochintegrierten Schaltungen wie Mikroprozessoren, Speicherbausteinen etc. Je dünner die Leiterbahnen sind, desto kleiner ist die Verlustleistung<br />
(Wärme) und desto kürzer sind die Schaltzeiten so daß der Integrationsgrad auf einem Chip entsprechend steigen und oder die Fläche. sinken kann.<br />
Kleinere Chips aber heißen: preiswertere Herstellung mit geringer Ausschußrate. Die Halbleiterhersteller arbeiten ständig daran, die Leiterbahnen<br />
noch schmaler zu machen. Daher läßt sich an der Leiterbahnbreite auch die Aktualität eines Chips abschätzen.
• GaAs Schaltkreise mit Galiumarsenid-<br />
Transistoren<br />
kurze Schaltzeit.<br />
23<br />
10K...200K 50...200 ps<br />
Jetzt ist es mal wieder genug mit der Gatterebene - zurück zu den Registern, zur Erläuterung des nächsten Register-Typs:<br />
2.1.3 Schieberegister<br />
Ein Schieberegister kann die gespeicherten Bits nach links (und/oder nach rechts) verschieben.<br />
Schieberegister<br />
CLR = H bewirkt, daß das gesamte Register auf 0 gesetzt wird. Wenn CLR wieder auf L geht, können die folgenden<br />
Steuersignale wirken.<br />
• SHL = H : mit jeder positiven Taktflanke werden die gespeicherten Bits um eine Stelle nach links verschoben; das<br />
rechte Bit wird dem Eingang Din entnommen. Auf diese Weise kann das ganze Register mit mehreren Takt<strong>im</strong>pulsen<br />
über den Din-Eingang seriell geladen werden.<br />
• LOAD = H: das Register wird bei der nächsten positiven Taktflanke mit dem anliegenden X geladen. Mit einem<br />
eventuell vorhandenen SHR-Eingang können Rechtsverschiebungen bewirkt werden.<br />
SHL und LOAD dürfen nicht gleichzeitig auf H gesetzt werden!<br />
2.1.3.1 Übung: Signaldiagramm eines 4 Bit Registers<br />
Es ist für ein 4 Bit Register das Diagramm für die gegebene Signalfolge zu vervollständigen: welche Werte<br />
nehmen die Datenausgänge Q 1 - Q 4 in den Phasen t2 und t3 an? Beachten Sie, daß der Dateneingang X 1 -X 4 nicht angegeben<br />
ist !
24<br />
___________<br />
SHL ___| |___________________________<br />
_____<br />
CLR ___________________________| |_________<br />
____<br />
LOAD ________________| |_____________________<br />
H __ __ __ __ __<br />
CLK L __| |__| |__| |__| |__| |____> Zeit t<br />
| t0 | t1 | t2 | t3 |<br />
_____<br />
Din ___| |______________________________________<br />
_____<br />
Q1 ______| |_________________________________<br />
Q2 _______________________________________________<br />
______<br />
Q3 |________________________________________<br />
_____<br />
Q4 ______| |_________________________________<br />
Q4 Q3 Q2 Q1<br />
----------------------<br />
initial 0 1 0 0<br />
nach 1. aufst. Flanke 1 0 0 1<br />
nach 2. aufst. Flanke ......................<br />
nach 3. aufst. Flanke ......................<br />
2.1.3.2 Übung: Multiplikation mit Schieberegister<br />
Der Inhalt eines 8 Bit Schieberegisters betrage binär 0000 0100. Welche Operationen müssen ausgeführt<br />
werden, um den Registerinhalt mit 8 zu multiplizieren ?<br />
2.1.4 Zähler<br />
Ein Zähler zählt die Anzahl der eintreffenden Takte. Er zählt die Takte nur dann, wenn das Signal COUNT gesetzt ist.<br />
Zählerregister
Wenn COUNT = L : keine Änderung des gespeicherten Zählerstandes<br />
Wenn COUNT = H : der Zähler wird bei jeder abfallenden Taktflanke<br />
um 1 erhöht.<br />
2.1.5 Modifizierter Zähler<br />
SIG/ bezeichnet das zu SIG komplementäre Signal.<br />
o----- CLR/ ist aussagelogisch die doppelte Verneinung von<br />
Modifizierter Zähler<br />
----- CLR und hat deshalb die selbe Wirkung, d.h. die Funktion wird zum gleichen Zeitpunkt ausgelöst.<br />
Dieser Zähler wird bei CLR/ = L auf 0 gesetzt.<br />
Der Takteingang ist bei abfallender Flanke aktiv; d.h. bei der nächsten negativen Taktflanke von Signal CLK/ wird der<br />
Zähler um 1 erhöht, wenn COUNT = H ist.<br />
2.1.6 Ringzähler<br />
Ein Ringzähler enthält ein Wort, in dem <strong>im</strong>mer nur ein Bit gesetzt ist, also genau eine Ausgangsleitung aktiv ist.<br />
6-Bit Ringzähler<br />
Wirkungsweise Bei jeder abfallenden Taktflanke werden seine Bits um eine Stelle nach links verschoben.<br />
Das links herausfallende Bit wird rechts wieder eingespeist, so daß man besser von einer<br />
Links-Rotation (und nicht -Verschiebung) sprechen sollte.<br />
Mit dem Signal CLR/ = L bekommt der Ringzähler den initialen Inhalt<br />
Q = 0001<br />
25
26<br />
Wenn dann CLR/ wieder auf H geht, bewirken aufeinanderfolgende Takt<strong>im</strong>pulse Linksrotationen.<br />
Die nächste abfallende Taktflanke verschiebt das Bit auf der MSB- in die LSB-Position; alle übrigen Bits werden um<br />
eine Stelle nach links verschoben.<br />
LSB : Least Significant BIT - das unterste, niederwertigste Bit.<br />
MSB : MOST Significant BIT - das oberste, hochwertigste Bit.<br />
Die Inhalte sind also nacheinander:<br />
Anmerkung<br />
Q = 0010<br />
....<br />
....<br />
....<br />
....<br />
Der Ringzähler wird mit dem CLK-Signal, der (modifizierte) Zähler_2 hingegen mit dem dazu komplementären<br />
CLK/-Signal versorgt.<br />
Dieser Unterschied (von einer halben Taktperiode) ist gewollt; er wird be<strong>im</strong> Zusammenspiel der Komponenten be<strong>im</strong><br />
Aufbau des SAP erläutert.<br />
2.1.6.1 Übung: Funktionen eines Ringzählers<br />
Wann wird rotiert?<br />
Wann wird mit 1 initialisiert?<br />
Wie verhält sich der folgende Ringzähler ?<br />
2.1.6.2 Übung: 6 Bit Ringzähler<br />
Der 6-Bit-Ringzähler von Seite 25 sei mit einem Takt der Frequenz 1 kHz verbunden. CLR/ werde auf L<br />
und dann auf H gesetzt. Wie sieht das Impulsdiagramm für die Ausgänge Ti aus, in Abhängigkeit vom CLK-Signal ?
H __ __ __ __ __<br />
| v | v | v | v | v<br />
CLK L __| |__| |__| |__| |__| |____> Zeit t<br />
_____<br />
T1 |__________________________________________<br />
T2 _______________________________________________<br />
T3 ______________________________________________<br />
T4 _______________________________________________<br />
T5 _______________________________________________<br />
T6 _______________________________________________<br />
T1 - T6 bilden den Inhalt des 6 Bit Ringzählers<br />
27
28<br />
2.2 Bus-System<br />
Jetzt sind einige Registertypen bekannt. Sie sollen nun in einem System verbunden werden.<br />
Erinnerung an den Taschenrechner: Die Operanden werden aus dem Datenspeicher an das Rechenwerk über eine Datenleitung,<br />
einen Datenbus geleitet.<br />
Ein Bus besteht aus einer Menge von Leitungen, die von mehreren Komponenten als gemeinsamer Weg für den Transfer<br />
von Daten genutzt werden; über ein Bussystem werden die Daten den einzelnen Komponenten zur Verfügung gestellt.<br />
Ein Bus hat weder eine speichernde noch eine verarbeitende Eigenschaft.<br />
Beispiel: Im folgenden Beispiel werden 3 bisher bekannte Registern über einen BUS miteinander verbunden.<br />
Verbindung von drei Registern über einen Bus<br />
In den nächsten fünf Taktzyklen liegen folgende Steuersignale an:(der Zähler ist mit 0 initialisiert)<br />
Inhalt von<br />
C A B Bus<br />
C C , L A , L B 1 1 1 1<br />
C C , SHL A , L B 2 2 2 2<br />
C C , SHL A , L B 3 4 4 4<br />
C C , L B 4 4 4 4<br />
C C , L B 5 4 4 4<br />
Das Problem wird einigermaßen deutlich: Der letzte Baustein <strong>im</strong> Bussystem (hier Register B) sieht <strong>im</strong>mer die Information,<br />
die ein vor ihm liegender Baustein auf den Bus schickt. Wenn L B = H, dann erhält B den Inhalt von A oder von C.<br />
Um zu verhindern, daß jedes Register unkontrolliert seine Daten auf den Bus gibt, verwendet man sogenannte<br />
Tri-State-Register.
2.2.1 Topologie von Kommunikationspfaden<br />
Die Verbindung zwischen den einzelnen Komponenten eines Rechners kann jedoch nicht nur durch einen Bus, sondern<br />
auf sehr unterschiedliche Weise realisiert sein.. Das folgende Bild zeigt die gebräuchlichsten Varianten von Kommunikationspfaden:<br />
vollständige Vernetzung<br />
Ring<br />
Sternverbindung<br />
Vollständige Vernetzung Das einfachste Verbindungskonzept ist die vollständige Vernetzung. Es wird jede Komponente<br />
mit jeder anderen Komponente über jeweils l Leitungen verbunden. Der Nachteil<br />
bei dieser Topologie: je mehr Leitungen l verwendet und je mehr Komponenten<br />
verknüpft werden, desto höher ist der Hardwareaufwand und damit der Preis. Vorteil:<br />
max<strong>im</strong>ale Übertragungsrate wegen der Parallelität (jede Komponente kann mit einer<br />
anderen Komponente zu einem Zeitpunkt kommunizieren)<br />
Sternverbindung Preiswertere Alternative zur vollständigen Vernetzung, bei der alle Komponenten an<br />
einen speziellen zentralen Knoten angeschlossen sind, der eine Verteilerfunktion erfüllen<br />
muß. Je nach Komplexität des zentralen Verteilers können bei k Komponenten bis<br />
zu k/2 Knoten gleichzeitig Transferoperationen ausführen.<br />
Ring Die Ringstruktur benötigt nur k Verbindungen, jede Komponente hat aber nur einen<br />
linken und einen rechten Nachbarn, mit der sie kommunizieren kann. Jeder Knoten muß<br />
Nachrichten, die nicht für ihn best<strong>im</strong>mt sind, weiterreichen können. Jede Komponente<br />
ist also zugleich Verteiler und Empfänger bzw. Sender. Diese Struktur wird vor allem<br />
zum Verbinden von Rechnern in einem Local Area Network (LAN) verwendet. Nachteil:<br />
mangelhafte Ausfallsicherheit, da be<strong>im</strong> Ausfall einer Komponente das gesamte<br />
System funktionsunfähig wird.<br />
Beispiel: Der Token Ring der Firma IBM. Jedes beteiligte Computersystem ist über<br />
einen Controller mit dem Netz verbunden. Kommunikationswünsche teilt jeder Rechner<br />
seinem zugehörigen Controller mit, der dann das Notwendige veranlaßt. Wie wird eine<br />
Kommunikation abgewickelt? Im Ring kreist von Controller zu Controller ein „Token“,<br />
das ist ein in best<strong>im</strong>mter Weise belegtes Byte. Nur der Computer kann senden, dessen<br />
Controller das Token besitzt. Damit ein Computer eine Nachricht senden kann, muß der<br />
zugehörige Controller also das Token „fangen“ und aus dem Ring entfernen. Gefangen<br />
werden kann das Token, wenn es auf seiner Reise den Controller erreicht. Nachdem das<br />
Bus<br />
29
30<br />
Token entfernt ist, weiß der Computer, daß kein anderer Knotenrecher Daten sendet,<br />
und er kann selbst senden. Nach Beendigung der Datenübermittlung gibt der Controller<br />
das Token wieder frei und läßt damit einem anderen potentiellen Sender die Chance, das<br />
Token zu fangen und dann zu senden. 1<br />
Bus Es ist die bei Rechnern am häufigsten verwendete Verbindungsstruktur, da der Hardwareaufwand<br />
und damit die Kosten am niedrigsten sind. Außerdem ist es sehr einfach,<br />
neue Komponenten anzuschließen (Erweiterbarkeit des Systems) . Nachteil: Es kann<br />
jeweils nur ein Knoten Transferoperationen durchführen. 2<br />
1 Duden, <strong>Informatik</strong>, Mannhe<strong>im</strong> 1993 S. 773<br />
2 C.Müller Schloer RISC-Workstation Architekturen S. 241f<br />
3 Duden, <strong>Informatik</strong>, Mannhe<strong>im</strong> 1993 S. 114f<br />
Beispiel: Ein sehr verbreitetes Rechnernetz, das auf einer busartigen Struktur basiert, ist<br />
das Ethernet, das Ende der 70er Jahre von der Firma Xerox entwickelt wurde. Das Ethernet<br />
besitzt keinen zentralen Controller, vielmehr wird die Auswahl eines Senders<br />
sowie die korrekte Übermittlung der Daten von den angeschlossenen Computern nach<br />
einem auf den ersten Blick aufwendigen Schema (Protokoll) selbst vorgenommen. A<br />
sendet an B: Zuerst übermittelt A die Daten an sein Ethernet Interface. Das Interface<br />
hört zunächst den Ether ab, um festzustellen, ob er gerade für eine andere Datenübertragung<br />
benutzt wird. Ist der Ether frei, so sendet das Interface von A die Daten sofort.<br />
Andernfalls wartet das Interface, bis die laufende Übertragung beendet ist und startet<br />
anschließend eine Datenübertragung. Problem: Zwei Rechner wollen senden und warten<br />
auf die Freigabe des Ether durch einen dritten Rechner. In diesem Fall starten beide<br />
gleichzeitig ihre Datenübertragung, sobald der dritte Computer seine Übertragung beendet<br />
und den Ether freigegeben hat. Es kommt zu einer Kollision, da sich die Signale der<br />
beiden Sender gegenseitig stören. Eine Kollision von Signalen mehrerer Sender wird<br />
dadurch entdeckt, daß jeder Sender stets gleichzeitig den Ether abhört und überprüft, ob<br />
das abgehörte Signal und das gesendete übereinst<strong>im</strong>men. Stellt der Sender Differenzen<br />
zwischen gesendetem und abgehörtem Signal fest, so sendet er sofort ein Störsignal, um<br />
allen übrigen Geräten mitzuteilen, daß eine Kollision festgestellt wurde. Anschließend<br />
bricht er seine Sendung ab, wartet eine zufällig gewählte Zeitspanne, um die Wahrscheinlichkeit<br />
einer erneuten Kollision zu vermindern. 3<br />
Sternverbindung
Ethernet<br />
Token Ring<br />
2.2.2 Kennwerte moderner Standardbusse<br />
AT-Bus EISA Future-<br />
Bus<br />
Micro-<br />
Channel<br />
VESA SCSI VME-BUS PCI<br />
Firma IBM - - IBM Shugart Motorola<br />
Einführungs- 1981 1989 1984 1987 > 1990 1979 1981 1993<br />
31
32<br />
jahr<br />
Protokoll<br />
Bustakt MHz<br />
Adreßbreite<br />
Datenbreite<br />
Blocktransfer<br />
syn-<br />
chron4,7<br />
7<br />
24<br />
8,16<br />
ja (DMA)<br />
2.3 Tri-State-Register<br />
syn-<br />
chron4,7<br />
7<br />
32<br />
8,16,32<br />
ja<br />
asynchron<br />
32<br />
8..256<br />
ja<br />
asynchron<br />
8,16,32<br />
ja<br />
synchron<br />
> 32<br />
32<br />
32<br />
ja<br />
syn/asyn<br />
8<br />
8+1 Par.<br />
ja<br />
asynchron<br />
32<br />
8,16,32<br />
ja<br />
asynchron<br />
Tri-State-Schalter haben den Zusammenbau von Rechnern, deren Komponenten über einen Bus verbunden sind, erheblich<br />
vereinfacht.<br />
Eine Digitalschaltung hat normalerweise die zwei Ausgangszustände H und L, bzw. 1 und 0.<br />
Ein Tri-State-Element hat zusätzlich noch einen hochohmigen 3. Ausgangszustand.<br />
Das Symbol des Tri-State-Schalters:<br />
|\<br />
Din_______| \_________ Dout<br />
| /|<br />
|/ |<br />
ENABLE_______|<br />
Die Wirkungsweise:<br />
Enable<br />
Din Dout<br />
L X offen<br />
H L L<br />
H H H<br />
• ENABLE = H: Dout = Din (Schalter geschlossen)<br />
• ENABLE = L: der Ausgang ist vom Eingang getrennt (Schalter offen)<br />
Eine Hauptanwendung der Tri-State-Schalter besteht darin, den (normalen) Ausgang eines Registers mit 2 Zuständen in<br />
einen Tri-State-Ausgang zu wandeln.<br />
Aus einem (normalen) Register mit zwei möglichen Ausgangszuständen wird durch Hinzufügung von Tri-State-<br />
Schaltern an den Ausgängen ein Tri-State-Register:<br />
> 32<br />
32<br />
64<br />
ja
x3 x2 x1 x0<br />
| | | |<br />
V V V V<br />
-------------------------<br />
| |------ LOAD<br />
| A | | _________| LOAD |-- L C<br />
| |_________| | | |<br />
E A --| ENABLE |_________ | | C B | | _________| LOAD |-- L D<br />
| |_________| | | |<br />
E B --| ENABLE |_________ | | D
34<br />
2.3.1 Übung: Datentransfer mit Tri-State-Registern<br />
Die vier Register in der Abb. oben haben die Inhalte<br />
A = 0011 B = 0110 C = 1001 D = 1100<br />
Welche Vorgänge laufen ab und was steht in den Registern, wenn E C und L B auf H gesetzt werden, und ein positiver<br />
Takt<strong>im</strong>puls aufgetreten ist ?
2.4 Multiplexer<br />
Ein Multiplexer ist ein Gerät, das Signale von mehreren Eingangsleitungen auf eine Ausgangsleitung überträgt. Welche<br />
der Eingangsleitungen zu einem Zeitpunkt mit der Ausgangsleitung verbunden wird, kann entweder durch Steuerleitungen<br />
von außen festgelegt oder vom Multiplexer selbständig best<strong>im</strong>mt werden.<br />
Multiplex bezeichnet einen Datenübertragungskanal, bei dem entweder ein Sender mit mehreren Empfängern oder ein<br />
Empfänger mit mehreren Sendern verbunden ist. Eine Multiplexverbindung ist <strong>im</strong> allgemeinen nur sinnvoll, wenn die<br />
Arbeitsgeschwindigkeit des Einzelgerätes (Sender bzw. Empfänger) wesentlich größer ist, als die der angeschlossenen<br />
Geräte (Empfänger bzw. Sender). Multiplexkanäle lohnen sich zum Beispiel für die Verbindung relativ langsamer Drucker<br />
mit einer Steuereinheit. Im Multiplexbetrieb unterscheidet man zwischen:<br />
Art Beschreibung Beispiel<br />
s<strong>im</strong>plex Datenübertragungskanal, bei dem die eine Datenrichtung<br />
nur als Sender von Daten und die andere nur<br />
als Empfänger verwendet werden kann.<br />
halbduplex<br />
Datenübertragungskanal, bei dem die eine Datenrichtung<br />
als Sender von Daten und die andere als Empfänger<br />
verwendet werden kann.<br />
duplex Datenübertragungskanal, bei dem beide Datenendeinrichtungen<br />
gleichzeitig Daten senden und empfangen<br />
können.<br />
Quellen<br />
X0 X1 ... Xk-1<br />
|/ |/ |/<br />
/|m /| m /| m<br />
| | |<br />
| | |<br />
v v v<br />
----------------------<br />
------> | |<br />
Select : | Multiplexer |<br />
------> | |<br />
----------------------<br />
|/<br />
/| m<br />
v<br />
Z<br />
35<br />
Radio- und Ferhsehübertragungen<br />
Sprechfunkgeräte<br />
Telefon<br />
Eines von den k Leitungsbündeln kann seine Eingangswerte an den Ausgang weitergeben. Die Auswahl geschieht durch<br />
die 'Select'-(Input)Leitungen.<br />
Beispiel:
36<br />
|x0 |x1 |x2 |x3<br />
| | | |<br />
v v v v<br />
-----------------<br />
s0----> | |<br />
s1----> | |<br />
-----------------<br />
|<br />
v<br />
z<br />
s0 s1 z<br />
0 0 0<br />
0 1 1<br />
1 0 2<br />
1 1 3<br />
Mit k Select-Leitungen kann man einen von 2 k Eingängen auf den Ausgang durchschalten. Welche Datenquelle durchgeschaltet<br />
wird, hängt nicht vom Dateneingangssignal ab, sondern vom Steuersignal-Eingang, also vom Zustand der<br />
Selectleitungen.<br />
2.5 Decodierer<br />
S0<br />
S1<br />
X0 X1 X2 X3<br />
&<br />
& & &<br />
≥ 1<br />
Digitallogische Schaltung eines Multiplexers<br />
Ein Decodierer entschlüsselt eine 0-1-Kombination (Eingangswert) in eine 1, die an genau einem Ausgang des Decodierers<br />
erscheint.<br />
Der Decodierer in symbolischer Darstellung:<br />
Z
x2 x1 x0<br />
| | |<br />
v v v<br />
------------------------<br />
| 1/8 |<br />
| Decodierer |<br />
------------------------<br />
| | | | | | | |<br />
v v v v v v v v<br />
z7 z6 z5 z0<br />
Beispiel:<br />
Funktion und Realisierung eines 1/4 Decodierers.<br />
Seine Funktion sei festgelegt durch:<br />
x1 x0 aktiver Ausgang z<br />
0 0 0<br />
0 1 1<br />
1 0 2<br />
1 1 3<br />
Einer der vier Ausgänge wird durch die Eingänge x0 und x1 ausgewählt. Nur der ausgewählte hat den Wert 1, alle anderen<br />
0. Die Realisierung:<br />
Schaltbild eines 1 aus 4 Decodierers<br />
Welcher Ausgang aktiviert wird, hängt vom Dateneingangssignal ab, ist also eine Funktion von X0 und X1.<br />
2.6 Speicher<br />
Ein Speicher kann (in einer ersten Näherung) als eine Anzahl von Registern aufgefaßt werden; eine typische Größenordnung<br />
bei Mikro-Rechnern lag in den 80gern bei 65536 (= 64K) und liegt heute zwischen 4 und 128 Megabyte. Im Speicher<br />
eines Rechners können Befehle und Daten abgelegt werden. Die Begriffe Adresse und Inhalt sind zu unterscheiden.<br />
Der Inhalt einer Zelle ist binär in ihr abgelegt. Die einzelnen Speicherzellen kann man sich mit Nummern 0 bis ... durchnumeriert<br />
vorstellen. Die Nummern sind aber nirgends <strong>im</strong> Speicher wirklich abgelegt, sondern allein durch die Anordnung<br />
der Zellen ist hardwaremäßig eine Reihenfolge festgelegt. Diese Nummern sind die Adressen der Speicherzellen.<br />
37
38<br />
Speicher<br />
Daten<br />
2.6.1 ROM (read-only-memory)<br />
Adresse<br />
Ein ROM stellt die einfachste Speicherart dar. Seine Speicherzellen haben feste Inhalte, die nur gelesen werden können.<br />
ROMs werden vom Hersteller nach Kundenwunsch durch den Einbau von Dioden festprogrammiert ausgeliefert, so daß<br />
ein nachträgliches ändern des Speicherinhaltes nicht mehr möglich ist. ROMs werden vorwiegend als Speicher für feste<br />
Programme (z.B. Betriebssystemkomponenten) und für unveränderbare Daten verwendet. Durch Anlegen best<strong>im</strong>mter<br />
Signale können die einzelnen Speicherzellen gelesen werden. Dabei bedeutet das Lesen einer Zelle, daß der Inhalt der<br />
Zelle an dem ROM-Ausgang erscheint. Um n Speicherzellen ansprechen zu können, sind offenbar n Adreßleitungen<br />
erforderlich,- für jede Zelle eine Leitung. Da die Anzahl n sehr groß sein kann, würde das zu einem nicht vertretbaren<br />
Hardware-Aufwand führen. Deshalb wird eine Adreß-Decodierung eingeführt.<br />
Speicherbaustein mit integriertem Decodierer<br />
Mit Hilfe dieses 1/8 Decodierers lassen sich die Zellen eines 8 Byte großen Speichers mit 3 (und nicht mit 8 !) Adreßleitungen<br />
ansprechen. Die Adreß-Decodierung ist Teil des Speicher-Bausteins.<br />
Anmerkungen:<br />
. der Speicherbaustein hat: 3 Adreß-(Input-)Leitungen und 4 Daten-Leitungen<br />
. der 1/8 Decodierer erzeugt jeweils einen aktiven Ausgang zur Adressierung einer Speicherzelle<br />
. mit n Adreßleitungen können max<strong>im</strong>al 2 n Speicherzellen adressiert werden<br />
Das ganze noch mal ein bißchen genauer mit einem 4*8 Bit Lesespeicher mit Diodenzellen:
Adreßleitungen<br />
a<br />
b<br />
Adressendecoder<br />
&<br />
&<br />
&<br />
&<br />
A0<br />
A1<br />
A 3<br />
Diode<br />
Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0<br />
4*8 Bit ROM mit Diodenspeicherzellen 1<br />
Dieser Lesespeicher wurde nach folgender Belegungstabelle programmiert:<br />
2.6.2 PROM, EPROM und EEPROM<br />
b a Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0<br />
0 0 0 1 1 0 0 0 1 0<br />
0 1 1 0 0 0 0 0 0 0<br />
1 0 1 1 1 1 0 0 0 1<br />
1 1 0 0 0 0 0 0 0 0<br />
Es handelt sich um Varianten von Festwertspeichern, die unabhängig von einer Stromversorgung ihren Inhalt behalten.<br />
Dem ROM haftet der Nachteil an, daß sich dessen Herstellung nur dann lohnt, wenn große Stückzahlen <strong>im</strong> jeweiligen<br />
Programm gefertigt werden. Die Halbleiterhersteller bieten aus diesem Grund Festwertspeicher an, die der Anwender<br />
selbst mit Hilfe spezieller Geräte programmieren kann: PROM (programmable ROM).Bei der Programmierung werden<br />
die in einer Matrixanordnung befindlichen Dioden von den Ausgangsleitungen getrennt, und zwar dadurch, daß nach der<br />
Anwahl einer best<strong>im</strong>mten Adresse ein Strominpuls auf die entsprechende Diodenstrecke gegeben wird, der ein mit ihr in<br />
Reihe liegendes Sicherungselement zum Abschmelzen bringt. Damit n<strong>im</strong>mt diese Speicherzelle das 0-Signal an. Der<br />
Speicher ist nur ein einziges mal programmierbar.<br />
Be<strong>im</strong> EPROM (erasable PROM) handelt es sich um einen programmierbaren und wieder löschbaren Festwertspeicher.<br />
Das Programmieren erfolgt elektrisch durch Aufladen einer schwebenden Gate-Elektrode eines MOS-<br />
Feldeffekttransistors. Diese Gate Ladung bleibt etwa 10 Jahre erhalten und gewährleistet den Inhalt des Speichers auch<br />
wenn die Betriebsspannung abgeschaltet wird. 2<br />
1 Einführung in die Elektronik 2, Kontaktlose Signalverarbeitung, Stam Verlag Köln, 1989, S.189<br />
2 Den genauen Aufbau des EPROMS finden Sie zum Beispiel bei: Einführung in die Elektronik 2, Kontaktlose Signalverarbeitung, Stam-Verlag Köln,<br />
1989, S. 194ff<br />
39
40<br />
Das Löschen erfolgt optisch mit intensiver Einwirkung von UV-Licht auf die Speicherzellen durch ein <strong>im</strong> IC-Gehäuse<br />
befindliches Quarzfenster. Durch den Photoeffekt wird die Isolierschicht um das Floating-Gate schwach leitend, so daß<br />
die Ladungsträger abwandern können. Der Löschvorgang dauert ungefähr 20 Minuten.<br />
Es verbindet mit gewissen Einschränkungen die Vorteile des RAM mit und eines PROM. Es kann vom Hersteller oder<br />
Anwender mit einem dauerhaften Inhalt versehen werde. Den gesamten Inhalt kann man wieder löschen, indem der<br />
Speicherbaustein einige Zeit lang einer starken ultravioletten Strahlung ausgesetzt wird. Hierzu besitzt sein Gehäuse an<br />
der Oberseite ein verschließbares Fenster, durch das die Strahlung den Schaltkreis erreichen kann. Anschließend kann<br />
das EPROM einen neuen Inhalt erhalten.<br />
Ein EEPROM ist ein elektrisch löschbares EPROM. Es hat den Vorteil, daß der Baustein be<strong>im</strong> Löschen in der Schaltung<br />
verbleiben kann.<br />
Unter der Zugriffszeit eines Speichers versteht man die Zeit, die zwischen dem Anlegen der Adreßbits und dem Anstehen<br />
des Inhalts am Ausgang vergeht. Diese Zeit ist sehr stark von der verwendeten Technologie abhängig.<br />
2.6.3 Siliziumfestplatten - die FLash-Speicher<br />
In den letzten Jahren ist eine neue Art nicht flüchtiger Speicher auf den Markt gekommen, die häufig in tragbaren Klein-<br />
und Kleinstcomputern als Ersatz für Diskettenlaufwerke oder Festplatten dienen: die Flash-Speicher. Der Aufbau der<br />
Speicherzellen st<strong>im</strong>mt <strong>im</strong> wesentlichen mit denen der EEPROM überein. Sie benötigen aber nur eine Lösch- und Programmierspannung<br />
von 12 V, so daß sich problemlos 10000 Programmier- und Löschzyklen ausführen lassen. Flash-<br />
Speicher können fast so flexibel programmiert werden wie RAM-Chips, wobei sie aber <strong>im</strong> Gegensatz zu diesen die eingeschriebenen<br />
Daten nicht verlieren. Im PC-Bereich werden Flash-Speicher bereits häufig als Datenträger für das BIOS<br />
(Basic Input Output System) eingesetzt. Neue BIOS Versionen können so auf Diskette distributiert oder in Mailboxen<br />
zum Down-Load angeboten werden. Die Kosten für das Wechseln von EPROMs entfallen.<br />
2.6.4 Tri-State-ROM<br />
Ergänzt man die Datenleitungen eines Speichers durch Tri-State-Schalter, so erhält man Tri-State-Speicher. Die Abbildung<br />
zeigt einen 2048 Bytes großen ROM mit 11 Adreß- und 8 Daten-Leitungen.Ein L an ENABLE bewirkt, daß der<br />
Ausgng hochohmig wird; mit ENABLE = H steht der Inhalt des adressierten Bytes am Ausgang an.<br />
Tri-State-ROM
2.6.5 RAM<br />
Ein RAM (random-access memory oder auch read-write memory) ist vergleichbar mit einer Menge von adressierbaren<br />
Registern. Wenn eine Adresse angelegt ist, kann der Inhalt einer Speicherzelle gelesen oder neu beschrieben werden.<br />
• Kernspeicher: der Inhalt bleibt auch bei abgeschalteter Spannung erhalten (nicht flüchtig); Kernspeicher haben<br />
jedoch einen hohen Leistungsverbrauch, einen langsamen Zugriff und eine geringe Packungsdichte.<br />
• Halbleiterspeicher: bei Abschalten der Spannung geht der Inhalt verloren (flüchtig). Man unterscheidet zwischen<br />
statischen und dynamische Halbleiterspeichern.<br />
Bei dynamischen Bausteinen, sogenannten DRAMs, muß die in einem Kondensator gespeicherte Information in festen<br />
Abständen (einige ms) aufgefrischt (refresh) werden. Während eines Refreshzyklus ist kein Speicherzugriff<br />
möglich, da ist der Speicher mit sich selbst beschäftigt. Das führt zu einer längeren Zugriffszeit als bei statischen<br />
RAMs. Aus Kostengründen werden Hauptspeicher üblicherweise mit DRAMs aufgebaut.<br />
Bei SRAM Bausteinen muß die in einem Flipflop gespeicherte Information nicht aufgefrischt werden. Die Speicherzelle<br />
von SRAM Bausteinen benötigt mehr Transistoren als eine DRAM-Zelle, so daß auf der gleichen Chipfläche<br />
nur ein Viertel der Speicherkapazität erreicht werden kann, jedoch ist die Zugriffszeit bei SRAMs deutlich kürzer.<br />
Sie werden daher für den Aufbau von schnellen Zwischenspeichern (sogenannten Caches - denken Sie an den Secondlevel<br />
Cache von 256 kB auf dem Mainboard Ihres Computers) verwendet<br />
2.6.5.1 Bauformen für Hauptspeichermodule<br />
DIP Dual Inline Package<br />
Schaltungsgehäuse mit in zwei Reihen angeordneten Aschlüssen. Sie werden in heutigen PCs und Workstations<br />
nicht mehr als Hauptspeichermodule verwendet. Üblich waren Speichergrößen von 32, 64 und 128KB.<br />
SIP Single Inline Package Module.<br />
Schaltungsgehäuse mit in einer Reihe angeordneten Aschlüssen. In dieser Bauform wurden die ersten 1MB<br />
Speicherbausteine hergestellt. Sie wurden abgelöst von den<br />
SIMM Single Inline Memory Module<br />
Dabei sind die Speicherbausteine auf eine kleine Platine aufgelötet. Die Platinen werden hochkannt in entsprechende<br />
Fassungen eingesetzt. Mit dieser Technik werden sehr hohe Speicherdichten erreicht. Heute sind Speicherbausteine<br />
mit den Kapazitäten von 1 und 4MB gebräuchlich.<br />
2.6.5.2 Aufbau von DRAM Bausteinen<br />
Bei DRAM Bausteinen werden die Speicherzellen üblicherweise Matrixförmig angeordnet. Die Adressen werden in eine<br />
Row- und eine Column-Adresse aufgeteilt. Mit dem RAS-Signal (row-address strobe) wird die Row-Adresse in dem<br />
Register RA abgespeichert und anschließend die entsprechende Reihe ausgelesen. Für den Begriff Reihe kann gleichbedeutend<br />
auch Wort oder Page verwendet werden. Durch das darauffolgende CAS-Signal (column address strobe) wird<br />
der Spaltenanteil der Adresse in das Register CA eingelesen. Die Spaltenadresse legt fest, auf welche Bits innerhalb<br />
einer Reihe zugegriffen wird. Be<strong>im</strong> Lesezugriff wird die Information auf den Ausgang gelegt, bei einem Schreibvorgang<br />
wird die neue Information an der entsprechenden Stelle <strong>im</strong> ausgelesenen Wort eingeschoben und be<strong>im</strong> Zurückschreiben<br />
gespeichert.<br />
Die Speicherzugriffszeit beträgt üblicherweise 70 bis 100 ns, die Speicherzykluszeit zwischen 130 und 200 ns. Der Unterschied<br />
zwischen der Zugriffs- und Zykluszeit ergibt sich aus einer sogenannten Precharge-T<strong>im</strong>e, die wegen interner<br />
Umladevorgänge abgewartet werden muß, bevor der nächste Zugriff gestartet werden kann.<br />
41
42<br />
Am folgenden Blockschaltbild eines DRAMs läßt sich sehen, daß neben den eigentlichen Lesezellen in einem Speicherbaustein<br />
noch Verstärker, Adreßdecodierer, Puffer für Adressen und Daten und Steuerlogik mit den entsprechenden<br />
Signalen enthalten sind. Es sind aber nur sehr wenig Kontakte zur Außenwelt notwendig, nämlich die Adreßleitungen<br />
und die Steuersignale, die die gewünschte Funktion (Lesen oder Schreiben) angeben.<br />
Adreßleitungen<br />
mit der von<br />
der CPU<br />
angefordertenAdresse<br />
Steuersignale<br />
für<br />
die angeforderte<br />
Funktion:<br />
Lesen oder<br />
Schreiben<br />
Speicherblock<br />
Speichersteuerung<br />
Adreßdekodierer<br />
Steuersignale<br />
......<br />
RAS (row address strobe)<br />
Row<br />
Address<br />
Register<br />
Column<br />
Address<br />
Register<br />
CAS (column<br />
address strobe)<br />
Wortauswahl<br />
Datenbus<br />
Abtast-Verstärker<br />
Speicherzellen-matrix<br />
aus Kondensatoren<br />
Bit-Auswahl + Treiber<br />
Daten<br />
Interner Aufbau eines DRAM Speicherbausteins und seine Verbindugen zur Außenwelt<br />
2.6.5.3 Beschleunigung von Blockzugriffen<br />
Read<br />
/Write<br />
Moderne DRAM-Bausteine verfügen über spezielle Zugriffsmechanismen, die einen beschleunigten Zugriff auf Daten<br />
innerhalb einer Reihe ermöglichen. Der grundlegende Mechanismus ist dabei der, daß die Row-Adresse nur einmal angelegt<br />
werden muß und sich anschließend verkürzte Zugriffe mit reinen Column-Adressen durchführen lassen. An einem<br />
Beispiel wird erläutert, wie sich verkürzte Blockzugriffe auf die Blockzugriffszeiten auswirken:<br />
Die Taktfrequenz eines Prozessors sei 25 MHz. Ein Taktzyklus dauert damit 40 ns. Vom Beginn eines Speicherzugriffs<br />
bis zum Bereitstellen des Datums vergehen 3 Taktzyklen, d.h. die Zugriffszeit beträgt 120 ns. Bevor der nächste Speicherzugriff<br />
gestartet werden kann, müssen weitere 2 Taktzyklen (Precharge T<strong>im</strong>e) abgewartet werden, d.h. die Speicher-
zykluszeit beträgt 5 Taktzyklen und damit 200 ns. Blockzugriffe können jedoch beschleunigt durchgeführt werden. Die<br />
Zugriffszeit für das erste Wort beträgt wiederum 3 Taktzyklen, danach steht aber <strong>im</strong> Abstand von je 2 Taktzyklen das<br />
nächste Wort zur Verfügung. Zur Gesamtzeit eines Blockzugriffs muß man noch weitere zwei Taktzyklen addieren, da<br />
vor Beginn eines Folgezugriffs noch die Precharge-Zeit abgewartet werden muß. Ein Blockzugriff auf 8 Worte innerhalb<br />
einer Reihe dauert damit 3 + 7*2 + 2 Taktzyklen und damit 760 ns. Wären 8 Einzelzugriffe durchgeführt worden, hätte<br />
man 8*5 Taktzyklen oder 1600 ns benötigt.<br />
Eine andere Möglichkeit zur Beschleunigung von Blockzugriffen ist das Interleaving. Hierbei wird das Speichersystem<br />
in 2 k unabhängige Module, sogenannte Speicherbänke unterteilt. Die Daten werden dabei so auf die Bänke verteilt, daß<br />
aufeinanderfolgende Worte <strong>im</strong> Adreßraum in aufeinanderfolgenden Bänken abgespeichert werden. Die Speicherbänke<br />
sind so ausgelegt, daß sie vollständig unabhängig voneinander arbeiten können. Es können deshalb Folgeadressen ausgegeben<br />
werden, bevor der aktuelle Zugriff abgeschlossen ist. Durch diese zeitliche Verzahnung erhält man bei 2 k unabhängigen<br />
Bänken eine Beschleunigung um einen Faktor =2 k . 1<br />
2.6.6 Tri-State RAM<br />
Die meisten RAMs haben Tri-State-Ausgänge, d.h. die Ausgänge des RAMs können mit einem Bus verbunden und von<br />
ihm getrennt werden. Ein RAM mit typischen Eingangssignalen:<br />
WE<br />
ADR<br />
CE<br />
Data in<br />
RAM<br />
Data out<br />
Die Adreß-Bits wählen die Speicherzelle aus. Die Steuersignale WE und CE legen die Operation fest: schreiben, lesen<br />
oder nichts tun.<br />
WE bezeichnet das Write Enable-Signal<br />
CE bezeichnet das Chip Enable-Signal<br />
Die Funktionen des RAMs:<br />
CE WE Funktion Ausgang<br />
H H schreiben getrennt (hochohmig)<br />
H L lesen verbunden<br />
L X ---- getrennt (hochohmig)<br />
• Schreib-Operation: die Eingangs-Daten D IN werden bei der adressierten Speicherzelle abgelegt. Die Ausgabe-<br />
Datenleitungen sind hochohmig.<br />
1 C.Müller Schloer RISC-Workstation Architekturen S. 125ff<br />
43
44<br />
• Lese-Operation: der Inhalt der adressierten Speicherzelle erscheint an den Ausgangsleitungen, weil die Tri-State-<br />
Schalter geschlossen sind.<br />
• keine Operation: die Inhalte aller Zellen bleiben ungeändert; der Ausgang ist hochohmig.<br />
Beispiel: ein RAM-Baustein mit Tri-State-Ausgängen<br />
--------<br />
A3 |1 16| VCC<br />
CE |2 15| A2<br />
WE |3 14| A1<br />
D3 |4 13| A0<br />
Q3 |5 12| D0<br />
D2 |6 11| Q0<br />
Q2 |7 10| D1<br />
GND |8 9| Q1<br />
--------<br />
Dieser 64-Bit RAM ist in 16 Worten mit jeweils 4 Bits organisiert.<br />
Die Bedeutung der verschiedenen Pins:<br />
• 4 Adreß-Bits (A0 - A3) können auf 24 = 16 Worte zugreifen.<br />
Pin_1 (A3), Pin_15 (A2), PIN_14 (A1) und Pin_13 (A0).<br />
• Die Eingabe-Daten:<br />
Din_4 (D3) Pin_6 (D2), Pin_10 (D1) und Pin_12 (D0).<br />
• Die Ausgabe-Daten:<br />
Pin_5 (Q3), Pin_7 (Q2), Pin_9 (Q1) und Pin_11 (Q0).<br />
Chip-Enable Pin_2 - Write-Enable Pin_3<br />
• Spannungsversorgung Pin_16: +5 Volt - Erdung Pin_8.<br />
Ein Impulsdiagramm verdeutlicht das Lesen und Schreiben eines RAMs mit den Signalen CE und WE :
________________________<br />
A0 _ _ _ H _ _ _ _ _ _ _ _ |_____L________<br />
_________________________________________<br />
A1 _ _ _ _ _ _ _ _ H _ _ _ _ _ _ _ _ _ _ _ _<br />
_________________<br />
A2 ________________L_______| _ _ _ _H_ _ _ _ _<br />
__________________________________________<br />
A3 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _<br />
______________________<br />
D0 _____L____________|_ _ _ _ _ H _ _ _ _ _ _<br />
D1 _________________L________________________<br />
__________________________________________<br />
D2 _ _ _ _ _ _ _ _ _H_ _ _ _ _ _ _ _ _ _ _ _ _<br />
______________________<br />
D3_______L__________|_ _ _ _ _ _H_ _ _ _ _ _<br />
Q0 __________________________________________<br />
Q1 __________________________________________<br />
Q2 __________________________________________<br />
Q3 __________________________________________<br />
____________________________________________<br />
CE __|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |_<br />
__ __<br />
WE ____| |_____________________________| |______<br />
^ ^ ^ ^ ^ ^ ^<br />
t1 t2 t3 t4 t5 t6 t7<br />
2.6.7 Ein kleiner 16 Worte * 8 Bit breiter Speicher<br />
Es werden zwei RAM-Bausteine so zusammengeschaltet, daß mit jeder der 16 möglichen Adressen auf ein 8-Bit Wort<br />
zugegriffen wird. Dabei wird gezeigt, wie Befehle und Daten <strong>im</strong> Speicher abgelegt werden können, noch bevor der<br />
Rechner läuft.<br />
45
46<br />
Schaltbild eines 8 Bit breiten RAMs<br />
• Adressierung des Speichers: die Adreßbits werden von Schaltern (A3 A2 A1 A0) geliefert. Es kann jede Adresse<br />
von 0000 bis 1111 eingestellt werden. Wirkung: Schalter oben (offen) enspricht einer '1'.<br />
• Eingabedaten setzen: Die Datenbits werden von zwei anderen Schalter-Zeilen geliefert:<br />
das höherwertige Nibble: D7 D6 D5 D4<br />
das niederwertige Nibble: D3 D2 D1 D0<br />
(Nibble ist die Zusammenfassung von 4 Bit = ein halbes Byte)<br />
Es können Datenworte von 0000 0000 bis 1111 1111 eingestellt werden (in Hex: 00 bis FF).<br />
Wirkung: Ist ein Schalter unten (geschlossen), so entspricht das einer Input-0; es wird eine also eine 0 gespeichert.<br />
Um Daten bei best<strong>im</strong>mten Adressen abzulegen, ist schrittweise wie folgt vorzugehen:<br />
1. Schalter READ-WRITE in Stellung READ (-> WE = low).<br />
2. Schalter 'RUN_PROG' in Stellung PROG; (-> CE = high) bleibt in dieser Stellung<br />
bis alle Zellen beschrieben sind. Der Schalter legt CE von jedem RAM auf<br />
H.<br />
3. Adreß- und Datenschalter einstellen.<br />
4. Schalter 'READ_WRITE' für eine kurze Zeit in Stellung WRITE legen. Über Pin_3<br />
wird WE damit auf H gesetzt. Die am Eingang anliegenden Daten werden jetzt in<br />
die adressierte Speicherzelle übernommen.<br />
5. Weiter bei 3., wenn eine weitere Zelle beschrieben werden soll.<br />
6. Schalter 'RUN_PROG' in Stellung 'RUN'<br />
2.6.8 Entwicklung der Speicherbausteine<br />
Die folgende Tabelle gibt die Entwicklung der Technik dynamischer Speicherbausteine über die Jahre 1983 bis 1995 an<br />
:
Jahr D<strong>im</strong>ension (µ) max<strong>im</strong>ale Kapazität<br />
(MBit)<br />
Zahl der Transistoren (Millionen)<br />
1983 2,50 ... 2,00 0,25 0,5<br />
1986 1,25 ... 1,00 1 2<br />
1989 0,80 ... 0,70 4 8<br />
1992 0,50 ... 0,30 16 32<br />
1995 0,30 ... ? 64 128<br />
Danach wurde etwa alle drei Jahre die Kanallänge der Feldeffekttransistoren (CMOS-Technik) halbiert, wodurch sich<br />
bei gleicher Chipfläche eine Vervierfachung der Anzahl der Transistoren ergibt.<br />
Für den Speicherbaustein gilt, daß die Adreßdecodierung um so komplexer wird, je größer die Kapazität des Bausteins<br />
ist. Durch diese Eigenheit und weitere Effekte wird bei den Speicherbausteinen die Gesetzmäßigkeit, wonach eine Halbierung<br />
der Kanallänge zu einer Verdoppelung der Arbeitsgeschwindigkeit führt, weitgehend überdeckt. Dadurch sind<br />
über die Jahre die Speicherbauteile zwar auch schneller geworden, aber in einem wesentlich geringeren Maße als die<br />
Prozessoren, deren Taktfrequenz sich alle drei Jahre verdoppelt hat.<br />
47
48<br />
3.1 Blockdiagramm des SAP<br />
3 Die Architektur des SAP<br />
Die Abbildung unten zeigt die Struktur des Rechners in Form eines Blockdiagramms: 1<br />
C P<br />
CLK<br />
CLR<br />
EP<br />
Schalter<br />
4 Adreß-<br />
Schalter<br />
LM<br />
CLK<br />
8 Daten-<br />
Schalter<br />
Schalter WE<br />
CE<br />
LI<br />
CLK<br />
CLR<br />
E I<br />
CLK<br />
CLR<br />
Program<br />
Counter<br />
MUX<br />
MAR<br />
Anzahl<br />
Leitungen = Bit-<br />
Breite der<br />
Verbindung<br />
RAM<br />
16*8<br />
Instruction<br />
Register<br />
Control<br />
Unit<br />
Das Kontrollwort : C P E P L M E R L I E I L A E A S U E U L B L O<br />
CE<br />
1 Vgl. Malvino, Digital Computer Electronics, S.141<br />
12<br />
4<br />
4<br />
4<br />
8<br />
8<br />
8<br />
Akkumulator<br />
ALU<br />
Register<br />
B<br />
Output<br />
Register<br />
Binary<br />
Display<br />
Blockdiagramm des SAP<br />
8<br />
8<br />
8<br />
8<br />
8<br />
LA<br />
CLK<br />
EA<br />
E U<br />
SU<br />
L B<br />
CLK<br />
L O<br />
CLK<br />
Bit 0..3 des<br />
Opcodes<br />
Bit 4..7 des<br />
Opcodes
3.2 Das Kontrollwort des SAP<br />
Entsprechend der bisherigen Konvention bedeutet:<br />
C P - Count Program Counter<br />
E P - Enable Program Counter<br />
L M - Load Memory Address Register<br />
E R - Enable RAM = CE Chip Enable<br />
L I - Load Instruction Register<br />
E I - Enable Instruction Register<br />
L A - Load Akkumulator<br />
E A - Enable Akkumulator<br />
S U - Substract Unit<br />
E U - Enable Unit<br />
L B - Load B Register<br />
L O - Load Output Register<br />
Über den Schalter S wird best<strong>im</strong>mt, ob bei einem Speicherzugriff<br />
die Speicheradresse aus den vier Adreßschaltern<br />
oder von den Busleitungen genommen werden.<br />
Der Schalter WE legt fest, ob der Speicherzugriff<br />
schreibend oder lesend sein wird.<br />
Alle Komponenten sind über einen Bus miteinander<br />
verbunden und können über diesen Signale austauschen.<br />
Der Bus besteht aus 8 Leitungen zur gleichzeitigen<br />
Übertragung von 8 Bits. Sämtliche Abläufe<br />
erfolgen auf Veranlassung der Ablaufsteuerung; sie erzeugt<br />
die erforderlichen Steuersignale und gibt sie an<br />
die angeschlossenen Komponenten weiter. Alle mit<br />
dem Bus verbundenen Register-Ausgänge sind Tristate-<br />
Ausgänge. Die übrigen Register haben 'twostate'-<br />
Ausgänge; sie treiben die mit Ihnen verbundenen Komponenten<br />
direkt. Die Komponenten <strong>im</strong> einzelnen:<br />
3.3 Program Counter PC (Befehlszähler)<br />
Der Program Counter liefert (während der Rechner<br />
läuft) die Speicheradresse des Befehls, der als nächster<br />
ausgeführt werden soll.<br />
• Er ist ein Register, das von 0000 bis 1111 zählen<br />
kann.<br />
49<br />
• Der Inhalt kann (vor dem Start) mit dem Signal<br />
CLR auf den Zählerstand 0 gesetzt werden.<br />
• Der Inhalt wird bei aktivem CP-Signal mit jeder<br />
ansteigenden Flanke von CLK um 1 erhöht.<br />
• Die Zählerausgänge sind über Tri-State-Gatter mit<br />
den 4 niederwertigen Busleitungen verbunden.<br />
Das Signal EP aktiviert die Tri-State-Gatter und schaltet<br />
so den aktuellen Zählerstand auf den Bus durch;<br />
damit wird er für andere angeschlossene Komponenten<br />
verfügbar.<br />
3.4 Akkumulator A<br />
Der Akkumulator ist ein 8-Bit-Register und dient zur<br />
Aufnahme eines der beiden Operanden bei arithmetischen<br />
Operationen (der andere Operand ist der Inhalt<br />
des B-Registers) sowie zur Übernahme des Ergebnisses<br />
nach Durchführung der Operation durch die ALU. Er<br />
kann sowohl Daten vom Bus übernehmen als auch<br />
(wenn EA aktiv) Daten auf den Bus übertragen. Außerdem<br />
sind seine Ausgänge direkt mit einem Operandeneingang<br />
der ALU verbunden. Die Datenübernahme von<br />
den Busleitungen erfolgt unter Kontrolle der Signale<br />
LA und CLK. Ist LA inaktiv (low), so befindet sich der<br />
Akkumulator unabhängig vom Taktsignal CLK <strong>im</strong><br />
Speicherzustand und es werden keine neuen Daten<br />
übernommen. Ist LA aktiv (high), so werden mit der<br />
nächsten ansteigenden Flanke von CLK die Bussignale<br />
übernommen und gespeichert.<br />
3.5 Register B<br />
Das Register B enthält den zweiten Eingangsoperanden<br />
für die ALU. Sein Eingang ist mit den 8 Busleitungen<br />
verbunden; die Datenübernahme von den Busleitungen<br />
erfolgt unter Kontrolle der Signale LB und CLK. Im<br />
Unterschied zum Akkumulator sind die Ausgänge des<br />
B-Registers nicht mit dem Bus verbunden, sondern<br />
gehen lediglich zur ALU. Diese verknüpft den Registerinhalt<br />
als zweiten Operanden mit dem Inhalt des<br />
Akkumulators, der den ersten Operanden für die arithmetisch-logischen<br />
Operationen liefert.
50 Die Architektur des SAP<br />
3.6 Arithmetisch-logische Einheit<br />
(ALU)<br />
Die ALU kann nur addieren und subtrahieren. Die<br />
beiden Operanden werden ihr durch den Akkumulator<br />
A und das Register B direkt zugeführt. Die Subtraktion<br />
wird durch Addition des Zweierkomplements vollzogen.<br />
Das Signal S U entscheidet darüber, ob addiert<br />
oder subtrahiert wird. Ist SU inaktiv (low), so wird der<br />
Inhalt des Registers B zum Inhalt des Akkumulators addiert;<br />
ist SU aktiv (high), so wird der Inhalt von Register<br />
B vom Inhalt des Akkumulators subtrahiert. Der<br />
Ausgang der ALU ist über Tri-State-Gatter mit dem<br />
Bus verbunden, so daß das Ergebnis der arithmetischen<br />
Operation den anderen Komponenten zur Verfügung<br />
gestellt werden kann. Die Tri-State-Gatter werden<br />
durch das Signal EU gesteuert. Ist EU inaktiv (low), so<br />
sind die ALU-Ausgänge elektrisch vom Bus getrennt,<br />
andernfalls mit ihm verbunden.<br />
3.6.1 Interner Aufbau der ALU<br />
Im Folgenden werden die Bausteine der ALU auf Gatterebene<br />
dargestellt, mit deren Hilfe der Rechner in der<br />
Lage ist, die Rechenoperationen Addition und Subtraktion<br />
auszuführen.<br />
Der einfachste Baustein ist ein sogenannter Half-Adder,<br />
der zwei Dateneingänge mit einem EXOR Gatter addiert.<br />
Sind beide Einganssignale high, entsteht ein Übertrag<br />
(Carry), der über das UND-Gatter als Carry Bit<br />
nach außen geführt wird:<br />
Half-Adder<br />
Der Half-Adder addiert also lediglich zwei Bit. Um<br />
zwei 8 Bit breite Datenworte (Akkumulator und Register<br />
B) addieren zu können, benötigt man eine Parallelschaltung<br />
von acht Addierern.<br />
Die Wahrheitstafel:<br />
A B CARRY SUM<br />
0 0 0 0<br />
0 1 0 1<br />
1 0 0 1<br />
1 1 1 0<br />
Aber das kann noch nicht die ganze Wahrheit sein;<br />
wenn ein Carry-Flag erzeugt wird, sollte auch der folgende<br />
Addierer dieses als Eingang in die Addition<br />
miteinbeziehen.<br />
Ein Full-Adder berücksichtigt das Carry-Bit der vorherigen<br />
Bitaddition als Dateneingang.<br />
Die Wahrheitstafel:<br />
Full-Adder<br />
A B C CARRY SUMME<br />
0 0 0 0 0<br />
0 0 1 0 1<br />
0 1 0 0 1<br />
0 1 1 1 0<br />
1 0 0 0 1<br />
1 0 1 1 0<br />
1 1 0 1 0<br />
1 1 1 1 1<br />
Die Verknüpfung von Full-Adder und Half-Adder führt<br />
zum einfachen 4 Bit Addierwerk:
Die Architektur des SAP 51<br />
Vier Bit Addierwerk<br />
Jetzt muß unser Rechenwerk noch erweitert werden,<br />
damit es auch subtrahieren kann. Die Subtraktion wird<br />
durchgeführt durch Addition des Zweierkomplements.<br />
Also Z.B. die Subtraktion der Zahlen 8 - 5 sieht binär<br />
folgendermaßen aus:<br />
• 1000 BIN (8 Dez )<br />
• -0101 (5)<br />
ist dasselbe wie<br />
• 1000 BIN (8 Dez )<br />
• +1011 (Zweierkomplement)<br />
• =0011 (3 Dez )<br />
Wir müssen unserem Rechenwerk also beibringen, bei<br />
einer Subtraktion aus dem zweiten Operanden (B-<br />
Register) das Zweierkomplement zu bilden:<br />
3.6.2 Übung: Das Addierwerk<br />
Führen Sie die Addition der Zahlen 5 und 8<br />
mit einem 4 Bit Addierwerk durch.<br />
Best<strong>im</strong>men Sie dafür:<br />
• A 3 ... A 0<br />
• B 3 ... B 0<br />
• C 4 ... C 1<br />
• S 3 ... S 0<br />
3.7 Speicher<br />
Die Speicherkomponente umfaßt die Teile<br />
• eigentlicher RAM-Speicher<br />
• MAR (memory-address-register)<br />
• Adreßmultiplexer und<br />
• Schalter für die Eingabe von Daten (S, 4 Adr, 8<br />
Dat, WE)<br />
Der RAM-Speicher hat 4 Adreßeingänge A0 bis A3, so<br />
daß der Adreßraum die 16 Adressen 0HEX bis FHEX<br />
umfaßt. Jede Speicherzelle enthält ein Byte. Der Speicher<br />
kann nicht vom Rechner aus, sonden nur manuell<br />
beschrieben werden (Programmierung). Hierzu dienen<br />
4 parallele Schalter zur Adressenwahl und 8 parallele<br />
Schalter zur Dateneinstellung. Vom Rechner aus kann<br />
der RAM nur gelesen, nicht aber beschrieben werden.<br />
Über den Bus stellt der Rechner die Leseadresse bereit<br />
(Busleitungen 0 bis 3) und überträgt sie in das 4-Bit-<br />
Adreßregister MAR. Dessen Ausgänge gehen unmittelbar<br />
zu den Adreßeingängen des Speichers.<br />
Schalter S steuert den Adreß-Multiplexer. Seine Stellung<br />
entscheidet darüber, ob die Quelle der in das<br />
Adreßregister zu ladenden Speicheradresse das manuell<br />
bediente Schalterfeld (Speicher programmieren) oder<br />
der Bus (Speicher lesen) ist.<br />
Die Speicherausgänge sind über Tri-State-Gatter mit<br />
dem Bus verbunden.<br />
Das MAR-Register ist ein 4-Bit-Register. Signal LM<br />
kontrolliert zusammen mit dem Signal CLK die Adreßübernahme.<br />
Ist LM inaktiv (low), so befindet sich das<br />
Register <strong>im</strong> Ruhezustand und reagiert nicht auf das<br />
CLK-Signal. Ist LM aktiv (high), so übern<strong>im</strong>mt das<br />
Register mit der nächstfolgenden ansteigenden Flanke<br />
von CLK die an den Adreß-Schaltern eingestellte bzw.<br />
am Bus anliegende Adreßinformation.<br />
Die Stellung des Schalters WE legt fest, ob sich der<br />
Speicher in der Betriebsart 'Schreiben' (Speicher manuell<br />
programmieren) oder 'Lesen' (Rechner liest Befehle<br />
und Daten) befindet.
52 Die Architektur des SAP<br />
3.8 Instruction Register IR (Befehlsregister)<br />
Dieses Register dient zur Aufnahme des jeweils nächsten<br />
auszuführenden Maschinenbefehls. Es wird über<br />
den Bus aus dem Speicher geladen. Die vier höherwertigen<br />
Bits jedes Befehls bilden den Befehlscode. Sie<br />
gelangen von dem Ausgang des IR unmittelbar zu dem<br />
Eingang der Ablaufsteuerung und veranlassen diese, die<br />
dem Befehl entsprechende Folge von Steuersignalen zu<br />
erzeugen. Die vier niederwertigen Bits eines Befehls<br />
enthalten einen Operanden oder sind ohne Bedeutung.<br />
Die Übernahme eines Befehls vom Bus erfolgt unter<br />
Kontrolle der Signale LI und CLK. Ist LI inaktiv (low),<br />
so befindet sich das Register unabhängig von dem<br />
Taktsignal CLK <strong>im</strong> Speicherzustand und es werden<br />
keine neuen Daten übernommen. Ist LI aktiv (high), so<br />
werden mit der nächsten ansteigenden Flanke von CLK<br />
die Bussignale übernommen und gespeichert.Die an<br />
den Ausgängen des IR vorhandenen Signale werden<br />
unterschiedlich behandelt. Die 4 höherwertigen Bits,<br />
die den Operationscode des Befehls bilden, werden<br />
unmittelbar der Ablaufsteuerung zugeleitet (I7 I6 I5 I4).<br />
Die 4 niederwertigen Bits (Operandenbits) werden über<br />
die 4 niederwertigen Busleitungen den anderen Komponenten<br />
verfügbar gemacht.<br />
Die Steuerung erfogt über Signal EI. Ist EI inaktiv<br />
(low), so sind die Tri-State-Registerausgänge hochohmig,<br />
das Register ist elektrisch vom Bus getrennt. Ist EI<br />
aktiv (high), so sind die Registerausgänge zum Bus<br />
durchgeschaltet.<br />
3.9 Output Register (Ausgabe-<br />
Register)<br />
Das Ausgabe-Register dient der Kommunikation des<br />
Rechners mit der Außenwelt. Es entspricht bei größeren<br />
Systemen der Ausgabeeinheit (z.B. dem Bildschirm).<br />
Das Ausgabe-Register ist völlig analog dem Register<br />
Baufgebaut. Der einzige Unterschied besteht darin, daß<br />
die Ausgangsbits unmittelbar mit je einer Leuchtdiode<br />
zur Anzeige des Registerinhaltes verbunden sind. Die<br />
Übernahme der Bussignale erfolgt unter Kontrolle der<br />
Signale LO und CLK. Ist LO inaktiv (low), so befindet<br />
sich das O-Register unabhängig von dem Taktsignal<br />
CLK <strong>im</strong> Speicherzustand und es werden keine neuen<br />
Daten übernommen. Ist LO aktiv (high), so werden mit<br />
der nächsten ansteigenden Flanke von CLK die Bussignale<br />
übernommen und gespeichert.<br />
3.10 Ablaufsteuerung<br />
Die Ablaufsteuerung sorgt für die zeitliche Steuerung<br />
sämtlicher Abläufe innerhalb des Rechners. Sie sendet<br />
zu Beginn ein CLR-Signal an den PC und IR, wodurch<br />
beide auf 0 gesetzt werden. Sie sendet das Takt-Signal<br />
CLK an alle Register; damit werden die Operationen<br />
des Rechners genau aufeinander abgest<strong>im</strong>mt.<br />
Die Signale, die (nach unten eingezeichnet) aus der<br />
Ablaufsteuerung austreten, bilden ein 12 Bit großes<br />
Kontrollwort:<br />
CP EP LM CE LI EI LA EA SU EU LB LO<br />
Dieses Wort best<strong>im</strong>mt wie die Register bei der nächsten<br />
positiven Taktflanke reagieren. Aktiviert die Ablaufsteuerung<br />
beispielsweise zu einem best<strong>im</strong>mten Zeitpunkt<br />
die beiden Signale LB und ER , so veranlaßt sie<br />
damit zu diesem Zeitpunkt das Laden des B-Registers<br />
mit dem Inhalt der vom Speicheradreßregister (MAR)<br />
adressierten Speicherzelle. Die Ablaufsteuerung sorgt<br />
dafür, daß die verschiedenen Teile des SAP korrekt<br />
zusammenarbeiten: damit die Kontrollsignale in der<br />
richtigen Reihenfolge zu den richtigen Zeitpunkten an<br />
den entsprechenden Komponenten ankommen.
Die Befehle des SAP 53<br />
4 Die Befehle des SAP<br />
Ohne Programm ist die Hardware nutzlos. Also müssen<br />
vor dem Start irgendwie Befehle in den Speicher geladen<br />
werden. Zunächst nur: die 5 Befehle des SAP:<br />
4.1 LDA<br />
• Syntax: LDA adr<br />
• Bedeutung: Load RAM data into Akkumulator.<br />
• Datenfluß: A
54 Die Befehle des SAP<br />
4.6 Ein Beispiel-Programm<br />
Adresse | Mnemonics<br />
0 LDA 9<br />
1 ADD A<br />
2 ADD B<br />
3 SUB C<br />
4 OUT<br />
5 HLT<br />
---------------------------<br />
6 FF<br />
7 FF<br />
8 FF<br />
9 01<br />
A 02<br />
B 03<br />
C 04<br />
D FF<br />
E FF<br />
F FF<br />
Das Ergebnis der Ausführung ist:<br />
Um Befehle und Daten <strong>im</strong> Speicher ablegen zu können,<br />
müssen die Opcodes (Operation Codes) der Befehle<br />
festgelegt werden:<br />
Mnemonic | Opcode<br />
LDA 0000<br />
ADD 0001<br />
SUB 0010<br />
OUT 1110<br />
HLT 1111<br />
Der Speicher wird über die Schalter des SAP programmiert.<br />
Der Opcode ist in die 4 MSB-Positionen zu schreiben.<br />
Die Adresse ist in die 4 LSB-Positionen zu schreiben.<br />
Beispiel: LDA F ... bei Adresse 0<br />
0: |0000 1111|<br />
Die OUT- und HLT-Befehle haben keinen Adreßteil.<br />
D.h. die 4 LSBs sind ohne Bedeutung.<br />
Die allgemeine Form der Befehle in Maschinensprache:<br />
XXXX XXXX<br />
| |____Adreß-Feld<br />
|_________Opcode-Feld<br />
4.6.1 Übung: Assemblierung eines Befehls<br />
B<br />
Übersetzen Sie in Maschinensprache LDA<br />
Lösung:..............................<br />
4.6.2 Übung: ein SAP Additionsprogramm<br />
Der Wert des Ausdrucks 16+20+24-32 ist<br />
in Form eines SAP-Programms zu berechnen (die Zahlen<br />
sind Dez<strong>im</strong>alzahlen).
Die Befehle des SAP 55<br />
4.6.3 Übung: Programmierung des SAP<br />
S 45.<br />
"Schreiben" Sie das obige Programm in den Speicher des SAP. Nehmen Sie das RAM-Schaltdiagramm von<br />
Schalter<br />
WE<br />
Read_Write<br />
Schalter<br />
CE<br />
RUN_Prog<br />
A 3 ...A<br />
0<br />
D 7. ..D<br />
4<br />
D 3 ..D<br />
0
56 Der Maschinenzyklus<br />
Der Teil des Rechners, der für jeden Zeitpunkt festlegt<br />
• welche Wege die Daten nehmen und<br />
• welche Operationen durchgeführt werden müssen,<br />
5 Der Maschinenzyklus<br />
wird als Ablaufsteuerung (ABL) bezeichnet. Die Ablaufsteuerung ermöglicht die automatische Wirkungsweise des<br />
Rechners.<br />
Nachdem das Programm (mit den Daten) in den Speicher geladen ist, geht mit einem Start-Signal die Kontrolle des Systems<br />
an die Ablaufsteuerung über. Sie erzeugt die Kontrollworte, welche die Befehle holen und ausführen.<br />
Die Befehle werden einzeln geholt und ausgeführt; dabei durchläuft die Maschine verschiedene Phasen. Die Phasen<br />
werden mit Hilfe eines Ringzählers erzeugt.<br />
-------------------------<br />
| |<br />
| Ringzähler
Der Maschinenzyklus 57<br />
__ _____ _____ _____ _____ _____ _____ _____<br />
CLK |___| |___| |___| |___| |___| |___| |___| |_<br />
||||||||<br />
_________ _________<br />
T0 | |_______________________________________| |_<br />
_________<br />
T1 ________| |_________________________________________<br />
_________<br />
T2 ________________| |_________________________________<br />
_________<br />
T3 ________________________| |_________________________<br />
_________<br />
T4 ________________________________| |_________________<br />
_________<br />
T5 ________________________________________| |_________<br />
5.1 Der Hole-Zyklus<br />
Im folgenden wird gezeigt, welche Kontrollworte die ABL in den Phasen erzeugen muß, damit ein Befehl ausgeführt<br />
wird. Die Phasen T0, T1 und T2 bilden den Hole-Zyklus (fetch-cycle) des SAP.<br />
5.1.1 Die Adreßphase<br />
Der Zeitabschnitt T0 wird als Adreßphase bezeichnet, weil in dieser Phase die Adresse <strong>im</strong> PC in das MAR transferiert<br />
wird. In dieser Phase sind die Komponenten PC, MAR und ABL aktiv. Damit der Transfer stattfindet, müssen in dieser<br />
Phase (zwischen 2 aufeinanderfolgenden negativen Taktflanken) die Kontrollsignale EP und LM aktiv sein. D.h. ABL<br />
muß in der T0-Phase folgendes Kontrollwort ausgeben:<br />
CP EP LM CE LI EI LA EA SU EU LB LO<br />
0 1 1 0 0 0 0 0 0 0 0 0<br />
Zeichnen Sie die beteiligten Komponenten des SAP:<br />
Das MAR übern<strong>im</strong>mt vom Bus den Inhalt des PC. Denn in der Mitte von T0 tritt eine positive Taktflanke auf und zu<br />
diesem Zeitpunkt übern<strong>im</strong>mt MAR die am Eingang anliegenden Werte.
58 Der Maschinenzyklus<br />
5.1.2 Die Inkrementphase<br />
Die T1-Phase wird als Inkrementphase bezeichnet, weil in ihr der PC um 1 erhöht wird. Die beteiligten Komponenten:<br />
PC und ABL<br />
Die aktiven Kontrollsignale: CP<br />
Das Kontrollwort in der T1-Phase:<br />
CP EP LM CE LI EI LA EA SU EU LB LO<br />
1 0 0 0 0 0 0 0 0 0 0 0<br />
Zeichnen Sie die beteiligten Komponenten des SAP:<br />
Bei der nächsten positiven Taktflanke (in der Mitte von T1) wird der PC um 1 erhöht.<br />
5.1.3 Die Speicherphase<br />
Die T2-Phase wird als Speicherphase bezeichnet, weil der adressierte RAM-Befehl in das Befehlsregister übertragen<br />
wird. Die beteiligten Komponenten: MAR, RAM, IR<br />
Die aktiven Kontrollsignale: CE, LI. Das Kontrollwort in der T2-Phase:<br />
CP EP LM CE LI EI LA EA SU EU LB LO<br />
0 0 0 1 1 0 0 0 0 0 0 0<br />
Zeichnen Sie die beteiligten Komponenten des SAP:<br />
Bei der nächsten positiven Taktflanke (in der Mitte von T2) übern<strong>im</strong>mt IR das adressierte RAM-Wort.<br />
Im Hole-Zyklus werden also nacheinander 3 Kontrollworte ausgegeben:
Der Maschinenzyklus 59<br />
CP EP LM CE LI EI LA EA SU EU LB LO Wirkung<br />
---------------------------------------------------------------<br />
0 1 1 0 0 0 0 0 0 0 0 0 MAR
60 Der Maschinenzyklus<br />
5.2.1.3 T5-Phase<br />
In der T5-Phase werden keine Aktivitäten abgewickelt. Die Komponente ABL muß ein Kontrollwort ausgeben, bei dem<br />
alle Bits inaktiv sind. Deshalb wird die T5-Phase bei dem LDA-Befehl auch als 'tu-nichts' Phase (no operation - nop)<br />
bezeichnet.
Der Maschinenzyklus 61<br />
Die Ausführungsphasen für den Befehl LDA:<br />
CP EP LM CE LI EI LA EA SU EU LB LO Wirkung<br />
-----------------------------------------------------------------<br />
0 0 1 0 0 1 0 0 0 0 0 0 MAR
62 Der Maschinenzyklus<br />
5.2.3.2 T4-Phase<br />
In T4 gelangt das adressierte Wort nach Register B. (Es gilt wie <strong>im</strong>mer: die Übernahme findet in der Mitte von T4 statt,-<br />
bei der nächsten positiven Taktflanke) CE = 1, LB = 1<br />
5.2.3.3 T5-Phase<br />
In T5: EU = 1, LA = 1 (,SU = 0 -> addieren). D.h. das Ergebnis der ALU gelangt in den Akkumulator. In der Mitte von<br />
T5 bei der positiven Taktflanke wird die Summe in den Akkumulator geladen.)<br />
Anmerkung:<br />
Die Durchlaufzeiten (propagation t<strong>im</strong>e) verhindern, daß der Akkumulator bei der einen Flanke mehr als einmal geladen<br />
wird. Wenn die positive Taktflanke kommt, ändert sich der Inhalt des Akkus. Damit ändert sich auch der Inhalt der<br />
ALU. Der neue ALU-Inhalt kommt erst nach zwei Laufzeitverzögerungen (eine für den Akkumulator und eine für die<br />
ALU) an. Es ist dann zu spät den Akkumulator zu setzen; der Akkumulator wird also mit einer positiven Flanke nur einmal<br />
geladen.<br />
Zusammenfassung der Ausführungsphasen für den ADD-Befehl:<br />
CP EP LM CE LI EI LA EA SU EU LB LO Wirkung<br />
---------------------------------------------------------------<br />
T3 0 0 1 0 0 1 0 0 0 0 0 0 MAR
Der Maschinenzyklus 63<br />
S U ___________________________<br />
5.2.5 SUB-Befehl<br />
Dieser Befehl ist dem ADD-Befehl sehr ähnlich. Er unterscheidet sich nur in der Phase T5 von ihm: SU = 1 (subtrahieren).<br />
5.2.6 OUT-Befehl<br />
Annahme: am Ende des Hole-Zyklus steht <strong>im</strong> IR = 1110 xxxx<br />
5.2.6.1 T3-Phase<br />
In T3 wird der Inhalt des Akkumulator in das O-Register geladen.<br />
Aktive Signale: EA = 1, LO = 1<br />
5.2.6.2 T4 und T5-Phase<br />
In diesen Phasen sind keine Aktionen erforderlich: nichts tun<br />
Zusammenfassung der Ausführungsphasen für den OUT-Befehl:<br />
CP EP LM CE LI EI LA EA SU EU LB LO Wirkung<br />
---------------------------------------------------------------<br />
T3 0 0 0 0 0 0 0 1 0 0 0 1 O
64 Der Maschinenzyklus<br />
___ ___ ___ ___ ___ ____ _____<br />
|___| |___| |___| |___| |___| |___| |___| _<br />
||||||||<br />
des Ringzählers<br />
|||<br />
||<br />
1 Maschinenzyklus ist die Zeit für das Holen und Ausführen von einem Befehl. Dadurch ist die Programmlaufzeit direkt<br />
proportional der Anzahl der Befehle.)<br />
5.3.1 Übung: Zykluszeiten<br />
Der SAP habe eine Taktquelle mit einer Frequenz von 1 MHz. (1 Million Taktzyklen in einer Sekunde)-<br />
Wie groß ist ein Maschinenzyklus?<br />
- Wie lange läuft ein Programm mit 12 Befehlen?
Die Ablaufsteuerung 65<br />
6 Die Ablaufsteuerung<br />
Die Ablaufsteuerung ist der Ausgangspunkt für alle Rechneraktionen; sie muß die Kontrollsignale für jeden Befehl erzeugen.<br />
Zunächst werden die einzelnen Komponenten der Ablaufsteuerung vorgestellt.<br />
6.1 Befehlsdecodierer<br />
Ein Befehl wird <strong>im</strong> Hole-Zyklus in das IR geladen. Das Opcodefeld (die 4 höherwertigen Bits) gelangt direkt in die<br />
Ablaufsteuerung. Hier werden die 4 Bits verarbeitet.<br />
Wiederholung: Decodierer<br />
...entschlüsselt eine beliebige 0-1 Kombination (Eingangswert) in eine 1, die an genau einem Ausgang des Decodierers<br />
erscheint.<br />
Der Befehlsdecodierer <strong>im</strong> SAP ist ein 1 zu 5 Decodierer. Vervollständigen Sie das Schaltbild des Decodierers:<br />
|I7 |I6 |I5 |I4<br />
| | | |<br />
| | | | | | | |<br />
& ---- LDA<br />
& ---- ADD<br />
& ---- SUB<br />
& ---- OUT<br />
& ---- HLT<br />
Es ist zu erkennen, daß bei Opcode=0000 nur der Ausgang LDA aktiv ist. Entsprechendes gilt für die anderen Opcodes.<br />
6.2 Kontrollmatrix<br />
Matrix ist hier ein 2-d<strong>im</strong>ensionaler Schaltkreis, der an zwei Eingängen (jeweils Bitgruppen) von zwei verschiedenen<br />
Quellen versorgt wird.<br />
Die Kontrollmatrix soll die Kontrollworte erzeugen. Sie wird gesteuert von
66 Die Ablaufsteuerung<br />
- den Ausgangssignalen LDA, ADD, SUB und OUT des<br />
Befehlsdecodierers und<br />
- den Signalen T0 bis T5 des Ringzählers.<br />
Am Ausgang der Matrix erscheinen dann die Kontrollworte, die festlegen, welche Komponenten in einer best<strong>im</strong>mten<br />
Phase etwas tun sollen. Es werden die Signale für den Hole- und den Ausführungszyklus erzeugt.<br />
Es handelt sich damit um die zentrale Stelle <strong>im</strong> Rechner !<br />
6.2.1 Die Signale des Hole-Zyklus:<br />
Schaltbild der Kontrollmatrix<br />
In dem Schaltkreis der Kontrollmatrix gehen nacheinander T0, T1 und T2 auf H. Man kann erkennen:<br />
T0 = 1 bewirkt EP = 1, LM = 1<br />
T1 = 1 bewirkt CP = 1<br />
T2 = 1 bewirkt CE = 1, LI = 1<br />
Das sind genau die Signale der Kontrollworte in den drei Phasen des Holezyklus:<br />
MAR
Die Ablaufsteuerung 67<br />
6.2.2 Die Signale des Ausführungszyklus:<br />
Es gehen nacheinander T3, T4 und T5 auf 1.<br />
Gleichzeitig geht einer der (mit dem Decodierer verbundenen) Eingänge auf 1. Das führt zu den richtigen Ausgangssignalen<br />
der Kontrollmatrix.<br />
Beispiel:<br />
Wenn LDA = 1, dann sind anderen Eingänge vom Decodierer = 0.<br />
Demnach sind die zu betrachtenden UND-Gatter: das 1., 4., 7. und 10.<br />
Ist T3=1, liefern das 1. und 7. UND Gatter eine 1. Über die OR-Gatter werden so LM = 1 und EI = 1.<br />
Ist T4=1, liefern das 4. und 10. UND Gatter eine 1. Über die OR-Gatter werden so CE = 1 und LA = 1<br />
Ist T5=1, liefert kein UND Gatter eine 1, d.h. das Kontrollwort = 00...0<br />
Das Ergebnis st<strong>im</strong>mt mit dem überein, was bei LDA weiter oben verlangt worden ist. Entsprechendes gilt für ADD, SUB<br />
und OUT.<br />
LDA ADD SUB OUT HLT<br />
T3 L M E I L M E I L M E I E A L O<br />
T4 CE L A CE L B CE L B nop<br />
T5 nop L A E U L A E U S U nop<br />
Die Kontrollmatrix des SAP benötigt für die Erzeugung der Kontrollworte für die vier Befehle 19 AND-Gatter und 6<br />
OR-Gatter.<br />
6.3 Takterzeugung<br />
Es gibt einen Schaltkreis für die CLK- und CLR-Erzeugung; er besitzt einen HLT- und START/STOP-Eingang.<br />
| HLT<br />
V<br />
-------------------<br />
Schalter | |----> CLR<br />
START/STOP------>| Takt-Erzeugung |<br />
| |----> CLK<br />
-------------------<br />
Funktion:<br />
• Schalter in Stellung 'STOP': CLR = H (aktiv)<br />
CLK = L (konstant)<br />
• Schalter in Stellung 'START':CLR = L<br />
___ ___<br />
CLK = ___| |__| |__ , wenn HLT=0<br />
CLK = L , wenn HLT=1
68 Die Ablaufsteuerung<br />
6.3.1 Das Zusammenwirken mit den anderen Teilen des Rechners<br />
Zu Beginn steht der Start/Stop Schalter in Stellung 'STOP' -> CLR = H und die Register werden mit 0 (Ringzähler mit 1)<br />
initialisiert.<br />
Register Inhalt Bedeutung<br />
PC 0000 das Programm beginnt mit dem Befehl bei Adresse 0.<br />
IR 0000 0000 Opcode-Feld = 0000, deshalb ist HLT-Ausgang vom Befehlsdecodierer =<br />
0. Die Takterzeugung könnte laufen.<br />
Ringzähler<br />
000001 Der Rechner befindet sich in Phase T0 und liefert (EP=1, LM=1)<br />
Der Rechner verharrt in diesem Zustand, bis der Start/Stop Schalter in Stellung 'START' gelegt wird. Nun beginnt die<br />
Takterzeugung und mit der ersten positiven Taktflanke gelangt der Inhalt des PC (=0) in das MAR (EP=LM=1)<br />
- ... der Rechner läuft.<br />
Es werden solange Takt<strong>im</strong>pulse erzeugt bis der HLT-Befehl in das IR geladen wird. Wenn IR = 1111 XXXX, dann erzeugt<br />
der Befehlsdecodierer HLT = 1. Dieses Signal gelangt an den HLT-Eingang der Takterzeugung: der Takt wird<br />
angehalten.<br />
6.4 Die gesamte Ablaufsteuerung<br />
Der Befehlszähler, der Ringzähler, die Kontrollmatrix und die Takterzeugung erzeugen die Kontrollsignale für den Hole-<br />
und Ausführungszyklus.<br />
Blockschaltbild der Ablaufsteuerung
Die Ablaufsteuerung 69<br />
Ablauf:<br />
Zunächst werden manuell das Programm und die Daten <strong>im</strong> Speicher abgelegt. Dann bringt der Operator den Schalter in<br />
Stellung 'START'.<br />
Das CLK-Signal steuert alle Register, in Abhängigkeit von dem Kontrollwort am Ausgang von ABL. Der Holezyklus<br />
lädt den nächsten Befehl in das IR. Nach der Decodierung des Opcodes erzeugt die Kontrollmatrix automatisch die Signale<br />
für den Ausführungszyklus. Am Ende des Ausführungszyklus steht der Ringzähler wieder auf 000001. Und der<br />
nächste Maschinenzyklus beginnt. Die Verarbeitung endet, wenn der HLT-Befehl ins IR geladen ist.<br />
Ergänzende Bemerkungen:<br />
Der Rechner besteht aus 5 Teilen:<br />
1. Input: Schalter zum Programmieren<br />
2. Output: O-Register, Binary-Display<br />
3. Speicher: MAR, RAM<br />
4. Arithmetik: AKKU, ALU, B-Register<br />
5. Kontrolle: ABL, PC, IR<br />
6.4.1 Übung: Addition<br />
Inhalt von Akku = 0000 1111 = 0F<br />
bei Adr F <strong>im</strong> RAM = 0000 0110 = 06<br />
Nach der Ausführung von ADD F<br />
. was steht <strong>im</strong> Register B ?<br />
. was steht <strong>im</strong> Akku?<br />
6.4.2 Übung: Assemblierung<br />
OUT<br />
ADD C<br />
SUB F<br />
zu übersetzen in SAP-Maschinencode:<br />
= CPU
70 Die Ablaufsteuerung<br />
LDA 8<br />
6.4.3 Übung: Speicherphase<br />
In der Speicherphase (T2): die Inhalte vor der nächsten positiven Taktflanke:<br />
MAR = 0111 = 7H<br />
RAM7 = 0011 1100 = 3CH<br />
IR = 0001 1011 = 1BH<br />
Was sind die Inhalte nach der positiven Taktflanke?<br />
6.4.4 Übung: der PC in der Inkrementphase<br />
In der Inkrementphase (T1): ist der Inhalt von PC vor der aufsteigenden Taktflanke = 0111 = 7. Welches ist<br />
der Inhalt nach der positiven Taktflanke?
Die Ablaufsteuerung 71<br />
6.4.5 Übung: Kontrollmatrix<br />
die AND-Gatter (der Kontrollmatrix) sind durchnumeriert 1...19. Welche AND-Gatter haben einen H-<br />
Ausgang, wenn folgende Bedingungen vorliegen ?<br />
a. OUT und T3 = 1<br />
b. ADD und T3 = 1<br />
c. SUB und T5 = 1
72 Mikroprogrammierung<br />
7 Mikroprogrammierung<br />
Die Kontrollmatrix ist eine Möglichkeit für die Erzeugung von Kontrollsignalen; in diesem Zusammenhang spricht man<br />
von einer 'hardwired control' bzw. einer festverdrahteten Kontrolleinheit (Kontrolleinheit = Ablaufsteuerung + PC-Reg +<br />
IR-Reg).<br />
Bei größeren Befehlssätzen wird die Kontrollmatrix sehr unübersichtlich; sie besteht aus sehr vielen Gattern. Deshalb<br />
wurde nach einer alternativen Lösung gesucht. Die alternative Lösung lautet: Mikroprogrammierung. Die wesentliche<br />
Idee dabei ist, daß die Kontrollworte in einem Speicher abgelegt sind. Das vereinfacht den Aufbau der Kontrolleinheit<br />
erheblich.<br />
7.1 Das SAP Mikroprogramm<br />
Die Kontrolleinheit gibt dauernd Kontrollworte aus, in jeder Phase Ti ein Kontrollwort. Das sind Anweisungen für den<br />
Rest des Rechners: die Verarbeitungseinheit.<br />
Jedes Kontrollwort bewirkt einen kleinen Verarbeitungsschritt; deshalb die Bezeichnung Mikrobefehl (<strong>im</strong> Gegensatz zu<br />
den Maschinenbefehlen LDA, SUB, ADD,...). Jeder Maschinenbefehl besteht aus 6 Mikrobefehlen. Eine Zusammenstellung<br />
für alle SAP Maschinenbefehle:<br />
(wobei die Kontrollworte C P E P L M CE L I E I L A E A S U E U L B L O in HEX-Schreibweise angegeben werden)<br />
Phase Kontrollwort Befehl aktiv<br />
T0 600 Hole E P L M<br />
T1 800 C P<br />
T2 180 C E L I<br />
---------------------------------------------------------------<br />
T3 240 LDA L M E I<br />
T4 120 CE L A<br />
T5 000 nop<br />
---------------------------------------------------------------<br />
T3 240 ADD L M E I<br />
T4 102 C E L B<br />
T5 024 L A E U<br />
---------------------------------------------------------------<br />
T3 240 SUB L M E I<br />
T4 102 CE L B<br />
T5 02C L A E U S U<br />
---------------------------------------------------------------<br />
T3 011 OUT E A L O<br />
T4 000 nop<br />
T5 000 nop<br />
---------------------------------------------------------------<br />
Diese Mikrobefehle können in einem Kontrollspeicher abgelegt werden; die µ-Befehle des<br />
- Hole-Zyklus bei den Adressen 0H bis 2H - Ausführungs-Zyklus für<br />
LDA 3 -- 5
Mikroprogrammierung 73<br />
ADD 6 -- 8<br />
SUB 9 -- B<br />
OUT C -- E H<br />
Dann muß eine Möglichkeit geschaffen werden, die verschiedenen µ-Befehlsfolgen zu aktivieren, d.h. <strong>im</strong> einzelnen:<br />
• die Anfangsadresse der µ-Folge beschaffen,<br />
• die Adresse schrittweise erhöhen,<br />
• die Adressen dem Kontrollspeicher zuführen.<br />
Das leisten ein Adressierungs-ROM und ein Zähler, die sich in einer µ-programmierten Kontrolleinheit befinden:<br />
Sie besteht aus:<br />
• Adressierungs-ROM<br />
• µ-Zähler<br />
• Kontrollspeicher<br />
7.2 Das Adressierungs-ROM<br />
12 Bit Mikrobefehl<br />
Blocckschaltbild der mikroprogrammierten Kontrolleinheit<br />
Das Adressierungs-ROM enthält die Anfangsadressen der µ-Befehlsfolgen (nur für die Ausführungszyklen). Also:<br />
ROM-Adr Inhalt<br />
0 0011 für LDA<br />
1 0110 für ADD
74 Mikroprogrammierung<br />
7.2.1 Übung: Inhalt des Adressierungs-ROMs<br />
Was muß bei den übrigen Adressen <strong>im</strong> Adr.-ROM stehen?<br />
Wenn die Opcode-Bits I 7 I 6 I 5 I 4 am Adr-ROM anliegen, werden die Anfangsadressen ausgegeben.<br />
7.2.2 Beispiel:<br />
Wird der ADD-Befehl ausgeführt, liegt der Opcode 0001 an I7I6I5I4 und bildet die Adresse, die am Adressierungs-<br />
ROM anliegt. Am Ausgang des Adressierungs-ROMs steht dann: 0110.<br />
7.3 Der µ-Zähler<br />
Der µ-Zähler ist eine Komponente der Register-Ebene<br />
| | | |<br />
V V V V<br />
----------------------<br />
------|LOAD |<br />
CLK-----------o|> |<br />
------|CLR |<br />
----------------------<br />
| | | |<br />
V V V V<br />
mit folgender Wirkungsweise:<br />
Signal Erläuterung Wirkung auf µ-Zähler<br />
CLR = H Reset µ-Zähler = 0<br />
LOAD = L wird mit jeder neg. Flanke von<br />
CLK:(also zwischen zwei Phasen)<br />
µ-Zähler = µ-Zähler + 1<br />
LOAD = H bei der nächsten neg. Flanke von CLK: µ-Zähler übern<strong>im</strong>mt den Wert am Eingang<br />
T2 = H Da in der vorliegenden Kontrolleinheit der µ-Zähler übern<strong>im</strong>mt den am Ein-<br />
der LOAD-Eingang mit T2 verbunden ist: gang anliegenden Wert, - bei der<br />
nächsten neg. Flanke von CLK; also<br />
am Ende von T2.<br />
T0,T1,T3,T4,T5 der µ-Zähler zählt (jeweils bei neg. µ-Zähler = µ-Zähler + 1<br />
=H<br />
Flanke von CLK), also am Ende von jeder<br />
Phase.
Mikroprogrammierung 75<br />
Der Ablauf:<br />
1. CLR = H, CLK = L<br />
--> µ-Zähler = 0000<br />
__ __ __ __<br />
2. (mit Start): CLR= L u. CLK = _____| |__| |__| |__|<br />
------->| | |<br />
T0 T1 T2<br />
in Phase T0 (... bis zur ersten neg. Flanke von CLK): µ-Zähler = 0000<br />
in Phase T1: = 0001<br />
in Phase T2: = 0010<br />
... soweit der Ablauf <strong>im</strong> Hole-Zyklus.<br />
Der Opcode <strong>im</strong> IR steuert den Ausführungszyklus.<br />
Wenn ein ADD-Befehl geholt worden ist:<br />
I 7 I 6 I 5 I 4 = 0001<br />
liegt am Ausgang des Adressierungs-ROM der Wert 0110<br />
Diese Start-Adresse ist die Eingabe für den µ-Zähler. 0110 wird vom µ-Zähler übernommen, wenn LOAD=1, bei der<br />
nächsten neg. Flanke von CLK: also am Ende von T2.<br />
Anschließend zählt der µ-Zähler weiter:<br />
in Phase T3: µ-Zähler = 0110<br />
T4 0111<br />
T5 1000<br />
Jetzt beginnt wieder die T0-Phase (mit der pos. Flanke von T0 am CLR-Eingang). Der µ-Zähler erhält den Wert 0, das<br />
ist wieder die Start-Adresse für den Hole-Zyklus. Es beginnt der nächste Maschinenzyklus.<br />
7.4 Der Kontrollspeicher oder Mikrocode ROM<br />
Im Kontrollspeicher sind die µ-Befehle abgelegt. Im Hole-Zyklus bekommt er die Adressen 0000, 0001, 0010.<br />
Demnach liegen am Ausgang die Kontrollworte 600, 800 und 180.<br />
Wenn ein ADD-Befehl ausgeführt wird, so bekommt der Kontrollspeicher anschließend die Adressen:<br />
0110 \<br />
0111 > = Adresse der µ-Befehle des Ausführungs-Zyklus bei ADD<br />
1000 /<br />
und am Ausgang erscheinen:<br />
240 \
76 Mikroprogrammierung<br />
102 > = Kontrollworte = µ-Befehle.<br />
024 /<br />
7.4.1 Übung: Kontrollspeicher<br />
Zeigen Sie, welche Inhalte der µ-Zähler und Kontrollspeicher bei einem ADD Befehl haben.<br />
__ __ __ __ __ __ __<br />
CLK ____________| |__| |__| |__| |__| |__| |__| |__<br />
Ringzähler -T0---->| T1 | T2 | T3 | T4 | T5 | T0 |<br />
| | | | | | |<br />
µ-Zähler _______________|_____|_____|_____|_____|_____|_____|<br />
| | | | | | |<br />
Kontroll- | | | | | | |<br />
speicher _______________|_____|_____|_____|_____|_____|_____|<br />
| | | | | | |<br />
7.5 Veränderlicher Maschinenzyklus<br />
Die Befehle LDA und OUT benötigen nicht alle Phasen des Ausführungszyklus, LDA benötigt nur zwei, OUT nur eine.<br />
Die restlichen Phasen bewirken nichts (sind nop's). Bisher sind alle Maschinenzyklen gleich lang. Kommt es allerdings<br />
auf die Ausführungsgeschwindigkeit an, so sind die nop-Zeiten zu el<strong>im</strong>inieren.<br />
Die nop-Phasen können eingespart werden, indem die µ-programmierte Kontrolleinheit ergänzt wird (es wird hier nur<br />
eine von vielen Möglichkeiten vorgestellt):<br />
Das nop-Kontrollwort ist 000HEX.<br />
Wenn der Kontrollspeicher dieses Kontrollwort erzeugt, soll der aktuelle Maschinenzyklus sofort beendet werden, d.h.<br />
es soll mit Phase T0 weitergehen.
Mikroprogrammierung 77<br />
Erkennung eines NOP Kontrollwortes<br />
Zu diesem Zweck wird das NOP-Signal (000HEX) über ein OR-Gatter mit dem CLR-Eingang des Ringzählers verbunden:<br />
Das hat zur Folge<br />
Reset des Ringzählers bei NOP<br />
• für den LDA-Befehl: in den Phasen T0 bis T4 ändert sich nichts. Wenn T5 beginnt, gibt der Kontrollspeicher<br />
000HEX aus. NOP wird H und deshalb T0 = H und µ-Zähler = 0.<br />
• für den OUT-Befehl: Verminderung um 2 Phasen. Wenn T4 beginnt, gibt der Kontrollspeicher 000 aus.<br />
Variable Maschinenzyklen sind bei heutigen Rechnern weit verbreitet. Beispiel: der INTEL 8085-Mikroprozessor realisiert<br />
2 bis 6 Phasen.
78 Mikroprogrammierung<br />
7.6 Gegenüberstellung µ-Programmierung - hardwired control<br />
1 µ-Programmierung hardwired<br />
control<br />
Änderungen leicht schwer<br />
Erweiterbarkeit leicht schwer<br />
Platzbedarf mittel groß<br />
Struktur regulär irregulär<br />
Komplexität mittel hoch<br />
Entwicklungszeit mittel lang<br />
Geschwindigkeit mittel schnell<br />
Nach der obigen Tabelle gibt es also offensichtliche technische Vorteile, die µ-Programmierung einzusetzen.<br />
Änderungen und Erweiterungen des Befehlssatzes sind bei festverdrahteter Kontrolleinheit sehr aufwendig, da eine<br />
neue Kontrollmatrix erstellt werden muß. Bei der µ-programmierten Kontolleinheit brauchen nur zwei ROMs modifiziert<br />
und ausgewechselt werden.<br />
Voraussetzung hierfür ist:<br />
• freier Speicherplatz <strong>im</strong> Kontrollspeicher<br />
• freie Bitkombinationen für neue Befehle<br />
"Be<strong>im</strong> MOTOROLA 68000 ist ca. ein Viertel des Mikrocode-ROMs unbenutzt und etwa ein Achtel des Opcodes nicht<br />
<strong>im</strong>plementiert." 2<br />
Bei CPU-Familien, also Prozessoren, die von Anfang an mit verschiedenen Ausbaustufen geplant werden (z.B.<br />
MOTOROLA 68000 Familie mit den bis heute eingeführten Prozessoren 68000, 68010, 68020, 68030, 68040) bietet<br />
sich deshalb der Einsatz der µ-Programmierung besonders an.<br />
Die reguläre Struktur dieser Logik - es handelt sich um ein ROM <strong>im</strong> Kontrast zur kombinatorischen Logik - vermindert<br />
die Komplexität. "Damit wird das Ganze überschaubarer und setzt die Entwicklungszeit herab. Ein komplexeres<br />
Steuerwerk bei konstanten Entwicklungskosten könnte <strong>im</strong>plementiert werden. Die Regularität der Struktur vereinfacht<br />
das Chip Layout. Dies hat seinerseits beträchtliche Zeiteinsparungen (vermutlich Monate) und geringere Anzahl von<br />
Fehlerquellen zur Folge." 3<br />
In einem Fall ist die hardwired control überlegen. Sie ist schneller. Es sind nur die Gatterlaufzeiten maßgebend.<br />
Beispiele:<br />
Prozessor Control Anzahl<br />
Mnemonics<br />
Anzahl<br />
Opcodes<br />
Opcode-<br />
Breite<br />
Register-<br />
Breite<br />
6502 hardwired 56 151 8 bit 8 bit<br />
Intel<br />
8080/85<br />
hardwired >160
Mikroprogrammierung 79<br />
Bei der Prozessorentwicklung wurden <strong>im</strong>mer leistungsfähigere Befehlssätze <strong>im</strong>plementiert (CISC-Prozessoren -<br />
Complex Instruction Set Computer), so daß die Hersteller um den Einsatz der Mikroprogrammierung aus oben genannten<br />
Gründen nicht herumkamen. Der Punkt ist deshalb wichtig, weil in den letzten Jahren mit der Entwicklung von sogenannten<br />
RISC-Prozessoren (Reduced Instruction Set Computer) die hardwired control wegen der opt<strong>im</strong>alen Geschwindigkeit<br />
wieder eingesetzt wird.<br />
7.6.1.1 Übung: ABL mit Mikroprogrammierung<br />
Zeichnen Sie das Blockschaltbild einer Ablaufsteuerung mit Mikroprogrammierung.<br />
7.6.1.2 Übung: Erweiterung des SAP<br />
Sie kennen jetzt die vollständige Architektur unseres SAP. Schlüpfen Sie doch mal in die Rolle eines Computer<br />
Architekten und erweitern die Architektur des SAP so, daß er die Befehle Store Akkumulator to Adress (STA)<br />
und den Befehl Jump to Adress (JMP) ausführen kann.<br />
Vorgehensweise:<br />
• Genaue Definition des Befehls, Beschreibung des notwendigen Datenflusses<br />
• Welche vorhandenen Bausteine müssen verändert, erweitert werden<br />
• Welche zusätzlichen Bausteine werden benötigt<br />
• Legen Sie den Opcode für die Befehle fest<br />
• Entscheiden Sie sich für eine ABL und modifizieren sie so, daß der neue Befehl erkannt und behandelt werden kann.
80 Weiterentwicklung des SAP - der<br />
8 Weiterentwicklung des SAP - der 8085<br />
8.1 Beschränkungen des SAP<br />
• Das RAM läßt sich nur manuell beschreiben.<br />
• Der SAP kennt keine Programmsteuerung auf Grund von Zuständen, Bedingungen.<br />
• Er kennt weder bedingte noch absolute Sprungbefehle.<br />
• Er kennt keine Subroutines.<br />
• Er kennt keine Interrupts.<br />
• Sein Speicher faßt mit 16 Byte nur sehr bescheidene Programme.<br />
Der SAP ist noch keine Universalrechenmaschine; allgemeine Probleme lassen sich nicht in einem Algorithmus fassen,<br />
wenn nur die bekannten 5 Befehle zur Verfügung stehen. Die einfache Aufgabe, "führe eine Aktion n-mal durch", kann<br />
der SAP nicht durchführen, weil er nicht prüfen kann, wann die Aktion zum n.-mal durchgeführt wurde.<br />
Im folgenden sollen Grundzüge eines Rechnersystems dargestellt werden, für das die Beschränkungen des SAP nicht<br />
mehr gelten: ein 8 Bit breiter Mikroprozessor mit 64 k adressierbarem RAM und festverdrahteter Ablaufsteuerung (hardwired<br />
control). Es gab mehrere solcher Systeme von Ende der 70ger bis Mitte der 80ger Jahre. (Z80 in Rechnern mit<br />
Betriebssystem CPM, 6502 in Commodore C64 und Apple II und 8080/8085 von Intel als Industriestandard ...) Die folgenden<br />
Ausführungen beziehen sich auf den 8085.<br />
Um einen Programmablauf auf Grund von Zuständen - conditions- (größer, kleiner, null, negativ...) formulieren zu können,<br />
müssen diese Zustände vom Prozessor angezeigt werden.<br />
8.2 Flags<br />
Flags sind Flip-Flops, die während eines Programmablaufes sich ändernde Zustände signalisieren. Diese Flags sind an<br />
der ALU angeschlossen.<br />
Erzeugte Flags des Universalrechners vom Typ Intel 8085:<br />
Sign Flag - Ist der Inhalt des Akkumulators negativ, wird das Sign Flag gesetzt (Flip-Flop wird high)<br />
Zero Flag - Ist der Inhalt des Akkumulators Null, wird das Zero Flag gesetzt.<br />
Carry-Flag - Führt eine Addition zu einem Überlauf, wird das Carry Flag gesetzt.<br />
Parity-Flag - Ist die Anzahl bits <strong>im</strong> Akkumulator mit dem Wert 1 geradzahlig, wird das Parity-Flag gesetzt.<br />
Diese Flags sind Bits in einem 8 Bit Register F (siehe Blockdiagramm des 8085 <strong>im</strong> Anhang).
Weiterentwicklung des SAP - der 81<br />
8.2.1 Übung: Das Sign-Flag<br />
Ist das oberste Bit <strong>im</strong> Akkumulator (bzw. ALU) gesetzt, so repräsentiert dies einen negativen Wert. Das<br />
Sign Flag soll darüber Auskunft geben, ob der Wert positiv oder negativ ist.<br />
Überlegen Sie, wie die Signale bit7 bis bit0 der ALU verarbeitet werden müssen, damit bei positivem Vorzeichen die<br />
Leitung (Sign-Flag <strong>im</strong> Register F) auf low, andernfalls auf high gesetzt wird.<br />
1<br />
8.2.2 Übung: Das Zero Flag<br />
Will man eine Aktion n-mal durchführen, so ließe sich das wie folgt formulieren:<br />
1. - Lade in ein Zählerregister Z die Zahl n<br />
2. - führe die Aktion aus<br />
3. - dekrementiere das Zählerregister Z<br />
4. - ist Z 0, dann weiter bei 2<br />
5. - fertig<br />
Um diesen Algorithmus programmieren zu können, muß man ein Register auf den Inhalt 0 testen können. Überlegen Sie,<br />
wie die Signale bit7 bis bit0 der ALU verarbeitet werden müssen, damit bei Eintreten des Wertes 0 eine Leitung (Zero<br />
Flag) auf high gesetzt wird.<br />
Die Aufgabe wird nun genauer formuliert und mit Instruktionen des 8085 gelöst.<br />
Aufgabenstellung: Addiere die Zahlen von 1 bis 10<br />
Label Instruction<br />
1.-Lade den Akkumulator mit 0 MVI A, 0<br />
2.-Lade in das Register C die Zahl 10 MVI C, 0A<br />
3.-Aktion ausführen=addiere C zu Akkumulator Loop: ADD C<br />
4.-dekrementiere das Zählerregister C DCR C
82 Weiterentwicklung des SAP - der<br />
5.-ist C 0, dann weiter bei 3 JNZ Loop<br />
6.-ablegen des Ergebnisses bei 3020H STA 3020H<br />
7.-fertig HLT<br />
Das Ergebniss wird zwar nirgendwo angezeigt, das kümmert jetzt aber nicht weiter. Was hier interessiert, ist die Instruktion<br />
JNZ - Jump if not Zero. Sie fordert zunächst einen Verstoß gegen das bisherige Prinzip, eine Instruktion nach der<br />
anderen in aufsteigender Folge abzuarbeiten, indem einfach der PC nach jedem Befehl erhöht wird und so auf die nächste<br />
Instruktion <strong>im</strong> RAM zeigt. Daraus folgt, der PC muß beschreibbar sein, alle "Jump to address" Befehle machen nichts<br />
anderes, als den PC mit einem neuen Wert zu beschreiben, von dem aus die Verarbeitung wieder in aufsteigender Adreßreihenfolge<br />
weiter geht.<br />
Da der Programmspeicher 64 k RAM umfaßt, muß der PC ein 16 Bit Register sein. JNZ ist ein Beispiel für einen bedingten<br />
Sprung, wobei die Bedingung das Zero-Flag des F-Registers bildet. Dementsprechend gibt es noch die Instruktionen<br />
JZ (Jump if Zero), JM (Jump if minus) und den absoluten Sprungbefehl JMP (Jump, no condition)<br />
8.2.3 Übung : Handassemblierung<br />
Assemblieren Sie das obige Programm anhand der Tabelle ab Adresse 2000H. Assemblieren heißt: Übersetzen<br />
der Mnemonics und Labels in Opcodes und Adressen<br />
Adresse Hex Inhalt Mnemonic<br />
2000 3E MVI A, 0<br />
2001 00<br />
2002<br />
2003<br />
2004<br />
2005<br />
2006<br />
2007<br />
2008<br />
2009<br />
200A<br />
200B<br />
200C<br />
Wie man diesem Assemblerlisting entnehmen kann, benötigen die einzelnen Befehle unterschiedlich viele Bytes <strong>im</strong><br />
Speicher. Der ADD C Befehl z.B. benötigt 1 Byte, der JNZ 2 Byte und der STA 3 Byte. Be<strong>im</strong> SAP gab es <strong>im</strong>mer nur 1<br />
Byte Befehle ! (4 bit Opcode und 4 bit Operand). Da das Instruktionsregister be<strong>im</strong> 8085 auch nur 8 bit breit ist, kann<br />
also nicht jeder Befehl auf einmal vollständig geholt werden, d.h. die fetch-Phase ist nicht wie früher mit 3 Taktzyklen<br />
abgeschlossen. Wie ein Befehlszyklus aus mehreren Maschinenzyklen (be<strong>im</strong> SAP war das noch das selbe !) aufgebaut<br />
ist, wird nun am Beispiel des STA address erläutert:<br />
Der Befehl STA bewirkt, daß der Inhalt des Akkumulators unter der direkten Adresse abgespeichert wird, die durch das<br />
zweite und dritte Byte des Befehls angegeben ist. Im ersten Maschinenzyklus (M1) gibt die Zentraleinheit den Inhalt des<br />
Programmzählers (PC) auf den Adreß-Bus, führt einen Zyklus MEMORY READ aus, wodurch aus dem Speicher der<br />
Operationcode des neuen Befehls (STA) abgerufen wird. Das ist also bisher nichts anderes als unsere bekannte fetch-<br />
Phase und der Opcode von STA steht <strong>im</strong> Instruktionsregister IR. In der 4. Taktperiode von M1 interpretiert die Ablaufsteuerung<br />
mittels des Befehlsdecodierers den Opcode und setzt das Signal, die Steuerleitung für STA auf high. Jetzt
Weiterentwicklung des SAP - der 83<br />
sorgt die Kontrollmatrix dafür, daß 3 weitere Maschinenzyklen ausgeführt werden, zwe<strong>im</strong>al MEMORY READ und<br />
einmal MEMORY WRITE um die Adresse einzulesen, wo der Akkuinhalt abgelegt werden soll und um die Daten abzulegen.<br />
Dafür inkrementiert der 8085 den PC, womit das nächste Byte des Befehls angesprochen wird und führt einen<br />
MEMORY READ <strong>im</strong> Maschinenzyklus M 2 mit der Adresse PC+1 aus. Der angesprochene Speicher stellt die adressierten<br />
Daten auf dem Datenbus für die CPU bereit. Der 8085 speichert diese Daten - das niederwertige Byte der Adresse<br />
3020 H, also die 20 H - vorübergehend intern in der Zentraleinheit ab. Er benutzt dafür das Register Z, das nicht <strong>im</strong><br />
Blockschaltbild des 8085 eingetragen ist, weil der Programmierer keinen Zugriff darauf hat. Nun inkrementiert der 8085<br />
den PC erneut auf die Adresse PC+2 und liest aus dem Speicher das nächste DatenByte aus (M 3 ) welches das höherwertige<br />
Byte der direkten Adresse ist und legt es <strong>im</strong> internen Register W ab.<br />
Jetzt hat der Prozessor alle drei Byte des STA-Befehls geholt und dafür bereits drei Maschinenzyklen benötigt. Die folgende<br />
Ausführung bedeutet, daß die in M2 und M3 eingeholten Daten auf den Adreßbus gelegt werden, worauf der<br />
Inhalt des Akkumulators auf den Datenbus gebracht und anschließend ein Maschinenzyklus MEMORY WRITE ausgeführt<br />
wird (M4) Damit ist der Befehlszyklus beendet und es geht weiter bei M1 des nächsten Befehls.<br />
8.3 Zeitablauf bei dem Befehl STA<br />
<br />
M -Zyklus <br />
T-Periode T1 T2 T3 T4 T1 T2 T3 T1 T2 T3 T1 T2 T3<br />
Clk<br />
Art des Masch.zyklus<br />
_ _ _ _<br />
__/ \_/ \_/ \_/ \<br />
_ _ _<br />
__/ \_/ \_/ \<br />
_ _ _<br />
__/ \_/ \_/ \<br />
_ _ _<br />
__/ \_/ \_/ \<br />
Speicher lesen Speicher lesen Speicher lesen Speicher<br />
schreiben<br />
Adreßbus Die Adresse (Inhalt<br />
des Pro-grammzählers)<br />
zeigt auf das<br />
1. Byte (Operations-code)<br />
des Befehls<br />
Datenbus Operationscode des<br />
Befehls<br />
Die Adresse<br />
(PC+1) zeigt<br />
auf das 2.<br />
Byte des Befehls<br />
Niederwertiges<br />
Byte der direktenAdresse.<br />
Zeitdiagramm STA<br />
8.4 Erzeugen von Sign- und Zero-Flag<br />
Die Adresse<br />
(PC+2) zeigt<br />
auf das 3.<br />
Byte des Befehls<br />
Höherwertiges<br />
Byte der direktenAdresse.<br />
Die Adresse ist die<br />
in M2 und M3 abgerufene<br />
direkte Adresse.<br />
Inhalt des Akkumulators.<br />
Die folgende Schaltung zeigt mit den Symbolen der früheren DIN-Norm, wie die Flags erzeugt werden können.
84 Weiterentwicklung des SAP - der<br />
Schaltbild für die Erzeugung von Sign- und Zero-Flag<br />
8.5 Blockdiagramm des 8085 (Intel Corporation)<br />
Blockdiagramm des 8085 (Intel Corporation)
Weiterentwicklung des SAP - der 85<br />
Anschlußbezeichnungen und Funktionen des 8085
86 Weiterentwicklung des SAP - der<br />
Bezeich- Nummer Eingang E Funktion<br />
nung<br />
Ausgang A<br />
A8 - A15 21 - 28 A Adressen-Bus: Die höherwertigen 8 Bits der Speicheradresse oder die 8<br />
Bit der E/A Adresse; die Ausgänge sind während der Betriebszustände<br />
HOLD HALT und RESET hochohmig<br />
AD0 - AD7 12-19 E/A Gemultiplexter Adressen/Datenbus: Während der ersten Taktperiode<br />
eines Maschinenzyklus stehen am Bus die niederwertigen 8 Bit der<br />
Speicheradresse (oder die E/A-Adresse) an. In der zweiten und dritten<br />
Taktperiode wird der Bus anschließend zum Datenbus.<br />
ALE 30 A Adressenspeicher-Freigabe: Das Signal tritt in der ersten Taktperiode<br />
eines Maschinenzyklus auf und<br />
ermöglicht, daß die Adresse in den integrierten Adressenspeichern<br />
von Peripherie-Bausteinen ge<br />
speichert wird. Die fallende Flanke des ALE-Signals ist so eingestellt,<br />
daß die Aufbau- und Haltezeiten der Adresseninformation<br />
garantiert sind.<br />
Die fallende Flanke von ALF kann auch zum Takten der Status-<br />
Information verwendet werden. Der Ausgang ALE wird niemals hochohmig.<br />
S0, S1 und 29,33 A Maschinenstatus<br />
IO-M/ 34<br />
IO-M/ S1 S0 Status<br />
0 0 1 Speicher schreiben<br />
0 1 0 Speicher lesen<br />
1 0 1 ElAschreiben<br />
1 1 0 E/A lesen<br />
0 1 1 Operationscode-Abruf<br />
1 1 1 lnterrupt-Quittung<br />
* 0 0 Halt<br />
* X X Hold<br />
* X X Reset<br />
* = hochohmig (Tri-state)<br />
RD/ 32 A<br />
X = undefiniert.<br />
S1 kann als voreilendes RW/ -Statussignal verwendet erden. IO-M/, ,<br />
S0 und S1 werden am Anfang eines Maschinenzyklus gültig und bleiben<br />
es über den gesamten Zyklus. Die abfallende Flanke des ALESignals<br />
kann zum Speichern der Zustände dieser Leitungen verwendet werden.<br />
Lesen (Read): Ein L-Signal an RD/ gibt an, daß der ausgewählte Speicher-<br />
oder E/A-Baustein<br />
gelesen werden soll und daß der Daten-Bus für die Daten-übertragung<br />
zur Verfügung steht.<br />
Der Ausgang ist in den Betriebsarten »Hold«, »Halt« und »Reset« hochohmig.<br />
WR/ 31 A Schreiben (Write): Ein L-Signal an WR/ gibt an, daß am Daten-Bus<br />
anstehenden<br />
die Daten in den ange wählten Speicherplatz oder E/A-Kanal geschrieben<br />
werden sollen. Die Daten werden mit der steigenden Flanke von WR/<br />
übergeben. Während<br />
der Betriebs arten »Hold«, »Halt« und »Reset« ist der Ausgang hochohmig.<br />
READY 35 E Ein H-Signal an READY während eines Lese- oder Schreibzyklus zeigt<br />
an, daß der Speicher oder der<br />
Peripherie-Baustein zum Ausgeben oder Aufnehmen von Daten bereit<br />
ist. Wenn der READY-Eingang L<br />
Signal führt, wartet die Zentraleinheit über eine ganze Zahl von
Weiterentwicklung des SAP - der 87<br />
Taktperioden, bis READY auf H-Pegel<br />
übergeht, worauf der Lese- oder Schreibzyklus beendet wird.<br />
HOLD 39 E HOLD zeigt an, daß eine andere Einheit den Adres sen- und Daten-Bus<br />
anfordert. Nach dem Eintreffen<br />
der HOLD-Anforderung gibt die Zentraleinheit den Bus frei, sobald die<br />
augenblicklich ablaufende Bus-<br />
Operation beendet ist. Interne Operationen können weiterhin ablaufen.<br />
Der Mikroprozessor hat erst dann<br />
wieder Zugang zum Bus, wenn das Signal HOLD zurückgenommen wird.<br />
Sobald das HOLD-Signal<br />
quittiert ist, werden die Adressen- und Daten-Leitungen sowie RD, WR<br />
und IO-M hochohmig.<br />
HLDA 38 A Quittung von HOLD. Das Signal zeigt an, daß die Zentraleinheit eine<br />
HOLD-Anforderung empfangen<br />
hat und den Bus in der nächsten Taktperiode frei geben wird. HLDA<br />
geht auf L-Signal über, sobald die<br />
HOLD-Anforderung zurückgenommen ist. Die Zentraleinheit übern<strong>im</strong>mt den<br />
Bus eine halbe Takt-<br />
periode nach dem Obergang von HLDA auf L-Pegel.<br />
INTR 10 E Unterbrechungs-Anforderung: Der Eingang wird als allgemeiner Interrupteingang<br />
verwendet. Er wird nur<br />
während der vorletzten Taktperiode eines Befehls abgefragt sowie<br />
während der Zustände »Hold« und<br />
»Halt«. Wenn der Eingang aktiv ist, wird das Inkrementieren des Programmzählers<br />
(PC) gesperrt und<br />
INTA ausgegeben. Während dieses Zyklus kann ein RESTART- oder CALL-<br />
Befehl für den Sprung zu dem<br />
lnterrupt-Bedienungsprogramm eingefügt werden. Der Eingang INTR wird<br />
über Software freigegeben<br />
und gesperrt. Er wird ferner durch Reset« sowie unmittelbar nach<br />
Annahme einer Unterbrechungsanforderung gesperrt.<br />
INTA 11 A INTERRUPT-Quittung: Der Ausgang wird in dem Befehlszyklus<br />
nach Annahme eines INTR-Signals anstelle von RD verwendet<br />
(und hat den gleichen Zeitablauf). Er kann zur<br />
Aktivierung des Unterbrechungs-Steuerbausteins SAB 8259A<br />
oder eines an deren lnterrupt-Kanals verwendet werden.<br />
RST 5.5 9 E RESTART-Interrupt: Diese drei Eingänge haben den<br />
RST 6.5 8 gleichen Zeitablauf wie INTR, bewirken jedoch, daß automatisch<br />
ein interner RESTART<br />
RST 7.5 7 -Befehl eingefügt wird. Die Priorität dieser lnterrupt-<br />
Eingänge ist so geordnet, wie in nachfolgender Tabelle<br />
gezeigt. Diese lnterrupts haben eine höhere Priorität,<br />
als INTR. Außerdem können sie durch Verwendung des Befehls<br />
SIM einzeln maskiert werden.<br />
TRAP 6 E Der lnterrupt-Eingang TRAP ist ein nicht maskierbarer<br />
RESTART-lnterrupt-Eingang. Er wird gleichzeitig mit INTR<br />
oder RST 5.5-7.5 abgefragt und von keiner Maske oder<br />
lnterrupt-Freigabe beeinflußt. Er hat von allen lnterrupt-Eingängen<br />
die höchste Priorität (siehe nachfolgende<br />
Tabelle)<br />
RESET IN 36 E Ein L-Signal an diesem Eingang setzt den Programmzähler<br />
auf 9 und das lnterrupt-Freigabe- sowie HLDA Flipflop<br />
zurück. Der Daten- und Adressen-Bus sowie die Steuerleitungen<br />
sind, solange RESET ansteht hochohmig. Da RESET<br />
asynchron arbeitet, können die internen Register und
88 Weiterentwicklung des SAP - der<br />
Flags des Prozessors durch RESET mit undefinierbaren<br />
Ergebnissen verändert werden. RESET IN ist ein Schmitt-<br />
Trigger-Eingang und ermöglicht den Anschluß einer R-C-<br />
Kombination zur RESET-Verzögerung be<strong>im</strong> Zuschalten der<br />
Versorgungsspannung. Die Zentraleinheit bleibt so lange<br />
zurückgesetzt, wie RESET IN ansteht<br />
RESET QUT 3 A Zeigt an, daß die Zentraleinheit rückgesetzt wird. Dieser<br />
Ausgang kann als System-Rücksetzsignal verwendet<br />
werden. Das Signal ist mit dem Prozessortakt synchronisiert.<br />
Seine Dauer erstreckt sich über eine ganze Zahl<br />
von Taktperioden<br />
Xi, X 2 1, 2 E An X 1 und X 2 wird ein Quarz, eine LC- oder eine RC Kombination<br />
zur Anregung des internen Taktgenerators angeschlossen.<br />
X 1 kann auch als Eingang für einen externen<br />
Takt verwendet werden. Die Eingangsfrequenz wird halbiert<br />
und ergibt die interne Arbeitsfrequenz des Prozessors<br />
CLK 37 A Taktausgang zur Verwendung als Systemtakt. Die Periodendauer<br />
des Signals CLK beträgt das Doppelte der Eingangs-<br />
Periodendauer an X 1, X 2.<br />
SID 5 E Eingang für serielle Datenübertragung. Der Zustand dieses<br />
Eingangs wird bei jeder Ausführung eines RIM-Befehls<br />
in das Bit 7 des Akkumulators über tragen.<br />
SOD 4 A Ausgang für serielle Datenübertragung. Der Ausgang SOD<br />
wird entsprechend der Form des Befehls SIM gesetzt bzw.<br />
rückgesetzt<br />
Vcc 40 Versorgungsspannung (+5V><br />
V 55 20 Masse (0V)<br />
8.6 Der Befehlssatz des 8085<br />
Befehl Operanden Kurzbeschreibung Bytes T-States engl. Beschreibung<br />
ACI A, data, Cy Byte 2 wird unter Berücksichtigung des Übertrags zum<br />
Akku-Inhalt addiert<br />
2 7 add <strong>im</strong>mediate with Carry<br />
ADC reg A, r, Cy Der Akku-Inhalt wird unter Berücksichtigung des Übertrags<br />
zum adressierten Registerinhalt addiert und wieder <strong>im</strong><br />
Akku gespeichert<br />
1 4 add Register with Carry<br />
ADC M A, M, H&L, Der Akku-Inhalt wird unter Berücksichtigung des Über- 1 7 add Memory with Carry<br />
Cy<br />
trags zum Inhalt der durch H&L adressierten Speicherzelle<br />
addiert und wieder <strong>im</strong> Akku gespeichert<br />
ADD reg A, r Der Akku-Inhalt wird zum adressierten Registerinhalt<br />
addiert und wieder <strong>im</strong> Akku gespeichert<br />
1 4 add Register<br />
ADD M A, M, H&L Der Akku-Inhalt wird zum Inhalt der durch H&L adressierten<br />
Speicherzelle addiert und wieder <strong>im</strong> Akku gespeichert<br />
1 7 add Memory<br />
ADI A, B2 Byte 2 wird zum Akku-Inhalt addiert 2 7 add <strong>im</strong>mediate<br />
ANA reg A, r Bitweise UND-Verknüpfung des Akkus mit dem Registerinhalt<br />
1 4 AND Register<br />
ANA M A, M, H&L Bitweise UND-Verknüpfung des Akkus mit dem durch<br />
H&L adressierten Speicherzelle<br />
1 7 AND Memory<br />
ANI A, data Bitweise UND-Verknüpfung des Akkus mit Byte 2 2 7 AND <strong>im</strong>mediate<br />
CALL PC, M, SP, adr unbedingter Unterprogrammaufruf mit Ablage der Rücksprungadresse<br />
<strong>im</strong> Stack-Register<br />
3 18 call unconditional<br />
CC PC, M, SP, adr bedingter Unterprogrammaufruf mit Ablage der Rücksprungadresse<br />
<strong>im</strong> Stack-Register<br />
3 9/18 call conditional<br />
CM PC, M, SP;adr Bei Sign-Bit = 1 wird das Programm an adr fortgesetzt 3 11/17 call on minus
Weiterentwicklung des SAP - der 89<br />
CMA A Bildung des 1er Komplements des Akkus 1 4 complement accumulator<br />
CMC Cy Übertragbit komplementieren 1 4 complement carry<br />
CMP reg A, r Vergleiche Akku mit Registeri 1 4 compare register<br />
CMP M A, M, H&L Vergleiche Akku-Inhalt mit der durch H&L adressierten<br />
Speicherzelle<br />
1 7 compare memory<br />
CNC PC, M, SP, adr Bei Carry-Bit = 0 wird das Programm an adr fortgesetzt 3 11/17 call on no carry<br />
CNZ PC, M, SP, adr Bei Zero-Bit = 0 wird das Programm an adr fortgesetzt 3 11/17 call on no zero<br />
CP PC, M, SP, adr Bei Sign-Bit = 0 wird das Programm an adr fortgesetzt 3 9/18 call on positive<br />
CPE PC, M, SP, adr Bei Paritäts-Bit = 1 wird das Programm an adr fortgesetzt 3 9/18 call on even<br />
CPI A, data Vergleiche Akku-Inhalt mit Byte 2 2 7 compare <strong>im</strong>mediate<br />
CPO PC, M, SP, adr Bei Paritäts-Bit = 0 wird das Programm an adr fortgesetzt 3 9/18 call on odd<br />
CZ PC, M, SP, adr Bei Zero-Bit = 1 wird das Programm an adr fortgesetzt 3 11/17 call on zero<br />
DAA A Umwandlung des Akku-Inhalts in eine 2stellige Dez<strong>im</strong>alzahl<br />
1 4 dec<strong>im</strong>al adjust akkumulator<br />
DAD rp, H&L der Inhalt des Registerpaares wird zum Inhalt von H&L<br />
addiert<br />
1 10 add register pair to H&L<br />
DCR reg r der Registerinhalt wird um 1 verringert 1 4 decrement register<br />
DCR M M, H&L der Inhalt der durch H&L adressierten Speicherzelle wird<br />
um 1 verringert<br />
1 10 decrement memory<br />
DCX rp der Inhalt des Registerpaares wird um 1 verringert 1 6 decrement register pair<br />
DI nach diesem Befehl ist die Interruptverarbeitung gesperrt 1 4 disable interrupt<br />
EI eine Interruptanforderung wird nach dem nächsten Befehl<br />
bedient<br />
1 4 enable interrupt<br />
HLT der Prozessor wird angehalten 1 5 halt<br />
IN A, data Übernahme der Daten aus einer E/A-Schnittstelle, die<br />
durch B2 adressiert ist<br />
2 10 input<br />
INR reg r erhöhe den Inhalt des Registers um 1 1 4 increment register<br />
INR M M, H&L erhöhe den Inhalt der von H&L adressierten Speicherzelle<br />
um 1<br />
1 10 increment memory<br />
INX rp der Inhalt des Registerpaares wird um 1 erhöht 1 6 increment register-pair<br />
JC PC, adr springe, wenn Übertragsflag gesetzt ist 3 7/10 jump carry<br />
JM PC, adr springe, wenn Vorzeichenflag gesetzt ist (negativ) 3 7/10 jump minus<br />
JMP PC, adr unbedingter Sprung zu der spezifizierten Adresse 3 10 jump unconditional<br />
JNC PC, adr springe, wenn Übertragsflag nicht gesetzt ist 3 7/10 jump non carry<br />
JNZ PC, adr springe, wenn Nullflag nicht gesetzt ist 3 7/10 jump non zero<br />
JP PC, adr springe, wenn Vorzeichenflag nicht gesetzt ist (positiv) 3 7/10 jump plus<br />
JPE PC, adr springe, wenn Paritätsflag gesetzt ist 3 7/10 jump even<br />
JPO PC, adr springe, wenn Paritätsflag nicht gesetzt ist 3 7/10 jump odd<br />
JZ PC, adr springe, wenn Nullflag gesetzt ist 3 7/10 jump zero<br />
LDA adr, A lade Akku mit dem Inhalt der adressierten Speicherzelle 3 13 load accumulator direct<br />
LDAX rp, A lade den Akku mit dem Inhalt der durch das Registerpaar<br />
adressierten Speicherzelle<br />
1 7 load accumulator indirect<br />
LHLD adr, H&L lade H&L mit der durch B2 B3 und durch (B2 B3)+1<br />
adressierten Speicherzelle<br />
3: 16 load H&L direct<br />
LXI rp, adr lade Registerpaar mit Byte 2 und Byte 3. Registerpaar kann<br />
sein: BC, DE, HL<br />
3 10 load register pair <strong>im</strong>mediate<br />
MOV r r1, r2 der Inhalt von r2 wird nach r1 geladen 1 5 move register<br />
MOV M,r r, M, H&L r wird mit dem Inhalt der durch H&L adressierten Speicherzelle<br />
geladen<br />
1 7 move from memory<br />
MOV r,M M, r, H&l die durch H&L adressierte Speicherzelle wird mit dem<br />
Inhalt von r beschrieben<br />
1 7 move to memory<br />
MVI r r, data lade r mit Byte 2 2 7 move <strong>im</strong>mediate<br />
MVI M M, data, H&L beschreibe den durch H&L adressierten Speicherplatz mit<br />
Byte 2<br />
2 10 move to memory <strong>im</strong>mediate<br />
NOP keine Operation 1 4 no operation<br />
ORA r A, r bitweise ODER-Verknüpfung des Akkus mit dem Inhalt<br />
des Registers<br />
1 4 OR register<br />
ORA M A, M, H&L bitweise ODER-Verknüpfung des Akkus mit dem Inhalt<br />
der durch H&L adressierten Speicherzelle<br />
1 7 OR memory<br />
ORI A, data bitweise ODER-Verknüpfung des Akkus mit Byte 2 2 7 OR <strong>im</strong>mediate
90 Weiterentwicklung des SAP - der<br />
OUT A, data Ausgabe des Akku-Inhalts an die durch B2 adressierte E/A-<br />
Schnittstelle<br />
2 10 output<br />
PCHL HL, PC Programm wird an der Stelle fortgesetzt, die in H&L steht 1 5 H&L to program counter<br />
POP PSW M, SP, A,<br />
Flags<br />
lade den Akku und die Flags in der spezifizierten Weise<br />
aus dem Stack-Register<br />
1 10 pop processor status word<br />
POP rp rp, SP, M lade das Registerpaar in der spezifizierten Weise aus dem<br />
Stack-Register<br />
1 10 pop<br />
PUSH M, SP, A, verschiebe den Inhalt des Akkus und den Zustand der Flags 1 11 push prozessor status word<br />
PSW<br />
Flags ins Stack-Register<br />
PUSH rp rp, M, SP verschiebe den Inhalt des Registers in das Stack-Register 1 11 push<br />
RAL A Linksrotation des Akku-Inhaltes über das Carry-Flag 1 4 rotate akkumulator left through<br />
carry<br />
RAR A Rechtssrotation des Akku-Inhaltes über das Carry-Flag 1 4 rotate akkumulator right through<br />
carry<br />
RC PC,M, SP, Bei Carry-Bit = 1 wird das Programm an der Adresse 1 10 return on carry<br />
Flags fortgesetzt, die in dem über den Stapelzeiger adressierten<br />
Wort steht<br />
RET PC,M, SP, Das Programm wird an der Adresse fortgesetzt, die in dem 1 10 return unconditional<br />
Flags über den Stapelzeiger adressierten Wort steht<br />
RIM ?<br />
RLC A Linkssrotation des Akku-Inhaltes 1 4 rotate accumulator left<br />
RM PC,M, SP, Bei Carry-Bit = 1 wird das Programm an der Adresse 1 11 return on minus<br />
Flags fortgesetzt, die in dem über den Stapelzeiger adressierten<br />
Wort steht<br />
RNC PC,M, SP, Bei Carry-Bit = 0 wird das Programm an der Adresse 1 11 return on no carry<br />
Flags fortgesetzt, die in dem über den Stapelzeiger adressierten<br />
Wort steht<br />
RNZ PC,M, SP, Bei Zero-Bit = 0 wird das Programm an der Adresse fort- 1 11 return on no zero<br />
Flags gesetzt, die in dem über den Stapelzeiger adressierten Wort<br />
steht<br />
RP PC,M, SP, Bei Sign-Bit = 0 wird das Programm an der Adresse fortge- 1 11 return on positiv<br />
Flags setzt, die in dem über den Stapelzeiger adressierten Wort<br />
steht<br />
RPE PC,M, SP, Bei Parity-Bit = 1 wird das Programm an der Adresse 1 11 return on parity even<br />
Flags fortgesetzt, die in dem über den Stapelzeiger adressierten<br />
Wort steht<br />
RPO PC,M, SP, Bei Parity-Bit = 0 wird das Programm an der Adresse 1 11 return on parity odd<br />
Flags fortgesetzt, die in dem über den Stapelzeiger adressierten<br />
Wort steht<br />
RRC A Rechtssrotation des Akku-Inhaltes 1 4 rotate accumulator right<br />
RST M, SP, PC Sprungbefehl mit fester Adressierung (NNN) <strong>im</strong> 8 Bit<br />
Abstand.. Die Adreßbits NNN sind Bit 3,4 und 5 in der 16<br />
Bit Adresse. Alle anderen Bits sind 0.<br />
1 11 restart<br />
RZ PC,M, SP, Bei Zero-Bit = 0 wird das Programm an der Adresse fort- 1 11 return on zero<br />
Flags gesetzt, die in dem über den Stapelzeiger adressierten Wort<br />
steht<br />
SBB reg A, r, Cy der Registerinhalt wird unter Berücksichtigung des Carry-<br />
Flags vom Akkumulator subtrahiert.<br />
1 4 subtract register with borrow<br />
SBB M A, M, H&L,Cy der Inhalt der durch H&L adressierten Speicherzelle wird<br />
unter Berücksichtigung des Carry-Flags vom Akkumulator<br />
subtrahiert<br />
1 7 subtract memory with borrow<br />
SBI A, data, Cy Byte 2 wird unter Berücksichtigung des Carry-Flags vom<br />
Akkumulator subtrahiert<br />
2 7 subtract <strong>im</strong>mediate with borrow<br />
SHLD adr, H&L der Inhalt von H&L wird an der angegeben Adresse gespeichert<br />
3 16 store H&L direct<br />
SIM ?<br />
SPHL H&L, SP Der Inhalt von H&L wird in den Stack-Pointer geladen 1 5 move H&L to SP<br />
STA adr, A der Akku-Inhalt wird in der mit B2 und B3 adressierten<br />
Speicherzelle gespeichert<br />
3 13 store accumulator direct<br />
STAX rp, M, A der Akkumulatorinhalt wird unter der durch rp spezifiezierten<br />
Adresse gespeichert<br />
1 7 store accumulator indirect<br />
STC Cy Übertrags-Bit setzen 1 4 set carry<br />
SUB reg A, r Der Inhalt von r wird vom Akku-Inhalt subtrahiert 1 4 subtract register
Weiterentwicklung des SAP - der 91<br />
SUB M A, M,H&L der Inhalt der durch H&L adressierten Speicherzelle wird<br />
vom Akkumulator subtrahiert<br />
1 7 subtract memory<br />
SUI A, data Byte 2 wird vom Akku-Inhalt subtrahiert 2 7 subtract <strong>im</strong>mediate<br />
XCHG H&L, D&E Vertausche Inhalt von H&L mit D&E 1 4 exchange H&L with D&E<br />
XRA reg A, r, Akku-Inhalt wird mit Inhalt von Register r exklusiv-oder 1 4 Exclusive Or register with<br />
verknüpft und <strong>im</strong> Akku gespeichert<br />
accumulator<br />
XRA M A, H&M, M Die über H&L Register adressierte Speicherzelle wird mit<br />
Akku-Inhalt exklusiv-oder verknüpft und <strong>im</strong> Akku gespeichert<br />
XRI A, data Akku-Inhalt wird mit B2 exklusiv-oder verknüpft und <strong>im</strong><br />
Akku gespeichert<br />
XTHL H&L, SP, M Vertausche den Inhalt des Registerpaares H&L mit dem<br />
spezifizierten Inhalt des Stackregisters.<br />
8.7 Vergleich SAP - 8085 Befehlssatz<br />
1 7 Exclusive Or memory with<br />
accumulator<br />
2 7 Exclusive Or register with<br />
accumulator<br />
1 18 exchange stack top with H&L<br />
• Der Opcode benötigt 1 Byte (SAP nur 4 Bit).<br />
• Der Spalte T-States kann man entnehmen, daß die Befehle sehr unterschiedliche<br />
Zeit benötigen. (4-18)<br />
• Es gibt verschiedene Adressierungsarten:<br />
• Register addressing - der Operand des Befehls ist der Inhalt eines Registers.<br />
Beispiel: ADD B addiert zum Inhalt des Akkumulators den Inhalt von<br />
Register B.<br />
• Direct addressing - der Operand ist die Adresse, auf deren Inhalt sich der<br />
Befehl bezieht. Beispiel: LDA address oder STA address.<br />
• Immediate addressing - statt der Adresse wird als Operand der Wert selbst<br />
angegeben. Beispiel: MVI A, byte läd den Datenwert in den Akkumulator, der<br />
<strong>im</strong> Speicher direkt hinter dem Opcode von MVI abgelegt ist.<br />
• Implied addressing - bedeutet, daß die Adresse des zu bearbeitenden Datenwortes<br />
schon <strong>im</strong> Opcode enthalten ist. Beispiel: RAL (Rotate arithmetic<br />
left), RAR und RET.<br />
• Es gibt Befehle, die nur 1 Byte zur vollständigen Spezifikation benötigen<br />
(z.B. ADD B). Diese benötigen wegen der kürzeren Fetch-Phase nur 4 T-States.<br />
Zwei Byte Befehle (z.B. IN byte, also Einlesen eines Datenwortes von einer<br />
Schnittstelle) benötigen eine zusätzlichen Fetch-Phase und deshalb 7-10 T-<br />
States.<br />
8.8 Ein Assemblerprogramm<br />
Der Übergang vom Betriebssystem zu den Anwenderprogrammen ist von ersteren abhängig. Wir treffen folgende Konventionen:<br />
• Die erste Anweisung (Einsprungpunkt vom Betriebssystem) ist durch das Label START markiert.<br />
• Ein Programm wird mit einer Unendlosschleife beendet.<br />
Das folgende Programm fügt ein Eingabebyte zu einer Liste von Bytes, die ab 41 H beginnt und deren Länge in 40 H<br />
steht, wenn die Eingabe noch nicht in der Liste enthalten ist.<br />
START LXI H,40H Hier geht es los
92 Weiterentwicklung des SAP - der<br />
MOV B,M Länge der Liste<br />
INX H Zeiger auf Start der Liste<br />
LDA 30H Hole Eingabe<br />
SRLST: CMP M Ist Eingabe = Element der Liste<br />
JZ DONE ja, dann Ende<br />
INX H nein, gehe zum nächsten Element<br />
DCR B<br />
JNZ SRLST sind alle Elemente geprüft<br />
MOV M,A ja, füge Eingabe zur Liste<br />
LXI H,40H<br />
INR M Addiere 1 zur Listenlänge Ende des Programms<br />
DONE: JMP DONE<br />
8.9 Assemblieranweisungen<br />
8.9.1 Steuerung des Assembliervorganges<br />
Anweisung Beschreibung<br />
DATA Eingabe fester Daten (Konstante) in den Speicher<br />
DB wie DATA für Bytes (define byte)<br />
DW wie DATA für Wörter (define word)<br />
DS Reservierung für Variable (define storage)<br />
EQUATE Benennung von Konstanten (keine Speicherplatzbelegung)<br />
DEFINE wie EQUATE<br />
ORIGIN Angabe der Stelle <strong>im</strong> Speicher ab der a~ diesem Befehl Maschinenbefehle und Daten<br />
<strong>im</strong> Speicher abgelegt werden<br />
RESERVE Zuweisung eines Namens an einen Speicherbereich (keine Speicherplatzbelegung)<br />
8.9.2 Anweisungen<br />
END Ende des Textes des Quellprogramms<br />
LIST Ausgabe eines Übersetzungsprotokolls (Listing)<br />
NAME Name des Programms, erscheint <strong>im</strong> Listing als Header<br />
TITLE wie Name<br />
PAGE Seitenvorsprung <strong>im</strong> Listing<br />
SPACE Zeilenvorschub <strong>im</strong> Listing<br />
PUNCH Druck des Objectcodes auf dem Lochstreifenstanzer<br />
Beispiele<br />
KONST1 DATA 23<br />
NL DB 13,10,´§´<br />
WORT DW 32000<br />
LOGO DB ´FBI´
Weiterentwicklung des SAP - der 93<br />
HOCHSCHUL DATA ´FH Darmstadt´, 13, 10<br />
E<br />
´FB <strong>Informatik</strong>´, 13, 10, ´$´<br />
ADREND EQU *<br />
CR EQU 13<br />
LF EQU 10<br />
MAXIMUM EQU 1000<br />
MINIMUM EQU MAXIMUM - 500<br />
ROM ORG 1000H<br />
START ORG 100H<br />
BUFFERA RESERVE 1000H<br />
ORG HOSCHSCHULE<br />
ADRESSE RESERVE<br />
NAME<br />
LIST<br />
´Titel meines Programms´<br />
SPACE<br />
END<br />
4
94 Die klassische Von Neumann-<br />
9 Die klassische Von Neumann-Maschine<br />
1946 stellten Burks, Goldstine und von Neumann den Entwurf für eine Allzweck-Rechenmaschine zusammen.<br />
9.1 Die Prinzipien<br />
1. Der Rechner besteht zumindest aus Speicher, Rechenwerk, Steuerwerk und Ein/Ausgabegeräten (Min<strong>im</strong>alsystem).<br />
2. Die Rechenanlage führt ein gespeichertes Programm aus, das aus einer Folge von Befehlen besteht, d.h. die Struktur<br />
der Anlage ist unabhängig von dem bearbeiteten Problem. Das Problem wird durch einen austauschbaren Inhalt des<br />
Speichers beschrieben, die Rechenanlage ist also speicherprogrammierbar.<br />
3. Befehle und Daten liegen in einem gemeinsamen 'Hauptspeicher'.<br />
4. Der Hauptspeicher besteht aus einer Reihe von Zellen gleicher Größe, die fortlaufend durchnumeriert werden; die<br />
Nummern heißen Adressen. Auf diese Adressen wird <strong>im</strong> Programm Bezug genommen, um Informationen abzulegen<br />
oder zu lesen.<br />
5. Das Programm ist <strong>im</strong> Hauptspeicher unter konsekutiven Adressen a, a+1, a+2, ... gespeichert. Im allgemeinen wird<br />
nach dem Befehl in der Zelle mit der Adresse a der unter Adresse a+1, dann der unter Adresse a+2 u.s.w. ausgeführt<br />
(Reihenfolge der Ausführung).<br />
6. Jeder Befehl enthält einen Operator und evtl. eine Angabe zur Bezeichnung eines Operanden. Diese Angabe ist in<br />
der Regel nicht der Operand, sondern ein Verweis in Form der Adresse der Zelle, die den Operanden enthält. D.h.<br />
das Programm kann unabhängig von den Werten der Operanden formuliert werden.<br />
7. Von der in 4. festgelegten natürlichen Reihenfolge weicht der Automat nur dann ab, wenn ein sogenannter Sprungbefehl<br />
vorliegt.<br />
Die Tatsache, daß die Anweisungen eines Programms linear geordnete Teilfolgen bilden, erlaubt auf der Hardware-<br />
Ebene die Anwendung des Befehlszählerprinzips und damit die Konstruktion einer einfachen Kontrolleinheit.<br />
(Das Befehlszählerprinzip besagt, daß nach Befehl bei der Adresse N der Befehl mit der Adresse N+1 drankommt.)<br />
"Das Operationsprinzip der von Neumann-Architektur besteht darin, daß eine Operation grundsätzlich <strong>im</strong>mer auf den<br />
Inhalt der in der Operationsanweisung (dem Maschinenbefehl) referierten Speicherzelle (Register) angewandt wird, ohne<br />
Anschauung der Tatsache, was der jeweilige Inhalt der Speicherzelle bedeutet. Eine Speicherzelle wird durch die Angabe<br />
einer Adresse referiert, der Inhalt einer Zelle kann ein Maschinenbefehl oder ein skalarer Datenwert sein. Man kann<br />
dieses Operationsprinzip als ein Prinzip des min<strong>im</strong>alen Speicheraufwandes bezeichnen." 1<br />
Die Von Neumann Maschine kann einem Speicherzelleninhalt nicht ansehen, was er repräsentiert - einen Befehl oder<br />
einen skalaren Datenwert? Die Interpretation einer Informationseinheit erfolgt nach folgendem Muster:<br />
• die Maschine entscheidet auf Grund des Zustandes, in dem sie sich zum Zeitpunkt der Interpretation befindet, ob sie<br />
eine Bitkette als Befehl oder Datum interpretiert (s. Holezyklus und Ausführungszyklus - Ringzähler der Ablaufsteuerung).<br />
• die Interpretation eines Datums geschieht auf Grund des Typs der Anweisung, dessen Argument das Datum ist.<br />
1 Giloi W.K., Rechnerarchitektur, S.35
Schwächen der Von Neumann- 95<br />
10 Schwächen der Von Neumann-Maschine<br />
Die Von Neumann Maschine besitzt eine Architektur des min<strong>im</strong>alen Hardware-Aufwandes. Die "stürmische Entwicklung<br />
auf der Bauelemente-Seite berechtigt zu der Aussage, daß Rechnerarchitekturen, die unter dem Aspekt der Hardware-Min<strong>im</strong>alität<br />
entwickelt wurden, nicht mehr zeitgemäß sind." 1 Warum eigentlich ?<br />
• Die Verarbeitung von strukturierten Datentypen (s<strong>im</strong>ples Beispiel: die Berechnung des arithmetischen Mittels von<br />
einem Zahlen-Array(1..n)) macht eine entsprechend große Zahl von Speicherzugriffen notwendig, nicht nur auf die<br />
Array-Elemente selbst, sondern auch auf den jeweils erforderlichen expliziten Befehl zum Holen des Elements. Hinzu<br />
kommt der Aufwand für die Interpretation dieser Befehle, für die Indexoperationen und Adreßberechnungen.<br />
"Dies war nur solange zu rechtfertigen, wie das Holen eines Speicherworts, die Befehlsinterpretation einschließlich<br />
einer Adreßberechnung, die Indexoperationen eine <strong>im</strong> Verhältnis zur eigentlichen datentransformierenden Operation<br />
kurze Zeit benötigte. Während dies bei den Rechnern der 2. Generation noch der Fall war, gilt dies heute in keiner<br />
Weise mehr, wo für die arithmetischen Operationen nicht mehr Zeit als für die genannten organisatorischen Operationen<br />
aufgewendet werden muß." 2<br />
• Eine Architektur des min<strong>im</strong>alen Hardware-Aufwandes erlaubt nicht die Vervielfachung der Hardware-<br />
Betriebsmittel mit dem Ziel der Parallelarbeit.<br />
• Eine Architektur des min<strong>im</strong>alen Hardware-Aufwandes erlaubt nicht den Einbau der zur Erzielung einer Ausfalltoleranz<br />
notwendigen Redundanzen.<br />
10.1 Der von Neumann Flaschenhals<br />
Zur Erinnerung: Der OUT-Befehl des SAP überträgt den Inhalt des Akkumulators an das Output-Display. Das gilt ebenso<br />
für den 8085, nur daß als Ausgabeeinheit ein Bildschirm angeschlossen werden kann. Nehmen wir an, <strong>im</strong> Speicher<br />
des 8085 steht ein Text, der am Bildschirm ausgegeben werden soll. Betrachten wir formal, welche Schritte durchgeführt<br />
werden müssen, um den Text der Länge n-Zeichen am Bildschirm auszugeben:<br />
1. Die Startadresse des Textes ins MAR schreiben<br />
2. Loop: Memory lesen und in Akkumulator ablegen<br />
3. Akkumulatorinhalt mit OUT-Befehl an den Bildschirm schicken.<br />
4. Testen, ob alle Zeichen ausgegeben sind, wenn ja, -> Ende<br />
5. Nein: MAR inkrementieren.<br />
6. Weiter bei Loop<br />
7. Ende: Fertig.<br />
Es soll hier nicht gezeigt werden, wie das Maschinenprogramm aussieht. Es soll deutlich werden, daß die Daten des<br />
Speichers erst in den Akkumulator geladen werden müssen, bevor sie an ein anderes Gerät weitergegeben werden können.<br />
Dazu gehört die Adreßbest<strong>im</strong>mung (MAR inkrementieren) für jedes einzelne Datenwort. Analog verhält es sich<br />
be<strong>im</strong> Einlesen eines Zeichens (z.B. von der Tastatur) und Ablegen <strong>im</strong> Speicher. In einer von Neumann-Maschine müssen<br />
die Daten vom Eingabe- zum Ausgabegerät <strong>im</strong>mer den Umweg über die CPU nehmen. Das nennt man den von Neumann<br />
Flaschenhals:<br />
"In seiner einfachsten Form besteht ein von Neumann-Rechner aus drei Teilen: einer ... CPU, einem Speicher und einem<br />
Verbindungsweg, der ein einzelnes Wort zwischen CPU und Speicher (oder eine Adresse zum Speicher) transportieren<br />
kann. Ich möchte diesen Weg den von Neumann-Flaschenhals nennen. Die Aufgabe eines Programms ist es, den Inhalt<br />
des Speichers zu verändern. Berücksichtigt man, daß die Aufgabe dadurch gelöst werden muß, daß man einzelne Worte<br />
hin und zurück durch den von Neumann-Flaschenhals pumpt, so versteht man den Grund für diesen Namen. Ironischer-<br />
1 Giloi W.K., Rechnerarchitektur, S.10<br />
2 Giloi W.K., Rechnerarchitektur, S.11
96 Schwächen der Von Neumann-<br />
weise besteht ein Großteil des Verkehrs in diesem Flaschenhals nicht aus nützlichen Daten, sondern nur aus den Namen<br />
von Daten, wie auch aus Operationen und Daten, die benötigt werden, um solche Namen zu berechnen. Bevor ein Wert<br />
aber diesen Weg gesandt werden kann, muß seine Adresse in der CPU vorhanden sein; diese muß dazu entweder vom<br />
Speicher über den Verbindungsweg zur CPU gesandt oder von der CPU generiert werden. Wird die Adresse vom Speicher<br />
zu CPU gesandt, so muß deren Speicheradresse zunächst vom Speicher zur CPU gesandt oder in der CPU generiert<br />
worden sein, und so weiter. Wird die Adresse andererseits von der CPU generiert, so geschieht das entweder aufgrund<br />
einer festen Regel (z.B. "Addiere 1 zum Inhalt des Befehlszählers") oder aufgrund eines Befehls, der über den Datenweg<br />
zur CPU gesandt worden war, in welchem Falle dessen Adresse über den Weg gesandt worden sein mußte.... und so<br />
weiter." 1<br />
Es wurde eine Reihe von Verfahren entwickelt, um die Auswirkungen dieses Flaschenhalses zu min<strong>im</strong>ieren. Sie sind<br />
Gegenstand des nächsten Kapitels.<br />
1 Backus J,Can Programming be Liberated from the von Neumann Style?, CACM 21, zitiert bei Giloi W.K., Rechnerarchitektur, S.37
11.1 Fetch and Overlap<br />
11 Steigerung der Rechnerleistung<br />
Dieses Verfahren wurde z.B. be<strong>im</strong> Intel 8080/85 realisiert und basiert auf folgender Überlegung: Wenn die Ausführungsphase<br />
eines Befehls nicht den externen Daten/Adressbus benötigt, sondern nur die ALU und den internen Datenbus,<br />
dann kann man den Daten/Adreßbus schon für andere Aufgaben benutzen.<br />
Man kann also die Ausführung eines Programmes beschleunigen, wenn man den nächsten Befehl vorbereitet während<br />
ein Befehl gerade ausgeführt wird. Dieses Verfahren nennt man fetch-execute overlap.<br />
Ein Beispiel soll das erläutern:<br />
Zwei Befehle, ADD B, und MOV B,A sollen nacheinander ausgeführt werden:<br />
Clock ---<br />
___|<br />
---<br />
___|<br />
---<br />
___|<br />
---<br />
___|<br />
---<br />
___|<br />
---<br />
___|<br />
---<br />
___|<br />
T 1 T 2 T 3 T 4 T 1 T 2 T 3 T 4<br />
ADD B PC OUT PC+1<br />
-> PC<br />
INSTR<br />
-> IR<br />
B -><br />
TMP<br />
A+TMP<br />
-> A<br />
MOV B,A PC OUT PC+1<br />
-> PC<br />
1<br />
ADD T<strong>im</strong>ing Diagramm<br />
INSTR<br />
-> IR<br />
---<br />
___|<br />
In den ersten drei T-States wird der Opcode für die ADD B Instruktion geholt. In T 4 wird der Inhalt des Registers B in<br />
das temporäre Register geladen. Während des zweiten Maschinenzyklus von ADD B beginnt die Hole-Phase des Befehls<br />
MOV B,A.<br />
Während T1 wird der Inhalt des Programmzählers an das Memory übertragen. Während T2 wird der ADD B Befehl<br />
vollendet, indem der Inhalt des Akkumulators zu dem temporären Register addiert und der Inhalt wieder <strong>im</strong> Akkumulator<br />
abgelegt wird. Für die Addition in T2 wird der interne Bus benötigt - das Inkrementieren des Befehlszählers benötigt<br />
jedoch nicht den Datenbus und kann deshalb zu diesem Zeitpunkt durchgeführt werden. Der ADD Befehl benötigt also<br />
statt 6 T-States real nur 4. Das gilt für den ADD Befehl <strong>im</strong>mer, unabhängig von dem folgenden Befehl, weil während der<br />
Hole-Phase des nächsten Befehls noch nicht das Ergebnis des ADD-Befehls benötigt wird.<br />
11.2 Pipeline<br />
Betrachtet man den Zeitablauf des STA-Befehls in Kapitel 8, so kann man den Befehlszyklus unterteilen in Befehl holen<br />
(in M1) - Operand holen (in M2 + M3) - Befehl ausführen (in M4). Nehmen wir an, daß alle drei Phasen ungefähr<br />
gleichlang sind (das wird erreicht zum Beispiel durch Einsatz eines CACHE-Memories), kann man daran denken, drei<br />
solche Bearbeitungszyklen überlappt auszuführen derart, daß die drei Zyklen jeweils um eine Phase verschränkt werden.<br />
Das setzt für jede der Phasen eine autonome Bearbeitungseinheit voraus, verlangt also, das Prinzip des min<strong>im</strong>alen Hardwareaufwandes<br />
zu verlassen.<br />
Das Prinzip läßt sich wie folgt beschreiben:<br />
BH = Befehl holen<br />
OH = Operanden holen<br />
1 Vgl. Malvino, Digital Computer Electronics, S.230<br />
A -><br />
TMP
98 Inhaltsverzeichnis<br />
BA = Befehl ausführen<br />
Befehl<br />
Nr. BH OH BA<br />
i .----------.----------.----------. --------------------> t<br />
i+1 .----------.----------.----------.<br />
i+2 .----------.----------.----------.<br />
Man kann sich dieses Verfahren als ein Fließband vorstellen. Während Befehl i+2 sich in der Phase Befehl holen befindet,<br />
holt sich der Befehl i+1 seine Operanden und der Befehl i wird gerade ausgeführt. Der Effekt ist, daß in jeder Phase<br />
ein Befehl abgearbeitet und somit eine dreifache Arbeitsgeschwindigkeit erreicht wird. Dies gilt aber nur, wenn in einem<br />
Programm keine Sprungbefehle enthalten sind. Nehmen wir an, der Befehl i sei ein Sprungbefehl: der normale Befehlsfluß<br />
wird unterbrochen und der Befehl i+1 kann erst geholt werden, wenn der Befehl i vollständig abgearbeitet<br />
worden ist. Trotz dieser Schwierigkeiten wurde das Prinzip der Pipelines in moderneren Rechnern perfektioniert. Es<br />
werden ganze Pipelines parallel aufgebaut, also die Befehle für beide Ergebnisse einer Bedingung (Branch Not Equal .. )<br />
vorsorglich geholt, und die Pipeline, die nicht verwendet wird, wird wieder verworfen, wenn das Ergebniss der Bedingung<br />
vorliegt.<br />
11.3 Erhöhung der Taktfrequenz der Prozessoren<br />
Im Zuge der Hardwareentwicklung wurde es möglich, die CPU um ein vielfaches schneller zu takten. Während ein PC<br />
mit Intel 8086 Prozessor mit 4,77 MHz betrieben wurde, laufen heutige PC´s mit über 300 MHz. Taktfrequenzen von 1<br />
GHz werden bereits anvisiert. Unabhängig von sonstigen Verbesserungen der Prozessorleistung bedeutet dies, daß ein<br />
Befehl entsprechend der Taktfrequenz schneller abgearbeitet wird. Bezüglich der Erläuterungen in Kapitel 2 bedeutet<br />
dies, daß die Register mit einem Bruchteil der Setup- und Holdt<strong>im</strong>e auskommen müssen. Der Alpha Chip von DEC wird<br />
mittlerweile mit einer Taktfrequenz von 600 MHz betrieben. Die Chip-Entwickler sind also schon sehr nahe an der<br />
Grenze des physikalisch machbaren mit Silizium als Grundstoff angelangt.<br />
11.4 Erhöhung der Datenbreite der Prozessoren<br />
Die Erweiterung der internen Datenbreite von 8 über 16, 32, 64 bis 128 Bit bei den Mikroprozessoren erhöht die Rechenleistung<br />
ganz erheblich, weil gegebenenfalls mehrere Instruktionen in einem Maschinenzyklus auf einmal geholt<br />
werden können (für den CALL Befehl benötigt der 8085 <strong>im</strong>merhin 3 Maschinenzyklen, nur um den Befehl zu holen).<br />
11.5 DMA - Direct Memory Access<br />
Mit einem Befehl (IN be<strong>im</strong> 8085) werden Daten von einem Peripheriegerät (Tastatur, Diskette, Festplatte...) gewöhnlich<br />
eingelesen. Dabei wird der Akkumulator als Zwischenspeicher benötigt (Vergleiche die Ausführungen in Kapitel 10).<br />
Die Idee von DMA besteht darin, die Geschwindigkeit der Datenübertragung zu erhöhen, indem der Datentransport<br />
ohne den Umweg über die CPU (mit Zwischenablage <strong>im</strong> Akkumulator) organisiert wird. Die Daten gehen direkt vom<br />
Memory zum Peripheriegerät und umgekehrt. Ein DMA Controller ist <strong>im</strong> Prinzip eine für die Ein/-Ausgabe opt<strong>im</strong>ierte<br />
CPU mit hardwired control. Während eines Datentransports mittels DMA muß die CPU angehalten werden, damit der<br />
Daten- und Adreßbus nicht zur gleichen Zeit von beiden Einheiten benutzt wird. Dies mindert die Effizienz des Verfahrens,<br />
weil die CPU nicht parallel Befehle bearbeiten kann, während die Datenübertragung stattfindet. Die CPU und der<br />
DMA-Controller müssen sich also verständigen, wer über den Bus verfügen darf. Be<strong>im</strong> 8085 gibt es dafür die Kontrollsignale<br />
HOLD und HLDA, wobei HOLD vom Controller als Anforderung an die CPU und HLDA von der CPU an den<br />
Controller als Bestätigung geschickt wird. Das folgende Blockdiagramm soll den Zusammenhang verdeutlichen:
11.5.1 Beispiel einer parallelen Schnittstelle (ohne DMA)<br />
Wenn man Datenfelder über eine Schnittstelle ausgeben möchte, sind für jedes Byte mehrere Befehle zu durchlaufen.<br />
Dies ist <strong>im</strong> folgenden Programm am Beispiel einer parallelen Schnittstelle dargestellt, deren Ausgaberegister bei der<br />
Adresse F000 steht. Ausgegeben werden soll der Speicherbereich, dessen Startadresse bei 1010 und dessen Endadresse<br />
bei 1012 gespeichert ist. Dazu wird jedes Byte aus dem Datenfeld in den Akkumulator geladen und anschließend an die<br />
Schnittstelle ausgegeben. Dann wird das Indexregister abgefragt, ob das Ende bereits erreicht ist. Solange das nicht der<br />
Fall ist, wird die Programmschleife <strong>im</strong>mer wieder ausgeführt und Byte für Byte übertragen. Man sieht, daß zur Ausgabe<br />
eines Bytes 5 Befehle innerhalb des Loops durchlaufen werden müssen, die zusammen 23 Taktzyklen erfordern. Das<br />
Programm benutzt den Befehlssatz des 6802 Mikroprozessors. 1<br />
Adr. Hex-Code Marke MNem. Operand Zyklen Kommentar<br />
1000 FE 10 00 LDX #$ 1010 Startadreese<br />
3 A6 00 LOOP LDA A 00,X 5 Zeichen holen<br />
5 B7 F0 00 STA A F000 5 Zeichen ausgeben<br />
8 08 INX 4 Nächste Adresse<br />
9 BC 10 02 CPX $ 1012 5 Endadresse<br />
C 26 F5 BNE LOOP 4 Wiederholung<br />
E 39 RTS --<br />
1010 00 00 WORD $0000 23 Startadresse<br />
2 02 00 WORD $0200 Endadresse<br />
Be<strong>im</strong> Einsatz von DMA teilt die CPU dem DMA Controller die Startadresse (<strong>im</strong> Beispiel $0000) und die Anzahl der zu<br />
übertragenden Bytes ($0200) mit. Die Startadresse wird <strong>im</strong> Adreßregister des DMA gespeichert. Dieses DMA Adreßregister<br />
(siehe Zählerregister in Kapitel 2) wird bei jedem Taktzyklus um eins erhöht, bis alle Daten übertragen sind.<br />
"Gegenüber einer programmgesteuerten Übertragung ergibt sich also die 23fache Übertragungsgeschwindigkeit. Dies<br />
gilt allerdings nur, solange die Zeit zur Initialisierung der DMA-Übertragung nicht ins Gewicht fällt. Deshalb ist es nicht<br />
sinnvoll, nur wenige Bytes per DMA zu übertragen." 2<br />
11.6 Parallelarbeit - Einprozessorsysteme<br />
Moderne Mikroprozessoren sind bereits in der Lage, mehrere Befehle gleichzeitig auszuführen. Dies ermöglicht die<br />
Superskalararchitektur, die dadurch gekennzeichnet ist, daß mehrere Ausführungseinheiten auf einer CPU <strong>im</strong>plementiert<br />
sind.<br />
1 U. Tietze, Ch. Schenk, Halbleiter-Schaltungstechnik, Springer Verlag, 1990, S.704<br />
2 U. Tietze, Ch. Schenk, Halbleiter-Schaltungstechnik, S.706
100 Inhaltsverzeichnis<br />
Beispiel : der Power PC von IBM Motorola und Apple verfügt über ein Integer-Rechenwerk, ein Fließkommarechenwerk<br />
und eine Einheit zur Berechnung der Sprungadressen, so daß er bis zu 3 Befehle gleichzeitig ausführen kann. Ähnliches<br />
gilt für Intels Pentium, DECs Alpha und andere moderne Prozessoren. Weitere Ausführungen hierzu finden sie <strong>im</strong><br />
<strong>Band</strong> 2 der Vorlesung: Prinzipien von RISC-Architekturen<br />
11.7 Rückkehr zur hardwired-control: RISC Prozessoren<br />
RISC steht für Reduced Instruction Set Computer, was soviel bedeutet wie „Rechner mit reduziertem Befehlssatz. Ganz<br />
grob und allgemein gilt: Der Vorteil der RISC-Prozessoren gegenüber den CISC-Varianten (IBM 360/370/390, DEC<br />
VAX, Intel 80x86 und Motorola 680x0 Familie etc. ) ist, daß sie auf Grund eines vereinfachten, regelmäßigen Befehlssatzes<br />
mit einer hardwired control erheblich schneller arbeiten. Typische RISC Vertreter sind DECs Alpha, die Prozessoren<br />
von Mips, Sun, sowie der Power PC. Auch hier gilt für vertiefende Betrachtungen der Hinweis auf den oben genannten<br />
<strong>Band</strong> 2 der Vorlesung.<br />
11.8 Parallelarbeit - Multiprozessorsysteme<br />
Mildert das Problem des Von Neumann Flaschenhalses.<br />
Parallelarbeit bedeutet gleichzeitige Ausführung mehrerer Operationen. Dies erfordert, daß Hardware-Betriebsmittel, die<br />
Rechenoperationen ausführen können (ALUs, komplette CPUs) mehrfach vorhanden sind. Strukturell weicht eine Maschine,<br />
die Parallelarbeit ermöglicht, <strong>im</strong>mer von der Von Neumann Struktur ab - Parallelarbeit erfordert nämlich andere<br />
Kontrollstrukturen als die der Von Neumann Architektur, da Parallelarbeit gegebenenfalls synchronisiert werden muß.<br />
Das bedeutet, daß nur von einander unabhängige Operationen parallel ausgeführt werden können; Operationen, die vom<br />
Ausgang anderer Operationen abhängig sind, müssen synchronisiert werden. Solche Kontrollaufgaben sind in der Von<br />
Neumann Architektur weder notwendig noch vorgesehen.<br />
"Parallelarbeit und das Von Neumann Prinzip schließen sich damit gegenseitig aus. Nicht ausgeschlossen ist jedoch, daß<br />
die Prozessoren eines für Parallelarbeit konzipierten Multiprozessor-Systems Von Neumann Maschinen sind." 1<br />
Moderne Prozessoren setzen zur Performance-Steigerung auf alle hier angesprochenen Konzepte. Beispielsweise ging<br />
die Firma Digital am Anfang der neunziger Jahre davon aus, daß in den folgenden 10 Jahren eine Steigerung der Rechenleistung<br />
um den Faktor 1000 möglich sein wird:<br />
• Steigerung der Taktgeschwindigkeit um den Faktor 10<br />
• Steigerung des Befehlsdurchsatzes pro Taktzyklus um den Faktor 10<br />
• Steigerung des Befehlsdurchsatzes durch multiprocessing um den Faktor 10<br />
Die Konzepte und Probleme von Multiprozessorsystemen werden <strong>im</strong> <strong>Band</strong> 3 der Vorlesung: Konzepte paralleler und<br />
massiv paralleler Rechnerarchitekturen ausführlich behandelt.<br />
1 Giloi W.K., Rechnerarchitektur, S.38
12 Literatur<br />
Giloi W.K., Rechnerarchitektur, Springer-Verlag Berlin-Heidelberg-New York 1981<br />
Giloi W.K., Rechnerarchitektur, 2. Auflage 1993, Springer-Verlag Berlin-Heidelberg-New York<br />
Hennessy, Patterson Rechnerarchitektur -Analyse Entwurf, Implementierung, Bewertung, Vieweg 1994 S.13f<br />
Malvino, Digital Computer Electronics, An Introduction to Microcomputers, THM New Delhi, S.7<br />
MärtinChristian , Rechnerarchitektur, Struktur, Organisation, Implementierungstechnik, Hanser Studienbücher der <strong>Informatik</strong>,<br />
1994,<br />
Duden, <strong>Informatik</strong>, Mannhe<strong>im</strong> 1993<br />
Einführung in die Elektronik 2, Kontaktlose Signalverarbeitung, Stam Verlag Köln, 1989<br />
Werner Hilf, Anton Nausch, M68000 Familie, Grundlagen und Architektur, te-wi Verlag, 1984<br />
U. Tietze, Ch. Schenk, Halbleiter-Schaltungstechnik, Springer Verlag, 1990, S.704<br />
Siemens, Mikrocomputer-Bausteine, Datenbuch 1980/81