www.mikrocontroller.net

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


Autor: Christian Peters (kron)
Datum:

Bewertung
0 lesenswert
nicht 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

signal data_16: std_logic_vector (15 downto 0);
signal data_8: std_logic_vector (7 downto 0);
...
data_16 <= data_8(7) & data_8(7) & data_8(7) & data_8(7) & 
           data_8(7) & data_8(7) & data_8(7) & data_8(7) & 
           data_8 (7 downto 0);
Gibt es dafür einen "besseren" Weg, also
evtl. resourcensparender oder einfach eleganter?

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: Xenu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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);

Autor: Christian Peters (kron)
Datum:

Bewertung
0 lesenswert
nicht 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! ;)

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Da Micha (damicha)
Datum:

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

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

Autor: na (Gast)
Datum:

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

Autor: Da Micha (damicha)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Muss das nicht
>
> data_16(15 downto 0) <= (15 downto 8 => data_8(7)) & data_8(7 downto 0)
> 
> 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.