|
|
|
Anfang
zurück
weiter
Ende
|
Autor |
Beitrag |
jens
Gast
|
Erstellt: 19.01.10, 19:21 Betreff: Prozess soll auf einen Anderen warten -Wie?
drucken
Thema drucken weiterempfehlen
|
|
|
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
|
Erstellt: 21.01.10, 13:27 Betreff: Re: Prozess soll auf einen Anderen warten -Wie?
drucken
weiterempfehlen
|
|
|
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
|
Erstellt: 21.01.10, 13:49 Betreff: Re: Prozess soll auf einen Anderen warten -Wie?
drucken
weiterempfehlen
|
|
|
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 |
|
|
Gast
|
Erstellt: 21.01.10, 14:06 Betreff: Re: Prozess soll auf einen Anderen warten -Wie?
drucken
weiterempfehlen
|
|
|
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
|
|
nach oben |
|
|
|
powered by carookee.com - eigenes profi-forum kostenlos
Design © trevorj
|