Summe "signed"-Zahlen

Gast #451516
Lesenswert?

Nein, er sollte schon die die Zahlen selbst vorzeichenrichtig erweitern, 
auf 13 bit, und dann addieren. Dann stimmt das Ergebnis auf jeden Fall.

zB, wenn du signale a und b mit je 12bit als std_logic_vector hast, 
folgendes in den Prozess:

zu variablen:
a_temp: signed(12 downto 0);
b_temp: signed(12 downto 0);
erg: signed(12 downto 0);

im prozess:
if a(11) = 1 then -- Vorzeichenrichtiges erweitern
  a_temp := signed("1" & a);
else
  a_temp := signed("0" & a);
end

if b(11) = 1 then -- Vorzeichenrichtiges erweitern
  b_temp := signed("1" & b);
else
  b_temp := signed("0" & b);
end

erg := a + b; -- und addieren
Gast #451517
Lesenswert?

Korrektur: Zumindest vermute ich, dasss man ne Fehlermeldung bekommt, 
wenn man die 12+12=13 Addition von ING Presssack einfach so versucht. 
Wenn es doch geht , dann nehme ich meinen Kommentar zurück, würde die 
Sache natürlich einfacher machen ;)
Gast #451546
Lesenswert?

man man man, warum einfach wenn es nicht auch kompliziert geht:

v1 und v2 seien std_logic_vector breite 12
erg das Signal in dass das Ergebniss soll breite 13

erg <=  conv_std_logic_vector(
               conv_integer(signed(v1)) +
               conv_integer(signed(v2))
                             , erg'left + 1);

Bibliotheken: arith & signed
Gast #452872
Lesenswert?

@Tobias:
Die Bibliotheken: arith & signed
sollte man vermeiden, weil Synthesetoolabhängig. Besser ist 
numeric_std.all.


@Matthias:
Zum vorzeichenrichtig Addieren muß man nur das erste Bit 
vervielfältigen, siehe auch Tietze/Schenk, Abschnitt 2er-Komplement.

@heinz:
Also lieber so:
1
result <= signed( a(a'high) & a ) + signed( b(b'high) & b );

Rick

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