Reset Problem

Gast #2310017
Lesenswert?
• ▲
▼
Hallo Leute,

Ich habe mir ein schönes Programm zusammengestoppselt, dass den Scancode 
einer ps/2 tastatur ausliest, richtig decodiert und am DE2 Board als 
Wert an der 7 Segmentanzeige ausgibt (also die Tasten von NUMPAD 
0,...,9).

Mein Problem: Ich habe als asynchronen Reset den KEY1 am DE2 Board 
hergenommen. Wird dieser gedrückt, sollte die 7Segmentanzeige auf 0 
gehen. Dieses tut sie aber nur während ich den Knopf gedrückt habe! 
Danach verfällt die Anzeige in den letzten Wert, der eingegeben wurde.

Als Reset verwende ich immer den typischen storage process:
1
state_storage: process(reset,clock)
2
begin
3
  if reset='1' then 
4
    state <=IDLE;
5
   char_code<=(others=> '0');
6
   char_ready<='0';
7
  elsif (rising_edge(clock)) then 
8
      state <= next_state;
9
      char_ready <= char_ready_next;
10
      char_code<=char_code_next;
11
  
12
  end if;
13
end process state_storage;

Auch die negative Logik wird berücksichtigt! Was könnte mein Fehler 
sein?

LG Mel
Gast #2310096
Lesenswert?
• ▲
▼
Nur state wird in der State_Machine dann auch verwendet, deshalb müsste 
er sowieso ins IDLE springen:
1
next_state_func: process (keytrigger_next, state)
2
begin
3
case state is
4

5
when IDLE =>

Der sourcecode ist weit über 100 Zeilen lang, dass will ich euch 
wirklich nicht zumuten...
Moderator (Firma: Titel) Persönliche Seite #2310510
Lesenswert?
• ▲
▼
Mel schrieb:
> Dieses tut sie aber nur während ich den Knopf gedrückt habe!
> Danach verfällt die Anzeige in den letzten Wert, der eingegeben wurde.
Lies mal deinen (gekürzten) Code durch:
1
   if reset='1' then 
2
       char_code <= (others=> '0'); -- hier wird er 0
3
   elsif (rising_edge(clock)) then 
4
       char_code <= char_code_next; -- und hier kommt wieder der alte Wert?
5
   end if;

Mel schrieb:
> Der sourcecode ist weit über 100 Zeilen lang, dass will ich euch
> wirklich nicht zumuten...
Komm doch, rück ihn raus... ;-)
Häng das Ding als *.vhd Datei an deinen Post an, dann gibts 
Syntax-Highlighting gratis...
#2311123
Lesenswert?
• ▲
▼
Hallo Mel,

das Problem lässt sich vielleicht auch durch Nachdenken lösen. Wenn die 
FSM beim Loslassen des Resets in den alten Zustand springt, dann hast Du 
offentichtlich ein Speicherelement in deiner Logik, von dem Du nichts 
weißt. Das kann eigentlich nur ein Latch sein, und das ist vermutlich 
entstanden, weil Du bei der Berechung des Folgezustands das 
obligatorische
next_state <= state;
vergessen hast. Stimmt's?

Grüße,
Harald

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.