Seltsames Verhalten bei wait until.

Gast #846233
Lesenswert?
• ▲
▼
Ich habe mehrere Prozesse innerhalb einer Testbench, die auf einen 
Master Controller oder Subprozeduren warten und passend anworten. In 
einem Unterprogramm schreibe ich dann z.B. dies hier:
1
wait until (buffer_is_free = '1');
... wobei der Buffer frei sein könnte oder noch belegt, weshalb ich 
schon von "rising_edge" weggegangen bin. Der Prozess soll also gfs 
warten oder aber schon sofort losrennen, wenn das Signal auch 1 ist. 
Gesteuert wird das Signal  von "unten" und funktionier korrekt. Das kann 
man im Modelsim sehen.

Trotzdem klebt der Prozess oben an genau dieser Stelle fest und wartet.

Wenn das Signal aber mal 0 war und dann auf 1 geht, funktioniert es. 
Genauso ist es, wenn der Prozess oben "früher" kommt und fragt und noch 
auf ein Null trifft. Dann sieht er die kommende Eins!.

Nur wenn es schon Eins ist, bleibt er hängen. Warum will wait until ein 
togglen sehen?

Wie könnte man das lösen?
Gast #846310
Lesenswert?
• ▲
▼
>wait until (buffer_is_free = '1')
 funktioniert nur, wenn vorher buffer_is_free = '0' war.

wait until wartet auf eine Zustandsänderung, deshalb muß auch vorher der 
entgegengesetzte Zustand dagewesen sein!
Gast #847845
Lesenswert?
• ▲
▼
>wait until wartet auf eine Zustandsänderung, deshalb muß auch vorher der
>entgegengesetzte Zustand dagewesen sein!

Sicher? Reichts nicht wenn ein eine Transaktion auf dem
Signal zu Eins stattfindet?
Gast #850184
Lesenswert?
• ▲
▼
Nein, das ist kein Modelsim-Bug.

Wie hier bereits gesagt wurde, muss die "wait until" Abfrage mit
einer if Abfrage auf den komplementären Wert kombiniert werden.

if buffer_is_free = '0' then
  wait until (buffer_is_free = '1');
end if;
Gast #850414
Lesenswert?
• ▲
▼
> Du hast buffer_is_free nicht in der sensitivitylist gehabt,

Natürlich nicht, denn er hat ja überhaupt keine sensitivity list 
verwendet. Sonst hätte er ja wait gar nicht benutzen dürfen.

> dann kann Modelsim teilweise darauf reagieren, kann es aber auch bleiben lassen.

Dann erklär doch mal, was man dagegen tun soll, wenn man wait verwenden 
will.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren