Gast
#451203
Ich habe hier 2 std_logic_vectoren mit "signed" Zahlen a 12 bit. Diese Vectoren will ich Vorzeichenrichtig addieren und einen 13 bit Ausgangsvektor bekommen. Geht das mit der ieee Library? Mfg Heinz
|
Anzeige
|
Summe "signed"-Zahlen
Gast
#451203
Ich habe hier 2 std_logic_vectoren mit "signed" Zahlen a 12 bit. Diese Vectoren will ich Vorzeichenrichtig addieren und einen 13 bit Ausgangsvektor bekommen. Geht das mit der ieee Library? Mfg Heinz
Gast
#451208
Ja, musst nur vorher das Ergebnis erweitern. "erg" als 12 downto 0 und dann erg <= a + b, bei "a" = 11 downto 0 wenn nicht, nimm unsigned-lib
Gast
#451516
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
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
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
#451553
Danke
Gast
#451574
Macht das in der Synthese einen Unterschied, ob man zwei 12Bit-Signed-Werte addiert oder den Umweg über Integer geht?
Gast
#451584
kommt dasselbe raus
Gast
#451665
Tatsächlich? Integer ist doch 32Bit breit!? Ja, ist 32 Bit, aber real physikalisch wird nur das erzeugt, was an "Leitungen" = Signalen auch benötigt wird. Der Rest fällt dank intelligenter Synthese unter den Tisch. Zur Aufgabe: Er addiert signed - dher muss man erst vorzeichenrichtig weitern. Allerding ergeben zewi auf 13 erweiterte signed-Zahlen u.U. einen 14Bit-Vector.
Gast
#452872
@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:
Rick Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|