Performance Problem

Gast #4206515
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
Gast #4206603
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 ?
Gast #4206606
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 ?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.