www.mikrocontroller.net

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


Autor: Stefan G. (stefan8051)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: T.M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gustav Merz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan G. (stefan8051)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
danke für die Erklärungen. Jetzt habe ich meinen Gedankenknoten
überwunden.

mfg
Stefan

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.