OpenRisc-39-ORPSoC,or1200的memory hierarchy整体分析

本文深入探讨了ORPSoC的内存层次结构,从内存到cache的映射方式、写策略、替换策略和地址翻译等方面详细解析背景知识。接着分析了ORPSoC的三级cache设计,包括qmem、i/dcache和stor buffer,重点讲解了它们的写策略。最后,介绍了与SDRAM之间的缓存,包括其接口、结构、逻辑和跨时钟域设计,为理解ORPSoC的memory hierarchy提供整体分析。

引言

前面我们简单分析了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的幂,上述运算可以由硬件通过移位极快地完成。直接匹配

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值