你的位置:大电流电感 > 先锋技术

Cache在嵌入式处理器中的使用问题

2020-12-01 17:37:50      点击:
上一篇:揭秘STC12直流电子负载电路设计大全

                图1直接映像示意图   按照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 SYSCFG_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 *)0x1c00000)   #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%26;#176;折线或圆弧转折。在高频电路中,满足这一要求可以减少高频信号对外的发射和相互间的耦合。   ③ 高频电路器件引脚的引线层间的交替越少越好,过孔越少越好。据测,一个过孔可带来约0.5 pF的分布电容,减少过孔数量能显著提高速度。   ④ 高频电路布线要注意信号线近距离平行走线所引入的“交叉干扰”,若无法避免平行分布,可在平行信号线的反面布置大面积“地”来减少干扰。同一层内的平行走线几乎无法避免,但是在相邻的两个层,走线的方向务必取为相互垂直。   ⑤ 每个集成电路块的附近应设置一个高频退耦电容。   ⑥ 模拟电路和数字电路部分,应有各自独立的地线。   ⑦ 对特别重要的信号线或局部单元实施地线包围的措施,各类信号走线不能形成环路,地线也不能形成电流环路。   在注意了上面的设计规则之后,制作出的PCB基本上可以满足高速信号的要求。   最后,就是在焊接时要注意焊点一定要圆滑。因为焊点的尖峰会产生很强的高频干扰。   有了上述各条规则,就保证了在信号传输过程中,总线上不会出现不必要的干扰,防止了数据不一致的发生。 结语   嵌入式处理器已经被广泛应用。本文提到的对S3C44B0X中Cache数据不一致性的处理方法同样适用于其他型号的高频嵌入式处理器。掌握一些设计、调试的基本经验,可以大大提高工作效率,减小系统开发过程中不必要的麻烦。