8 bit Hex auf 5 bit std_logic_vector legen

Gast #1148911
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
...
Gast #1149015
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
Gast #1149021
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 :)
Gast #1150076
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.
Gast #1150139
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
Moderator (Firma: Titel) Persönliche Seite #1150160
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.
Gast #1150169
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.
Gast #1150294
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

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