ARM-Uhr die Geschwindigkeit auf dem raspberry pi
Laufen bare-metal (kein Betriebssystem, kein Linux)
Den Spezifikationen bedeutet, der ARM kann/läuft 700MHz, der sys-Uhr entspricht, das Handbuch und die scheint zu laufen bei 250MHz. Einfache versuche auf den ARM zu implizieren, dass es das gleiche tun, zum Beispiel mit dem instruction cache auf
test:
subs r0,r0,#1
bne test
Variieren und die Anzahl der subs Anweisungen Dominieren über den Zweig, es wird in der ball-park von 250MHz, aber ein langer Weg Weg von 700MHz.
Ich da ein phy-Einstellung, ich bin nicht zu sehen, in dem Datenblatt für die Multiplikation der ARM-Uhr?
EDIT:
Vielleicht meine Annahmen sind fehlerhaft...
.globl ARMTEST0
ARMTEST0:
subs r0,r0,#1
bne ARMTEST0
bx lr
.globl ARMTEST1
ARMTEST1:
subs r0,r0,#1
subs r0,r0,#1
subs r0,r0,#1
subs r0,r0,#1
subs r0,r0,#1
subs r0,r0,#1
subs r0,r0,#1
subs r0,r0,#1
bne ARMTEST1
bx lr
.globl ARMTEST2
ARMTEST2:
subs r0,r0,#1
subs r0,r0,#1
subs r0,r0,#1
subs r0,r0,#1
subs r0,r0,#1
subs r0,r0,#1
subs r0,r0,#1
subs r0,r0,#1
subs r0,r0,#1
subs r0,r0,#1
subs r0,r0,#1
subs r0,r0,#1
subs r0,r0,#1
subs r0,r0,#1
subs r0,r0,#1
subs r0,r0,#1
bne ARMTEST2
bx lr
.globl ARMTEST3
ARMTEST3:
subs r1,r0,#1
subs r2,r1,#1
subs r3,r2,#1
subs r0,r3,#1
subs r1,r0,#1
subs r2,r1,#1
subs r3,r2,#1
subs r0,r3,#1
subs r1,r0,#1
subs r2,r1,#1
subs r3,r2,#1
subs r0,r3,#1
subs r1,r0,#1
subs r2,r1,#1
subs r3,r2,#1
subs r0,r3,#1
bne ARMTEST3
bx lr
System-timer-ticks) in hex-pro-Funktion (250Mhz system-timer überprüft, gegen die Stoppuhr, etc).
02DB6DF7 ARMTEST0
02DB6E1C ARMTEST0
00AB6E2A ARMTEST1
00836E46 ARMTEST2
00836E2A ARMTEST3
Gibt:
ARMTEST0
0x01000000 subs instructions
0x01000000 bne instructions
0x02000000 instructions
1.43 clocks per instruction. 175Mips.
ARMTEST1
0x01000000 sub instructions
0x00200000 bne instructions
0x01200000 instructions
1.68 instructions per clock. 420Mips
ARMTEST2
0x01000000 sub instructions
0x00100000 bne instructions
0x01100000 instructions
2.07 instructions per clock. 517Mips
ARMTEST3
0x01000000 sub instructions
0x00100000 bne instructions
0x01100000 instructions
2.07 instructions per clock. 517Mips
Der ARM11 ist super-Skalar-mehr als eine Instruktion pro Takt ist nicht unerwartet. Ich würde erwarten, mehr obwohl. Mit nur register 0 kann Chaos mit dem Rohr, da muss man warten, bis ein Ergebnis einer Anweisung vor der Ausführung der nächsten. Ich hatte erwartet, einen Unterschied zwischen test 2 und 3, vielleicht noch eine schlechte Annahme. Vielleicht ist es wirklich 500Mhz nicht 700? Es gibt eine Linie in den linux-Quellen, die erwähnt 500000000 Uhr.
static struct clk osc_clk = {
#ifdef CONFIG_ARCH_BCM2708_CHIPIT
.rate = 27000000,
#else
.rate = 500000000, /* ARM clock is set from the VideoCore booter */
#endif
};
/* warning - the USB needs a clock > 34MHz */
#ifdef CONFIG_MMC_BCM2708
static struct clk sdhost_clk = {
#ifdef CONFIG_ARCH_BCM2708_CHIPIT
.rate = 4000000, /* 4MHz */
#else
.rate = 250000000, /* 250MHz */
#endif
};
#endif
Vielleicht, was ich glaube, ich habe gemessen als 250Mhz 270 und der ARM ist bei 500MHz?
EDIT2...DOH
Nicht eine große pipeline, die Verbesserung war es, das ist besser:
.globl ARMTEST3
ARMTEST3:
subs r0,r0,#1
nop
nop
nop
nop
nop
nop
nop
nop
subs r0,r0,#1
nop
nop
nop
nop
nop
nop
nop
nop
subs r0,r0,#1
nop
nop
nop
nop
nop
nop
nop
nop
subs r0,r0,#1
nop
nop
nop
nop
nop
nop
nop
nop
subs r0,r0,#1
nop
nop
nop
nop
nop
nop
nop
nop
subs r0,r0,#1
nop
nop
nop
nop
nop
nop
nop
nop
subs r0,r0,#1
nop
nop
nop
nop
nop
nop
nop
nop
subs r0,r0,#1
nop
nop
nop
nop
nop
nop
nop
nop
bne ARMTEST3
bx lr
ARMTEST3
0x01000000 sub instructions
0x08000000 nop instructions
0x00100000 bne instructions
0x09100000 instructions
037000D7 system clocks
2.64 instructions per clock. 659Mips
Ich es nicht config.txt die Arbeit auf den ersten, dann re-build eine linux-sd-Karte, gestartet wird, es zu finden, dass der /boot/- Verzeichnis ist in der Tat die fat-partition enthält, die gpu-Startdateien und den kernel.img-arm boot-Datei. Also NICHT in einem boot/dir aber in derselben dir mit der .bin ist und .elf und .img-Datei erstellen config.txt und setzen arm_freq=etwas, die gpu-bootloader macht dann die änderung der pll-Multiplikator, so dass, wenn der arm beginnt, ist es mit dieser Geschwindigkeit. Ich immer noch erwarten mehr als 700 Millionen Anweisungen pro Sekunde-und bin nicht zu sehen, dass, müssen immer wieder versuchen, denke ich.
- Könnten Sie einen ähnlichen test durchführen, unter welcher die meisten offiziellen linux-kernel für den pi (eventuell hacken, den test in der kernel selbst). Überprüfen Sie auch die Anzahl der instruction cycles erforderlich, um die Ausführung von code. Und Lesen Sie über Ihre Geräte-spezifischen kernel-Initialisierung-code zu sehen, wenn Sie eine Neuprogrammierung einer pll-register.
- Ich bin daran interessiert zu wissen, ob Sie Booten Sie Ihren test-code von der SD-Karte oder ob Sie JTAG ' ed es. Nicht um Ihnen Ihre Frage, die Sie verstehen, sondern weil ich mich Frage, ob Sie gefunden haben, Informationen über den bootloader.
- Es gibt drei jtags, die gpu, den arm und den Netzwerk-chip. GPU, Nein, ich habe nicht alles gemacht, was mit der gpu. Netzwerk jtag, NÖ, arm jtag, ja, können und haben, sondern auch, um den arm-jtag-Sie müssen arm-code zu wechseln, gpio-pins, die ich verwenden Sie die sd-Karte zu Booten, das kleine Programm. Ich habe auch einen seriellen bootloader (arm beginnt auf sd-Karte) und eine jtag-Bootloaders (arm beginnt auf Karte).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sein könnte, lohnt ein Blick auf die boot-loader zur Verfügung, mit der Arch-Linux-Referenz-Verteilung aus der Raspberry Pi organisation download-Seiten. Ich habe keine Ahnung, ob es eine funktionierende Möglichkeit, aber sein config.txt enthält die Zeile
Gibt es auch Berichte von Menschen mit übertaktet den Pi - also Informationen über die Initialisierung des clock ist sicherlich da draußen, irgendwo.
Wahrscheinlich aufgrund der Tatsache, dass der Raspberry Pi Foundation ist im wesentlichen aus der Broadcom-Mitarbeiter, den Sie gewählt haben, ein Broadcom-Gerät wie die CPU. Während dies bedeutet, dass der RPi bekommt ein relativ hi-performance ARM11-bei sehr geringen Kosten, leider Broadcom nur die vollständigen details der chip licencees, so die Informationen, die Sie benötigen, um bis die PLL darf nicht öffentlich zugänglich sein, und ich vermute, dass ist eingebettet in die "firmware" (firmware-binaries zur Verfügung gestellt von Broadcom.
Ich weiß nicht viel über bare-metal-Programmierung, aber dieser code von nutzen sein könnten:
https://github.com/dwelch67/raspberrypi
Beachten ist der Teil der readme-Datei beschreibt, dass die boot-Reihenfolge:
Bedeutung, dass die config.txt ist unabhängig von der linux-kernel und die chip-sets der Taktgeschwindigkeit selbst (solange diese Sequenz ist tatsächlich wahr.)
Den code in das repository könnte Ihnen helfen, Ihre Frage zu beantworten.
Auch auf der Raspberry Pi website, Sie habe einen Beitrag über offizielle overclocking: http://www.raspberrypi.org/archives/2008
Nennen Sie einen cpufreq-Treiber, den Sie sollten in der Lage sein, um die Quelle zu (da es Teil der linux-source-tree.) Das könnte auch helfen.
Können Sie tune Ihre Himbeer-Pi, und ändern Sie zum Beispiel ARM-Taktfrequenz und Ram/Video Ram. Ein gutes tutorial.
Ich weiß, das wurde gefragt und antwortete, eine Weile her, aber ich lief über diese Frage hoffe schnelle Antwort zu bekommen. Falls jemand wissen möchte, das ist, wie ich es behoben für meine bare-metal-setup. Ich hatte Erfolg auf der RPI3 durch hinzufügen
Wieder, obwohl dies war bare-metal, die config.txt gelesen wird von der GPU-firmware, bevor Sie den ARM aus und laden Sie Ihre bare-metal-code (von dem was ich verstehe). Ich fand diese verwiesen hier. Beachten Sie, dass ich auch versucht, programmgesteuert ändern Sie die Frequenz, aber konnte Sie nicht finden, einen Verweis (ich sah sogar rund um die linux kernel source tree, aber ich bin ein völliger Anfänger in die kernel-Entwicklung).