Hallo!
Wir haben ein Stück Hardware auf einem Cyclone-FPGA, das immer laufen
soll und niemals während des Betriebs neu initialisiert (reset) werden
darf.
Mein Kollege meint nun, dass man deshalb beim VHDL-Design auf sämtliche
Reset-Zweige verzichten kann. Ich bin aber nicht der Meinung, da ja in
einem FPGA das Reset-Netzwerk sowieso verfügbar ist und deshalb
Ressourcen verschwendet würden und obendrein die Hardware dadurch auf
einen definierten Zustand gebracht wird.
Was meint ihr dazu?
Gruß,
Johnsn
Oh, das FPGA wird wohl nie eingeschaltet? ;) Der asynchrone Reset ist
ein power on reset und gehört in jedes anständige Design. Ihn
wegzulassen ist schlicht und ergreifend dumm und kann u.U. zu nicht
vorhersehbaren Ergebnissen führen.
Das hängt aber vom Synthesizer ab. Bei FPGAs von Xilinx mag das gehen,
bei anderen Synthesizern, FPGAs, CPLDs oder gar full-custom kann das
niemand garantieren (bzw. ist unmöglich). Abgesehen davon muss man dann
auch jedes Flipflop vorbelegen. Bei jeder ordentlichen Firma gibt es
Design Rules, die normalerweise auch einen asynchronen Reset verlangen.
Alles andere ist schlechter Stil.
Frank wrote:
> Das hängt aber vom Synthesizer ab. Bei FPGAs von Xilinx mag das gehen,> bei anderen Synthesizern, FPGAs, CPLDs oder gar full-custom kann das> niemand garantieren (bzw. ist unmöglich).
Die Frage bezieht sich auf ein ALTERA Cyclone, da funktioniert das mit
dem Startwert nach der Konfiguration.
> Abgesehen davon muss man dann auch jedes Flipflop vorbelegen.
nicht wirklich.
> Bei jeder ordentlichen Firma gibt es> Design Rules
jepp
> die normalerweise auch einen asynchronen Reset verlangen.> Alles andere ist schlechter Stil.
asynchroner Reset IST schlechter Stil!
Cheers, Roger
Der asynchrone Reset hat nur eine einzige, aber unter Umständen wichtige
Daseinsberechtigung: Power-On-Reset
Deswegen gibt es auch genau einen Reset-tree, der alle FFs (außer
Speicher) initialisiert. So ist das kein schlechter Stil, aber in
full-custom notwendig.
Ein asynchroner Reset zum Erzeugen einer gewünschten Funktionalität wäre
allerdings doof.
Ob die Initalisierung ohne Reset funktioniert, hat nichts mit dem
Baustein "Cyclone" zu tun, sondern mit dem Synthesizer. Und da könnte ja
auch ein anderer zum Einsatz kommen...
Ich bleib dabei: Asynchroner Reset IST guter Stil.
> Der asynchrone Reset hat nur eine einzige, aber unter Umständen wichtige> Daseinsberechtigung: Power-On-Reset
Eben nicht bei dem Cyclone - ein SRAM FPGA das zuerst konfiguriert
werden will - das den Power-On-Reset implizit mit der Konfiguration hat.
> Deswegen gibt es auch genau einen Reset-tree, der alle FFs (außer> Speicher) initialisiert. So ist das kein schlechter Stil, aber in> full-custom notwendig.
Hier geht es aber um ein Cyclone FPGA und keinen ASIC.
Somit ist dein Argument zwar nett, aber hier nicht relevant.
Cheers, Roger
Mit dem Reset gibt es die selben Probleme wie mit jedem anderen Signal:
es verbraucht Routingressourcen, und wenn man es nicht taktsynchron
released wird u.U. ein ungültiger Zustand initialisiert. Außerdem können
manche Elemente nicht mit einem Reset arbeiten (shift register SRL16E).
Xilinx empfiehlt deshalb den Reset nur dort zu verwenden wo er wirklich
nötig ist, und besonders bei sehr schnellen Designs auf einen
asynchronen Reset zu verzichten.
>es verbraucht Routingressourcen
Fast jedes FPGA hat mittlerweile ein dediziertes Reset-Netzwerk.
>und wenn man es nicht taktsynchron>released wird u.U. ein ungültiger Zustand initialisiert.
Dies gilt es eben beim Design zu beachten, man nennt es nicht umsonst
asynchronen Reset.
>und besonders bei sehr schnellen Designs auf einen>asynchronen Reset zu verzichten
Wenn die meisten FFs sowieso schon mit Reset-Eingang bestückt sind,
warum sollte dadurch das Design langsamer werden?
Johnsn wrote:
>>es verbraucht Routingressourcen> Fast jedes FPGA hat mittlerweile ein dediziertes Reset-Netzwerk.
Ok.
>>und wenn man es nicht taktsynchron>>released wird u.U. ein ungültiger Zustand initialisiert.> Dies gilt es eben beim Design zu beachten
Was heißt das konkret?
>>und besonders bei sehr schnellen Designs auf einen>>asynchronen Reset zu verzichten> Wenn die meisten FFs sowieso schon mit Reset-Eingang bestückt sind,> warum sollte dadurch das Design langsamer werden?
Wird es nicht, aber je höher der Takt, desto größer die
Wahrscheinlichkeit dass ein Reset nicht alle FlipFlops rechtzeitig
erreicht.
Johnsn wrote:
> Fast jedes FPGA hat mittlerweile ein dediziertes Reset-Netzwerk.
beim Cyclone gibts das aber nur in Verbindung mit dem DEV_CLRn Pin.
Ansonsten kann dein reset ins globale clock network gelegt werden.
Vielleicht hilft es dir ja dass du mit mindestens einem Clock dieses
Netzwerk ja auch brauchst, und somit nicht zwingend, nur weil etwas da
ist es auch nutzen musst.
Cheers, Roger
> Dies gilt es eben beim Design zu beachten> Was heißt das konkret?
Das man auch die Möglichkeit durchspielt, was passiert wenn FFs, die
eigentlich später in einem Pfad liegen früher released werden als andere
und nachprüft, ob dadurch Fehlverhalten entsteht. Ich weiß das redet
sich jetzt viel leichter, als es getan ist.
>und somit nicht zwingend, nur weil etwas da>ist es auch nutzen musst.
Das ist genau der Punkt. Wenn etwas vorhanden ist, sollte man es auch
nutzen (meine Meinung). Und da bei vielen "FPGA-Menschen" (inkl. mir)
der Reset als selbstverständlich und sauber angesehen wird, finde ich,
dass man den Reset verwenden soll.
"Xilinx empfiehlt deshalb den Reset nur dort zu verwenden wo er wirklich
nötig ist, und besonders bei sehr schnellen Designs auf einen
asynchronen Reset zu verzichten."
Das machen die wohl eher, um den Übergang ins ASIC zu erschweren. Denn
da wird ein RESET in der Regel für die Netzlistensimulation benötigt, so
dass er dann im Zweifelsfall "nachgerüstet" werden müsste.
Ansonsten sollte das RESET Netzwerk schon schnell genug sein, um alle FF
rechtzeitig zu erreichen, sonst ist das Murks. Immerhin muss das Clock
Netzwerk ja auch mit sehr geringer Verzögerung an die FF kommen, das
Reset Netzwerk hat da schon um Welten mehr Zeit. Und wenn an den FF
asynchrone Resets vorgesehen sind, dann sind die sowieso drin und
verlangsamen auch nichts, wenn sie benutzt werden.
Gruss
Axel
>>und somit nicht zwingend, nur weil etwas da>>ist es auch nutzen musst.> Das ist genau der Punkt. Wenn etwas vorhanden ist, sollte man es auch> nutzen (meine Meinung). Und da bei vielen "FPGA-Menschen" (inkl. mir)> der Reset als selbstverständlich und sauber angesehen wird, finde ich,> dass man den Reset verwenden soll.
Aha, dein FPGA hat ein power-on-reset feature, nutzt du das denn auch?
Es wuerde dir nach deinem Text zu urteilen einiges an Arbeit ersparen.
Du kannst damit natuerlich auch ein internes reset signal generieren
fuer Module welche ein Reset brauchen, bloss damit nutzt du dein
Reset-Netzwerk halt nicht.
Cheers, Roger