www.mikrocontroller.net

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


Autor: FPGA-Fragender (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: thomas (Gast)
Datum:

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

Autor: Gast (Gast)
Datum:

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

Autor: funker211 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.