Forum: FPGA, VHDL & Co. std_logic_vector als signed/unsigned behandelt


von gehm (Gast)


Lesenswert?

Hallo!

Ich habe gelesen, dass std_logic_vector als unsigned gehandhabt wird 
(z.B. bei vec1+vec2), sofern USE ieee.std_logic_unsigned.all; 
eingebunden wird. Das ist bei mir so auch der Fall, eine Addition von
1
  signal vec1 : std_logic_vector (3 downto 0) := "0110";
2
  signal vec2 : std_logic_vector (3 downto 0) := "0011";
3
  signal vec3 : std_logic_vector (3 downto 0) := "0110";

Ergibt bei mir 1111, also 15.
Kommentiere ich die Verwendung von "USE ieee.std_logic_unsigned.all;" 
aus, so wird mir gesagt das der Operator + nicht definiert ist. Soweit 
auch korrekt.
Binde ich nun

USE ieee.std_logic_signed.all;   (SIGNED)

ein, erhalte ich weiterhin 15 als Ergebnis. Wie wird jetzt mit den 
Vektoren gerechnet? Ich hätte erwartet,dass der Inhalt der Vektoren als 
Zweikomplement interpretiert wird. Ich hab da gerade echt ein Brett vor 
dem Kopf.

von Christian R. (supachris)


Lesenswert?

Benutz mal ieee.numeric_std.all damit rechnet der auf jeden Fall 
korrekt. Außerdem ist das immer eine Frage der Interpretation der 
Ergebnisse. Wenn du im Simulator die Anzeige auf unsiged stellst, 
erhältst du natürlich auch für Signed Werte die unsigned Repräsentation.

von gehm (Gast)


Lesenswert?

Ich mach jetzt wie es sich gehört: signed und unsigned wenn 
differenziert werden soll.

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


Lesenswert?

> erhalte ich weiterhin 15 als Ergebnis.
Wo siehst du das?
Im Simulator? Dann stell da mal die Anzeige auf signed um.

> erhalte ich weiterhin 15 als Ergebnis.
Was hättest du erwartet? Nachdem das ja auch 15 ergibt (weil keine 
negative Zahl dabei ist), stimmt das Ergebnis doch  :-o
Kritisch wirds dann, wenn das Ergebnis negativ wird, denn du hast in 
deinem Vektor keinen Platz für ein Vorzeichen...

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.