Forum: FPGA, VHDL & Co. Zwei wait-Anweisung in einem Process


von Bastian Czichon (Gast)


Lesenswert?

Guten Tag Zusammen,
es steht viel darüber geschrieben, aber um ehrlich zu sein verstehe ich 
es nicht so ganz. Darum bitte ich an Hand meines Bsp. um Untersützung.

Syntax sieht wie folgt aus:

P1: process
variable PAR: boolean;
begin
      wait until (CLK='1' and CLK'event);
      if STARTBIT then
        PAR:= false;
        while not STOPBIT loop
          D_OUT <= D_IN;
          if D_IN = '1' then
                 par:=not PAR;
                                end if;
          wait until (CLK='1' and CLK'event);
        end loop;
      end if;
      if PAR then
          D_OUT <= '1';
      else
          D_OUT <= '0';
      end if;
end process P1;


Erhalte folgende Fehlermeldung:
Error (10398): VHDL Process Statement error at PARITSER.vhd(22): Process 
Statement must contain only one Wait Statement (bezieht sich auf die 
zweite wait-Anweisung)


Habe die Syntax aus einem Lehrbuch, daher macht es mich etwas stutzig 
und hoffe auf die Hilfe von Experten ;-)

Vielen Dank,
Bastian

von Peter B. (funkheld)


Lesenswert?

Hmmm.. ich glaube du kannst nur eine "wait until..." in einem Prozess 
rein nehmen. Nimm mal probehalber eine andere Abfrage rein in der Mitte.

Gruss

: Bearbeitet durch User
von Klaus F. (kfalser)


Lesenswert?

Bastian Czichon schrieb:
> Habe die Syntax aus einem Lehrbuch, daher macht es mich etwas stutzig

Die Syntax stimmt schon, aber es gibt synthetisierbares VHDL und nicht 
synthetisierbar.

Synthetisierbar heißt, dass man die VHDL Beschreibung in Hardware 
umsetzen kann.
Das wäre bei Dir eventuell auch noch möglich, aber der Compiler ist 
"dumm" und erkennt/erlaubt nur bestimmte Konstrukte.
Zwar werden die Compiler immer besser, aber es gibt Standards, wie man 
synthetisierbares VHDL schreiben sollte, und dabei ist nur ein wait 
Statement erlaubt.

Du solltest das Handbuch deines Compilers lesen, und/oder Dir andere 
Beispiele mit nur einem Wait pro Prozess suchen.

von Christoph Z. (christophz)


Lesenswert?

Klaus Falser schrieb:
> Bastian Czichon schrieb:
>> Habe die Syntax aus einem Lehrbuch, daher macht es mich etwas stutzig
>
> Die Syntax stimmt schon, aber es gibt synthetisierbares VHDL und nicht
> synthetisierbar.

Sehe das auch so wie Klaus.

Dein Beispiel Code würde in einem VHDL Simulator wunderbar 
funktionieren.

Klaus Falser schrieb:
> Synthetisierbar heißt, dass man die VHDL Beschreibung in Hardware
> umsetzen kann.
> Das wäre bei Dir eventuell auch noch möglich,

@Klaus:
Ich bin beim Lesen als erstes über die "while not STOPBIT loop" Schlaufe 
gestolpert. Denkst du die könnte der Synthesizer umsetzen? Ich hätte 
gesagt nein, aber ich lerne gerne dazu.

von daniel__m (Gast)


Lesenswert?

Das Code-Schnipsel sieht für aus, als wenn er Teil einer Testbench ist.

Dem Simulator kannst du deutlich mehr servieren als dem "compiler". 
Mehrere "wait until" und/oder "wait for" in einem Process sind bei einer 
Testbench keine Seltenheit.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Bastian Czichon schrieb:
> Habe die Syntax aus einem Lehrbuch
Das dürfte das Beispiel aus Reichardt&Schwarz sein, von den behauptet 
wird, das wäre gerade noch synthetisierbar. Die Wahrheit ist: es ist 
nicht synthetisierbar.

Zum Thema "mehrere wait im Prozess" siehe dort:
http://www.lothar-miller.de/s9y/archives/47-wait-im-Prozess.html

: Bearbeitet durch Moderator
von FPGA-Progger (Gast)


Lesenswert?

Ich würde die beiden Prozesse trennen und den einen durch den zweiten 
steuern. Dann gibt es in jedem Prozess einmal einen wait for clock.

von Bastian Czichon (Gast)


Lesenswert?

Super, vielen Dank. Alle Antworten haben mich ein Stück weitergebracht.
Bei meinem nächsten Anliegen wende ich mich erneut an diese Community.
Mit freundlichen Gruß,
Bastian Czichon

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.