Forum: FPGA, VHDL & Co. VHDL einfache Frage zu if-elsif statement


von Stefan G. (stefan8051)


Lesenswert?

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

von T.M. (Gast)


Lesenswert?

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.

von Gustav Merz (Gast)


Lesenswert?

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

von Matthias (Gast)


Lesenswert?

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.

von Stefan G. (stefan8051)


Lesenswert?

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
Noch kein Account? Hier anmelden.