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





