Addition Signed Überlauf / Übertrag, loop

Gast #483494
Lesenswert?

Hallo Leute,
ich hab folgendes Problem

a : 16 bit lang, b: 16 bit lang, y: 33 bit lang

diese Variablen werden im folgenden Ausdruck verwendet

for i in 0 to 5 loop
y := y + b * a
end loop;

Das Problem sind die Überträge, wenn man eine Variable zu sich selbst 
addiert. Ich habe mir folgendes überlegt:

for i in 0 to 5 loop
y := resize(y(32 downto 1),33)+resize(b*a),33);
end loop;

Habe ich damit alle Überträge beachtet? Ist das überhaupt richtig?
Ist der Fehler durch das Abschneiden des letzten Bits zu groß?
Gibt es eine elegantere Lösung?
Folgende Bedingung noch: Die Bitlänge der Summanden muss laut 
Entwicklungsungsumgebung gleich der Länge der Summe sein.

Besten Dank, ich hoffe ich habe mich verständlich ausgedrückt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren