目录
【Cortex-M7内核的L1 Cache】
一
Cache又分数据缓存D-Cache和指令缓冲I-Cache,STM32H7 的数据缓存和指令缓存大小都是16KB。STM32H7主频是400MHz,除了TCM和Cache以400MHz工作,其它AXI SRAM,SRAM1,SRAM2等都是以200MHz工作。数据缓存D-Cache就是解决CPU加速访问SRAM。
如果每次CPU要读写SRAM区的数据,都能够在Cache里面进行,自然是最好的,实现了200MHz到400MHz的飞跃,实际是做不到的,因为数据Cache只有16KB大小,总有用完的时候。
有了cache后,core对内存中的数据访问流程如下图所示:
L1 Cache由多行内存区组成,每行有32字节,每行都配有一个地址标签。
数据缓冲DCache:是每4行为一组,称为4-way set associative。
指令缓冲区ICache:是2行为一组, 称为2-way set-associative
这样节省地址标签,不用每个行都标记一个地址。
Cache hit: 要访问的数据/指令在cache里面.
Cache miss: 要访问的数据/指令不在cache里面.
二,Cache4种策略
<回写:如果Cache中有,写数据只写到Cache,不写到RAM。>
<透写:如果Cache中有,写数据也要同时写到Cache和RAM。>
<write allocate:写数据时,如果Cache中没有,那么就要在Cache中开辟一个空间,把数据写入Cache,同时把RAM中的相邻数据加载进来填充Cache。>
<no write allocate:写数据时,如果Cache中没有,那么把数据直接写入RAM。>
<read allocate:读数据时,如果Cache中没有,那么就要在Cache中开辟一个空间,把数据从RAM中加载进来,后续的读操作,就可以直接从Cache中读取了。>
<no read allocate:读数据时,如果Cache中没有,那么直接从RAM中读。>
三,Cache读操作和写操作
1,Core 读cache时:
若hit,则直接从cache读出数据即可。
若miss,有两种处理方式:
>read through , 直接从内存中读出
>read allocate, 先把数据读到cache,再从cache读出。如果 CPU 要读取的 SRAM 区数据在 Cache 中已经加载好,就可以直接从 Cache 里面读取。如果没有,就用到配置 read allocate 了,意思就是在 Cache 里面开辟区域,将 SRAM 区数据加载进来,后续的操作,CPU 可以直接从 Cache 里面读取,从而时间加速。
2,Core 写cache时:
若hit,两种处理方式:
>write-through模式: 可以直接写到内存中同时放到Cache里面,优点是内存和cache同步更新,没有多总线访问造成的数据一致性问题,缺点是无法在写操作上面发挥性能。
>Write back模式: Cache line会被标为dirty,等到此行被evicted(驱逐&#