Warum wird bei einem 8085-Mikroprozessor die Taktfrequenz durch zwei geteilt?


16

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

Ich habe bei Yahoo eine Antwort 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 darüber streichen?


2
Die Yahoo-Antwort ist sehr, sehr schlecht. Bitte verzeihen Sie mir, wenn Sie den Schriftsteller kennen.
Kortuk

Hmm, habe gerade Mikroprozessoren in diesem Semester genommen, also habe ich keine Ahnung, wie falsch das hätte sein können. Ich glaube, ich habe die Antwort hier ... Danke.
Loxxy

1
Der MC6800 war noch anspruchsvoller. Es hatte zwei Takteingänge (phi1, phi2, ca. 180 Grad phasenverschoben), die sich nicht überlappen mussten , dh eine Phase musste einige ns lang niedrig sein, bevor die andere ansteigen durfte. Es gab einen zusätzlichen Oszillator-IC (MC6810?), Um diese Taktsignale zu erzeugen.
Curd

1
@Curd Unangenehmes Timing und es musste sehr nahe an BEIDEN Versorgungsschienen schwingen (in jenen Tagen selten). pdf.datasheetarchive.com/indexerfiles/Scans-000/… MC6871. Der MC6810 war ein statischer 128 x 8 (!) RAM-Chip.
Spehro Pefhany

Antworten:


15

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

In den Tagen, als der 8085 neu war, waren diese netten Oszillatoren in Dosen nicht üblich, und die Leute schusterten oft Uhrenkreise aus diskreten Kristallen, Kondensatoren und Logikgattern zusammen. Durch Teilen durch zwei wird sichergestellt, dass Sie gleichmäßig aufsteigende und abfallende Flanken haben.

Wie 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 ...

Wenn man sich ein Intel-Datenblatt für den 8085 ansieht, gibt es drei interessante Aussagen

  1. Der 8085 verfügt über alle Funktionen, die der 8224-Taktgenerator und der 8228-Systemcontroller für den 8080A bereitgestellt haben

  2. X1 und X2: Werden an ein Quarz-, LC- oder RC-Netzwerk angeschlossen, um den internen Taktgenerator anzutreiben. Die Eingangsfrequenz wird durch 2 geteilt, um die interne Betriebsfrequenz des Prozessors anzugeben.

  3. CLK: Taktausgang zur Verwendung als Systemtakt. Die Periode von CLK ist doppelt so lang wie die Eingangsperiode von X1, X2.

Spekulationen über die Verwendung der ungeraden Kanten der Uhr, um Dinge intern beiseite zu schieben, zeigen, dass Intel bei der Entwicklung des 8085 die Notwendigkeit eines speziellen Taktsteuergeräts durch die Integration dieser Funktion in den Chip ersetzte. Teilen Sie die X1-X2-Zeitbasis in zwei Hälften, bevor Sie sie als CLK ausgeben, um sicherzustellen, dass das System einen schönen, gleichmäßigen Arbeitszyklus erhält, wenn nichts anderes.


1
Oft müssen verschiedene Stufen im Mikrocontroller aufgrund einer logischen Verzögerung phasenverschoben sein. Die Verwendung eines Oszillators mit höherer Geschwindigkeit und das Aufteilen und Verwenden der beiden unterschiedlichen Flanken für unterschiedliche Sätze von Logik kann die Kosten der Vorrichtung erheblich senken. JustJeff ist genau richtig, wenn es um die Verwendung eines Oszillators geht, der ein Vielfaches der Standardtaktraten beträgt. Es kann Hochgeschwindigkeitsübertragungen sehr einfach machen.
Kortuk

2
Sind Sie sich über die Duty-Cycle-Anweisung sicher? 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 selbst moderne PICs einen 4-stufigen Anweisungszyklus haben, weshalb das gesamte Datenblatt alle Fosc / 4 enthält
ajs410

1
@ ajs410 - Der 8085 würde definitiv mehrere Taktzyklen benötigen, um einen Befehl zu vervollständigen. Alle 8-Bit-Mikros aus dieser Zeit (die mir bekannt sind) brauchten mindestens zwei Uhren, um etwas zu tun. Was ich hier meine, ist rein chipintern. Wenn Sie sich Blockdiagramme für diese alten Bestien ansehen, sehen Sie, dass sie einige interne Busse, temporäre Register usw. haben, und ich spekuliere, dass diese möglicherweise beide Kanten verwenden. Alle externen Buszyklen würden zwischen Flanken gleicher Polarität verlaufen.
JustJeff

6

Zu der Zeit, 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 für Programmierer sichtbare Befehlssatzregister als auch interne Mikroarchitektur-Latches) in einer CPU dieser Ära Daten in einem transparenten Gatter-D-Latch oder ähnlichem gespeichert hat . Heutzutage gibt es viele Transistoren auf einem Chip, so dass es einfacher ist, Voll-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 anderen Daten mit der ALU und speichern das Ergebnis in Register A. Dies ist ziemlich einfach, wenn Register A mit einem vollständigen Master-Slave-D-Flip-Flop implementiert ist.

Wenn jedoch Register A ein transparentes Gatter-D-Latch ist, benötigen Sie nicht überlappende Takte. Sie verwenden einen Impuls für einen Takt, um ein Zwischenergebnis irgendwo zu speichern (während Register A seinen Ausgang konstant hält), und dann einen Impuls für einen 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, eine nicht überlappende 2-Phasen-Uhr herzustellen (in jenen Tagen, als die Transistoren knapp waren), war ein kleiner externer Schaltkreis, der einen Eingangstakt aufnimmt und diesen durch zwei teilt.

Mit der Zeit fanden die Leute heraus, wie man immer mehr Transistoren auf einen IC packen kann. Leute, die CPUs entwerfen, integrieren immer mehr Dinge rund um die CPU in einem vollständigen Computersystem auf den CPU-Chip.

Wenn ich zwischen den Zeilen des Wikipedia-Artikels über Taktsignale lese , habe ich den Eindruck, dass die Leute, die den 8085 und den 6502 und andere Chips dieser Zeit entworfen haben, nur wenig mehr Platz hatten als die vorherige Generation integrierter CPUs, und sie entschieden sich für die besten In diesem Raum wurde der kleine externe Stromkreis auf den Chip gesetzt. Aber sie behielten alle Register die gleiche mit einem Gatter versehene D-Verriegelung wie zuvor.

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


Wenn ein Latch niemals länger als ein paar Mikrosekunden dauert, ohne neu geladen zu werden, kann man die Schaltung noch weiter vereinfachen, so dass ein "Latch" nichts anderes ist als ein Einzeltransistor-Durchlass-Gate und ein Inverter.
Supercat

1
Seit ich das Obige geschrieben habe, habe ich mich mit dem Design des 6502 befasst. Viele der internen Busse werden in einer Taktphase bedingungslos hoch angesteuert, und dann kann ein ausgewähltes Register während der anderen Taktphase die entsprechenden Bits auf niedrig setzen. Wenn es beispielsweise fünf Register gibt, die auf den Bus ausgegeben werden können, bedeutet dies, dass der Chip anstelle eines Pull-Up-Bausteins für den Ausgang jedes Registers einfach einen geschalteten Pull-Up-Baustein und zwei in Reihe geschaltete Transistoren für jedes Register verwenden kann gegebenenfalls den Bus runterziehen. Ich würde erwarten, dass der 8085 mit ziemlicher Sicherheit ähnliche Tricks verwendet.
Superkatze

2

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 befinden sich beide auf demselben Speicherchip. Wenn Sie eine Anweisung lesen möchten und diese Anweisung eine Variable aus dem Speicher lädt, sind das zwei Speicherzugriffe. Der meiste Speicher ist jedoch nur ein einziger Port (dh es kann nur ein Lese- oder Schreibvorgang pro Zyklus ausgeführt werden). Wie lesen Sie die Anweisung und Ihre Variable?

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

Einige ältere Chips gingen noch weiter. Wenn Ihr Chip früher über einen adressierbaren 16-Bit-Speicher verfügte, der externe Adressbus jedoch nur 8-Bit-Speicher ist, sind Sie mit dem 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 für einen Befehlszyklus, der mehrere Taktzyklen lang ist. Einer der besten Gründe ist das Pipelining. Dies ist ein Trick, mit dem moderne Prozessoren alle in einem Chip verfügbaren Ausführungseinheiten besser ausnutzen können. Während beispielsweise ein Befehl ausgeführt wird, wird gleichzeitig der nächste abgerufen.


3
Ich glaube nicht, dass das OP fragt, warum Sie einen Befehl auf mehrere Uhren verteilt haben, sondern warum das 8085 so konzipiert ist, dass Sie ihm eine 2X-Uhr zuführen müssen (die dann intern geteilt wird), anstatt nur die beabsichtigte zu nehmen Taktfrequenz direkt.
JustJeff

1
Alles, was Sie über Anweisungen gesagt haben, ist jedoch aktiviert.
JustJeff

1

Intern benötigt der Kern des 8085A einen zweiphasigen Takt. Die interne Logik, die die beiden Taktphasen ableitet, teilt auch den Eingangstakt durch zwei. Wie bereits erwähnt, ist der Grund für die Verwendung eines 6,144-MHz-Eingangstakts die Baudrate. Bei 6 MHz läuft der Chip einwandfrei. Der Chip ist für 3 MHz ausgelegt und erfordert einen 6-MHz-Quarz, arbeitet jedoch zufriedenstellend mit 6,144 MHz, was eine einfachere Baudratenerzeugung ermöglicht Bereitstellung vieler verwendbarer Baudraten). Ich benutze diese archaischen Chips immer noch, um spezielle Funktionen in einigen meiner Roboter auszuführen. Ich takte die Uarts mit einem eigenen Oszillator und die 8085A mit einem 6,4-MHz-Oszillator, der den Chip mit 3,2 MHz betreibt. Die 3. 2MHz teilt sich gut auf, um den 40KHz-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, 63C09er und 63C09er, 68B09er und 68B09er usw., mit denen ich wirklich gerne spiele.


0

Die Uhr ist nichts anderes als ein Moment, in dem ein Ereignis eintreten soll. Jetzt bevorzugen wir keine Pegel-Triggerung in digitalen Schaltkreisen, da bei längerer Zeit eine Wechselwirkung zwischen verschiedenen Schaltkreisen im Mikroprozessor auftreten kann, die zu Kurzschlüssen führt. Also setzen wir auf EDGE TRIGGERING. Jetzt weiß der Mikroprozessor nicht, wann eine Flankentriggerung stattgefunden hat. Es versteht nur 1 oder 0. Ein Flip-Flop muss also immer dann 1 und 0 erzeugen, wenn eine Taktflanke erkannt wird. Somit wird es notwendig, ein Flipflop zu verwenden. Infolgedessen wird die Taktfrequenz durch zwei geteilt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.