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
Ich würde ein asynchrones Zurücksetzen aus einigen Gründen (in keiner bestimmten Reihenfolge) einem synchronen Zurücksetzen vorziehen:
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.
quelle
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.
quelle
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).
quelle
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.
quelle