www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Carry einer signed-Addition? Wie?


Autor: Rene (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Forum,
ich stehe mal wieder vor einem kleinen Problem:
Ich möchte bei einer Addition das Carry-Bit speichern. Nun habe ich 
gedacht, dass ich doch eigentlich sowas wie
signed(resize(a, länge + 1)) + signed(resize(a, länge + 1)) mache und 
mir das neue MSB der Addition nehme (als Carry), aber leider meckert der 
Compiler immer, dass ich das nicht machen darf.

Mir fällt nun leider keine andere einfache Lösung ein?

Muss ich dazu wirklich selbst einen Addierer bauen?


Für Anregungen bin ich dankbar!

MfG Rene

Autor: Uwe Bonnes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Berechne ein Bit mehr als gebraucht, und wenn die beiden obersten Bits 
gleich sind, hats Du einen Ueberlauf.

Autor: Rene (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In meinem obigen Beispiel
signed(resize(a, länge + 1)) + signed(resize(a, länge + 1))

muss es natürlich
signed(resize(a, länge + 1)) + signed(resize(b, länge + 1))
heißen.

Uwe Bonnes schrieb:
> Berechne ein Bit mehr als gebraucht, und wenn die beiden obersten Bits
> gleich sind, hats Du einen Ueberlauf.

Hm, ich steh wohl auf dem Schlauch g
Ich habe über mein Beispiel ja versucht, das die ganze Berechnung mit 
einem Bit mehr durchgeführt wird, aber dann müsste es ja auch reichen, 
wenn ich mir das oberste Bit des Ergebnisses der Addition anschaue?

Davon abgesehen:
Ich kann wohl leider nicht mit
(signed(resize(a, länge + 1)) + signed(resize(b, länge + 1)))(MSB)
nur auf den höchsten Index zugreifen :-(

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich möchte bei einer Addition das Carry-Bit speichern.
Bei einer signed Addition gibt es kein Carry-Bit im eigentlichen Sinn.

> signed(resize(a, länge + 1)) + signed(resize(a, länge + 1)) mache und
> mir das neue MSB der Addition nehme (als Carry)
Das MSB ist das Vorzeichen  :-o

Was willst du denn eigentlich wirklich?
Du willst irgendwas berechnen und meinst, im MSB steckt relevante 
Information?

> Ich kann wohl leider nicht mit
> (signed(resize(a, länge + 1)) + signed(resize(b, länge + 1)))(MSB)
> nur auf den höchsten Index zugreifen :-(
Da wird wohl ein Umweg über ein Hilfssignal nötig sein.

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.