Warum werden Uhren in Computern verwendet?

22

Wie ich weiß, steuert eine Uhr alle logischen Operationen, begrenzt aber auch die Geschwindigkeit eines Computers, da die Gatter warten müssen, bis sich die Uhr je nach Komponente von niedrig nach hoch oder von hoch nach niedrig ändert. Wenn keine Uhr integriert wäre, würden sich die Tore so schnell ändern, wie sie könnten, wann immer der Befehl dazu gegeben wird. Warum würde dies nicht die Geschwindigkeit des Computers erhöhen und warum werden Uhren verwendet?

Skyler
quelle
Sie haben keine Zeit für eine richtige Antwort, aber auf der einfachsten Ebene, so dass alle digitalen Dinge zum Takt desselben Schlagzeugers marschieren. Suchen Sie nach synchron vs. asynchron.
Matt Young
mögliche doppelte Taktsignale in Computern und Maschinen (und diese Frage wurde als keine echte Frage geschlossen ...)
amadeus
Analoge Computer können für einen begrenzten Aufgabenbereich schneller sein als digitale Computer.
Nick Alexeev
1
Sie wissen also, wie spät es ist! (Entschuldigung, konnte nicht widerstehen)
Scott Seidman

Antworten:

32

Uhren werden in Computern aus dem einfachen Grund verwendet, dass die meisten, wenn nicht alle Schaltkreise synchrone sequentielle Logik sind .

In einer synchronen Schaltung erzeugt ein elektronischer Oszillator, der als Takt bezeichnet wird, eine Folge sich wiederholender Impulse, die als Taktsignal bezeichnet werden und an alle Speicherelemente in der Schaltung verteilt werden.

Nun, das mag nicht befriedigend und selbstverständlich erscheinen, würden Sie sich vernünftigerweise fragen: "Warum werden in Computern synchrone Schaltungen verwendet?" Aber das ist auch eine leicht zu beantwortende Frage :

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.

Ein aktives Forschungsgebiet ist das asynchrone Rechnen, bei dem die meisten, wenn nicht alle Schaltungen asynchrone sequentielle Logik sind .

Alfred Centauri
quelle
Das Wikipedia-Stück über asynchrone sequentielle Logik ist ziemlich kurz; Es hätte hilfreich sein können, zwischen Logik zu unterscheiden, die keinen einzelnen Takt hat, aber entweder garantieren kann, dass die Eingänge der Schaltungen keine Race-Bedingungen verursachen, oder im schlimmsten Fall, dass die Ausgänge einer Schaltung, deren Eingang möglicherweise Race-Bedingungen aufweist, keine Race-Bedingungen aufweisen gebraucht.
Supercat
Ich denke, es ist erwähnenswert, dass es einen vollständig asynchronen Computer gab, der von Jacek Karpiński mit dem Namen KAR-65 gebaut wurde. Leider kann ich nichts darüber auf Englisch finden.
Elmo
6

Stellen Sie sich vor, Sie haben eine 8-Bit-Ganzzahl, die für eine Berechnung vom Speicher an eine ALU gesendet wird, und (zumindest für dieses Beispiel), dass die Speicherschaltung die Signale auf den 8 Datenleitungen bereitstellt, bevor die ALU sie benötigt, und dies zu geringfügig unterschiedlichen Zeiten.

Die Verwendung eines Takts hier würde sicherstellen, dass die 8 Datenleitungen den korrekten Wert für die ganze Zahl enthielten, die für einen Taktzyklus dargestellt wird, und dass die ALU diese Daten innerhalb desselben Taktzyklus "sammelt".

Mir ist klar, dass dies wahrscheinlich nicht die beste Beschreibung war, im Wesentlichen ohne eine Uhr, die sicherstellt, dass die Datenkonsistenz viel schwieriger ist, als es eine mögliche Geschwindigkeitssteigerung wert wäre. Sie würden auf viele Probleme mit den Rennbedingungen stoßen.


quelle
6

Eine Schaltung wie eine arithmetische Logikeinheit nimmt einige Zahlen als Eingaben und erzeugt eine Zahl als Ausgabe. Es kann garantiert werden, dass innerhalb einer gewissen Zeitspanne alle Bits des Ausgangs ihren korrekten Endzustand erreicht haben, aber die tatsächliche Zeitspanne, in der die Ausgangsbits gültig werden, kann aufgrund einer Vielzahl von Faktoren erheblich variieren.

Es wäre möglich, eine ALU mit einer "gültigen" Eingabe und einer "gültigen" Ausgabe zu konstruieren und anzugeben, dass die "gültige" Eingabe für eine ausreichende Zeitspanne niedrig ist, bevor eine Berechnung durchgeführt wird, und die Dateneingaben die enthalten Sollwerte, bevor der "gültige" Eingang hoch geht, wird der "gültige" Ausgang nicht hoch, bis die Ausgangsbits tatsächlich korrekt sind. Ein derartiger Entwurf würde wahrscheinlich etwa doppelt so viel Schaltungsaufwand erfordern wie eine herkömmliche ALU [im Grunde müsste verfolgt werden, ob jedes Bit "bekannt" als Null oder "bekannt" als Eins ist; seine "gültige" Ausgabe würde wahr werden, sobald der Zustand jedes Ausgabebits bekannt ist].

Um die Sache noch schlimmer zu machen, ist es nur dann hilfreich, wenn die Teile einer CPU, die schneller laufen könnten, nicht die ganze Zeit darauf warten, dass langsamere Teile aufholen. Um dies zu erreichen, muss eine Logik vorhanden sein, um zu entscheiden, welcher Teil der Maschine zu einem bestimmten Zeitpunkt "voraus" ist, und eine darauf basierende Vorgehensweise auszuwählen. Leider ist eine solche Entscheidung eine der schwierigsten, die die Elektronik zuverlässig treffen kann. Die zuverlässige Entscheidung, welches von zwei Ereignissen zuerst stattfand, ist in der Regel nur dann einfach, wenn garantiert werden kann, dass es nie zu "Close Calls" kommt. Angenommen, ein Speichersequenzer verarbeitet eine Anforderung von der Verarbeitungseinheit 1, und danach steht in der Einheit 1 eine weitere Anforderung an. Wenn die Einheit Nr. 2 eine Anforderung sendet, bevor die erste Anforderung von Nr. 1 abgeschlossen ist, sollte die Speichereinheit dies behandeln; Andernfalls sollte die nächste Anforderung von Einheit 1 verarbeitet werden. Das scheint ein vernünftiges Design zu sein, ist aber überraschend problematisch. Das Problem ist, dass, wenn es einen bestimmten Zeitpunkt gibt, zu dem eine vor diesem Zeitpunkt eingegangene Anfrage sofort verarbeitet wird, und eine danach eingegangene Anfrage warten muss, die erforderliche Zeit zum Bestimmen, ob eine Anfrage die Frist überschritten hat, abgelaufen ist ungefähr umgekehrt proportional zu der Differenz zwischen dem Zeitpunkt des Eingangs der Anfrage und der Frist. Die Zeit, die die Speichereinheit benötigt, um zu bestimmen, dass eine Anforderung von Nummer 2 die Frist um eine Femptosekunde überschritten hat, kann die Zeit, die für die Bearbeitung einer zweiten Anforderung von Nummer 1 erforderlich gewesen wäre, erheblich überschreiten, die Einheit kann sie jedoch nicht bearbeiten Entweder anfordern, bis entschieden wird, welche zuerst bedient werden soll.

Wenn alles von einem gemeinsamen Takt abläuft, muss die Schaltung nicht nur nicht mehr feststellen, wann die Ausgabe einer Berechnung gültig ist, sondern es können auch zeitliche "enge Anrufe" eliminiert werden. Wenn alles im System von einem 100-MHz-Takt ausgeht, sich bis 1 ns nach der Taktflanke kein Signal als Antwort auf einen Takt ändert und alles, was als Antwort auf eine Taktflanke passieren wird, innerhalb von 7 ns erfolgt, dann geschieht alles vor a Eine bestimmte Taktflanke "gewinnt" um mindestens 3 ns, und alles, was erst nach einer Taktflanke passiert, "verliert" um mindestens 1 ns. Das Ermitteln, ob ein Signal vor oder nach der Uhr eine Chance hat, wenn es garantiert nicht "nahe" ist, ist viel einfacher als das Ermitteln, welches von zwei willkürlich zeitgesteuerten Signalen zuerst auftritt.

Superkatze
quelle
4

Digitale Systeme können entweder synchron oder asynchron sein . Bei asynchronen Systemen kann sich die Ausgabe zu einem bestimmten Zeitpunkt ändern, anders als bei synchronen Systemen, bei denen die Ausgabe von der Uhrzeit abhängt .

Die meisten digitalen Systeme sind synchron (obwohl sie einige asynchrone Teile haben können), da das Projekt und die Fehleranalyse einfacher durchgeführt werden können, da sich die Ausgaben nur mit der Uhr ändern können.

Ich habe das so ziemlich kopiert Digital Systems: Principles and Applications, 10th edition by R. J. Tocci et al.

gabrieljcs
quelle
3

Nun, wenn Sie ein synchrones System entwerfen, haben Sie eine Zieltaktrate und Sie entwerfen die Logik, um alle Berechnungen während eines Zyklus innerhalb einer Taktperiode abzuschließen. Dies bedeutet auch, dass Sie einen Sicherheitsspielraum einplanen müssen, um verschiedene Bedingungen zu berücksichtigen, z. B. niedrige Versorgungsspannung, hohe Temperatur und einen "langsamen" Chip. Synchrone Chips sind so konzipiert, dass der längste logische Pfad (langsamste Berechnung) unter all diesen widrigen Bedingungen rechtzeitig beendet wird. Infolgedessen haben Sie, wenn die Bedingungen nicht schrecklich sind, viel mehr Zeit / Spielraum zwischen dem Abschluss der Logik und dem Zwischenspeichern des Ergebnisses durch die nächste Uhr. Da Sie (normalerweise) Ihre Taktfrequenz nicht ändern können, verlieren Sie diese Geschwindigkeit.

Es gibt völlig asynchrone Logikparadigmen, zum Beispiel eine, mit der ich vertraut bin, ist die NULL-Konventionslogik. Mit breiten Strichen kann die Logik erkennen, wann eine Berechnung abgeschlossen ist, und kann effektiv ihre eigenen "Takt" -Signale erzeugen. Auf diese Weise kann die Schaltung so schnell wie möglich betrieben werden und weist einige bescheidene Leistungs- und EMI-Vorteile auf. Leider zahlen Sie eine Strafe für die Asynchronität in Bezug auf die Designdichte sowie die Spitzenleistung. Auch wenn die Softwaretools für den synchronen Entwurf und die Validierung ausgereift sind, ist ein Großteil des Entwurfs und der Validierung für asynchrone Entwürfe noch manuell, was zu einem höheren Aufwand für den Entwurf und die Erstellung eines asynchronen Entwurfs führt.

Dies auch vernachlässigt völlig den Fall , dass Sie manchmal benötigen eine Uhr für eine bestimmte Anwendung eine Zeitreferenz zu sein. Beispielsweise kann Ihre Soundkarte nicht asynchron betrieben werden, da der ADC oder DAC mit einer bestimmten, präzisen Abtastrate aktualisiert werden muss, da sonst das Audio verzerrt wird.

W5VO
quelle
1

Wenn keine Uhr integriert wäre, würden sich die Tore so schnell ändern, wie sie könnten, wann immer der Befehl dazu gegeben wird. Warum würde dies nicht die Geschwindigkeit des Computers erhöhen und warum werden Uhren verwendet?

Einfach ausgedrückt: Weil Menschen keine überintelligenten Wesen sind und Abkürzungen benötigen, um Schaltungen mit Milliardenelementen zu entwerfen.

Wenn unsere Maschinenoberhäupter aufsteigen, werden sie möglicherweise die Uhr los, überwinden verwackelte Kleinigkeiten wie die Herstellung einer taktlosen Schaltung, die trotz Prozessschwankungen herstellbar ist, und profitieren von einigen Geschwindigkeitsgewinnen.

Ein bisschen erweitern: Diskrete, vorhersehbare Dinge lassen sich leichter rational analysieren und entwerfen. Als großer zusätzlicher Vorteil korrigieren sie sich selbst (in diesem Fall korrigiert sich das Timing selbst). Aus diesem Grund setzen wir in erster Linie digitale Logik ein. (In ähnlicher Weise verwenden wir beim Programmieren häufig Ganzzahlen anstelle von Fließkomma-Kontrollstrukturen, vertraute Kontrollstrukturen anstelle von Goto-Spaghetti, und Sprachen mit wenigen, klaren Regeln anstelle von sehr "flexiblen" Sprachen, bei denen Sie nie ganz sicher sind, was passieren wird bis der Code läuft.)

Aleksandr Dubinsky
quelle
Über die Tatsache hinaus, dass die synchrone Logik einfacher zu entwerfen ist, wird ein Computer, der mit einem 10-MHz-Takt betrieben wird, im Allgemeinen so entworfen, dass an jedem Ort festgestellt werden muss, ob Ereignis X vor Y auftritt, eines oder beide Ereignisse verzögert werden Es ist notwendig, eine bestimmte Beziehung zur Hauptuhr zu haben, damit die Ereignisse niemals gleichzeitig stattfinden. Ferner ist es in den wenigen Fällen, in denen die Möglichkeit einer gleichzeitigen Aktion möglich wäre, akzeptabel, eine feste Verzögerung von zwei oder drei Zyklen hinzuzufügen, um eines oder beide der Signale zu einer festen Taktbeziehung zu zwingen.
Supercat
Wenn der Entwurf asynchron wäre, könnte man feststellen, dass 99% der Anweisungen 5 ns, 0,9% 10 ns, 0,09% 30 ns, 0,009% 100 ns, 0,0009% 300 ns, 0,00009% 1 us, 0,000009% 3 us usw. ohne Zufallsprinzip benötigen Feste Garantie, wie lange das System möglicherweise benötigt, um eine Timing-Ambiguität zu beheben. In den meisten Fällen ist eine Leistung, die nicht optimal, aber vorhersehbar ist, besser als eine Leistung, die im Durchschnitt schneller ist, jedoch unvorhersehbare, manchmal schwerwiegende Schwankungen aufweist.
Supercat
@supercat 1) Kann keine Schaltung entworfen werden, bei der niemals gleichzeitige Ereignisse auftreten? (Zumindest wenn die Eingänge regelmäßig genug sind) 2) Kann eine Schaltung nicht so ausgelegt werden, dass es keine Rolle spielt, ob gleichzeitig Ereignisse auftreten?
Aleksandr Dubinsky
Wenn das relative Timing zweier Ereignisse bekannt ist, kann man verhindern, dass sie gleichzeitig auftreten, indem man das eine oder andere verzögert. Je genauer ihr relativer Zeitpunkt bekannt ist, desto weniger Verzögerung ist erforderlich. Wenn das relative Timing nicht bekannt ist, können zwei Ereignisse, die gleichzeitig auftreten können, aufgelöst werden, um anzuzeigen, welche Ereignisse zuerst aufgetreten sind. Um jedoch das Worst-Case-Verhalten zu minimieren, müssen im Best-Case-Verhalten einige ziemlich strenge Kompromisse eingegangen werden. Die Kompromisse, die erforderlich wären, damit ein Computer ohne Uhr funktioniert, wären schlimmer als die Verwendung einer Uhr.
Supercat