技術(shù)頻道

      Cache在嵌入式處理器中的使用問(wèn)題


      隨著嵌入式計(jì)算機(jī)應(yīng)用的發(fā)展,嵌入式CPU的主頻不斷提高,這就造成了慢速系統(tǒng)存儲(chǔ)器不能匹配高速CPU處理能力的情況。為了解決這個(gè)問(wèn)題,許多高性能的嵌入式處理器內(nèi)部集成了高速緩存Cache。其中,三星公司的S3C44B0X內(nèi)部就集成了8 KB空間統(tǒng)一的指令和數(shù)據(jù)Cache。
        Cache即高速緩沖存儲(chǔ)器,是位于CPU與主存之間一種容量較小,但速度很高的存儲(chǔ)器。由于CPU在進(jìn)行運(yùn)算時(shí),所需的指令和數(shù)據(jù)都是從主存中提取的,而CPU運(yùn)算速度要比主存讀寫(xiě)速度快得多,這樣極其影響整個(gè)系統(tǒng)的性能。采用Cache技術(shù),即在Cache中存放CPU常用的指令和數(shù)據(jù),然后將這些數(shù)據(jù)和指令以一定的算法和策略從主存中調(diào)入,使CPU可以不必等待主存數(shù)據(jù)而保持高速操作。這樣就滿(mǎn)足了嵌入式系統(tǒng)實(shí)時(shí)、高效的要求。但Cache的使用也帶來(lái)了一致性的問(wèn)題,在應(yīng)用中應(yīng)特別注意。
      1 Cache一致性問(wèn)題的發(fā)現(xiàn)
        本項(xiàng)目的目標(biāo)板為:處理器采用ARM芯片S3C44B0X,存儲(chǔ)器采用2片F(xiàn)lash和1片SDRAM,在調(diào)試的時(shí)候輸入采用鍵盤(pán),輸出采用顯示器,用RS232串口實(shí)現(xiàn)通信。
        在項(xiàng)目的開(kāi)發(fā)過(guò)程中,經(jīng)軟件仿真調(diào)試成功的程序,燒入目標(biāo)板后,程序卻發(fā)生異常中止。通過(guò)讀存儲(chǔ)器的內(nèi)容發(fā)現(xiàn),程序不能正常運(yùn)行在目標(biāo)板上,是因?yàn)榇鎯?chǔ)器中寫(xiě)入的數(shù)據(jù)與程序編譯生成的數(shù)據(jù)不一致,總是出現(xiàn)一些錯(cuò)誤字節(jié)。
        經(jīng)過(guò)一段時(shí)間的調(diào)試發(fā)現(xiàn),只要在程序中禁止Cache的使用,存儲(chǔ)器中寫(xiě)入的數(shù)據(jù)將不再發(fā)生錯(cuò)誤,程序可以正常運(yùn)行,但速度明顯減慢。經(jīng)過(guò)分析,認(rèn)為問(wèn)題是由于Cache數(shù)據(jù)與主存數(shù)據(jù)的不一致性造成的。
        Cache數(shù)據(jù)與主存數(shù)據(jù)不一致是指:在采用Cache的系統(tǒng)中,同樣一個(gè)數(shù)據(jù)可能既存在于Cache中,也存在于主存中,兩者數(shù)據(jù)相同則具有一致性。
      2 分析Cache的一致性問(wèn)題
       要解釋Cache的一致性問(wèn)題,首先要了解Cache的工作模式。Cache的工作模式有兩種:寫(xiě)直達(dá)模式(writethrough)和寫(xiě)回模式(writeback)。寫(xiě)直達(dá)模式是,每當(dāng)CPU把數(shù)據(jù)寫(xiě)到Cache中時(shí),Cache控制器會(huì)立即把數(shù)據(jù)寫(xiě)入主存對(duì)應(yīng)位置。所以,主存隨時(shí)跟蹤C(jī)ache的最新版本,從而也就不會(huì)有主存將新數(shù)據(jù)丟失這樣的問(wèn)題。此方法的優(yōu)點(diǎn)是簡(jiǎn)單,缺點(diǎn)是每次Cache內(nèi)容有更新,就要對(duì)主存進(jìn)行寫(xiě)入操作,這樣會(huì)造成總線(xiàn)活動(dòng)頻繁。S3C44B0X中的Cache就是采用的寫(xiě)直達(dá)模式(writethrough)。在寫(xiě)直達(dá)模式下,數(shù)據(jù)輸出時(shí),系統(tǒng)會(huì)把數(shù)據(jù)同時(shí)寫(xiě)入高速緩沖存儲(chǔ)器Cache和主存中,這樣就保證了輸出時(shí)高速緩沖存儲(chǔ)器的一致性。但該模式下,卻無(wú)法保證輸入時(shí)的高速緩沖存儲(chǔ)器的一致性。
        下面再看一下Cache的組織方式。按照主存和Cache之間的映像關(guān)系,Cache有三種組織方式。全相聯(lián)方式、直接映像方式和組相聯(lián)方式。其中,直接映像方式的原理如圖1所示。

      圖1直接映像示意圖
        按照Cache的行數(shù)m,把主存分為n/m個(gè)區(qū)域,每個(gè)區(qū)中有m個(gè)存儲(chǔ)塊。各區(qū)中的0~(m-1)塊一一對(duì)應(yīng)地固定映射到Cache中L0~Lm-1行。這樣,標(biāo)簽只要給定區(qū)地址(區(qū)號(hào)),就能唯一確定Cache行與存儲(chǔ)器的對(duì)應(yīng)關(guān)系。當(dāng)CPU發(fā)出存儲(chǔ)器訪(fǎng)問(wèn)時(shí),以存儲(chǔ)器地址作為行索引,尋址到一高速緩沖行,檢測(cè)該行的標(biāo)簽。若標(biāo)簽與存儲(chǔ)器的相應(yīng)地址匹配,則Cache命中。該高速緩存行當(dāng)前即為欲訪(fǎng)問(wèn)存儲(chǔ)塊的唯一映像。從上面的分析可以看出,在寫(xiě)直達(dá)模式下,由于每次Cache內(nèi)容有更新,就要對(duì)主存進(jìn)行寫(xiě)入操作,造成總線(xiàn)活動(dòng)頻繁。在Cache命中的過(guò)程中,如果總線(xiàn)遇到干擾,就會(huì)出現(xiàn)數(shù)據(jù)不一致的現(xiàn)象。
      3 Cache一致性問(wèn)題的解決方法
      該問(wèn)題可以從軟件及硬件兩方面著手解決。
      3.1 軟件解決的方法
        S3C44B0X的Cache提供完整的Cache使能和禁止操作模式。能夠通過(guò)設(shè)置SYSCFG寄存器中CM域中的值為01或11來(lái)使能Cache(其中,01為使能4 KB Cache, 11為使能8 KB Cache),而通過(guò)清除SYSCFG寄存器中[2:1]域?yàn)?來(lái)禁止Cache功能。用禁止Cache的方法來(lái)消除數(shù)據(jù)不一致性問(wèn)題,具體代碼如下:
        #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個(gè)不能Cache訪(fǎng)問(wèn)的區(qū)域(noncacheable area)。每個(gè)區(qū)域要求兩個(gè)Cache控制域,用來(lái)表明每一個(gè)不能Cache訪(fǎng)問(wèn)區(qū)域的起始和結(jié)束地址。在不能Cache訪(fǎng)問(wèn)的區(qū)域,當(dāng)Cache沒(méi)有命中,一個(gè)讀的時(shí)候,Cache不能更新。在已知影響到數(shù)據(jù)不一致的地址情況下,可以在使能Cache的條件下,用設(shè)定不能Cache訪(fǎng)問(wèn)區(qū)域的方法,防止產(chǎn)生數(shù)據(jù)不一致現(xiàn)象。有時(shí),如果數(shù)據(jù)區(qū)域被安排在不能Cache區(qū)域,程序執(zhí)行速度更高,因?yàn)槎鄶?shù)變量是不能重用的。對(duì)于不能重用的變量,刷新16 B的Cache存儲(chǔ)器是浪費(fèi)的。本系統(tǒng)中設(shè)定不能Cache訪(fǎng)問(wèn)的區(qū)域?yàn)?x2000000~0xc000000,就可以解決數(shù)據(jù)不一致問(wèn)題。代碼如下:
        #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訪(fǎng)問(wèn)的區(qū)域開(kāi)始地址
        #define Non_Cache_End(0xc000000)
                      //不能Cache訪(fǎng)問(wèn)的區(qū)域結(jié)束地址
        rSYSCFG= CACHECFG;
                      // 8 KB cache,寫(xiě)緩沖使能,data abort使能
        rNCACHBE0= ((Non_Cache_End>>12)<<16)|(Non_Cache_Start>>12);//在上面的數(shù)據(jù)區(qū)域不使用高速緩存Cache
        采用上述兩種方法,排除了數(shù)據(jù)不一致性的問(wèn)題。但一個(gè)高性能的系統(tǒng)是需要Cache的,禁止Cache的使用會(huì)大大降低系統(tǒng)的性能。所以,在嵌入式系統(tǒng)的設(shè)計(jì)中,還應(yīng)從硬件方面考慮,從根本上防止數(shù)據(jù)不一致的產(chǎn)生。
      3.2 硬件的解決方法
        由于現(xiàn)在的嵌入式處理器,主頻越來(lái)越高,地址、數(shù)據(jù)線(xiàn)越來(lái)越多,所以在硬件的設(shè)計(jì)和焊接過(guò)程中應(yīng)特別注意高頻干擾的問(wèn)題。因?yàn)楦哳l干擾可以引起信號(hào)的不完整性,這些不完整的信號(hào)會(huì)引起總線(xiàn)傳輸過(guò)程中出現(xiàn)一些壞字節(jié),所以高速PCB設(shè)計(jì)變得尤為重要。高速PCB設(shè)計(jì)中,對(duì)高速信號(hào)網(wǎng)絡(luò)的特征與走線(xiàn)
      控制的設(shè)計(jì)技術(shù),已成為高速數(shù)字設(shè)備成功與否的關(guān)鍵。在設(shè)計(jì)中應(yīng)注意下列問(wèn)題:
       ?、?在成本允許的條件下, PCB盡量采用多層板布線(xiàn)。
       ?、?高頻電路布線(xiàn)的引線(xiàn)最好采用全直線(xiàn),需要轉(zhuǎn)折時(shí),可以用45°折線(xiàn)或圓弧轉(zhuǎn)折。在高頻電路中,滿(mǎn)足這一要求可以減少高頻信號(hào)對(duì)外的發(fā)射和相互間的耦合。
       ?、?高頻電路器件引腳的引線(xiàn)層間的交替越少越好,過(guò)孔越少越好。據(jù)測(cè),一個(gè)過(guò)孔可帶來(lái)約0.5 pF的分布電容,減少過(guò)孔數(shù)量能顯著提高速度。
        ④ 高頻電路布線(xiàn)要注意信號(hào)線(xiàn)近距離平行走線(xiàn)所引入的“交叉干擾”,若無(wú)法避免平行分布,可在平行信號(hào)線(xiàn)的反面布置大面積“地”來(lái)減少干擾。同一層內(nèi)的平行走線(xiàn)幾乎無(wú)法避免,但是在相鄰的兩個(gè)層,走線(xiàn)的方向務(wù)必取為相互垂直。
        ⑤ 每個(gè)集成電路塊的附近應(yīng)設(shè)置一個(gè)高頻退耦電容。
       ?、?模擬電路和數(shù)字電路部分,應(yīng)有各自獨(dú)立的地線(xiàn)。
        ⑦ 對(duì)特別重要的信號(hào)線(xiàn)或局部單元實(shí)施地線(xiàn)包圍的措施,各類(lèi)信號(hào)走線(xiàn)不能形成環(huán)路,地線(xiàn)也不能形成電流環(huán)路。
        在注意了上面的設(shè)計(jì)規(guī)則之后,制作出的PCB基本上可以滿(mǎn)足高速信號(hào)的要求。
        最后,就是在焊接時(shí)要注意焊點(diǎn)一定要圓滑。因?yàn)楹更c(diǎn)的尖峰會(huì)產(chǎn)生很強(qiáng)的高頻干擾。有了上述各條規(guī)則,就保證了在信號(hào)傳輸過(guò)程中,總線(xiàn)上不會(huì)出現(xiàn)不必要的干擾,防止了數(shù)據(jù)不一致的發(fā)生。

      結(jié)語(yǔ)
        嵌入式處理器已經(jīng)被廣泛應(yīng)用。本文提到的對(duì)S3C44B0X中Cache數(shù)據(jù)不一致性的處理方法同樣適用于其他型號(hào)的高頻嵌入式處理器。掌握一些設(shè)計(jì)、調(diào)試的基本經(jīng)驗(yàn),可以大大提高工作效率,減小系統(tǒng)開(kāi)發(fā)過(guò)程中不必要的麻煩。

      文章版權(quán)歸西部工控xbgk所有,未經(jīng)許可不得轉(zhuǎn)載。

      主站蜘蛛池模板: 亚洲国产精品一区二区久久| 国产一区二区草草影院| 久久精品无码一区二区app| 无码精品久久一区二区三区 | 国产一区二区在线观看视频| 亚洲丰满熟女一区二区哦| 日韩高清一区二区三区不卡| 夜夜精品视频一区二区| 一区二区三区波多野结衣| 精品一区二区三区在线视频| 在线精品国产一区二区| 国产一区二区三区露脸| 亚洲一区AV无码少妇电影☆| 精品人妻AV一区二区三区| 八戒久久精品一区二区三区| 日本不卡一区二区视频a| 中文字幕av一区| 一区二区三区在线免费观看视频| 亚洲中文字幕无码一区二区三区 | 日韩一区精品视频一区二区| 日韩av片无码一区二区不卡电影| 午夜精品一区二区三区在线观看 | 日本高清不卡一区| 精品深夜AV无码一区二区老年 | 久久国产精品免费一区| 亚洲第一区视频在线观看| 国产精品一区二区电影| 无码人妻精品一区二区在线视频 | 日韩人妻无码一区二区三区久久99 | 精品国产一区二区三区2021| 精品乱人伦一区二区三区| 精品国产一区二区三区香蕉| 亚洲第一区精品日韩在线播放| 久久久国产精品亚洲一区| 亚洲AV无码一区二三区| 相泽南亚洲一区二区在线播放| 国产亚洲无线码一区二区| 美女AV一区二区三区| 日本一区频道在线视频| 在线精品亚洲一区二区小说| 动漫精品第一区二区三区|