Unsigned to Signed manuell in VHDL aus Vektorebene

Gast #3295625
Lesenswert?

Nachdem ich mich fürs Rechnen in VHDL schon vor Jahren an die "moderne" 
Arbeitsweise mit integer und der numeric gewöhnt habe, darf ich nun 
wieder mal SV mit std_logic machen (der Verwedung der alten Bibs in 
existentem Code wegen). So muss ich z.B. einen unsigned16 (von 0 ... 
65535) auf einen signed16 verwandeln und habe deshalb einfach 32768 
abgezogen. Stimmt das so:

1) out16 <= std_logic_vector (unsigned(in) - 32768)

oder muss ich über den Umweg das signed gehen?

2) out16 <= std_logic_vector (signed(in) - 32768)

Ich bin mir wegen der Spiegelung der Werte bei unsigend nicht sicher. 
Bei einer reinen Negation mache ich das nämlich immer mit "not". Von 
daher ist das meines Erachtens falsch und ich brauche ein Bit mehr?

3) out17 <= std_logic_vector (signed('0' & in) - 32768)

Das müsste in jedem Fall funktionieren. Diesbezüglich bin ich mir nur 
nicht sicher, welche Bits ich beim Übergang von 17Bit zu 16Bit weglassen 
soll.

3a) out16 <= out17 (15 downto 0) schneidet ja das 17. (Negativ-) Bit 
weg. Deshalb würde ich es so machen wollen:

3b) out16 <= out17 (16) & out17 (14 downto 0)

Oder ist das falsch gedacht?



???
Moderator (Firma: Titel) Persönliche Seite #3295994
Lesenswert?

Bastler82 schrieb:
> So muss ich z.B. einen unsigned16 (von 0 ... 65535) auf einen signed16
> verwandeln und habe deshalb einfach 32768 abgezogen. Stimmt das so:
Vorneweg: ein unsigned16 passt nicht in einen signed16.

> out16 <= out17 (15 downto 0) schneidet ja das 17. (Negativ-) Bit weg.
Es gibt nicht nur das "eine" Vorzeichen Flag.
Denn sonst wäre ja bei 8 Bit der Wert "eins" = "00000001"
und der Wert "minus eins" das selbe,
nur mit "negativ-Bit" ="10000001". Und das stimmt so ja nicht.
Und vor allem gäbe es eine positive und eine negative "null":
+0 = "00000000"  und
-0 = "10000000"

> Oder ist das falsch gedacht?
Ja. Du unterschlägst eine Hälfte des Zahlenbereichs.
Es ist einfach so, dass eine signed "zehn" und eine unsigned "zehn" 
genau gleich aussehen. Da muss man nichts subtrahieren.
Und ein unsigned "vierzigtausend" passt gar nicht in einen gleich großen 
signed Vektor...
Gast #3296355
Lesenswert?

Bastler82 schrieb:
> welche Bits ich beim Übergang von 17Bit zu 16Bit weglassen
> soll.
Wieso willst Du überhaupt eins weglassen?

Kannst Du den ganzen Kram nicht einfach simulieren und schauen,ob das 
rauskommt, was Du haben willst?

Ich hab mir das jetzt dreimal durchgelesenm verstehe aber nicht, was Du 
egentlich tun willst.

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