Warum wird im 8085-Mikroprozessor die Taktfrequenz durch zwei geteilt?

Warum beträgt die erzeugte Taktfrequenz 6,144 MHz, aber intern (8085-Prozessor) verwendet er nur 3,072 MHz. Auch was zu dem spezifischen Wert von 6,144 in einer Uhr führt.

Ich habe eine Antwort bei Yahoo gefunden.... http://answers.yahoo.com/question/index?qid=20080810090119AAurr2i

aber ich muss zugeben, dass ich es immer noch nicht gut verstanden habe. Könnte jemand von euch bitte ein paar Zeilen dazu schreiben?

Die Yahoo-Antwort ist sehr, sehr schlecht. Bitte verzeihen Sie mir, wenn Sie den Autor kennen.
hmm, ich habe dieses Semester gerade Mikroprozessoren belegt, also habe ich keine Ahnung, wie falsch das gewesen sein könnte. Ich denke, ich habe die Antwort hier ... danke.
Der MC6800 war noch anspruchsvoller. Es hatte zwei Takteingänge (phi1, phi2, ca. 180 Grad phasenverschoben), die nicht überlappend sein mussten, dh eine Phase musste für einige ns niedrig sein, bevor die andere ansteigen durfte. Es gab einen zusätzlichen Oszillator-IC (MC6810?), Um diese Taktsignale zu erzeugen.
@Curd Böses Timing und es musste sehr nahe an BEIDE Versorgungsschienen schwingen (damals selten). pdf.datasheetarchive.com/indexerfiles/Scans-000/… MC6871. MC6810 war ein 128 x 8 (!) statischer RAM-Chip.

Antworten (5)

Ein Grund, einen Takt durch zwei zu teilen, besteht darin, eine Rechteckwelle mit einem gleichmäßigen Arbeitszyklus von 50 % zu erhalten. Es kann sein, dass der 8085 intern beide Taktflanken verwendet und nicht funktionieren würde, wenn eine Hälfte des Zyklus viel kürzer als die andere wäre.

In den Tagen, als der 8085 neu war, waren diese netten Dosenoszillatoren nicht üblich, und die Leute haben oft Taktschaltungen aus diskreten Kristallen, Kondensatoren und Logikgattern zusammengeschustert. Die Division durch zwei stellt sicher, dass Sie gleichmäßig beabstandete steigende und fallende Flanken haben.

Bei 6,144 MHz werden Sie feststellen, dass es durch eine ganze Zahl geteilt werden kann, um gemeinsame Baudratenwerte zu erhalten, mindestens bis zu 38400.


nachverfolgen ...

Betrachtet man ein Intel-Datenblatt zum 8085, finden sich drei interessante Aussagen

  1. Der 8085 enthält alle Merkmale, die der 8224-Taktgenerator und der 8228-Systemcontroller für den 8080A bereitstellten

  2. X1 und X2: Sind mit einem Quarz-, LC- oder RC-Netzwerk verbunden, um den internen Taktgenerator anzutreiben. Die Eingangsfrequenz wird durch 2 geteilt, um die interne Betriebsfrequenz des Prozessors zu erhalten.

  3. CLK: Taktausgang zur Verwendung als Systemtakt. Die Periode von CLK ist das Doppelte der Eingangsperiode X1, X2.

Abgesehen von Spekulationen über die Verwendung der ungeraden Flanken des Takts, um Dinge intern zu verschieben, wird deutlich, dass Intel bei der Entwicklung des 8085 die Notwendigkeit eines speziellen Taktcontrollers ersetzte, indem er diese Funktion in den Chip integrierte. Die Halbierung der X1-X2-Zeitbasis vor der Ausgabe als CLK stellt sicher, dass das System einen schönen gleichmäßigen Arbeitszyklus erhält, wenn nichts anderes.

Oft müssen verschiedene Stufen im Mikrocontroller aufgrund von Logikverzögerungen phasenverschoben sein. die Verwendung eines Oszillators mit höherer Geschwindigkeit und das Herunterteilen und Verwenden der zwei unterschiedlichen Flanken für unterschiedliche Logiksätze kann die Kosten der Vorrichtung stark reduzieren. JustJeff ist genau richtig mit der Verwendung eines Oszillators, der ein Vielfaches der Standardtaktraten ist. Es kann Hochgeschwindigkeitsübertragungen sehr einfach machen.
Bist du dir sicher mit der Einschaltdauerangabe? Ich hatte den Eindruck, dass ein Befehlszyklus mehrere Taktzyklen erfordern kann (z. B. ein Befehlszyklus, der aus einem Abrufzyklus und einem Ausführungszyklus besteht). Ich bin mir ziemlich sicher, dass sogar moderne PICs einen 4-stufigen Befehlszyklus haben, weshalb das gesamte Datenblatt Fosc/4 enthält
@ ajs410 - der 8085 würde definitiv mehrere Taktzyklen benötigen, um eine Anweisung abzuschließen; Alle 8-Bit-Mikros aus dieser Zeit (die mir bekannt sind) brauchten mindestens zwei Takte, um etwas zu tun. Worauf ich mich hier beziehe, ist rein intern für den Chip. Wenn Sie sich Blockdiagramme für diese alten Bestien ansehen, können Sie sehen, dass sie einige interne Busse, temporäre Register und so weiter haben, und es sind diese, von denen ich spekuliere, dass sie beide Kanten verwenden könnten. Alle externen Buszyklen würden zwischen Flanken derselben Polarität laufen.

Als dieser Chip entworfen wurde, verwendeten die Leute so wenig Transistoren wie möglich in der CPU, um sie klein genug zu machen, um auf die verfügbaren Chips zu passen.

Ich vermute, dass praktisch jedes "Register" (sowohl vom Programmierer sichtbare Befehlssatzregister als auch interne Mikroarchitektur-Latches) in einer CPU dieser Zeit Daten in einem transparenten D-Latch mit Gate oder ähnlichem speicherte. Heutzutage gibt es viele Transistoren auf einem Chip, daher ist es einfacher, vollständige Master-Slave-D-Flip-Flops zu verwenden, obwohl sie doppelt so viele Transistoren verwenden.

Viele Befehle nehmen Daten aus einem Register A, kombinieren sie mit einigen anderen Daten mit der ALU und speichern das Ergebnis wieder in Register A. Das ist ziemlich einfach, wenn Register A mit einem vollständigen Master-Slave-D-Flipflop implementiert ist.

Aber wenn Register A ein transparenter Gate-D-Latch ist, brauchen Sie nicht überlappende Takte. Sie verwenden einen Impuls auf einer Uhr, um irgendwo ein Zwischenergebnis zu speichern (während Register A seinen Ausgang konstant hält), und dann einen Impuls auf einem anderen Takt, um Register A mit dem neuen Wert zu laden (während das Zwischenregister seinen Ausgang konstant hält).

Dies erfordert einen 2-Phasen-Takt. Der einfachste Weg, einen nicht überlappenden 2-Phasen-Takt zu machen (in jenen Tagen, als Transistoren knapp waren), war eine kleine externe Schaltung, die einen Eingangstakt nimmt und ihn durch zwei teilt.

Im Laufe der Zeit fanden die Leute heraus, wie man immer mehr Transistoren auf einen IC packt. Also haben Leute, die CPUs entwickeln, immer mehr von dem Zeug rund um die CPU in einem vollständigen Computersystem auf dem CPU-Chip integriert.

Wenn ich zwischen den Zeilen des Wikipedia-Taktsignalartikels lese , habe ich den Eindruck, dass die Leute, die den 8085 und den 6502 und andere Chips dieser Zeit entworfen haben, nur ein wenig mehr Platz hatten als die vorherige Generation integrierter CPUs, und sie entschieden sich für das Beste Die Nutzung dieses Raums bestand darin, diese kleine externe Schaltung auf dem Chip zu platzieren. Aber sie behielten alle Register beim gleichen Gate-D-Latch wie zuvor.

Deshalb wird die Taktfrequenz durch zwei geteilt. Sie können sich vorstellen, dass der erste externe Taktimpuls einen Impuls auf dem internen Taktsignal phase_one erzeugt, um dieses Zwischenergebnisregister zu aktualisieren, und der zweite Impuls des externen Takts einen Impuls auf dem internen Taktsignal phase_two erzeugt, um das für den Programmierer sichtbare Register zu aktualisieren.

Wenn ein Latch nie länger als ein paar Mikrosekunden ohne Neuladen auskommt, kann man die Schaltung noch weiter vereinfachen, so dass ein "Latch" nichts anderes ist als ein Einzeltransistor-Pass-Gate und ein Inverter.
Seit ich das oben Gesagte geschrieben habe, habe ich mich mit dem Design des 6502 beschäftigt; Viele der internen Busse werden in einer Taktphase bedingungslos hoch getrieben, und dann kann während der anderen Taktphase ein ausgewähltes Register geeignete Bits auf niedrig ziehen. Wenn es beispielsweise fünf Register gibt, die an den Bus ausgeben können, bedeutet dies, dass der Chip, anstatt ein Pull-up-Gerät für den Ausgang jedes Registers zu benötigen, einfach ein geschaltetes Pull-up-Gerät und zwei zwei in Reihe geschaltete Transistoren für jedes Register verwenden kann um den Bus gegebenenfalls herunterzuziehen. Ich würde erwarten, dass der 8085 mit ziemlicher Sicherheit ähnliche Tricks verwendet.

Es gibt viele Gründe, den Befehlszyklus in mehrere Taktzyklen aufzuteilen. Ein gutes Beispiel ist der Zugriff auf den Hauptspeicherbus.

Die meisten modernen Prozessoren sind Von-Neumann-Architekturen; das heißt, ihr Code und ihre Daten existieren beide auf demselben Speicherchip. Nun, wenn Sie eine Anweisung lesen möchten und diese Anweisung eine Variable aus dem Speicher laden wird, sind das zwei Speicherzugriffe. Aber der meiste Speicher ist nur Single-Port (d. h. er kann nur einen Lese- oder Schreibvorgang pro Zyklus ausführen). Wie lesen Sie also die Anweisung und Ihre Variable?

Die Lösung besteht darin, einen zweistufigen Befehlszyklus zu verwenden. Die erste Stufe holt die Anweisung aus dem Speicher, und die zweite Stufe kann dann die Variable aus dem Hauptspeicher lesen (oder schreiben!).

Einige ältere Chips gingen sogar noch weiter. Wenn Ihr Chip früher 16 Bit adressierbaren Speicher hatte, der externe Adressbus aber nur 8 Bit groß ist, dann wären Sie mit Address Latch Enable vertraut. Ein Taktzyklus sendet die oberen 8 Bits der 16-Bit-Adresse und der nächste Taktzyklus sendet die unteren 8 Bits. Ein dritter Zyklus könnte dann die Variable aus dem/in den Speicher lesen/schreiben.

Es gibt andere, bessere Gründe, einen Befehlszyklus zu haben, der mehrere Taktzyklen lang ist. Einer der besten Gründe ist das Pipelining. Dies ist ein Trick, den moderne Prozessoren anwenden, um alle in einem Chip verfügbaren Ausführungseinheiten besser auszunutzen; Während beispielsweise eine Anweisung ausgeführt wird, wird gleichzeitig die nächste abgerufen.

Ich glaube nicht, dass das OP fragt, warum Sie eine Anweisung auf mehrere Uhren verteilen würden, sondern warum der 8085 so konzipiert ist, dass Sie ihn mit einer 2X-Uhr speisen müssen (die er dann intern teilt), anstatt nur die Absicht zu nehmen Taktfrequenz direkt.
Alles, was Sie über Anweisungen gesagt haben, ist jedoch aktiviert.

Intern benötigt der Kern des 8085A einen Zwei-Phasen-Takt. Die interne Logik, die die zwei Taktphasen ableitet, teilt auch den Eingangstakt durch zwei. Wie bereits erwähnt, liegt der Grund für die Verwendung eines 6,144-MHz-Eingangstakts in der Baudrate, der Chip läuft problemlos mit 6 MHz. Der Chip ist tatsächlich auf 3 MHz ausgelegt und erfordert einen 6-MHz-Quarz, läuft jedoch problemlos mit 6,144 MHz, was eine einfachere Baudratenerzeugung ermöglicht (ein Uart könnte entweder mit 6,144 MHz von einem Oszillator getaktet werden, der den 8085 antreibt, oder mit 3,072 MHz vom CLK-Ausgang des 8085 Bereitstellung vieler nutzbarer Baudraten). Ich benutze diese archaischen Chips immer noch, um in einigen meiner Roboter spezielle Funktionen auszuführen. Ich takte die Uarts mit ihrem eigenen Oszillator und ich takte die 8085A mit einem 6,4-MHz-Oszillator, der den Chip mit 3,2 MHz betreibt. Die 3. 2 MHz teilen sich gut auf, um den 40-kHz-Takt für meine Ultraschallwandler bereitzustellen. Es ist sinnvoller, modernere IC-Geräte in meinen Bots zu verwenden, aber ich habe eine Menge alter 8085er, Z80er, 63C09 und 63C09E, 68B09 und 68B09E usw., mit denen ich wirklich gerne spiele.

Die Uhr ist nichts anderes als ein Moment, in dem Sie möchten, dass ein Ereignis eintritt. Nun bevorzugen wir keine Pegeltriggerung in digitalen Schaltungen, da, wenn mehr Zeit zur Verfügung steht, Wechselwirkungen zwischen verschiedenen Schaltungen innerhalb des Mikroprozessors auftreten können, was zu Kurzschlüssen führt. Also GEHEN wir FÜR EDGE TRIGGERING. Nun weiß der Mikroprozessor nicht, wann eine Flankentriggerung aufgetreten ist. Es versteht nur 1 oder 0. Daher ist ein Flipflop erforderlich, um 1 und 0 zu erzeugen, wenn eine Taktflanke erkannt wird. Daher wird es notwendig, ein Flip-Flop zu verwenden. Als Ergebnis wird die Taktfrequenz durch zwei geteilt.