嵌入式系統(tǒng)中存儲(chǔ)器性能研究
摘要:動(dòng)態(tài)隨機(jī)存儲(chǔ)器是嵌入式系統(tǒng)的一個(gè)重要組成部分,而動(dòng)態(tài)隨機(jī)存儲(chǔ)器故障是嵌入式系統(tǒng)故障的一個(gè)主要原因之一。在此從動(dòng)態(tài)隨機(jī)存儲(chǔ)器的結(jié)構(gòu)和失效模型出發(fā),有針對(duì)地提出了用于檢測(cè)性能的數(shù)據(jù)和讀寫方式,實(shí)驗(yàn)證明通過提出的檢測(cè)方法能夠有效地找出潛在的存儲(chǔ)器故障,從而能夠?yàn)榍度胧较到y(tǒng)設(shè)計(jì)人員提供改善系統(tǒng)性能的方法和途徑。
關(guān)鍵詞:嵌入式系統(tǒng);動(dòng)態(tài)隨機(jī)存儲(chǔ)器;故障檢測(cè);失效模型
0 引言
隨著超大規(guī)模集成電路的制造工藝的進(jìn)步,在單一芯片上動(dòng)態(tài)隨機(jī)存儲(chǔ)器實(shí)現(xiàn)了更高密度的比特位,使得計(jì)算機(jī)系統(tǒng)在計(jì)算速度迅猛發(fā)展的同時(shí),內(nèi)存容量極大的擴(kuò)大。伴隨著集成度的提高,存儲(chǔ)器單元呈現(xiàn)失效的可能性隨之增大,失效的形式和原因也趨于更加復(fù)雜化。存儲(chǔ)器測(cè)試的目的是確保其每個(gè)單元能夠存儲(chǔ)數(shù)據(jù)并且惟一的尋址、讀、寫。存儲(chǔ)器的測(cè)試面臨兩方面的要求:較高失效類型覆蓋率,盡可能檢測(cè)出潛在的存儲(chǔ)器故障;較少的存儲(chǔ)器操作,以便縮短檢測(cè)時(shí)間。因此存儲(chǔ)器測(cè)試應(yīng)能夠在一定的測(cè)試時(shí)間內(nèi)得到可能的最佳故障覆蓋率。由于對(duì)存儲(chǔ)器進(jìn)行物理檢測(cè)是不可能的,可行的辦法是將待測(cè)存儲(chǔ)器的訪存結(jié)果與認(rèn)定無(wú)故障的存儲(chǔ)器的訪存結(jié)果做比較。
1 DRAM的原理及失效模型
動(dòng)態(tài)內(nèi)存的結(jié)構(gòu)和ROM及SRAM有較大的不同。圖1是動(dòng)態(tài)內(nèi)存的總體結(jié)構(gòu)。內(nèi)存單元按照行、列組成陣列。地址首先分為行地址和列地址,行地址經(jīng)過譯碼器,選中一行內(nèi)存單元。列地址選擇數(shù)據(jù)輸出到數(shù)據(jù)輸出端。
圖2是內(nèi)存單元的結(jié)構(gòu)圖。動(dòng)態(tài)內(nèi)存使用一個(gè)晶體管和一個(gè)電容來(lái)存儲(chǔ)一位數(shù)據(jù)。由于電容量很小,數(shù)據(jù)讀出消耗電容上存儲(chǔ)的電荷,讀取以后需要重新對(duì)電容充電。并且由于電容自身的漏電,動(dòng)態(tài)內(nèi)存需要定期刷新。
圖3是讀寫控制電路示意圖。圖中顯示了讀取1位數(shù)據(jù)的過程。假設(shè)這個(gè)單元存儲(chǔ)的數(shù)據(jù)為“1”初始狀態(tài)(圖3(a)),電容電壓為V,數(shù)據(jù)線D和電壓均為0.5 V,T1,T2,T3均截止。首先,T3導(dǎo)通,電容上的電荷使數(shù)據(jù)線D上電壓為0.5 V+a。放大器對(duì)信號(hào)放大,使得數(shù)據(jù)線D上電壓為V,上電壓為0,讀出數(shù)據(jù)“1”(圖3(b)),同時(shí)對(duì)電容充電,電容電壓為V(圖3(c))。然后T3截止,T1,T2導(dǎo)通,數(shù)據(jù)線D,上電壓恢復(fù)為0.5V。電路恢復(fù)初始狀態(tài)(圖3(d))。
假設(shè)存儲(chǔ)器實(shí)效僅僅被單元狀態(tài)的跳變所激活,即不考慮不改變狀態(tài)的寫操作時(shí)出現(xiàn)的失效。存儲(chǔ)器的失效模型可以表述為如下:
(1)粘滯實(shí)效(Stuck-at Faults,SF)。一個(gè)或多個(gè)存儲(chǔ)器單元固定為s,s∈(0,1),不因?qū)υ搯卧淖x寫而發(fā)生狀態(tài)的變化。
(2)組合實(shí)效(Coupling Faults,CF)。存儲(chǔ)器某些位的跳變導(dǎo)致其他位的邏輯值發(fā)生非預(yù)期的變化。組合失效的產(chǎn)生歸咎于單元物理上毗鄰所產(chǎn)生的分布電容或者是單元間的電流泄漏。2個(gè)存儲(chǔ)單元之間的組合失效稱雙組合實(shí)效。例如:對(duì)于單元j的一個(gè)0→1或是1→0的寫操作將會(huì)改變i單元的內(nèi)容,使之狀態(tài)翻轉(zhuǎn)。但是反之i單元的狀態(tài)改變并不一定也會(huì)對(duì)j產(chǎn)生影響。
(3)地址譯碼故障(Address Decoder Faults,AF)。有4種情況:某地址不能訪問任何單元;某單元無(wú)法被任何地址訪問;某地址可以同時(shí)訪問多個(gè)單元;某單元可被多個(gè)地址訪問到。
[!--empirenews.page--]
2 測(cè)試用數(shù)據(jù)
由前節(jié)討論可知,動(dòng)態(tài)內(nèi)存除了內(nèi)存單元,還有地址譯碼器,選擇器,控制器,放大器等部件。為此針對(duì)不同的部件,設(shè)計(jì)了不同的數(shù)據(jù)和讀寫方式來(lái)進(jìn)行測(cè)試。
2.1 普通數(shù)據(jù)
普通數(shù)據(jù)就是全“0”或者全“1”。寫入全“0”或者全“1”的數(shù)據(jù),然后讀取校驗(yàn),來(lái)驗(yàn)證內(nèi)存單元是否正常工作。
2.2 棋盤數(shù)據(jù)
圖4表示了棋盤數(shù)據(jù)。在內(nèi)存單陣列中寫入如國(guó)際象棋棋盤一樣的數(shù)據(jù)。由于與每一位數(shù)據(jù)相鄰的數(shù)據(jù)都不一樣,棋盤數(shù)據(jù)可以用來(lái)檢測(cè)內(nèi)存單元間的泄漏。
2.3 行帶狀數(shù)據(jù)
圖5表示了行帶狀數(shù)據(jù)。采用行帶狀數(shù)據(jù)可以檢測(cè)Word線之間的泄漏。
2.4 列帶狀數(shù)據(jù)
圖6表示了列帶狀數(shù)據(jù),用來(lái)檢測(cè)Bit線(數(shù)據(jù)線)之間的泄漏。
2.5 移位數(shù)據(jù)
讀取內(nèi)存數(shù)據(jù)時(shí),Word線選中一行內(nèi)存單元,數(shù)據(jù)還要通過選擇器,經(jīng)過列地址選擇,到達(dá)數(shù)據(jù)線。使用移位數(shù)據(jù),使得每次只有一個(gè)數(shù)據(jù)引腳為1,其余都為0,檢測(cè)相互是否有影響。[!--empirenews.page--]
2.6 Waltz數(shù)據(jù)
前面介紹了使用行帶狀數(shù)據(jù)檢測(cè)Word線之間的泄漏,為了檢測(cè)相隔行的微弱的影響,可以使用Waltz數(shù)據(jù)。如圖7所示。
3 測(cè)試用讀寫方式
為了檢測(cè)內(nèi)存潛在的問題,除了設(shè)計(jì)一些測(cè)試用的數(shù)據(jù),還設(shè)計(jì)了一些讀寫方式,和數(shù)據(jù)相結(jié)合來(lái)檢測(cè)。
3.1 MSCAN
MSAN讀寫方式是按地址遞增順序,首先寫入0,然后仍然按照此順序讀出校驗(yàn)。MSCAN用來(lái)檢測(cè)內(nèi)存單元。
3.2 MARCH
MARCH讀寫方式的檢測(cè)對(duì)象是地址譯碼器。如果地址譯碼器有問題,就會(huì)產(chǎn)生多重選擇的問題,即同一個(gè)地址對(duì)應(yīng)多個(gè)內(nèi)存單元,或者多個(gè)地址對(duì)應(yīng)同一個(gè)內(nèi)存單元??梢圆捎萌缦碌淖x寫方式來(lái)檢測(cè)這種問題。如圖8,首先順序?qū)懭?ldquo;0”,然后順序校驗(yàn),校驗(yàn)一個(gè)數(shù)據(jù)后立即將數(shù)據(jù)改為“1”,然后逆序校驗(yàn),校驗(yàn)后立即將數(shù)據(jù)改為“0”。
3.3 MASEST
MASEST讀寫方式的檢測(cè)對(duì)象也是地址譯碼器。不過側(cè)重于地址譯碼器的翻轉(zhuǎn)噪聲。按照?qǐng)D8中的順序?qū)懭胄袔顢?shù)據(jù),此順序的目的是讓地址譯碼器譯碼每次輸出都盡可能多的翻轉(zhuǎn)。然后在按此順序校驗(yàn),校驗(yàn)同時(shí)把數(shù)據(jù)翻轉(zhuǎn)。最后順序讀取數(shù)據(jù)校驗(yàn)。
3.4 CMD
CMD讀寫方式檢測(cè)內(nèi)存單元間的相互干涉。如圖9,首先寫入棋盤數(shù)據(jù)。然后按照如圖9順序校驗(yàn)。
3.5 ROW/COL組合
ROW/COL組合測(cè)試的對(duì)象是內(nèi)存控制電路。內(nèi)存單元陣列分為行和列,某一個(gè)行地址有效時(shí),對(duì)某一個(gè)單元進(jìn)行讀/寫組合的操作,由于內(nèi)存單元需要定時(shí)刷新,這種操作可能對(duì)刷新造成影響。ROW/COL組合讀取方式固定某一行,對(duì)一個(gè)單元進(jìn)行讀/寫組合操作,驗(yàn)證刷新的影響。然后對(duì)同一行的下一列進(jìn)行相同的操作。
[!--empirenews.page--]
4 測(cè)試系統(tǒng)
上面討論了用于測(cè)試內(nèi)存的數(shù)據(jù)和讀取方式。在實(shí)際組成的系統(tǒng)中,針對(duì)特定的測(cè)試對(duì)象,兩者總是結(jié)合使用的。下面的表1列出了本測(cè)試系統(tǒng)測(cè)試的項(xiàng)目和相對(duì)應(yīng)使用的數(shù)據(jù)和讀取方式。
前節(jié)討論的數(shù)據(jù)和讀取方式的時(shí)候,都是基于動(dòng)態(tài)內(nèi)存的實(shí)際結(jié)構(gòu),從內(nèi)存單元矩陣行地址,列地址來(lái)分析的。實(shí)際應(yīng)用過程中,內(nèi)存控制器總是把內(nèi)存單元矩陣映射成線性連續(xù)空間的。不同的芯片組會(huì)給出不同的映射方法。圖10是Intel BX 440芯片組的內(nèi)存行列地址映射(128 MB)。本測(cè)試系統(tǒng)測(cè)試的時(shí)候需要了解硬件的結(jié)構(gòu),才能有效的找出內(nèi)存潛在的缺陷。
測(cè)試系統(tǒng)基于嵌入式Linux操作系統(tǒng),采用命令行方式運(yùn)行,所有的輸入采用配置文件來(lái)設(shè)定。下面給出了一個(gè)配置文件的例子:
在正常和DRAM系統(tǒng)有故障的嵌入式系統(tǒng)下面分別得到了如圖11的檢測(cè)結(jié)果,從實(shí)驗(yàn)中可以發(fā)現(xiàn)有故障的系統(tǒng)在測(cè)試過程中某些測(cè)試項(xiàng)目無(wú)法通過,根據(jù)具體的情況就可以大致判斷出故障的原因,這樣就給系統(tǒng)設(shè)計(jì)者指明了改善系統(tǒng)性能的方向。
5 結(jié)語(yǔ)
本文研究從動(dòng)態(tài)內(nèi)存的失效模型出發(fā),針對(duì)不同的部件可能發(fā)生的問題,設(shè)計(jì)了檢測(cè)用的數(shù)據(jù)和讀取方式,將它們組合起來(lái)進(jìn)行測(cè)試,可以更有效地檢測(cè)動(dòng)態(tài)內(nèi)存中潛在的缺陷,具有高的失效類型的覆蓋率。同時(shí),動(dòng)態(tài)內(nèi)存測(cè)試作為嵌入式Linux測(cè)試系統(tǒng)的一個(gè)子系統(tǒng)得到了國(guó)際計(jì)算機(jī)系統(tǒng)制造商富士通公司的認(rèn)可。