Logarithmus in VHDL

Gast #1389814
Lesenswert?
• ▲
▼
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
Gast #5616914
Lesenswert?
• ▲
▼
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
Gast #6409401
Lesenswert?
• ▲
▼
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.
Moderator (Firma: Titel) Persönliche Seite #6411659
Lesenswert?
• ▲
▼
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.
Persönliche Seite #6420059
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.