www.mikrocontroller.net

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


Autor: Michael Kondor (Gast)
Datum:

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

Autor: Fehlerteufel (Gast)
Datum:

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

Autor: Plip (Gast)
Datum:

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

Autor: Morin (Gast)
Datum:

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

Autor: Matthias (Gast)
Datum:

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

Autor: Holger Lichtmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso 1 addieren?

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

Autor: Karl (Gast)
Datum:

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

Autor: Morin (Gast)
Datum:

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

1....10 ist aber -2.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

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.