Eindeutiger Anfangszustand FSM wie definieren

#3333927
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
Gast #3333958
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;
#3333991
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?
#3334028
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
Moderator (Firma: Titel) Persönliche Seite #3334269
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren