Frage zur Rundung bei integer in VHDL

Gast #1923843
Ich habe einen Wert, der aus einem Berechungsalgo kommt und im Format 
8.2 dargestellt wird, d.h. Wert von -127 bis 127 und 2 Nachkommastellen.

Ich will nun den Wert auf -31.0 bis 31.0 reduzieren,  wobei ich ja 4 
Stellen verwerfen muss. Wie kann ich das richtig runden?

Wenn ich wie üblich 0,5 addiere, verschiebt sich doch das Fenster, d.h. 
eine 27.5 wird auf 28 aber ein -27.5 auf -27 geschoben.

Wie macht man das?
Moderator (Firma: Titel) Persönliche Seite #1923972
Das ist kein VHDL-spezifisches Problem, sondern ein allgemein ein 
Problem bei der Division von vorzeichenbehafteten Zahlen:
Beitrag "Integer-Division durch Zweierpotenz - immer synthetisierbar?"

Frank schrieb:
> Wenn ich wie üblich 0,5 addiere, verschiebt sich doch das Fenster, d.h.
> eine 27.5 wird auf 28 aber ein -27.5 auf -27 geschoben.
Und das ist auch richtig so, wenn "aufgerundet" werden soll. Denn 
"aufgerundet" heißt: zu positiven Zahlen hin...

Es sei denn, du willst ein ganz anderes Rundungsverfahren:
http://de.wikipedia.org/wiki/Rundung
Gast #1924146
Also es ist so, daß die Werte, die gezeigt werden, z.B. Folgende sind

00000101.01 ->  9.25
00001110.10 -> 14.50
00011101.11 -> 29.75

Relevant sind die ersten 6 Stellen, also:

000001/0101 -> +1.2x  -> 1.0
000011/1010 -> +3.5x  -> 4.0
000111/0111 -> +7.2x  -> 7.0

Aber:

111110/1010 -> -1.2x  -> -1.0
111100/1101 -> -3.5x  -> -4.0
111000/1000 -> -7.2x  -> -7.0

Die Rundung würde nicht funktionieren. Muss ich dann eine 
Fallunterscheidung +/- machen?
#1926183
Nein, eine Fallunterscheidung brauchst du nicht unbedingt, du könntest 
auch das Vorzeichen merken, dann Absolutbetrag ausrechnen, runden und 
das Vorzeichen wieder anbringen. Kann u.U. insgesamt einfacher als eine 
Fallunterscheidung sein, wenn deine Rundungsimplementierung kompliziert 
ist.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 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.