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
~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)
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.