Ich arbeite an einem VHDL/FPGA-Projekt mit dem VGA-Modul. Ich versuche, ein Objekt mit einer Beschleunigung (Schwerkraft) fallen zu lassen. Ich habe eine Antwort auf ein anderes Problem gefunden, und es wird vorgeschlagen, etwas Ähnliches wie diese Gleichungen zu implementieren:
Position_nächster <= Position_reg + Zeitschritt*Geschwindigkeit_reg ;
Velocity_next <= Velocity_reg + timestep*Acceleration ;
Wobei timesetp in meinem Fall die Bildzeit ist, die 1/60fps beträgt. Die Beschleunigung (Schwerkraft) wird eine konstante Zahl sein. Das Ergebnis der beiden Gleichungen ist ein Fließkommawert. Das ist ein Problem, da der minimale Schritt, den mein Objekt machen kann, 1 Pixel pro Frame beträgt. Irgendeine Idee, wie man dieses Problem lösen kann.
Zwischen Gleitkommazahlen (schwierig zu implementieren, ressourcenintensiv) und Ganzzahlen (nicht genügend Genauigkeit) gibt es eine Zwischenstufe: Sie heißt Festkomma- Mathematik. Der Umgang mit Festkommazahlen ist nicht viel schwieriger als mit ganzen Zahlen. Und das reicht in deinem Fall.
Die Grundidee ist, dass Sie jeden Wert durch eine ganze Zahl darstellen. Die Entsprechung zwischen beiden erfolgt einfach durch Multiplikation oder Division durch einen festen Wert (normalerweise eine Zweierpotenz, um es einfacher zu machen). Wenn Sie beispielsweise das Verhältnis auf 256 einstellen, bedeutet dies, dass der Wert 1,5 durch die Zahl 16#180# dargestellt wird . Denn 180 in hex (= 384 in dec) dividiert durch 256 macht 1,5 . Eine andere Möglichkeit, es zu sehen, ist, dass die gespeicherte Zahl eine ganze Zahl von 1/256-tel-Einheiten darstellt.
Das bedeutet, dass sich die Implementierung von Addition und Subtraktion gegenüber der üblichen Integer-Implementierung nicht ändert. Die Multiplikation ist der klassischen ganzzahligen Multiplikation sehr ähnlich, Sie müssen nur danach durch Ihr Verhältnis dividieren (oder einfach die richtige Anzahl von Bits verschieben, wenn es sich um eine Zweierpotenz handelt).
Die einzige Entscheidung, die Sie treffen müssen, besteht darin, das Verhältnis angemessen zu wählen, damit Sie die Werte, die Sie in Ihrem speziellen Fall benötigen, genau darstellen können.
FPGA-Distributoren bieten häufig IP-Cores an, die Gleitkommaoperationen ausführen können. Beispielsweise bietet Intel/Altera eine Reihe von Gleitkomma-IP-Kernen:
https://www.altera.com/content/dam/altera-www/global/en_US/pdfs/literature/ug/ug_altfp_mfug.pdf
Ich kann sagen, dass sie funktionieren, da ich damit einen Echtzeit-Fraktalrechner erstellt habe.
Andi aka
atarif
Andi aka
atarif
Andi aka