Probleme mit state machine

OP #1725735
Lesenswert?
• ▲
▼
Hallo,

ich habe ein Problem mit folgender state machine:
1
type cam_state_type is (WARTEN_RES, ENDE_RES);
2
signal cam_state2 : cam_state_type := WARTEN_RES;
3

4
reset_all <= RESET and reset2;
5
  
6
  reset_sl <= PER_RESET when rising_edge(CLOCK_IN_0);
7

8
  process (CLOCK_IN_0)
9
  begin
10
    if rising_edge(CLOCK_IN_0) then
11
      if reset_sl = '0' then
12
        cam_state2 <= WARTEN_RES;
13
        reset2 <= '0';
14
      else
15
        case cam_state2 is
16
        
17
          -- WARTEN_RES
18
          when WARTEN_RES =>
19
            reset2 <= '0';
20
            if GPIO = '0' then
21
              cam_state2 <= ENDE_RES;
22
            end if;
23
            
24
          --ENDE_RES
25
          when ENDE_RES =>
26
            reset2 <= '1';
27
            
28
          -- OTHERS
29
          when others =>
30
            cam_state2 <= WARTEN_RES;
31
        end case;
32
      end if;
33
    end if;
34
  end process;

Zur Aufgabe:
der externe RESET wird irgendwann auf '1' gesetzt.
Danach soll der reset2 erst auf '1' gehen, wenn das GPIO signal '0' ist.
Dann bleibt reset2 solange '1', bis der externe RESET wieder Reset gibt.

Nun habe ich das Problem, dass nach dem Beschreiben des FPGA alles 
wunderbar funktioniert. Also RESET ist '0', wird dann auf '1' gesetzt, 
alles läuft los, bis dann irgendwann RESET wieder auf '0' geht.
Nach diesem ersten Durchlauf wird reset2 nicht mehr auf '1' gesetzt, 
deswegen vermute ich das Problem in dieser statemachine.

Ich habe die Sache 100mal durchgedacht und kann nirgendwo erkennen, wo 
cam_state2 irgendwann ins Nirvana springt oder wo das Problem liegt.

Hat jemand einen Hinweis für mich?

Vielen Dank!
Andi
Moderator (Firma: Titel) Persönliche Seite #1725782
Lesenswert?
• ▲
▼
Dorthin springt die FSM garantiert nicht, denn für others wird 
keinerlei Logik generiert, weil alle Zustände von cam_state2 verwendet 
werden:
1
          -- OTHERS
2
          when others =>
3
            cam_state2 <= WARTEN_RES;
Siehe dazu http://www.lothar-miller.de/s9y/categories/25-when-others

> Nach diesem ersten Durchlauf wird reset2 nicht mehr auf '1' gesetzt,
> deswegen vermute ich das Problem in dieser statemachine.
Nachdem die FSM nur 2 Zustände hat, kann sie eigentlich nur im ersten 
hängen, denn im 2. Zustand wäre reset2 ja definitiv '1'.

Woher kommt der PER_RESET, der das garantiert beeinflussen könnte?

BTW:
1
           if GPIO = '0' then
Ich würde hierhin auch ein Fragezeichen setzen, wenn GPIO nicht 
einsynchronisiert ist

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.