Forum: FPGA, VHDL & Co. 8-bit-Wort auf 16-bit-Wort auffüllen


von Christian P. (kron)


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?

von Klaus F. (kfalser)


Lesenswert?

Mit einem for loop geht auch.

for i in 8 to 15 loop
  data_16(i) <= data_8(7);
end loop;
data_16(7 downto 0) <= data_8;

von Xenu (Gast)


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);

von Christian P. (kron)


Lesenswert?

@Klaus: Hm, das stimmt, aber soll man Variablen und auch
for-Schleifen nicht eher meiden in der Synthese?

@Xenu: Hmmm, das sieht "schöner" aus! ;)

von Falk (Gast)


Lesenswert?

@Christian Peters

>Hm, das stimmt, aber soll man Variablen und auch
>for-Schleifen nicht eher meiden in der Synthese?

Variablen, bedingt.
For-Schleifen sind kein Problem.

MFG
Falk

von Da M. (damicha)


Lesenswert?

@Christian Peters:
> @Xenu: Hmmm, das sieht "schöner" aus! ;)

Es geht noch "schöner" ;)
1
data_16 <= (7 downto 0 => data_8(7)) & data_8;
Gruß DaMicha.

von na (Gast)


Lesenswert?

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

von Da M. (damicha)


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.

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.