1747|0

2015

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

C64x+ CACHE一致性问题分析 [复制链接]

在任何时刻,Core或者其它Master访问存储器中数据时,由于CACHE的存在造成不能够得到最近更新过的数据,就会出现CACHE一致性问题。

在一个特定的时间范围内,各级CACHE和它的下一级存储器中的内容不一致是正常的。因为CACHE的作用是在一段时间内将低速存储器中的内容自动搬运到高速的CACHE中重复使用。当CACHE中的空间被后续的数据占用的时候,才将CACHE中的内容进行失效或者回写的操作。在失效或者回写之前,CACHE中的内容可能与物理存储器中的内容是不一致的。这种临时性的不一致是正常的,上述CACHE一致性问题的描述不包含此类正常情况。

CACHE的引入是为了提高Core存取数据的效率,所以出现CACHE一致性问题一定与Core对存储器的访问有关。Core对存储器的访问分为两类:
1. Core读代码或者数据;
2. Core写代码或者数据。

据此,CACHE的一致性问题分为两个大类:Core读一致性问题和Core写一致性问题。在下面两个小节中,分别描述了这两种情况的模型:

3.1 Core读一致性模型

图 3给出了Core读一致性的模型。在这个模型中,CACHE一致性问题的存在取决于图中虚线箭头指示的第二步操作能否在Core从CACHE中重新读数据之前完成。如果不能,则会造成Core读取的数据不是其它Master更新后的数据,而是原来CACHE中的内容,从而导致一致性的问题。

图 3 Core读一致性模型

L1P CACHE对L2内存或者DDR2外存中的代码进行缓存。当Core第一次对L2或者DDR2中的代码进行读操作的时候,由于代码不在L1P CACHE中,CAHCE硬件会将L2或者DDR2中的代码读到L1P CACHE中。Core可以得到最新的代码,不存在一致性的问题。此后,如果其它Master更新L2或者DDR2中的代码,然后Core再次读取此部分代码时,会发现相应的代码已经存在L1P CACHE中,此时Core会直接从L1P CACHE中读取代码。由于Core不能得到最新的代码,就出现了Core读一致性的问题。

L1D Core读一致性问题的原理和L1P相同,只是L1D缓存的是L2或者DDR2中的数据。

L2 CACHE对DDR2中的代码/数据进行缓存,当Core第一次对DDR2中的代码/数据进行读操作,这时代码/数据不在L2 CACHE中,需要进行L2 CACHE的加载,Core可以得到最新的代码/数据。之后,其它Master对DDR2中的代码/数据进行更改,Core重读此部分代码/数据的时候,Core读到的是L2 CACHE中的内容而不是DDR2中最新的代码/数据,因此也存在Core读一致性的问题。

3.2 Core写一致性模型

图 4给出了Core写一致性的模型。在这个模型中,CACHE一致性问题的存在取决于图中虚线箭头指示的第二步操作能否在其它Master从存储器中读数据之前完成。如果不能,会造成其它Master从存储器中读到的数据是原来的数据而不是Core更新过的数据,从而导致一致性的问题。

图 4 Core写一致性模型

当Core对L2或者DDR2中的代码/数据进行写操作的时候,如果代码/数据已经在L1 CACHE中,新的代码/数据会被更新到L1 CACHE中。当其它Master从L2或者DDR2中读代码/数据的时候,会直接从L2或者DDR2中读取相应的内容,如果L1 CACHE中新的代码/数据未被更新到L2或者DDR2中,则其它Master读取的不是更新后的内容,就会出现Core写一致性的问题。

同样,Core更新过的代码/数据有可能只是缓存在L2 CACHE中,其它Master从DDR2中读取的内容不是更新后的内容,同样会出现Core写一致性的问题。

3.3 C64x+一致性分析

在C64x+上的CACHE一致性问题,需要根据放置代码/数据的相应位置进行分析。由于在C64x+平台上,L1P、L1D和L2内存既可以作为CACHE又可以作为存储器使用,因此,在分析一致性问题的时候,需要考虑以下几种情况

Case1. 代码在L1P存储器中;
Case2. 代码在L2存储器中;
Case3. 代码在DDR2存储器中;
Case4. 数据在L1D存储器中;
Case5. 数据在L2存储器中;
Case6. 数据在DDR2存储器中。

对于Case1,由于代码直接在L1P存储器中,不需要进行CACHE,所以不会存在一致性的问题。

对于Case2和Case3,涉及到L1P CACHE,存在代码的更新能否被Core读到的问题。代码的更新分成两种情况:一是Core在运行过程中对代码进行修改;二是其它Master对代码的修改。这两种情况下,都会存在CACHE读一致性问题,需要由软件来维护。

对于Case4,数据直接在L1D存储器中, Core始终能够读到其它Master更新到L1D内存中的内容,Core写过的数据也能够被其它Master直接从L1D内存中读到。所以不会存在一致性的问题。

对于Case5,数据在L2存储器,按照上面的分析,会存在CACHE读和写一致性的问题。在C64x+平台上这种情况下的一致性问题会由硬件自动维护。

对于Case6,也会存在CACHE读和写一致性的问题,这种情况需要软件进行CACHE一致性的维护。

点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表