隨著嵌入式計算機應(yīng)用的發(fā)展,嵌入式CPU的主頻不斷提高,這就造成了慢速系統(tǒng)存儲器不能匹配高速CPU處理能力的情況。為了解決這個問題,許多高性能的嵌入式處理器內(nèi)部集成了高速緩存Cache。其中,三星公司的S3C44B0X內(nèi)部就集成了8 KB空間統(tǒng)一的指令和數(shù)據(jù)Cache。
Cache即高速緩沖存儲器,是位于CPU與主存之間一種容量較小,但速度很高的存儲器。由于CPU在進行運算時,所需的指令和數(shù)據(jù)都是從主存中提取的,而CPU運算速度要比主存讀寫速度快得多,這樣極其影響整個系統(tǒng)的性能。采用Cache技術(shù),即在Cache中存放CPU常用的指令和數(shù)據(jù),然后將這些數(shù)據(jù)和指令以一定的算法和策略從主存中調(diào)入,使CPU可以不必等待主存數(shù)據(jù)而保持高速操作。這樣就滿足了嵌入式系統(tǒng)實時、高效的要求。但Cache的使用也帶來了一致性的問題,在應(yīng)用中應(yīng)特別注意。
1 Cache一致性問題的發(fā)現(xiàn)
本項目的目標(biāo)板為:處理器采用ARM芯片S3C44B0X,存儲器采用2片F(xiàn)lash和1片SDRAM,在調(diào)試的時候輸入采用鍵盤,輸出采用顯示器,用RS232串口實現(xiàn)通信。
在項目的開發(fā)過程中,經(jīng)軟件仿真調(diào)試成功的程序,燒入目標(biāo)板后,程序卻發(fā)生異常中止。通過讀存儲器的內(nèi)容發(fā)現(xiàn),程序不能正常運行在目標(biāo)板上,是因為存儲器中寫入的數(shù)據(jù)與程序編譯生成的數(shù)據(jù)不一致,總是出現(xiàn)一些錯誤字節(jié)。
經(jīng)過一段時間的調(diào)試發(fā)現(xiàn),只要在程序中禁止Cache的使用,存儲器中寫入的數(shù)據(jù)將不再發(fā)生錯誤,程序可以正常運行,但速度明顯減慢。經(jīng)過分析,認(rèn)為問題是由于Cache數(shù)據(jù)與主存數(shù)據(jù)的不一致性造成的。
Cache數(shù)據(jù)與主存數(shù)據(jù)不一致是指:在采用Cache的系統(tǒng)中,同樣一個數(shù)據(jù)可能既存在于Cache中,也存在于主存中,兩者數(shù)據(jù)相同則具有一致性,數(shù)據(jù)不相同就叫做不一灤浴H綣荒鼙Vな蕕囊恢灤?,那么,后续辰{虻腦誦芯鴕魷治侍狻?/P>
2 分析Cache的一致性問題
要解釋Cache的一致性問題,首先要了解Cache的工作模式。Cache的工作模式有兩種:寫直達模式(writethrough)和寫回模式(writeback)。寫直達模式是,每當(dāng)CPU把數(shù)據(jù)寫到Cache中時,Cache控制器會立即把數(shù)據(jù)寫入主存對應(yīng)位置。所以,主存隨時跟蹤Cache的最新版本,從而也就不會有主存將新數(shù)據(jù)丟失這樣的問題。此方法的優(yōu)點是簡單,缺點是每次Cache內(nèi)容有更新,就要對主存進行寫入操作,這樣會造成總線活動頻繁。S3C44B0X中的Cache就是采用的寫直達模式(writethrough)。在寫直達模式下,數(shù)據(jù)輸出時,系統(tǒng)會把數(shù)據(jù)同時寫入高速緩沖存儲器Cache和主存中,這樣就保證了輸出時高速緩沖存儲器的一致性。但該模式下,卻無法保證輸入時的高速緩沖存儲器的一致性。
下面再看一下Cache的組織方式。按照主存和Cache之間的映像關(guān)系,Cache有三種組織方式。全相聯(lián)方式、直接映像方式和組相聯(lián)方式。其中,直接映像方式的原理如圖1所示。
#define CACHECFG SYSCFG_8KB
#define rNCACHBE0 (*(volatile unsigned *)0x1c00004)
#define rNCACHBE1 (*(volatile unsigned *)0x1c00008)
#define Non_Cache_Start(0x2000000)
//不能Cache訪問的區(qū)域開始地址
#define Non_Cache_End(0xc000000)
//不能Cache訪問的區(qū)域結(jié)束地址
rSYSCFG= CACHECFG;
// 8 KB cache,寫緩沖使能,data abort使能
rNCACHBE0= ((Non_Cache_End>>12)<<16)|(Non_Cache_Start>>12);//在上面的數(shù)據(jù)區(qū)域不使用高速緩存Cache
采用上述兩種方法,排除了數(shù)據(jù)不一致性的問題。但一個高性能的系統(tǒng)是需要Cache的,禁止Cache的使用會大大降低系統(tǒng)的性能。所以,在嵌入式系統(tǒng)的設(shè)計中,還應(yīng)從硬件方面考慮,從根本上防止數(shù)據(jù)不一致的產(chǎn)生。
3.2 硬件的解決方法
由于現(xiàn)在的嵌入式處理器,主頻越來越高,地址、數(shù)據(jù)線越來越多,所以在硬件的設(shè)計和焊接過程中應(yīng)特別注意高頻干擾的問題。因為高頻干擾可以引起信號的不完整性,這些不完整的信號會引起總線傳輸過程中出現(xiàn)一些壞字節(jié),所以高速PCB設(shè)計變得尤為重要。高速PCB設(shè)計中,對高速信號網(wǎng)絡(luò)的特征與走線
控制的設(shè)計技術(shù),已成為高速數(shù)字設(shè)備成功與否的關(guān)鍵。在設(shè)計中應(yīng)注意下列問題:
?、?在成本允許的條件下, PCB盡量采用多層板布線。
?、?高頻電路布線的引線最好采用全直線,需要轉(zhuǎn)折時,可以用45°折線或圓弧轉(zhuǎn)折。在高頻電路中
,滿足這一要求可以減少高頻信號對外的發(fā)射和相互間的耦合。
?、?高頻電路器件引腳的引線層間的交替越少越好,過孔越少越好。據(jù)測,一個過孔可帶來約0.5 pF
的分布電容,減少過孔數(shù)量能顯著提高速度。
?、?高頻電路布線要注意信號線近距離平行走線所引入的“交叉干擾”,若無法避免平行分布,可在
平行信號線的反面布置大面積“地”來減少干擾。同一層內(nèi)的平行走線幾乎無法避免,但是在相鄰的兩個
層,走線的方向務(wù)必取為相互垂直。
?、?每個集成電路塊的附近應(yīng)設(shè)置一個高頻退耦電容。
?、?模擬電路和數(shù)字電路部分,應(yīng)有各自獨立的地線。
?、?對特別重要的信號線或局部單元實施地線包圍的措施,各類信號走線不能形成環(huán)路,地線也不能
形成電流環(huán)路。
在注意了上面的設(shè)計規(guī)則之后,制作出的PCB基本上可以滿足高速信號的要求。
最后,就是在焊接時要注意焊點一定要圓滑。因為焊點的尖峰會產(chǎn)生很強的高頻干擾。
有了上述各條規(guī)則,就保證了在信號傳輸過程中,總線上不會出現(xiàn)不必要的干擾,防止了數(shù)據(jù)不一致的發(fā)生。
結(jié)語
嵌入式處理器已經(jīng)被廣泛應(yīng)用。本文提到的對S3C44B0X中Cache數(shù)據(jù)不一致性的處理方法同樣適用于其他型號的高頻嵌入式處理器。掌握一些設(shè)計、調(diào)試的基本經(jīng)驗,可以大大提高工作效率,減小系統(tǒng)開發(fā)過程中不必要的麻煩。