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


von Daniel N. (Gast)


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

von Alejandro P. (ale500)


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)

von Daniel N. (Gast)


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.

von Carsten (Gast)


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.

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
Noch kein Account? Hier anmelden.