Zurücksetzen: synchron vs. asynchron


15

Ich habe jahrelang mit fpgas gearbeitet und immer synchrone Resets für alle Teile (die es brauchen) meiner Schaltkreise verwendet. Es hilft der Schaltung, bei einem gegebenen Taktzyklus global zurückgesetzt zu werden.

Mir wurde jedoch gesagt, dass in ASIC-Schaltkreisen die Leute dazu neigen, überall asynchrones Zurücksetzen zu verwenden. Ich frage mich, warum und ob es bei einigen FPGA-Designs auch so ist. Ich würde gerne professionelle Meinungen hören.

Vielen Dank

Antworten:


11

Es scheint eine Menge Ansichten zu diesem Thema zu geben.
Asynchrone Behauptung, synchrone Behauptung wird als gute Praxis bezeichnet. Dies vermeidet das Problem, dass die Uhr bei synchroner Bestätigung nicht läuft (oder zu langsam läuft, um das Rücksetzsignal zu erfassen), und mögliche Metastabilität bei asynchroner Deaktivierung.

Sie würden einen Rücksetzsynchronisierer (zwei FFs) verwenden, bei dem die Ausgabe mit den übrigen Konstruktionsrücksetzungen verknüpft ist:

Zurücksetzen


Einige Diskussionen: Async und Sync Reset
Letters On Sync vs. Async Resets


Wie sind die Anforderungen an die Einricht- / Haltezeit zwischen der Freigabe des Rücksetzsignals eines Latchs und seiner Uhr mit denen für die Dateneingabe zu vergleichen? Ich würde mich wohler fühlen, wenn die Latches im System das Ende des Rücksetzsignals an der inaktiven Taktflanke sehen würden. Würde die Freigabe eines asynchronen Resets bei einer aktiven Taktflanke garantiert nicht den Zyklus beeinflussen, in dem es auftritt?
Supercat

Nein, die asynchrone Freigabe des Zurücksetzens ist aufgrund der erforderlichen Wiederherstellungszeit für das Zurücksetzen (z. B. Einrichten / Halten) nicht unbedingt sauber. Aus diesem Grund würden Sie den Zurücksetzvorgang synchron freigeben.
Oli Glaser

Meine Frage ist, ob es völlig koscher ist, wenn ein Latch1 das Rücksetzsignal freigibt, das Latch2 an derselben Taktflanke speist, wie Latch2 es verwenden würde, dh ob die minimale Laufzeit vom Takt des Latch1 zum Ausgang die Halteanforderung für den Rücksetzeingang des Latch2 erfüllt. BTW, was haltet ihr von meiner Antwort oben? Die Schaltung, die Sie gezeichnet haben, bietet wenig Immunität gegen Runt-Impulse auf der Reset-Leitung, wenn eine nahezu vollständige Immunität möglich sein sollte.
Supercat

Bei weiterer Überlegung könnte man durch Hinzufügen eines dritten Signalspeichers einen Schutz vor Runt-Impulsen hinzufügen und sein Async-Rücksetzsignal eine störimpulsunterdrückte Version des Signals sein, das den ersten beiden zugeführt wird, so dass ein Signal, das den dritten Signalspeicher asynchron stört, wäre garantiert, um die ersten beiden sauber zurückzusetzen. Ein Nebenimpuls am Rücksetzeingang kann dazu führen, dass die Hauptrücksetzleitung im Chip einen Nebenimpuls erhält. Wenn jedoch ein solcher Impuls auftritt, folgt ein synchroner Rücksetzimpuls.
Supercat

Entschuldigung, ich denke ich verstehe was du jetzt meinst. Wenn Sie die Ausgabe von der zweiten Verriegelung in der Synchronisiereinrichtung für das Zurücksetzen des System-FFs meinen, ist meines Wissens nach die Wiederherstellungszeit für das Zurücksetzen in der Regel kürzer als die Zeit für das Einrichten der Daten für denselben FF, daher sollte dies in Ordnung sein. Ich stimme den Runt-Impulsen zu, sie bieten denen keine Immunität, ohne dass Sie vorschlagen, dass sie implementiert werden.
Oli Glaser

7

Ich würde ein asynchrones Zurücksetzen aus einigen Gründen (in keiner bestimmten Reihenfolge) einem synchronen Zurücksetzen vorziehen:

  • Das Hinzufügen einer asynchronen Setz- oder Rücksetzfunktion zu einem Flip-Flop führt aufgrund der Integration der Logik in eine einzelne Zelle wahrscheinlich zu einem kleineren Entwurf (im Vergleich zu einem nicht rücksetzbaren Flip-Flop mit einem UND-Gatter am Eingang).
  • Weniger Tore führen zu weniger überlasteten Kabeln / Orten und Wegen
  • Das Zurücksetzen des Chips ist einfacher / einfacher (benutzerfreundlicher / testfreundlicher)
  • Das asynchrone Einstellen des Rücksetzpfads vereinfacht die Partitionierung des Rücksetzsignals für die statische Zeitanalyse
  • Ein synchrones Zurücksetzen würde dem kritischen Pfad für den Datenfluss zusätzliche Logik hinzufügen und es schwieriger machen, die Anforderungen für das Einrichten und Halten zu erfüllen
  • Während ein FPGA über eine beliebige Logikfunktion mit 4 bis 6 Eingängen verfügt, "zahlen" Sie für jeden Eingang in ein Gate eines ASIC (mehr Eingänge = größeres Gate; komplexe Funktionen = mehrere Gates)

Letztendlich halte ich keines dieser Probleme für Show-Stopper, aber sie würden definitiv zu einer starken Präferenz für asynchrones Zurücksetzen auf ASICs beitragen.


2
Eine Gefahr bei der Verwendung von asynchronen Resets in der internen Logik besteht darin, dass ein Runt-Impuls am Reset-Eingang jede Art von Chaos anrichten kann. Wenn eine Schaltung asynchron zurückgesetzt werden soll, sollte die Eingangsschaltung so ausgelegt werden, dass sichergestellt ist, dass jeder Rücksetzimpuls, der ausreicht, um möglicherweise einen asynchronen Reset zum Erreichen der internen Schaltung auszulösen, auch dazu führt es soll ein synchroner Reset erfolgen.
Supercat

4

Das asynchrone Zurücksetzen mit synchroner Deaktivierung funktioniert sehr gut. Wie oben erwähnt, sind asynchrone Reset-Flops kleiner und erfordern keinen aktiven Takt, um das Zurücksetzen zu gewährleisten. Sie können also einen Teil mit nur Strom und einem einzigen fest verdrahteten Stift oder Stromversorgungsstecker zum Zurücksetzen zwingen (normalerweise ein bekannter Zustand mit niedrigem Stromverbrauch). beim Zurücksetzen.

Wenn Sie sich wirklich damit auseinandersetzen möchten, lesen Sie vielleicht Cummings Artikel darüber, insbesondere:

http://www.sunburst-design.com/papers/CummingsSNUG2003Boston_Resets.pdf

Prost.


Ein Problem, das Mr. Cummings in seiner Arbeit vermisst, ist, dass Störimpulsdetektoren zwar möglicherweise Runt-Impulse unterdrücken, aber auch legitime Impulse in Runt-Impulse umwandeln können. Dies hat zur Folge, dass ein Impuls, der genau die richtige Länge hat, den Systemzustand willkürlich beeinträchtigen kann, ohne einen ordnungsgemäßen Reset zu verursachen. Da es sehr schwierig ist Metastabilität in allen Fällen ohne Doppel Synchronisation zu vermeiden, würde ich vorschlagen , zwei Asynchron-Capture - Schaltungen aufweisen, von denen eine ein ‚schärferen‘ Glitch-Erkennung Kriterium, und dann ...
supercat

... ordnen Sie die Dinge so an, dass ein oder zwei Zyklen später durch einen kurzen Störimpuls ein Reset ausgelöst wird oder nicht. Ein ausreichend langer Impuls führt jedoch zu einem sofortigen Reset. Auch wenn die asynchronen Rücksetzeingänge von Flip-Flops die Synthese in einigen Topologien unterstützen, bedeutet dies nicht, dass sie asynchron verwendet werden müssen. Es kann hilfreich sein, die meisten internen Rücksetzsignale mit der Uhr zu synchronisieren, selbst wenn die Eingänge für "asynchrones Rücksetzen" an den Latches angesteuert werden.
Supercat

Cummings sagt, Glitch-Filter "sind hässlich". Ich habe noch nie einen in den ICs gesehen, an denen ich gearbeitet habe. Wir neigen dazu, Schmitt-Trigger an allen Eingabefeldzellen zu verwenden, um diese Probleme zu vermeiden, und die von mir verwendeten Einschalt-Resets werden auf ähnliche Weise bereinigt. Übrigens, in welchen Fällen hätten Sie kurze Impulse auf einer Reset-Leitung? Ich habe dies in einigen Scan-Testszenarien gesehen, aber sie liegen immer noch in der Größenordnung eines langen Taktzyklus und nicht zielgerichteter kurzer Impulse. Bei Ihrem letzten Kommentar muss die Deaktivierung des Zurücksetzens mit der Uhr synchronisiert werden, um S / H-Verstöße beim Zurücksetzen zu vermeiden und sicherzustellen, dass alle Flops das Zurücksetzen an derselben Flanke beenden.
mixed_signal_old

Glitch-Filter sind häufig hilfreich, um zu bestimmen, welche Eingabetypen Metastabilität verursachen können, sie beseitigen jedoch nicht die metastabilen Zustände. Das Ziel mit einem Glitch-Filter sollte es sein, sicherzustellen, dass sich alle möglicherweise auftretenden metastabilen Zustände in Situationen befinden, die nicht von Belang sind. Manchmal muss ein Gerät in der Lage sein, ein anderes angeschlossenes Gerät zurückzusetzen. Wenn die Rücksetzleitung nicht doppelt synchronisiert ist, besteht die Gefahr, dass Impulse von nahegelegenen ESD-Ereignissen und anderen derartigen Unannehmlichkeiten ausgehen.
Supercat

Was den letzten Punkt betrifft, habe ich lediglich gesagt, dass sogar einer ein Design auf Hardware synthetisiert, das "freie" asynchrone Rücksetzeingänge auf Flip-Flops bietet, was nicht bedeutet, dass man das Signal auf beiden nicht vollständig mit der Hauptuhr synchronisieren kann Behauptung und Freilassung. Nach außen gerichtete Signale müssen möglicherweise asynchron auf einen Rücksetzeingang reagieren, dies bedeutet jedoch nicht, dass alle Latches asynchron zurückgesetzt werden müssen. Um inkonsistente Zustände zu vermeiden, kann es in der Tat nützlich sein, nur alle bis auf zwei Latches in der eigenen Konstruktion synchron zu haben.
Supercat

2

Ein anderer Ansatz, der noch sicherer zu sein scheint als der Ansatz "Async Assert / Sync Release", wäre ein asynchroner Reset-Detektor (ähnlich wie an anderer Stelle beschrieben, mit asynchronem "Assert" und synchronem "Release"), der jedoch die Ausgabe von hat Dieses Gate steuert alle nach außen gerichteten E / A-Geräte an, ohne dass asynchron etwas zurückgesetzt wird (außer dem Latch im Detektor selbst). Wenn man zwei asynchrone Rücksetzdetektoren verwendet, einen für E / A-Leitungen und einen zur Speisung des synchronen Rücksetzdetektors, und wenn man den einen für E / A-Leitungen so auslegt, dass er nur durch Rücksetzimpulse ausgelöst wird, die solide genug sind, um zuverlässig zu sein Wenn Sie den Hauptdetektor auslösen, kann es vorkommen, dass die Ausgänge nicht einmal fehlerhaft sind, wenn die CPU nicht zurückgesetzt wird. Beachten Sie, dass in diesem Fall ein Reset-Impuls mit zulässiger Länge die Ausgänge asynchron zurücksetzt.

Eine andere zu berücksichtigende Sache ist, dass Systeme oft einige Register haben, von denen nicht angenommen wird, dass sie von einem Reset betroffen sind. Wenn ein asynchroner Reset die Schaltung treffen könnte, die in diese Register schreibt, könnte ein Reset-Impuls, der zum falschen Zeitpunkt eintrifft, diese Register blockieren, selbst wenn es sich um einen sauberen (nicht unrunden) Impuls handelt. Wenn beispielsweise der Code versucht, auf die Adresse 1111 zu schreiben, und ein Async-Reset, der unmittelbar vor dem Eintreffen eines Taktimpulses eintrifft, einen der Adreßzwischenspeicher auf Null zwingt, sobald der Taktimpuls eintrifft, kann dies zu einem fehlerhaften Schreiben auf die Adresse 1110 führen Man könnte mehrere interne Rücksetzleitungen mit kombinatorischen Verzögerungen verwenden, um sicherzustellen, dass die Registerschreibvorgänge deaktiviert wurden, bevor die Adresse blockiert wurde, wobei die synchrone interne Rücksetzlogik das Problem insgesamt vermeidet.

Übrigens, hier ist eine Schaltung, die das Konzept veranschaulicht. In der Nähe der unteren linken Ecke befinden sich zwei Logikeingänge zum Zurücksetzen. Einer wird einen "sauberen" Rücksetzimpuls erzeugen, und der andere wird einen wirklich kniffligen erzeugen. Die gelbe LED zeigt an, dass das Hauptsystem zurückgesetzt wurde. Die Cyan-LED zeigt die E / A-Aktivierung an. Wenn Sie einen sauberen Reset durchführen, werden die Ausgänge sofort zurückgesetzt. Wenn Sie einen icky-Reset ausführen, werden die Ausgänge entweder verzögert zurückgesetzt oder sie bleiben unverändert (im Simulator kann der Fall "Lassen Sie sie unverändert" nicht verursacht werden).


Ich denke, das klingt nach einer guten Idee. so viele Graustufen mit scheinbar einfachen Dingen wie Reset.
Oli Glaser

0

Als erfahrener Ingenieur ( 3 Jahre Erfahrung mit FPGA-Design und eingebetteten Systemen ) möchte ich Ihnen mitteilen, dass Sie das Datenblatt und die Bedienungsanleitung des FPGA überprüfen müssen. Es ist keine einfache Antwort.

Sie müssen Ihre Design-FITs auf den von Ihnen gewählten FPGA-Typ einstellen . Einige FPGAs haben FlipFlops , die für Async Reset entworfen wurden, einige für Sync Reset ausgelegt sind.

Sie müssen im FPGA-Benutzerhandbuch nachsehen, welche Art von FlipFlops Sie haben.

Der Implementierer / Mapper wählt dedizierte Routen für Ihr Zurücksetzen ( Code kann mit höheren Frequenzen ausgeführt werden und nimmt weniger Platz in Anspruch ), wenn Sie Ihren Code mit dem FPGA-Primitivtyp abgleichen .

Ihr Design funktioniert in JEDEM Fall , aber manchmal tut der FPGA-Implementierer alles , um Ihre Logik zum Laufen zu bringen ( fügt mehr Logik hinzu ), aber dies führt zu einer niedrigeren Maximalfrequenz und / oder mehr FPGA-Ressourcen.

Beispiel: Getestet mit ZYNQ von Xilinx ( FPGA ist für synchronisiertes Zurücksetzen ausgelegt - siehe Benutzerhandbuch für Grundelemente ). Durch Ändern des Rücksetzens von asynchron auf synchron ging die maximale stabile Frequenz von 220 MHz auf 258 MHz über, und so habe ich meinen Frequenzspielraum überschritten.

Ich könnte auch hinzufügen, dass der Implementierer nicht weiß, was ein Takt- und Rücksetzsignal ist. Es weist den Signalen Flip-Flop-Pins nach ORDER und nicht nach Namen zu. In einigen FPGAs wählt der Implementierer das erste Signal nach "process () begin" in VHDL als Takt, in einigen als Reset, je nachdem, auf welches FPGA der Implementierer eingestellt ist.


Ich bin mit Ihrer Aussage nicht einverstanden, dass "der Implementierer nicht weiß, was ein Takt- und Rücksetzsignal ist". Die Synthesewerkzeuge schließen daraus, welche Uhr die Uhr ist und welche durch ihre Verwendung zurückgesetzt wird. Das Taktsignal wird mit einer Flankenspezifikation verwendet, der Reset nicht. Darüber hinaus kann jedes Flip-Flop mit einer synchronen Rücksetzspezifikation verwendet werden. Wie Sie gesehen haben, führt dies häufig zu schnelleren kritischen Pfaden.
Joe Hass
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.