Frage zur Rundung bei integer in VHDL

Gast #1923843
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren