Ripple-Zähler versus Synchronzähler – Vor- und Nachteile und Stromverbrauch

Wesentliche Bearbeitung - beachten Sie, dass die Antwort von David Kessner als Antwort auf den ursprünglichen Beitrag geschrieben wurde. Sehen Sie sich den Bearbeitungsverlauf an, um zu sehen, worauf er geantwortet hat

Nach dem, was ich über digitales Design gelesen habe, gibt es eine sehr starke Tendenz zur Verwendung streng synchroner Schaltungen, bei denen die einzigen "sequentiellen" Subsysteme Flip-Flops sind, die sich einen gemeinsamen Takt teilen. Signale, die sich zwischen Taktdomänen kreuzen, erfordern fast immer doppelte Synchronisierer.

Ich habe eine Reihe von Artikeln gesehen, die darauf hindeuten, dass vollständig asynchrone Designs sehr schwierig sind und anfällig für unvorhergesehene Fallstricke sind. Ich kann sicherlich einschätzen, dass es mathematisch unmöglich ist, irgendetwas über den Ausgang absolut zu garantieren, wenn die Eingänge zu irgendeiner Art von Verriegelungselement keine festgelegte Zeitbeziehung haben, und dass es sogar so weit kommt, dass seltsames Verhalten für praktische Zwecke unwahrscheinlich genug ist Dass sie nicht passieren, ist ohne Doppelsynchronisation oft schwierig.

Eine Reihe von Blogs sprechen auch über die Übel von Gated-Clocks und schlagen vor, dass es viel besser ist, einen ungated Clock zusammen mit einem "Latch-Enable"-Signal an einen Latch zu speisen, als den Clock zu gaten. Gated-Clocks erfordern nicht nur große Sorgfalt bei ihrer Implementierung, um "runt"-Taktimpulse zu vermeiden, sondern wenn nicht äußerst darauf geachtet wird, Verzögerungen auszugleichen, müssen Schaltungen, die von separat gated-Clocks betrieben werden, als in ihrer eigenen Clock-Domäne betrachtet werden.

Was ich nicht viel diskutiert gesehen habe, ist die Vorstellung von Schaltungen, die sequentielle Subsysteme verwenden, die nicht alle von demselben Takt getriggert werden, aber innerhalb einer bestimmten Dauer einer Taktflanke immer stabil sind. Wenn man versucht, so etwas wie einen N-Bit-Ereigniszähler zu implementieren, müssen bei vielen Flipflops, die alle von einem gemeinsamen Takt angesteuert werden, mindestens die Gates von 2N Transistoren bei jedem Taktübergang geladen und entladen werden. Wenn man stattdessen eine "Ripple"-Anordnung für die ersten paar Stufen verwenden würde, könnte man die Frequenz der Signale, die die oberen Stufen erreichen, wesentlich reduzieren, wodurch der Stromverbrauch reduziert würde.

Ich habe einige Prozessoren gesehen, die eine asynchrone Preskalarstufe am Eingang eines Zählers aufweisen, aber keiner der Preskalare, die ich gesehen habe, ermöglicht es dem Prozessor, sie zu lesen. Außerdem machen es fast alle Chips, die ich gesehen habe und die solche Vorteiler haben, unmöglich, in den Timer-Wert zu schreiben, ohne den Vorteiler zu löschen. Mein Verdacht ist, dass bei vielen solchen Geräten der Preskalar nicht wirklich den Hauptzähler taktet, sondern stattdessen verwendet wird, um bei einem bestimmten Zyklus der Systemuhr zu bestimmen, ob der Zähler vorgerückt werden soll oder nicht. Während einige dieser Systeme einen Modus bereitstellen, in dem einer der Zähler auf den "vollständig asynchronen" Modus gesetzt werden kann, was einen Betrieb im Ruhezustand ermöglicht,

Es scheint, dass einige dieser Probleme durch die Verwendung eines Graycode-Zählers gemildert werden könnten und dass die Implementierung eines solchen Zählers durch die Verwendung eines "halbsynchronen" Designs, wie oben beschrieben, erleichtert werden könnte. Es ist möglich, einen relativ kompakten und schnellen asynchronen bidirektionalen Graycode-Zähler mit Quadratureingang zu entwerfen, der Metastabilität an beiden Eingängen toleriert, solange der andere stabil ist (während der Zeit, in der ein Eingang metastabil ist, ist ein Ausgang undefiniert, vorausgesetzt, der metastabile Eingang stabilisiert sich bevor der andere Eingang einen Übergang hat, löst sich der Ausgang selbst in den richtigen Zustand auf). Die Ausgänge wären nicht mit einem bestimmten Takt synchron, aber wenn sich die Eingänge an einer bestimmten Taktflanke ändern, wäre die Beziehung zu den Ausgängen vorhersagbar. Hat jemand schon einmal von einer solchen Schaltung gehört?

Das sind gute Fragen, aber das Stackexchange-Format kommt damit nicht gut zurecht. Ich glaube, ich zähle ungefähr 7 Fragen, und ehrlich gesagt sind sie nicht eng miteinander verbunden.
@supercat, ich muss zustimmen, denkst du, du könntest diese Frage auf eine genauere Frage beschränken und andere Fragen stellen, die du bereits sicher hast, und weitere Fragen als Antwort stellen, um sie voranzubringen / ihnen Wurzel zu geben?
@Kortuk: Ich habe das Ding gerade umgeschrieben; Ich bin mir nicht sicher, ob ich den Titel anpassen sollte, da der Fokus eher auf Sync-vs-Async-Schaltungen im Allgemeinen liegt als nur auf Zählern.
@W5VO: Ich habe versucht, es ein wenig neu zu fokussieren, obwohl ich denke, dass es wahrscheinlich noch weiter getrimmt werden könnte.
@supercat, danke, dass du dir die Zeit genommen und Ratschläge gegeben hast.
@supercat - liest sich jetzt besser, danke. Auf jeden Fall ein guter Diskussionspunkt, und die Art von Dingen, an denen ich selbst sehr interessiert bin (FPGA-weise, aber ich würde gerne eines Tages am Design eines ASIC beteiligt sein..) FWIW Ich denke, ein großartiger Ort, um dies zu diskutieren, wäre drüben EDAboard im ASIC- oder PLD-Forum, da habe ich einiges aufgeschnappt. Der EE Times PLD Newsletter (von "Max the Magnificent") ist auch exzellent. Beispiel hier
@Oli Glaser: Danke. Ein verwandter Begriff, über den ich mich gewundert habe, sind die Vor- und Nachteile eines Latch-Elements, das zB bei einer steigenden Taktflanke abtastet und bei einer fallenden Taktflanke ausgibt. Ein solcher Ansatz ist bei Dingen wie SPI üblich, aber ich weiß nichts über die Verwendung solcher Dinge in Chips.

Antworten (1)

Wow, Ihre Frage ist nicht sehr fokussiert und es ist nicht offensichtlich, wonach Sie wirklich fragen. Aber lass mich das mal ausprobieren. Tut mir leid, wenn ich es nicht ganz richtig verstanden habe.

Ripple-Zähler vs. normaler Synchronzähler: Wer sagt, dass Menschen keine Ripple-Zähler verwenden? Die Leute verwenden das, was ihnen zur Verfügung steht und das am besten funktioniert. In FPGAs verwendet niemand einen Ripple-Zähler, weil die Logikblöcke einen Sync-Zähler so viel besser machen als einen Ripple. Wenn Sie jedoch einen benutzerdefinierten Chip entwerfen, kann ein Ripple Counter vorteilhafter sein, wenn es um den Stromverbrauch und die Logikgröße geht. Es würde mich überhaupt nicht überraschen, wenn einige Leute Ripple-Zähler in ihren ASICs verwenden. Sync-Zähler wären immer noch besser für Geschwindigkeit und Einfachheit des Timings.

Grauer Zähler vs. binärer Zähler: Menschen verwenden graue Zähler in ASICs und benutzerdefinierten Chips. In FPGAs, wo Binärzähler schneller sind, werden immer noch Gray-Zähler verwendet, wenn der Zählwert Taktdomänen durchlaufen muss, wie z. B. in FIFOs.

Mehrphasenuhren: Diese werden sicherlich im Design verwendet. Es gibt Gründe, warum die PLLs in FPGAs häufig um 0, 90, 180 und 270 Grad phasenverschobene Versionen der ursprünglichen Takte ausgeben können. Aber wenn die Taktfrequenzen steigen, wird die Verwendung mehrerer Takte aufgrund von Taktversatz und Taktverteilungsproblemen schwieriger. Es ist bei hohen Frequenzen nicht unmöglich, aber es wird einfach nicht so oft gemacht.

Sync vs. Async: Sync-Schaltungen sind nicht nur einfacher zu simulieren, sondern auch einfacher zu entwerfen und einfacher zu garantieren, dass sie korrekt funktionieren. Verifizierungs- und Timing-Analyse-Tools sind mit asynchronen Schaltungen nur schwer bis unmöglich zu verwenden.

MCU Counter Circuit: WISSEN Sie, dass es keine MCUs gibt, die das so machen? Wenn ja, wie konnten Sie das feststellen? Vielleicht sind die Prescaler auf dem Timer Ripple-Zähler. Vielleicht ist der Timer selbst ein Gray-codierter Zähler und das Lesen / Schreiben der Register konvertiert ihn automatisch in / aus Binär. Mein Punkt ist folgender: Die Jungs, die Super-Low-Power-MCUs (wie den MSP430) entwickeln, tun alles, um den Stromverbrauch zu reduzieren. Viele dieser Tricks, wie die Verwendung von Ripple-Zählern und ggf. Gray-Code, sind für Leute wie Sie und mich völlig unsichtbar. Sie können diese Tricks verwenden und tun dies wahrscheinlich auch, plus ein paar hundert andere Tricks, an die Sie noch nicht gedacht haben .

Eine Sache, die Sie nicht erwähnt haben, ist die Verwendung von vollständig asynchronen Schaltungen. Hier endet all Ihr Gerede über Uhren schließlich, wenn es zu seinem logischen Schluss kommt. Es gab Unternehmen, die versuchten, große CPUs zu bauen, die vollständig asynchron sind, darunter eine Gruppe, die versuchte, einen asynchronen ARM auf den Markt zu bringen. Die Vorteile sind erstaunlich: unter anderem extrem niedriger Stromverbrauch, schnellere Verarbeitung und weniger EMI. Aber die Nachteile sind noch erstaunlicher. Der Hauptgrund ist, dass die Komplexität des Designs dieses Chips enorm ist und heute nicht wirtschaftlich ist. Ein sekundäres Problem besteht darin, dass sich die Anzahl der Transistoren im Vergleich zu einem äquivalenten Sync-Chip etwa verdoppelt.

Trotzdem gibt es heute CPUs auf dem Markt, die in einigen ihrer Blöcke asynchrone Logik verwenden, wie die FPU, aber niemand verwendet sie in großem Umfang.

+1 für einen sehr guten Versuch, eine sehr vage und schwierige (Mehrfach-)Frage zu beantworten.
Letzter Punkt zuerst: Ich verstehe, dass vollständig asynchrone Designs nach Möglichkeit vermieden werden sollten, da es immer dann sehr schwierig ist, Garantien für das Verhalten zu geben, wenn eine Verriegelungsschaltung Signale mit unbekannten Zeitbeziehungen kombiniert. Ich denke, mein Hauptinteresse gilt Schaltungen, in denen sich alle Signale als Reaktion auf etwas ändern, das von einer Taktflanke abgeleitet wird, anstatt direkt von der Flanke geändert zu werden. Ein Beispiel für eine solche Schaltung wäre ein asynchroner Graycode-Zähler mit Quadratureingang, der einfacher ist als ein vollsynchroner Grayscale-Zähler.
@supercat Ja, die Leute machen das in ASICs und benutzerdefinierten Chips. Die Dinge, die in Büchern und Artikeln geschrieben und in der Schule gelehrt werden, sind manchmal weit entfernt von dem, was in der Realität getan wird.
Ich weiß, dass Mehrphasentakte in älteren Designs sehr verbreitet waren (ein paar, die ich im Detail studiert habe, sind der MOS 6502, der Atari TIA usw.) und weiterhin in Dingen wie dem PIC verwendet werden. Die Artikel, die ich gelesen habe, scheinen jedoch die Verwendung von flankengesteuerten Flip-Flops für alles zu befürworten, die alle von einer gemeinsamen Uhr ausgeführt werden.
MPU-Zählerschaltungen: Viele CPUs bieten asynchrone Vorteiler für einige ihrer Zähler, aber sie sind begrenzt (siehe Bearbeitung oben). Als Ingenieur für eingebettete Systeme, der etwas über VLSI-Interna weiß und Design-Intuition hat, aber wahrscheinlich nicht genug, um einen Job im VLSI-Design zu bekommen, finde ich es frustrierend, dass viele Chips Hardware für Funktionen ausgeben, die gut in Software emuliert werden könnten. zumindest wenn die Hardware einige andere Features enthielt, die billiger zu implementieren sein sollten. Einer meiner großen Wünsche wäre ein "schlafunabhängiges" Zeitmesssystem, das ...
@supercat Ich glaube, dass 95% der Hardware da draußen nicht mit Blick auf Software entwickelt wurde. Der alte 16550 UART ist ein großartiges Beispiel dafür. Mit ein paar einfachen Anpassungen hätte es SW viel effizienter machen können.
...einfach Zeitintervalle von 1/65536 Sekunde bis hin zu Stunden oder Tagen ohne Rücksicht auf Wachen oder Schlafen. Noch besser wäre ein batteriegestützter Zähler, der jahrelang die Zeit halten könnte. Sehr wenige CPUs scheinen in der Lage zu sein, ein präzises Aufwachen zu ermöglichen; Ich habe noch kein batteriegestütztes Uhrensystem gesehen, das eine solche Präzision ermöglicht. Mir ist nicht ganz klar, warum nur wenige Echtzeituhr-Subsysteme eine nette Art des Lesens mit einer Auflösung von weniger als einer Sekunde bieten, und einige versprechen nicht einmal, dass sie gelesen werden können, ohne eine Zählung fallen zu lassen.
Viele Hardware-Designs scheinen tatsächlich ohne Rücksprache mit Programmierern gemacht worden zu sein. Ich bin ziemlich gut darin, Einschränkungen in Hardwaredesigns zu umgehen, aber das bedeutet nicht, dass ich es gerne mache. Ich würde gerne über dieses Thema plaudern, aber es würde hier mehr als nur ein wenig vom Thema abweichen.