????????MBIST 方法是目前大容量存儲器測試的主流技術,該技術利用芯片內部專門設計的BIST 電路進行自動化測試,能夠對嵌入式存儲器這種具有復雜電路結構的嵌入式模塊進行全面的測試。MBIST 電路將產生測試向量的電路模塊以及檢測測試結果的比較模塊都置于芯片的內部,在測試完成后,將測試的結果通過芯片的測試引腳送出到芯片的外部。
????????MBIST 的核心思想是在芯片內部,存儲器外部建立測試電路結構,實現對存儲器的讀寫控制:寫入測試向量,讀出響應數據。MBIST 電路的基本結構一般包括測試向量產生電路、BIST 控制電路、響應分析電路三部分,結構如圖所示:
一、SRAM基本介紹
1、SRAM的基本結構
????????SRAM,名為靜態隨機存儲器,它是一種隨機存取存儲器。它采用雙穩態觸發器作為存儲元件,由于雙穩態電路的穩定特性,這種存儲器可以實現靜態穩定讀取:只要不掉電,存儲單元就可以長期保存所寫入的信息,并且無需刷新。SRAM具有存取速度快,外圍電路簡單,功耗低等優點,在數據高速緩存和存儲陣列中被廣泛應用,SRAM 的存儲單元如圖:
?????????嵌入式存儲器結構模型的存儲陣列就是SRAM 存儲單元陣列。由基本存儲單元組成的存儲陣列和存儲器外圍電路共同組成了存儲器的整體結構。存儲器的外圍電路一般包括地址譯碼電路和讀/寫控制電路。SRAM 的結構模型如圖:
?????????地址譯碼電路包括地址寄存器和行/列譯碼器,讀/寫控制電路由數據寄存器、靈敏放大器和寫驅動器組成。當地址信號給定存儲單元地址,通過行/列譯碼器鎖定存儲單元位置,若當前為讀操作則從鎖定的存儲單元讀出數據并經過靈敏放大器放大擺幅,從數據寄存器輸出數據;若當前為寫操作則將輸入數據寫入數據寄存器,通過寫驅動器寫入指定單元。
????????由于存儲器內部非常復雜,非常容易出現各種故障,這些故障可能是對存儲器進行讀寫操作的過程中的讀寫控制電路故障,可能是地址譯碼電路出現的故障,而存儲器的核心存儲單元陣列由數以萬計的存儲單元排列而成,更容易出現故障,并且產生的故障也更加難以應對,接下來將介紹存儲器的相關故障模型。
2、SRAM故障模型
????????故障模型是指邏輯故障模型。發生在真實存儲器上的故障通常是物理故障,而引入故障模型的概念是因為物理故障是隨工藝而變化的,引起物理故障的原因很多,如果測試人員對每一種物理故障在每一工藝下都去研究是不現實的,可行的辦法是不直接研究物理故障,而是去研究模型化了的故障——故障模型。
????????當然故障模型必須要對實際的物理故障實現精確地反映。集成電路中有與故障相關的幾個容易混淆的概念:缺陷,故障、誤差和漏洞。這幾個概念是集成電路設計中的問題在不同階段的不同表現形式。
- 缺陷是指集成電路制造過程中,在硅片上所產生的物理異常,比如多余或者錯放了某些器件。
- 故障是指集成電路制造中的缺陷表現在電路功能上的異常現象,比如電路的邏輯功能固定為1 或者0。
- 誤差則是由于故障的存在而導致的系統功能的偏差和錯誤。
- 漏洞一般指由于設計問題而造成的功能錯誤,也就是我們常說的“bug”
????????故障建模是用數學模型來描述芯片制造過程中可能出現的物理缺陷,用于研究缺陷對系統或者電路功能造成的影響,以及確定故障發生的位置。采用故障模型的另一個原因就是:電路中可能存在的物理缺陷的種類繁多,并且某些物理缺陷可能對電路功能產生非常復雜的影響,分析難度大。而采用故障模型的形式,一個邏輯故障往往可以描述多種物理缺陷行為,從而回避了對物理缺陷的直接分析。
????????常見的存儲器故障類型包括:固定型故障(Stuck-At Faults,SAF),跳變故障(Transition Faults,TF),耦合故障(Coupling Faults,CF),相鄰圖形敏感故障(Neighborhood Pattern Sensitive Faults,NPSF)和地址譯碼故障(Address DecoderFaults,ADF)。
1)固定型故障(SAF)
????????固定型故障會在控制信號和存儲器單元中出現,表現為控制信號或者存儲單元中的值固定為1 或0,也就是持續為高電平或者低電平,簡記為SA0(Stuck-At-0)和SA1(Stuck-At-1),固定故障圖示為:
????????固定型故障可以通過對所有待測單元寫入0 再讀出0,然后寫入1 讀出1 來進行檢測。
2)跳變故障(TF)
????????跳變故障(也稱跳變延遲故障)出現在控制信號和存儲器單元中,表現為控制信號或者存儲單元中的值無法(或者延遲)從0 跳變到1,或者從1 跳變到0,簡記為TF (0->1)和TF (1->0),跳變故障圖示為圖:
????????跳變故障可以通過寫入1 到0 的跳變再讀出0,然后寫入0 到1 的跳變再讀出1 來進行檢測。?
3)耦合故障(CF)
????????耦合故障主要發生在存儲單元中,表現為對某個單元的寫入操作影響其它單元的值,使其它單元的值發生變化,根據發生的變化不同,耦合故障可以分為反相耦合故障(CFin:inversion),冪等耦合故障(CFid:idempotent)、狀態耦合故障(CFst:state)和橋連故障(Bridging Faults,BF)。
????????耦合故障可以通過先升序對所有存儲單元進行寫讀操作,然后再降序對所有存儲單元進行寫讀操作的方法進行故障檢測。
3)相鄰圖形敏感故障(NPSF)
????????這種故障主要發生在存儲單元中,表現為對某特定單元周圍的若干存儲單元的賦值或者跳變會影響:
4)地址譯碼故障(ADF)
????????這種故障主要發生在地址譯碼邏輯中,地址與存儲單元是一一對應的,一旦地址譯碼邏輯發生故障,將會出現以下四種故障類型中的一種或多種:
- 對于給定的地址,不存在相對應的存儲單元;
- 對于一個存儲單元,沒有相對應的物理地址;
- 對于給定的地址,可以訪問多個固定的存儲單元;
- 對于一個存儲單元,可以通過多個地址訪問。?
二、MBIST測試算法
????????存儲器內建自測試的中心思想就是在嵌入式存儲器周圍建立測試電路,測試電路控制存儲器按照一定的步驟去工作,得到的輸出結果與期望值進行比較來檢驗存儲器的正確性。這些“一定的步驟”就是測試算法,測試算法的好壞決定了MBIST 的質量和效率。
1、性能指標
????????存儲器測試算法的性能指標有兩個:測試時間和故障覆蓋率。
????????測試時間可以用算法時間復雜度來表征。算法時間復雜度是算法評價的通用指標,一般用O(f(N))表示,其中f(N)可以是常數、N、N2、NlogN 等,在存儲器中,N 是存儲器的存儲單元數。算法復雜度是對算法效率的一個粗略的定量表示,它只區分常數復雜度、一階復雜度、二階復雜度等,而在存儲器算法中,大多數算法的復雜度都是一階的,那么為了更加細致的比較各種測試算法,存儲器測試中通常也會用操作數來定量表征測試時間。
????????故障覆蓋率:用來表征測試算法對某種故障類型的檢測能力。對于存儲器測試算法的評價有時也要考慮故障覆蓋范圍,它用來表征一個測試算法能覆蓋多少種覆蓋類型。在保證對能覆蓋的故障類型的覆蓋率的情況下,能覆蓋的故障類型越多越好。
????????測試時間和測試覆蓋率本身就是相悖的一對指標。想達到高的覆蓋率,測試時間就可能被延遲;想減少測試時間,也許測試覆蓋率就會降低。一個優秀的測試算法應該是在保證測試時間可接受的情況下,盡可能多的去覆蓋故障類型并且覆蓋率盡可能高。如何權衡測試時間和測試覆蓋率是測試算法選擇和設計的核心。
2、常見算法
????????常用的確定性測試算法有MSCAN(Memory Scan)算法,跳步 (GALPAT) 和走步 (Walking 1/0)算法,Checkerboard 算法和March 類算法。每種測試算法總有它針對的故障類型,這樣每種算法的測試向量的規模和測試效率不盡相同,我們要綜合考慮,選取最適合的測試算法。
1)MSCAN 算法
????????MSCAN 算法是一種最基本,最簡單的測試算法。其算法過程是首先對所有待測單元寫入全0 然后讀取所有存儲單元并判斷是否有故障,接著寫入全1 再讀取所有存儲單元并判斷是否有故障,這種算法所使用的測試向量實際上是形式固定的存儲器掃描序列,其操作次數是4N,與存儲器地址位數成正比關系,時間復雜度為O(N)。這種測試算法時間復雜度低,測試向量簡單,但是除可以檢測所有SAF故障外,僅支持部分耦合故障的測試,故障覆蓋率有限。
2)跳步(GALPAT)和走步(Walking 1/0)算法
????????跳步算法和走步算法操作過程類似,首先選定一個存儲單元作為基本單元,其他單元作為普通單元,向基本單元內寫入1(或0),普通單元寫入0(或1),然后讀取所有單元的數據,重復該過程,直到所有存儲單元都曾經被選定為基本單元為止。
????????以跳步算法為例,其操作過程如下:
- (1) 對所有的存儲單元寫入0(或1);
- (2) 選定一個存儲單元Cj 作為基本單元:對Cj 內的值求補;
- (3) 對基本單元Cj 和普通單元Ck(k≠j)進行以下操作:讀單元Cj;讀單元Ck。
- (4) 恢復單元Cj 的內容。
- (5) 重新選定一個存儲單元作為基本單元,重復操作(2)(3)。
????????該算法可以覆蓋以下故障:SAF、TF、ADF以及部分CF。
3)Checkerboard 算法
????????Checkerboard 算法也叫做棋盤算法,基本過程是對每個存儲單元進行賦值,保證每一個存儲單元的值都與相鄰單元的值不同,這樣就將整個存儲陣列分為了兩塊:存儲值是0 的為A 塊,存儲值是1 的為B 塊:
????????分塊后,按如下過程完成算法:
- (1) 對A 和B 塊分別寫入0 和1;
- (2) 讀所有存儲單元;
- (3) 對A 和B 塊分別寫入1 和0;
- (4) 讀所有存儲單元。?
????????該算法的操作數為4N,時間復雜度為O(N),可以檢測和定位固定型故障和部分橋連故障,在BIST 算法中應用較為廣泛。
4)March 算法
????????March算法是一系列的算法,由于這類算法具有較高的故障覆蓋率同時測試時間較短,使得其在存儲器測試領域得到了廣泛研究和應用。這類算法已經廣泛應用于運用于對大容量SRAM 和DRAM 的測試,隨著研究的深入,各種改進算法也相繼出現。目前的March 算法主要有MATS,MATS+,March X、March C、March C-、March C+、March LR 等類型。
????????March 的基本思想是在有限狀態機的控制下遍歷每個存儲單元,并對每個存儲單元進行一系列的操作,在對下一個存儲單元操作之前,對當前單元的這些操作被稱為March 元素,而各種March 類型算法的不同之處也恰恰體現在March 元素上。每個March 元素都有規定的地址升降順序,當一個存儲單元完成一系列操作后,根據地址升降順序來決定下一個執行操作的存儲單元。當某個March 元素對所有的存儲單元做完所有操作后執行下一個March 元素。為了便于描述各種March 算法的執行過程,我們首先進行如下約定:
????????目前March 算法針對不同的測試目的衍生出了各種類型的March 算法,這些算法的不同之處在于March 元素的不同上,也就是對地址的操作順序和對每個存儲單元進行的操作不同。對單個存儲單元的操作數和對故障的覆蓋率體現了各種March 算法的不同特點,各種March 算法的操作數和覆蓋率對比如表:
? ? ? ? 算法可以覆蓋的故障如下: