Forum: FPGA, VHDL & Co. Prozedur mt variablen Ports


von DuArte (Gast)


Lesenswert?

Hallöchen,

ich habe mal eine Frage an das Forum:


Wie schaffe ich es, in einer Prozedur ein Ausgangsport generisch zu 
halten?



Beispiel:

1
procedure TEST ( 
2
   signal Ausgang : out std_logic_vector(7 downto 0) 
3
)
4
is
5
begin
6
    Ausgang <= x"77";
7
end TEST;


Nun möchte ich die Vektorbreite variabel halten, also z.B. 16bit.


Geht dann sowas:

1
procedure TEST ( 
2
   signal Ausgang : out std_logic_vector
3
)
4
is
5
begin
6
    Ausgang <= x"7778";
7
end TEST;


Die Frage ist also, ob ich den Vektor constrainen muss oder nicht?


LG, DuArte

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

DuArte schrieb:
> Die Frage ist also, ob ich den Vektor constrainen muss oder nicht?
Nein, musst du nicht. Sieh dir einfach mal ein paar 
Bibliotheksfunktionen an, denen du Vektoren übergeben kannst.
Aus der numeric_std z.B. to_integer():
1
function TO_INTEGER(ARG: UNSIGNED) return NATURAL is
2
constant ARG_LEFT:INTEGER:= ARG'length-1;
3
alias XXARG:UNSIGNED(ARG_LEFT downto 0) is ARG;
4
variable XARG:UNSIGNED(ARG_LEFT downto 0); 
5
variable RESULT: NATURAL:= 0;
6
variable w : INTEGER:= 1;  -- weight factor
7
begin
8
  if (ARG'length<1) then
9
    assert NO_WARNING
10
    report "numeric_std.TO_INTEGER: null arg"
11
    severity warning;
12
    return 0;
13
    end if;
14
  XARG:= TO_01(XXARG);
15
  if (XARG(XARG'left)='X') then
16
    assert NO_WARNING
17
    report "numeric_std.TO_INTEGER: metavalue arg set to 0"
18
    severity warning;
19
    return 0;
20
    end if;
21
  for i in XARG'reverse_range loop
22
    if XARG (i) = '1' then
23
      RESULT:= RESULT + w;
24
      end if;
25
    if (i /= XARG'left) then w := w + w;
26
      end if;
27
    end loop;
28
  return RESULT;
29
  end TO_INTEGER;
Quelle: 
http://www.csee.umbc.edu/portal/help/VHDL/packages/numeric_std.vhd

von DuArte (Gast)


Lesenswert?

Oki, danke für die Info

DuArte

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.