Forum: Mikrocontroller und Digitale Elektronik Performance Problem


von Nussecke (Gast)


Lesenswert?

Guten Tag,

zur Zeit habe ich einige zeitliche Probleme mit meinen externen 
Speicherbausteinen und ich würde gernebesser verstehen warum und falls 
mölgich Fehler korrigieren.

Ich verwende einen Cortex M3 - LPC1778 mit 512kB internem Flash. 
Zusätzlich sind extern 1x16 MByte NOR Flash, 1x128 MByte Flash und 1x32 
MByte SDRAM angeschlossen.

Ich habe folgendes Problem:

Die Codeausführungszeit im externen Flah ist bis um den Faktor 40 höher 
als im internen Flash. Je nachdem, was an Code ausgeführt wird und auf 
welche Speicherbausteine zugegriffen wird.

Als kleines Beispiel:
1
void Test(void)
2
{
3
uint32_t i;
4
for (i = 0; i < 0x140000; i ++ )
5
{
6
Testbereich[i] = 0xFF;
7
// Adresse Testbereich --> 32MByte external SDRAM
8
}
9
}

Wird dieser Teil vom Code im internen Flash ausgeführt, geschieht dies 
um den Faktor 40 schneller als im externen Flash.

Ich denke, dass die Ausführungszeit langsamer ist weil der uC sehr viele 
instruction fetch stalls und memory wait states für den externen Flash 
in die interne pipeline einfügen muss.

Der interne Takt liegt bei 120 MHz mit Power Boost on und der EMC ist 
auf 60 MHz eingestellt. Das externe Flash hat eine minimale Zugriffzeit 
von 70 ns aber durch die Einstellungen im EMC hat sich eine Zeit von 
etwa 84 ns ergeben.

Kennt ihr eine Möglichkeit die Codeausführungszeit in externen 
Speicherbausteinen zu erhöhen ? Habt ihr gute Quellen für Informationen, 
um die interne Cortex M3 pipeline zu verstehen und warum bzw. wie die 
hohe Anzahl an instruction fetch stalls und memory wait states zustande 
kommt ?

Vielen Dank

von Dennis Heynlein (Gast)


Lesenswert?

Direkt gefunden hab ich im Handbuch das:

The LPC178x/7x contain up to 512 kB of on-chip flash program memory. A 
new two-port flash accelerator maximizes performance for use with the 
two fast AHB-Lite buses.

Das gilt natürlich nicht für den externen Flash.

Der NOR-Flash bzw. NAND-Flash ist parallel ?

von Dennis Heynlein (Gast)


Lesenswert?

Sollte es Serieller Flash sein aus dem du ausführen willst und es 
existiert kein Cache (wie er zum Beispiel beim STM32F7 und QSPI-NOR 
existiert) haste deine Bremse gefunden.
Warum machste aber nicht die Code-Ausführung aus dem SDRAM ?

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.