Umwandlung array zu std_logic_vector

OP #3010407
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.
Moderator (Firma: Titel) Persönliche Seite #3010746
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;

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren