DSP作為電子系統(tǒng)中數字運算的核心,所操作數據的正確性是系統(tǒng)正常運行的基本保證。以導航接收機中的DSP應用為例,捕獲跟蹤、信號解調、電文格式轉換、多徑抑制、抗干擾等實時任務每時每刻都在進行比特信息的交互。作為系統(tǒng)數據的中轉站,存儲器的任何物理故障都有可能導致系統(tǒng)出現嚴重的異常。因此,需要一種快速有效的存儲器測試算法對DSP外設存儲器進行實時功能驗證和檢測,確保器件沒有物理故障[1]。本方法專門針對存儲器中AF、SAF、SOF、TF、CF故障的檢測,如圖1中虛線框內所示。
在已有的故障檢測算法中,Checkerboard算法的測試向量類似于國際象棋中黑白相間的棋盤格,使用0-1間隔的測試序列寫入存儲器,運行時間為O(N),但故障覆蓋率較低[2]。Galpat算法遍歷了每個比特對其他比特的影響,可以檢測所有非鏈接的靜態(tài)故障,但運行時間為O(N2)[3]。在現有工藝條件下,完成一片兆字節(jié)容量的存儲器的Galpat測試需要幾百年。行進算法是工業(yè)中經常使用的存儲器測試算法,如MATS++、March X、March C-等[4],其運行時間為O(N),具有較高的故障覆蓋率,但通常不能覆蓋所有靜態(tài)非鏈接故障。
本文在考慮存儲器靜態(tài)非鏈接故障的基礎上,以字作為基本檢測單元,提出了一種可以檢測所有SAF、TF、AF、SOF、CF故障的行進測試方案,其運算量為(11N+5v)/u+2N,其中,每個字為u比特,u=2v。
1 故障模型與定義
本文采用文獻[2]通用的術語定義。
1.1 術語定義
為了方便描述以字作為基本檢測單元的故障檢測方法,補充定義以下術語:
· u:一個字的比特數,u=2v(v為非負整數)。
· P:u比特的測試向量字。
· P0:全0測試向量字。P0=bu…b2b1,bu=…=b2=b1=0。
· M:某個基于比特的行進測試算法,由一系列行進序列組成。
· MP:M對應的基于字的行進測試算法,P是u比特的測試向量字。
1.2 存儲器故障模型
存儲器靜態(tài)非鏈接故障包括單個單元故障和耦合故障。
(1)單個單元故障
單個單元故障包括:SAF、SOF、AF和TF,其分類及檢測序列如表1所示。
(2)耦合故障 [!--empirenews.page--]
耦合故障是一個單元的邏輯值受另一個單元的影響。包括:①CFin故障(inversion Coupling Fault)是指單元i翻轉會導致單元j翻轉;②CFid故障(idempotent Coupling Fault)是指單元i翻轉會導致單元j的邏輯值為某個定值(0或1);③CFst故障(state Coupling Fault)是指單元i賦值為某個定值時,會導致單元j的邏輯值為某個定值(0或1)。耦合故障列表如表2所示。
2 基于字的行進算法
2.1 基于比特的行進與基于字的行進
基于比特的行進會遍歷所有的比特單元,而基于字的行進則是遍歷所有的字單元。對于N比特的存儲器,兩種行進方式的差異如表3所示。
目前大多數存儲器讀寫操作是基于字的。對于N比特存儲器,如果一個字為u比特,則對于相同的行進序列,基于字的行進與基于比特的行進相比,測試時間減少到原來的1/u;基于字的行進測試缺點在于故障檢測率會下降,需要更多的測試向量字來提高故障檢測率。
2.2 字中耦合故障和字間耦合故障
耦合故障分為字中耦合和字間耦合兩種情況,如圖2所示。字中耦合故障是指同一個字內的兩個比特i和j,比特i的狀態(tài)變化或操作會引起比特j邏輯值故障;字間耦合故障是指比特i和j分別處于兩個不同的字中,比特i的狀態(tài)變化或操作會引起比特j邏輯值故障。
由圖2可以看出,如果M可以檢測出所有的CF故障,則MP0可以檢測出所有的字間耦合故障,但通常只能測出一部分字中耦合故障。
2.3 基于字的故障檢測
為了能夠檢測出所有的SAF、TF、AF、SOF、CF故障,考慮以字為基本檢測單元,采用下面的行進序列進行故障檢測:
其中:
存儲器共N比特,每個字為u比特,u=2v。 [!--empirenews.page--]
P0=bu…b2b1,則bu=…=b2=b1=0
PAj=bu…b2b1,則當i mod 2j>2j-1時,bi=1,i=1,2,…,u。
PBj=bu…b2b1,則當i≤j時,bj=1;當i>j時,bi=0。
結論1:M0可以檢測所有的SAF、TF、AF故障,以及所有的<↑;→>、<↓;→>、<;←>、<↑;←>、<↓;←>、<;←>、<↑;>、<↓;>、<↑;1/0>、<↓;0/1>、<0;0/1>、<1;1/0>故障。
證明:M0對應的基于比特的行進算法為March C-。March C-可以檢測出所有的SAF、TF、AF、CFin、CFst、CFid[4],因此M0可以檢出所有的SAF、TF、AF、字間CFin、字間CFst、字間CFid。下面考察M0對字中CF故障的檢測。
由于M0包含行進序列因此可以檢測出字中耦合比特由0翻轉為1引起因此可以檢測出字中耦合比特由1翻轉為0引起的<↓;0/1>、<0;0/1>故障;又因為M0經歷了寫0寫1又寫0的兩次比特反轉操作,所以可以檢測出所有的單向翻轉CFin故障(包括<↑; →>、<↓;→>、<;←>、<↑;←>、<↓;←>、<;←>)和單次翻轉CFin故障(包括<↑;>和<↓;>)。結論1得證。
結論2:March-CW(即M0+M1)可以檢測所有的SAF、TF、AF、SOF、CFid、CFst故障,以及除了<;>之外的所有CFin故障。
證明:由于M1包含行進序列因此M1可以檢測出所有SOF故障。
由于M1包含行進序列),使用了0-1間隔的測試向量字,因此可以檢測出所有奇位比特反轉對偶位引起的<↑;1/0>、<↓;0/1>、<0;0/1>、<1;1/0>字中耦合故障,以及所有偶位比特反轉對奇位引起的上述故障。M1其他行進序列所使用測試向量字0-1之間的間隔按2的冪次增加,因此可以檢測出所有奇位比特反轉對奇位引起的<↑;1/0>、<↓;0/1>、<0;0/1>、<1;1/0>字中耦合故障,以及所有偶位比特反轉對偶位引起的上述故障。所以M1可以檢測出所有<↑;1/0>、<↓;0/1>、<0;0/1>、<1;1/0>字中耦合故障。
結合結論1,結論2得證。
結論3:M0+M1+M2可以檢測所有的SAF、TF、AF、SOF、CF故障。
證明:M2行進序列所使用測試向量字遍歷了字中的每一個比特可能引起的故障,因此M2可以檢測出所有的字中耦合故障。
結合結論2,結論3得證。
3 分析與應用
3.1 運算量分析
運算量是存儲器實時檢測的重要衡量指標,如表4所示。
由表4可以看出,在具有相同故障檢測能力的前提下,M0+M1+M2的檢測時間遠小于、March-17N和Galpat;當u較大時,M0、M0′、March-CW、M0+M1+M2的檢測時間會大大縮短。 [!--empirenews.page--]
3.2 實例應用
對1 MB的RAM,一個字由32 bit組成,則u=32、v=5,50 MHz的總線讀寫速率,DSP處理速度按500 MHz計算。使用上述檢測算法對DSP外設存儲器進行實時功能驗證和檢測,結果如表5所示。
可見,M0+M1+M2可以在2 s內完成1 MB存儲器的檢測,故障覆蓋所有的SAF、SOF、TF、AF、CFin、CFst、CFid。M0+M1+M2的檢測時間雖然多于M0、M0′、March-CW,但它可以檢測的故障種類更多;M0+M1+M2可以檢測出所有能檢測出的故障,檢測時間從15 s降低到1.6 s。
本文考慮了存儲器所有的靜態(tài)非鏈接故障,提出了一種可以檢測所有SAF、TF、AF、SOF、CF的行進測試方案,用于高效快速地完成DSP外設存儲器測試。
與March-CW、、March-17N進行比較,結果表明,本文方法能檢測出March-CW遺漏的故障,且本文方法的運算量為(11N+5v)/u+2N(其中,每個字為u比特,u=2v),速度遠優(yōu)于的11N和March-17N的17N/u+10N。將該方法用于DSP外設存儲器功能驗證中,在數秒內完成了兆字節(jié)存儲器的檢測,從而可以實時完成DSP外設存儲器的資源驗證。此外,該方法還可以擴展應用于其他嵌入式處理器的外設存儲器測試中。