Gast
#1116263
Wie sieht korrekterweise eine For, While oder Repeat-Schleife in einem
Zustandsautomat aus ?
Benutze ich in nachfolgenden Ausschnitt die Variable n, ist der Ablauf
korrekt. Versuche ich es jedoch ohne Variable und verwende die
Anweisungen
die ich unten auskommentiert habe, dann wird die If-Abfrage im Zustand
"one" nie ausgeführt.
Benötige ich einen zusätzlichen Zustand für die If-Abfrage ?
-- Initialisierung
address_key <= (others => '0');
-- Inkrementierung
address_key <=
std_logic_vector(to_unsigned(to_integer(unsigned(address_key)) + 1,8));
-- If-Abfrage
if to_integer(unsigned(address_key)) = 255
case load_key_state is
when zero => -- Vorgang nicht abgeschlossen
done <= '0';
-- Schreiberlaubnis erteilen
write_enable_key <= '1';
-- n initialisieren
n := 0;
-- Adresse und Daten zuweisen
-- address_key <= (others => '0');
address_key <= std_logic_vector(to_unsigned(n,8));
data_in_key <= key_in;
load_key_state <= one;
when one => -- Adresse inkrementieren
n := n + 1;
address_key <= std_logic_vector(to_unsigned(n,8));
-- address_key <=
std_logic_vector(to_unsigned(to_integer(unsigned(address_key)) + 1,8));
-- Daten zuweisen
data_in_key <= key_in;
-- if to_integer(unsigned(address_key)) = 255
if n = 255
then
-- Schreiberlaubnis entziehen
write_enable_key <= '0';
-- Vorgang abgeschlossen
done <= '1';
-- Ende
load_key_state <= two;
end if;
when two => null;
end case;