Prozessorgrundlagen: Von-Neumann-Architektur, Teil 1

21.05.2004 von PROF. DR. CHRISTIAN SIEMERS 
Seit fast 60 Jahren basieren alle wichtigen Prozessorarchitekturen auf dem Von-Neumann-Rechnermodell. Wer sich auch nur ansatzweise mit Mikroprozessoren beschäftigt, kommt ohne dieses grundlegende Wissen nicht aus.

Zum Verständnis insbesondere der aktuellen Mikroprozessoren und Mikroprozessor-basierten Rechnersysteme ist es notwendig, sowohl die Hardware (zumindest in Teilen) als auch das Hardware-/Software-Interface zu betrachten. Zu Ersterem zählen die Bussysteme, vor allem in ihren zeitlichen Eigenschaften, sowie die verschiedenen Speicherarten. Diese beiden Punkte behandeln wir in diesem ersten Teil der Artikelserie.

Das Grundprinzip eines einfachen, deterministischen, endlichen Automaten [1] wird sehr häufig im Rahmen von Hardware-Designs genutzt. Hierdurch lässt sich bereits ein sequenziell arbeitender Rechner konzipieren.

Der momentane Eingangsvektor des Automaten wird dafür sowohl als ein aktuelles Steuerwort, das den Programmfluss repräsentiert, als auch als der Input der Daten interpretiert, von dem ausgehend der Nachfolgezustand berechenbar ist. Dieser Nachfolgezustand wird seinerseits gespeichert und gegebenenfalls nochmals umgeformt als Ausgangsvektor - dem Ergebnis der Operation.

Dieses Konzept samt Erweiterungen in Form des Kellerautomaten dient zusammen mit der Turing-Maschine nicht zuletzt auf Grund der darin liegenden Universalität als theoretische Grundlage für Berechenbarkeiten. In der Praxis aktueller Rechenanlagen kommt jedoch ein anderes, gleichwohl äquivalentes Modell zum Einsatz, das die Trennung zwischen Kontroll- und Datenfluss stärker zum Ausdruck bringt.

Es basiert auf den resümierenden Überlegungen von Burks, Goldstine und von Neumann und wird abkürzend Von-Neumann-Rechnermodell genannt. Dieses Konzept hat in den seit 1946 vergangenen Jahrzehnten Variationen erfahren, die bei vielen konkreten Produkten zu finden sind.

Serie: Prozessorgrundlagen: Von-Neumann-Architektur

Teil 1

Bussysteme und Speicherarten

Teil 2

Leit-/Rechenwerk und Registermodell

Teil 3

Befehlssatz, Adressierungsarten und Interrupt-Konzept

Diesen Artikel und eine ganze Reihe weiterer Grundlagenthemen zu Prozessoren finden Sie auch in unserem tecCHANNEL-Compact "Prozessor-Technologie". Die Ausgabe können Sie in unserem Online-Shop für 9,90 Euro versandkostenfrei bestellen. Ausführliche Infos zum Inhalt des tecCHANNEL-Compact "Prozessor-Technologie" finden Sie hier.

Grundkonzept

Zur Darstellung der Von-Neumann-Architektur sind zwei wesentliche Teilkonzepte notwendig: Die Architektur des Rechnermodells mit den wesentlichen Komponenten sowie das Ablaufkonzept eines Programms. Dabei muss berücksichtigt werden, dass dieses Rechnermodell programmierbar ist. Die Programmierbarkeit bedeutet hierbei, dass die Hardware ein Programm in Form eines (maschinenlesbaren) Textes benötigt, um eine Aufgabe erfüllen zu können.

Die Programmierbarkeit ist die praktische Ausprägung der Universalität. Es gelingt hierdurch, eine universelle Maschine zu bauen und sie in einer gegenüber der Bauzeit wesentlich kleineren Zeit auf das jeweilige Problem (und damit auch wechselnd auf viele Aufgabenstellungen) anzupassen. Die Universalität des Von-Neumann-Rechners ist hierbei ausschließlich durch den beschränkten Speicherplatz begrenzt. Berechenbare Probleme können also nur daran scheitern.

Teilsysteme des Von-Neumann-Rechnermodells

Die kennzeichnenden Teilsysteme eines Rechners nach dem Von-Neumann-Prinzip sind (siehe hierzu auch [1], [2] und [3]):

1. Ein (zentral gesteuerter) Rechner ist aus drei Grundbestandteilen aufgebaut:

Hinzu kommen noch Verbindungen zwischen diesen Teileinheiten - die Busse. Die CPU übernimmt innerhalb dieser Dreiteilung die Ausführung von Befehlen und enthält die dafür notwendige Ablaufsteuerung. Im Speicher werden die Daten und die Programme in Form von Bitfolgen abgelegt. Die Ein-/Aus-gabeeinheit stellt die Verbindung zur Außenwelt in Form des Austausches von Programmen und Daten her.

2. Die Struktur des Rechners ist unabhängig von dem zu bearbeitenden speziellen Problem. Die Anpassung an die Aufgabenstellung erfolgt durch Speicherung eines eigenständigen Programms für jedes neue Problem im Speicher des Rechners. Dieses Programm enthält die notwendigen Informationen für die Steuerung des Rechners. Dieses Grundkonzept der Anpassung hat zu der Bezeichnung "programmgesteuerter Universalrechner" (Englisch: "stored-program machine") geführt.

3. Der Speicher besteht aus Plätzen fester Wortlänge, die sich einzeln mit Hilfe einer festen Adresse ansprechen lassen. Innerhalb des Speichers befinden sich sowohl Programmteile als auch Daten, zwischen denen - als Speicherinhalt - grundsätzlich nicht unterschieden wird.

Diese Beschreibungen des Von-Neumann-Rechnermodells führen zu der grafischen Darstellung im Bild "Von-Neumann-Rechner" auf der vorhergehenden Seite. Das fast gleichzeitig entwickelte Harvard-Modell zeigt einen ähnlichen Aufbau, im Wesentlichen sind hier aber Code- und Datenspeicher strikt voneinander getrennt.

Ablaufprinzip des Von-Neumann-Rechners

Aus den genannten Grundprinzipien kann man die Hauptcharakteristika des Von-Neumann-Rechners (und in gleichem Maße des Harvard-Rechners) ableiten:

1. Zu jedem Zeitpunkt führt die CPU exakt einen Befehl aus. Die Steuerung der Bearbeitung liegt im Steuerwerk (Control Unit, CU), das alle notwendigen Schritte zur vollständigen Behandlung einleiten muss. Innerhalb eines Befehls kann höchstens ein Datenwert bearbeitet, das heißt neu berechnet werden. Dieses Prinzip wird als "Single Instruction - Single Data (SISD)" bezeichnet.

2. Alle Inhalte von Speicherzellen, im Folgenden Speicherwörter genannt, sind prinzipiell als Daten oder Befehle interpretierbar. Die Daten wiederum können als "eigentliche" Daten oder als Referenzen auf andere Speicherzellen (Adressen) genutzt werden. Die jeweilige Verwendung eines Speicherinhalts richtet sich allein nach dem momentanen Kontext des laufenden Programms.

3. Als Konsequenz aus der vorgenannten Eigenschaft lassen sich Daten und Befehle nicht gegen ungerechtfertigten Zugriff schützen, da sie gemeinsam ohne Unterscheidungsmöglichkeit im Speicher untergebracht sind.

Typischer Befehlsablauf

Es stellt sich die Frage, wie eine Instruktion eigentlich aussehen muss beziehungsweise wie der komplette Instruktionssatz eines Prozessors zu konzipieren ist. Diese Frage ist nicht ad hoc zu beantworten - zumindest nicht vollständig. Selbstverständlich ist die Antwort wichtig, da eine beliebige Rechenvorschrift (ein Algorithmus) auf eine Folge von Instruktionen abzubilden ist. Als Beispiel nehmen wir an, dass der Befehlssatz eines Von-Neumann-Prozessors bekannt ist und folgenden Befehl enthält:

ld Akkumulator, <Speicherstelle>

Seinen typischen Verlauf diskutieren wir anhand des Bildes "Klassischer Ablauf". Im Rahmen dieser Befehlsbearbeitung (wie aller Ausführungen von Instruktionen) lassen sich zwei grobe Phasen identifizieren. In der Phase 1 lädt die CPU, gesteuert durch Abläufe im Steuerwerk CU, das Befehlswort aus dem Speicher. Dies geschieht einschließlich aller benötigten Zusatzinformationen wie Operanden, die in diesem Fall aus der Speicheradresse bestehen. Diese Phase zeigt sich am Bussystem, indem zwei lesende Zugriffe - je einer für das Befehlswort und den Operanden - sequenziell ablaufen. Das Steuerwerk speichert die Inhalte in dafür vorgesehene Befehlsregister und interpretiert sie für die weiteren Aktionen.

In der zweiten Phase werden der Inhalt der adressierten Speicherzelle und das prozessorinterne Register (hier mit Akkumulator bezeichnet) kopiert. Hierzu trägt der Adressbus die Information über die gewünschte Speicherzelle, die aus dem Befehlsregister stammt. Der Speicher, der auch das Signal für einen Lesevorgang erhält (Steuerbussignal), muss den Zelleninhalt auf den Datenbus kopieren. Zum Schluss werden die Daten im Akkumulator gespeichert. Adress-, Daten- und Steuerbus sind Teilsysteme der Verbindungseinrichtung im Von-Neumann-Rechner.

Das hier exemplarisch gezeigte Verfahren zweier Phasen in der Befehlsbearbeitung ist die technische Lösung für das grundsätzliche Problem des Von-Neumann-Rechners: Er besitzt nur eine Verbindungseinrichtung zu zwei verschiedenen Speicherinhalten - Programm und Daten. Die Lösung ist hier der zeitliche Multiplex des Bussystems:

1. In der so genannten Fetch- und Interpretationsphase wird auf Grund der durch den Befehlszähler angezeigten Adresse der Inhalt einer Speicherzelle geladen und als Befehl interpretiert. Zu dieser Phase zählt im Allgemeinen auch das Laden von Operanden, zumeist von Adressen oder unmittelbaren Daten, sofern diese als Bestandteil des Befehls im Speicher stehen. Die Interpretation des Befehls steuert den weiteren Vorgang.

2. In der darauf folgenden Ausführungsphase wird der Befehl nunmehr vollständig interpretiert und ausgeführt. Die Ausführung kann verschiedene Teile der CPU und des Bussystems sowie der angeschlossenen Einheiten in Anspruch nehmen. Das Leitwerk steuert dies entsprechend. Gemeinsam ist diesen Vorgängen, dass alle Speicherzelleninhalte, auch aus dem Ein-/Ausgabesystem, als Daten interpretiert werden.

Dieser zweistufige Ablauf muss für einen Befehl streng sequenziell ablaufen, da eine Abhängigkeit zwischen den verschiedenen Phasen existiert: Ergebnisse früherer Phasen sind eventuell für die weitere Bearbeitung notwendig. Spätere Va-riationen der Von-Neumann-CPU, zum Beispiel die RISC-Architekturen, beinhalten ein Phasen-Pipelining, das eine scheinbare Parallelität der Aktionen zueinander bewirkt. Dies ist kein Widerspruch zu unseren frisch gewonnenen Erkenntnissen. Die Parallelität im Phasen-Pipelining bezieht sich auf verschiedene Befehle, während die Bearbeitung eines Befehls weiterhin streng sequenziell bleibt.

Der Zeitmultiplex der Busnutzung ist notwendig, da das Bussystem für den Zugriff auf mehrere Arten von Speicherzelleninhalten dienen muss. Dies wiederum hat seine Ursache darin, dass der Speicher fast immer im Mittelpunkt der Operationen steht. Das ist unabhängig davon, ob es Programm- oder Dateninhalte sind, auf die zugegriffen werden soll. Die CPU-Speicherkommunikation beeinflusst daher die Leistungsfähigkeit des Gesamtsystems entscheidend, was auch als Von-Neumann-Flaschenhals (von Neumann bottle-neck) bekannt ist.

Die Grundstruktur des Von-Neumann-Rechners wurde im Harvard-Modell variiert. Code- und Datenspeicher sind voneinander getrennt und besitzen daher auch verschiedene, sich nicht gegenseitig störende Zugänge (Bussysteme). Dies gilt ebenso für das modifizierte Harvard-Modell, das einen Gesamtadressraum für Code und Daten kennt, hierbei aber unabhängige Zugänge anbietet. Bei datenintensiven Rechenaufgaben, wie sie zum Beispiel bei Signalverarbeitungsalgorithmen auftreten, kommen daher oft Architekturen mit modifiziertem Harvard-Modell zum Einsatz (zum Beispiel bei digitalen Signalprozessoren, Digital Signal Processors, DSP). Das Ablaufmodell nach von Neumann wird jedoch auch für das Harvard-Modell genutzt.

Bussysteme

Die im Bild "Von-Neumann-Rechner" dargestellte Verbindungseinrichtung ist als Bussystem ausgeführt. Hierunter versteht man ein System von Verbindungsleitungen, das in wesentlichen Teilen nicht einem einzigen Informationstransfer exklusiv, sondern vielen in zeitlichem Multiplex zur Verfügung steht.

Für ein solches Bussystem hat sich eine Dreiteilung in einen Adressbus, einen Datenbus und einen Steuerbus bewährt. Jedem dieser Teilsysteme ist dann eine genau spezifizierte Aufgabe zugeordnet, die wir auf den nächsten Seiten erläutern.

Grundsätzlicher Aufbau: in- und externe Busse I

Eine exklusive Verbindung des Prozessors zu jeder Speicherzelle und zu jedem Teil im Ein- und Ausgabesystem wäre eine maximale Lösung des Verbindungssystems, die sich wegen der dafür notwendigen immensen Ressourcen weit gehend verbietet. Anstelle eines derartigen Systems wurde im Rahmen des Von-Neumann-Rechnermodells, aber auch der anderen Entwicklungen, eine Unterteilung des externen Verbindungssystems eingeführt, die sich als sehr sinnvoll und technisch gut realisierbar erwiesen hat.

Zunächst wird pro Prozessorarchitektur eine Bitbreite definiert, die als Anzahl der zu übertragenden Bits pro Speicherzugriff für alle Transfers gilt. Typischerweise sind dies 4, 8, 16, 24, 32 oder 64 Bit, je nach Ausführung des Prozessors. Ein Transfer von oder zum Speicheräquivalent gilt auch für das Ein-/Ausgabesystem immer in der angegebenen Bitparallelität. Die zugehörigen Leitungen zum Transfer des Speicherzelleninhalts werden als Datenbusleitungen (Data Bus) bezeichnet (siehe Bilder "Klassischer Ablauf" und "Systembusschnittstelle").

Die externen Datenbusleitungen müssen bidirektional ausgeführt sein, um sowohl lesend als auch schreibend wirken zu können. Technisch gesehen werden Tristate-fähige Treiberelemente (siehe Bild 2.4) benötigt, die durch Steuersignale ein- beziehungsweise ausschaltbar sind. Im ausgeschalteten Zustand ("dritter Zustand") liefern diese Treiberelemente ein so schwaches elektrisches Signal, das von jedem anderen aktiven Treiberelement mit "0" oder "1" überstimmt werden kann. Dank dieses Prinzips kann man in Bussystemen mehrere Einheiten zusammenschalten, wobei zu einem Zeitpunkt maximal eine Einheit aktiv ist.

Die Speicherzellen selbst sind zusätzlich zu adressieren, um immer eine Eindeutigkeit des Transfers zu gewährleisten. Diese Adressierung erfolgt über gesonderte Leitungen, die zusammenfassend als Adressbus (Address Bus) die eindeutige Zuordnung zwischen der physikalischen Speicherzelle und der gewünschten Adresse im Prozessor herstellen.

Der Adressbus muss aus Sicht der CPU nur unidirektional als Ausgang vorhanden sein, da es im Von-Neumann-Rechnermodell immer nur der Prozessor ist, der die konkrete Adresse bestimmt. Eine Ausnahme sind aber Multimaster-fähige Bussysteme, beispielsweise in Mehrprozessorkonfigurationen. Hier wird der Adressbus einer einzelnen CPU gegebenenfalls ausgeschaltet, um die Bustreiber anderer Busmaster zum Zugriff zuzulassen.

Das dritte Teilsystem der Verbindungseinrichtung ist der Steuerbus (Control Bus). Er fasst alle Signale zusammen, die der externen Steuerung eines Datentransfers am Bus dienen. Das sind beispielsweise die Leitungen zum Anzeigen der Transferrichtung (READ beziehungsweise WRITE) oder auch zur Unterscheidung zwischen Speicher- und Ein-/Ausgabetransfer (MEMORY beziehungsweise IN/OUT). Diese Signale besitzen im Allgemeinen eine weniger einheitliche Struktur, verglichen mit dem Adress- beziehungsweise Datenbus. Eine genauere Diskussion der Aufgaben der Steuersignale und eine Spezifikation der insbesondere zeitlichen Zusammenhänge lässt sich nur in Verbindung mit realen Speichertransfers erreichen.

Grundsätzlicher Aufbau: in- und externe Busse II

Die externen Bussysteme müssen innerhalb des Prozessors Quellen oder Senken besitzen, aus denen sie Informationen erhalten beziehungsweise in denen sie gespeichert werden. Im Innern jedes Prozessors existiert daher ein im Allgemeinen wesentlich komplexeres Bussystem für Daten und Adressen. Gesteuert wird es durch das Steuer- oder Leitwerk der CPU. Einige von diesen Steuerleitungen sind auch extern vorhanden.

Das Bild "Systembusschnittstelle" zeigt eine derartige Schnittstelle für eine Leitung. Der externe Datenbus ist mit den zugehörigen internen Systemen - hier sind durchaus mehrere denkbar - durch bidirektionale Treiberelemente verbunden (siehe Bild "Treiberelemente").

Als interne Quellen für die Adressbusleitungen können zum einen der Programmzähler (PC), zum anderen spezielle Adressregister dienen. Jeder Zugriff auf das nächste Befehlswort (Fetch) wird über den Adressbus adressiert, die Adresse stammt aus dem Programmzähler. Dieser Zugriff ist quasi obligatorisch. Nach einem Zugriff wird der Wert um eine Zugriffsweite erhöht, in Bild "Systembusschnittstelle" durch die Inkrementeinheit "+1" dargestellt. Bei Sprungbefehlen jedoch ändert sich der Wert des Zählers, indem ein neuer Wert, die Sprungzieladresse, in den PC geladen wird. Der nächste Fetch erfolgt dann auf die neue Adresse.

Der Programmzähler sowie das Adressregister erhalten den gültigen Wert über einen internen Datenbus. Das Adressregister entspricht dem Adressfeld des Befehlsregisters aus Bild "Klassischer Ablauf", hier wird die Zugriffsadresse für einen Speichertransfer (Daten) abgelegt, um - sofern notwendig - als Quelle für den Adressbus in der Ausführungsphase zu dienen.

Adress-, Daten- und Steuerbus im zeitlichen Verhalten

Die Ausführung des Bussystems als mehrfach genutzte Verbindungsleitungen bedeutet, dass für den zeitlichen Multiplex ein entsprechendes zeitliches Verhalten festgelegt sein muss. Die Busleitungen können nicht exklusiv für eine Verbindung genutzt werden. Dieses zeitliche Verhalten ist durch einen Handshake geregelt, mit dem die Einheiten sich abstimmen, die einen Datentransfer durchführen. Dieses Handshake-Verfahren ist in seinem zeitlichen Verhalten wiederum zumeist an den CPU-Takt gekoppelt.

Generell unterscheidet man drei Arten von Bus-Handshakes : synchrone, semi-synchrone und asynchrone Busprotokolle. Die asynchronen Systembusse besitzen hierbei keinerlei Kopplung an einen Takt und sind daher sehr flexibel, aber auch aufwendig. Die MC68000-Architektur von Motorola ist ein Beispiel dafür. Zurzeit findet man asynchrone Bussysteme jedoch nur bei asynchronen Prozessor-Designs (Amulet 3E), so dass sie aus den Betrachtungen dieser Artikelreihe herausfallen.

Das Bild "Synchron" zeigt die logischen und (qualitativ) zeitlichen Zusammenhänge für einen synchronen Systembus. Kennzeichnend hierfür ist die starre Kopplung aller Signale an den CPU-Takt. In dieser Darstellung wurden zwei CPU-Takte pro Buszugriff angenommen, in der Praxis variiert dieses Verhältnis zwischen einem und zwölf Takten. Die aus diesem Verhältnis resultierende Periodizität mit der Länge T wird auch Bustakt genannt.

Während des gesamten Bustakts wird mit einer gewissen Phasenverschiebung die Adresse der Speicherzelle am Adressbus angelegt. Bei einem lesenden Zugriff erwartet die CPU ab einem definierten Zeitpunkt (in Bild "Synchron" kurz nach Beginn des zweiten Takts Tb) ein stabiles Signal am Datenbus. Dieses muss bis zur Übernahme in interne Register des Prozessors unveränderlich stabil sein. Die Kennzeichnung des lesenden Zugriffs erfolgt durch das Steuerbussignal /RD, das wie allgemein üblich Low-active mit "/" gekennzeichnet ist. Die Übernahme der Daten erfolgt in Bild "Synchron" gekoppelt an die positive Flanke am Ende des Bustakts.

Der schreibende Zugriff am Bus verläuft sehr ähnlich, hier ist das Signal /WR Low-active, und /RD bleibt inaktiv. In diesem Fall setzt der Prozessor die Signale am Datenbus durch Aktivschaltung der entsprechenden Treiber aus Bild "Treiberelemente".

Semi-synchrones Busprotokoll

Das synchrone Busprotokoll besitzt, wie bereits diskutiert, eine starre Kopplung zwischen Zugriffsdauer und CPU-Takt und damit ein nicht variables Zeitschema. Die wichtigste Konsequenz hieraus ist, dass alle Busteilnehmer die Zeiten einhalten müssen, die ihnen zur Verfügung stehen. Ein gemischtes Design mit langsamen und schnellen Speicherbausteinen erzwingt einen Bustakt, der dem langsamsten Teilnehmer entsprechen muss. Da das Verhältnis zwischen Bus- und CPU-Takt nicht variierbar ist, wird Ersterer herabgesetzt und der Prozessor zugleich verlangsamt. Dieser Nachteil des ansonsten sehr einfachen synchronen Betriebs lässt sich mit dem semi-synchronen Busprotokoll vermeiden.

Für das semi-synchrone Busprotokoll wird eine zusätzliche Leitung benutzt (meistens als /Ready bezeichnet), die seitens des Prozessors ein Eingang ist. Bild "Semi-synchron" zeigt die Verhältnisse für einen lesenden Zugriff. Liegt auf dieser Leitung rechtzeitig vor dem Speichern in das interne Prozessorregister ein aktives Signal vor, dann weiß der Prozessor, dass der Buszyklus in der minimalen Zeit beendet werden kann und die Daten gültig sind. /Ready steuert also die Übernahme und das Zurücksetzen von /RD.

Das Bild "Verzögerung" zeigt diesen Vorgang anschaulich für einen schreibenden Bustransfer, bei dem das /Ready-Signal nicht rechtzeitig genug vorliegt und somit insgesamt für eine Verlängerung des Zugriffs sorgt.

Das /Ready-Signal ist in dieser Darstellung zu dem Zeitpunkt definitiv inaktiv, der zur Beendigung des Buszyklus ohne Verlängerung einzuhalten wäre. Der Prozessor verlängert daraufhin den (Schreib-)Zyklus T um einen weiteren CPU-Takt (hier mit Tw bezeichnet) zum Zyklus T'. Innerhalb dieser Verlängerung, die prinzipiell noch um mehrere Wartezyklen erweiterbar wäre, signalisiert der Speicher über die /Ready-Leitung, dass die Daten gespeichert sind. Der Prozessor kann dann diesen Bustransfer beenden und den nächsten starten.

Das /Ready-Signal ist also im Rahmen des Busprotokolls für die Einhaltung der Transferzeiten zuständig und synchronisiert Prozessor und Peripherie beziehungsweise Speicher. Dieses Signal ist in einem Rechner-Design gegebenenfalls separat zu erzeugen, falls die verwendeten Speicherbausteine es nicht selbst zur Verfügung stellen können.

Vergleich des synchronen undsemi-synchronen Busprotokolls

Das synchrone Busprotokoll war die erste Methode, um Prozessor und Speicher (sowie Peripherie) miteinander zu koppeln. Es wird aktuell bei relativ einfachen Mikroprozessoren (zum Beispiel Ausführung in 4- und 8-Bit-Datenbusbreite) eingesetzt und ist besonders dann zu empfehlen, wenn es um die Einfachheit des Bussystems geht. Voraussetzung hierfür ist die Auslegung aller Systemkomponenten auf etwa die gleiche Geschwindigkeit, um den angestrebten Betriebstakt nicht unnötig heruntersetzen zu müssen.

Für das semi-synchrone Busprotokoll gilt, dass das Prozessor-Design etwas komplexer ist, bedingt durch die Synchronisierung mit dem /Ready-Signal. Aus diesem Grund werden nur Mikroprozessoren mit "höheren" Datenbusbreiten (etwa ab 16 Bit) mit diesem Bussystem ausgeführt. Der Gewinn an Flexibilität im Verhältnis Prozessortakt zur Geschwindigkeit der anderen Busteilnehmer ist natürlich groß und kann zu einer entsprechenden Systementscheidung führen. Andererseits ist das semi-synchrone Busprotokoll einfach in das synchrone zu überführen, indem die /Ready-Leitung des Prozessors permanent auf low gesetzt wird.

Das semi-synchrone Busprotokoll wird in der Regel gegenüber dem asynchronen Busprotokoll bevorzugt, weil hier die Taktkopplung zu einem vergleichsweise einfacheren Design führt. Dies gilt insbesondere für die sehr hoch getakteten Mikroprozessoren im PC-Bereich.

Speicher

Eines der Grundelemente des Von-Neumann-Rechners (wie auch des Harvard-Modells) ist der Speicher (Memory), den wir bei der Besprechung der Bussysteme bereits als Partner für Transfers am Bus behandelt haben. Dieser Speicher dient der Aufnahme sowohl von Programmcode als auch von Daten.

Jeder Speicherplatz ist über eine binäre Adresse ansprechbar und enthält eine spezifizierte Anzahl von binärwertigen Informationen, meist in Form von 1, 4, 8, 16 oder 32 Bit (Bit: Binary Digit). Im Rahmen eines Rechners muss die Adresse eines Speicherplatzes eindeutig definiert sein, um ein deterministisches Verhalten des Rechners zu erreichen.

Entsprechend den unterschiedlichen Einsatzkriterien sind verschiedene Formen des Speichers erhältlich. Im Allgemeinen unterscheidet man:

Die minimale Ausstattung eines Von-Neumann-Rechners beinhaltet einen Nur-Lese-Speicher für das nach Einschalten auszuführende Programm. Weiterhin hat sie einen Schreib-Lese-Speicher für die Variablen, die dann im Rahmen des Programms die Daten enthalten.

Ausblick

Die Themen des zweiten Teils: Das Leit- und das Rechenwerk bilden den Übergang zum Hardware-/Software-Interface. Hier steht im Vordergrund, die logische Funktionalität dieser Teile zu verstehen. Das Hardware/Software-Interface selbst wird durch das Registermodell, den Befehlssatz sowie die Adressierungsarten gebildet.

Eine genaue Betrachtung der Phasen der Befehlsbearbeitung und - als Erweiterung des Von-Neumann-Rechners - das Interrupt-Request-Konzept - bilden den Abschluss dieser Artikelserie im dritten Teil. (mec)

Serie: Prozessorgrundlagen: Von-Neumann-Architektur

Teil 1

Bussysteme und Speicherarten

Teil 2

Leit-/Rechenwerk und Registermodell

Teil 3

Befehlssatz, Adressierungsarten und Interrupt-Konzept

Diesen Artikel und eine ganze Reihe weiterer Grundlagenthemen zu Prozessoren finden Sie auch in unserem tecCHANNEL-Compact "Prozessor-Technologie". Die Ausgabe können Sie in unserem Online-Shop für 9,90 Euro versandkostenfrei bestellen. Ausführliche Infos zum Inhalt des tecCHANNEL-Compact "Prozessor-Technologie" finden Sie hier.

Literatur

[1] Christian Siemers: Prozessorbau - München, Wien: Carl Hanser Verlag, 1999

[2] Oberschelp, W.; Vossen, G.: Rechneraufbau und Rechnerstrukturen - 8. Auflage - München, Wien: R. Oldenbourg-Verlag, 2000

[3] Schiffmann, W.; Schmitz, R. ; Weiland, J.: Technische Informatik 2, Grundlagen der Computertechnik - 2. Auflage - Berlin, Heidelberg, New York: Springer Verlag, 2001