Запуск голый металл (без операционной системы, ни Linux)ARM тактовая на Raspberry Pi
спецификации подразумевает ARM может/мчит 700 МГц, то SYS часы соответствует инструкции и, кажется, работает на частоте 250 МГц. Простые тесты на ARM предполагают, что он делает то же самое, например, с помощью кэша команд на
test:
subs r0,r0,#1
bne test
И варьировать количество инструкций Subs доминировать над веткой, она находится в шаре парка 250MHz, но далеко от 700 МГц.
У меня там phy-настройка, которую я не вижу в техническом описании для умножения часов ARM?
EDIT:
Может быть, мои предположения ошибочны ...
.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
Системный таймер тикает в шестнадцатеричном на функцию (системный таймер 250MHz сверены секундомером и т.д.).
02DB6DF7 ARMTEST0
02DB6E1C ARMTEST0
00AB6E2A ARMTEST1
00836E46 ARMTEST2
00836E2A ARMTEST3
Что дает:
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
ARM11 супер-скалярной более одной инструкции за такт не является неожиданным. Я бы ожидал большего. Использование только регистра 0 может испортиться с трубой, так как вам нужно ждать одного результата одной инструкции перед выполнением следующего. Я ожидал увидеть разницу между тестами 2 и 3, возможно, еще одно плохое предположение. Может быть, его действительно 500Mhz не 700? В источниках Linux есть одна строка, в которой упоминаются часы 500000000.
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
Может быть, то, что я думаю, что я измерил, как 250MHz 270 и ARM находится на 500МГц?
EDIT2 ... DOH
Это не было значительное улучшение трубопровода было, это лучше:
.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
я не смог получить config.txt работать на первом, а затем вновь построить linux sd, загрузив его, чтобы найти, что каталог/boot/фактически является жирным разделом, содержащим загрузочные файлы gpu и файл загрузки ядра kernel.img. Так что НЕ в boot/dir, но в том же каталоге с файлами .bin и .elf и .img создайте config.txt и поместите arm_freq = что-то, загрузчик gpu затем произведет модификацию множителя pll, чтобы при запуске руки это с такой скоростью. Я все еще ожидаю более 700 миллионов инструкций в секунду, и я не вижу этого, мне нужно будет продолжать попытки, я думаю.
Вы можете выполнить аналогичный тест под любым, что является самым официальным ядром linux для pi (возможно, взломать тест в самом ядре). Также проверьте количество циклов инструкций, необходимых для выполнения вашего кода. И прочитайте их код инициализации ядра для конкретного устройства, чтобы проверить, перепрограммируют ли регистр PLL. –
Мне интересно узнать, загрузили ли вы свой тестовый код с SD-карты или внесли ли вы его JTAG. Не помогайте в вопросе, который вы понимаете, а потому, что мне интересно, нашли ли вы информацию о загрузчике. – Clifford
Есть три jtags, gpu, arm и сетевой чип. GPU, нет, я ничего не сделал с gpu. сеть jtag, nope, arm jtag, да, может и есть, но для использования arm jtag вам нужен код руки для переключения контактов gpio, который я использую SD-карту для загрузки этой небольшой программы. У меня есть как серийный загрузчик (рука запускается на SD-карте), так и загрузчик jtag (рука начинается с карты). –