Forum: FPGA, VHDL & Co. 32 Bit Division mit Nachkommastelle


von Tom (Gast)


Lesenswert?

Hallo VHDL Profi's,

ich benötige für eine32 Bit Division eine Genauigkeit von 3 
Nachkommastellen. Empfiehlt es sich dann ein Fixed Point Divider zu 
nehmen? (Anzahl der Nachkommastellen soll immer gleich bleiben, evtl. 
auch nur zwei)

von Duke Scarring (Gast)


Lesenswert?

Tom schrieb:
> ich benötige für eine32 Bit Division eine Genauigkeit von 3
> Nachkommastellen.
Das eine hat mit dem anderen erstmal nicht soo viel zu tun.

> Empfiehlt es sich dann ein Fixed Point Divider zu
> nehmen? (Anzahl der Nachkommastellen soll immer gleich bleiben, evtl.
> auch nur zwei)
Welcher Alternativen kennst Du denn noch?

Duke

von Tom (Gast)


Lesenswert?

Duke Scarring schrieb:
> Welcher Alternativen kennst Du denn noch?

Beispielsweise den Floating Point Divider.

Wenn ich einen "einfachen" Radix-2 Dividierer nehme, den man hier im 
Forum des öfteren findet, wie realisiert man die Nachkommastellen anhand 
des Restes?

Muss ich dazu den Divdenden  "aufblähen", beispielsweise um 3 Stellen, 
damit ein größerer Quotient heraus kommt und ich die 3 dazugekommenden 
Reststellen dann als Nachkommawerte betrachten kann?

Also beispielsweise so:
1
47 / 8 = 5,875
2
47000 / 8 = 5875

So würde ich dann alles nach der 5 als Nachkommastelle betrachten. Aber 
lässt sich das auch im Binären so umsetzen?

von Uwe (Gast)


Lesenswert?

> Aber lässt sich das auch im Binären so umsetzen?
Klar du mußt halt das komma auf eine 2er Potenz festlegen und nicht auf 
eine 10er Potenz.
Also Dezimal : 100er 10er 1er , 10tel 100tel 1000tel  10000tel
Binär        : 4er   2er  1er , halbe 4tel   8tel     16tel

von Uwe (Gast)


Lesenswert?

Da würden sich natürlich 1024 also 10Bit Nachkommastellen anbieten. dann 
bleiben dir 22 Bit vor dem Komma also ca. 4000000.

von Tom (Gast)


Lesenswert?

Uwe schrieb:
> Da würden sich natürlich 1024 also 10Bit Nachkommastellen anbieten. dann
> bleiben dir 22 Bit vor dem Komma also ca. 4000000.

Und genau da entsteht mein Problem. Meine Werte, bzw. mein Dividend kann 
die 32 Bit unter bestimmten Voraussetzungen ausnutzen. Mein Xilinx FPGA 
unterstützt aber nicht die IP Cores für die 64 Bit Division. Und einen 
geeigneten Divisionsalgorithmus habe ich nicht für 64 Bit gefunden.

Das würde also bedeuten, dass meine maximale Wertigkeit des Dividenden 
auf 22 Bit schrumpfen (wenn ich also 3 Nachkommastellen bedenke) oder 
ich selbst einen 64 Bit Divider schreiben müsste?

von Uwe (Gast)


Lesenswert?

Nö nur 32Bit plus 10Bit also 42Bit.

von Gorgonzola (Gast)


Lesenswert?

Tom schrieb:
> Wenn ich einen "einfachen" Radix-2 Dividierer nehme, den man hier im
>
> Forum des öfteren findet, wie realisiert man die Nachkommastellen anhand
>
> des Restes?

Indem Du vor der Division den Ausgangswert um einige Stellen schiebst.

von Tom (Gast)


Lesenswert?

Das würde bedeuten, dass für 2 Nachkommastellen dann 7 Bit (128) 
ausreichen würden? (da ich max die 99 Darstellen möchte?)

Wie würde das Ganze in diesem Falle aussehen?

1
47 / 8 = 5,87
2
4700 / 8 = 587
3
4
101111 : 1000 = 101 Rest 111
5
47     : 8    =  5  Resr 7
6
7
8
4700            :        8    = 587               Rest 4
9
1001001011100   :      1000   = 1001001011        Rest 100

Jedoch gehe ich bei diesem Vorgehen in den Dezimalbereich über, um dann 
wieder in den binären zu wechseln. Das kommt mir irgendwie nicht richtig 
vor. Zumal ich hier auch nichts verschiebe.

Und wie ich die 5 von der ,87 trennen würde, weiß ich auch nicht.

Ein anderer Ansatz wäre vielleicht, dass ich 7 Nullen an die 101111 
hänge und damit rechne. Jedoch kommt dabei auch ein anderer Wert raus.

Hach, was können banale Dinge verwirrend sein.

von Duke Scarring (Gast)


Lesenswert?

Ich schreib das mal etwas um:

Tom schrieb:
> 101111 : 1000 = 101 Rest 111
> 47     : 8    =  5  Resr 7
47 : 8 = 5 + 7/8
101111 : 1000 =
101,111



> 4700            :        8    = 587               Rest 4
> 1001001011100   :      1000   = 1001001011        Rest 100
4700 : 8 = 587 + 4/8
100100101_1100  : 1000 =
1001001011,100

> Jedoch gehe ich bei diesem Vorgehen in den Dezimalbereich über, um dann
> wieder in den binären zu wechseln. Das kommt mir irgendwie nicht richtig
> vor. Zumal ich hier auch nichts verschiebe.
Fällt Dir was auf?

Duke

von Tom (Gast)


Lesenswert?

Das die Vorkommastelle die ganzzahligen Vielfache des Divisors und die 
Nachkommastelle das nicht ganzzahlige Verhältnis zwischen Rest und 
Divisor beschreibt.

Duke Scarring schrieb:
> Fällt Dir was auf?

Durch den Rest und dem Wissen, wie groß der Divisor ist, habe ich 
bereits meine gewünschte Nachkommastellenwertigkeit und brauche keine 
zusätzlichen Genauigkeitsbits? Bzw. man betrachet Ganzzahligen und 
Nichtganzzahligen Faktor seperat.

von Duke Scarring (Gast)


Lesenswert?

Tom schrieb:
> Das die Vorkommastelle die ganzzahligen Vielfache des Divisors und die
> Nachkommastelle das nicht ganzzahlige Verhältnis zwischen Rest und
> Divisor beschreibt.
So könnte man es sagen.

Tom schrieb:
> Das würde bedeuten, dass für 2 Nachkommastellen dann 7 Bit (128)
> ausreichen würden? (da ich max die 99 Darstellen möchte?)
Ja.
Aber: Du solltest die Nachkommastellen nicht in xx/100stel sondern in 
xx/128stel einteilen.
Nur damit wird die Rechnung einfach.

Duke

von Selbstständiger (Gast)


Lesenswert?

Duke Scarring schrieb:
> Nur damit wird die Rechnung einfach.

und richtig!

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.