Hat die 8085-CPU ein zusätzliches Register in der ALU?

11

In der 8085-CPU-Architektur wird das Ergebnis nach Abschluss der Berechnung durch ALU bei der nächsten Taktflanke auf den Akkumulator A zurückgetaktet. Der Akku A ist jedoch direkt als ALU-Eingang verdrahtet. Wenn die Taktflanke nicht schnell genug ansteigt, um zu bewirken, dass A zweimal oder mehrmals hinzugefügt wird, ist es äußerst schwierig, einen solchen Fehler zu erkennen. Ein solches Design ist sehr " zerbrechlich "für mich.

Es sei denn, es gibt ein zusätzliches Register innerhalb der ALU, um ALU-Ergebnisse vorübergehend zu speichern?

https://en.wikipedia.org/wiki/Intel_8085#/media/File:Intel_8085_arch.svg

https://en.wikipedia.org/wiki/Intel_8085

starx
quelle
2
Dies sieht aus wie eine Frage für @ KenShirriff…
Abenddämmerung -inaktiv-
1
Warum hat das Takten des ALU-Ergebnisses in ein Zwischenregister Ihrer Meinung nach nicht die gleichen möglichen Probleme wie das Takten in den Akkumulator? In jedem Fall sollten Sie besser wissen, dass Ihre ALU ein gültiges Ergebnis mit ausreichender Setup- und Haltezeit im Verhältnis zur Uhr liefert.
Das Photon

Antworten:

17

Wie @duskwuff vermutet, habe ich mir das angeschaut. Um die Frage zu beantworten, verfügt der 8085 über zwei zusätzliche Register in der ALU.

Der 8085 verfügt über mehrere "versteckte" Register: ein 16-Bit-WZ-Paar und zwei 8-Bit-ALU-Hilfsregister: ACT und TMP. WZ ist Teil der Registerdatei, während sich ACT, A (Akkumulator) und TMP in der ALU-Schaltung selbst befinden.

Hier ist ein Diagramm, wie die ALU funktioniert:

Registerstruktur der 8085 ALU

Das ACT-Register hat mehrere wichtige Funktionen. Erstens enthält es den Eingang zur ALU. Dadurch können die Ergebnisse der ALU in den Akkumulator zurückgeschrieben werden, ohne den Eingang zu stören, was zu Instabilität führen würde. Zweitens kann die ACT konstante Werte halten (z. B. zum Inkrementieren oder Dekrementieren oder zur Dezimalanpassung), ohne den Akkumulator zu beeinflussen. Schließlich erlaubt die ACT ALU-Operationen, die den Akkumulator nicht verwenden.

Eine interessante Konsequenz des ALU-Setups des 8085 ist, dass ein Wert erst nach Durchlaufen der ALU in den Akkumulator geladen werden kann.

Details zum 8085-Registersatz finden Sie hier und Details zur ALU finden Sie hier .

Ken Shirriff
quelle
1
Irgendwie wusste ich, dass Sie dazu etwas zu sagen haben würden. : 3
Abenddämmerung -inaktiv-
2
brillant ~ (sowohl Ken Shirriffs Blog als auch 8085)!
Starx
5

Bei synchronen Designs ist es eine wichtige Aufgabe des Designers, sicherzustellen, dass solche Dinge nicht passieren. Das Register, in das Daten "getaktet" werden, weist spezifische dynamische Eigenschaften auf, wie z. B. Takterhöhungszeit, Takthaltezeit, Daten, die vor und nach dem Taktsignalwechsel stabil sind. Wenn das Timing verletzt wird, kann der resultierende Zustand nicht garantiert werden.

In Ihrem speziellen Fall hat ALU seine Laufzeitverzögerung, und um A zweimal hinzuzufügen, sollte es eine Zeit dauern, bis neues A zu vorherigem A innerhalb des Addierers hinzugefügt wird und das Ergebnis an seiner Ausgabe erscheint. Höchstwahrscheinlich wurde simuliert und berechnet, dass dies nicht innerhalb des für das Gerät festgelegten zulässigen Taktfrequenzbereichs geschieht . Aus diesem Grund weist das Datenblatt explizit minimale und maximale Taktwerte auf. Für 8085A-2 heißt es:

  • Minimale CLK-Zyklusdauer: 320 ns
  • Maximale CLK-Zyklusdauer: 2000 ns
Anonym
quelle
5

Der Akkumulator ist das Ausgangsregister der ALU.

Der 8085 hat einen Zweiphasentakt. Wobei ein einzelner Taktbefehl wie ein NOP 2 Taktzyklen benötigte. Ähnlich wie der 8088, der im ursprünglichen IBM-PC verwendet wurde, hatte der 8088 einen 4-MHz-Vierphasentakt und führte einen Befehl mit einer Rate von 1 MHz aus.

Mit dem Zweiphasentakt haben Sie zwei Oszillatorzyklen für jeden Befehlszyklus.

Intern kann für das Timing jede Flanke eines jeden Takts verwendet werden. Die Uhren sind invertiert, so dass tatsächlich vier Uhren für das Timing verfügbar sind.

Dann haben Sie transparente Latches, die an der fallenden Flanke einrasten, und D-Flip-Flops, die an der ansteigenden Taktflanke einrasten.

Ein transparenter Latch ermöglicht es den Eingangsdaten, sich beginnend mit der ansteigenden Flanke des Takts zum Ausgang zu verbreiten, und die Werte werden an der abfallenden Flanke des Takts zwischengespeichert.

Der 8085 hatte viele Möglichkeiten, um die Bedingungen des Ausbreitungsrennens zu vermeiden.

Geben Sie hier die Bildbeschreibung ein

Falsch verstanden
quelle
"Der 8088 hatte einen 4-MHz-Vierphasentakt und führte einen Befehl mit einer Rate von 1 MHz aus" - der 8088 hat nur einen einzigen Takteingangspin (obwohl er einen nicht symmetrischen Takt erwartet, wobei der hohe Zustand ungefähr doppelt so lange dauert wie der niedriger Zustand, der intern anzeigt, dass in diesen Zuständen eindeutig verschiedene Dinge ausgeführt werden, im Gegensatz zu den meisten modernen Prozessoren, die immer alles auf derselben Taktflanke takten. Wird dieser 4-Phasen-Takt also irgendwie intern erzeugt? Gibt es irgendwo eine Beschreibung, wie das funktioniert?
Jules