[vorheriger Abschnitt][nächster Abschnitt][Inhalt]

2 Grundlagen der Rechnerarchitektur


2.1.3 Bus

Der Bus ist die gesuchte Komponente, um Binär-Wort-Quellen mit Binärwort-Senken zu verbinden. Er baut auf dem Begriff der "Leitung" auf:

Der Bus als eine erweiterte Leitung ermöglicht es, die Anzahl der notwendigen Leitungen zu reduzieren. Daß dieses notwendig ist, zeigt das folgende Beispiel: Vier Register sollen so verbunden werden, daß jedes Register den Wert jedes anderen aufnehmen kann. Mit den üblichen Leitungen an Datenein- und -ausgang (wie in 2.1.1 Register) müßte die Verkabelung so aussehen:
[Vier Register ohne Bus]

Um n Register paarweise miteinander zu verbinden, sind bei dieser Art von "Verkabelung" offenbar (n+1)*n = (1 + 1 + (n-1))*n Leitungen notwendig: Jedes der n Register hat eine Leitung am Datenausgang. Jedes der n Register hat eine Leitung am Dateneingang; der Wert auf dieser Leitung stammt von je einem Multiplexer. Dieser Multiplexer wählt einen der Werte der n-1 anderen Register aus, hat also n-1 Eingangsleitungen.

Man beachte, daß bei Registern der Breite m jede Leitung wieder aus m parallelen Ein-Bit-Leitungen besteht! Insgesamt ist die "Verdrahtung" schon für dieses Beispiel relativ aufwendig und die Anzahl der benötigten Leitungen steigt quadratisch mit der Anzahl der zu verbindenden Komponenten an! Bei einem modernen Mikroprozessor mit 32 oder mehr Registern ist es dann wahrscheinlich gleichgültig, mit welcher Technik der Halbleiterfertigung man die Register und ihre Verbindungsleitungen erzeugt - immer würden die Leitungen mehr Platz einnehmen, als die Register, die "Straßen" mehr Platz belegen als die "Häuser"! Das ist, zumindestens solange die Chips keine Schönheitsrekorde aufstellen sollen, für sich genommen nicht so schrecklich wie es klingt. Jedoch bedeutet mehr Platz für Leitungen natürlich auch mehr Platz für die gesamte Schaltung, und die Größe einer integrierten Schaltung ist der mit Abstand wichtigste Kostenfaktor. Tatsächlich ist es nahezu gleichgültig, welche Strukturen auf einem Chip erzeugt werden, hauptsächlich ihre Fläche, also die Minimalgröße des einzelnen Chips, treibt die Kosten in die Höhe. Auch außerhalb der Chipgehäuse, also z.B. auf der Hauptplatine eines Computers, ist Flächenbedarf, aus naheliegenden Gründen, ein wichtiger Kostenfaktor, neben z.B. der Wahl der Bauteile oder der Anzahl der "Durchkontaktierungen" (Verbindungen von einer Platinenebene auf eine andere).

Einen Vorteil der gewählten Verdrahtung wollen wir nicht verschweigen: Jedes der vier Register kann pro Taktzyklus einen beliebigen der Werte der anderen Register aufnehmen; es kann also z.B. Register 1 (R1) den Wert von Register 4 aufnehmen, R2 den von R3, R3 den von R2 und R4 ebenfalls den von R2.

Wenn diese Funktionalität nicht notwendig ist, sondern nur ein neuer Wert pro Taktzyklus zur Verfügung stehen soll, den allerdings beliebig viele der Register übernehmen können, kommt (endlich) der Bus ins Spiel.

Das Beispiel mit den vier Registern sieht mit einem gemeinsamen Bus für die Daten als erster Ansatz so aus:

[Bus (erster Ansatz)]Der Bus besteht aus einer (senkrechten) Hauptleitung, die den einen Wert transportiert, der zwischen Registern übertragen werden soll, und "Stichleitungen", die die Binärwörter von den Datenausgängen liefern bzw. zu den Dateneingängen bringen. Das Hauptmerkmal des Busses, und der Grund für seine "Sparsamkeit" in Platzfragen, ist die gemeinsame Hauptleitung; es ist klar, daß so nur ein Wert zur Zeit übertragen werden kann und verhindert werden muß, daß mehr als ein Register zu einem Zeitpunkt den Bus treibt. Weil die Register immer ihren Wert aussenden, werden sie an den Ausgängen mit Tri-State-Gattern versehen. Die (nicht gezeigte) Ansteuerungslogik für die Tri-State-Gatter muß dafür sorgen, daß höchstens ein Register den Bus treibt; das verwendete Signal heißt häufig output enable (oe)


Die gezeigte Lösung kann aber noch weiter vereinfacht/verkleinert werden:

[Bus]Daß der neue Aufbau zunächst aufwendiger erscheint, liegt daran, daß wir nun die rechteckigen Symbole für 2-auf-1-Multiplexer eingezeichnet haben, von deren Existenz wir schon bei der aufwendigen Verdrahtung zu Beginn stillschweigend ausgegangen sind. Alle Register müssen nämlich über einen zusätzlichen write enable-Eingang (we) verfügen, um sicherzustellen, daß diejenigen Register, die in einem Taktzyklus keinen neuen Wert aufnehmen sollen, ihren alten Wert behalten (in dem sie durch den Multiplexer den alten Wert erneut zur Speicherung übergeben bekommen).
Die behauptete Vereinfachung ergibt sich dadurch, daß „aktive" Register entweder den Bus treiben (und ihren eigenen Wert erneut übernehmen) oder den Wert des Busses übernehmen, aber niemals die beiden Leitungen zum Bus gleichzeitig benutzen. Damit können die beiden Stichleitungen, die jedes Register mit dem Bus verbinden, zu einer zusammengefaßt werden.
Wir wissen nun, daß jedes Register zwei Steuereingänge besitzt, die sein Verhalten regeln:


write enable

output enable

Verhalten

inaktiv inaktiv Register behält seinen Wert bei Aktivierung des Taktsignals; verändert nicht den Wert des Busses
aktiv inaktiv Register übernimmt Wert des Busses bei Aktivierung des Taktsignals; verändert nicht den Wert des Busses
beliebig aktiv Register behält seinen Wert bei Aktivierung des Taktsignals; treibt unabhängig vom Takt den Bus

[Bus (erweiterte Register)]Um Selbstverständliches nicht dauerhaft optisch mitzuschleppen, soll das Register-Symbol auf allen folgenden Bildern und in allen folgenden applets für ein "erweitertes Register" inklusive Logik für write enable und output enable stehen. Das Bild der vier durch einen Bus verbundenen Register reduziert sich also zu dem links gezeigten.


[vorheriger Abschnitt][nächster Abschnitt][Inhalt] Carsten Kelling 1996 ([EMail senden]); letzte Änderung: 17. September 1997