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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.