1 引言 存儲器是各種電子設備中保存信息的主要部件,隨著存儲器芯片的密度和復雜度的日益提高,設計一個良好的測試算法來測試存儲器變得尤為重要,存儲器按功能,主要可分為隨機存儲器(RAM)和只讀存儲器(ROM)。 隨機存儲器(RAM)根據存儲陣列所用的電路類型可分為靜態隨機存儲器(SRAM)、動態隨機存儲器(DRAM),只讀存儲器(ROM)可分為掩模編程ROM和現場可編程ROM。 2 存儲器的故障模型 研究存儲器的檢測方法,就必須先建立存儲器單元的故障模型,也就是要求把物理故障模型化為邏輯故障,通?梢杂霉δ苣P突蚧蚁蛔幽P蛯⒋鎯ζ鞴收夏P突,典型RAM功能模型如圖1所示,該模型是由Vande Goor提出的簡化功能DRAM模型。 對于圖1的功能模型,存儲器的故障主要表現有3類: (1)地址解碼器故障(AF),主要表現為4種形式(如圖2所示)。 (2)讀寫邏輯模塊故障。主要表現為在讀寫電路中,某些檢測放大器的出或者寫入驅動器的邏輯部分,可能產生開路、短路或者I/O固定的故障,在讀寫電路的數據線之間存在交叉耦合的干擾。 (3)存儲單元陣列故障,由于存儲單元陣列是存儲器內規模最為復雜的一個模塊,因此出現故障的概率最大,故障的類型也最為復雜,主要是由于存儲器單元內的數據線開路、短路以及串擾所引起的。 對于上述的功能模型去掉其中的某些邏輯模塊,就可用于ROM的測試。 3 存儲器的簡化功能故障 基于以上各模塊的故障表現形式,又由于地址譯碼故障和讀寫邏輯故障可以等效的功能映射為存儲器單元陣列故障,故可把存儲器故障簡化為下列四種功能故障: (1)固定故障(stuck-At Fault,SAF) 單元或連線的邏輯值總為0或總為1的故障,單元/連線總是處于有故障的狀態,并且故障的邏輯值不變。 (2)轉換故障(Transition Fault.TF) 轉換故障是SAF的一種特殊情況,當寫數據時,某一存儲單元失效使得0→1轉變或1→0轉變不能發生,表現為固定故障的形式。 (3)耦合故障(Coupling Fault,CF) 存儲單元中某些位的跳變導致其他位的邏輯發生非預期的變化,它既可以發生在不同單元之間,也可以發生在同一單元不同位之間。 (4)相鄰矢量敏化故障(Neighborhood Pattern Sensitive Faults,NPSF) 一個單元因相鄰單元的活動導致狀態不正確,一個單元的相鄰單元可能有5個,也可能有9個,如圖3的(a)、(b)所示。 4 存儲器故障診斷算法分析 針對存儲器故障模型中的各種故障,人們提出了各種診斷算法,目前主要使用的算法有:Checkerboard算法(棋盤法)、Gallop算法(奔跳法)、March算法(進行法)等。 4.1 Checkerboard算法(棋盤法) 棋盤法的測試過程是首先對每一個存儲單元賦值,使得每一個單元與其緊相鄰的各個單元的值都不同,如圖4所示,即把整個存儲陣列分為兩塊a、b,然后采用如下過程對a、b進行讀寫; (1)對分塊a(b)中的單元寫0(1); (2)讀所有單元; (3)對分塊a(b)中的單元寫1(0); (4)讀所有單元; (5)該算法理論上操作的次數是O(N),其中N為存儲器容量,可以檢測SAF故障和相鄰單元的橋接故障,其故障覆蓋率較低。 4.2 Gallop算法(奔跳法) Gallop算法也稱為1(0)漫游或乒乓測試,測試過程如下: (1)部分地址單元清0(1); (2)A0寫1(0),然后A1讀0(1),A0讀1(0),然后A2讀0(1),A0讀1(0),接著A3讀0(1),A0讀1(0),直到全部單元; (3)將A0改寫為0(1),寫A1為1(0),重復以上步驟。 整個過程就像1(0)在整個陣列中漫游一樣,圖5表示1漫游的情況,該算法具有較高的故障覆蓋率,能檢測SAF故障、TF故障以及CF故障,單位該算法操作次數是O(N2)需要較長的測試時間。 4.3 March算法(進行法) (1)全部單元中寫0; (2)讀A0單元的0,然后再改寫為1,然后讀A1的0,再改寫A1為1,直到An-1。這樣所有單元均為1; (3)然后從An-1到A0作讀1寫0再讀0的操作。 該算法的操作次數為O(N),能檢測全部的SAF故障、AF故障以及TF故障。 5 一種基于棋盤算法的改進及實現 通過研究和對比上述3個算法發現,Checkerboard(棋盤)算法和March算法以線性方式進行讀寫,因此存儲器操作次數與存儲器容量N成正比,Gallop算法雖然有較高的故障覆蓋率,但由于其對存儲器刺激次數過多,因此,在實際測試中不是一種很經濟的測試算法,Checkerboad算法只實現了0→1或1→0的讀寫,所以不能測試變遷故障。而March算法恰恰實現了這兩個狀態的轉換,但March算法操作次數(6N)要多于Checkerboard算法的操作次數(4N),對于大容量存儲器的測試,March算法將需要比Checkerboard算法更多的測試時間來完成整個測試過程,因此結合March算法的特點,對Checkerboard算法進行如下改進。 (1)對分塊a(b)中單元寫1(0); (2)對分塊a(b)中的單元寫0(1); (3)讀所有單元; (4)對分塊a(b)中的單元寫1(0); (5)讀所有單元。 這樣整個存儲器就同時經歷了由0→1和1→0兩個讀寫狀態,就可以測試出變遷故障,寫改進后Checkboard算法對存儲器的操作次數為5N次,而March算法對存儲器的操作次數則需要6N次,大大地節省了測試時間。 以一個X(行地址)、Y(列地址)地址復用的128×128的存儲器矩陣為例,按改進后的算法編寫的測試圖形片斷如圖6。 實際的算法圖形要配合讀寫的時序,因此圖形更為復雜,但對存儲器的操作次數與理論是一致的,改進的Checkerboard算法雖然使用了較少的存儲器操作次數,但其只能診斷出部分AF故障,與March算法相比,是以犧牲故障覆蓋率為代價來提高測試速度的。 在實際的生產型測試中,地址譯碼模塊由于結構較存儲矩陣要簡單得多,因此出現故障的概率遠遠小于存儲矩陣,且改進的Checkerboard算法也能診斷部分的AF故障,是一種經濟的測試算法。 6 結語 文章在理解分析的基礎上結合各算法的特點對Checkerboard算法進行了改進及實現,通過研究發現,任何事物都有兩面性,每種算法對不同的類型故障的探測能力各有千秋,但不會盡善盡美,改進的算法雖然提高了測試速度,但這種改進犧牲了故障覆蓋率。但就實際的測試需要而言,是完全符合要求且行之有效的,在實際應用中,要根據存儲器的故障類型和測試需求來選擇合適的診斷算法,才能達到滿意的效果。 |