www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Fixed Point Arithmetik


Autor: Sami Fanna (sioufa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Ich habe eine Anfänger-Frage:

Ich habe ein Algorithmus in C geschrieben, und möchte es auf Basis von 
Festpunkt-Arithmetik umwandeln.
Was brauche ich dafür und was muss ich tun?. Gibt es bereits für C 
Bibliotheken dafür? und falls ja wo finde ich diese?

Danke

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich nehme an du willst das auf ein FPGA umsetzen (ansonsten bist du hier 
im falschen Forum...). Mit C hast du dort erstmal schlechte Karten. Es 
gibt zwar Tools, aber die sind teuer.

Zur einfachen Umsetzung sollte dein Algorithmus möglichst ohne 
komplizierte Funktionen auskommen (keine Division/Wurzelziehen/Sinus 
usw.). Als nächstes musst du noch die Anzahl der benötigten Stellen 
ermitteln (Vor- und Nachkomma). Dazu kannst du dir den Fehler ausrechnen 
oder den Algorithmus einfach mal mit verschiedenen Einstellungen auf 
deinem Rechner simulieren. Dazu einen der Int-Datentypen von C 
verwenden. Aber ein paar genauere Angaben wären schon gut.

Autor: Sami Fanna (sioufa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mike wrote:
> Ich nehme an du willst das auf ein FPGA umsetzen (ansonsten bist du hier
> im falschen Forum...). Mit C hast du dort erstmal schlechte Karten. Es
> gibt zwar Tools, aber die sind teuer.
>
> Zur einfachen Umsetzung sollte dein Algorithmus möglichst ohne
> komplizierte Funktionen auskommen (keine Division/Wurzelziehen/Sinus
> usw.). Als nächstes musst du noch die Anzahl der benötigten Stellen
> ermitteln (Vor- und Nachkomma). Dazu kannst du dir den Fehler ausrechnen
> oder den Algorithmus einfach mal mit verschiedenen Einstellungen auf
> deinem Rechner simulieren. Dazu einen der Int-Datentypen von C
> verwenden. Aber ein paar genauere Angaben wären schon gut.

Das Algorithmus kodiert ppm-Bilder (der inhalt besteht nur aus Zahlen 
zwischen 0 und 255) in Jpeg-LS (bzw in Lossless Jpeg) und dekodiert sie 
zurück. Es handelt sich nur um einfache mathematische Funktionen 
(addition, subtraktion, es gibt keinen <math.h>) und ich würde mit 
höchstens 2 Nachkommastellen auskommen. Was meinst du mit 
"Int-Datentypen von C
verwenden" ?

Autor: Besserwisser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stelle Deinen Algo erstmal auf INT um und teste, ob du überall korrekt 
rundest und hochaufgelöst rechnest. Dann Ablauf von Rechenstrukturen 
trennen. Wenn du wirklich so wenige math benötigst ist, es sicher 
einfach, zumal eine Division im FPGA auch ein klacks ist. Wurzel etwas 
weniger und sin reicht meist über Tablle, wenn man ordentlich 
interpolieren kann.

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Was meinst du mit "Int-Datentypen von C verwenden" ?

Ich würde vor der Umsetzung in einem FPGA den Algorithmus erstmal in C 
auf Festkommaarithmetik umstellen. Damit kannst du recht einfach 
ausprobieren unter welchen Bedingungen er noch funktioniert. In C wäre 
das die Datentypen short int, int oder long (mit oder ohne Vorzeichen). 
Das weisst du als C-Programmierer aber sicherlich selber ;).

Um möglichst einfach von C auf das FPGA zu kommen könntest du dir mal 
SystemC anschauen. Wikipedia liefert da ein paar Links. Ansonsten wirst 
du dich wohl mit VHDL auseinander setzen müssen. Für ein erstes Projekt 
ist das aber ziemlich heftig.

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Besserwisser

Das Division nicht weiter schwierig ist stimmt schon. Problem ist nur 
das sie vergleichsweise lange dauert und einiges an Platz wegnimmt. Wenn 
man eine Division vermeiden kann, dann sollte man das tun (z.B. in 
Multiplikation umwandeln).

Autor: Sami Fanna (sioufa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mike wrote:

> Ich würde vor der Umsetzung in einem FPGA den Algorithmus erstmal in C
> auf Festkommaarithmetik umstellen. Damit kannst du recht einfach
> ausprobieren unter welchen Bedingungen er noch funktioniert. In C wäre
> das die Datentypen short int, int oder long (mit oder ohne Vorzeichen).
> Das weisst du als C-Programmierer aber sicherlich selber ;).

d.h. wenn das Programm nur int-Datentypen ein- und ausgibt (ist auch der 
Fall) wäre es bereits auf Festkommaarithmetik umgestellt? Es geht mir 
zuerst darum diese Umstellung durchzuziehen.

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Sami Fanna

>d.h. wenn das Programm nur int-Datentypen ein- und ausgibt (ist auch der
>Fall) wäre es bereits auf Festkommaarithmetik umgestellt? Es geht mir

Ja. Aber auch die interne Verarbeitung muss rein auf INT Typen basieren.

MfG
Falk

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich weiß ja nicht wo das Problem ist. Da er Zahlen zwischen 0 und 255 
benutzt sind keine Fließkommazahlen vorhanden. Du einfache Additionen 
und Subtraktionen ändert sich dieser Zustand auch nicht ,es sei denn Du 
mittelst über mehere Werte.

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.