mikrocontroller.net

Forum: FPGA, VHDL & Co. Koeffizient berechnen


Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: D. I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Duke Scarring (Gast)
Datum:

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

Duke

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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 
:-/

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht 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)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.