mikrocontroller.net

Forum: FPGA, VHDL & Co. wait anweisung probleme


Autor: Spartakus (Gast)
Datum:

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

Autor: Jörn (Gast)
Datum:

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

Autor: Spartakus (Gast)
Datum:

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

Autor: Hagen (Gast)
Datum:

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

Autor: Spartakus (Gast)
Datum:

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

Autor: Jörn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist der Code für die Synthese oder für eine Testbench bestimmt?

Autor: Tobias (Gast)
Datum:

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

Autor: Spartakus (Gast)
Datum:

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

Autor: Tobias (Gast)
Datum:

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

Autor: Hagen (Gast)
Datum:

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

Autor: Tobias (Gast)
Datum:

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

Autor: spartakus (Gast)
Datum:

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

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.