Hallo! Ich bin verzweifelt. Ich habe folgende Statemachine die nach dem Reset im State eeprom_idle rumdümpeln sollte:
1 | stm_p : process(sys_clk, rst_s) |
2 | begin
|
3 | if (rst_s = '1') then |
4 | stm_eeprom_wrap <= eeprom_idle; |
5 | start_write_s <= '0'; |
6 | start_read_s <= '0'; |
7 | ack_poll_flag_s <= '0'; |
8 | elsif rising_edge(sys_clk) then |
9 | ready <= ready_falling_s; |
10 | case stm_eeprom_wrap is |
11 | when eeprom_idle => |
12 | if read_mode_i /= Idle_e then |
13 | start_write_s <= '1'; |
14 | stm_eeprom_wrap <= eeprom_send_slave_adr_read; |
15 | else
|
16 | start_write_s <= '0'; |
17 | stm_eeprom_wrap <= eeprom_idle; |
18 | end if; |
19 | |
20 | if write_mode_i /= Idle_e then |
21 | start_write_s <= '1'; |
22 | stm_eeprom_wrap <= eeprom_send_slave_adr_write; |
23 | else
|
24 | -- Do nothing here. Otherwise stm_eeprom_wrap
|
25 | -- set in the if clause above will be overwritten.
|
26 | end if; |
27 | |
28 | if ack_poll_flag_s = '1' then |
29 | start_write_s <= '1'; |
30 | stm_eeprom_wrap <= eeprom_ack_poll; |
31 | end if; |
32 | .
|
33 | .
|
34 | .
|
35 | when others => |
36 | null; |
37 | end case; |
38 | end if; |
Wenn ich dann dem Signal read_mode_i z.B. RandomRead_e zuweise (also read_mode_i /= Idle_e), sollte die Statemachine eigentlich über die Abfrage
1 | if read_mode_i /= Idle_e then |
2 | ...
|
in Richtung eeprom_send_slave_adr_read angestoßen werden. Tatsächlich ist es aber so, dass egal was ich tue, die Statemachine als erstes in Richtung eeprom_send_slave_adr_write verlassen wird. Warum???