Forum: FPGA, VHDL & Co. einmaliges Reset


von Reset-Master (Gast)


Lesenswert?

Hallo,

wie kann man für einen FPGA ein Resetsignal(extern oder inetern) 
erzeugen, den die Interne-Logik braucht um einen vordefinierten 
Anfangszustand anzunehmen?

Ich bin gerade dabei ein Board für meine Designs zu entwerfen.

Ich möchte, dass alle meine Statemachines und  nach Anlegen der 
Versorgungsspannung einen vordefinierten Zustand annehmen.
Diese habe ich alle mit einem Reset versehen. Ohne diesen laufen Sie 
nicht weiter(L->H).

Ich habe hierbei an ein RC-Glied gedacht. Der Kondensator soll sich nach 
anlegen der Spannung aufladen um nach einer Weile an den Pin des FPGA, 
an dem es angeschlossen ist ein L->H zu gewährleisten.

Wie löst ihr das Problem?

von PROMi (Gast)


Lesenswert?

Hallo Reset-Master,

ich hätte da zwei Varianten die bei dir Funktionieren könnten.

extern:

so wie du schon angefangen hast ein RC-Glied allerdings nicht direkt an 
den FPGA sondern auf den Eingang eines Resetbausteins z.B MAX809MEUR 
durch die Verzögerung erreichst du das nach dem laden des FPGAs dein PIN 
gesetzt wird.

intern (einfacher und schnell zu programmieren):

man nehme zwei D-FlipFlops und schalte diese in Reihe.
Auf den D-Eingang des ersten lege VCC der Eingang des zweiten ist 
Ausgang des ersten und der Ausgang des zweiten ist dein Reset.
Den Takt der Flip Flops kannst Du Dir aussuchen je nachdem welche 
Verzögerung du einbauen möchtest.
Die Schaltung verhält sich dann folgendermaßen nachdem der FPGA geladen 
ist das heißt VCC & CLK am Flip Flop geht zwei CLK- Perioden danach dein 
Reset auf high.
Damit kannst du dann nach dem Start deine Logik in einen definierten 
Zustand bringen.


hoffe es hilft

von Roger S. (edge)


Lesenswert?

RC-Glied als Reset ist so ziemlich die bloedste Idee auf die man kommen 
kann.
Unzuverlaessig und zudem wird wohl kaum die Anstiegszeit des FPGA inputs 
eingehalten.

Falls du ein SRAM basiertes FPGA verwendest, nach der Konfiguration hast 
du ja deinen Anfangszustand!

Ein Resetbaustein wie PROMi beschreibt ist okay, nur musst du halt 
schauen dass das reset signal noch ansteht wenn der FPGA in den user 
mode wechselt.

Cheers, Roger

von TheMason (Gast)


Lesenswert?

haben die fpgas (die SRAM basierten) ohnehin nicht schon eine eigene 
reset-logik intern ?! weil irgendwie muss ja das laden des srams durch 
das flash erfolgen. demnach müssten die doch eine por-logik schon 
drin-haben, oder sehe ich das falsch.
ich habe spaßeshalber mal in den schaltplan des spartan3-starter-kits 
geschaut. da ist kein expliziter reset-baustein zu finden ...

von Xenu (Gast)


Lesenswert?

>wie kann man für einen FPGA ein Resetsignal(extern oder inetern)
>erzeugen, den die Interne-Logik braucht um einen vordefinierten
>Anfangszustand anzunehmen?

Das ist in FPGAs bereits enthalten. Siehe Datenblätter.

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Man kann das komplett in Software machen, indem man eine state machine 
mit 3 Zuständen baut: Vom Zustand 1 geht es nach 2, von 2 nach 3 und da 
ist Ende. Diese Schaltung "fällt" also spätestens nach dem 2. clk in den 
Endzustand. Dieser released eine zuvor auf null gehaltene state machine, 
die dann selbstätig gegen ein Maximum zählt und damit eine einstellbare 
Zeit wartet. Beim Übergang vom vorletzten zum letzen Zustand gibt es den 
reset an die restliche Schaltung. Dies wird von einer dritte fsm 
überwacht, die dann beide primären fsms still schaltet. Die Resetbreite 
kann man so auch einstellen, indem man von n-x bis n auf RES hält. Die 
Schaltung funktioniert für alle möglichen Einschaltzustände, läuft 
maximal n-x clocks und liefert bei einem einzigen Fall auch im 
Startzustand einen kurzen Reset. Will man eine definierte minimale 
Verzögerungszeit, macht man beide primären fsms sehr kurz und schaltet 
noch ein Verzögerungglied nach.

von Reset-Master (Gast)


Lesenswert?

Könnt Ihr bitte eine Softwareversion der Lösung posten?

von Xenu (Gast)


Lesenswert?

Wieso willst Du ein Problem lösen, dass nicht existiert?

FPGAs haben eine interne Reset-Logik; alle Flip-Flops werden auf 
definierte Werte gesetzt, die Du vorher festlegen kannst.

von Fpgakuechle K. (Gast)


Lesenswert?

ich habe den Artikel zum thema begonnen:

http://www.mikrocontroller.net/articles/Reset_f%C3%BCr_FPGA/CPLD

Bitte weiterführen

von Reto (Gast)


Lesenswert?

Kannst du bitte mal das Beispiel erklären, wie das mit dem 16-Bit SR 
gemeint ist? Stehe da auf dem Schlauch, was das eigentlich soll.

Ausserdem: Eine Resetlogik hat doch mit den Anfangszuständen nichts zu 
tun. Anfangszustand ist Anfangszustand - ein Reset kommt irgendwann im 
Betrieb.

von Xenu (Gast)


Lesenswert?

>Eine Resetlogik hat doch mit den Anfangszuständen nichts zu tun.

Ach nein? Und wie genau bekommst Du dann Flip-Flops in einen
definierten Anfangszustand?
Freilich kann man einen Reset auch später ausführen; am Anfang brauchst 
Du ihn trotzdem. "Power-On Reset" nennt sich das.


von Reto (Gast)


Lesenswert?

>Ach nein? Und wie genau bekommst Du dann Flip-Flops in einen
>definierten Anfangszustand?

Genau so, wie oben beschrieben: PER DEFINTION in der Sig-Deklaration. 
Das ist aber ein initialer SET und kein RESET. Wohlgemerkt "re-set".

Ein Reset ist ein automatisiert oder mauall getriggerter Vorgang, der 
ein Schaltwerk aus IRGENDEINEM Zustand wieder in einen definierten 
Zustand überführt und nicht nur aus einem SPEZIELLEN Zustand.

Man muss also 2 Fälle unterscheiden.

von FPGAküchle (Gast)


Lesenswert?

#Ausserdem: Eine Resetlogik hat doch mit den Anfangszuständen nichts zu
#tun. Anfangszustand ist Anfangszustand - ein Reset kommt irgendwann im
#Betrieb.

Ein solcher reset (im Betrieb, Software Reset) habe ich hier nicht 
betrachtet. Das hat der Frager auch nicht gemeint:

Zitat:
"Ich möchte, dass alle meine Statemachines und  nach Anlegen der
Versorgungsspannung einen vordefinierten Zustand annehmen."

Also PowerUp-Reset. genauer gesagt startUp reset (grundzustand beim 
"Starten des FPGA nach Konfiguration)

von Xenu (Gast)


Lesenswert?

Vielleicht nochmal was zur Begriffsdefinition:

Wenn man es ganz genau nimmt, bedeutet "RESET" bei einem Flip-Flop,
dass man es auf den Wert '0' setzt, und "SET", dass man es auf den Wert
'1' setzt.

In der Regel wird bei digitalen Schaltungen aber der Begriff "RESET" 
auch dazu benutzt, um "RESET auf '0'" und "SET auf '1'" gleichzeitig zu 
beschreiben. In meinem Mikrocontroller zum Beispiel haben manche 
Registerbits einen Resetzustand von '0', und manche '1'. Ich sage aber 
trotzdem RESET, und nicht RESET/SET. Und der RESET-Pin heisst bei allen 
Mikrocontrollern die ich kenne RESET, und nicht RESET/SET, obwohl das 
eigentlich genauer wäre.

Soviel dazu. Jetzt nochmal zu Deinen Ausführungen:


>Genau so, wie oben beschrieben: PER DEFINTION in der Sig-Deklaration.
>Das ist aber ein initialer SET und kein RESET. Wohlgemerkt "re-set".

Soweit ich verstehe, meinst Du mit "SET", was andere unter dem Begriff
"Power-On Reset" verstehen.

Unter "RESET" verstehst Du offenbar nur einen Reset, der später kommt,
und der die Flip-Flops in einen anderen Zustand als den Anfangszustand 
versetzt. Klar kann ich das machen. Du kennst beliebig viele 
Resetsignale benutzen, und mit jedem einen anderen Resetwert verknüpfen.
Aber ein "Power-On Reset" bleibt trotzdem ein Reset.


>Ein Reset ist ein automatisiert oder mauall getriggerter Vorgang, der
>ein Schaltwerk aus IRGENDEINEM Zustand wieder in einen definierten
>Zustand überführt und nicht nur aus einem SPEZIELLEN Zustand.

Das ist Deine Definition.

von Reset??? (Gast)


Lesenswert?

Hallo,

ich möchte nicht bei der Reset-Definitionsgespräch hier mitmischen(Null 
Ahnung!), brauche sondern eine konkrete Hilfestellung.

Wie kann man einen Power-On-Reset nach definiertem Zeitablauf ab Start 
des FPGA erzeugen?

Habe mehrere Reset-Signale in meinem Design. Aber alle sollen mit dem 
Selben Reset-Signal nach 3 sec nach Anlegen der Spannung Ihre 
Grund-Zustände annehmen.

Habe ein ständiges High an einem Pin. Dieser soll den Reset auslösen. 
Der daraus abgeleitete Reset-Signal soll nach 3 sec. von High nach Low 
gehen und dort bleiben.

Hat jemand eine Idee, wie ich dies am elegantesten lösen kann?

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Hatte ich doch oben schon beschrieben: Du brauchst einen selbst 
resettenden Zähler, der von irgendwo starten kann, gegen null läuft und 
dann den eigentlichen delay-Zähler von (bir offenbar 3 sek) anstösst. 
Die selbststartende Logik, wie ich sie beschrieben habe, funktioniert 
auch in ASICs, die keinen Startzustand haben. Beim FPGA, wo man einen 
Startzustand der FFs definieren kann, kann man sich den sparen. Ergo 
hast Du einfach nur einen Zähler, der mit zero intitalisiert wird, zählt 
und dann einen puls abgibt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.