历史上的今天
今天是:2025年01月14日(星期二)
2021年01月14日 | 快速学Arm——存储器加速模块(1)
2021-01-14 来源:eefocus
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的数据读入数据缓冲区中.如果存在,则直接从缓冲区读取.这样就加快了数据访问的速度.
上一篇:LPC存储器加速模块(MAM)
史海拾趣
|
想做一个cab安装包,安装今日插件,按照网上的说明写了个安装程序setupdll.dll, 但是在模拟器上(pocket pc se 2003 Emulator)安装发现setupdll没有被调用(在函数Install_Exit中加了MessageBox,没有弹出,注册表也没写) cab安装包使用vs2005做的 ...… 查看全部问答> |
|
我想使用EINTT4作按键中断输入.定义如下: UINT32 g_EINTIrq = IRQ_EINT4; UINT32 g_EINTSysIntr = SYSINTR_UNDEFINED; PUBLIC DWORD CPK_Init(DWORD dwContext) { &n ...… 查看全部问答> |
|
dshow CreateMediaType FreeMediaType 无法解析的外部符号 我在wince6.0上做dshow开发,已经包含的头文件和库 #include #include #include #include #include &n ...… 查看全部问答> |
|
我之前安装开发环境的时候,发现PB中Device Driver中的SD选项没有,后来把Updates全装上了,就出现了SD选项。 前几天系统崩溃了,重新装上所有东西后发现就是SD选项没有,各位有没有遇到过这种情况啊????急 … 查看全部问答> |
|
MCS-51单片机中,采用12Mhz时钟,定时器T0采用模式1(16位计数器),请问在下面程序中,p1.0的输出频率 ? MOV TMOD,#01H SETB TR0 LOOP:MOV TH0,#0B1H MOV TL0,#0E0H LOOP1:JNB TF0,LOOP1 CLR TR0 CPL P1.0 SJMP LOOP… 查看全部问答> |




