vorzeichenbehafteter rechtshift in VHDL

OP #5789830
Moin,

Ich hab' zwei std_logic_vector signale mit je 40 bit laenge: a und b. Da 
sind vorzeichenbehaftete Zahlen (2er komplement) drinnen.

Jetzt will ich sowas berechnen lassen:
1
b = b + a/1024

koennte ich ja so hinschreiben:
1
b <= b + (a(39) & a(39) & a(39) & a(39) & a(39) & a(39) & a(39) & a(39) & a(39) & a(39 downto 10))

Sieht - hm - unschoen aus. (Wie) gehts schoener?

Gruss
WK
Gast
Ich weiß es gerade nicht genau. Aber für unsigned gibt es Funktionen 
oder Befehle dafür. Guck mal nach shr, shl. Da müsstest du mehr finden.
Also in unsigned casten, schieben und wieder zurückcasten.
(Firma: www.elpra.de) Persönliche Seite
unknown schrieb:
> probier mal so:b <= std_logic_vector(signed(b) + resize(signed(a(39
> downto 10)),b'length));

Alternativ dazu:
1
b <= std_logic_vector(signed(b) + shift_right(signed(a), 10));

Durfte auf das gleiche rauskommen. Evtl. sogar:
1
b <= std_logic_vector(signed(b) + signed(a)/1024);

Muesste man mal das Synthese Resultat anschauen.
Gast
Markus F. schrieb:
> Warum definierst Du die Signale überhaupt erst als std_logic_vector,
> wenn Du damit rechnen willst?
Tja, das kommt davon, wenn Hardwerker zu sehr an ihren Bits kleben.


Lothar M. schrieb:
> Und immer im Auge behalten: eine Division einer negativen Zahl durch
> 1024 ist prinzipiell anders als ein vorzeichenbehafteter Rechtsshift
> dieser Zahl um 10. Dabei wird nämlich unterschiedlich gerundet...
Aber nur, wenn man beim Rechtsschiften vorher nicht korrekt gerundet 
hat, was man aber müsste, wenn man eine Division beschreibt.

Siehe "Runden in VHDL"!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.