Forum: FPGA, VHDL & Co. Eindeutiger Anfangszustand FSM wie definieren


von Chris B. (cbb)


Lesenswert?

Hallo Zusammen,

ich habe eine FSM in VHDL geschrieben.
Diese Funktioniert auch richtig, nur sind die Anfangszustände, also 
nachdem der FPGA (Microsemi Igloo AGLN250) neu bestromt oder der 
Programmcode neu hochgeladen wurde, nicht definiert.
Bei der Synthese bekomme ich außerdem folgendes Warning:
1
Initial value is not supported on state machine state

Die FSM initialisierung sieht folgendermaßen aus.
1
type fsm is (initial_condit, init, idle, ...);  -- Def. Zustandsautomat 
2
signal state : fsm := initial_condit; -- Startzuweisung FSM

Habt Ihr Beispiele wie man ein solches Problem lösen könnte?

Schon einmal vielen Dank für Eure Antworten.

Grüße

von jibi (Gast)


Lesenswert?

Du hast Syntax error. Das geht normalerweise.

Gruß Jonas

von Chris B. (cbb)


Lesenswert?

Ich habe keinen Syntaxerror.
Das Programm ist synthetisierbar und läuft auch in der Hardware.
Es kommt lediglich das Warning bei der Synthese wie oben beschrieben...

Ich bin mir nun nicht sicher ob die Anfangszustände tatsächlich 
definiert sind.

Grüße

: Bearbeitet durch User
von Christoph (Gast)


Lesenswert?

Ich mache es so, wie man mir das Beigebracht hat (grad noch schnell in 
meinem Buch die Bestätigung gesucht):
1
FsmStates: process (ClkSend, Reset) is
2
  begin  -- process FSMstates
3
    if reset = '1' then                 -- asynchronous reset (active high)
4
      CurrentState <= Init;
5
    elsif rising_edge(ClkSend) then         -- rising clock edge
6
      CurrentState <= NextState;
7
    end if;
8
  end process FSMstates;

von Falk B. (falk)


Lesenswert?

Einige Synthesetools unterstützen die Initialisierung der Signale, 
andere nicht. Dann braucht man halt einen (a)synchronen Reset.

von Chris B. (cbb)


Lesenswert?

Also ich habe den Startwert der FSM bei mir initial vergeben.
Habe jetzt nochmals einen weiteren "warte auf Signal state" davor 
geschrieben:
1
type fsm is (initial_condit, init, idle, ...);  -- Def. Zustandsautomat 
2
signal state : fsm := initial_condit; -- Startzuweisung FSM
3
4
-- hier steht normalerweise weiterer Code
5
6
case state is
7
8
when initial_condit =>
9
10
          if(startflag = '1')then
11
          state <= init;
12
          else null;
13
          end if;

Anscheinend springt die FSM jetzt trotz Warning in den richtigen State.

Was ist da nur los? Ist eine initiale Zuweisung nun möglich?

von Chris B. (cbb)


Lesenswert?

Falk Brunner schrieb:
> Einige Synthesetools unterstützen die Initialisierung der Signale,
> andere nicht. Dann braucht man halt einen (a)synchronen Reset.

Für diesen Asynchronen Reset könnte ich beispielsweise einen Taster
der in Hardware entprellt wird (z.B. durch Reset Monitor), welcher auf 
einen IO-Pin am FPGA führt, realisieren?

Dann diesen Pin als Eingang an einen "Reset VHDL" Block, welcher
wiederum alle VHDL Blöcke welche auf den FPGA geladen werden "steuert".

Wie sieht es dann beim Power Up aus? Kann dieser Block auch hier schon
alle weiteren Blöcke z.B. nach 5 Taktzyklen neu starten?
Hier wüsste ich nicht, wie ich es realisieren kann.

Schonmal danke für eure Antworten.

Viele Grüße

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Chris B. schrieb:
> Für diesen Asynchronen Reset könnte ich beispielsweise einen Taster
> der in Hardware entprellt wird (z.B. durch Reset Monitor), welcher auf
> einen IO-Pin am FPGA führt, realisieren?
Da muss in Hardware nichts entprellt werden.

> Dann diesen Pin als Eingang an einen "Reset VHDL" Block, welcher
> wiederum alle VHDL Blöcke welche auf den FPGA geladen werden "steuert".
Richtig: der Reset muss einsynchronisiert und synchron deaktiviert 
werden. Sonst kann es dir passieren, dass dein Design nicht richtig 
anläuft...

> Wie sieht es dann beim Power Up aus? Kann dieser Block auch hier schon
> alle weiteren Blöcke z.B. nach 5 Taktzyklen neu starten?
> Hier wüsste ich nicht, wie ich es realisieren kann.
Lies das Datenblatt zu deinem FPGA. Ein Powerup ist ja nun nichts so 
Aussergewöhnliches, dass nur du von dieser Thematik betroffen wärst.

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.