www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik XC166Lib FFT Geschwindigkeit (auf XE167)


Autor: Daniel N. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich benutze die XC167Lib auf einem XE167 80MHz Infineon EasyKit.
In der Dokumentation zur library (XC166Lib - A DSP Library for XC16x 
Family) steht, dass für eine real_DIT_FFT mit 1024 Werten 109111 
Taktzyklen benötigt werden.
Dies würde bei einem Prozessortakt von 80MHz ~1,36ms entsprechen.
Gemessen habe ich allerdings eine Rechenzeit der real_DIT_FFT() Funktion 
von 3,8ms.
Das macht mich ein wenig nachdenklich und ich frage mich, ob ich etwas 
wichtiges übersehen habe.

Ich verwende Keil uVision3 als Entwicklungsumbebung. Als Startupfile 
benutze ich die START_V3.A66, welche beim Infineon EasyKit im Toggle_Pin 
Beispiel mitgeliefert wird. Die Parameter für die PLL wurden nicht
verändert und waren von Beginn an auf 80MHz eingestellt. Der Prozessor 
sollte also auch tatsächlich mit 80MHz laufen.
NDIV = 19; PDIV = 0; K2DIV = 1

Für die Kontrolle der benötigten Zeit habe ich vor Aufruf der 
real_DIT_FFT Funktion einen Pin auf high gesetzt und direkt danach 
wieder auf low. Die Breite des Impulses entspricht dann der für die 
Berechnung benötigten Zeit.
Da das high bzw. low setzen eines Pins im Nanosekunden Bereich liegt, 
fällt die dafür benötigte Zeit nicht ins Gewicht.

Ich kenne mich mit der Keilumgebung noch nicht so gut aus und denke, 
dass da evtl. nur irgendwo noch ein Haken gesetzt werden muss.
Ich habe schon versucht die Daten, welche die real_DIT_FFT Funktion 
benötigt, in verschiedene on-chip RAM sections zu legen (sdata, idata),
aber leider ohne nennenswerten Erfolg.

Hat von euch jemand eine Idee, wie ich die Berechnung der FFT so 
beschleunigen kann, dass ich mich den 1,36ms nähern kann?

Grüße,
Daniel

Autor: Alejandro P. s. (ale500)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
~100000 Takten für 1024 Punkten ist sowieso ok.

Hast du externe SRAM benutzt ? Bist du sicher das es mit 80 MHz Takt 
funktioniert ?

Hast du die Quell-Code ? du kannst versuchen es mit Optimierungen 
nochmal kompilieren. (Wenn nicht ein Wait-States Problem ist)

Autor: Daniel N. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe nur interne Speicher benutzt. RAM sowie ROM.

Takt sollte stimmen. Wenn nicht, würden wohl auch nur kaputte Zeichen
über die UART ankommen. Zudem habe ich noch zwischen einem PIN toggle 
100 NOPs eingefügt und dann die Pulsbreite gemessen. Das stimmte auch 
mit den 80MHz beinahe überein (16 Takte Differenz).
Optimierungen bringen nicht wirklich was, da die FFT Routine in 
Assembler geschrieben ist (von Infineon).
Werde mal versuchen die FFT Routine aus dem PSRAM des XE167 aufzurufen.
Das soll nach Applicaten Note AP16113 doppelt so schnell sein.

Autor: Carsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Programmausführung aus dem RAM würde ich auch empfehlen. Der Flash 
arbeitet meines Wissens nach mit Waitstates, was aber durch den 
128Bit-breiten Zugriff weggemacht wird. Dies funktioniert aber nur bei 
linearer Codeausführung.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.