Ein-Takt-Inkrement-Betrieb in einer Drei-Bus-CPU-Architektur

In seinem Kapitel über CPU-Design stellt Edward Bosworth die folgende Drei-Bus-Architektur vor:

drei Bus-CPU

Eines der Hauptdesignziele dieser Schaltung besteht darin, den Programmzähler PC in einem einzigen Taktzyklus inkrementieren zu können. Gemäß dem begleitenden Text wird dies erreicht, indem B1 von PC, B2 von dem +1-Konstantenregister angesteuert wird, das Additionssignal an der ALU angelegt und PC von B3 angesteuert wird:

PC <- PC+1: PC -> B1, 1 -> B2, add, B3 -> PC

Die offensichtliche Frage ist dann, wie kann der PC Laufwerk B1 mit einem Wert registrieren und gleichzeitig einen anderen Wert von B3 laden?

Ich kann mir zwei mögliche Workarounds einfallen lassen, aber beide haben offensichtliche Probleme.

  1. Die Übertragungen erfolgen nicht gleichzeitig. Beispielsweise wird B1 auf der steigenden Flanke angesteuert, während das Signal von B3 auf der fallenden Flanke geladen wird. Aber dann, wenn wir aufhören, B1 anzusteuern, würde das Signal auf B3 verschwinden, wenn kein anderes Register im Pfad vorhanden ist. Wenn Sie irgendwo ein Zwischenregister verwenden (in der ALU?), Führen Sie wirklich nur Zwei-Zyklus-Inkremente mit Halbzykluszyklen durch.
  2. Das PC-Register besteht eigentlich aus zwei Registern, einem für die Ausgabe und einem für die Eingabe, die nicht verbunden sind, wenn das Register geladen wird. Aber dann bräuchten Sie eine Art "Ausgleichslogik", die sich als nicht trivial herausstellen könnte.

Also, was ist hier los?

Antworten (1)

Es stellt sich heraus, dass ich ein entscheidendes Detail im Begleittext übersehen habe und die Register tatsächlich aus zwei (Master-Slave-) Unterregistern bestehen:

Die Verwendung von Master-Slave-Registern

Beachten Sie, dass der Inhalt des PCs innerhalb des gleichen Taktimpulses inkrementiert wird. Als direkte Konsequenz muss der PC als Master-Slave-Flip-Flop implementiert werden; eine, die nur während der positiven Phase der Uhr auf ihren Eingang reagiert. Beim Design dieses Computers werden alle Register in der CPU als Master-Slave-Flip-Flops implementiert.

Ist das nicht die Antwort auf die Frage? Wenn ich es in der Frage wieder hinzufüge, bleibt keine Frage mehr übrig. Übrigens, ich bin glücklich, das Ganze zu entfernen, wenn es euch lieber ist.
Oh, Entschuldigung. Ich dachte, Sie würden der Frage Details hinzufügen. Mein Fehler.
Die Frage konkret genug zu formulieren, um sie hier zu posten, ließ mich das Problem so weit analysieren, dass ich beim zweiten Lesen mehr oder weniger sofort die Lösung fand. Selbst wenn ich meine eigene Frage beantwortet habe, ist es immer noch electronic.stackexchange, das die Anerkennung erhält;)
@drxzl - Ja, es ist EE, das davon profitiert, und daher ist es gut, Ihre Antwort zu posten. Immer wieder interessant für andere User. Sie erhalten die Upvotes, aber die 15 Repräsentanten für die Annahme bleiben im Lager :-)
Es ist erwähnenswert, dass flankengesteuerte Flip-Flops heute zwar „die Norm“ sind, dies in den vergangenen Jahrzehnten jedoch nicht der Fall war. Viele Prozessoren wie der ehrwürdige 6502 verwendeten zwei oder mehr nicht überlappende Taktimpulse, um verschiedene Teile der Logik zu betreiben; Diese Impulse könnten entweder an den Flanken einer halbwegs quadratischen Uhr (wie beim 6502) oder durch Unterteilen einer höherfrequenten Uhr (wie beim 8031) erzeugt werden. Ich glaube, viele PIC-Prozessoren verwenden immer noch solche Ansätze. Einige ältere Prozessoren verwendeten statt herkömmlicher Latches "dynamische Logik" ...
... um weitere Schaltungen zu sparen (ein "dynamisches transparentes Latch" könnte mit zwei aktiven Transistoren und einem passiven Pull-up implementiert werden, während ein statisches wahrscheinlich mindestens vier Transistoren und zwei passive Pull-ups erfordern würde).
@supercat: Danke für die historische Anmerkung. Ich habe tatsächlich kurz überlegt, das zu tun. Ich habe auch überlegt, das Taktsignal durch eine Reihe von Gattern zu leiten, um einen Offset zu erzeugen. Dann wurde mir klar, dass es eine dumme Idee wäre. Dann fand ich ein Buch, in dem erwähnt wurde, dass die Leute diese Dinge früher gemacht haben und warum es besser ist, sich an Edge-Triggering zu halten. Komisch, wie viel Geschichte des digitalen Designs ich in der letzten Woche wiederholen musste :P
Danke an alle. Bisher genieße ich meinen Ausflug in das digitale Design. Ich melde mich wahrscheinlich bald mit weiteren Fragen zurück ;)
@drxzcl: Wenn man einen Chip auf Transistorebene entwirft, kann man möglicherweise erhebliche Einsparungen bei den Kosten und / oder dem Stromverbrauch erzielen, indem man Dinge wie transparente Latches verwendet. Andererseits ist es viel einfacher, über Designs nachzudenken, die vollständig flankengesteuerte Latches verwenden, die alle mit einem gemeinsamen Takt laufen. Es gibt Zeiten, in denen ich rein synchrone Designs als lästig empfinde (z. B. ermöglicht die STM32LF-Serie von Mikrocontrollern, einen 32.768-Hz-Quarz laufen zu lassen, während der Prozessor schläft, aber seine Zähler laufen alle synchron zum Haupttakt ...
... was es notwendig macht, die Hauptuhr auf mindestens 130 kHz nominal laufen zu lassen, um sicherzustellen, dass die Zähler weiterhin die Zeit messen, wenn die CPU aufwacht oder in den Ruhezustand übergeht). Die ARM-basierten Controller, die ich mir angesehen habe, scheinen solche Einschränkungen oft in größerem Umfang zu haben als nicht-ARM-basierte (ich bin etwas verwirrt darüber, warum nur sehr wenige Prozessoren zyklusgenaue Zeitzähler haben, die währenddessen reibungslos funktionieren können Wach-/Schlaf-Übergänge, ohne dass eine Hauptuhr zum Laufen benötigt wird).