Forum: FPGA, VHDL & Co. Umwandlung array zu std_logic_vector


von Jannis N. (vollmilch)


Lesenswert?

Hallihallo,

ich möchte einem Bitvektor mit 32bit breite, die Werte aus einem array 
aus Bitvektoren mit 8bit Breite zuweisen.
Bisher hab ich das immer so gemacht:

Output_Word_1 : out std_logic_vector(31 downto 0);
type receive_array is array(0 to (Receive_Words * 4 + 3)) of 
std_logic_vector(7 downto 0);

Output_Word_1 <= receive_buffer_2(4) & receive_buffer_2(5) & 
receive_buffer_2(6) & receive_buffer_2(7);

Das ganze wird aber bei vielen oder sehr großen Vektoren sehr 
unübersichtlich. Geht das irgendwie einfacher? So in der Richtung:

Leider falsch: Output_Word_1 <= receive_buffer_2(4 to 7);

Danke.

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


Lesenswert?

Jannis N. schrieb:
> Geht das irgendwie einfacher?
Du könntest es mit einer Funktion lösen, in der dann (per Schleife) 
diese Concatenation gemacht wird. Aber ob das einfacher ist, das lasse 
ich mal dahingestellt.

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


Lesenswert?

Ich hätte da mal diesen Vorschlag:
1
ARCHITECTURE behavior OF blabla IS 
2
    :
3
    signal slv32 : std_logic_vector(31 downto 0);
4
5
    type ary_t is array(0 to 15) of std_logic_vector(7 downto 0);    
6
    signal ary : ary_t := (x"00",x"01",x"02",x"03",x"04",x"05",x"06",x"07",
7
                           x"10",x"11",x"12",x"13",x"14",x"15",x"16",x"17");
8
    
9
    function cat4 (a : ary_t; o : integer) return std_logic_vector is
10
    variable i : std_logic_vector(31 downto 0);
11
    begin
12
      i := a(o) & a(o+1) & a(o+2) & a(o+3);
13
      return i;
14
    end cat4;
15
16
BEGIN 
17
    
18
    slv32 <= cat4(ary,3);
19
    :
20
    slv32 <= cat4(ary,8);
21
22
END;

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.