Forum: FPGA, VHDL & Co. Case nur mit Takt möglich?


von Markus X. (abrow)


Lesenswert?

Guten Tag,
ich arbeite mich gerade etwas in VHDL ein und versuche einen BCD to 
7-Segment Wandler zu simulieren.
Die Architektur sieht bei mir so aus:
1
ARCHITECTURE seg7_a OF seg7_e IS
2
  BEGIN
3
    PROCESS
4
      BEGIN
5
        CASE bcd_i IS
6
        WHEN "0000" => led_o <= "1111110";  -- 0
7
        WHEN "0001" => led_o <= "0110000";  -- 1
8
        WHEN "0010" => led_o <= "1101101";  -- 2
9
        WHEN "0011" => led_o <= "1111001";  -- 3
10
        WHEN "0100" => led_o <= "0100111";  -- 4
11
        WHEN "0101" => led_o <= "1011011";  -- 5
12
        WHEN "0110" => led_o <= "1011111";  -- 6
13
        WHEN "0111" => led_o <= "1110000";  -- 7
14
        WHEN "1000" => led_o <= "1111111";  -- 8
15
        WHEN "1001" => led_o <= "1111011";  -- 9
16
        WHEN OTHERS => led_o <= "1111110";  -- 0
17
        END CASE;
18
        WAIT;
19
    END PROCESS;
20
END seg7_a;
Wenn ich eine Simulation starte, kommt egal bei welcher BCD Kombination 
immer der letzte Wert (hier WHEN OTHERS => led_o <= "1111110";  -- 0).
Ist so ein Case Konstrukt nur mit einem Takt möglich? Oder warum wird 
immer der letzte Wert genommen?

von Klaus (Gast)


Lesenswert?

Martin S. schrieb:
> WAIT;

Hm, was genau könnte wohl eine bedingungslose Wait Anweisung machen? 
Genau, sie wartet bedingungslos, für immer und ewig, auf alle Zeiten, 
aus, finito... ;-)  Dein Prozess wird nur einmal zur Initialisierung 
ausgeführt und dann nie wieder. Ohne das wait funktioniert das. Auch 
ohne Takt.

von Markus X. (abrow)


Lesenswert?

Okay, das macht Sinn. Nur wenn ich das WAIT; rauslösche läuft die 
Simulation ohne Ende und ich bekomm beim kompilieren die Meldung:
Possible infinite loop: Process contains no WAIT statement.
Wie kann ich das noch beheben? Es muss also auf jeden Fall irgendwo ein 
wait eingebaut werden oder?

von Lattice User (Gast)


Lesenswert?

Martin S. schrieb:
> Okay, das macht Sinn. Nur wenn ich das WAIT; rauslösche läuft die
> Simulation ohne Ende und ich bekomm beim kompilieren die Meldung:
> Possible infinite loop: Process contains no WAIT statement.
> Wie kann ich das noch beheben? Es muss also auf jeden Fall irgendwo ein
> wait eingebaut werden oder?

oder dem process eine Sensitivityliste mitgeben, so dass er in der 
Simulation nur ausgeführt wird wenn sich ein Signal ändert.
1
    PROCESS (bcd_i)

von Klaus (Gast)


Lesenswert?

Nein, dir fehlt nur die sensitivity list. Das kommt dann bcd_i rein, und 
dann ist Ruhe im Karton, ähm, der Simulation...

von Markus X. (abrow)


Lesenswert?

Ja Wahnsinn, es funktioniert, danke :D
Aber nochmal zur Erklärung, wenn sich bcd_i ändert, dann wird in der 
Liste geschaut was zu tun ist. Ansonsten wird einfach nichts gemacht 
(abgewartet?). Hab ich das so richtig verstanden?

von Christian R. (supachris)


Lesenswert?

Martin S. schrieb:
> Aber nochmal zur Erklärung, wenn sich bcd_i ändert, dann wird in der
> Liste geschaut was zu tun ist.

Aber nur im Simulator. Auf der Hardware passiert immer was. Da sind das 
einfach ein paar Logik-Verknüpfungen.

von user (Gast)


Lesenswert?

Ja genau, so ist es.

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.