Liebe Kollegen! Gibt es einen Logarithmus in VHDL oder muss ich eine function basteln? LG Midnight
was für einen log brauchst du? google findet da sehrwohl was... beispielsweise für den log2 hier direkt im forum: Beitrag "log2 in VHDL auf integer?"
Die kurze Antwort ohne viele Belehrungen ist also: Nein, mußt selber basteln. Danke, jetzt kenn ich mich aus. LG Midnight
Das Package math_real bietet Logarithmus-Funktionen an. Ist aber nicht synthesierbar.
Ja, leider. Werde ein kleines Unterprogramm (function) entwickeln, das die Funktion ausrechnet. Das kann ich dann immer wenn ich es brauche einbinden.
Entweder so oder du generierst dir ein Look-up-Table mit den Werten. Halt das übliche Dilemma: Chipfläche <-> Geschwindigkeit
Leider hast du nicht beschrieben, welches Zahlenformat du verwendest. Laß mal ein paar deiner Randbedingungen rüberwachsen.
Ich rechne mit std_logic Matrizen. Für den letzten Schritt werden daraus integer Matrizen und die werden mit einer Formel (unter anderem LOG) umgerechnet und schließlich über die RS232 ausgegeben. Mein Problem hat sich aber inzwischen gelöst. Ich habe ein Package für die Rechenoperationen erstellt und werde die Zahlen in Real konvertieren (sonst wirds zu ungenau). LG Midnight
Hab mal im "Mayer-Baese" ISBN 3540211195 nachgeschaut: die einzige Stelle zur log-Berechnung ist der Cordic-Algorithmus, auf dem Umweg über ln(W)=2*arctanh(Y/X) mit Y=W-1 und X=W+1
DANKE für´s nachsehen. Wenn ich alles richtig gemacht habe sollte der Log funktionieren. Das Buch sieht gut aus, ich glaube ich will mir das kaufen.
>Wenn ich alles richtig gemacht habe sollte der Log funktionieren. Könntest du mal deinen Log hier posten, würde mich sehr interressieren wie dein VHDL-Code aussieht!
es gibt eine Neuauflage von 2007 (die Nummer war von 2004), erweitert - ich habe eine FFT mit NIOS gesehen - ISBN 3540726128 man kann bei Amazon und books.google.com drin blättern
So ähnlich mache ich es auch, wobei ich mir die Zeilen automatisch generieren lasse. Je nach Realisation kann man das in ein Ein-Clock-Modul pressen. Beispiel fuer Teiler (127/127): Beitrag "Re: Durch 10 teilen"
Christoph db1uq K. schrieb: > Hab mal im "Mayer-Baese" ISBN 3540211195 nachgeschaut: die einzige > Stelle zur log-Berechnung ist der Cordic-Algorithmus, auf dem Umweg über > ln(W)=2*arctanh(Y/X) mit Y=W-1 und X=W+1 Hallo, ich suche ein Implementation für pipeline. Cordic habe ich geschaut, ist aber zu kompliziert und ungenau. Ich brauche Log (n) in Ganzzahl nur für Werte bis (65536*65536-1). Knn diese Algorithmus umgeschrieben werden? Thomas P. schrieb: > Vlt hilft meine Variante der Logarithmus ... Wie kann das erreicht werden? Danke
Morten schrieb: > Cordic habe ich geschaut, ist aber zu kompliziert und ungenau. Ungenau? Das ist doch nur eine Frage der Bitbreiten und der Zahl der Iterationen... Das hier hattest Du schon gefunden?!: Beitrag "Re: CORDIC in VHDL" Und das hier dürfte sich auch relativ brauchbar in VHDL umsetzen lassen: Beitrag "Re: Code für Logarithmus gesucht" Duke
Ich nehme das Beispiel von oben aus der WIKIPEDIA und habe dazu eine Frage: https://de.wikipedia.org/wiki/Logarithmus Der Algo ist so definiert:
1 | INPUT 1 ≤ x < 2 |
2 | OUTPUT Nachkommastellen bi der Binärdarstellung von log2(x) |
3 | i ← 0 |
4 | LOOP |
5 | i ← i + 1 |
6 | x ← x*x |
7 | IF x ≥ 2 THEN |
8 | x ← x / 2 |
9 | b(i) ← 1 |
10 | ELSE |
11 | b(i) ← 0 |
12 | END IF |
13 | END LOOP |
Wie kann ich eine binäre Zahl, die z.B. 16 Bit hat hier verwenden - im Bezug auf "X zwischen 1 und 2" bringen? Meine INT-Zahl hat 16 Vorkommastellen und 16 Nachkommastellen, also etwa so: 33333.32768, was 33333.5 sind.
:
Bearbeitet durch Moderator
Rechenphreak schrieb: > Meine INT-Zahl hat 16 Vorkommastellen und 16 Nachkommastellen, also etwa > so: > 33333.32768, was 33333.5 sind. Kannst du diese Herleitung noch mal ein wenig ausführlicher darstellen? Welche Zeichenkombination hat da welche Basis und welches Zeichen an welcher Stelle welche Wertigkeit? > Meine INT-Zahl hat 16 Vorkommastellen und 16 Nachkommastellen Integerzahlen haben eigentlich prinzipiell keine Nachkommastellen. > Meine INT-Zahl hat 16 Vorkommastellen und 16 Nachkommastellen Wenn es eine vorzeichenbehaftete Festkommazahl ist, dann passen schon die 33333 nicht in die 16 zur Verfügung stehenden Vorkommastellen. Wenn deine Zahl unsigned ist, dann solltest du das sagen. > Meine INT-Zahl hat 16 Vorkommastellen und 16 Nachkommastellen Dann hat sie insgesamt 32 Stellen und wegen des Kommas in der Mitte einen Wertebereich von -2147483648/65536 bis +2147483647/65536. Das erste Bit links vom Komma hat die Wertigkeit 1. Des erste Bit rechts vom Komma hat die Wertigkeit 0,5. Prinzipiell solltest du dir also vorrangig nochmal die binäre Darstellung einer Festpunktzahl. Im Grunde ist das nur eine Integerzahl, bei der man sich an einer bestimmten Stelle ein Komma "hindenkt" und deshalb den Integerwert durch eine bestimmte Zweierpotenz (bei dir 2^16 wegen der 16 Nachkommastellen) teilen muss. Rechenphreak schrieb: > Wie kann ich eine binäre Zahl, die z.B. 16 Bit hat hier verwenden - im > Bezug auf "X zwischen 1 und 2" bringen? Das steht im Grunde im Text deines Links: du suchst das MSB und schiebst dann die Zahl soweit nach rechts, bis du diese Bedingung erfüllst.
Lothar M. schrieb: >> Meine INT-Zahl hat 16 Vorkommastellen und 16 Nachkommastellen > Integerzahlen haben eigentlich prinzipiell keine Nachkommastellen. Wahrscheinlich sind binäre Zahlen mit verschobenem Komma gemeint. Für die gilt aber grundsätzlich das Gleiche. Es steckt ja nur ein Faktor drin. Aufpassen muss man freilich bei der anschließenden Interpretation des Ergebnisses: Bei einer Wurzel ist das Ergebnis nur noch halb so "lang" wie der reingesteckte Wert, also YYYY.XXXX -> ZZ.KK. Bei dem Beispiel des LOG steckt dann gemäss LOG (A x K) ein Faktor LOG K im Ergebnis, der als Offset auftaucht. Schlauerweise wird man dann um eine Zahl erweitern, die so groß ist, dass die sich ergebende Auflösung in Bits bei der kleinsten Zahl noch groß genug ist, also EXP(k,2)+n.
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.