Guten Abend werte HDL-Freunde, in einem Design möchte ich einige Berechnungen in Float durchführen. Eine passende FPU habe ich mir bereits bei Opencores besorgt. Meine Datenquelle, ein differentieller ADC liefert allerdings nur Binary Offset Daten. Keine Eingangsspannungsdifferenz 0d, maximale Differenz 4095d. Um die Berechnungen in Float durchzuführen, muss ich die Eingangszahl noch nach Float umsetzen. Gibt es dafür bereits synthesefähige Implementierungen oder gar ein Package? Vielen Dank für eure Hilfe. mfg Andreas
Du fragst uns hier nicht im Ernst, wie man einen INT in einen FLOAT umsetzt? Dazu gibt es doch den massive INT_2_FLOAT IP-core von Xilinx. Kostet $999,- pro Jahr als site-Lizenz.
Sollte nocht so schwer sein, das selbst zu schreiben. Vorzeichenbit ist ja einfach, Exponent nach höchstwertigstem Einser bestimmen und die diesem höchstwertigsten Einser folgenden Bits in der Mantisse speichern..... Wenn man sich einfach mal anschaut, wie das alles so definiert ist, scheint das nicht so schwer zu sein: https://de.wikipedia.org/wiki/IEEE_754#Zahlenformate_und_andere_Festlegungen_des_IEEE-754-Standards
Jonas K. schrieb: > Wenn man sich einfach mal anschaut, wie das alles so definiert ist, > scheint das nicht so schwer zu sein: Ja, am Beispiel 4095d => 111111111111,0 => 1,11111111111 * 2^11 -> damit wäre es Normalisiert 11d => 1011b 127d => 01111111b 01111111 1011 -------- 10001010 -> Exponent Die Mantisse ist Reschts des Kommas. 0,10001010,11111111111000000000000 -> et voilà s, e , m Peterle schrieb: > Du fragst uns hier nicht im Ernst, wie man einen INT in einen FLOAT > umsetzt? Ja wieso denn nicht, wäre doch schön gewesen wenn es eine fertige parametrierbare Implemnetierung gegeben hätte, oder nicht?!? VG Andreas
Andreas schrieb: > Um die Berechnungen in Float durchzuführen Warum rechnest du in Float? Brauchst du unbedingt die Dynamik? Du könntest z.B. auch mit einer 64 Bit Festpunktzahl rechnen. Das wäre allemal effizienter zu implementieren...
:
Bearbeitet durch Moderator
Lothar Miller schrieb: > Warum rechnest du in Float? Soll später mal ein IIR Filter weren, bei dem ich mit der Eckfrequenz sehr weit von der Samplefrequenz entfernt bin fg=10kHz, Fs=1MHz. Da das Ganze im Moment etwas zeitkritisch ist, werfe ich auf das Problem Hardware. VG Andreas
Hallo, anbei meine VHDL Quellen zum Umsetzen von unsigned in Float. Das Ganze synthetisiert unter Leonardo in der XH018 ohne Warnings. Der längste Pfad liegt bei 10ns. Soweit schon ganz in Ordnung. Bei weiteren Anregungen bitte nochmal schreiben. VG Andreas
dachte immer die arith lib sollte man vermeiden und die numeric verwenden.
Beifall für die Übersichtlichkeit des VHDL-files. Ich frage mich aber auch, ob FP32 wirklich genauer ist, als ein angepasstes INT-Format. Andreas schrieb: > Soll später mal ein IIR Filter weren, bei dem ich mit der Eckfrequenz > sehr weit von der Samplefrequenz entfernt bin fg=10kHz, Fs=1MHz. Da das > Ganze im Moment etwas zeitkritisch ist, werfe ich auf das Problem > Hardware. Audio?
lowtzow schrieb: > dachte immer die arith lib sollte man vermeiden und die numeric > verwenden. Tja, es wäre konsistenter. Aber die alten Synopsys Libs sind eben trotzdem noch in den Lehrbüchern... @Andreas Der gefällt mir: -- finds leftest Element in Vector "leftest" fehlt tatsächlich noch im englischen Vokabular. Dazu müssen die doch tatsächlich "leftmost" sagen. Oder technisch dann eher "most significant bit". Du könntest deine Kommentare natürlich auch einfach in Deutsch reinschreiben... Ich habe mir das auch mal angeschaut: http://www.lothar-miller.de/s9y/archives/55-Finde-das-MSB.html
:
Bearbeitet durch Moderator
Lothar Miller schrieb: > Du könntest deine Kommentare natürlich auch einfach in > Deutsch reinschreiben... Ja, man merkt, das ich noch ein wenig üben muss ;-) lowtzow schrieb: > dachte immer die arith lib sollte man vermeiden und die numeric > verwenden. Würde ich auch so einschätzen, da die OpenCores FPU aber ebenfalls das arith package nutzt, bin ich auch nochmal auf dieses gegangen. aber der wechsel ist kein Problem: aus conv_std_logic_vector(int) wird std_logic_vector(to_unsigned(int)); aus conv_integer(stv) wird to_integer(stv);
Andreas schrieb: > aus conv_integer(stv) wird to_integer(stv); Über einen kleinen Umweg... http://www.lothar-miller.de/s9y/categories/16-Numeric_Std
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.