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 ?
> 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 ;-) |
So ist es korrekt:
1 | a <= conv_std_logic_vector(255, a'length); |
Aber wie Lothar schon gesagt hat, benutz lieber die numeric_std.
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 ?
> 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....
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.