Forum: FPGA, VHDL & Co. Prozess ohne Sensitivitätsliste


von Student (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

wird ein Prozess ohne explizite Sensitivitätsliste einmal oder unendlich 
oft durchlaufen?  In der letzten Übung hieß es, der Prozess in Aufgabe 
2a wird nur einfach durchlaufen, sodass nur das Signal a den Wert 1 
annimmt. b und c bleiben beim Initialwert von 0.

Ich halte das für falsch, denn:
- es gibt keine explizite Sensitivitätsliste und
- keine Anweisungen aus denen implizit eine "generiert" würde.


Laut IEEE 1706-2008 gilt:
1
The execution of a process statement consists of the repetitive execution of its sequence of statements. After the last statement in the sequence of statements of a process statement is executed, execution will immediately continue with the first statement in the sequence of statements.

Das wird eingeschränkt durch:
1
If a process sensitivity list appears following the reserved word process, then the process statement is assumed to contain an implicit wait statement as the last statement of the process statement part; this implicit wait statement is of the form
2
3
wait on sensitivity_list;

Es werden zudem einige Regeln genannt, nach denen aus einigen 
Anweisungen implizit eine Sensitivitätsliste generiert wird.  Allerdings 
gehört eine Zuweisung nicht dazu.

Liege ich richtig oder hab ich etwas übersehen?

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

Jep, deine Einschaetzung ist korrekt. Ich vermute mal da haette in die 
Sensitivitylist ein all sollen.

Du kannst das auch einfach mal ausprobieren mit verschiedenen 
Simulatoren. Die meisten werden einfach stupide bei 0 ps bleiben udn nix 
bewegt sich vorwaerts, bis sie mit einem Speiche Problem den Dienst 
quittieren.

Entsprechende Warnings solltest du aber bekommen, ala: "Possible 
infinite loop".

von Student (Gast)


Lesenswert?

Danke Tobias :D

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

Student schrieb:
> Danke Tobias :D

Kein Ding. Ich wuerde hier aber mal noch eine zweite Meinung abwarten. 
Sicher ist sicher. ;-)

von -gb- (Gast)


Lesenswert?

Da wäre eine Simulation tatsächlich hilfreich.

Entweder der Prozess wird nie ausgeführt weil da ja auch keine Bedingung 
drinnen steht bei der er ausgeführt werden soll. Dann läuft also die 
Zeit, aber es ändert sich nix.
Oder der Simulator geht davon aus, dass der Prozess immer ausgeführt 
werden soll.

Sinnvoller Code ist das trotzdem nicht.

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

-gb- schrieb:
> Entweder der Prozess wird nie ausgeführt weil da ja auch keine Bedingung
> drinnen steht bei der er ausgeführt werden soll. Dann läuft also die
> Zeit, aber es ändert sich nix.

Wenn das passiert, waere es nicht IEEE 1706 konform.

Tobias B. schrieb:
> Wenn das passiert, waere es nicht IEEE 1706 konform.

Sinnvoll oder nicht sinnvoll ist hier nicht die Frage. Es geht um ein 
Lehrbeispiel, selbst mit Sensivitiyliste ist das nicht wirklich 
sinnvoll. Vll. zieht die Aufgabe auch vgerade darauf ab, das zu 
erkennen. Damit waere es durchaus sinnvoll.

: Bearbeitet durch User
von Gustl B. (-gb-)


Lesenswert?

So, simuliert und siehe da, das bleibt hängen bei 0 fs.

Das bedeutet dann also, dass wenn bei einem process die 
Sensitivitätsliste fehlt, dann wird dieser immer ausgeführt, in jedem 
Simulationsschritt.

Ja, das macht Sinn.

Für mich wäre es aber auch logisch gewesen, wenn der nie ausgeführt 
worden wäre weil ja keine Bedingung angegeben ist bei der er ausgeführt 
werden soll.
Wäre das aber so, würde ein process ohne Sensitivitätsliste aber mit 
wait until auch nie ausgeführt werden.

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Gustl B. schrieb:
> Für mich wäre es aber auch logisch gewesen, wenn der nie ausgeführt
> worden wäre
Jeder Prozess ohne Sensitivliste wird zu Beginn der Simulation 
gestartet. Das kann man leicht am "üblichen" Ablauf eines 
Testbench-Prozesses sehen, der ja auch ohne Sensitivliste ausgeführt ist 
und dann gleich mal losläuft, bis er auf das erste wait trifft. Und 
dann (wie bei Prozessen ohne Sensitivliste üblich und sinnvoll) am Ende 
des Prozesses diesen wieder von vorn beginnt:
1
  -- Clock process definitions
2
  Clk_process :process
3
  begin
4
     Clk <= '0';
5
     wait for Clk_period/2;
6
     Clk <= '1';
7
     wait for Clk_period/2;
8
  end process;

Und damit ist es logisch, was passiert, wenn da nirgends ein wait 
ist...

Allerdings halte ich die fehlende Sensitivliste in der obigen Aufgabe 
tatsächlich schlicht für einen Fehler.

: Bearbeitet durch Moderator
von Blechbieger (Gast)


Lesenswert?

Lothar M. schrieb:
> Jeder Prozess ohne Sensitivliste wird zu Beginn der Simulation
> gestartet.

Ausnahmslos jeder Prozess wird zu Beginn der Simulation gestartet und 
bis zum ersten impliziten oder expliziten Wait ausgeführt.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Blechbieger schrieb:
> Ausnahmslos jeder Prozess wird zu Beginn der Simulation gestartet und
> bis zum ersten impliziten oder expliziten Wait ausgeführt.
Ja, und dazu ist die Information sinnvoll, dass eben jede Sensitivliste 
ein implizites "wait on" ist:
1
  process (a,b,c) begin -- implizites wait
2
    d <= a after 2 ns;
3
    e <= b and c:
4
  end process;
ist funktionell exakt dasselbe wie
1
  process begin
2
    wait on a,b,c;      -- explizites wait
3
    d <= a after 2 ns;
4
    e <= b and c:
5
  end process;
Und so werden Prozesse mit Sensitivliste bei der Simulation erstmal 
gestartet, um sofort danach wegen der Sensitivliste wieder angehalten zu 
werden. "Von aussen" gesehen haben sie sich nicht mal den Bruchteil 
einer Femtosekunde bewegt.

Die vermittelte Denkweise, dass mit der Änderung eines Signales in der 
Sensitivliste ein Prozess von aussen "angetriggert" wird, ist also 
eigentlich formell falsch. Sondern der von Simulationsbeginn an laufende 
Prozess "wartet" implizit auf die Änderung eines Signals. Es "warten" 
also in objektorientierter Denkweise alle Prozesse parallel aktiv auf 
eine Änderung eines Signals in ihrer Sensitivliste.
Weil jetzt aber auf dem Simulationsrechner keine Prozesse gleichzeitig 
"laufen" oder "warten" können, sondern sich der Simulator eine Liste mit 
Zeitpunkten für irgendwelche Aktionen und Neuberechnungen aufbaut und 
abarbeitet, kommt der ganze Formalismus ins Stolpern. Und mit ihm der 
geneigte VHDL-Anfänger, der jetzt gar nicht mehr versteht, wer da passiv 
oder aktiv am Warten teilnimmt oder gar irgendwie angestoßen wird...

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
Noch kein Account? Hier anmelden.