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
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
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 :-)
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
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 ...
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
:-) 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!!!
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.
>>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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.