可測試性設計:為什麼晶片出廠前要自檢
業界有一句半開玩笑的話:「測試工程師的工作,是在良率與品質之間走鋼索。」而可測試性設計,就是那條鋼索上最關鍵的平衡桿。
二、可測試性設計(DFT)到底是什麼?
DFT 不是某一種特定電路,而是一種「設計哲學」:在設計階段,刻意加入額外邏輯,讓晶片在測試模式下變得容易控制與觀察,而在正常工作模式下,這些額外邏輯幾乎不影響功能與效能。
打個比方。假設你要檢查一棟大樓裡每一間房間的燈泡是否正常。如果沒有事先規劃,你得逐層逐間開門進去檢查,費時又費力,有些房間甚至根本進不去。但如果建商在設計時就拉好一條「測試匯流排」,讓每間房的燈泡狀態可以集中顯示在警衛室的儀表板上,同時能從警衛室統一開關——檢查就變成幾分鐘的事。DFT 做的就是這條匯流排。
2-1 可控制性與可觀察性
在測試理論中,一個節點「好不好測」由兩個指標決定:
DFT 的所有技術,本質上都在做同一件事:提高可控制性與可觀察性。掃描鏈讓你直接「寫入」與「讀出」正反器的值;邊界掃描讓你能觀察每一根接腳;內建自我測試讓晶片自己產生測試向量、自己判斷結果。方法不同,目標一致。
2-2 從「功能測試」到「結構測試」
測試策略大致可以分兩類:
現代晶片的主力測試是結構測試,因為它可以被自動化、可以被量化(覆蓋率)、可以針對特定故障模型。功能測試則退居輔助角色,通常只用來驗證少數關鍵功能或啟動流程。
2-3 常見的故障模型
要測「壞掉」,得先定義什麼叫壞掉。實體缺陷(如金屬連線斷裂、短路、閘極氧化層漏電)種類繁多,測試工程師用「故障模型」來抽象化這些缺陷,讓 ATPG 工具可以系統性地產生測試向量。常見模型如下:
故障模型
物理意義
測試重點
Stuck-at(固定值故障)
某條線永遠固定在 0 或 1
最基礎、覆蓋率最高,業界通常要求 95% 以上
Transition Delay(轉態延遲故障)
訊號該變換時變得太慢,導致時序錯誤
需要 at-speed 測試,抓「慢速缺陷」
Bridging(橋接故障)
兩條不該相連的線短路在一起
需要特定的向量組合來激發
Path Delay(路徑延遲故障)
整條時序路徑累積延遲超過時脈週期
針對關鍵路徑進行驗證
Cell-aware(單元感知故障)
針對標準元件內部電晶體層級的實體缺陷
先進製程常採用,能抓到傳統模型漏掉的缺陷
值得注意的是,沒有任何一種故障模型能涵蓋所有實體缺陷。這也是為什麼業界會同時使用多種模型、多種測試階段,形成「多層防禦」的測試策略。
三、晶片自檢的核心機制:BIST 家族
「BIST」是 Built-In Self-Test 的縮寫,中文常譯為「內建自我測試」。它的核心概念非常漂亮:把測試機的一部分功能,搬到晶片裡面去。晶片不再被動等待外部測試機餵向量,而是自己產生測試向量、自己施加、自己收集結果、自己判斷通過與否。
這樣做的好處顯而易見:外部測試機只需要下一個「開始測試」的指令,然後讀一個「通過/失敗」的結果。測試時間大幅縮短、測試資料量大幅降低、測試機台的成本壓力也減輕。更重要的是,BIST 可以在晶片的整個生命週期中使用——不只是出廠前,還包括每次開機、甚至運行中的定期檢查。
3-1 掃描鏈與 ATPG:結構測試的骨幹
在談各種 BIST 之前,得先講掃描鏈(Scan Chain),因為它是絕大多數結構測試的基礎。
傳統的正反器(Flip-Flop)在正常工作時,只負責儲存資料。掃描版本的設計會在每個正反器前面加一個多工器,讓它在「掃描模式」下,把上一級正反器的輸出當作輸入,於是所有正反器串連成一條巨大的移位暫存器。
// 簡化示意:掃描式 D 型正反器
module scan_dff (
input clk,
input rst_n,
input scan_en, // 1 = 掃描模式,0 = 正常工作
input d, // 功能資料輸入
input si, // 掃描資料輸入(來自前一級)
output reg q // 輸出(同時也是下一級的 si)
);
wire mux_out = scan_en ? si : d;
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
q <= 1'b0;
else
q <= mux_out;
end
endmodule
有了掃描鏈,測試流程就變成三個步驟:
ATPG(Automatic Test Pattern Generation)工具的工作,就是自動算出「要移入什麼向量,才能讓某個故障被激發並傳播到輸出」。這是一個 NP 完全問題,實務上靠啟發式演算法與大量運算資源解決。對先進晶片而言,一顆晶片可能需要數萬到數百萬條測試向量,測試資料量以 GB 計,因此業界還得搭配測試壓縮(Test Compression,如 EDT、DFTMAX)技術,把向量壓縮幾十倍到上百倍。
3-2 MBIST:記憶體自我測試
現代系統單晶片(SoC)裡,記憶體(SRAM、DRAM、ROM)往往佔據超過一半的面積。記憶體的缺陷型態與邏輯電路完全不同:可能有單一元件的 stuck-at、相鄰單元的耦合干擾、位元線的靈敏度問題、解碼器故障等等。
記憶體通常用「March 演算法」來測。以常見的 March C- 為例,它會對每一個位址依序執行「寫 0、讀 0、寫 1、讀 1」等動作,並以不同方向(升冪、降冪)掃過整個記憶體陣列。這種規律性的動作,非常適合用內建的有限狀態機來實現。
MBIST 的典型架構包含:
比對器:把讀出的資料與預期值比較,記錄錯誤。
MBIST 的價值不只在出廠測試。對許多高可靠性應用(車用、伺服器、基地台),晶片開機時會執行一次 MBIST,確認記憶體沒有因為老化或環境因素而損壞;有些系統甚至會在運行中定期執行「透明式」的記憶體測試。
3-3 LBIST:邏輯自我測試
LBIST(Logic BIST)針對的是隨機邏輯。它的做法是:內建一個偽隨機樣式產生器(PRPG,通常是線性回饋移位暫存器 LFSR),持續產生看似隨機的測試向量,送入受測邏輯;輸出則送入一個多輸入簽章暫存器(MISR),把大量輸出壓縮成一個「簽章」。測試結束後,只要比對簽章是否等於預期的黃金簽章,就能判斷邏輯是否正常。
LBIST 的優點是外部設備需求極低,非常適合系統層級的自我檢測;缺點是隨機向量對某些難以激發的故障(random-resistant faults)覆蓋率不足,通常需要搭配「加權」或「測試點插入」等技巧來提升覆蓋率。因此實務上,LBIST 常與掃描式 ATPG 並用:出廠時用掃描測試追求高覆蓋率,系統運行時用 LBIST 做快速健康檢查。
比較項目
掃描式 ATPG
MBIST
LBIST
主要目標
邏輯電路缺陷
記憶體陣列缺陷
邏輯電路快速自檢
向量來源
外部 ATE 提供
內建控制器
內建 PRPG
覆蓋率
高(可達 95% 以上)
依演算法而定
中(需輔助技巧)
典型用途
晶圓測試、成品測試
出廠測試+開機自檢
系統層級健康檢查
3-4 邊界掃描與 JTAG:從晶片到電路板
晶片裝上電路板之後,測試的難度又提升一個層級:你很難用探針去碰 BGA 封裝底下的焊球。於是 IEEE 1149.1 標準(俗稱 JTAG)應運而生。它在每根接腳的邊界上放置掃描單元,串成邊界掃描鏈,讓測試機可以透過少數幾根腳(TCK、TMS、TDI、TDO),控制並觀察晶片的所有 I/O。
JTAG 後來被大幅擴充,成為晶片上各種測試與除錯機制的統一入口:
讀寫掃描鏈、啟動 MBIST/LBIST
存取晶片內部的除錯電路(on-chip debug)
透過 IEEE 1687(IJTAG)存取嵌入式儀器
進行邊界掃描的互連測試(interconnect test),檢查 PCB 上的焊接是否良好
可以說,JTAG 是「晶片自檢」對外的遙控器。沒有它,BIST 的結果就只能鎖在晶片裡,無法被系統層級使用。
四、為什麼「出廠前自檢」不可省略:五個關鍵理由
談完機制,回到本文的主題:為什麼非得在出廠前做自檢?以下五個理由,分別對應品質、成本、可靠度、安全與商業現實。
理由一:良率學習與缺陷篩選
晶圓製造是一個數百道步驟的過程,任何一道出問題,都可能造成局部缺陷。這些缺陷不一定會立刻讓晶片「死掉」——很多是「潛在缺陷」(latent defect),當下功能正常,但在溫度變化、電壓波動或長時間使用後才失效。這種「早夭」現象在半導體可靠度工程中有個經典曲線叫「浴缸曲線」:初期故障率高,中期穩定,後期老化。
出廠前的結構測試(尤其是 at-speed 的轉態測試與 burn-in 後的測試),目的就是把這些潛在缺陷提早篩掉,讓客戶拿到的是走過「早期失效期」的產品。業界用 DPM(Defective Parts Per Million,每百萬顆不良數)來衡量出貨品質,而測試覆蓋率直接決定 DPM 的高低。
理由二:測試成本與資料量的現實壓力
如前所述,ATE 機台時間非常昂貴。若沒有 DFT,測試工程師只能用功能向量硬測,向量數量會爆炸,測試時間拉長,成本直線上升。有了掃描鏈與 BIST,測試可以平行化(多條掃描鏈同時移位)、可以壓縮、可以在晶片內部完成,測試時間與資料量都能有效控制。
換句話說,DFT 不是「額外的負擔」,而是讓測試在經濟上可行的必要投資。業界常見的取捨是:多花 5%~10% 的面積做 DFT,換取測試時間減少數十倍、測試覆蓋率提升到 95% 以上。這筆帳怎麼算都划算。
理由三:不可測試就等於不可保證
在車用、醫療、航太、工業控制等領域,「保證」是有法律與合約意義的。ISO 26262(道路車輛功能安全)要求晶片必須能偵測自身的潛在故障(latent fault),並且在規定時間內達到一定的診斷覆蓋率(Diagnostic Coverage)。這些要求無法靠「出廠時抽樣」達成,必須靠晶片內建的自我測試與週期性診斷機制。
沒有 DFT,就沒有診斷覆蓋率;沒有診斷覆蓋率,就拿不到安全認證。這已經不是成本問題,而是能不能賣的問題。
理由四:系統層級的可維護性
一顆晶片裝進伺服器、基地台或電動車之後,可能會連續運作好幾年。這段期間,它會經歷溫度循環、電壓應力、輻射粒子撞擊(soft error)等考驗。當系統出現異常時,維運人員需要快速判斷「是晶片壞了,還是軟體、電源、散熱出問題」。
內建自檢提供了這種「分級診斷」能力:開機時跑一次 POST 與 MBIST,若能通過,代表硬體基本健康;運行中定期跑 LBIST,可以提早發現退化趨勢。這種可維護性,對資料中心與電信設備的營運成本影響極大。
理由五:防止「良品中的劣品」流入市場
最可怕的不是明顯壞掉的晶片,而是「看起來正常、實際上有隱性缺陷」的晶片。這類晶片可能在客戶端使用三個月後才失效,造成的退貨、維修、品牌損害,遠遠超過一顆晶片的售價。對車用或醫療應用而言,甚至可能涉及人身安全。
出廠前的完整自檢,就是最後一道防線。它同時也是法律責任的證明:當事故發生時,能提出完整的測試紀錄與覆蓋率報告,是廠商自保的重要依據。
五、從晶片到系統:自檢概念如何延伸到你的日常裝置
DFT 與 BIST 的觀念,其實早就透過各種形式,出現在你我每天使用的 3C 產品裡。只是它們通常很低調,低調到你幾乎不會注意到。
5-1 開機自我測試(POST)
你按下電腦電源鍵的那幾秒鐘,主機板上的 BIOS/UEFI 正在執行 POST(Power-On Self-Test):檢查 CPU、記憶體、匯流排、週邊裝置是否正常。這其實就是系統層級的「自檢」概念。
在筆電與手機裡,這個概念更進一步:SoC 內部的電源管理單元會在開機時依序啟動各個子系統,並執行記憶體測試、時脈檢查、溫度感測器校正。若某個子系統自檢失敗,系統可能會降頻、關閉部分功能,或直接拒絕開機——這都是為了避免在不穩定的狀態下執行使用者資料。
5-2 車規與安全關鍵系統的「持續自檢」
電動車與先進駕駛輔助系統(ADAS)對晶片可靠度的要求,遠高於消費性電子。一顆負責煞車或轉向的微控制器,必須能在行駛過程中持續監控自身狀態。常見做法包括:
開機時:執行完整的 MBIST 與邏輯測試,確認硬體完好。
這些機制的共同精神,就是「不要假設晶片永遠健康,而是假設它隨時可能出錯,並設計出能即時發現錯誤的方法」。這正是可測試性設計的延伸。
5-3 消費性裝置的隱形自檢
即使是一般消費性電子,也有許多隱形的自檢行為。例如:
固態硬碟(SSD)控制器在閒置時執行背景掃描,檢查 NAND 儲存單元的錯誤率。
無線耳機的藍牙晶片在配對前進行射頻校正與自我檢測。
手機的電源管理 IC 監控電池電壓、溫度,必要時限制充電電流。
這些功能之所以能實現,背後都依賴晶片設計階段預留的感測器、測試模式與診斷介面——也就是 DFT 的功勞。
六、DFT 的代價與取捨:沒有白吃的午餐
講了這麼多好處,也該談談代價。DFT 不是免費的,工程團隊必須在以下幾個面向做取捨:
6-1 面積與效能開銷
每個掃描式正反器都要加一個多工器,每條掃描鏈都要額外的繞線,BIST 控制器、MISR、PRPG、JTAG TAP 控制器也都需要面積。整體而言,DFT 邏輯通常佔晶片面積的 3%~15%,視設計複雜度與測試策略而定。
效能方面,掃描多工器會被放在正反器的資料路徑上,雖然通常影響很小,但在超高頻設計中仍需謹慎處理。部分設計會採用「多工器內嵌於正反器」的特殊元件(scan flip-flop),把延遲降到最低。
6-2 測試模式下的功耗與時序
掃描測試時,所有正反器會同時翻轉,造成的瞬間切換功耗(shift power)可能遠高於正常工作狀態。若不加控制,可能導致測試時電壓下降、時序錯誤,甚至損壞晶片。因此業界發展出低功耗測試技術,例如分組移位、掃描鏈分割、時脈閘控等。
此外,at-speed 測試需要晶片內部產生高速時脈,對時脈樹設計與電源完整性都是一大挑戰。
6-3 安全性與測試模式的濫用風險
測試模式是一把雙面刃。它能讓工程師讀寫晶片內部狀態,但也可能被惡意人士利用,成為側通道攻擊或竊取金鑰的入口。因此現代晶片通常會加入測試模式的保護機制,例如:
測試模式需要特定金鑰或序列才能解鎖
晶片離開工廠後永久關閉部分測試功能(fuse-based disable)
通過安全認證的除錯介面(如 ARM CoreSight 的認證機制)
如何在「可測試」與「安全」之間取得平衡,是近年 DFT 領域的熱門課題。
七、實務入門:工程師可以怎麼開始理解 DFT
如果你是電子、電機或資工背景的學生,或是一位想深入了解晶片設計的 3C 愛好者,以下幾個方向可以作為切入點:
7-1 從理論到工具
了解 JTAG 的 TAP 狀態機(16 個狀態),這是所有邊界掃描操作的基礎。
7-2 從系統角度看測試
除了電路層面,也建議從系統層面理解測試流程:晶圓測試(Wafer Sort/CP)→ 封裝 → 成品測試(Final Test/FT)→ 燒機(Burn-in)→ 系統級測試(SLT)。每個階段測什麼、為什麼要測、成本如何,都是 DFT 工程師日常要考慮的問題。
7-3 閱讀標準與文獻
IEEE 1149.1(JTAG)、IEEE 1500(核心包裝)、IEEE 1687(IJTAG)、IEEE 1838(3D IC 測試)是幾個重要的測試標準。此外,國際測試會議(ITC)、亞洲測試會議(ATS)的論文集,以及各家 EDA 廠商的白皮書,都是很好的進修資源。
八、常見問答
Q1:所有晶片都需要 BIST 嗎?
不一定。小型、低複雜度、低成本晶片(如簡單的電源管理 IC、感測器介面)可能只用基本的掃描測試或功能測試就足夠。但對大面積、高複雜度、高可靠度要求的晶片(處理器、SoC、車用 MCU),BIST 幾乎是標準配備。
Q2:BIST 通過就代表晶片絕對沒問題嗎?
不是。任何測試都有覆蓋率上限。BIST 能抓到的故障,取決於測試向量與故障模型的設計。理論上仍可能存在未被覆蓋的缺陷,這稱為「逃逸」(escape)。因此業界會用多種測試方法互補,並持續改進故障模型(如 cell-aware、timing-aware),以降低逃逸率。
Q3:測試會不會傷晶片?
測試過程確實會對晶片施加應力(電壓、電流、溫度、時脈切換)。設計不良的測試流程可能造成過度應力,反而降低可靠度。因此測試工程師必須控制測試條件,確保「測試不會比使用更傷晶片」。這也是為何測試模式下的功耗與時序分析如此重要。
Q4:為什麼不能只靠軟體測試?
軟體測試只能透過晶片對外暴露的介面進行,無法觸及內部的掃描鏈、記憶體陣列與邊界掃描單元。對於內部節點的缺陷,軟體測試的覆蓋率極低。硬體層級的 DFT/BIST 才能有效偵測這些缺陷。
Q5:DFT 工程師的日常工作是什麼?
大致包括:在 RTL 階段規劃掃描架構、插入測試邏輯、產生與驗證測試向量、分析覆蓋率、除錯測試失敗案例、與設計團隊協調時序與面積影響、支援量產測試程式開發。這是一個橫跨設計、驗證、測試與製造的跨領域角色。
結語:自檢,是晶片對自己負責的方式
回到最初的問題:為什麼晶片出廠前要自檢?答案其實很樸素——因為我們無法從外部看清它的內部,所以只好讓它自己說出真相。
可測試性設計,本質上是一種「誠實的工程」:在設計階段就承認晶片可能會壞,並且預先準備好發現壞掉的方法。它不是事後補救,而是從第一天就納入設計流程的思維。掃描鏈、MBIST、LBIST、JTAG,這些聽起來生硬的縮寫,背後都是同一個信念:能被測量的,才能被信任;能被信任的,才能交到使用者手上。
下次當你按下電源鍵,看著裝置在幾秒內完成開機,不妨想想那幾秒鐘裡發生的事:數以億計的電晶體正在接受檢查,數以萬計的測試向量正在流過掃描鏈,而結果只有一個位元——通過,或不通過。那個位元,就是現代晶片工業對品質最簡潔、也最沉重的承諾。
對 3C 科技愛好者而言,理解 DFT 與 BIST,不只是多背幾個名詞,而是多了一層看待產品的眼光:當你看到「通過 AEC-Q100 認證」、「支援 ISO 26262 ASIL-D」、「內建 ECC 與 BIST」這些規格時,你會知道它們代表的不只是行銷詞彙,而是一整套讓晶片敢於自我檢驗的工程實力。