Forum: Mikrocontroller und Digitale Elektronik ATSAMD cache


von Stored B. (Firma: drx) (umbrecht)


Lesenswert?

Guten Abend,

ich möchte gerne verstehen wie der Cache arbeitet.
Weis jemand an welcher Adresse der Cache liegt? Hab den NVM Bereich 
komplett ausgelesen aber nicht fündig geworden. Bzw. ich konnte irgendwo 
im NVM Adress Bereich (Nach den Registern) Werte ermitteln die aber 
keine Instruktionen darstellen.

Als Nächstes würde ich gerne verstehen ob man die Zyklen trotz Cache 
genau berechnen kann oder ob die mehr oder weniger von unterschiedlichen 
Faktoren abhängig sind.

Habe mal eine for Schleife ausgewertet und dazu mal Berechnungen 
gemacht:
1
//for(uint32_t X = 0; X<5000; X++);
2
3
LDR     R3, [PC, #136]    <A> <2c>
4
SUBS    R3, #1            <B> <1c>
5
CMP     R3, #0            <C> <1c>
6
BNE.N   732               <D> true = 1c else 2c
7
_______________________
8
---Cache off
9
0WS --- 20003 = A+5000*(B+C+D2)+D1
10
1WS --- 30005 = A[+WS]+5000*(B[+WS]+C[+WS]+D2)+D1[+WS]
11
2WS --- 40007 = A[+WS]+5000*(B[+WS]+C[+WS]+D2)+D1[+WS]
12
3WS --- 50009 = A[+WS]+5000*(B[+WS]+C[+WS]+D2)+D1[+WS]
13
_______________________
14
---Cache on
15
0WS --- 20003 = A+5000*(B+C+D2)+D1
16
1WS --- 20006 = ?
17
2WS --- 20009 = ?
18
3WS --- 20012 = ?
19
_______________________

Der Cache wird hier eh erst richtig aktiv wenn Waitstates aktiviert 
sind.
Ist das richtig das der Sprungbefehl keine Waitstates benötigt? Bzw. ist 
die Berechnung so richtig? Die Anzahl der Zyklen habe ich durch den 
systick Timer ermittelt.
Wie ist das nun wenn der Cache eingeschaltet ist, wie und warum kommt es 
zu dieser Zyklus Zusammenführung?

BG
Umbrecht

von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?

Stored B. schrieb:
> ich möchte gerne verstehen wie der Cache arbeitet.
> Weis jemand an welcher Adresse der Cache liegt?

Du hast dich aber schon mal damit beschäftigt wie ein (CPU-)Cache 
überhaupt funktioniert?

Sinn ist es ja gerade "Vollautomatisch" den gesamten Bereich des Flashs 
und des RAM abzudecken und das würde mit einer eigenständigen Adresse 
überhaupt nicht sinnvoll funktionieren. Waitstates benötigst du in der 
Regel bei genau diesen Speicherzugriffen weich der CPU-Core schneller 
ist als der Speicher. Und genau hier setzt der Cache an um wiederholte 
Zugriffe auf dieselben Speicherbereiche "zwischen zu speichern" damit 
diese eben mit jedesmal aus dem "langsamen" Flash geladen werden müssen.

- https://en.wikipedia.org/wiki/Cache_(computing)
- https://en.wikipedia.org/wiki/CPU_cache

Und wenn du schon anfängst Takte zu zählen solltest du dir auch klar 
machen das da noch weitere Techniken gibt um Takte "einzusparen". z.B.:

- https://en.wikipedia.org/wiki/Branch_predictor
- https://en.wikipedia.org/wiki/Instruction_pipelining

Alles weitere findest du mit Sicherheit in den Unterlagen zu deimem µC 
und den beschreibungen von ARM...

von foobar (Gast)


Lesenswert?

> Der Cache wird hier eh erst richtig aktiv wenn Waitstates aktiviert
> sind.

Dann solltest du auch noch den Stromverbrauch messen.

Aus dem Datenblatt:
> The NVM Controller cache reduces the device power consumption and
> improves system performance when wait states are required.

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.