LPC2300系列ARM内部有128bit宽度的Flash存储器,为了对该存储器进行管理,在芯片内部集成了存储器加上模块(MAM).MAM为用户调整Flash操作的参数提供了接口.
LPC2300系列ARM只是有一组Flash存储器,它包含3个128位的缓冲区:
.预取指缓冲区
.分支跟踪缓冲区
.数据缓冲区.
CPU对内部Flash取指和读取数据的操作时受到MAM制约的.例如,若MAM打开了,那么在CPU取指之前,MAM会判断要取出的这条指令是否在缓冲区内,若不存在,MAM会从Flash存储器读取一个指令行到缓冲区中.
介绍一下术语:
"取值":指Arm发出的直接读取Flash的请求.
"预取指":指对当前处理器取指地址之后的地址执行Flash读操作.我理解就是读取了当前地址,那么同时将下一地址提前读出应该就是所所的预取指,"预先取指",呵呵.
下图描述了MAM关闭时取指令的情况:
当关闭了MAM,所有的读Flash存储器请求都导致Flash的读操作.
下面描述了MAM打开时指令操作情况:
当MAM开启时,CPU需要从Flash读取一批指令来执行.那么对前三条指令的读取,CPU不用再从Flash读取而是从MAM的缓冲区里读取.注意第四条指令,CPU仍然会访问Flash.
不过,有时程序可能出现跳转,这时就无法再连续从Flash中读取指令了,见下面的流程:
上面讲的是对指令的读取,MAM同时拥有专门的数据缓冲区,其工作原理与分支跟踪缓冲区类似.当CPU从Flash读取数据时,会先查看这些数据是否在数据缓冲区,如果不在,那么MAN会执行一次Flash读操作,然后把128bit的数据读入数据缓冲区中.如果存在,则直接从缓冲区读取.这样就加快了数据访问的速度.
——————————————-——————转自Eagle的BLOG,
http://blog.sina.com.cn/eaglechen1968