Forum: FPGA, VHDL & Co. WHEN oder IF THEN ELSE


von Norbert (Gast)


Lesenswert?

Hallo,

ich habe eine generelle Anfängerfrage, zu der ich keine Antwort finden 
kann. Und zwar wird in dieser Guideline auf Seite 35 empfohlen, 
Konstrukte mit WHEN oder WITH .. SELECT .. WHEN zu vermeiten und statt 
dessen IF .. THEN .. ELSE zu verwenden.

http://wiki.ntb.ch/infoportal/_media/software/programmierrichtlinien/vhdl_guidelines.pdf

Soweit mir bekannt, ist IF .. THEN .. ELSE aber nur innerhalb von 
Prozessen erlaubt, während WHEN (oder WITH .. SELECT ..WHEN) auch 
außerhalb verwendet werden darf. Also z.B. auch in rein kombinatorischem 
Code.

Allerdings steht in dieser Guideline kein entsprechender Hinweis. Was 
ist denn nun richtig bzw. was falsch oder was soll man verwenden und was 
nicht? Soll man in Prozessen nur IF .. THEN .. ELSE verwenden und 
außerhalb WHEN Konstrukte?

Bin momentan leicht verwirrt.

Vielen Dank für Eure Hilfe.

Gruß,

Norbert

von Christoph Z. (christophz)


Lesenswert?

Die genaue Antwort dazu liefert das Kapitel 3.4 und später.

Norbert schrieb:
> Soweit mir bekannt, ist IF .. THEN .. ELSE aber nur innerhalb von
> Prozessen erlaubt, während WHEN (oder WITH .. SELECT ..WHEN) auch
> außerhalb verwendet werden darf. Also z.B. auch in rein kombinatorischem
> Code.

Ja, IF .. THEN .. ELSE kann nur innerhalb von Prozessen verwendet 
werden.

WHEN kann nur ausserhalb von Prozessen verwendet werden (Es ist eine 
nebenläufige Anweisung).

Eine rein kombinatorische Beschreibung kannst du mit beiden Varianten 
korrekt beschreiben. Logisch gibt es keinen Unterschied.

Norbert schrieb:
> Allerdings steht in dieser Guideline kein entsprechender Hinweis. Was
> ist denn nun richtig bzw. was falsch oder was soll man verwenden und was
> nicht? Soll man in Prozessen nur IF .. THEN .. ELSE verwenden und
> außerhalb WHEN Konstrukte?

Du sollst keine WHEN Konstrukte verwenden, weil du gemäss diesen 
Guidlines pro Architektur nur zwei Prozesse hast (einen getakteten und 
einen rein kombinatorischen) und ausserhalb dieser Prozesse gibt es 
nichts (darum kannst du keine WHEN verwenden).


Längere Diskussionen zum Stil von Jiri Gaisler findest du z. B. hier:
Beitrag "Gaisler-Religion?"

von ./. (Gast)


Lesenswert?

> Soweit mir bekannt, ist IF .. THEN .. ELSE aber nur innerhalb von
> Prozessen erlaubt

Richtig.

Genau wie case-Konstrukte.

> WHEN oder WITH .. SELECT .. WHEN zu vermeiten

Spaetestens dann haette ich den Guide zugeklappt.

> Was ist denn nun richtig bzw. was falsch

Erlaubt ist alles was der Sprachstandard hergibt.

Das ist mit WHEN oder WITH .. SELECT .. WHEN leider nicht viel.
Vielleicht ruehrt daher der Rat die Beschreibung mit anderer Syntax 
vorzunehmen.

Richtig ist, was von der Synthesesoftware richtig umgesetzt wird.
Wenn eine (einfache) Kombinatorik damit richtig beschrieben werden kann,
kann man es ohne Nachteile verwenden.

von Norbert (Gast)


Lesenswert?

Christoph Z. schrieb:
> Beitrag "Gaisler-Religion?"

Super, vielen Dank für den Hinweis. Ich dachte mir schon, dass da 
zumindest ein wenig persönliche Ansicht dahinter steckt.

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.