Forum: Mikrocontroller und Digitale Elektronik Prozessortakt thumb arm ist unterschiedlich


von Dominik G. (niknik)


Lesenswert?

Hallo,

wenn das gleiche Prg. einmal mit der THUMB-Option und einmal mit der 
ARM-Option compiliert wird, ist trotz gleichem 
startupfile(Plleinstellungen usw) der Prozessortakt unterschiedlich.??

Meine Konfiguration:

Hardware: AT91SAM7S64 Olimex
Software: Eclipse bzw. Keil
Compiler: GNU-Compiler Keil-ARM-Compiler

bin gespannt auf die Antworten
Gruss
nik

von Andreas K. (a-k)


Lesenswert?

Für den Prozessortak ist das Programm bzw. dessen Initialisierung 
zuständig. Ob die in Thumb- oder ARM-Mode erfolgt, ist unerheblich.

von Dominik G. (niknik)


Lesenswert?

Leider nicht. Bin gerade am Messen. Wenn ich im THUMB-Mode compiliere 
läuft der uC mit 48 MHz im  ARM-Mode nur mit 26MHz. Gemessen habe ich 
single-cycle-Befehle.

Gruss
nik

von Karl (Gast)


Lesenswert?

Wie gemessen? AT91SAM7 sind im Thumb-Modus zum Teil schneller, weil das 
Speicherinterface dann nicht so limitiert.

von Robert T. (robertteufel)


Lesenswert?

Dominique,
wie schnell der Prozessor laeuft in MHz laesst sich nur bedingt in der 
Ausfuehrungszeit eines Befehles messen.
Wenn Du denselben Code aus dem RAM ausfuehrst, dann sollte sich keine 
solchen Unterschiede mehr ergeben. Es koennte sich um die Verzoegerung 
im Flashzugriff des SAM7 handeln. Der interne Bus ist 32-bit breit, das 
reicht um immer 2 Thumb Befehle zu holen, somit laeuft der Chip als ob 
keine Waitstates da waeren. Im ARM mode sind die Befehle aber 32-bit 
breit, da muss er dann warten nach jedem Befehl.
Ist eine laengere Geschichte.
Du kannst den Takt messen in dem du einen Timer hernimmst und nach 1000 
Timer Incrementen einen Pin umschaltest aber nicht in der 
Ausfuehrungszeit eines Befehles.

Robert

von Dominik G. (niknik)


Lesenswert?

1
Wie gemessen?
Den folgenden Code ins Programm einfügen(singlecycle)
1
m_pPio->PIO_SODR = CpuTakt;         //CpuTakt ein  
2
    __asm{     
3
   mov r0,#0fH    ;    //1 Takt 
4
  mov r0,#0fH    ;    //1 Takt
5
  mov r0,#0fH    ;    //1 Takt
6
  mov r0,#0fH    ;    //1 Takt
7
  mov r0,#0fH    ;    //1 Takt
8
  mov r0,#0fH    ;    //1 Takt
9
  mov r0,#0fH    ;    //1 Takt
10
  mov r0,#0fH    ;    //1 Takt
11
  mov r0,#0fH    ;    //1 Takt
12
  mov r0,#0fH    ;    //1 Takt 10
13
  mov r0,#0fH    ;    //1 Takt
14
  mov r0,#0fH    ;    //1 Takt
15
  mov r0,#0fH    ;    //1 Takt
16
  mov r0,#0fH    ;    //1 Takt
17
  mov r0,#0fH    ;    //1 Takt 15
18
  mov r0,#0fH    ;    //1 Takt
19
  mov r0,#0fH    ;    //1 Takt
20
        mov r0,#0fH    ;    //1 Takt
21
  mov r0,#0fH    ;    //1 Takt
22
  mov r0,#0fH    ;    //1 Takt 20
23
  }
24
m_pPio->PIO_CODR = CpuTakt;            //CpuTakt aus

Die Zeit von CpuTakt an bis aus messen.
Dann das Gleiche nochmal mit nur 15 mov-Befehlen.
Dann die Zeitdifferenz berechnen. Diese durch 5 teilen und davon der 
Kehrwert. Dabei kommt ganz genau die Cpufrequenz raus.

Das mit dem Timer werd ich mal probieren.

Gruss
nik

von Robert Teufel (Gast)


Lesenswert?

Nik,

da kommt nicht die CPU Frequenz raus sondern ein Wert der berechnen 
laesst wieviel Zyklen ein Befehl tatsaechlich braucht.
Mach dieselbe Sequenz in einem STR7 bei gleicher Frequenz, Du wirst 
einen anderen Wert bekommen, mach es mit einem NXP gleiche Frequenz, Du 
bekommst wieder einen anderen Wert. Es ist zwar grundsaetzlich richtig, 
dass es dieselbe CPU ist, doch die Leistungsfaehigkeit beruht SEHR stark 
darauf, wie der Speicher angeschlossen ist. Beim SAM7 ist die Anbindung 
optimiert auf Thumb mode.
Alle die CPUs wuerden gleich schnell laufen in MHz aber gemaess deiner 
Messmethode muessten alle Takte unterschiedlich sein, sie sind es nicht. 
Ach ja, noch ein Wert, der nicht vielen gelaeufig ist, der ARM7 hat ein 
CPI von 1,9. CPI sthet fuer Clocks Per Instruction und gilt bei 
optimaler Anbindung, also z.B. Ausfuehrung aus einem 0 Waitstates SRAM.

Das alles ist etwas komplexer als es z.B. bei einem AVR ist, allerdings 
wuerden sich viele wundern wenn sie ein Beispielprogramm auf dem AVR 
ablaufen lassen, sagen wir mal mit 10 MHz und 100 Befehlen. Es besteht 
ja oft die Meinung der AVR ist ein single cycle core. Dann muesste ein 
solches Programm idealerweisse in 10 usec abgearbeitet sein, kannst ja 
mal testen ;-)

Robert Teufel

von Dominik G. (niknik)


Lesenswert?

Robert,

Die Richtigkeit der Messung:
Einstellungen:
1
pPMC ->PMC_PLLR = (( AT91C_CKGR_DIV & 14) |
2
 ( AT91C_CKGR_PLLCOUNT & (10<<8)) |
3
 ( AT91C_CKGR_MUL & (72 < <16)));
f(Quarz) = 18,432MHz
DIV = 14 (Vorteiler)
MUL = (73-1) = 72
f(Prozessor) =18,432MHz/14*73= 96,109MHz
f(Prozessor)/2=48,0545 MHz
Der Prozessor müsste also mit 48,0545 MHz laufen.

Die Messung:
Tp = (M1-M2)/B
fp =1/Tp = B/(M1-M2)

Tp : ein Prozessortakt
fp : die Frequenz des Prozessors
M1 : Zeit für 20 mov-Befehle plus der Befehle, die zum Schalten an PA2 
dienen
M2 : Zeit für 15 mov-Befehle plus der Befehle, die zum Schalten an PA2 
dienen
B : Anzahl der Differenz der mov-Befehle hier 5

gemessen wurde in der Eclipseumgebung:
M1=688,4 ns
M2=584,4 ns
fp = 5/(688,4ns-584,4ns)= 48,0769MHz

Wie Du siehst ist das Verfahren recht plausibel.

Wo Du vermutlich recht hast, ist
1
Beim SAM7 ist die Anbindung
2
optimiert auf Thumb mode.
 und
1
Es koennte sich um die Verzoegerung
2
im Flashzugriff des SAM7 handeln.

Deswegen würde ich gerne zum Vergleich, auch mit dem Timer den Takt 
vermessen.
Ich vermute Du hast das schon mal gemacht. Ich muss mich da erst 
reinarbeiten. Vielleicht hast du da ein paar Tipps für mich, oder am 
Besten
ein wenig Programmcode.....

Dank und Gruss
nik

von Sascha (Gast)


Lesenswert?

Ja so, dann schaut mal bei den Analog Device ARM7 CPUs die haben nur 
eine 16Bit Flash Anbindung. Da ist thumb auch etwas schneller, aber bei 
gut programmiertem ARM-Code dürfte es schnell kompensiert sein, da der 
Thumb-Mode
halt oft zwei Befehle braucht umn das selbe zu tun.

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.