Betrag eines 2er-Komplements in VHDL

Gast #754036
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.
Gast
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.
Gast
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.