微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > 嵌入式系统设计讨论 > 如何实现Arm处理器ICache的测试

如何实现Arm处理器ICache的测试

时间:10-02 整理:3721RD 点击:

一、什么是Cache

Cache是一种容量比较小,但访问速度比较快存储器。由于处理器的速度远高于主存,处理器直接从内存中存取数据要等待一定周期,而Cache位于处理器与主存之间,保存着最近一段时间处理器涉及到的主存块内容。在需要读取数据是,处理器可能就会从Cache中读取需要的数据,而不是从主存中获取数据,这样就提高了系统的运行效率。

二、ARM处理器的Cache

ARM处理器支持Cache机制,并将Cache分开为I-Cache(指令缓存)和D-Cache(数据缓存)。系统刚上电时,I-Cacche中的内容是无效的,并且I-Cacche的功能也是关闭的,CP15协处理器的SCTLR寄存器(系统控制寄存器)的bit[12]控制I-Cache的打开和关闭。I-Cache关闭时,CPU每次取指令都要读主存,所以性能比较低。因此应该尽快打开I-Cache。同样,系统刚上电时, D-Cache中的内容是无效的,并且D-Cache的功能也是关闭的,SCTLR寄存器的bit[2]控制D-Cache的打开和关闭。因为D-Cache必须在开启MMU(内存管理单元)后才能使能,而本程序并不打算开启MMU,所以这里我们不是能D-Cache,只研究I-Cache。

三、Cache测试

我们使用Exynos4412处理器开发板,该处理器采用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开发板上测试,先使能I-Cache,再关闭I-Cache,观察LED灯闪烁的频率变化。我们能够发现,使能I-Cache灯的闪烁频率比较高,关闭I-Cache闪烁频率低,这说明处理器执行过的指令被I-Cache缓存,当处理器再一次执行该指令时,处理器只需要从Cache中取出需要的指令,而不再需要访问主存储器,不必等待一段时间,从而提高了系统的效率。


被最后的一句话无语了~

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top