Ich steh immer noch auf dem Schlauch, wahrscheinlich sind es mehrere.
Mein ursprüngliches Problem aus dem vorherigen Posting ist immer noch
nicht gelöst (Dieses mal ohne unnötige Casts).Laut Simulation wird
address_key von 0 auf 255 inkrementiert.
Der then-Zweig der If-Abfrage wird ausgeführt, der else-Zweig
anscheinend nicht. Der Zustand "two" wird nicht erreicht. (Ja, da soll
null stehen). Das die Zuweisung bei Signalen um einen Takt verzögert
erfolgt und nach 255, bei 8-Bit, wieder 0 folgt sollte keine Rolle
spielen. Also wo ist der "Denk"-Fehler ?
1 | case load_key_state is
|
2 | when zero => -- Vorgang nicht abgeschlossen
|
3 | done <= '0';
|
4 | -- Schreiberlaubnis erteilen
|
5 | write_enable_key <= '1'; -- Adresse und Daten zuweisen
|
6 | address_key <= (others => '0');
|
7 | data_in_key <= key_in;
|
8 | load_key_state <= one;
|
9 |
|
10 | when one => if unsigned(address_key) < 255
|
11 | then
|
12 | -- Adresse inkrementieren
|
13 | address_key <= std_logic_vector(unsigned(address_key) + 1);
|
14 | -- Daten zuweisen
|
15 | data_in_key <= key_in;
|
16 | else
|
17 | -- Schreiberlaubnis entziehen
|
18 | write_enable_key <= '0';
|
19 | -- Vorgang abgeschlossen
|
20 | done <= '1';
|
21 | -- Ende
|
22 | load_key_state <= two;
|
23 | end if;
|
24 |
|
25 | when two => null;
|
26 | end case;
|