嵌入式处理器中cache数据不一致性的解决方法

发布者:码字狂人最新更新时间:2023-02-07 来源: elecfans关键字:嵌入式处理器  cache 手机看文章 扫描二维码
随时随地手机看文章

随着嵌入式计算机应用的发展,嵌入式CPU的主频不断提高,这就造成了慢速系统存储器不能匹配高速CPU处理能力的情况。为了解决这个问题,许多高性能的嵌入式处理器内部集成了高速缓存cache。其中,三星公司的S3C44B0X内部就集成了8 KB空间统一的指令和数据Cache。


Cache即高速缓冲存储器,是位于CPU与主存之间一种容量较小,但速度很高的存储器。由于CPU在进行运算时,所需的指令和数据都是从主存中提取的,而CPU运算速度要比主存读写速度快得多,这样极其影响整个系统的性能。采用Cache技术,即在Cache中存放CPU常用的指令和数据,然后将这些数据和指令以一定的算法和策略从主存中调入,使CPU可以不必等待主存数据而保持高速操作。这样就满足了嵌入式系统实时、高效的要求。但Cache的使用也带来了一致性的问题,在应用中应特别注意。


1 Cache一致性问题的发现

本项目的目标板为:处理器采用ARM芯片S3C44B0X,存储器采用2片Flash和1片SDRAM,在调试的时候输入采用键盘,输出采用显示器,用RS232串口实现通信。

在项目的开发过程中,经软件仿真调试成功的程序,烧入目标板后,程序却发生异常中止。通过读存储器的内容发现,程序不能正常运行在目标板上,是因为存储器中写入的数据与程序编译生成的数据不一致,总是出现一些错误字节。

经过一段时间的调试发现,只要在程序中禁止Cache的使用,存储器中写入的数据将不再发生错误,程序可以正常运行,但速度明显减慢。经过分析,认为问题是由于Cache数据与主存数据的不一致性造成的。

Cache数据与主存数据不一致是指:在采用Cache的系统中,同样一个数据可能既存在于Cache中,也存在于主存中,两者数据相同则具有一致性,数据不相同就叫做不一致性。如果不能保证数据的一致性,那么,后续程序的运行就要出现问题。

2 分析Cache的一致性问题

要解释Cache的一致性问题,首先要了解Cache的工作模式。Cache的工作模式有两种:写直达模式(writethrough)和写回模式(writeback)。写直达模式是,每当CPU把数据写到Cache中时,Cache控制器会立即把数据写入主存对应位置。所以,主存随时跟踪Cache的最新版本,从而也就不会有主存将新数据丢失这样的问题。此方法的优点是简单,缺点是每次Cache内容有更新,就要对主存进行写入操作,这样会造成总线活动频繁。S3C44B0X中的Cache就是采用的写直达模式(writethrough)。在写直达模式下,数据输出时,系统会把数据同时写入高速缓冲存储器Cache和主存中,这样就保证了输出时高速缓冲存储器的一致性。但该模式下,却无法保证输入时的高速缓冲存储器的一致性。

下面再看一下Cache的组织方式。按照主存和Cache之间的映像关系,Cache有三种组织方式。全相联方式、直接映像方式和组相联方式。其中,直接映像方式的原理如图1所示。

嵌入式处理器中cache数据不一致性的解决方法

按照Cache的行数m,把主存分为n/m个区域,每个区中有m个存储块。各区中的0~(m-1)块一一对应地固定映射到Cache中L0~Lm-1行。这样,标签只要给定区地址(区号),就能唯一确定Cache行与存储器的对应关系。当CPU发出存储器访问时,以存储器地址作为行索引,寻址到一高速缓冲行,检测该行的标签。若标签与存储器的相应地址匹配,则Cache命中。该高速缓存行当前即为欲访问存储块的唯一映像。从上面的分析可以看出,在写直达模式下,由于每次Cache内容有更新,就要对主存进行写入操作,造成总线活动频繁。在Cache命中的过程中,如果总线遇到干扰,就会出现数据不一致的现象。

3 Cache一致性问题的解决方法

该问题可以从软件及硬件两方面着手解决。

3.1 软件解决的方法

S3C44B0X的Cache提供完整的Cache使能和禁止操作模式。能够通过设置SYSCFG寄存器中CM域中的值为01或11来使能Cache(其中,01为使能4 KB Cache, 11为使能8 KB Cache),而通过清除SYSCFG寄存器中[2:1]域为0来禁止Cache功能。用禁止Cache的方法来消除数据不一致性问题,具体代码如下:

#define rSYSCFG(*(volaTIle unsigned *)0x1c00000)
#define WRBUFOPT (0x8)  //write_buf_on
#define SYSCFG_0KB (0x0|WRBUFOPT)
#define SY
 

SCFG_4KB (0x2|WRBUFOPT)
#define SYSCFG_8KB (0x6|WRBUFOPT) 
#define cacheCFGSYSCFG_0KB
rSYSCFG= CACHECFG;    //禁止Cache

另外,S3C44B0X还提供了2个不能Cache访问的区域(noncacheable area)。每个区域要求两个Cache控制域,用来表明每一个不能Cache访问区域的起始和结束地址。在不能Cache访问的区域,当Cache没有命中,一个读的时候,Cache不能更新。在已知影响到数据不一致的地址情况下,可以在使能Cache的条件下,用设定不能Cache访问区域的方法,防止产生数据不一致现象。有时,如果数据区域被安排在不能Cache区域,程序执行速度更高,因为多数变量是不能重用的。对于不能重用的变量,刷新16 B的Cache存储器是浪费的。本系统中设定不能Cache访问的区域为0x2000000~0xc000000,就可以解决数据不一致问题。代码如下:

#define rSYSCFG(*(volaTIle unsigned *)0x1

c00000)
#define WRBUFOPT (0x8)    //write_buf_on
#define SYSCFG_0KB (0x0|WRBUFOPT)
#defineSYSCFG_4KB (0x2|WRBUFOPT)
#define SYSCFG_8KB (0x6|WRBUFOPT) 
#define CACHECFG SYSCFG_8KB
#define rNCACHBE0 (*(volaTIle unsigned *)0x1c00004)
#define rNCACHBE1 (*(volaTIle unsigned *)0x1c00008)
#define Non_Cache_Start(0x2000000)
//不能Cache访问的区域开始地址
#define Non_Cache_End(0xc000000)
//不能Cache访问的区域结束地址
rSYSCFG= CACHECFG; 
// 8 KB cache,写缓冲使能,data abort使能 
rNCACHBE0= ((Non_Cache_End>>12)<<16)|(Non_Cache_Start>>12);//在上面的数据区域不使用高速缓存Cache

采用上述两种方法,排除了数据不一致性的问题。但一个高性能的系统是需要Cache的,禁止Cache的使用会大大降低系统的性能。所以,在嵌入式系统的设计中,还应从硬件方面考虑,从根本上防止数据不一致的产生。

3.2 硬件的解决方法

由于现在的嵌入式处理器,主频越来越高,地址、数据线越来越多,所以在硬件的设计和焊接过程中应特别注意高频干扰的问题。因为高频干扰可以引起信号的不完整性,这些不完整的信号会引起总线传输过程中出现一些坏字节,所以高速PCB设计变得尤为重要。高速PCB设计中,对高速信号网络的特征与走线

控制的设计技术,已成为高速数字设备成功与否的关键。在设计中应注意下列问题:

① 在成本允许的条件下, PCB尽量采用多层板布线。

② 高频电路布线的引线最好采用全直线,需要转折时,可以用45°折线或圆弧转折。在高频电路中

,满足这一要求可以减少高频信号对外的发射和相互间的耦合。

③ 高频电路器件引脚的引线层间的交替越少越好,过孔越少越好。据测,一个过孔可带来约0.5 pF

的分布电容,减少过孔数量能显著提高速度。

④ 高频电路布线要注意信号线近距离平行走线所引入的“交叉干扰”,若无法避免平行分布,可在

平行信号线的反面布置大面积“地”来减少干扰。同一层内的平行走线几乎无法避免,但是在相邻的两个

层,走线的方向务必取为相互垂直。

⑤ 每个集成电路块的附近应设置一个高频退耦电容。

⑥ 模拟电路和数字电路部分,应有各自独立的地线。

⑦ 对特别重要的信号线或局部单元实施地线包围的措施,各类信号走线不能形成环路,地线也不能

形成电流环路。

在注意了上面的设计规则之后,制作出的PCB基本上可以满足高速信号的要求。

最后,就是在焊接时要注意焊点一定要圆滑。因为焊点的尖峰会产生很强的高频干扰。

有了上述各条规则,就保证了在信号传输过程中,总线上不会出现不必要的干扰,防止了数据不一致的发生。

结语

嵌入式处理器已经被广泛应用。本文提到的对S3C44B0X中cache数据不一致性的处理方法同样适用于其他型号的高频嵌入式处理器。掌握一些设计、调试的基本经验,可以大大提高工作效率,减小系统开发过程中不必要的麻烦。


关键字:嵌入式处理器  cache 引用地址:嵌入式处理器中cache数据不一致性的解决方法

上一篇:基于32位高速处理器S3C44B0X实现水表智能抄表系统的设计
下一篇:基于S3C4510B微处理器和操作系统实现网络通信工程的编写设计

推荐阅读最新更新时间:2024-11-02 12:37

Intel Xscale PXA255嵌入式处理器与CF卡的
以导航设备存储系统应用为例,本文讨论了Intel Xscale PXA255嵌入式处理器与CF卡的硬件接口设计,并以读写CF卡扇区的程序为例,给出了CF卡软件编写的技巧。该设计为基于PXA255处理器的嵌入式系统提供了扩展存储空间的一种方法。 图1:CF卡结构框图 Intel Xscale PXA255处理器是新一代的嵌入式处理器,基于ARMv5TE体系结构的微处理器,性价比较高、功耗较低,适合于数字移动电话、个人数字助理、网络路由器等嵌入式系统的应用。在采用PXA255处理器开发诸如车载导航系统时,电子地图等海量地理信息数据需要一个容量大、体积小、性能优异的存储器。“Compact Flash”卡,简称CF卡,具
[单片机]
Intel Xscale PXA255<font color='red'>嵌入式处理器</font>与CF卡的
32位ARM嵌入式处理器的调试技术
摘要:针对32位ARM处理器开发过程中调试技术的研究,分析了目前比较流行的基于JTAG的实时调试技术,介绍了正在发展的嵌入式调试标准,并展望期趋势。 关键词:嵌入式 调试 处理器 JTAG Nexus ARM 随着对高处理能力、实时多任务、网络通信、超低功耗需求的增长,传统8位机已远远满足不了新产品的要求,高端嵌入式处理器已经进入了国内开发人员的视野,并在国内得到了普遍的重视和应用。ARM内核系列处理器是由英国ARM公司开发授权给其他芯片生产商进行生产的系统级芯片。目前在嵌入式32位处理器市场中已经达到70%的份额。笔者在对三星公司的ARM7芯片技术调试的过程中,对这些高端嵌入式系统的调试技术进行了总结。 传统的调试工具及方
[嵌入式]
嵌入式处理器MPC8272与外设的总线适配
MPC8272是Motorola公司2004年推出的第2代PowerQUICC通信处理器。该通信处理器采用MPC603e核心处理器,核心处理器工作频率达400 MHz,外部总线工作频率达100 MHz,总线支持32位地址,64位数据位宽操作。另外该通信处理器内嵌一个32位RISC处理器的通信处理模块,集成有MAC、FCC、SMC、 ATM、HDLC、UART、T1、USB、PCI等设备通信接口,以及1个60x总线接口连接通用外围设备,非常适用于通信控制领域的应用。 1 通信处理器MPC8272读写时序 MPC8272总线对外部器件的读、写访问是通过存储器控制模块来实现的,存储器控制模块生成8个外部存储器地址空间片选信号CSO~C
[单片机]
<font color='red'>嵌入式处理器</font>MPC8272与外设的总线适配
双内核嵌入式处理器BCM1250及其应用
  1983年,斯坦福大学的John L.Hennessy成功完成了第一个采用RISC理念瓣MIPS(Microprocessor without Interlocked Pipeline Stages)微处理器。次年,他在硅谷创立了MIPS公司。该公司本身不生产微处理器,只设计高性能工业级的32位和64位CPU的体系结构,并且向其他半导体公司提供使用其内核(IP)的授权,用于生产基于MIPS而又各具特色的微处理器。目前已经有50多家公司申请了授权,相继推出了一批个性鲜明的微处理器,如PMC-Sierra公司的RM7000系列、RM9000X2,NEC公司的VR55000、VR7700,而Broadcom公司开发的BCM1250一
[应用]
Cache嵌入式处理器中的使用问题
随着嵌入式计算机应用的发展,嵌入式CPU的主频不断提高,这就造成了慢速系统存储器不能匹配高速CPU处理能力的情况。为了解决这个问题,许多高性能的嵌入式处理器内部集成了高速缓存Cache。其中,三星公司的S3C44B0X内部就集成了8 KB空间统一的指令和数据Cache。   Cache即高速缓冲存储器,是位于CPU与主存之间一种容量较小,但速度很高的存储器。由于CPU在进行运算时,所需的指令和数据都是从主存中提取的,而CPU运算速度要比主存读写速度快得多,这样极其影响整个系统的性能。采用Cache技术,即在Cache中存放CPU常用的指令和数据,然后将这些数据和指令以一定的算法和策略从主存中调入,使CPU可以不必等待主存数据而保持
[嵌入式]
基于嵌入式处理器LPC2129的矿用摄像机设计
摄像机在煤矿监控系统中使用广泛,尤其对一些重要场所更需要在集控室远程操控摄像机实现移动、调焦等功能。对摄像机的控制使用RS一485总线的较多,文献 以AT89C52单片机为控制器设计了构建于RS.485总线基础上的矿用摄像机工作台控制系统。在现场使用这种方法进行控制的过程中,笔者发现:当控制距离较远(超出1 km)以及挂接控制器较 (在某矿发电厂实测大于36台)时会出现部分摄像机失控、误动现象,其中频繁地误动还会导致工作台的故障,给工作带来不便。为解决以上问题,本文以嵌入式处理器LPC2129为主控芯片设计了矿用摄像机控制器,并通过CAN(contoller area network)总线实现了远程控制。CAN总线属于现场总线的一
[单片机]
基于<font color='red'>嵌入式处理器</font>LPC2129的矿用摄像机设计
台积电与AMCC结盟 取得嵌入式微处理器订单
    日前,台积电宣布与AMCC(应用微电路;AppliedMicroCircuitsCorporation;AMCC-US)结盟,AMCC的PowerArchitecture嵌入式微处理器将以台积电90奈米CMOS制程生产,未来将进一步推进到65奈米及40奈米制程。这意味着台积电在CPU代工领域再下一城。         AMCC为全球能源及通讯解决方案商,台积电表示,这次双方的合作,是AMCCPowerArchitecture嵌入式微处理器首次采用非SOI制程技术,受惠于台积电成熟的bulkCMOS技术处理,首次合作生产出的AMCCAPM83920频率可达1.5GHz,效能表现最佳。         AMCC指出,与台积
[嵌入式]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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