一種改進(jìn)的嵌入式存儲器測試算法
關(guān)鍵詞故障原語,靜態(tài)故障,動態(tài)故障,存儲器測試,故障覆蓋率
1 引言
隨著深亞微米VLSI技術(shù)的發(fā)展,大量的不同廠家的電路設(shè)計(jì)或核集成到一個(gè)芯片上。存儲器密度的增長使存儲器的測試面臨著更大的挑戰(zhàn)。嵌入式RAM存儲器是最難測試的電路,因?yàn)榇鎯ζ鞯臏y試通常需要大量的測試模式來激活存儲器并將存儲器的單元內(nèi)容讀出來與標(biāo)準(zhǔn)值進(jìn)行比較。在可以接受的測試費(fèi)用和測試時(shí)間的限制下,準(zhǔn)確的故障模型和有效的測試算法是至關(guān)重要的。而為了保證測試時(shí)間和故障覆蓋率,測試的好壞大大的依賴于所選的功能故障模型。
以前大部分關(guān)于故障模型的論文都是把故障的敏化固定在最多一個(gè)操作上(如一個(gè)讀或一個(gè)寫),這些功能故障被叫作靜態(tài)功能故障。而基于缺陷注入和SPICE仿真的DRAM的試驗(yàn)分析表明:在沒有靜態(tài)故障的情況下存在另外一種多于一個(gè)操作才能敏化的故障(如一個(gè)連續(xù)的讀和寫操作),即動態(tài)故障。大部分的測試算法主要針對靜態(tài)故障,對動態(tài)故障的覆蓋率比較低,但動態(tài)故障的測試也是非常重要的[1]。
2 存儲器故障模型
故障模型可以用故障原語(Fault Primitive)來表示。單個(gè)單元故障用符號S/F/R>表示,兩個(gè)單元耦合故障用符號Sa;Sv/F/R>表示。S表示單個(gè)單元的敏化操作序列,Sa表示耦合單元的敏化操作序列,Sv表示被耦合單元的敏化操作序列,F(xiàn)表示故障單元的值F {0,1},R表示讀操作的邏輯輸出值R {0,1,-}?!硎緦懖僮骷せ罟收希瑳]有輸出值。故障原語可以構(gòu)成一個(gè)驅(qū)動所有存儲器功能故障的操作序列的完整集合。
2.1單個(gè)單元靜態(tài)故障
單個(gè)單元靜態(tài)故障有12種可能的故障原語,而這12種故障原語可以看作是一個(gè)六個(gè)功能故障模型的集合,下面是這六種功能故障:1)狀態(tài)故障(State Fault);2)轉(zhuǎn)換故障(Transition Fault);3)寫干擾故障(Write Disturb Fault);4)讀破壞故障(Read Destructive Fault); 5)偽讀破壞故障(Deceptive Read Destructive Fault);6)錯誤讀故障(Incorrect Read Fault)。這些故障在文章[2]中有詳細(xì)的解釋。
在文章[3]中提到固定故障(Stuck-at Faults)的故障原語是 /0/->和 /1/->,所以固定故障被認(rèn)為是狀態(tài)故障與轉(zhuǎn)換故障的并集。固定開路故障(Stuck Open Fault)[4]是由于斷開的字線引起的,即0w1或1w0的操作是不能完成的,所以可以認(rèn)為是轉(zhuǎn)換故障;另外由于存儲器的讀出依賴于靈敏放大器,可以認(rèn)為是錯誤讀故障,所以把固定開路故障認(rèn)為是轉(zhuǎn)變故障和錯誤讀故障的并集。
2.2靜態(tài)耦合故障
靜態(tài)耦合故障的故障原語有36種,可以被歸納為以下七種類型的功能故障模型[2]:1)狀態(tài)耦合故障(State Coupling Fault); 2)干擾耦合故障(Disturb Coupling Fault); 3)轉(zhuǎn)換耦合故障(Transition Coupling Fault);4)寫破壞耦合故障(Write Destructive Coupling Fault); 5)讀破壞耦合故障(Read Destructive Coupling Fault);6)偽讀破壞耦合故障(Deceptive Read Destructive Coupling Fault); 7)錯誤讀耦合故障(Incorrect Read Coupling Fault)。這些故障在文章[2]中有詳細(xì)的解釋。
2.3單個(gè)單元的動態(tài)故障
只考慮S=xWyRz這種情況。單個(gè)單元動態(tài)故障的故障原語有12種,可以被歸納為以下三種類型的功能故障模型:1)動態(tài)的讀破壞故障(Dynamic Read Destructive Fault);2)動態(tài)的偽讀破壞故障(Dynamic Deceptive Read Destructive Fault);3)動態(tài)的錯誤讀故障(Dynamic Incorrect Read Fault)。這些故障在文章[1]中有詳細(xì)的解釋。
2.4動態(tài)耦合故障
主要分析兩個(gè)單元的動態(tài)耦合故障,它可分為四種類型。只研究其中的兩種(兩個(gè)連續(xù)的操作都應(yīng)用在耦合單元和兩個(gè)連續(xù)的操作都應(yīng)用在被耦合單元)。兩個(gè)單元的動態(tài)耦合故障的故障原語有32種,可以被歸納為以下四種類型的功能故障模型[1]:
1)動態(tài)干擾耦合故障(Dynamic Disturb Coupling Fault): 耦合單元的連續(xù)的兩個(gè)寫,讀操作使被耦合單元的值發(fā)生跳變。
2)動態(tài)的讀破壞耦合故障(Dynamic Read Destructive Coupling Fault):耦合單元的某一特定值使被耦合單元的連續(xù)的兩個(gè)寫,讀操作改變了存儲單元的邏輯值并輸出錯誤的值。
3)動態(tài)的偽讀破壞耦合故障(Dynamic Deceptive Read Destructive Coupling Fault):耦合單元的某一特定值使被耦合單元的連續(xù)的兩個(gè)寫,讀操作改變了存儲單元的邏輯但輸出正確的值。
4)動態(tài)的錯誤讀耦合故障(Dynamic Incorrect Read Coupling Fault):耦合單元的某一特定值使被耦合單元的連續(xù)的兩個(gè)寫,讀操作返回錯誤的值但存儲單元的值沒有發(fā)生改變。
3 存儲器測試
在文章[2]中提到的March SS算法如圖1所示,它被認(rèn)為能測出上面所提到的所有的靜態(tài)簡化故障。在文章[3]中把固定開路故障認(rèn)為是轉(zhuǎn)換故障和錯誤讀故障的并集,但是由于固定開路故障的敏化必須使上次讀的值與本次所期望讀的值反向,所以對它的測試的算法是不同于錯誤讀故障的算法。通過對圖1所示March SS算法的分析可以很容易的發(fā)現(xiàn)它不能測出固定開路故障,只須在它的四個(gè)元素M1,M2,M3,M4中任意一個(gè)元素的最后一個(gè)寫操作的后面增加一個(gè)讀操作就能測出固定開路故障(如在元素M1的w1最后面加一個(gè)r1)。為了規(guī)則性,可以在M1,M2,M3,M4四個(gè)元素的后面都增加一個(gè)讀操作,得到March SS’算法,其算法如圖2所示。
圖1. March SS算法
圖2. March SS’算法
增加的讀操作只會影響由這個(gè)讀操作所敏化的故障的檢測。而對于其它的靜態(tài)故障的檢測,由于增加的讀操作并不影響存儲器單元的內(nèi)容,所以也不會影響這些故障的覆蓋率。在這些由讀操作所引起的故障中,除偽讀破壞故障和偽讀破壞耦合故障以外的其它故障是由一個(gè)讀操作敏化并且檢測的,所以該算法只會增加不會減少對這些故障的覆蓋率。最后對于偽讀破壞故障和偽讀破壞耦合故障,用March SS’算法的測試如表1中的(a)和(b)所示。其中“v>a”表示被耦合單元的地址高于耦合單元的地址,“va”表示被耦合單元的地址低于耦合單元的地址,“,”表示故障能被多個(gè)元素敏化和檢測,“/”的左邊表示敏化右邊表示檢測。從以上可以得出該算法可以測出所有的靜態(tài)故障。
(a)
(b)
表1. (a)March SS’算法對偽讀破壞故障的覆蓋率,(b) March SS’算法對偽讀破壞耦合故障的覆蓋率
算法March SS’中的M1,M2,M3,M4四個(gè)元素的第二個(gè)讀操作主要是為了檢測由第一個(gè)讀操作敏化的偽讀破壞故障和偽讀破壞耦合故障,而對其它的故障的檢測沒有任何貢獻(xiàn),所以去掉這些讀操作并不影響對這兩個(gè)故障之外的故障的檢測。從表1的(a)和(b)可以看出,如果沒有這四個(gè)讀操作同樣能測出偽讀破壞故障和偽讀破壞耦合故障。因此可以去掉March SS’算法中M1,M2,M3,M4四個(gè)元素的第二個(gè)讀操作,得到一個(gè)如圖3所示的改進(jìn)的算法-March SSE算法。該算法同樣能測出所有的上述的靜態(tài)故障,另外還能測出固定開路這個(gè)不能被March SS測出的靜態(tài)故障。故障覆蓋率得到了提高。
圖3. March SSE算法
下面分別來看March SS算法和March SSE算法對動態(tài)故障的測試情況,對單個(gè)單元的動態(tài)故障的測試如表2所示,表格的第三列所對應(yīng)的是March SS對單個(gè)單元的動態(tài)故障的測試情況,第四列是March SSE對單個(gè)單元的動態(tài)故障的測試情況??梢钥闯鯩arch SS算法只能測出其中1/3的故障,而March SSE能夠測出5/6的故障。
功能故障模型(FFM) | 故障原語(FP) | March SS | March SSE |
動態(tài)讀破壞故障(dRDF) | 0w0r0/↑/1> | M1, M3 | M1, M3 |
0w1r1/↓/0> | M1, M3 | ||
1w0r0/↑/1> | M2,M4 | ||
1w1r1/↓/0> | M2,M4 | M2,M4 | |
動態(tài)偽讀破壞故障(dDRDF) | 0w0r0/↑/0> | ||
0w1r1/↓/1> | M1/M2,M3/M4 | ||
1w0r0/↑/0> | M2/M3,M4/M5 | ||
1w1r1/↓/1> | |||
動態(tài)錯誤讀故障(dIRF) | 0w0r0/0/1> | M1, M3 | M1, M3 |
0w1r1/1/0> | M1, M3 | ||
1w0r0/0/1> | M2,M4 | ||
1w1r1/1/0> | M2,M4 | M2,M4 |
表2. March SS和March SSE對單個(gè)單元的動態(tài)故障的覆蓋率
對于多個(gè)單元的動態(tài)耦合故障,以兩個(gè)單元的為例。表3顯示了兩種算法對動態(tài)干擾耦合故障(dCFds)和動態(tài)偽讀破壞耦合故障(dCFdrd)兩種動態(tài)耦合故障的敏化和檢測情況。而另外兩種動態(tài)耦合故障動態(tài)讀破壞耦合故障(dCFrd)和動態(tài)錯誤讀耦合故障(dCFir)同理很容易被證明可以全部被March SSE算法測試,而March SS只能測出其中一半的故障。對兩個(gè)單元的動態(tài)耦合故障的總體來講,March SS算法只能測出其中3/8的故障,而March SSE卻能測出7/8的故障。因此對動態(tài)故障的故障覆蓋率有了大幅度的提高。
FFM | 故障原語(FP) | March SS | March SSE | ||
v>a | va | v>a | va | ||
動態(tài)干擾耦合故障(dCFds) | 0w0r0;0/↑/-> | M1/M1 | M3/M3 | M1/M1 | M3/M3 |
0w1r1;0/↑/-> | M1/M1 | M3/M3 | |||
1w1r1;0/↑/-> | M4/M5 | M2/M3 | M4/M5 | M2/M3 | |
1w0r0;0/↑/-> | M4/M5 | M2/M3 | |||
0w0r0;1/↓/-> | M3/M4 | M1/M2 | M3/M4 | M1/M2 | |
0w1r1;1/↓/-> | M3/M4 | M1/M2 | |||
1w1r1;1/↓/-> | M2/M2 | M4/M4 | M2/M2 | M4/M4 | |
1w0r0;1/↓/-> | M2/M2 | M4/M4 | |||
動態(tài)偽讀破壞耦合故障(dCFdrd) | 0;0w0r0/↑/0> | ||||
0;0w1r1/↓/1> | M3/M4 | M1/M2 | |||
0;1w1r1/↓/1> | |||||
0;1w0r0/↑/0> | M2/M3 | M4/M5 | |||
1;0w0r0/↑/0> | |||||
1;0w1r1/↓/1> | M1/M2 | M3/M4 | |||
1;1w1r1/↓/1> | |||||
1;1w0r0/↑/0> | M4/M5 | M2/M3 |
表3. March SS和March SSE對兩個(gè)單元的動態(tài)耦合故障的覆蓋率
4 結(jié)論
本文通過對嵌入式存儲器的幾種不同的類型的動態(tài)和靜態(tài)簡化功能故障的分析,在原有的主要用來測試靜態(tài)故障的March SS算法的基礎(chǔ)上提出了March SSE算法。該算法長度為22N , N為存儲器的字的個(gè)數(shù),其中每個(gè)字包含一位。與March SS算法相比較,March SSE算法在測試長度不變的情況下,其故障覆蓋率有了大幅度的提高。不但能測出March SS算法所測試的全部的功能故障,而且還能檢測出March SS算法所遺漏的固定開路故障,以及85%以上的第2節(jié)所描述的動態(tài)故障,故障覆蓋率得到了大幅度地提高。
本文作者創(chuàng)新點(diǎn):本文在March SS算法的基礎(chǔ)提出了一種改進(jìn)的隨機(jī)存取存儲器的測試算法-March SSE算法,該算法在測試長度不變的情況下,不但能檢測出原算法所能檢測的所有故障,而且還能測出原算法不能檢測出的固定開路故障,以及85%以上的由連續(xù)的寫、讀兩個(gè)操作敏化的動態(tài)故障。該算法在測試長度不變的情況下大大地提高了故障覆蓋率。
參考文獻(xiàn)
[1] S. Hamdioui, Z. Al-Ars, and A. J. van de Goor, “Testing static and dynamic faults in random access memories,” in Proc. VLSI Test Symp., 2002, pp. 395-400.
[2] S. Hamdioui, A. J. van de Goor and M. Rodgers, “March SS: A Test for All Atatic Simple RAM Faults,” In Proc. Of the IEEE Int. Workshop on Memory Technology, Design and Testing, Bendor, France, pp. 95-100.
[3] S. Hamdioui, Z. Al-Ars, and A. J. van de Goor, “Linked faults in random access memories: concept, fault models, test algorithms, and industrial results,” In IEEE Trans. On Computer-Aided Design of Integrated Circuits and Systerms, Vol.23, No.5, pp. 195-205, May 2004.
[4] R. Dekker, F. Beenaker, and L. Thijssen, “A realistic Fault model and test algorithm for static random access memories,” IEEE Trans. Computer-Aided Design, Vol.9, pp. 567-572, June 1990.
[5] 曹海源,孫世宇,張志紅, “一種可編程的通用存儲器仿真測試系統(tǒng),” 微計(jì)算機(jī)信息, 2005年第21卷第4期, 84-85頁.
評論