現代集成電路的制造工藝越來越先進,但是在生產過程中的制造缺陷也越來越難以控制,甚至一顆小小的 PM2.5 就可能導致芯片報廢,為了能有效的檢測出生產中出現的廢片,需要用到掃描鏈測試(scan chain),由此產生了可測性設計即 DFT flow。
注意scan test 只能檢測出制造瑕疵,無法檢測芯片功能瑕疵。
在芯片功能設計完成后,整個網表是由一堆普通的寄存器和組合邏輯構成的。掃描鏈的插入就是指將普通寄存器替換成為掃描寄存器(scan flip-flop)的過程。
SE scan enable為其切換信號。正常工作模式時,SE為0,這時scan FF的功能與原有的D-FF完全一致,data path 為D到Q。芯片的功能得以保持不變。當SE被切換為1時,這時候scan FF執行其scan屬性,data path為SI到Q。SI即為測試時的數據流向入口。
Function SE=0 datapath:D->Q scan FF act as DFF
Scan SE=1 datapath: SI->Q Scan FF act as Scan
將片上的掃描寄存器Q-SI連接起來,就成為了掃描鏈。通過shift的方式可以由scan chain將數據串行輸入的每個寄存器的SI端,達到控制每個寄存器的目的。在capture模式下,將芯片組合邏輯的反饋傳回寄存器,達到對芯片內部觀測的作用。
DFT 第一步是做 scan chain,首先將電路中的普通 DFF 換成 scan DFF:
scan DFF 是在原DFF 的輸入端增加了一個 MUX,於是多了幾個 pin :scan_in,scan_enable,scan_out
換完之后將所有的 scan DFF 首尾依次串接起來,就構成了一條 scan chain :
當 SE 信號(即 scan enable )有效時,電路進入scan 狀態,此時數據通路如下圖藍色粗線所示:
當 SE 信號無效時,電路工作在 normal 狀態,數據通路如下圖紅色粗線所示:
那么,這樣一條 scan chain 是如何檢測到電路中的缺陷呢?
簡單來講,scan chain 工作時分為三個步驟: load ····> capture ····> unload
load 是將input pattern 打入 scan chain
capture 是將每一級組合邏輯的結果打入下一級register
unload 是將scan chain 中的數據串行輸出,得到 output pattern
下圖是一個簡單的 scan chain 工作原理示意圖:
結合上圖,可知scan mode 的工作步驟如下:
1. 將普通的 register 替換為 scan register
2. 將 scan register 首尾依次串接起來
3. 在 SE 有效拉高時,將 input pattern 串行打入scan register
4. 然后 SE 拉低,等 Reg/Q 的值經過組合邏輯運算后到達下一級 reg 的D 端
5. 再產生一個 capture pulse 將 D 端的值打入寄存器
6. 最后 SE 拉高,將 reg 中的值依次串行輸出,得到 output pattern
7. 如果 output pattern 和預期的輸出結果相同,說明電路工作正常
否則說明電路制造有問題,屬於廢片了