Forum: FPGA, VHDL & Co. Betrag eines 2er-Komplements in VHDL


von Michael Kondor (Gast)


Lesenswert?

Hallo,
ich versuche gerade den Ausgangs-Bitvektor eines Digitalfilters 
(2er-Komplement) testweise auf 16 LEDs anzuzeigen.
Dazu möchte ich vorher den Betrag bilden.

abs_sig <= conv_std_logic_vector(conv_unsigned(abs(signed(fir_out_sig(37 
downto 22))),16),16);

scheint mir etwas zu kompliziert zu sein. Und das Ergebnis scheint 
invertiert zu sein..

Wenn ich

abs(signed(fir_out_sig(37 downto 22)));

nehme, gibt er mir doch eine SIGNED-Zahl zurück, was beim Betrag ja 
nicht nötig ist und somit das MSB "verschwendet" wird.


Wenn jemand eine einfache Lösung weiß, würde ich mich freuen.

M.K.

von Fehlerteufel (Gast)


Lesenswert?

warum willst du beim debuggen nicht das Vorzeichen "sehen", das ist doch 
wichtig beim debuggen?

von Plip (Gast)


Lesenswert?

Dann lass das MSB für die weitere Verwendung halt weg, wenns immer 0 
ist.

von Morin (Gast)


Lesenswert?

Ist es aber nicht. Der Betrag von 10000...0 (binär) ist wieder 10000...0 
(binär), also das MSB = 1.

von Matthias (Gast)


Lesenswert?

Für MSB = 0 kannst du es ja einfach abschneiden, die Zahl ist positiv. 
Für MSB = 1, also für eine negative Zahl, musst du die Rückwandlung 
machen, also Komplement bilden und 1 addieren.

von Holger Lichtmann (Gast)


Lesenswert?

Wieso 1 addieren?

Bei der Zahl 1xxxx10 hätte er z.B. - 1, das Komplement liefert doch 
bereits eine 1?

von Karl (Gast)


Lesenswert?

Das stimmt nicht. Schau dir nochmal genau das 2er Komplement an.
Unter dem Strich ist es egal, wie man das löst. Die abs() Funktion macht 
wahrscheinlich auch nichts anderes. Da der Zahlenraum unsymmetrisch ist, 
muss man sich für 100..000 halt was einfallen lassen.

von Morin (Gast)


Lesenswert?

> Bei der Zahl 1xxxx10 hätte er z.B. - 1, das Komplement liefert doch bereits eine 
1?

1....10 ist aber -2.

von Falk B. (falk)


Lesenswert?


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.