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?
22
Antworten:
Uhren werden in Computern aus dem einfachen Grund verwendet, dass die meisten, wenn nicht alle Schaltkreise synchrone sequentielle Logik sind .
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 :
Ein aktives Forschungsgebiet ist das asynchrone Rechnen, bei dem die meisten, wenn nicht alle Schaltungen asynchrone sequentielle Logik sind .
quelle
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
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.
quelle
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.
quelle
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.
quelle
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.)
quelle