宋建磊 許航 陸祥磊
摘要:存儲器應(yīng)用廣泛,使用量大,發(fā)展迅速,隨著近年來存儲芯片容量不斷增大,故障檢測難度與成本也逐漸上升。從存儲器的故障模型和測試技術(shù)出發(fā),對比分析了不同測試算法的特點,以便在實際檢測中選擇合理的測試算法,同時提出了一種改進(jìn)型的測試算法,在基本不改變測試時間長度的情況下增加了故障檢測類型,是一種簡單可行的方法。
關(guān)鍵詞:存儲器;測試算法;故障
一、前言
存儲器作為一種能存儲程序及各種信息的元器件,在汽車、工業(yè)控制、航空航天等領(lǐng)域都有著廣泛的應(yīng)用。隨著電子信息技術(shù)的飛速發(fā)展,存儲器在市場上的需求越來越大,特別是在航空航天領(lǐng)域的廣泛應(yīng)用,使得其可靠性越來越受到重視。在存儲器裝機使用前對其進(jìn)行全面測試是提升其使用可靠性的有效手段。存儲器測試又分為直流電參數(shù)測試、交流電參數(shù)測試以及覆蓋全存儲單元的功能測試[1],其中最關(guān)鍵但也最復(fù)雜的部分,就是覆蓋全存儲單元的功能測試。本文以存儲器主要故障模型為切入點,介紹了常見的功能測試算法,通過分析不同測試算法的故障檢出情況以及算法復(fù)雜度等,比較不同算法間的優(yōu)劣,為實際檢測中算法選擇起到一定指導(dǎo)作用。本文中使用到的符號含義見表1。
二、存儲器故障模型
功能正常的存儲器其所有存儲單元應(yīng)能正確進(jìn)行讀取和寫入。按照其不同的故障模式,存儲器的功能故障主要可歸納為以下幾種故障模型:
(一)固定故障(Stuck-At-Fault,簡稱SAF)
存儲單元的邏輯值始終保持0狀態(tài)(0狀態(tài)故障)或者始終保持1狀態(tài)(1狀態(tài)故障),不受寫入操作影響。
(二)轉(zhuǎn)換故障(Transition-Fault,簡稱TF)
轉(zhuǎn)換故障的表現(xiàn)形式為存儲單元無法實現(xiàn)從1到0或者從0到1的狀態(tài)轉(zhuǎn)換,它與固定故障的區(qū)別是發(fā)生固定故障的存儲單元狀態(tài)始終不會轉(zhuǎn)變,而轉(zhuǎn)換故障單元其狀態(tài)可能由于一些其他原因(非寫入操作)而發(fā)生跳變。轉(zhuǎn)換故障可通過對存儲單元進(jìn)行兩次狀態(tài)翻轉(zhuǎn)操作檢出。
(三)耦合故障(Coupling—Faul,簡稱CF)
發(fā)生耦合故障的單元(受主單元),其單元狀態(tài)會受到其他單元(施主單元)的影響,導(dǎo)致其狀態(tài)發(fā)生不期望的變化。當(dāng)對施主單元進(jìn)行讀寫操作時,受主單元的狀態(tài)會受到影響發(fā)生跳變。當(dāng)受主單元的施主單元只有一個時,成為雙單元耦合故障。當(dāng)施主單元數(shù)量為兩個或以上時,稱為多單元耦合故障。耦合故障主要有以下幾個分類:
1.翻轉(zhuǎn)耦合故障(CFin):施主單元從0到1或者從1到0的狀態(tài)變化導(dǎo)致受主單元狀態(tài)翻轉(zhuǎn),可用符號<↑|?>或<↓|?>表示雙單元的翻轉(zhuǎn)耦合。
2.等冪耦合故障(CFid):施主單元從0到1或者從1到0的狀態(tài)變化導(dǎo)致受主單元狀態(tài)變?yōu)?或1,可用符號<↑| 0>或<↑| 1>或<↓| 0>或<↓| 1>表示雙單元等冪耦合。
3.狀態(tài)耦合故障(SCF):特定的施主單元數(shù)據(jù)狀態(tài)會導(dǎo)致受主單元狀態(tài)改變?yōu)樘囟顟B(tài),可用符號<0|0>或<0 | 1>或<1 | 0>或<1 | 1>表示雙單元狀態(tài)耦合故障。
4.橋接故障[2](BF):是兩個或兩個以上單元連線之間的短路。有AND型以及OR型,可用符號<(0,0)|(0,0)>或<(0,1)|(0,0)>或<(1,0)|(0,0)>或<(1,1)|(1,1)>表示AND型橋接故障,可用符號<(0,0)|(0,0)>或<(0,1)|(1,1)>或<(1,0)|(1,1)>或<(1,1)|(1,1)>表示OR型橋接故障。
(四)地址解碼故障(Address decoder Fault,簡稱AF)
表示地址解碼器錯誤,正常情況下,地址和存儲單元應(yīng)該是一一對應(yīng)的,地址解碼故障可理解為單元與地址間沒有了一一對應(yīng)關(guān)系。根據(jù)不同的對應(yīng)關(guān)系,故障又可分為以下四種情況,如圖1所示:故障1表示一個地址并沒有對應(yīng)的存儲單元;故障2表示存儲單元沒有對應(yīng)的訪問地址;故障3表示一個地址對應(yīng)了兩個或以上的存儲單元;故障4表示多個地址對應(yīng)一個存儲單元。由于地址數(shù)量和單元數(shù)量是一樣多的,所以一般來說,地址解碼故障多呈組合情況出現(xiàn),圖2是地址解碼故障的幾種組合。
三、存儲器測試算法與分析
存儲器故障種類多,檢測方式各不相同,所以在存儲器的功能測試中,測試算法是非常重要的,其不僅關(guān)系到故障檢出率,還影響檢測效率等多個因素。目前主流的測試算法有:
(一)MSCAN算法
MSCAN算法又叫全0全1法,算法主要對所有單元完成W0,R0,W1,R1操作。執(zhí)行方式如下:
1.從首地址開始,按照地址遞增的方式把所有單元寫入0;2.從首地址開始,按照地址遞增的方式讀取所有單元內(nèi)存儲的0;3.從首地址開始,按照地址遞增的方式把所有單元寫入1;4.從首地址開始,按照地址遞增的方式讀取所有單元內(nèi)存儲的1。
MSCAN算法遍歷了所有單元,進(jìn)行了2次讀操作、2次寫操作,測試算法的時間長度為4n,時間復(fù)雜度為O(n)。結(jié)合第二章介紹的存儲器故障模型分析,MSCAN算法可以檢測固定故障SAF,故障覆蓋率較低。
(二)Checkerboard算法
Checkerboard算法又叫棋盤算法,其在MSCAN算法基礎(chǔ)上進(jìn)行了改進(jìn),將全0全1變?yōu)榱?1交替出現(xiàn),將0用白色表示,1用黑色表示,則存儲單元完成一次寫入后呈現(xiàn)出的結(jié)果類似國際象棋棋盤,故得名棋盤法。圖3描述了棋盤算法的執(zhí)行過程,交替將存儲單元分為a、b兩塊,則算法執(zhí)行方式如圖3所示:
1.從起始位置開始,按照地址遞增的方式把a單元寫入0,b單元寫入1;
2.從起始位置開始,按照地址遞增的方式讀取所有單元;
3.從起始位置開始,按照地址遞增的方式把a單元寫入1,b單元寫入0;
4.從起始位置開始,按照地址遞增的方式讀取所有單元。
此算法對所有存儲單元完成了4次讀/寫操作,測試時間長度為4n,算法時間復(fù)雜度為O(n),可檢測固定故障SAF,相鄰單元的橋接故障,故障覆蓋率較低。
(三)March算法
March算法有多種不同的改進(jìn)型,本文以基礎(chǔ)的March 6n算法為例,介紹March算法的執(zhí)行方式如下:
1.全部單元寫0;
2.讀A0單元的0,然后A0單元寫1,然后讀A1單元的0,再A1單元寫1,直到所有單元完成讀0寫1操作,此時所有單元應(yīng)為1;
3.從An-1依次遞減至A0完成讀1寫0操作,此時所有單元應(yīng)為0;
4.讀所有單元的0。
此算法對所有存儲單元完成了3次寫入操作和3次讀取操作,測試時間長度為6n,時間復(fù)雜度為O(n),March算法指令相對簡單,且其對所有單元多次逐個進(jìn)行讀寫的操作,能夠檢測出固定故障SAF、地址解碼故障AF、轉(zhuǎn)換故障(TF),故障覆蓋率較高[3]。
(四)Gallop算法(奔跳法)
Gallop算法也稱為1(0)漫游或乒乓測試,1漫游測試過程如下:
1.所有單元寫0;
2.A0寫1,然后A1讀0,A0讀1,然后A2讀0,A0讀1,接著A3讀0,A0讀1,以此類推,直到An-1讀0,A0讀1;
3.將A0改寫為0,A1寫為1,重復(fù)以上步驟,直到最后一個存儲單元An-1寫1,完成2步驟描述的操作后從1改寫為0。
整個測試過程就像1在整個存儲陣列中漫游一樣,圖5表示1漫游的情況,0漫游算法同理。該算法測試時間長度為2(n+2)2,時間復(fù)雜度為O(n2),能夠檢測固定故障SAF、轉(zhuǎn)換故障TF、耦合故障CF,故障覆蓋率較高[4]。
(五)測試算法分析
將各個算法的測試時間長度、時間復(fù)雜度、故障覆蓋率匯總?cè)绫?。從表中可看出,MSCAN算法與Checkerboard算法測試時間最短,但覆蓋率最低,March算法與Gallop算法故障覆蓋率都較高,但Gallop算法時間復(fù)雜度太高,不具備實際操作價值。綜合評比本文中介紹的幾種算法,March算法具備較高的故障覆蓋率和較低的時間復(fù)雜度,是最優(yōu)算法。在實際應(yīng)用中,對于使用SPI等串行協(xié)議進(jìn)行通信的存儲器,其地址、數(shù)據(jù)以及指令都是通過SDI線串行輸入,而March算法需要頻繁地對單個存儲單元進(jìn)行操作,這樣會增加大量的地址和指令的傳輸,極大地增加通信數(shù)據(jù)量,增加測試時間長度,同時也增加編程難度。故針對使用SPI等串行通信協(xié)議進(jìn)行讀寫操作的存儲器,為了提高測試效率,需要利用其自帶的地址遞增的寫入與讀取功能,故MSCAN算法與Checkerboard算法在實際操作上更具優(yōu)勢。同時,筆者在實際應(yīng)用中,結(jié)合轉(zhuǎn)換故障TF的特性,對Checkerboard算法進(jìn)行了改進(jìn),使改進(jìn)后的Checkerboard算法能夠檢出轉(zhuǎn)換故障,其執(zhí)行步驟如下:
1.從起始位置開始,按照地址遞增的方式把a單元寫入0,b單元寫入1;2.從起始位置開始,按照地址遞增的方式讀取所有單元內(nèi)的0或1;3.從起始位置開始,按照地址遞增的方式把a單元寫入1,b單元寫入0;4.從起始位置開始,按照地址遞增的方式讀取所有單元內(nèi)的1或0;5.從起始位置開始,按照地址遞增的方式把a單元寫入0,b單元寫入1;6.從起始位置開始,按照地址遞增的方式讀取所有單元內(nèi)的0或1。
與Checkerboard算法相比,改進(jìn)后的Checkerboard算法增加了一次所有單元的狀態(tài)翻轉(zhuǎn),即所有單元均完成0→1、1→0的翻轉(zhuǎn),測試時間長度增加到6n,故障覆蓋率增加轉(zhuǎn)換故障TF。
綜上,March算法是最優(yōu)算法,應(yīng)該優(yōu)先考慮,但采用改進(jìn)后的Checkerboard算法,是一種經(jīng)濟有效的算法,就實際測試而言,也是符合要求且行之有效的。
四、結(jié)語
本文分別介紹了四種常見的存儲器故障模型以及四種常見的存儲器測試算法,對比分析各算法的特點,總結(jié)出March算法是最優(yōu)算法,應(yīng)該優(yōu)先考慮,并提出Checkerboard算法的一種改進(jìn)方案應(yīng)用于SPI等串行通信存儲器,在保持時間復(fù)雜度的情況下提高了故障覆蓋率,在考慮測試效率的情況下,也是一個較為不錯的選擇。
參考文獻(xiàn)
[1]龍永佳.存儲器測試技術(shù)研究與二次篩選中的工程應(yīng)用[D].陜西:西安電子科技大學(xué),2020.
[2]陳如意.存儲器故障與可靠性試驗研究[D].廣州:廣東工業(yè)大學(xué),2016.
[3]劉炎華,景為平.存儲器故障診斷算法的研究與實現(xiàn)[J].電子與封裝,2006,6(12):23-25+48.
[4]楊四洲.關(guān)于基于存儲器故障的測試算法探討[J].科技信息,2013(13):81+93.
作者單位:貴州航天計量測試技術(shù)研究所