Funktionen sind offensichtlich weniger ausführlich als Entitäten zu schreiben. Aber es beinhaltet viele Nachteile, einschließlich:
Es scheint, dass Funktionen rekursiv aufgerufen werden können. Kann es bei Entitäten nicht der Fall sein? Wenn ja, gibt es einen guten Grund, Funktionen außer für ästhetische Zwecke zu verwenden?
Funktionen in vhdl erleichtern die Pflege und das Lesen des Codes. Im Allgemeinen sind Architekturen sehr groß und beim Debuggen, wenn etwas nicht funktioniert, können Sie leicht die problematische Funktion finden und korrigieren und müssen nicht den gesamten Architekturkörper analysieren.
im Falle von kleinen Codes ist es nutzlos, aber in größeren Maschinen macht es Sie besser zu verstehen, wenn Sie es für die Funktion halten.
Es gibt keine Regel dafür, also sind alle Kommentare willkommen.
kurz: Der Vorteil von Funktionen ist
Funktionen können keine Hardware direkt erstellen - sie müssen dazu in einer Architektur existieren. Es gibt nichts, was Sie davon abhält, all Ihre Funktionalität in ein function
(oder procedure
) zu setzen und dann nur innerhalb eines process
aufzurufen.
In Bezug auf einige Ihrer anderen Punkte:
Bei Prozeduren können Sie mehrere inout
oder out
-Parameter haben.
Entitäten können rekursiv sein ... Betrachte:
%Vor%Nicht sehr nützlich, aber es synthetisiert und simuliert einfach gut.
Ich kann sehen, warum Sie verwirrt sind, eine andere gute Frage wäre, warum es sowohl procedure als auch function gibt. (VHDL scheint manchmal ziemlich unelegant!)
Davon abgesehen benutze ich die ganze Zeit sowohl Prozeduren als auch Funktionen, obwohl meistens in Testbenches. Zum Beispiel habe ich für eine Testbench für ein Firewall-System, das ich vor einiger Zeit erstellt habe, eine Prozedur namens pd_tb_send_udp_packet()
geschrieben, die ich wiederholt im Hauptprozess verwende, z. B.
Diese Prozedur generiert ein zufälliges UDP-Paket mit dem angegebenen addr / port und sendet es an das Firewall-System und testet dann anhand des finalen booleschen Parameters, ob es weitergeleitet wird oder nicht. Hier sind die ersten Zeilen, in denen ich Funktionen aus einer Bibliothek verwende:
%Vor%Die letzten beiden geben 128 bzw. 32 Bit std_logic_vectors vom String-Eingang zurück.
Während ich all dies wahrscheinlich tun könnte, ohne irgendwie Prozeduren und Funktionen zu benutzen, wäre es definitiv viel unordentlicher.
Tags und Links vhdl