Forum: Mikrocontroller und Digitale Elektronik XMC4500 vs stm32f429.warum gibt es Unterschiede in der Berechnungsdauer?


von DonPanso (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

im Anhang befinden sich zwei Programme. Beide tun im Prinzip das 
Gleiche, sind aber jeweils für den XMC4500 und den STM43F429 geändert. 
Die Mikrocontroller führen Floating-Point-Berechnungen durch und messen 
mit ihren internen Timern die Zeit (Angabe in Prozessortakten), die 
jeweils für die Berechnung gebraucht wird. Das Ergebnis der Zeitmessung 
wird per Debugger ausgelesen.

Die Umgebung:
- Toolchain: Keil MDK-Lite Version 5.12.0.0
- Hardware:  XMC4500-relax-kit und STM32F429Discovery

Nun frage ich mich, wie die merklichen Unterschiede in den 
Prozessortakten, die die beiden für die bestimmten Test-Berechnungen 
brauchen, zustande kommen? Beide Mikrocontroller haben doch den gleichen 
Cortex-M4-Kern drin und es wird derselbe Compiler verwendet...müsste die 
Anzahl der benötigten Prozessortakte dann nicht ähnlicher sein?

Hier nochmal die Ergebnisse im Überblick:
1
//-------------------------------------------------------------------------------------------------------
2
// TEST 1  XMC4500
3
// Mit FPU:   Taktzyklen insgesamt: 356 => Berechnungsdauer bei 120 MHz: 2.97 us    (FLASH)
4
// Ohne FPU:  Taktzyklen insgesamt: 1153 => Berechnungsdauer bei 120 MHz: 9.61 us   (FLASH)
5
//-------------------------------------------------------------------------------------------------------
6
//-------------------------------------------------------------------------------------------------------
7
// TEST 2 XMC4500
8
// Mit FPU:   Taktzyklen insgesamt: 201 => Berechnungsdauer bei 120 MHz: 1.68 us    (FLASH)
9
// Ohne FPU:  Taktzyklen insgesamt: 949 => Berechnungsdauer bei 120 MHz: 7.91 us   (FLASH)
10
//
11
// Mit cos aus der DSP-Library:
12
// Mit FPU:   Taktzyklen insgesamt: 129 => Berechnungsdauer bei 120 MHz: 1.08 us   (FLASH)
13
// Ohne FPU:  Taktzyklen insgesamt: 685 => Berechnungsdauer bei 120 MHz: 5.71 us   (FLASH)
14
//-------------------------------------------------------------------------------------------------------
15
//-------------------------------------------------------------------------------------------------------
16
// TEST 3 XMC4500
17
// Mit FPU:   Taktzyklen insgesamt: 599 => Berechnungsdauer bei 120 MHz: 4.99 us    (FLASH)
18
// Ohne FPU:  Taktzyklen insgesamt: 2907 => Berechnungsdauer bei 120 MHz: 24.23 us   (FLASH)
19
//
20
// Mit cos und sin aus der DSP-Library:
21
// Mit FPU:   Taktzyklen insgesamt: 472 => Berechnungsdauer bei 120 MHz: 3.93 us   (FLASH)
22
// Ohne FPU:  Taktzyklen insgesamt: 2238 => Berechnungsdauer bei 120 MHz: 18.65 us   (FLASH)
23
//-------------------------------------------------------------------------------------------------------

Und zum STM32F429:
1
//-------------------------------------------------------------------------------------------------------
2
// TEST 1 STM32F429
3
// Mit FPU:   Taktzyklen insgesamt: 216 => Berechnungsdauer bei 180 MHz: 1.2 us    (FLASH)
4
// Ohne FPU:  Taktzyklen insgesamt: 1040 => Berechnungsdauer bei 180 MHz: 5.78 us   (FLASH)
5
//-------------------------------------------------------------------------------------------------------
6
//-------------------------------------------------------------------------------------------------------
7
// TEST 2 STM32F429
8
// Mit FPU:   Taktzyklen insgesamt: 166 => Berechnungsdauer bei 180 MHz: 0.92 us    (FLASH)
9
// Ohne FPU:  Taktzyklen insgesamt: 946 => Berechnungsdauer bei 180 MHz: 5.26 us   (FLASH)
10
//
11
// Mit cos aus der DSP-Library:
12
// Mit FPU:   Taktzyklen insgesamt: 108 => Berechnungsdauer bei 180 MHz: 0.6 us   (FLASH)
13
// Ohne FPU:  Taktzyklen insgesamt: 608  => Berechnungsdauer bei 180 MHz: 3.38 us   (FLASH)
14
//-------------------------------------------------------------------------------------------------------
15
16
//-------------------------------------------------------------------------------------------------------
17
// TEST 3 STM32F429
18
// Mit FPU:   Taktzyklen insgesamt: 508 => Berechnungsdauer bei 180 MHz: 2.82 us   (FLASH)
19
// Ohne FPU:  Taktzyklen insgesamt: 3000 => Berechnungsdauer bei 180 MHz: 16.67 us   (FLASH)
20
//
21
// Mit cos und sin aus der DSP-Library:
22
// Mit FPU:   Taktzyklen insgesamt: 378 => Berechnungsdauer bei 180 MHz: 2.1 us   (FLASH)
23
// Ohne FPU:  Taktzyklen insgesamt: 2334 => Berechnungsdauer bei 180 MHz: 12.97 us   (FLASH)
24
//-------------------------------------------------------------------------------------------------------

Sollten noch weitere Infos benötigt werden stehe ich gerne zur 
Verfügung. Besten Dank!
      DonPanso

von Uwe Bonnes (Gast)


Lesenswert?

Warum die unterschiedlichen Taktfrequenzen? Das macht das Vergleichen 
komplizierter...

von DonPanso (Gast)


Lesenswert?

Uwe Bonnes schrieb:
> Warum die unterschiedlichen Taktfrequenzen? Das macht das Vergleichen
> komplizierter...

Hmm, kann daher der Unterschied kommen? Ich vergleiche doch die Anzahl 
der Takte miteinander und nicht die Zeiten...

von hp-freund (Gast)


Lesenswert?

Kenne den XMC4500 nicht, aber könnte es vielleicht daran liegen:

STM32F4:
Outstanding results :
- 210DMIPS at 168Mhz.
- Execution from Flash equivalent to 0-wait state performance
up to 168Mhz thanks to ST ART Accelerator

von Programmierer (Gast)


Lesenswert?

Führe mal auf beiden Controllern den Code aus dem RAM aus... Flash ist 
langsam, aber der STM32 hat einen Cache

von DonPanso (Gast)


Lesenswert?

hp-freund schrieb:
> Kenne den XMC4500 nicht, aber könnte es vielleicht daran liegen:
>
> STM32F4:
> Outstanding results :
> - 210DMIPS at 168Mhz.
> - Execution from Flash equivalent to 0-wait state performance
> up to 168Mhz thanks to ST ART Accelerator

Gute Frage! Das könnte es sein...ich werde beizeiten mal schauen, dass 
ich die Tests mit einem STM32f3Discovery durchführe. Der hat auch einen 
Cortex-M4-Kern, aber nach dem ersten Überfliegen des Datenblattes nicht 
den ART-Accelerator. Oder ich schaue mal, ob ich den Accelerator beim 
STM32F4 deaktiviert kriege, um ähnliche Ergebnisse zu erhalten.
Bisher kann ich aber sagen, dass der XMC4500 auch einen Instruction- und 
Data-Prefetch vom Flash hat...ob das mit dem ART Accelerator 
vergleichbar ist gucke ich mir noch an.

von DonPanso (Gast)


Lesenswert?

Programmierer schrieb:
> Führe mal auf beiden Controllern den Code aus dem RAM aus... Flash ist
> langsam, aber der STM32 hat einen Cache

Beim XMC4500 ist der Flash ebenfalls gecacht. Weisst du, wie man µVision 
so einstellt, dass es den Code für den RAM erzeugt? Ich habe mich da 
schonmal vergebens dran versucht...

von Programmierer (Gast)


Lesenswert?

DonPanso schrieb:
> Beim XMC4500 ist der Flash ebenfalls gecacht.
Aber vielleicht hat Infineon seinen Cache minimal anders gebaut als ST 
seinen...

Schreib halt ins Linkerscript dass die Code-Sections an eine RAM-Adresse 
gepackt werden...

von DonPanso (Gast)


Lesenswert?

Programmierer schrieb:
> DonPanso schrieb:
>> Beim XMC4500 ist der Flash ebenfalls gecacht.
> Aber vielleicht hat Infineon seinen Cache minimal anders gebaut als ST
> seinen...

Klingt plausibel! Dann gucke ich mal, dass ich den Code ins RAM kriege 
und damit ähnliche Ergebnisse herbeiführen kann. Besten Dank!

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.