Forum: FPGA, VHDL & Co. Koeffizient berechnen


von Mike (Gast)


Lesenswert?

Hallo,

vielleicht könnt ihr mir ja weiterhelfen. Ich zerbreche mir nämlich 
schon seit Tagen den Kopf darüber wie ich den folgenden Koeffizienten 
effizient berechnen kann:

256 * a/(a+b)

a und b sind 32 Bit unsigned-Werte. Die 256 dient nur als 
Skalierungsfakor.

Eine 32 Bit Ganzzahl-Division mit dem ISE Divider-Core verschlingt doch 
tatsächlich 1766 Slices, 3312 FF's und 1345 LUT's, weshalb diese Lösung 
für mich wegfällt.

Ich überlege die ganze Zeit, ob es dafür einen tollen Trick gibt, z. B. 
mit Look-up-Tabellen. Wenn jemand ein Paper o. ä. kennt, welches sich 
dem Thema gewidmet hat, würde mich das auch interessieren.

Ein anderer Ansatz wäre, den Gleikomma-Dividierer-Core zu verwenden. Das 
mache ich aber nur, falls es keine bessere Lösung geben sollte.

Gruß,
Mike

von D. I. (Gast)


Lesenswert?


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


Lesenswert?

> Eine 32 Bit Ganzzahl-Division mit dem ISE Divider-Core verschlingt doch
> tatsächlich 1766 Slices, 3312 FF's und 1345 LUT's
Der kann offenbar mehr als unbedingt nötig ;-)
Ich habe mal meine Syntheseergebnisse für eine 32-bit Unsigned Division 
angeschaut, und folgendes erhalten:
Number of Slices           189
Number of Slice Flip Flops 138
Number of 4 input LUTs     358

von Mike (Gast)


Lesenswert?

Mein erhöhter Ressourcen-Verbrauch lässt sich ganz einfach erklären: Ich 
brauche das Ergebnis nach einem Takt. Habe ich vergessen zu erwähnen. 
Wenn man deinen Algoritmus abrollen würde, käme sicherlich ein ähnlicher 
Verbruach raus.

von Mike (Gast)


Lesenswert?

Meine obige Aussage ist nicht ganz richtig. Richtig müsste es heißen: 
Ich muss mit jedem Takt neue Operanden einlesen können. D. h. eine 
Pipeline-Verarbeitung wäre möglich, aber einen Pipeline-fähigen 
Divisions-Algorithmus habe ich leider noch nicht gesehen.

von Duke Scarring (Gast)


Lesenswert?

@Mike:
Schnell oder klein, da muß man sich bei FPGAs entscheiden...

Duke

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


Lesenswert?

> Ich brauche das Ergebnis nach einem Takt.
> Ich muss mit jedem Takt neue Operanden einlesen können.
Das erklärt dann auch die vielen FFs beim Xilinx-Core. Dort ist offenbar 
auch eine Pipeline-Struktur zugange.

> Wenn man deinen Algoritmus abrollen würde, käme sicherlich ein ähnlicher
> Verbruach raus.
Richtig.

> Ich überlege die ganze Zeit, ob es dafür einen tollen Trick gibt, z. B.
> mit Look-up-Tabellen.
Deine LUTs wären zu groß, um sinnvoll in FPGAs implementiert zu werden 
:-/

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Kannst du Einschränkungen bei Genauigkeit oder Wertebereich machen? 
Ändert sich vielleicht einer der Parameter nur selten, o.ä.? Andernfalls 
wird es da keine andere Lösung geben als eine ganz normale 32 
Bit-Division.

Um die Funktion mal anschaulich zu machen:
http://www01.wolframalpha.com/input/?i=a%2F(a%2Bb)

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.