VHDL-Forum

 
Sie sind nicht eingeloggt.
LoginLogin Kostenlos anmeldenKostenlos anmelden
BeiträgeBeiträge MembersMitglieder SucheSuche HilfeHilfe
VotesUmfragen FilesDateien CalendarKalender BookmarksBookmarks
Prozess soll auf einen Anderen warten -Wie?

Anfang   zurück   weiter   Ende
Autor Beitrag
jens
Gast
New PostErstellt: 19.01.10, 19:21  Betreff: Prozess soll auf einen Anderen warten -Wie?  drucken  Thema drucken  weiterempfehlen Antwort mit Zitat  

Hi!

Ich habe zwei Prozesse, der eine (driver) setzt ein signal aufgrunddessen
der andere(writer) gestartet wird.
nun soll driver solange mit der ausführung seiner weiteren prozesschritte warten, bis der prozess "writer" all seine przesschritte vollständig abgearbeitet hat.
also: der eine prozess soll auf den anderen warten, wie geht das?

hier mein versuch, der jedoch leider nicht das tut was ich möchte:



architecture behav of memory_tester is

signal done: std_logic:='0';
signal n:integer:=0;
signal helper:bit;

begin -- begin der architecture
helper<=done'transaction;

driver_p: process is
variable nn: integer:=0;
begin

for nn in 0 to 15 loop
wait until clk = '1';
n<=nn;
report "n="& integer'image(n);
wait until clk'event;
wait until helper'event;
report "active";

end loop;

wait; -- suspend process
end process driver_p;


writer_p: process is
begin
wait until n'event;

report "gaga";
wait for 5 us;
done<='1';

end process writer_p;


end architecture behav;


wo liegt der fehler und wie mache ich es richtig?
am besten mit beispielcode!

vielen dank, jens
nach oben
Gast
New PostErstellt: 21.01.10, 13:27  Betreff: Re: Prozess soll auf einen Anderen warten -Wie?  drucken  weiterempfehlen Antwort mit Zitat  

Hmmm, ist nicht so ganz klar was Du machen willst, bzw. wie Du die Waits einsetzt ...

In VHDL gibt es zwei Konzepte für die Steuerung der Prozesse: Sensitivity List und Wait.

Bei der Sensitivity List wird ein Prozess immer dann gestartet, wenn sich eines des Signale darin ändert. Macht man auch meist, wenn man beispielsweise Register und Takt verwendet. Und wenn man daraus HW erzeugen (= synthetisieren) will.

Bei Verwendung von Wait läuft der Prozess los bis zum ersten/nächsten Wait und wartet dann, bis die Bedingung erfüllt ist, Dann läuft er weiter. Wenn er am Ende angekommen ist, fängt er wieder von vorne an.
Wait ist für ne Simulation ok, für die Abbildung auf HW aber ungeeignet.

In Deinem 1. Prozess steht ausserdem ein
wait;
Das beendet den Prozess bzw. hält ihn komplett an. Er wird kein weiteres mal durchlaufen - egal was mit den SIgnalen im 2. Prozess passiert.

Zu der Frage, was Du machen willst: Du brauchst ein zweites Signal im 2. Prozess, dass Du verwendest, um den ersten Prozess zu steuern. Nennt sich Synchronisation, handshake oder Semaphose - such Dir was aus :-)
D.h.der erste Prozess erzeugt das STart Signal und wartet dann auf das Ok oderready oder Acknowledge oder sowas in der Art. Der zweite prozess setzt das Ready Signal auf Null oder False, reagiert auf das Start Signal des 1. prozesses, macht seine Aktionen und setzt dann das Ready auf 1 bzw. True. Dmait läuft dererste prozess dann weiter. Ach ja, der zweite muss dnan natürlicch das Ready wieder zurücksetzen, damit der erste beim nächsten Durchlauf wieder wartet.

Das mal als Tipps, in welche Richtung Du suchen solltest.

Ansonsten gibts gute Bücher und Online Tutoruials, die jede Menge Beispiele enthalten - auch solche Synchronisationen ... ist immer mal empfehlenswert, dort nachzuschauen.

Schöne Grüße,

A.
nach oben
Dr. Faustus

Administrator

Beiträge: 107
Ort: Aßling


New PostErstellt: 21.01.10, 13:49  Betreff: Re: Prozess soll auf einen Anderen warten -Wie?  drucken  weiterempfehlen Antwort mit Zitat  

Hallo,

mir stellt sich die Frage ob das ganze nur simulationsfähig sein soll, oder später auch auf echter hardware laufen soll.

waits sind nähmlich nicht synthetisierbar!


gruesse.

nach oben
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
Gast
New PostErstellt: 21.01.10, 14:06  Betreff: Re: Prozess soll auf einen Anderen warten -Wie?  drucken  weiterempfehlen Antwort mit Zitat  

p1: process
StartP2 <= false;
...
wait until EingangXYZ = irgendwas ......
...
... Irgendwann mal willst Du den 2. Prozess dann anstossen:
StartP2 <= true;
wait auf irgendwas oder ne bestimmte zeitspanne
StarP2 <= false; --das kannst Du auch erst nach dem wait auf P2ready machen, würde auch gehen.
wait until P2ready;
... dann die nächsten Verarbeistungsschritte, bid er prozess dann am Ende wieder von vorne anfängt.
end process;

p2: process
P2Ready <= false;
...
wait until StartP2
...
... tue irgendwas ...
... Wenn fertig:
P2Ready <= true;
wait auf irgendwas oder ne bestimmte zeitspanne
P2Ready <= false;
...
...
... am Ende angekommen fängt der prozess wieder von vorne an.
end process;


Aber wie schon geschrieben: ist nicht auf HW synthetisierbar.
nach oben
jacobhue
Neuling


Beiträge: 6

New PostErstellt: 09.03.22, 17:16  Betreff: Re: Prozess soll auf einen Anderen warten -Wie?  drucken  weiterempfehlen Antwort mit Zitat  

Your writing is really inspiring, especially because it's so colorful and fresh. Thanks for sharing this story with us! mybkexperience mykfcexperience mybpcreditcard

nach oben
Benutzerprofil anzeigen Private Nachricht an dieses Mitglied senden
Sortierung ndern:  
Anfang   zurück   weiter   Ende
Seite 1 von 1
Gehe zu:   
Search

powered by carookee.com - eigenes profi-forum kostenlos

Design © trevorj