知识点介绍

i> icache(instruction cache)是指令高速缓冲存储器。 Cache存储体:存放由主存调入的指令与数据块.

i> dcache(data cache):数据高速缓冲存储器

CACHE:Cache是一种特殊的存储器,它由Cache存储部件和Cache控制部件组成。Cache 存储部件一般采用与CPU同类型的半导体存储器件,存取速度比内存快几倍甚至十几倍。而Cache 控制器部件包括主存地址寄存器、Cache 地址寄存器,主存—Cache地址变换部件及替换控制部件等。
i> 从容量来说:CPU <寄存器 < cache < DDR
从速度来说:CPU >寄存器 > cache > DDR

icache工作时,会把我们CPU正在运行的指令的旁边几句指令事先给读取到icache中(CPU设计有一个基本原理:代码执行时,下一句执行当前一句代码旁边代码的可能性要大很多)。当下一句CPU要指令时,cache首先检查自己事先准备的缓存指令中有没这句,如果有就直接拿给CPU,如果没有则需要从DDR中重新去读取拿给CPU,并同时做一系列的动作:清缓存、重新缓存。

iROM中BL0对cache的操作

首先,icache的一切动作都是自动的,不需人为干预。我们所需要做的就是打开/关闭icache。
其次,在210的iROM中BL0已经打开了icache。所以之前看到的现象都是icache打开时的现象。

汇编代码读写cp15以开关icache

mrc p15,0,r0,c1,c0,0;            // 读出cp15的c1到r0中
    bic r0, r0, #(1<<12)            // bit12 置0  关icache
    //orr r0, r0, #(1<<12)            // bit12 置1  开icache
    mcr p15,0,r0,c1,c0,0;

通过以下步骤验证开关icache对程序执行速度的影响
1 直接使用BL0中对icache的操作
2 关icache
3 开icache
实验结果分析:
结论1:irom中确实是打开了icache的。
结论2:icache关闭确实比icache打开时led闪烁变慢,说明指令执行速度变慢。


涉及汇编指令学习

MCR/MRC

MRC    p2,5,r3,c5,c6

协处理器p2把c5和c6经过5操作的结果赋给r3

MRC    p3,9,r3,c5,c6,2

协处理器p3把c5和c6经过9操作(类型2)的结果赋给r3

MCR    p6,0,r4,c5,c6

协处理器p6把r4执行0操作后将结果存放进c6

bic/orr

bic指令的格式为:

bic{条件}{S} 目的寄存器,操作数1,操作数2
bic指令用于清除操作数1的某些位,并把结果放置到目的寄存器中。操作数1应是一个寄存器,
操作数2可以是一个寄存器、被移位的寄存器、或一个立即数。操作数2为32位的掩码,如果在掩码中置了某一位1,则清除这一位。未设置的掩码位保持不变。

orr指令的格式为:

orr{条件}{S} 目的寄存器,操作数1,操作数2
orr指令用于在两个操作数上进行逻辑戒运算,并把结果放置到目的寄存器中。操作数1应该是一
个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常用于设置操
作数1的某些位。

最后修改:2018 年 12 月 27 日
如果觉得我的文章对你有用,请随意赞赏