www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Summe "signed"-Zahlen


Autor: heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: ING Presssack (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke

Autor: VHDL_Mensch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Macht das in der Synthese einen Unterschied, ob man zwei 
12Bit-Signed-Werte addiert oder den Umweg über Integer geht?

Autor: tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kommt dasselbe raus

Autor: VHDL_Mensch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tatsächlich? Integer ist doch 32Bit breit!?

Autor: Jürgen Schuhmacher (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Rick Dangerus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
result <= signed( a(a'high) & a ) + signed( b(b'high) & b );

Rick

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.