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.