Instruction Cache disable auf ARM Cortex-M7 (Teensy 4.0)

OP #6133022
Lesenswert?
• ▲
▼
Ich möchte auf dem Teensy 4.0 Board ein Programm laufen lassen mit dem 
man den Einfluss des Instruction-Cache sehen kann. Dazu habe ich mein 
Programm in FLASHMEM gepackt un den Cache disabled. Die Cache diable 
Routine habe ich von core_cm7.h (CMSIS). Jetzt sollte man meinen dass 
die Schleife langsamer läuft als mit Cache. Seltsamerweise hängt das 
empfindlich vom Rest des Programmes ab. Schltet man die angegebene Zeile 
ein oder aus geht auch das caching an oder aus. Was mache ich falsch? 
Wie schaltet man den Cache richtig aus?
1
#define led 13
2

3
void SCB_DisableICache (void){
4
    asm("dsb");
5
    asm("isb");
6
    SCB_CCR &= ~(uint32_t)SCB_CCR_IC  ;  /* disable I-Cache */
7
    SCB_CACHE_ICIALLU = 0UL;             /* invalidate I-Cache */
8
    asm("dsb");
9
    asm("isb");
10
}
11

12
double xx ;
13

14
FLASHMEM void setup() {
15
  pinMode(led, OUTPUT);
16
  Serial.begin(115200);  
17
  while(!Serial){} ;
18
  Serial.print("Hello ARTICLEteensy40disableIcacheDemo1forumPost...\n"); 
19
  Serial.printf("setup=%08XH\n",setup) ;
20
  SCB_DisableICache();   
21
  
22
  // if the following line is deleted a loop cycle needs 130ns, 
23
  // if this line is enabled a loop needs 6.6ns
24
  Serial.printf("SCB_CCR & SCB_CCR_IC)=%08XH\n", SCB_CCR & SCB_CCR_IC ) ; 
25
  
26
  Serial.printf("wait 5 secs...") ; delay(5000) ;
27
  while(1){
28
    xx=0.0 ; 
29
    for(int k=0 ; k<20 ; k++){
30
      CORE_PIN13_PORTSET = CORE_PIN13_BITMASK; // here-1
31
      xx=xx+ 1.0 ;
32
      CORE_PIN13_PORTCLEAR = CORE_PIN13_BITMASK; // here-2
33
      }
34
    Serial.printf("x=%15.10f\n",xx) ;
35
    delay(50) ;
36
    }
37
  }
38
        
39
void loop(){
40
  }
#6134504
Lesenswert?
• ▲
▼
Lies mal das RM: Der Prozessor hat auch z.B. im FlexSPI einen (kleinen) 
Cache.

Könnte für die Schleife oben knapp reichen - und dann kommt es u.U. auf 
Alignments an, ob da nochmal was gelesen werden muss oder nicht.

Abschalten kann man nur den Cache im Cortex-M7 Core.

Ansonsten stellt sich mir spontan die Frage, in welchem Flash oder RAM 
der Code läuft. Das ist bei dem nicht mehr egal. FLASHMEM  impliziert 
FLASH, was o.g. Cache hat.
Gast #6135630
Lesenswert?
• ▲
▼
> Versuch mal, den Code im RAM laufenzulassen.

> Flash ist vergleichsweise langsam (und hat deswegen wie schon gesagt
> eigene Cache- bzw. Prefetch-Logik).
> Ich weiß nicht, wie es beim Teensy ist, aber z.B. beim LPC43xx mit 204
> MHz braucht das RAM keine Waitstates, Flash dagegen 9.

Ja, aber:
Bei ARMen die beim Flash nur 1-3 Waitstates brauchen und intensiven
Gebrauch vom RAM beim Zugriff auf Daten machen, kann es passieren
das der Code vom Flash trotzdem schneller laeuft!
Da steht sich dann der RAM quasi selber im Weg weil die Zugriffe
serialisiert werden muessen.

Manche DSP haben DARAM (Dual-Access-RAM) und koennen zwei oder mehr
Zugriffe innerhalb eines Zyklus. Bei 300 MHz Clock resultieren da
dann knackige Zugriffszeiten von 1.5 ns...
#6135645
Lesenswert?
• ▲
▼
Auweia schrieb:
> Bei ARMen die beim Flash nur 1-3 Waitstates brauchen und intensiven
> Gebrauch vom RAM beim Zugriff auf Daten machen, kann es passieren
> das der Code vom Flash trotzdem schneller laeuft!

Der i.MX im Teensy 4.0 hat mehr als einen internen RAM Block - aber nur 
externen Flash, der dementsprechend lange Zugriffszeit hat. Daher läuft 
Code aus dem internen RAM deutlich schneller solange der Cache nicht im 
Spiel ist.

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.