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