本文有些内容是对网上各种资料的翻译和整理
ARM926的Cache和Write buffer
一、基本概念
Cache是位于CPU和主存储器(SDRAM)之间的高速缓冲存储器(一般使用SRAM),可以加速系统的性能。Cache是按照cache line组织的,当访问主存储器的时候,有可能数据或者指令位于cache line中,我们称之cache hit,这种情况下,不需要访问外部慢速的主存储器,从而加快了存储器的访问速度。也有可能数据或者指令没有位于cache line中,我们称之cache miss,这种情况下,需要从外部的主存储器加载数据或指令到cache中来。由于时间局部性(tmpporal locality)和空间局部性(spatial locality)原理,load 到cache中的数据和指令往往是最近要使用的内容,因此可以提高整体的性能。
Write buffer用于优化写主存储器的性能。当CPU要保存数据的时候,首先写入write buffer,之后write buffer再在适当的时候写入主存储器。通过write buffer,CPU可以全速运行。
二、Cache的组织
Cache按照cache line组织,每个cache line由下面的内容组成:
1、Flag(是否有效)
2、地址高位(一般是地址的若干MSB部分组成)
3、数据块(具体的数据或者指令)
ARM926的cache line是32字节,也就是说cache line中的数据块地址的低5bit都是一样的,因此地址高位就是由地址的[31:5]组成。当CPU访问一个地址的时候,如果该地址的[31:5]bit和cache line中的地址高位匹配并且是有效的cache line,那么cache hit,数据可以直接从cache line的数据库域读取。这样的cache组织很简单,但是效率很低,因为CPU要遍历整个cache以便确定是否cache hit。为了提高效率,cache往往被分成若干个cache set(ARM926EJ的16k的cache被分成128个cache set),因此地址高位又可以进一步细分为:
1、Tag(比对是否cache hit)
2、Set i