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
Antworten:
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:
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 .
quelle
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:
quelle
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.
quelle