當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > 如何實(shí)現(xiàn)Arm處理器ICache的測(cè)試
一、什么是Cache
Cache是一種容量比較小,但訪問(wèn)速度比較快存儲(chǔ)器。由于處理器的速度遠(yuǎn)高于主存,處理器直接從內(nèi)存中存取數(shù)據(jù)要等待一定周期,而Cache位于處理器與主存之間,保存著近一段時(shí)間處理器涉及到的主存塊內(nèi)容。在需要讀取數(shù)據(jù)是,處理器可能就會(huì)從Cache中讀取需要的數(shù)據(jù),而不是從主存中獲取數(shù)據(jù),這樣就提高了系統(tǒng)的運(yùn)行效率。
二、ARM處理器的Cache
ARM處理器支持Cache機(jī)制,并將Cache分開為I-Cache(指令緩存)和D-Cache(數(shù)據(jù)緩存)。系統(tǒng)剛上電時(shí),I-Cacche中的內(nèi)容是無(wú)效的,并且I-Cacche的功能也是關(guān)閉的,CP15協(xié)處理器的SCTLR寄存器(系統(tǒng)控制寄存器)的bit[12]控制I-Cache的打開和關(guān)閉。I-Cache關(guān)閉時(shí),CPU每次取指令都要讀主存,所以性能比較低。因此應(yīng)該盡快打開I-Cache。同樣,系統(tǒng)剛上電時(shí), D-Cache中的內(nèi)容是無(wú)效的,并且D-Cache的功能也是關(guān)閉的,SCTLR寄存器的bit[2]控制D-Cache的打開和關(guān)閉。因?yàn)镈-Cache必須在開啟MMU(內(nèi)存管理單元)后才能使能,而本程序并不打算開啟MMU,所以這里我們不是能D-Cache,只研究I-Cache。
三、Cache測(cè)試
我們使用Exynos4412處理器開發(fā)板,該處理器采用32nm制程,擁有四枚主頻可達(dá)1.4 GHz的Cortex-A9通用處理核心,擁有32 KB I- Cache和32 KB D- Cache,1 MB L2 Cache。以下是I-Cache的測(cè)試代碼,如下:
.section .text
.globl _start
_start:
ldr r0, =WTCON
mov r1, #0
str r1, [r0]
mrc p15, 0, r0, c1, c0, 0
/* orr r0, r0, #0x1000 @Enable ICache */
bic r0, r0, #0x1000 @Disable ICache
mcr p15, 0, r0, c1, c0, 0
ldr r0, =GPF3CON
ldr r1, =0x10000
str r1, [r0]
led_flash:
ldr r0, =GPF3DAT
mov r1, #0x10
str r1, [r0]
bl delay
mov r1, #0x0
str r1, [r0]
bl delay
bled_flash
delay:
cmp r0, #0
subne r0, r0, #1
bne delay
.end
將該程序放到Exynos4412開發(fā)板上測(cè)試,先使能I-Cache,再關(guān)閉I-Cache,觀察LED燈閃爍的頻率變化。我們能夠發(fā)現(xiàn),使能I-Cache燈的閃爍頻率比較高,關(guān)閉I-Cache閃爍頻率低,這說(shuō)明處理器執(zhí)行過(guò)的指令被I-Cache緩存,當(dāng)處理器再一次執(zhí)行該指令時(shí),處理器只需要從Cache中取出需要的指令,而不再需要訪問(wèn)主存儲(chǔ)器,不必等待一段時(shí)間,從而提高了系統(tǒng)的效率。