隨著(zhù)嵌入式計算機應用的發(fā)展,嵌入式CPU的主頻不斷提高,這就造成了慢速系統存儲器不能匹配高速CPU處理能力的情況。為了解決這個(gè)問(wèn)題,許多高性能的嵌入式處理器內部集成了高速緩存Cache。其中,三星公司的S3C44B0X內部就集成了8 KB空間統一的指令和數據Cache。 Cache即高速緩沖存儲器,是位于CPU與主存之間一種容量較小,但速度很高的存儲器。由于CPU在進(jìn)行運算時(shí),所需的指令和數據都是從主存中提取的,而CPU運算速度要比主存讀寫(xiě)速度快得多,這樣極其影響整個(gè)系統的性能。采用Cache技術(shù),即在Cache中存放CPU常用的指令和數據,然后將這些數據和指令以一定的算法和策略從主存中調入,使CPU可以不必等待主存數據而保持高速操作。這樣就滿(mǎn)足了嵌入式系統實(shí)時(shí)、高效的要求。但Cache的使用也帶來(lái)了一致性的問(wèn)題,在應用中應特別注意。 1 Cache一致性問(wèn)題的發(fā)現 本項目的目標板為:處理器采用ARM芯片S3C44B0X,存儲器采用2片Flash和1片SDRAM,在調試的時(shí)候輸入采用鍵盤(pán),輸出采用顯示器,用RS232串口實(shí)現通信。 在項目的開(kāi)發(fā)過(guò)程中,經(jīng)軟件仿真調試成功的程序,燒入目標板后,程序卻發(fā)生異常中止。通過(guò)讀存儲器的內容發(fā)現,程序不能正常運行在目標板上,是因為存儲器中寫(xiě)入的數據與程序編譯生成的數據不一致,總是出現一些錯誤字節。 經(jīng)過(guò)一段時(shí)間的調試發(fā)現,只要在程序中禁止Cache的使用,存儲器中寫(xiě)入的數據將不再發(fā)生錯誤,程序可以正常運行,但速度明顯減慢。經(jīng)過(guò)分析,認為問(wèn)題是由于Cache數據與主存數據的不一致性造成的。 Cache數據與主存數據不一致是指:在采用Cache的系統中,同樣一個(gè)數據可能既存在于Cache中,也存在于主存中,兩者數據相同則具有一致性,數據不相同就叫做不一致性。如果不能保證數據的一致性,那么,后續程序的運行就要出現問(wèn)題。 2 分析Cache的一致性問(wèn)題 要解釋Cache的一致性問(wèn)題,首先要了解Cache的工作模式。Cache的工作模式有兩種:寫(xiě)直達模式(write?through)和寫(xiě)回模式(writeback)。寫(xiě)直達模式是,每當CPU把數據寫(xiě)到Cache中時(shí),Cache控制器會(huì )立即把數據寫(xiě)入主存對應位置。所以,主存隨時(shí)跟蹤Cache的最新版本,從而也就不會(huì )有主存將新數據丟失這樣的問(wèn)題。此方法的優(yōu)點(diǎn)是簡(jiǎn)單,缺點(diǎn)是每次Cache內容有更新,就要對主存進(jìn)行寫(xiě)入操作,這樣會(huì )造成總線(xiàn)活動(dòng)頻繁。S3C44B0X中的Cache就是采用的寫(xiě)直達模式(write?through)。在寫(xiě)直達模式下,數據輸出時(shí),系統會(huì )把數據同時(shí)寫(xiě)入高速緩沖存儲器Cache和主存中,這樣就保證了輸出時(shí)高速緩沖存儲器的一致性。但該模式下,卻無(wú)法保證輸入時(shí)的高速緩沖存儲器的一致性。 下面再看一下Cache的組織方式。按照主存和Cache之間的映像關(guān)系,Cache有三種組織方式。全相聯(lián)方式、直接映像方式和組相聯(lián)方式。其中,直接映像方式的原理如圖1所示。 圖1 直接映像示意圖 按照Cache的行數m,把主存分為n/m個(gè)區域,每個(gè)區中有m個(gè)存儲塊。各區中的0"(m-1)塊一一對應地固定映射到Cache中L0"Lm-1行。這樣,標簽只要給定區地址(區號),就能唯一確定Cache行與存儲器的對應關(guān)系。當CPU發(fā)出存儲器訪(fǎng)問(wèn)時(shí),以存儲器地址作為行索引,尋址到一高速緩沖行,檢測該行的標簽。若標簽與存儲器的相應地址匹配,則Cache命中。該高速緩存行當前即為欲訪(fǎng)問(wèn)存儲塊的唯一映像。從上面的分析可以看出,在寫(xiě)直達模式下,由于每次Cache內容有更新,就要對主存進(jìn)行寫(xiě)入操作,造成總線(xiàn)活動(dòng)頻繁。在Cache命中的過(guò)程中,如果總線(xiàn)遇到干擾,就會(huì )出現數據不一致的現象。 3 Cache一致性問(wèn)題的解決方法 該問(wèn)題可以從軟件及硬件兩方面著(zhù)手解決。 3.1 軟件解決的方法 S3C44B0X的Cache提供完整的Cache使能和禁止操作模式。能夠通過(guò)設置SYSCFG寄存器中CM域中的值為01或11來(lái)使能Cache(其中,01為使能4 KB Cache, 11為使能8 KB Cache),而通過(guò)清除SYSCFG寄存器中[2:1]域為0來(lái)禁止Cache功能。用禁止Cache的方法來(lái)消除數據不一致性問(wèn)題,具體代碼如下: 另外,S3C44B0X還提供了2個(gè)不能Cache訪(fǎng)問(wèn)的區域(noncacheable area)。每個(gè)區域要求兩個(gè)Cache控制域,用來(lái)表明每一個(gè)不能Cache訪(fǎng)問(wèn)區域的起始和結束地址。在不能Cache訪(fǎng)問(wèn)的區域,當Cache沒(méi)有命中,一個(gè)讀的時(shí)候,Cache不能更新。在已知影響到數據不一致的地址情況下,可以在使能Cache的條件下,用設定不能Cache訪(fǎng)問(wèn)區域的方法,防止產(chǎn)生數據不一致現象。有時(shí),如果數據區域被安排在不能Cache區域,程序執行速度更高,因為多數變量是不能重用的。對于不能重用的變量,刷新16 B的Cache存儲器是浪費的。本系統中設定不能Cache訪(fǎng)問(wèn)的區域為0x2000000"0xc000000,就可以解決數據不一致問(wèn)題。代碼如下: 采用上述兩種方法,排除了數據不一致性的問(wèn)題。但一個(gè)高性能的系統是需要Cache的,禁止Cache的使用會(huì )大大降低系統的性能。所以,在嵌入式系統的設計中,還應從硬件方面考慮,從根本上防止數據不一致的產(chǎn)生。 3.2 硬件的解決方法 由于現在的嵌入式處理器,主頻越來(lái)越高,地址、數據線(xiàn)越來(lái)越多,所以在硬件的設計和焊接過(guò)程中應特別注意高頻干擾的問(wèn)題。因為高頻干擾可以引起信號的不完整性,這些不完整的信號會(huì )引起總線(xiàn)傳輸過(guò)程中出現一些壞字節,所以高速PCB設計變得尤為重要。高速PCB設計中,對高速信號網(wǎng)絡(luò )的特征與走線(xiàn)控制的設計技術(shù),已成為高速數字設備成功與否的關(guān)鍵。在設計中應注意下列問(wèn)題: ① 在成本允許的條件下, PCB盡量采用多層板布線(xiàn)。 ② 高頻電路布線(xiàn)的引線(xiàn)最好采用全直線(xiàn),需要轉折時(shí),可以用45°折線(xiàn)或圓弧轉折。在高頻電路中,滿(mǎn)足這一要求可以減少高頻信號對外的發(fā)射和相互間的耦合。 ③ 高頻電路器件引腳的引線(xiàn)層間的交替越少越好,過(guò)孔越少越好。據測,一個(gè)過(guò)孔可帶來(lái)約0.5 pF的分布電容,減少過(guò)孔數量能顯著(zhù)提高速度。 ④ 高頻電路布線(xiàn)要注意信號線(xiàn)近距離平行走線(xiàn)所引入的“交叉干擾”,若無(wú)法避免平行分布,可在平行信號線(xiàn)的反面布置大面積“地”來(lái)減少干擾。同一層內的平行走線(xiàn)幾乎無(wú)法避免,但是在相鄰的兩個(gè)層,走線(xiàn)的方向務(wù)必取為相互垂直。 ⑤ 每個(gè)集成電路塊的附近應設置一個(gè)高頻退耦電容。 ⑥ 模擬電路和數字電路部分,應有各自獨立的地線(xiàn)。 ⑦ 對特別重要的信號線(xiàn)或局部單元實(shí)施地線(xiàn)包圍的措施,各類(lèi)信號走線(xiàn)不能形成環(huán)路,地線(xiàn)也不能形成電流環(huán)路。 在注意了上面的設計規則之后,制作出的PCB基本上可以滿(mǎn)足高速信號的要求。最后,就是在焊接時(shí)要注意焊點(diǎn)一定要圓滑。因為焊點(diǎn)的尖峰會(huì )產(chǎn)生很強的高頻干擾。有了上述各條規則,就保證了在信號傳輸過(guò)程中,總線(xiàn)上不會(huì )出現不必要的干擾,防止了數據不一致的發(fā)生。 結語(yǔ) 嵌入式處理器已經(jīng)被廣泛應用。本文提到的對S3C44B0X中Cache數據不一致性的處理方法同樣適用于其他型號的高頻嵌入式處理器。掌握一些設計、調試的基本經(jīng)驗,可以大大提高工作效率,減小系統開(kāi)發(fā)過(guò)程中不必要的麻煩。 |