引言
前面我们简单分析了ORPSoC的整体结构,or1200_top的整体结构,or1200_cpu的整体结构。
并对ORPSoC的启动过程,ORPSoC的debug子系统,clock子系统进行了介绍。
本小节,我们一起来分析一下ORPSoC的存储器组织(memory hierarchy)。
1,背景知识
在分析ORPSoC的memory hierarchy之前,我们有必要先了解一下关于cache的background。
关于cache,大概可以从三个方面进行阐述:内存到cache的映射方式,cache的写策略,cache的替换策略。
1>内存到cache的映射方式
内存到cache的映射方式,大致可以分为三种,分别是:直接映射(direct mapped),全相连(fully associative),组相连(set associative)。
为了便于理解,现在假设一个例子,比如咱们的内存只有16bytes,而cache只有4bytes(cache line是1byte),那么对于分别采用三种不同的映射方式,会是什么情况呢?如下图所示:
1》direct mapped
对于direct mapped,为了便于数据查找,一般规定内存数据只能置于缓存的特定区域。对于直接匹配缓存,每一个内存块地址都可通过模运算对应到一个唯一缓存块上。注意这是一个多对一匹配:多个内存块地址须共享一个缓存区域。
对于咱们这个例子来说,内存的0地址只能映射到cache的第0个(0%4=0)cache line,内存的1地址只能映射到cache的第1个(1%4=1)cache line,内存的2地址只能映射到cache的第2个(2%4=2)cache line,内存的3地址只能映射到cache的第3个(3%4=3)cache line,内存的4地址只能映射到cache的第0个(4%4=0)cache line,。。。。。。如此循环下去。
所以如果采用direct mapped的话,core在访问cache时,根据TLB处理之后的物理地址,进行取模(%)运算,就可以直接确定其cache的位置,由于一个cache line可能对应不同的内存地址(具有相同模运算结果的内存),然后将物理地址的tag部分与cache的tag部分进行一次比较,就可以确定是cache hit,还是cache miss。
direct mapped的特点是,逻辑简单,延迟短(只进行一次比较),但命中率低。
2》fully associative
对于fully associative,这种方式,内存中的数据块可以被放置到cache的任意区域。这种相联完全免去了索引的使用,而直接通过在整个缓存空间上匹配标签进行查找。
对于咱们的这个例子来说,内存的某个地址,可以映射到cache的任意个cache line。内存的0地址能映射到cache的第0个cache line,也可以映射到第1个cache line,也可以映射到第2个cache line,也可以映射到第3个cache line。
所以如果采用fully associative的话,core在访问cache时,根据TLB处理之后的物理地址,要依次和所有的cache line的tag进行比较。
fully associative的特点是:控制复杂,查找造成的电路延迟最长,因此仅在特殊场合,如缓存极小时,才会使用,命中率较高。
3》set associative
set associative是direct mapped 和fully associative两种方式的一个折中。
对于咱们这个例子来说,我们将4个cache line分成了两组,内存的0地址只能映射到cache的第0个组(0%2=0),但是在组内是任意的,既可以映射到组内的第0个cache line,也可以映射到第1个cache line。内存的1地址只能映射到cache的第1个组(1%2=1),但是在组内也是任意的,既可以映射到组内的第0个cache line,也可以映射到第1个cache line。内存的2地址只能映射到cache的第0个组(2%2=0),但是在组内也是任意的,既可以映射到组内的第0个cache line,也可以映射到第1个cache line,。。。。。。。依次类推。
所以,如果采用set associative的话,core在访问cache时,根据TLB处理之后的物理地址,先将物理地址取模,得到其可能的cache的组,然后再依次与组内的所有cache line的tag进行比较,确定是cache hit 还是cache miss。
set associative是折中方案,所以其特点就是集direct mapped 和fully associative之所长。是一个平衡方案。
咱们这个例子是2 way set associative,即两路组相连,所谓的两路,是指每个cache组内的cache line的数目,不是分组的数目。比如是4路组相连,指的是每个cache组内有4个cache line。
4》小结
对于直接映射,由于缓存字节数和缓存块数均为2的幂,上述运算可以由硬件通过移位极快地完成。直接匹配