Forum: FPGA, VHDL & Co. wait anweisung probleme


von Spartakus (Gast)


Lesenswert?

Hallo...

ich scheitere gerade daran zwei wait until anweisungen in einem Process
unterzubringen.
begin
process
  begin
    Data_out <= Data;
    valid <= '1';
    wait until accept='1';
    valid <= '0';
    wait until accept='0';
  end process;
end Behavioral;

Der Prozess wird doch nacheinander abgearbeitet. somit müsste er doch
valid = 1 setzen dannach auf accept = 1 warten. Wenn das geschehen ist
sollte valid =0 gesetzt werden und wieder auf accept=0 gewartet werden.
Leider gibt er mir aber folgende Fehlermeldung raus :
ERROR:Xst:842 - Same wait conditions expected in all Multiple Waits.

Wo ist mein Denkfehler???

Ich benutze WebPack:6.3.03

Danke euch

von Jörn (Gast)


Lesenswert?

Ist das der Code den du synthetisieren willst? Wo ist die
Sensitivitätsliste für den den Prozess? Wait-Statements sind in der
Verhaltensbeschreibung pfui, da sie nicht synthesierbar sind.

Für das Verhalten, das du willst, wirst du eine State Machine
brauchen.

Gruß Jörn

von Spartakus (Gast)


Lesenswert?

Ok danke..
WebPack meckert aber wenn ich eine Sensitivityliste ian an den process
hänge, wenn ich gleichzeitig eine Waitanweisung in dem Prozess nutze.

Aber ich werde michab jetzt an das Pfui halten und die waitschleifen
verbannen :-)

von Hagen (Gast)


Lesenswert?

Also keine Synthese, sondern ein Testbench.

versuche mal

  process
  begin
    Data_out <= Data;
    valid <= '1';
    wait until accept='1';
    valid <= '0';
    wait until not (accept='1');
  end process;

Gruß Hagen

von Spartakus (Gast)


Lesenswert?

Nice Try :-(

Ne das war es auch nicht ... da gibt es die gleiche Fehlermeldung. Aber
ich hab es schon anders gelöst. Anscheinend mag er keine 2 wait
anweisungen in einem Process...
Man lernt nie aus ...

von Jörn (Gast)


Lesenswert?

Ist der Code für die Synthese oder für eine Testbench bestimmt?

von Tobias (Gast)


Lesenswert?

Wenn man die wait Anweisung verwendet, darf man keine Sensitivty list
verwenden. versuch mal so:

process(accept, Data)
  begin
    If (accept='1') then
       Data_out <= Data;
       valid <= '1';
    else
       valid <= '0';
     end if;
  end process;

Ein Prozess wird nach der Synthese für gewöhnlich als Flip Flop
dargestellt. In VHDL kann man nicht wie in C programmieren

von Spartakus (Gast)


Lesenswert?

:-)
Jupp genau so hab ich es jetzt auch gelöst. Aber danke.
Das bedeutet also das man die waitgeschichte ganz verbannen und
vergessen sollte oder? NA ich denke übung macht den Meister.

Aber danke euch allen. Habt mir sehr weiter geholfen!!!

von Tobias (Gast)


Lesenswert?

nein die Wait Anweisungen braucht man nicht zu verbannen, nur sind sie
etwas schwierigerer als andere Methoden und Fehleranfälliger.
Ich persönlich benutze sie fast gar nicht.

von Hagen (Gast)


Lesenswert?

>>Anscheinend mag er keine 2 wait anweisungen in einem Process...

also ich nutze in der Testbench öfters sowas:

Clock <= '0';
wait for 32 ns;
Clock <= '1';
wait for 32 ns;

und das funktioniert auch innerhalb eines Processes -> ModelSim.

Gruß hagen

von Tobias (Gast)


Lesenswert?

ja, soetwas funktioniert auch, man muß sich aber beim programmieren in
VHDL oder allgemein in Hardwarebeschreibungssprachen bewußrt sein, daßß
mam kein c oder c++ oder java oder ähnliches programmiert sondern man
programmiert reale Hardware und da gibt es eineige Kriterien die man
beachten muß im gegensatz zu Software

von spartakus (Gast)


Lesenswert?

Das ist ja leider das problem :-). War ja auch erst mal ein stück
arbeit, sich daran zu gewöhnen, das die einzelnen Programmzeilen, die
nicht in einem Process sind parallel abgearbeitet werden :-)

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.