Forum: FPGA, VHDL & Co. einfache aber wichtige Frage zu VHDL IF then Anweisung


von FPGA-Fragender (Gast)


Lesenswert?

Hallo zusammen,

kurze Frage zu VHDL

In meinem Lehrbuch steht:

dass die Anweisung:

proces

...

case E ist
  when "00"  => temp <= p1 ;
  when "01"  => temp <= p2 ;
  when "10"  => temp <= p3 ;
  when "11"  => temp <= p4 ;
end case

end process

bedeutet dass die signallaufzeiten für alle Anweisungen gleich sind.



process
..

if E = "00" then
    temp <= p1 ;
elsif  E = "01" then
    temp <= p2 ;
elsif  E = "10" then
    temp <= p3 ;
else
    temp <= p4 ;
end if ;

end process


Zitat: Lehrbuch
 Im Gegensatz zur case Anweisung kann man bei der if Anweisung also 
nicht davon ausgehen, dass die Signalverzögerungen in der Hardware für 
alle Verzweigungen gleich lang sind. Vielmehr ist dem Bild zu entnehmen, 
dass die Verzögerungszeit des Ausgangs Signals umso kürzer ist, desto 
weiter oben eine Bedingung wahr wird.


Ist das tatsächlich so ? Das wäre mir neu.

Ich hab immer angenommen, dass es bei der if then formulierung lediglich 
darum geht die Auswahl für die Zweige logisch darzustellen, dass in der 
Synthes dabei aber prinzipiel das gleich rauskommen würde wie bei der 
sinngleichen formulierung mit Case.


Was ist nun richtig ?

Gruß vom FPGA-Fragenden

von Jan M. (mueschel)


Lesenswert?

Das kommt immer darauf an, wie intelligent das Tool ist. Es muss im 
zweiten Fall ja erkennen, dass sich die beiden Bedingungen im if und 
elsif-Zweig jeweils gegenseitig ausschließen. Ansonsten muss ja das else 
selbst mit beachtet werden.

if bedingung1 then
elsif bedingung2 then
end if;

heißt ja erstmal nichts anderes als

if bedingung1 then
end if;
if bedingung2 and not bedingung1 then
end if;

Letzteres ist natürlich größer uns langsamer als das reine
if bedingung2 then

Besser ist es auf alle Fälle, du unterstellst dem Synthesetool keinerlei 
Intelligenz (was in erster und zweiter Näherung durchaus zutreffend ist) 
und formuliertst alles so einfach wie nötig.

von thomas (Gast)


Lesenswert?

Zur Not würde ich mir einfach mal die Hardware anschauen, die der 
Synthesizer daraus macht ...

von Gast (Gast)


Lesenswert?

Xilinx ISE erkennt solche versteckten MUXer in der Regel. Wenn  nicht 
auf VHDL-Ebene, dann spätestens bei einer WYSIWYG RTL-re-Synthese.

von funker211 (Gast)


Lesenswert?

Die Aussage aus Deinem Lehrbuch erscheint mir sehr gewagt. Die 
Laufzeiten eines Signals hängen immer von der verwendeten Logik und auch 
dem Place & Route ab. Wenn ein Synthesetool zufällig für beide 
Konstrukte dasselbe synthetisiert und routed, dann ist es wurscht, was 
Du nutzt. Wenn nicht, kann Dir vorher keiner sagen, was besser 
synthetisiert wird.

Die CASE-Bedingung liefert zumindest vom Ansatz her theoretisch die 
besseren Laufzeiten, weil sie keine Priorisierung bietet und damit dem 
Synthesetool mehr Freiheiten zur Optimierung lässt. Eine 
IF-ELSIF-ELSE-Bedingung bietet immer eine Priorisierung (die auch jedes 
Synthesetool erkennen muss, sonst ist es Müll). Damit ist das 
Synthesetool in seiner Optimierungsstrategie eingeschränkt.

Ich würde schätzen, in Deinem Falle des simplen 4:1-MUX spielt das noch 
keine Rolle, bei komplexeren Gebilden hingegen schon.

von Jan M. (mueschel)


Lesenswert?

funker211 wrote:
> Eine
> IF-ELSIF-ELSE-Bedingung bietet immer eine Priorisierung (die auch jedes
> Synthesetool erkennen muss, sonst ist es Müll). Damit ist das
> Synthesetool in seiner Optimierungsstrategie eingeschränkt.

Die Frage ist eigentlich genau anders herum:
Erkennt das Tool die Faelle, in denen eine Priorisierung nicht notwendig 
ist?

von Falk B. (falk)


Lesenswert?

@ Jan M. (mueschel)

>Die Frage ist eigentlich genau anders herum:
>Erkennt das Tool die Faelle, in denen eine Priorisierung nicht notwendig
>ist?

Ja eben. Und deshalb ist es sinnvoll, ein CASE zu verwenden, wenn man 
keine Prioritäten braucht.

MFG
Falk

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.