Hallo zusammen,
ich muss einen Dividierer in VHDL bauen und bin bei der Recherche auf
den Artikel von Lothar gestoßen.
http://www.lothar-miller.de/s9y/archives/29-Division-in-VHDL.html
Leider habe ich folgende Einschränkungen:
- das Ergebnis ist immer <1,5
- oft sogar <1
Wenn ich also zwei 11Bit Werte dividieren muss, brauche ich also, um
nicht an Genauigkeit zu verlieren ein 12Bit Ergebnis. Ein Bit für die
2^1 Potenz, also die Vorkommestelle und 11Bit Nachkommastellen, oder?
In dem Dividierer von Lothar gibt es folgenden Sonderfall:
1 | -- Sonderfall: Divisor größer als Dividend
|
2 | if (dr>dd) then
|
3 | r <= dd;
|
4 | z <= done;
|
5 | end if;
|
Der bricht mir wohl in 95% meiner Dvisionen das Genick.
Zumal ich nicht verstehe, was genau an dieser Stelle gemacht wird.
Ich habe es versucht an einem Beispiel nachzuvollziehen, aber so richtig
komme ich auf keinen grünen Zweig.
278/314 = 0,88535031
00100010110/00100111010 = ??
Nach der Bedingung oben ist dr = 314 > dd = 278, also ist q = 0 und r =
00100010110
Wenn ich das nun aber wieder dezimal umrechne, kommt da eine 0,1357...
raus.
Wo habe ich noch einen Denkfehler?
Wie kann ich effektiv (heißt langsam aber mit wenig Ressourcen) zwei
11bit Zahlen dividieren? 11 Takte bei 11bit wären vollkommen i.O.!
Vielen Dank!
Andreas :)