Warum verwenden wir Funktionen in VHDL?

8

Funktionen sind offensichtlich weniger ausführlich als Entitäten zu schreiben. Aber es beinhaltet viele Nachteile, einschließlich:

  • Kein generisches Keyword-Äquivalent
  • Nur eine Ausgabe möglich

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?

    
simon.denel 21.01.2013, 17:22
quelle

3 Antworten

5

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

  • Überladung
  • Definition der Operatoren
  • Überlastung der Betreiber daher
  • Bessere Struktur des Codes
Arpit 21.01.2013, 17:28
quelle
7

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.

  • Und schließlich verwenden Sie natürlich nur Funktionen für ästhetische Zwecke (vorausgesetzt, Sie fügen Wartbarkeit und Lesbarkeit in die Definition von Ästhetik ein, was die meisten Programmtypen meiner Erfahrung nach tun). Sie verwenden nur Aufzählungstypen, Entitäten, Datensätze und eine ganze Reihe anderer Sprachmerkmale für "ästhetische Zwecke". Selbst Montage-Mnemonics sind ästhetisch! Vielleicht sollte zu DIP-Schalter wechseln:)
Martin Thompson 21.01.2013 18:49
quelle
5

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.

%Vor%

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.

    
pc3e 22.01.2013 10:16
quelle

Tags und Links