Warum brauchen Mikrocontroller eine Uhr?

31

Warum müssen Anweisungen in festgelegten Zeitintervallen (z. B. unter Verwendung einer Uhr) verarbeitet werden? Können sie nicht nacheinander ausgeführt werden - unmittelbar nachdem die vorherige Anweisung abgeschlossen wurde?

Eine Analogie für die Notwendigkeit von Uhren in Mikrocontrollern würde sich als besonders nützlich erweisen.

HERR
quelle
6
Es gibt asynchrone Prozessoren.
Leon Heller
6
Wie würden Sie feststellen, "wann die vorherige Anweisung abgeschlossen ist"? Wenn Sie darüber nachdenken, müssen Sie wissen, wann der "Hat die vorherige Anweisung abgeschlossen?" Die Berechnung war abgeschlossen, und wenn "Hat die" die vorherige Anweisung abgeschlossen hat? "Die Berechnung" ist abgeschlossen, und ... Es ist viel einfacher, einfach "Es dauert 0,4 Nanosekunden, um eine Anweisung abzuschließen" zu sagen.
user253751
4
Logikgatter sagen nicht, wann sie fertig sind. Das Signal ist einfach für einige Zeit unbestimmt, bevor es sich auf einen stabilen Wert einstellt. Im Wesentlichen lässt die Uhr das Design wissen, wann sich die Logik auf einen korrekten Wert festgelegt hat. Fortgeschrittene Strategien wie Mikrobefehle helfen dabei, Maschinenbefehle in kleinere Teile aufzuteilen, sodass ein ADD 4 Uhr-Ticks dauern kann, während der Speicherzugriff Hunderte von Ticks dauern kann.

Antworten:

31

Ein oder zwei veranschaulichende Beispiele können hier hilfreich sein. Sehen Sie sich die folgende hypothetische Schaltung an:

schematisch

simulieren Sie diese Schaltung - Schaltplan erstellt mit CircuitLab

Angenommen, A und B sind beide hoch (1). Der Ausgang des AND ist daher 1, und da beide Eingänge des XOR 1 sind, ist der Ausgang 0.

Logikelemente ändern ihren Status nicht sofort - es gibt eine kleine, aber signifikante Laufzeitverzögerung, da die Änderung der Eingabe behandelt wird. Angenommen, B wird niedrig (0). Das XOR erkennt den neuen Zustand sofort an seinem zweiten Eingang, aber der erste Eingang erkennt immer noch die 'veraltete' 1 vom UND-Gatter. Infolgedessen geht der Ausgang kurz auf High - aber nur bis das Signal durch das UND-Gatter weitergeleitet wird, wodurch beide Eingänge auf Low-Pegel gehen und der Ausgang wieder auf Low-Pegel geht.

Der Störimpuls ist kein gewünschter Teil des Betriebs der Schaltung, aber solche Störimpulse treten immer dann auf, wenn sich die Ausbreitungsgeschwindigkeit durch verschiedene Teile der Schaltung aufgrund des Logikumfangs oder auch nur der Länge der Drähte unterscheidet .

Eine wirklich einfache Möglichkeit, dies zu handhaben, besteht darin, ein flankengetriggertes Flipflop wie folgt auf den Ausgang Ihrer kombinatorischen Logik zu setzen:

schematisch

simulieren Sie diese Schaltung

Jetzt werden alle auftretenden Störungen durch das Flipflop vor dem Rest der Schaltung verborgen, das seinen Zustand nur dann aktualisiert, wenn der Takt von 0 auf 1 geht. Solange das Intervall zwischen ansteigenden Taktflanken lang genug ist, damit sich die Signale vollständig ausbreiten Auf dem Weg durch die kombinatorischen Logikketten sind die Ergebnisse zuverlässig deterministisch und störungsfrei.

Nick Johnson
quelle
6
Vielen Dank, dass Sie die Ausbreitungsverzögerung fast sofort erwähnt haben, das sind wahrscheinlich 99% der Antwort.
1
Ein funktionierendes Beispiel dafür ist an den digitalen E / A-Peripheriegeräten von Microchip (und anderen) Mikrocontrollern zu sehen. Wenn Sie die PORT-Register verwenden, um die Ausgänge (anstelle von LATCH) mit aufeinanderfolgenden Lese-, Änderungs- und Schreibbefehlen zu aktualisieren, können Sie den Status des Pins lesen, während sich der Status ändert. Weitere Informationen finden Sie in Abschnitt 10.2.2 der Dokumentation zu dsPIC33E / 24E .
Evil Dog Pie
Verstehe ich es richtig, dass sequentielle Schaltungen unbedingt getaktet werden müssen, nicht nur, weil sie Störungen bekommen, sondern auch, weil aufgrund dieser Störung einige Flip-Flops möglicherweise den falschen Wert speichern?
Lakesare
20

Ich bin der Meinung, dass viele dieser Antworten nicht genau auf die Kernfrage zutreffen. Der Mikrocontroller hat eine Uhr, einfach weil er sequentielle Logik ausführt (und von dieser gesteuert wird) .

In der Theorie digitaler Schaltkreise ist sequentielle Logik eine Art Logikschaltung, deren Ausgabe nicht nur vom aktuellen Wert ihrer Eingangssignale abhängt, sondern auch von der Folge vergangener Eingaben, der Eingabehistorie. Dies steht im Gegensatz zur kombinatorischen Logik, deren Ausgabe nur von der aktuellen Eingabe abhängt. Das heißt, sequentielle Logik hat einen Zustand (Speicher), kombinatorische Logik nicht. Mit anderen Worten, sequentielle Logik ist kombinatorische Logik mit Speicher.

Auch:

Der Hauptvorteil der synchronen Logik ist ihre Einfachheit. Die Logikgatter, die die Operationen an den Daten ausführen, benötigen eine begrenzte Zeit, um auf Änderungen an ihren Eingaben zu reagieren. Dies wird als Laufzeitverzögerung bezeichnet. Das Intervall zwischen den Taktimpulsen muss lang genug sein, damit alle Logikgatter Zeit haben, auf die Änderungen zu reagieren, und ihre Ausgänge sich auf stabile Logikwerte "einpendeln", bevor der nächste Taktimpuls auftritt. Solange diese Bedingung erfüllt ist (wobei bestimmte andere Details ignoriert werden), ist die Schaltung garantiert stabil und zuverlässig. Dies bestimmt die maximale Betriebsgeschwindigkeit eines Synchronkreises.

Peter
quelle
15

Kurze Antwort: Manager möchten einen einfachen, überprüfbaren Funktionsnachweis, bevor sie sich auf Millionen (oder mehr) Dollar für ein Design festlegen. Aktuelle Tools geben diese Antworten einfach nicht bei asynchronen Designs.

Mikrocomputer und Mikrocontroller verwenden typischerweise ein Taktschema, um die Zeitsteuerung sicherzustellen. Bei allen Prozessecken muss das Timing für alle Spannungs-, Temperatur-, Prozess- usw. Auswirkungen auf die Signalausbreitungsgeschwindigkeit eingehalten werden. Es gibt keine aktuellen logischen Gatter, die sich sofort ändern: Jedes Gatter schaltet abhängig von der Spannung, dem Laufwerk, der Last und der Größe der Geräte, mit denen es hergestellt wird (und natürlich vom Prozessknoten) (Gerätegröße) wird in gemacht und wie schnell DIESER Prozess tatsächlich abläuft - DIESER Durchlauf durch die Fabrik). Um zum "sofortigen" Umschalten zu gelangen, müssten Sie Quantenlogik verwenden, und dies setzt voraus, dass Quantengeräte sofort umschalten können. (Ich bin mir nicht sicher).

Durch die getaktete Logik wird sichergestellt, dass das Timing des gesamten Prozessors mit den erwarteten Spannungs-, Temperatur- und Verarbeitungsvariablen übereinstimmt. Es gibt viele Softwaretools, die bei der Messung dieses Timings helfen. Der Nettoprozess wird als "Timing Closure" bezeichnet. Clocking (und, in meiner Erfahrung ist ) nimmt irgendwo zwischen 1/3 bis 1/2 der Leistung in einem Mikroprozessor verwendet.

Warum also nicht asynchrones Design? Es gibt, wenn überhaupt, nur wenige Timing-Schließwerkzeuge, die diesen Designstil unterstützen. Es gibt, wenn überhaupt, nur wenige automatisierte Orts- und Routentools, die sich mit einem großen asynchronen Entwurf befassen und diesen verwalten können. Wenn nichts anderes festgelegt ist, genehmigen Manager NICHT alles, was keinen einfachen, computergenerierten Funktionsnachweis aufweist.

Der Kommentar, dass asynchrones Design "eine Tonne" Synchronisationssignale erfordert, die "viel mehr Transistoren" erfordern, ignoriert die Kosten für das Leiten und Synchronisieren eines globalen Takts und die Kosten aller Flip-Flops, die das Taktsystem benötigt. Asynchrone Designs sind (oder sollten) kleiner und schneller als ihre getakteten Gegenstücke. (Man nimmt einfach die ONE langsamsten Signalweg und verwendet , dass ein „Ready“ -Signal an den vorhergehenden logisch zu).

Asynchrone Logik ist schneller, weil sie nie auf eine Uhr warten muss, die für einen anderen Block an einer anderen Stelle erweitert werden musste. Dies gilt insbesondere für Register-zu-Logik-zu-Register-Funktionen. Asynchrone Logik weist keine mehrfachen "Einrichtungs-" und "Halte" -Probleme auf, da diese Probleme nur bei den End-Senken-Strukturen (Registern) auftreten, im Gegensatz zu einem Satz von Logik-Pipelines, bei denen Flip-Flops eingesetzt sind, um die logischen Ausbreitungsverzögerungen für die Taktung zu verteilen Grenzen.

Kann es gemacht werden? Sicherlich sogar auf eine Milliarde Transistordesigns. Ist es schwieriger Ja, aber nur, weil es sehr viel komplizierter ist, zu beweisen, dass es über einen gesamten Chip (oder sogar über ein System) funktioniert. Das Timing auf Papier zu bekommen, ist für einen Block oder ein Subsystem relativ direkt. Die Steuerung dieses Timings in einem automatisierten Orts- und Routensystem ist viel schwieriger, da die Werkzeuge NICHT für die Bewältigung des viel größeren potenziellen Satzes von Timing-Einschränkungen eingerichtet sind.

Mikrocontroller verfügen auch über einen potenziell großen Satz anderer Blöcke, die eine Schnittstelle zu (relativ) langsamen externen Signalen bilden, was zu der Komplexität eines Mikroprozessors beiträgt. Das macht das Timing etwas komplizierter, aber nicht viel.

Das Erreichen eines "First-to-Arrival" - "Lock-Out" -Signalmechanismus ist ein Schaltungsentwurfsproblem, und es gibt bekannte Möglichkeiten, damit umzugehen. Die Rennbedingungen sind ein Zeichen von 1). schlechte Designpraxis; oder 2). In den Prozessor eingehende externe Signale. Tatsächlich führt die Taktung eine Signal-gegen-Takt-Rennbedingung ein, die mit Verstößen gegen "Einrichten" und "Halten" zusammenhängt.

Ich persönlich verstehe nicht, wie eine asynchrone Konstruktion in einen Stillstand geraten kann oder in eine andere Racebedingung. Das mag wohl meine Einschränkung sein, aber es sei denn, es passiert bei der Eingabe von Daten in den Prozessor, sollte dies NIEMALS in einem gut konzipierten Logiksystem möglich sein, und selbst dann, da es passieren kann , wenn die Signale eingegeben werden, entwerfen Sie, um damit umzugehen.

(Ich hoffe das hilft).

Alles, was gesagt wurde, wenn Sie das Geld haben ...

John Beck
quelle
Natürlich hängt es von dem Chip ab, den Sie bauen - zum Beispiel ist die Hardware für neuronale Netzwerke tendenziell asynchron, denn das ist eigentlich die einfachste Sache - die Sache, die sie emulieren, ist asynchron . Wir bauen meistens synchrone sequentielle Hardware, weil die Software / Firmware auch meistens synchron und sequentiell ist (insbesondere auf dem "sequentiellen" Teil - asynchroner Code wird immer häufiger verwendet). Tatsächlich ist es viel einfacher, den Kopf um ein sequentielles, synchrones System zu legen, insbesondere wenn die meisten Programmierungen in Sprachen durchgeführt werden, die sequentiellen Code fördern.
Luaan
Ereignisse in der realen Welt geschehen zu unvorhersehbaren Zeiten. Wenn ein Gerät eine Taste hat und einen Codepfad ausführen soll, wenn es "früh genug" gedrückt wird, und einen anderen Codepfad ausführen soll, wenn dies nicht der Fall ist, dann ohne quantenmechanische Einschränkungen zwischen einem Moment, in dem die Taste gedrückt wird Wo ein Knopfdruck früh genug eintreten würde, um den alternativen Codepfad auszulösen, und ein Moment, in dem ein Knopfdruck "zu spät" wäre, würde es einen genauen Moment geben, in dem ein Knopfdruck ein Verhalten "zwischen" den beiden hervorrufen würde (z. B.
Dadurch werden
... aber nicht andere). In Abwesenheit von quantenmechanischen Beschränkungen könnte die Zeit zwischen dem letzten Moment, in dem der Stoß die Verzweigung verursachen würde, und dem ersten Moment, in dem ein Stoß dies sauber unterlassen würde, willkürlich klein gemacht, aber nicht auf Null reduziert werden. Quantenmechanische Grenzwerte können es wahrscheinlich machen, dass ein Tastendruck entweder früher erfolgt, um registriert zu werden, oder zu spät, um fehlerfrei zu werden. Der Nachweis, dass es niemals einen Quantenzustand geben wird, der einen Tastendruck in der tödlichen Zwischenzeit ermöglicht, ist jedoch in der Regel der Fall undurchführbar.
Supercat
Die Verwendung der synchronen Logik vereinfacht die Analyse von Situationen, in denen das System auf ein wirklich asynchrones Ereignis reagieren muss, erheblich, indem sichergestellt wird, dass die Rennbedingungen mit sehr geringer Wahrscheinlichkeit einem sehr kleinen Teil des gesamten Geräts entkommen. Das Analysieren dieses kleinen Teils des Geräts, um sicherzustellen, dass die Wettkampfbedingungen unwahrscheinlich sind, ist wahrscheinlich ein viel leichter zu lösendes Problem als das Ermöglichen, dass Wettkampfbedingungen fast überall auftreten, und der Versuch, ihre Auswirkungen zu analysieren, um zu beweisen, dass sie akzeptabel unwahrscheinlich sind, Probleme zu verursachen.
Supercat
10

Mikrocontroller müssen eine Uhr verwenden, da sie in der Lage sein müssen, auf Ereignisse zu reagieren, die jederzeit auftreten können, einschließlich nahezu gleichzeitig mit anderen externen Ereignissen oder Ereignissen, die von den Controllern selbst generiert werden, und häufig über mehrere Schaltkreise verfügen, die wissen müssen, ob Ein Ereignis X geht einem anderen Ereignis Y voraus. Es spielt möglicherweise keine Rolle, ob alle derartigen Schaltkreise entscheiden, dass X Y vorausgeht, oder alle derartigen Schaltkreise entscheiden, dass X Y nicht vorausgeht, aber es ist oft kritisch, ob einer der Schaltkreise entscheidet, dass X vorausgeht Y, dann müssen alle das tun. Leider ist es schwierig sicherzustellen, dass Schaltkreise innerhalb einer begrenzten Zeit einen garantierten Konsens darüber erreichen, ob X vor Y steht, oder sogar einen Konsens darüber, ob sie einen Konsens erreicht haben oder nicht. Die synchrone Logik kann dabei enorm helfen.

Durch das Hinzufügen einer Uhr zu einer Schaltung kann sichergestellt werden, dass ein Subsystem keine Race-Bedingungen erfährt, sofern sich eine Eingabe in das System nicht in einem sehr kleinen Fenster relativ zur Uhr ändert. Außerdem kann sichergestellt werden, dass die Ausgabe eines Geräts in ein anderes Gerät eingespeist wird ändert sich die Ausgabe des ersten Geräts nicht im kritischen Fenster des zweiten Geräts, es sei denn, die Eingabe in das erste Gerät ändert sich in einem noch kleineren kritischen Fenster. Das Hinzufügen eines anderen Geräts vor diesem ersten Gerät stellt sicher, dass sich die Eingabe für das erste Gerät in diesem kleinen Fenster nicht ändert, es sei denn, die Eingabe für das neue Gerät ändert sich in einem wirklich sehr kleinen Fenster. Aus praktischer Sicht, es sei denn, man versucht absichtlich, ein Konsensversagen zu verursachen,

Es ist sicherlich möglich, vollständig asynchrone Systeme zu entwerfen, die "so schnell wie möglich" laufen, aber wenn ein System nicht extrem einfach ist, ist es schwer zu vermeiden, dass ein Design durch eine Rennbedingung in Mitleidenschaft gezogen wird. Während es Möglichkeiten gibt, Wettkampfbedingungen zu lösen, ohne dass Uhren erforderlich sind, können Wettkampfbedingungen häufig viel schneller und einfacher mit Uhren gelöst werden, als dies ohne Uhren der Fall wäre. Obwohl asynchrone Logik häufig in der Lage ist, Rennbedingungen schneller als getaktete Logik aufzulösen, stellen die Situationen, in denen dies nicht möglich ist, ein großes Problem dar, insbesondere angesichts der Schwierigkeit, dass Teile eines Systems einen Konsens darüber erzielen, ob sie einen Konsens erreicht haben oder nicht. Ein System, das durchgehend eine Million Anweisungen pro Abschnitt ausführen kann, ist im Allgemeinen nützlicher als ein System, das manchmal vier Millionen Anweisungen pro Sekunde ausführt, aber möglicherweise aufgrund von Rennbedingungen für Millisekunden (oder länger) zu einem Zeitpunkt blockiert.

Superkatze
quelle
Es ist erwähnenswert, dass die Zustände, über die entschieden wird, ebenfalls interne Zustände sein können - beispielsweise das Ergebnis einer arithmetischen Operation. Verzögerungen aufgrund der Leitungslänge können dazu führen, dass ein Teil der MCU das Ergebnis sieht - und, ohne dass eine Uhr darauf einwirkt - vor anderen Teilen.
Nick Johnson
@NickJohnson: Wenn die Reihenfolge, in der Operationen ausgeführt werden, niemals von Dingen abhängt, die noch nicht berechnet wurden, können diese Probleme problemlos behoben werden, wenn jeder Abschnitt wie eine ALU über "gültige" Eingaben und eine "gültige" Ausgabe und Dinge verfügt kann in deterministischer Reihenfolge angeordnet werden. Wenn die Räder abfallen, hängt die Reihenfolge, in der die Vorgänge ausgeführt werden, vom Zeitpunkt ab (z. B. wenn mehrere parallele Vorgänge einen gemeinsam genutzten Speicherbus verwenden müssen und zwei von ihnen nahezu simultane Anforderungen ausgeben, von denen eine Entscheidung getroffen wird) sollte zuerst gehen ...
Supercat
... und worauf man warten sollte, kann unlösbar sein. Wenn man im Voraus entscheidet, welches Gerät zuerst eingesetzt wird, können solche Probleme vermieden werden. Wenn sich jedoch herausstellt, dass das zuerst eingesetzte Gerät erst lange nach dem anderen betriebsbereit ist, kann die Leistung erheblich beeinträchtigt werden .
Supercat
Aus diesem Grund ist es so schwierig, in den Weltraum zu gelangen, dass sich die Wahrscheinlichkeiten ungünstig ändern.
Magic Smoke
6

MCUs sind nur ein sehr komplexes Beispiel für eine synchrone sequentielle Logikschaltung. Die einfachste Form ist wahrscheinlich das getaktete D-Flip-Flop (D-FF), dh ein synchrones 1-Bit-Speicherelement.

Es gibt asynchrone Speicherelemente, z. B. den D-Latch, der (gewissermaßen) das asynchrone Äquivalent des D-FF ist. Eine MCU ist nichts weiter als ein Haufen Millionen solcher grundlegenden Speicherelemente (D-FF), die mit Tonnen von Logikgattern zusammengeklebt sind (ich bin zu stark vereinfacht).

Kommen wir nun zum Punkt: Warum verwenden MCUs intern D-FFs anstelle von D-Latches als Speicherelemente? Im Wesentlichen geht es um Zuverlässigkeit und einfache Konstruktion: D-Latches reagieren, sobald sich ihre Eingänge ändern und ihre Ausgänge so schnell wie möglich aktualisiert werden. Dies ermöglicht unangenehme unerwünschte Interaktionen zwischen verschiedenen Teilen einer Logikschaltung (unbeabsichtigte Rückkopplungsschleifen und Rennen). Das Entwerfen einer komplexen sequentiellen Schaltung unter Verwendung asynchroner Bausteine ​​ist von Natur aus schwieriger und fehleranfälliger. Synchrone Schaltungen vermeiden solche Fallen, indem sie den Betrieb der Bausteine ​​auf die Zeitpunkte beschränken, zu denen die Taktflanken erkannt werden. Wenn die Flanke ankommt, erfasst eine synchrone Logikschaltung die Daten an ihren Eingängen, aktualisiert jedoch ihre Ausgänge noch nicht. Sobald die Eingänge erfasst sind, werden die Ausgänge aktualisiert. Dies vermeidet das Risiko, dass ein Ausgangssignal an einen Eingang zurückgeführt wird, der nicht vollständig erfasst wurde, und dass die Dinge durcheinander gebracht werden (einfach gesagt).

Diese Strategie der "Entkopplung" der Erfassung von Eingabedaten von der Aktualisierung der Ausgaben ermöglicht einfachere Entwurfstechniken, die sich bei gegebenem Entwurfsaufwand in komplexeren Systemen niederschlagen.

Lorenzo Donati unterstützt Monica
quelle
5

Was Sie beschreiben, heißt asynchrone Logik . Es kann funktionieren und ist dabei oft schneller und verbraucht weniger Strom als synchrone (getaktete) Logik. Leider weist die asynchrone Logik einige Probleme auf, die eine breite Verwendung verhindern. Das wichtigste, was ich sehe, ist, dass viel mehr Transistoren für die Implementierung erforderlich sind, da Sie eine Menge unabhängiger Synchronisationssignale benötigen. (Mikrocontroller leisten viel parallele Arbeit, genau wie CPUs.) Dies wird die Kosten in die Höhe treiben. Der Mangel an guten Designwerkzeugen ist ein großes Hindernis.

Mikrocontroller benötigen wahrscheinlich immer Uhren, da ihre Peripheriegeräte normalerweise Zeit messen müssen. Timer und PWMs arbeiten in festen Zeitintervallen, die ADC-Abtastraten wirken sich auf die Bandbreite aus, und asynchrone Kommunikationsprotokolle wie CAN und USB benötigen Referenztakte für die Taktwiederherstellung. Wir wollen normalerweise, dass CPUs so schnell wie möglich laufen, aber das ist bei anderen digitalen Systemen nicht immer der Fall.

Adam Haun
quelle
3

Eigentlich sehen Sie die MCU als eine komplette Einheit, aber die Wahrheit ist, dass sie selbst aus verschiedenen Gattern und TTL- und RTL-Logik besteht, oft FF-Array, die alle das Taktsignal einzeln benötigen.

Um genauer zu sein, überlegen Sie sich einfach, auf eine Adresse zuzugreifen Aus dem Speicher kann diese einfache Aufgabe selbst mehrere Operationen umfassen, wie das Bereitstellen des BUS für die Datenleitungen und die Adressleitungen.
Der beste Weg , zu sagen, die Anweisung selbst tritt in kleinen Einheiten von Operation , die Taktzyklen erfordern, werden diese für die kombinierten Maschinenzyklen , die für verschiedene MCU Eigenschaften wie Geschwindigkeit Konto (** in komplizierten MCUs FLOPS), Schlauchlining usw.

Antwort auf OP's Kommentar

Um genau zu sein, ich gebe Ihnen ein Beispiel, es gibt einen Chip namens ALE(Address Latch Enable) Normalerweise verwenden wir zum Multiplexen des unteren Adressbusses zum Übertragen von Adressen und Daten auf denselben Pins einen Oszillator (der Intel 8051 verwendet einen lokalen Oszillator mit 11,059 MHz als Takt), um die Adresse und dann die Daten abzurufen.

Da Sie vielleicht wissen, dass grundlegende Teile der MCU die CPU, die ALU und das interne Register sind, und so weiter, sendet die CPU (die s / g steuert) die Adresse im Fall von 8051 an alle Adreßstifte 16, dies geschieht zum Zeitpunkt T1 und danach bei der adresse wird die entsprechende matrix des kondensatorspeichers (ladung als signal) ( * memory mapping * ) aktiviert und ausgewählt.

Nach der Auswahl wird das ALE-Signal aktiviert, dh der ALE-Pin wird beim nächsten Takt auf "high" gesetzt, beispielsweise T2 ( normalerweise ein High-Signal, das sich jedoch gemäß der Auslegung der Verarbeitungseinheit ändert ). Danach verhalten sich die Busse mit der niedrigeren Adresse wie Datenleitungen, und Daten werden geschrieben oder gelesen (abhängig von der Ausgabe am RD / WR-Pin der MCU).
Sie können deutlich sehen, dass alle Ereignisse zeitlich aufeinander folgen

Was würde passieren, wenn wir keine Clock verwenden ? Dann müssen wir die asynchrone Taktmethode ASQC verwenden. Dies würde dann jedes Gate von dem anderen abhängig machen und zu Hardwarefehlern führen Zeit, um die Aufgabe abzuschließen.
Es ist also etwas Unerwünschtes

Mamba
quelle
Das macht Sinn. Aber warum brauchen diese verschiedenen Fächer der MCU das Taktsignal, um zu funktionieren? Was würde theoretisch passieren, wenn sie keine Uhr benutzen würden?
MR
1
@Martin, Logikgatter ändern ihren Zustand sofort, wenn sich ihr Eingang ändert. Getaktete sequentielle Logik wertet ihre Eingänge nur während eines Clock-Ereignisses aus. Dies ist das Grundprinzip, das digitale Speicherschaltungen ansteuert. Es gibt uns die Möglichkeit, Daten mit absoluter Kontrolle selektiv von einem Ort an einen anderen zu verschieben, was die Erstellung von Allzweckhardware ermöglicht, die über softaware programmiert werden kann - also alles.
Sean Boddy
3
@SeanBoddy: Logikgatter haben nicht sofort den Zufallsstatus, es gibt eine kurze Verzögerung, die auf einem Oszilloskop angezeigt werden kann. Wenn wir keine Uhr verwenden, können die unterschiedlichen Timings zwischen den Komponenten zu Rennbedingungen führen, die zu falschen Ergebnissen führen.
BlueRaja - Danny Pflughoeft
@BlueRaja - na ja, gute Gummibärchen, wie wäre es damit. Vielleicht gehe ich 4 Jahre Leistungselektroniknotizen und 8 Jahre Marinetraining durch, um herauszufinden, wo ich diese eine Sache verpasst habe.
Sean Boddy
2

Das grundlegende Problem, das eine Uhr löst, besteht darin, dass Transistoren keine wirklich digitalen Geräte sind: Sie verwenden analoge Spannungspegel an den Eingängen, um den Ausgang zu bestimmen, und benötigen eine begrenzte Zeit, um den Zustand zu ändern. Wenn Sie nicht, wie in einer anderen Antwort erwähnt, in Quantengeräte geraten, wird es einen Zeitraum geben, in dem der Eingang von einem Zustand in einen anderen übergeht. Die dafür erforderliche Zeit hängt von der kapazitiven Belastung ab, die von Gerät zu Gerät unterschiedlich ist. Dies bedeutet, dass die verschiedenen Transistoren, aus denen jedes Logikgatter besteht, zu geringfügig unterschiedlichen Zeiten ansprechen. Die Uhr wird verwendet, um die Ausgänge der Komponentengeräte zu "verriegeln", sobald sie sich alle stabilisiert haben.

Betrachten Sie als Analogie die SPI-Kommunikationstransportschicht (Serial Peripheral Interface). Eine typische Implementierung verwendet drei Zeilen: Dateneingang, Datenausgang und Takt. Um ein Byte über diese Transportschicht zu senden, setzt der Master seine Datenausgangsleitung und bestätigt die Taktleitung, um anzuzeigen, dass die Datenausgangsleitung einen gültigen Wert hat. Das Slave-Gerät tastet seine Dateneingangsleitung nur ab, wenn es durch das Taktsignal dazu aufgefordert wird. Wenn es kein Taktsignal gäbe, wie würde der Slave wissen, wann er die Data In-Leitung abtasten soll? Es kann vor dem Setzen der Leitung durch den Master oder während des Übergangs zwischen den Zuständen abgetastet werden. Asynchrone Protokolle wie CAN, RS485, RS422, RS232 usw. lösen dies durch Verwendung einer vordefinierten Abtastzeit, einer festen Bitrate und (Overhead-) Framing-Bits.

Mit anderen Worten, es ist eine Art allgemeines Wissen erforderlich, um festzustellen, wann alle Transistoren in einem Satz von Gattern ihren Endzustand erreicht haben und der Befehl vollständig ist. In dem im obigen Link angegebenen (100 blaue Augen) Puzzle, das in dieser Frage zu Maths Stack Exchange ausführlich erläutert wurde , fungiert das "Orakel" als Uhr für die Menschen auf der Insel.

Schlechter Hundekuchen
quelle