Forum: FPGA, VHDL & Co. 8 bit Hex auf 5 bit std_logic_vector legen


von Stefan (Gast)


Lesenswert?

Hi, ne ganz einfache Frage. Wie kann ich einem std_logic_vector der 5 
Bit breit ist eine 2 Stelligen Hexwert zuordnen.
Der Hexwert geht nie über 2^5 hinaus.
Bekomme deshalb immer ne Size missmatch Fehlermeldung
1
...
2
BlaBla : std_logic_vector (4 downto 0); 
3
...
4
BlaBla <= x"00";
5
...

von mki (Gast)


Lesenswert?

Versuch es doch mal so:

BlaBla : std_logic_vector (4 downto 0);
tmp : std_logic_vector (4 downto 0);

tmp = x"00";
BlaBla <= tmp(4 downto 0);

von Der Besucher (Gast)


Lesenswert?

Hallo,

ich mache das immer so (braucht leider eine library):

use ieee.std_logic_arith.conv_std_logic_vector;
...
signal BlaBla : std_logic_vector(4 downto 0);
...
BlaBla <= conv_std_logic_vector(16#00#,5);

Der Besucher

von Der Besucher (Gast)


Lesenswert?

@mki:

du meinst doch sicherlich:

signal BlaBla : std_logic_vector (4 downto 0);
...
variable tmp : std_logic_vector (7 downto 0);
...
tmp := x"00";
BlaBla <= tmp(4 downto 0);


Jo, sollte auch gehen :)

von mki (Gast)


Lesenswert?

@der Besucher

hmm... ja natürlich. Das passiert wenn alles schnell gehen muß und 
einfach nur kopiert. Naja wustest ja trotzdem was gemeint war :-)

Danke nochmal

von Mathi (Gast)


Lesenswert?

> ich mache das immer so (braucht leider eine library):
>
> use ieee.std_logic_arith.conv_std_logic_vector;

Und genau das sollte man nicht machen!! std_logic_arith sollte nicht 
mehr verwendet werden. Sondern nur noch numeric_std.

von Der Besucher (Gast)


Lesenswert?

@mki: nicht ich, sondern der Fragesteller soll das verstehen ;)

@Mathi: hast du eine Erklärung, oder einen Link zu einer Erklärung warum 
das nicht so gut sein soll? Ich lerne gern dazu, hätte aber gern einen 
Beleg dafür. Vielleicht weis ja auch jemand anderes mehr dazu?

Der Besucher

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> std_logic_arith
ist eine herstellerabhängige Synopsys Library.
abhängig davon, ob du dazu die std_logic_unsigned oder die 
std_logic_signed verwendest, ergeben die Berechnungen andere 
Ergebnisse.
Wenn du also z.B. nur einen Prozess kopierst, kann das Verhalten 
unterschiedlich sein, wenn im "alten" VHDL-File std_logic_signed oben 
drin stand, und im neuen std_logic_unsigned   :-o

Mit der numeric_std ist das begradigt:
du mußt explizit angeben, ob die Berechnungen signed oder unsigend 
sind.

von Mathi (Gast)


Lesenswert?

Die std_logic_arith-Bibliotheken gehören nicht zum offiziellen Standard 
der IEEE. Sie wurden mal als Übergangslösung verwendet.
Dadurch entstand das Problem das es unterschiedliche Versionen der 
std_logic_arith/signed/unisgned von unterschiedlichen Herstellern 
existieren.
Zu diesem Punkt gibt es unzählige Diskussionen im Netz.

von Der Besucher (Gast)


Lesenswert?

Danke für die schnelle Antwort. Ja, ich erinner mich, da war was mit 
signed und unsigned.

Zum Glück benutze ich nie std_logic_signed und std_logic_unsigned 
(eigentlich wohl unbewußterweise aus genau diesem Grund).
Ich beschränke mich bei den vektoren auf std_logic_vector.
Und wenn Vorzeichenbehandlung nötig ist, kümmere ich mich lieber selbst 
dadrum. Das erleichtert das Leben ungemein.
Mal sehen, ob ich da was bei meinem Stil ändere.

Der Besucher

von Der Besucher (Gast)


Lesenswert?

Korrektur:

ersetze in meinem obigen posting std_logic_unsigned mit unsigned und
std_logic_signed mit signed. Sonst ergibt das keinen Sinn.

Der Besucher

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.