Hallo,
mal ne eigendlich einfache Frage zum If-Elsif Statement. Wird in diesem
nachstehenden Code alles ausgeführt, oder wird die If Anweisung
verlassen, sobald eine Bedingung erfült wurde? Es soll bei jedem Clock
ein State ausgeführt werden (State-Machine). Ist es hier so, das z.B
state = 0 ist, und somit der erste block ausgeführt wird, der dann
state auf 1 setzt und somit der elsif zweig auch aktiv wird und das
ganze in einer Schleife endet?
process(clk_in)
begin
if rising_edge(clk_in) then
if state = 0 then
adc_clock <= '1';
state <= 1;
elsif state = 1 then
adc1_en <= '1';
adc_clock <= '0';
state <= 2;
elsif state = 2 then
ram_wr <= '0';
state <= 3;
elsif state = 3 then
ram_wr <= '1';
adc1_en <= '0';
state <= 4;
elsif state = 4 then
adc2_en <= '1';
state <= 5;
elsif state = 5 then
ram_wr <= '0';
state <= 6;
elsif state = 6 then
ram_wr <= '1';
adc2_en <= '0';
state <= 0;
end if;
end if;
end process;
mfg
Stefan
Nein. state = 1 wird erst beim nächsten Takt für die if Anweisung relevant. Also zählst du im Prinzip das Signal state bei jedem Takt um 1 hoch.
Um es mal salopp zu sagen: ohne startzustand (dh. ein reset) ist das oll. if (reset='0') then state=0; elsif clk'rising.... ... ... end if; So in der Art sollt es besser sein. Gustav
es gibt sogar zwei Gründe wieso immer nurein Zustand verwendet wird: 1. Es wird immer nur ein Zweig der if anwendung ausgewertet, und zwar der erste, dessen bedingung erfüllt ist. 2. Der neue State ist wie schon gesagt erst zu Beginn des nächsten Taktes gültig, da state ja ein signal und keine variable ist.
Hallo, danke für die Erklärungen. Jetzt habe ich meinen Gedankenknoten überwunden. mfg Stefan
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.