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