Hi möchte bespielsweise 2 16Bit Werte (in std_logic_vector) also signal sig1, sig2 : std_logic_vector (15 downto 0); miteinander addieren und ebenfalls als 16Bit-Wert ausgeben. was ich machen muss ist klar: Ich benötige eine Ergebnis-Variable (hier ein signal natürlich) mit 16 Bit Breite! also signal sig_result : std_logic_vector (16 downto 0); mein Versuch die Addition durchzuführen war bisher: signal sig_res_int : integer; dann sig_res_int <= to_integer(signed(sig1)) + to_integer(signed(sig2)); dann sig_res <= std_logic_vector(to_signed(sig_res_int)); leider bekomme ich auf diese Weise immmer Überläufe in meinem Ergebnis! Kann ich nicht einfach 2 16 Bit Signale addieren, als 17Bit Signal speicheren und dann einfach nur die oberen Bits lesen und als 16 Bit Ergebnis speichern ?
VDHL-All schrieb: > Kann ich nicht einfach 2 16 Bit Signale addieren, als 17Bit Signal > speicheren und dann einfach nur die oberen Bits lesen und als 16 Bit > Ergebnis speichern ? Ja, mensch kann. Nachhak: sind die 16 bit signed oder unsigned?
Frank Frimmler schrieb: > Ja, mensch kann. > Nachhak: sind die 16 bit signed oder unsigned? Die sind "signed" hab jetzt was funktionierendes "durch Probieren" als mit Simu gefunden: signal sig_res_tmp : signed (16 downto 0); signal sig1, sig2, sig_result : std_logic_vector(15 downto 0); sig_res_tmp <= to_signed(to_integer(signed(sig1)),sig_res_tmp'length) + to_signed(to_integer(signed(sig2)),sig_res_tmp'length); dann sig_result <= std_logic_vector(sig_res_tmp(16 downto 1)); -- auf 16 Bit abschneiden!
VDHL-All schrieb: > dann einfach nur die oberen Bits lesen Du willst also einen Mittelwert ((a+b)/2) bilden? > leider bekomme ich auf diese Weise immmer Überläufe in meinem Ergebnis! Definiere "Überläufe"... Das wäre auch einen Versuch wert:
1 | use IEEE.NUMERIC_STD.ALL; |
2 | :
|
3 | sig_result <= std_logic_vector(shift_right(resize(signed(sig1),17) + resize(signed(sig2),17),1)); |
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.