www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Dezimal und Hexadezimal


Autor: Frank (Gast)
Datum:

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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
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
a <= conv_std_logic_vector(255);  -- ohne Garantie, da muß ich selber immer nachschauen  ;-)

Autor: dito (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So ist es korrekt:
a <= conv_std_logic_vector(255, a'length);


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

Autor: Frank (Gast)
Datum:

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

Autor: Mike (Gast)
Datum:

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

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.