Forum: FPGA, VHDL & Co. Dezimal und Hexadezimal


von Frank (Gast)


Lesenswert?

Hallo zusammen, habe eine Anfängerfrage:

Ich habe einen
SIGNAL a : STD_LOGIC_VECTOR (7 downto 0);
definiert.

weisse ich dem Signal nun eine Hex-zahl zu, so klappt das einwandfrei:

a <= x"ff";

nun will ich aber eine Dezimalzahl zuweisen :

a <= 255;     oder
a <= 10#255#;

beides funktioniert nicht, ich erhalte immer:
Type of a is incompatible with type of 255

Wie kann ich eine dezimalzahl zuweisen ?

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


Lesenswert?

> weisse ich dem Signal nun eine Hex-zahl zu, so klappt das einwandfrei:
> a <= x"ff";
Du weist damit keine Hex-/Zahl/ zu, sondern einen Hex-/Vektor/. Deshalb 
geht das.

> nun will ich aber eine Dezimalzahl zuweisen :
> a <= 255;
255 ist jetzt wirklich eine Zahl, und die muß deshalb erst mal in 
einen Vektor umgewandelt werden. Wenn du die numeric_std verwendest 
(und ich würde dir zu diesem Standard raten), geht das z.B. so
1
a <= std_logic_vector(to_unsigned(255,8));
http://www.lothar-miller.de/s9y/categories/16-Numeric_Std

Wenn du die "alte" STD_LOGIC_ARITH verwendest, geht das mit
1
a <= conv_std_logic_vector(255);  -- ohne Garantie, da muß ich selber immer nachschauen  ;-)

von dito (Gast)


Lesenswert?

So ist es korrekt:
1
a <= conv_std_logic_vector(255, a'length);


Aber wie Lothar schon gesagt hat, benutz lieber die numeric_std.

von Frank (Gast)


Lesenswert?

und wieso muss ich bei einem

if a = 255 then.....

die 255 nicht in einen std_logic_vector umwandeln ?

Was genau ist denn der unterschied zwischen einer Zahl und einem Vector 
?

und wieso gibt es keinen Datentyp std_logic_int ?

von Mike (Gast)


Lesenswert?

> Was genau ist denn der unterschied zwischen einer Zahl und einem Vector?

 Mal anders gefragt: Welche Dezimalzahl würdest du dem 8 Bit-Vektor 
"10010111" zuordnen? Gibt ja zwei Möglichkeiten....

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


Lesenswert?

> und wieso muss ich bei einem
>    if a = 255 then.....
> die 255 nicht in einen std_logic_vector umwandeln ?
Es ist leider so, dass nur der Vergleichsoperator (a = 255) in der 
numeric_std überladen wurde, der Zuweisungsoperator (a <= 255) leider 
nicht...    :-(
Und das obwohl die Zahl 255 definitiv immer das Bitmuster x"FF" ergeben 
wird, egal ob signed oder unsigend.

> und wieso gibt es keinen Datentyp std_logic_int ?
Du kannst dir doch selber einen definieren  ;-)

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.