如何實現(xiàn)Arm處理器ICache的測試
時間:2018-09-26 來源:未知
一、什么是Cache
Cache是一種容量比較小,但訪問速度比較快存儲器。由于處理器的速度遠高于主存,處理器直接從內存中存取數(shù)據(jù)要等待一定周期,而Cache位于處理器與主存之間,保存著近一段時間處理器涉及到的主存塊內容。在需要讀取數(shù)據(jù)是,處理器可能就會從Cache中讀取需要的數(shù)據(jù),而不是從主存中獲取數(shù)據(jù),這樣就提高了系統(tǒng)的運行效率。
二、ARM處理器的Cache
ARM處理器支持Cache機制,并將Cache分開為I-Cache(指令緩存)和D-Cache(數(shù)據(jù)緩存)。系統(tǒng)剛上電時,I-Cacche中的內容是無效的,并且I-Cacche的功能也是關閉的,CP15協(xié)處理器的SCTLR寄存器(系統(tǒng)控制寄存器)的bit[12]控制I-Cache的打開和關閉。I-Cache關閉時,CPU每次取指令都要讀主存,所以性能比較低。因此應該盡快打開I-Cache。同樣,系統(tǒng)剛上電時, D-Cache中的內容是無效的,并且D-Cache的功能也是關閉的,SCTLR寄存器的bit[2]控制D-Cache的打開和關閉。因為D-Cache必須在開啟MMU(內存管理單元)后才能使能,而本程序并不打算開啟MMU,所以這里我們不是能D-Cache,只研究I-Cache。
三、Cache測試
我們使用Exynos4412處理器開發(fā)板,該處理器采用32nm制程,擁有四枚主頻可達1.4 GHz的Cortex-A9通用處理核心,擁有32 KB I- Cache和32 KB D- Cache,1 MB L2 Cache。以下是I-Cache的測試代碼,如下:
.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ā)板上測試,先使能I-Cache,再關閉I-Cache,觀察LED燈閃爍的頻率變化。我們能夠發(fā)現(xiàn),使能I-Cache燈的閃爍頻率比較高,關閉I-Cache閃爍頻率低,這說明處理器執(zhí)行過的指令被I-Cache緩存,當處理器再一次執(zhí)行該指令時,處理器只需要從Cache中取出需要的指令,而不再需要訪問主存儲器,不必等待一段時間,從而提高了系統(tǒng)的效率。

