Forum: FPGA, VHDL & Co. Procedure überladen: Variable vs. Konstante


von TheFish (Gast)


Lesenswert?

Hallo Leute,

meine Frage wurde hier zumindest so ähnlich schon mal gestellt, aber es 
gab keine Antwort (Beitrag "Procedure überladen").

An folgender Beispielprozedur erläutere ich kurz, was ich möchte:
1
myprocedure (variable : in std_logic);

"myprocedure" soll jetzt entweder mit einer Konstante oder eben einer 
Variable als Parameter aufgerufen werden:
1
variable myvariable : std_logic := '0'
2
3
myprocedure ('0');
4
myprocedure (myvariable);

Die Tools beschweren sich jetzt allerdings beim ersten Aufruf, dass das 
Aufzählungsliteral '0' keine Variable ist. (Meine Güte, wie bescheuert 
ist das eigentlich - Konstante --> Variable sollte immer möglich sein!)

Wenn ich die Prozedur wie folgt überlade, bekomme ich - entsprechend dem 
oben zitiertem Beitrag - einen Fehler, dass dieser Prozedurname bereits 
verwendet würde.
1
myprocedure (variable : in std_logic);
2
myprocedure (constant : in std_logic);

Ganz schön dämlich. Kann ich mit VHDL irgendwie erreichen was ich 
möchte, ohne x-mal die selbe Prozedur zu implementieren (und jeweils den 
Namen leicht abzuwandeln)? Irgendwie muss es doch möglich sein, denn 
viele Standarfunktionen wie to_unsigned() nehmen sowohl Konstanten als 
auch Variablen als Parameter an...

von Klaus F. (kfalser)


Lesenswert?

TheFish schrieb:
> (Meine Güte, wie bescheuert
> ist das eigentlich - Konstante --> Variable sollte immer möglich sein!)

Doch wohl eher umgekehrt. Dort wo man eine Konstante angeben kann, 
sollte es möglich sein, den aktuellen Wert einer Variablen anzugeben.
Dort wo man eine Variable angeben muss, kann man nicht einen Konstante 
übergeben, eine Variable hat ja einen Speicherplatz, eine Konstante 
nicht.

VHDL]
myprocedure (constant : in std_logic);
[/VHDL]

sollte gehen. Damit kannst Du auch dem Wert einer Variablen übergeben.

von TheFish (Gast)


Lesenswert?

Tjaa, da habe ich vielleicht zu oft in Software programmiert... was du 
sagst klingt logisch - werde ich versuchen ;)

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.