Hallo zusammen,
ich habe folgendes Problem.
Ich möchte gerne möglichst übersichtlich ein Array füllen.
Dazu habe ich einen 128 Bit Vector:
1 | Vector : std_logic_vector(127 downto 0);
|
Zusätzlich habe ich das folgende Array definiert:
1 | type array128x8 is array (0 to 127) of std_logic_vector(7 downto 0);
|
2 | signal Vector_array : array128x8;
|
Nun möchte ich gerne das Array wie folgt mit dem Inhalt des Vector
füllen, nämlich einfach immer 8 Bit pro Eintrag und am Ende mit einer
Art Überlauf, der bei Bit 0 wieder anfängt:
1 | Vector_array( 0) <= Vector( 7 downto 0);
|
2 | Vector_array( 1) <= Vector( 8 downto 1);
|
3 | Vector_array( 2) <= Vector( 9 downto 2);
|
4 | ...
|
5 | Vector_array(120) <= Vector(127 downto 120);
|
6 | Vector_array(121) <= Vector(127 downto 121) & Vector(0 );
|
7 | Vector_array(122) <= Vector(127 downto 122) & Vector(1 downto 0);
|
8 | Vector_array(123) <= Vector(127 downto 123) & Vector(2 downto 0);
|
9 | Vector_array(124) <= Vector(127 downto 124) & Vector(3 downto 0);
|
10 | Vector_array(125) <= Vector(127 downto 125) & Vector(4 downto 0);
|
11 | Vector_array(126) <= Vector(127 downto 126) & Vector(5 downto 0);
|
12 | Vector_array(127) <= Vector( 127) & Vector(6 downto 0);
|
Der erste Part ist eigentlich klar:
1 | table : for i in 0 tp 127 generate
|
2 | Vector_array(i) <= Vector(i+8-1 downto i);
|
3 | end generate;
|
Nun ist die Frage, wie ich das nach der ersten Zeile des zweiten Teils
gestalten soll. Denn da würde ja bei i=121 ohne Verkettung (0 downto
121) rauskommen (sofern i nach 0 überläuft), was ja Blödsinn ist.
Ich wollte aber auch vermeiden, die letzten 7 Zeilen auszuschreiben. So
ein komplettes generate wäre schon übersichtlich.
Gibt es da eine schöne Vairante?
Klar, ich könnte den Vector einfach um 7 Bit erweitern und in die 7 MSB
nochmal die 7 LSB kopieren, aber ob das schöner ist, keine Ahnung. Ich
suche eher eine rafinierte Variante :)
Vielen Dank!
Ralf