XC166Lib FFT Geschwindigkeit (auf XE167)

Gast #1311630
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
Gast #1313152
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.
Gast #1313329
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren