vorzeichenbehafteter rechtshift in VHDL

OP #5789830
Lesenswert?
• ▲
▼
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 #5789908
Lesenswert?
• ▲
▼
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 #5790058
Lesenswert?
• ▲
▼
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 #5867693
Lesenswert?
• ▲
▼
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

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.

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.