www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Prozessortakt thumb arm ist unterschiedlich


Autor: Dominik Gaeta (niknik)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas K. (a-k)
Datum:

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

Autor: Dominik Gaeta (niknik)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl (Gast)
Datum:

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

Autor: Robert Teufel (robertteufel)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dominik Gaeta (niknik)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie gemessen?
Den folgenden Code ins Programm einfügen(singlecycle)
m_pPio->PIO_SODR = CpuTakt;         //CpuTakt ein  
    __asm{     
   mov r0,#0fH    ;    //1 Takt 
  mov r0,#0fH    ;    //1 Takt
  mov r0,#0fH    ;    //1 Takt
  mov r0,#0fH    ;    //1 Takt
  mov r0,#0fH    ;    //1 Takt
  mov r0,#0fH    ;    //1 Takt
  mov r0,#0fH    ;    //1 Takt
  mov r0,#0fH    ;    //1 Takt
  mov r0,#0fH    ;    //1 Takt
  mov r0,#0fH    ;    //1 Takt 10
  mov r0,#0fH    ;    //1 Takt
  mov r0,#0fH    ;    //1 Takt
  mov r0,#0fH    ;    //1 Takt
  mov r0,#0fH    ;    //1 Takt
  mov r0,#0fH    ;    //1 Takt 15
  mov r0,#0fH    ;    //1 Takt
  mov r0,#0fH    ;    //1 Takt
        mov r0,#0fH    ;    //1 Takt
  mov r0,#0fH    ;    //1 Takt
  mov r0,#0fH    ;    //1 Takt 20
  }
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

Autor: Robert Teufel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dominik Gaeta (niknik)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Robert,

Die Richtigkeit der Messung:
Einstellungen:
pPMC ->PMC_PLLR = (( AT91C_CKGR_DIV & 14) |
 ( AT91C_CKGR_PLLCOUNT & (10<<8)) |
 ( 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
Beim SAM7 ist die Anbindung
optimiert auf Thumb mode.
 und
Es koennte sich um die Verzoegerung
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

Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.