8-bit-Wort auf 16-bit-Wort auffüllen

#507091
Lesenswert?

Hallo,

ich will ein 8-bit-Datenwort dergestalt auf 16 bit auffüllen:

8 * MSB MSB MSB-1 ... LSB+1 LSB

Das MSB soll also 8 mal vorne angestellt werden.
Mir ist dafür nichts besseres eingefallen als
1
signal data_16: std_logic_vector (15 downto 0);
2
signal data_8: std_logic_vector (7 downto 0);
3
...
4
data_16 <= data_8(7) & data_8(7) & data_8(7) & data_8(7) & 
5
           data_8(7) & data_8(7) & data_8(7) & data_8(7) & 
6
           data_8 (7 downto 0);
Gibt es dafür einen "besseren" Weg, also
evtl. resourcensparender oder einfach eleganter?
Gast #507103
Lesenswert?

Hm, schaut wie eine Vorzeichenerweiterung aus.
Ich mach das so, keine Ahnung ob Du das schöner findest,
ich finde es zumindest etwas aussagekräftiger:

signal extended_sign : std_logic_vector (7 downto 0);

extended_sign <= (others => data_8(7));
data_16 <= extended_sign & data_8(7 downto 0);
#507199
Lesenswert?

> Muss das nicht
>
1
> data_16(15 downto 0) <= (15 downto 8 => data_8(7)) & data_8(7 downto 0)
2
>
> heißen?

Hmm,

Wenn Du alle Bits von data_8 und data_16 benutzt, kannst Du die 
Bitauswahl (x downto y) auch weglassen.

Wegen dem 15 downto 8 habe ich auch überlegt. Ich glaube (bis mutmaße), 
dass es egal ist, welchen Bereich man hier angibt. Hauptsache es sind in 
diesem Fall 8 Bit. Es müsste also auch (1015 downto 1008) funktionieren. 
(7 downto 0) waren mir dann aber doch am Sichersten.

Gruß DaMicha.

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