Forum: FPGA, VHDL & Co. Fixed Point Arithmetik


von Sami F. (sioufa)


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

von Mike (Gast)


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.

von Sami F. (sioufa)


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" ?

von Besserwisser (Gast)


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.

von Mike (Gast)


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.

von Mike (Gast)


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).

von Sami F. (sioufa)


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.

von Falk (Gast)


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

von Michael (Gast)


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.

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.