Forum: FPGA, VHDL & Co. Unsigned -> IEEE754 Single


von Andreas (Gast)


Lesenswert?

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

von Peterle (Gast)


Lesenswert?

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.

von Jonas K. (jonas_k)


Lesenswert?

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

von Andreas (Gast)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
von Andreas (Gast)


Lesenswert?

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

von Andreas (Gast)



Lesenswert?

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

von lowtzow (Gast)


Lesenswert?

dachte immer die arith lib sollte man vermeiden und die numeric 
verwenden.

von Paul B. (Gast)


Lesenswert?

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?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
von Andreas (Gast)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.