CACHE

L1Pdirect mapped Cache

C64xL1P是直接映射cachedirect mapped,其为Read Allocate,即只在读操作时才进行cache处理(对于L1P,很好理解,因为不可能产生改变程序的代码)。

[@more@]

从上表可以看出,C64xDSP的一些基本参数。其line size32字节,而L1P大小为16k字节,故L1P中包含51232字节的line frame,每条line frame总是映射到内存中的固定地址。这就如下图所示(该图表示了miss hit的计算方法):

内存中的地址0000h0019h总是映射到0 line frame,而3FE0h3FFFh总是映射到511line frame,而由于cache用尽了,所以地址4000h4019又必须映射到0 line frame。注意对于C64x来说,这样的L1P中的一条line frame也就正好包含了一个取址包。

上图中的V bit是一条line frame的有效态位,V=0表示Cache中相应的line frame无效,反之则表示有效。

下图为程序地址在Cache控制器内的结构:

如上图所示,当CPU要读某个地址处的指令时,该地址在Cache中被分为3个部分。其中513位表示了该地址所映射到的set(对于直接映射Cacheset=line frame号)。Cache控制器会检查有效位和Tag1431位)。所作的具体操作见Figure1-5。如果最后结果为0,则read miss。这时控制器会从内存中取出该指令包,并放入L1P相应line frame中,tag被设定,并且V=1,同时该指令包也会被送入CPU,此时该过程结束。

注意,利用Cache最重要的是保证只要一条line frame的内容还有用,就不要取代它。

解决Cache miss问题的一种方案就是建立包含多条line frameset。这样内存中多条具有相同Set值的地址下的指令就可以同时存在于Cache中而不会发生冲突,从而使命中率提高。

?

L1D2-way set-associative cache

C64xL1D是两路set相关的cache,下表为其基本参数:

2-way set-associative cache的每个set包含两条line frame,一条在way 0,另一条在way 1。内存中的每条line实际上还是映射到cache中的一个set中,但可以使way0line frame,也可以使way1line frame

从上表中可以看出C64xL1D每条line frame64字节。并且是Read AllocateWrite-back的,这里对此先不做解释。上表还说明当write miss时,L1D通过4x64-bitwrite buffer向下级存储器写入数据。

下图为set-associative cache的结构图,图中说明了其hitmiss的确定方法,这其实和direct mapped cache差不多,只是有两次tag比较,来确定需要的数据保存在那一路。

当两路中都不包含所需数据时,就要从内存中取了,而取到的数据应该放到哪一路呢?这就需要LRUleast-recently-used)位了。Cache中每一个set都有一个LRU位,当LRU=0,则数据被映射到way0line frame中,如果LRU=1,则数据被映射到way1line frame中。每次访问到某个set中的某路line frame时,如果hitLRU都会改变一次,来保证most-recently-used位不被取代掉。而当每次某个set missLRU都被重新设置为新读入数据的way。而上述机制由程序的局部性决定。注意LRU只在miss发生时被参考,但是却在每次line way访问时(不论misshit)都要作相应调整。

前面说到过,L1DRead Allocate cache,这的意思cache中的一条line frame只在read miss发生时才会作相应的重新映射操作,而write miss时,只是将数据通过write buffer写入下一级内存中(L2 SDRAM或者外部存储器),这个write buffer包括464bit的通路。

同时,因为L1DWrite-back cache,所以当write hit发生时,数据只是写入cache,而不会立即写入对应的下级内存。这样,为了在以后能正确地将修改过的数据写回下级内存,就必须知道cache中的哪条line frameCPU修改过。所以cache中每条line frame都有一个dirty bitD)与其相关。Dirty bit的初始值为0,当CPU修改过其数据,则被置位1。当某一条line frame以为read miss而需要被替代时,则会检测其dirty bit,如果它是一条dirty lineD=1),则其内容会先写回下级内存,再被替代;否则(D=0),它的内容会被忽略。这种写回操作也能由程序向cache 控制器发送write back命令来实现。

x1pNWjjkHJ3o_wvCbqAIgd-sKYkx6W_shisxMRWNYyjIgoU7tvPDxLHW0gfrFo7cBPnnOIbydl0XaGh5Ts6KAY1svMlF4lQAkNDrsOe06n6VmQx1pNWjjkHJ3o_wvCbqAIgd-sJIHE43RH4Uceg6tuFHdtWdP087XnO0luxx-bAdlCXMnglw7m3YRq7-rDl38u6RBWWGqC5QS0zi-w-AH4nNTKkE
x1pNWjjkHJ3o_wvCbqAIgd-sCM7xPp1uhEiYVpal3OeYgx0t5BAS9LO6QEtEb8To2A28pmXxBHTSDoYct2bjqKp28FMV16TxkCACoLDi7rfZIMx1pNWjjkHJ3o_wvCbqAIgd-sFENnrumP5PjFL_p_1ULra_DqN-rzYcc2S7sSn7Wfn9bX5wb9WmgI4YpfxlLTyA-TD_1fe1cc8_bUKxZ9S6Tu4Q
x1pNWjjkHJ3o_wvCbqAIgd-sBHeVrJEgdJq5_W8v5oWWEFPjRMauhBM9C_bewgiw6O7EGC4HSclUSZXmpYCTFTsxV8SDau_Ri0Jh5xlXJ0u5kYx1pNWjjkHJ3o_wvCbqAIgd-sGKMvBvfgFsrNixCuNHRxTlBtekFuugoVgITbM3ncnMt0ECDY4OzTdKOD731YABpU-sHlaRBW5qwtzBcet7XNv8

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7845854/viewspace-903113/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7845854/viewspace-903113/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值