Forum: FPGA, VHDL & Co. Binäre Brüche


von Andi (loopy83)


Lesenswert?

Hallo zusammen,

Ich habe ein Rechenwerk in VHDL, in dem eine ganze Zahl mit einem Bruch 
multipliziert wird. Damit wird quasi eine Division erreicht.

Leider verstehe ich den Ansatz nicht ganz, wie man binär einen Bruch 
bilden kann.

Ich habe meinetwegen 0.1011 und das soll binär kodiert einer dezimal 
0,6875 entsprechen.

Kann mir jemand die Umrechnung erklären?
Denn mit normaler Umrechnung zwischen Basis2 und Basis10 hat das wohl 
nichts zu tun.

Ich habe schon gegooglelt, aber einen schlüssigen Ansatz habe ich nicht 
gefunden.

Vielen Dank,
Andi

von Sebastian W. (dl3yc)


Lesenswert?

Andreas B. schrieb:
> Ich habe meinetwegen 0.1011 und das soll binär kodiert einer dezimal
> 0,6875 entsprechen.

2^-1 + 2^-3 + 2^-4 = 0,5 + 0,125 + 0,0625 = 0,6875

HIH

von Martin (Gast)


Lesenswert?

Binär 0.1011 entspricht 1011 / 2^4, analog zu 0,6875 = 6875 / 10^4.
Wenn man das weiß, kann man 1011 in Dezimal umrechnen, das wären dann 
11. Nun muss man nur noch 11 / 2^4 berechnen und bekommt 0.6875.

Ich denke das sind Fixedpoint-Zahlen, wahrscheinlich wird einfach jede 
Zahl mit 2^4 multipliziert (oder um 4 Binärstellen verschoben) um 
Nachkommastellen zu bekommen. Auf diese Weise kann man dann Zahlen 
kleiner 1 darstellen und tatsächlich Divisionen durch Multiplikationen 
darstellen.

Allerdings muss man aufpassen, wenn man zwei Fixedpoint-Zahlen 
multipliziert, verschiebt sich das Komma:
1011/2^4 * 1011/2^4 = 0111 1001 / (2^4*^2^4) = 121 / 2^8 = 0.4727
Um wieder zu den Fixpoint-Zahlen mit dem Komma an der 4. Binärstelle zu 
kommen muss man also durch 2^4 teilen, oder halt Binär um 4 Stellen nach 
rechts schieben.

Martin

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Das findet sich was im 
Beitrag "Re: Digital Down Converter Bitbreiten" und im 
Beitrag "Re: Festkomma Berechnungen"


Andreas B. schrieb:
> Ich habe meinetwegen 0.1011 und das soll binär kodiert einer dezimal
> 0,6875 entsprechen.
> Kann mir jemand die Umrechnung erklären?
Rechne mal 1/16 * 11. Was kommt raus?
Kurz: bei 4 binären Nachkommastellen ist das LSB 1/16 wert.
Und du hast 11 davon...

von Yalu X. (yalu) (Moderator)


Lesenswert?

Die Darstellung gebrochener Zahlen im Binärsystem hat überhaupt nichts
Magisches an sich. Es ist einfach die logische Fortsetzung der Darstel-
lungen ganzer Zahlen, wobei die Exponenten der Stellenwerte der Nachkom-
mastellen eben negativ werden:

  http://de.wikipedia.org/wiki/Dualsystem#Definition_und_Darstellung

von Andi (loopy83)


Lesenswert?

Vielen Dank an alle!
Auf die Idee, die Folge ...2^1, 2^0 einfach ins Negative fortzuführen, 
bin ich nicht gekommen.

Gibt es einen fertigen Rechner zum fixen Überprüfen der Testbench  dazu?
Immer die ganzen nagativen 2er Potenzen nachrechnen ist selbst bei 
Stichproben mühsam.

Excel kann sicher sowas, aber das dauert länger als sinnvoll.

Vielen Dank!
Andi

von Yalu X. (yalu) (Moderator)


Lesenswert?

Andreas B. schrieb:
> Gibt es einen fertigen Rechner zum fixen Überprüfen der Testbench  dazu?

Google nannte mir dieses:

  http://www.mathsisfun.com/binary-decimal-hexadecimal-converter.html

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.