In letzter Zeit faszinieren mich asynchrone CPUs , die keine zentrale Uhr haben und stattdessen jedes Modul ein Signal sendet, wenn seine Daten verarbeitet wurden. Ich habe mich jedoch gefragt, woher solche Module eigentlich wissen, wann ihre Ausgabe bereit und stabil ist?
Im folgenden Beispiel einer asynchronen sequentiellen Schaltung kommunizieren einige Module mit einem einfachen Handshake-Protokoll wie folgt:
Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan
Ist es möglich, ein READY-Signal zu senden, wenn der Ausgang eines Moduls stabil ist, ohne die Ausbreitungsverzögerung der Modulschaltung speziell zu steuern?
NEIN.
Wenn nicht, was wäre der einfachste Weg, ein BEREIT-Signal basierend auf der Ausbreitungsverzögerung eines Schaltkreises im ungünstigsten Fall zu verzögern?
Für jedes Modul haben Sie eine angepasste Verzögerungsleitung, die aus einer Reihe von UND-Gattern besteht, die als Puffer eingerichtet sind.
Siehe Bilder unten:
Keine zentrale Uhr bedeutet nicht gar keine Uhr. M1 und M2 müssen nicht wissen, mit welcher Geschwindigkeit sie laufen; Sie müssen wissen, was der andere tut, und ein Protokoll zwischen ihnen definiert haben. Was sie beide tun müssen, ist sicherzustellen, dass sie Daten ordnungsgemäß voneinander übertragen, und dies muss für eine konsistente Datenübertragung synchronisiert erfolgen.
In Ihrem Diagramm haben Sie ein Anforderungs- / Bestätigungsübertragungssystem auf sehr hoher Ebene dargestellt. in der realen Implementierung kann es komplexer sein und Takte zwischen den Geräten enthalten.