Hallo, ich wollte folgendes in VHDL lösen: 10^(-0,01546875*TMP) wie kann ich das z.B. auf 32bit genau lösen? also power of geht ja mit --> 10**irgendwas aber mit der Floatzahl habe ich so meine Probleme!
Stefan H. schrieb: > aber mit der Floatzahl habe ich so meine Probleme! Welche Datentypen willst du denn da haben (Ergebnis und TMP)? Soll das synthetisiert werden? Was willst du machen?
Lothar Miller schrieb: > Welche Datentypen willst du denn da haben (Ergebnis und TMP)? > Soll das synthetisiert werden? > Was willst du machen? TMP und Ergebnis sind "signed(31 downto 0)"! Ja wäre nicht schlecht, wenn's auch zu synthetisieren ginge! -0.011546875 stellt eine Dämpfung dar, die in Abhängigkeit zu TMP größer oder kleiner sein soll (logarithmisch) TMP kann dabei Werte von 0 bis (2^11)-1 annehmen! Ich möchte also den log-Wert in einen Faktor umrechnen!
Stefan H. schrieb: > TMP und Ergebnis sind "signed(31 downto 0)"! > Ja wäre nicht schlecht, wenn's auch zu synthetisieren ginge! > > -0.011546875 stellt eine Dämpfung dar, die in Abhängigkeit zu TMP größer > oder kleiner sein soll (logarithmisch) TMP kann dabei Werte von 0 bis > (2^11)-1 annehmen! > Ich möchte also den log-Wert in einen Faktor umrechnen! Hmmh ok mir ist da die Idee gekommen... warum das nicht einfach so lösen, wie es in VHDL als auf ner Hardware oftmals am einfachsten ist: Vorberechnete Werte verwenden! also eine Liste mit 2^11 Werten die Wertnr. (der Index) entspricht dann "TMP" und die zugehörigen Werte werden vorher berechnet entweder von Synthese-Tool, MatLab, SciLab oder Octave etc. also eine LUT mit 2^11 Werten (hier jeder Wert mit 32 Bit aufgelöst!) Wäre das ne gescheite Vorgehensweise?
Stefan H. schrieb: > > also eine LUT mit 2^11 Werten (hier jeder Wert mit 32 Bit aufgelöst!) > Wäre das ne gescheite Vorgehensweise? Ja, die einzig brauchbare. Braucht nur 4 Blockrams.
Stefan H. schrieb: > also eine LUT mit 2^11 Werten (hier jeder Wert mit 32 Bit aufgelöst!) Du kannst auch weniger Stützpunkte verwenden und dazwischen linear interpolieren. Das geht recht einfach: zwei Tabellenzugriffe, zwei Mutliplikationen und fertig...
Lothar Miller schrieb: > Du kannst auch weniger Stützpunkte verwenden und dazwischen linear > interpolieren. Das geht recht einfach: zwei Tabellenzugriffe, zwei > Mutliplikationen und fertig... Stimmt klingt gut, dann habe ich nur halb so viele Werte in der Tabelle und nutze eh schon dafür "dedizierte" Hardware für die Multiplikation!
Stefan H. schrieb: > Stimmt klingt gut, dann habe ich nur halb so viele Werte in der Tabelle man kann auch etwas mehr interpolieren.
Stefan H. schrieb: > Stimmt klingt gut, dann habe ich nur halb so viele Werte in der Tabelle > und > nutze eh schon dafür "dedizierte" Hardware für die Multiplikation! Bei nur 2^11 Lohnt sich das meiner Ansicht nur wenn du knapp mit Blockrams bist.
Lattice User schrieb: > Bei nur 2^11 Lohnt sich das meiner Ansicht nur wenn du knapp mit > > Blockrams bist. Wie wäre es mit einer Berenchung in Cordic oder Auslagerung in ein externes RAM?
Ralf schrieb: > Wie wäre es mit einer Berenchung in Cordic Wiviel Stufen / Auflösung bräuchte ein Cordic für 32 Bit Endergebnis?
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.