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.