Servus!
Ich habe folgendes Problem: in einem VHDL-Programm zum Auslesen eines
Display-Signals nimmt meine State Machine undeterministisch 2 Zusände
gleichzeitig an .. wie kann das sein? Bin ich blöd? Anfängerfehler?
Signal-Verlauf siehe Bil im Anhang (ab Tack 193).
Hier mal der Code der SM:
1 | type cstate is (Idle, Start, R, G, B, Waiting);
|
2 |
|
3 | fifo_wr : process(clk50, rst)
|
4 | begin
|
5 | if (rst = '1') then
|
6 | r_wrreq <= '0';
|
7 | c_state <= Idle;
|
8 | color <= "00000000";
|
9 | elsif (clk50'event and clk50 = '1') then
|
10 | case (c_state) is
|
11 | when Idle =>
|
12 | if (clk_disp = '0' and data_en = '1' and downld_active = '1') then
|
13 | r_wrreq <= '0';
|
14 | c_state <= Start;
|
15 | color <= "00000000";
|
16 | else
|
17 | r_wrreq <= '0';
|
18 | c_state <= Idle;
|
19 | color <= "00000000";
|
20 | end if;
|
21 | when Start =>
|
22 | r_wrreq <= '1';
|
23 | c_state <= R;
|
24 | color <= red;
|
25 | when R =>
|
26 | r_wrreq <= '1';
|
27 | c_state <= G;
|
28 | color <= green;
|
29 | when G =>
|
30 | r_wrreq <= '1';
|
31 | c_state <= B;
|
32 | color <= blue;
|
33 | when B =>
|
34 | r_wrreq <= '0';
|
35 | c_state <= Waiting;
|
36 | color <= "00000000";
|
37 | when Waiting =>
|
38 | r_wrreq <= '0';
|
39 | color <= "00000000";
|
40 | if (clk_disp = '1') then
|
41 | c_state <= Idle;
|
42 | else
|
43 | c_state <= Waiting;
|
44 | end if;
|
45 | when others =>
|
46 | c_state <= Idle;
|
47 | r_wrreq <= '0';
|
48 | color <= "00000000";
|
49 | end case;
|
50 | end if;
|
clk_disp hat ca. 6.6MHz;
clk50 50 MHz;
red, gree und blue sind die bytes für die Farben und haben ihre Werte
spät. 1 clk50-tak nach einer fallenden clk_disp-Flanke;
r_wrreq ist das write-signal des FIFOs;
data_en ist das Signal des Dislay-Controllers, dass die Daten valide
sind; download_active ist einfach ein Steuersignal von mir.
ich weiß, kein test auf auf FIFO-full, aber da er nie voll laufen kann
passt das.
der FPG ist ein Cyclone 2; die signal-Aufzeichung geschah mit Terasic
Blaster und SignalTap II Logic Analyzer.
Jemand ne Idee?
Danke.
Gruß
Thomers