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


von Rene (Gast)


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

von Uwe Bonnes (Gast)


Lesenswert?

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

von Rene (Gast)


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 :-(

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.

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.