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
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.
Zur Not würde ich mir einfach mal die Hardware anschauen, die der Synthesizer daraus macht ...
Xilinx ISE erkennt solche versteckten MUXer in der Regel. Wenn nicht auf VHDL-Ebene, dann spätestens bei einer WYSIWYG RTL-re-Synthese.
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.
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?
@ 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.