摘 要:為了保證單片機系統的可靠性,對單片機內嵌存儲器的測試顯得尤為重要。根據MCS-51系列單片機系統內嵌存儲器的結構特點和故障模型,研究了測試算法的選擇、數據背景的產生等問題,首次提出將March C-算法用于單片機內嵌存儲器的用戶級測試程序編寫。該測試程序對SAF,TF,AF,CF的故障覆蓋率可達到100%,并且能夠檢測部分NPSF故障,具有較高的故障覆蓋率,適合于對用戶級MCS-51系列單片機存儲器的測試。
關鍵詞:單片機;March C-算法;存儲器測試;故障覆蓋率
中圖分類號:TP333文獻標識碼:B
文章編號:1004-373X(2010)06-019-03
Test of Single Chip Microcomputer′s Memory Based on March C- Algorithm
YU Wenkao,GAO Cheng,ZHANG Dong
(Beihang University,Beijing,100191,China)
Abstract:In order to ensure thereliability of single chip microcomputer system,test of the single chip microcomputer embedded memory is particularly important.In accordance with characteristics and fault model of MCS-51 embedded memory,selection of the test algorithm and the data background are researched,and the test program which based on March C- algorithm for MCS-51 single chip microcomputer embedded memory for the first time in user-level is presented.The test program can reach all of the SAF,TF,AF,CF failure and some of NPSF failure,has a high fault coverage,suitable for test of MCS-51 single chip microcomputer embedded memory in user-level.
Keywords:single chip microcomputer;March C- algorithm;memory test;fault coverage
0 引 言
存儲器是單片機系統中的重要組成部分,其功能的正確性直接影響到單片機的可靠性。因此,為了保證單片機系統的可靠性,對單片機內嵌存儲器的功能測試尤為重要。針對單片機內嵌存儲器的結構特點,在詳細分析嵌入式存儲器故障模型的基礎上,合理選擇測試算法和數據背景,采用面向位與面向字節相結合的March C-算法,實現了基于March C-算法的單片機內嵌存儲器測試。
1 存儲器的故障模型
文獻[1]介紹了存儲器的五種故障模型,分別是:
(1) 固定故障(Stuck-At Fault,SAF)
存儲器的某個單元或某條線固定為邏輯0或者邏輯1不變。
(2) 狀態轉換故障(Transition Fault,TF)
固定故障中的一個特殊情況,指某個單元或某條線在經過一個寫操作以后不能實現0到1或者1到0的轉換,分別為上升狀態轉換故障和下降狀態轉換故障。
(3) 耦合故障(Coupling Fault,CF)
指在兩個單元當中,由于一個單元的狀態轉換而致使另外一個單元的內容發生了變化。耦合故障可具體分為翻轉耦合故障、冪耦合故障、動態耦合故障、橋聯故障及狀態耦合故障五種。翻轉耦合故障(Inversion Coupling Fault)是指一個單元中上升沿跳變或下降沿跳變會引起另一個單元內容的翻轉;冪耦合故障(Idempotent Coupling Fault)指一個單元中上升沿跳變或下降沿跳變會迫使另一個單元內容置0或置1;動態耦合故障(Dynamic Coupling Fault)冪耦合故障中的一種特殊情況,指當一個單元發生讀或寫操作后,迫使另一個單元的內容為0或1;橋聯故障(Bridging Fault,BF)由兩個或多個單元或線短路所引起的,分為與橋聯故障和或橋聯故障。與橋聯故障的邏輯值是兩個橋聯單元邏輯值的與,或橋聯故障情況亦然;狀態耦合故障(State Coupling Fault)指當一個單元處于某個狀態值時,另一個耦合單元被置0或1。
(4) 圖形敏感故障(Pattern Sensitive Fault,PSF)
指一種特殊的狀態耦合故障。圖形敏感故障意味著在部分存儲器出現一些特定的數據時,其他部分存儲器的數據會受到影響。它可能是一種動態(由于數據的改變)或者靜態(由于固定的數據)的故障類型,也可能是一種全局的或者只局限于附近單元的故障類型。
(5) 尋址故障(Address decoder Fault,AF)
行或列譯碼器可能訪問不到尋址單元;或者多個地址訪問同一個存儲單元;或者一個地址同時訪問多個單元;或者不訪問所指定的單元而訪問其他單元[2]。
此外,存儲器的故障模型還有開路故障[3](Stuck-at Fault,SAF)、維持故障[4](Retention Fault,RF)和相鄰模式敏感故障[5] (Neighborhood Patter Sensitive Fault,NPSF)等。
2 嵌入式存儲器的測試方法
嵌入式存儲器的測試方法有以下三種:
2.1 存儲器直接存取測試
存儲器直接存取測試是產生一種測試結構來允許對嵌入式存儲器陣列的直接訪問。它通常利用自動測試設備進行測試,可以從封裝引腳直接對嵌入式存儲器進行訪問,或者可以從封裝引腳對測試狀態邏輯以及對一些為存儲器提供數據的流水線結構中串行狀態進行訪問,能夠輕易實現多種高質量測試算法。其缺點是:在ATE機上實現的算法越復雜,對ATE機存儲器的容量要求越高;在 ATE機上不易實現對嵌入式存儲器的“全速”測試,測試時鐘的工作頻率越高,測試成本越高;由于芯片外圍管腳的限制,則對芯片內大容量嵌入式存儲器進行直接測試往往不大現實。
2.2 利用嵌入微處理器來間接測試存儲器
在這種測試方法中,通過嵌入式微處理器對存儲器進行讀/寫操作,測試向量是一系列微處理器的程序代碼。這些代碼可以放在程序存儲器中,在嵌入式芯片接口處施加代碼,測試存儲器的過程就是微處理器執行測試程序的過程。其優點是不需要對設計硬件做任何修改,而且測試算法的修改與實現可以通過靈活修改微處理器代碼予以完成。
2.3 存儲器內建自測試(MBIST)
這種方法的基本思想是由電路自己生成測試向量,而不是要求外部施加測試向量,它依靠自身邏輯來判斷所得測試結果是否是正確的,這樣就大大降低了對測試設備的要求。MBIST技術主要應用于存儲器的可測性設計中。
本文研究的是單片機內嵌的存儲器測試方法,由于待測存儲器的硬件無法更改,且外界測試環境無法通過器件引腳直接訪問內嵌存儲器,因此只有利用內嵌的微處理器來測試存儲器才是切實可行的。
3 March C-算法
March算法是比較流行的存儲器測試方法[8],提出后進行過多次改進,出現了很多變種,如MATS,MATS+,March X,March C,March C-等算法[9]。March算法是由March元素構成的序列,其基本思想是反復對每一個地址進行讀/寫0或1操作,保證每兩個字節之間的測試碼出現00,01,10,11四種情況,至少各一次,并且為了檢查高低地址讀/寫順序故障,分別進行地址遞增和地址遞減兩種操作。
在諸多的March算法中,綜合考慮算法的故障覆蓋率及測試成本等因素,本文選用能夠有效檢測大多數存儲器簡化故障的Match C-算法。March C-算法的具體描述如下:
{ (w0);(r0,w1);(r1,w0);
M0M1M2
(r0,w1);(r1,w0); (r0)}
M3M4M5
其中:表示地址升序;表示地址降序; 表示任意地址順序;w0表示寫入數據背景;w1表示寫入一個相反的數據背景;r0和r1分別表示讀出并驗證一個數據背景和一個相反的數據背景;M0~M5分別表示一個March單元。March C-算法能夠有效檢測出SAF,TF,CF,AF等故障[1]。其中,SAF故障可由M0,M1單元和M1,M2單元檢測出;TF故障中0→1故障可由M3,M4單元檢測出,1→0故障可由M2,M3單元檢測出;CFin故障中1→0故障可由M2,M3單元和M4,M5單元檢測出,0→1故障可由M1,M2單元和M3,M4單元檢測出;CFid故障中置1故障可由M2,M3單元和M4,M5單元檢測出,置0故障可由M1,M2單元和M2,M3單元檢測出;AF故障可以在March單元的連續升序/降序中得到檢測。
存儲器分為面向字(Word-oriented)的存儲器和面向位(Bit-oriented)的存儲器,這是根據存儲器的讀/寫方式來分的。面向字的存儲器是以字(Word)為單位進行讀/寫的,面向位的存儲器是以位(Bit)為單位進行讀/寫的。由于單片機內嵌存儲器既可以進行按位讀寫操作(地址為20H~2FH),也可以進行按字節讀寫操作,所以在測試時,采用了面向位與面向字節相結合的March C-算法進行。
對于多位的SRAM,耦合故障可能發生在屬于不同地址的單元之間,也可能發生在同一個地址的單元之間。前一種情況稱為字間耦合故障,后一種情況稱為字內耦合故障,這兩種故障同時存在[10]。在將面向位的March C-算法擴展成面向字的March C-算法時,為了能夠檢測到字內耦合故障,通常的做法是增加數據背景。最常見的增加數據背景是DB和DBbar,DBbar是DB按位取反的結果。DB中連續0和連續1的個數從1到W/2(W為字寬)遞增,直到滿足數據背景K的個數為止。對于字寬為W的存儲器,要完成該類測試,至少需要K個數據背景,其中:
K=(log2 W)+1
對于每種數據背景,都要執行一遍測試算法。MCS-51系列單片機的存儲器字寬為8 b,在面向字的March C-算法中使用的數據背景如表1所示。
表1 測試8位存儲器的數據背景
序號DBDBbar
10000000011111111
20101010110101010
30011001111001100
40000111111110000
面向字的March C-算法描述如下:
{ w(DB1);
(r(DB1),w(DBbar1));(r(DBbar1),w(DB1));
(r(DB1),w(DBbar1));(r(DBbar1),w(DB1));
(r(DB1),w(DB2));
(r(DB2),w(DBbar2));(r(DBbar2),w(DB2));
(r(DB2),w(DBbar2));(r(DBbar2),w(DB2));
(r(DB2),w(DB3));
(r(DB3),w(DBbar3));(r(DBbar3),w(DB3));
(r(DB3),w(DBbar3));(r(DBbar3),w(DB3));
(r(DB3),w(DB4));
(r(DB4),w(DBbar4));(r(DBbar4),w(DB4));
(r(DB4),w(DBbar4));(r(DBbar4),w(DB4));
r(DB4)}
在編寫測試程序時,共使用了讀、寫和比較三種指令,將讀取的數據與正確值相比較,若不同,則表示存儲器出現故障,同時由單片機輸出特定的報警信號。首先使用面向位的March C-算法對地址區20H~2FH內的單元進行測試,所用指令為位尋址指令。接下來使用面向字的March C-算法對整個RAM區域進行測試;根據不同地址區間的特點,首先通過寄存器尋址指令來完成地址00H~1FH區間RAM單元的測試;通用寄存器R0~R7所對應的物理地址由程序狀態字PSW控制。然后對地址20H~7FH區間的RAM單元,使用直接尋址指令來進行測試。
下面給出使用MCS-51系列單片機匯編語言編寫的程序片段。該片段功能是對地址20H~7FH區間的RAM單元進行測試。該程序片段如下:
MOV R0,#20H;將初始地址賦給R0
MOV B,#60H ;設置循環次數
LOOP1: MOV @R0,#DB;寫數據背景DB
INC R0;地址遞增
DJNZ B,LOOP1
MOV R0,#20H;將初始地址賦給R0
MOV B,#60H ;設置循環次數
LOOP2: CJNE @R0,#DB,ERROR
;讀出并比較存儲內容DB
MOV @R0,#DBbar
;寫入數據背景DBbar
INC R0;地址遞增
DJNZ B,LOOP2
MOV R0,#20H;將初始地址賦給R0
MOV B,#60H ;設置循環次數
LOOP3: CJNE @R0,#DBbar,ERROR
;讀出并比較存儲內容DBbar
MOV @R0,#DB;寫數據背景DB
INC R0;地址遞增
DJNZ B,LOOP3
MOV R0,#7FH;將初始地址賦給R0
MOV B,#60H ;設置循環次數
LOOP4: CJNE @R0,#DB,ERROR
;讀出并比較存儲內容DB
MOV @R0,#DBbar
;寫入數據背景DBbar
DEC R0;地址遞減
DJNZ B,LOOP4
MOV R0,#7FH;將初始地址賦給R0
MOV B,#60H ;設置循環次數
LOOP5: CJNE @R0,#DBbar,ERROR
;讀出并比較存儲內容DBbar
MOV @R0,#DB;寫數據背景DB
DEC R0;地址遞減
DJNZ B,LOOP5
MOV R0,#20H;將初始地址賦給R0
MOV B,#60H ;設置循環次數
LOOP6: CJNE @R0,#DB,ERROR
INC R0;地址遞增
DJNZ B,LOOP6
ERROR:…;輸出錯誤信息
SJMP
4 結 語
這里將March C-算法用于單片機系統內嵌存儲器的測試,實現了用戶級測試程序的開發。該測試程序對SAF,TF,AF,CF的故障覆蓋率可達到100%,并且能夠檢測部分NPSF故障,同時測試時間僅為10 ns,具有很好的故障覆蓋率和測試效率,現已實際應用于單片機系統的故障檢測,從而有效地保證了單片機系統的質量及可靠性。
參考文獻
[1]孫華義,鄭學仁,閭曉晨,等.嵌入式存儲器內建自測試的一種新型應用[J].中國集成電路,2007,16(11):1-5.
[2]唐濤,許邦建.基于March算法的嵌入式存儲器BIST技術[J].計算機研究與發展,2007,44(Z1):17-21.
[3]王麗,施玉霞,王友仁.一種嵌入式存儲器內建自測試電路設計[J].計算機測量與控制,2008,16(5):624-626.
[4]林曉偉,鄭學仁,劉漢華,等.嵌入式存儲器的內建自測試算法及測試驗證[J].中國集成電路,2006,15(2):77-80.
[5]Chrisarithopoulos A,Haniotakis T,Tsiatouhas Y.New Test Pattern Generation Units for NPSF Oriented Memory Built-in Self Test.The 8th IEEE International Conference[C].2001,2:749-752.
[6]陸思安,何樂年,沈海濱,等.嵌入式存儲器內建自測試的原理及實現[J].固體電子學研究與進展,2004,24(2):205-208.
[7]檀彥卓,徐勇軍,韓銀和,等.面向存儲器核的內建自測試[J].計算機工程與科學,2005,27(4):40-43.
[8]李金鳳,曹順,汪瀅.嵌入式存儲器測試方法研究[J].計量與測試技術,2004(12):12-14.
[9]宋毅,陽輝,方葛豐,等.嵌入式存儲器內建自測試方法[J].微計算機信息,2008,24(11):263-265.
[10]須自明,蘇彥鵬,于宗光.基于March C-算法的SRAM BIST電路的設計[J].集成電路設計與開發,2007,32(3):245-247.