JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

BIST 與記憶體測試:讓晶片自我測試

如果晶片不需要一台百萬美元的測試機餵它圖樣呢——如果它能自己批改作業呢?這就是內建自我測試(BIST):晶片內部的小電路自己產生刺激、自己觀察響應,幾乎不靠外界幫忙就回報通過或失敗。在這一關,你會看到為什麼深而密的邏輯,以及一望無際的記憶體,各自需要自己那一種自我測試;也會明白為什麼現代 SoC 在你每次開機時都悄悄地檢查自己。

永不打烊的測試機:為什麼把測試搬進晶片裡?

在第 4 關你學到了測試晶片的決定式做法:ATPG工具算出一組精確的測試圖樣,那是一支由 0 與 1 組成、專為抓住固定型故障而打造的小程式,再由一台佔滿整個房間的自動測試設備(ATE)把它們移入掃描鏈,並逐一比對每個擷取到的響應。它運作得非常漂亮——但它有兩個昂貴的習慣。圖樣必須*儲存*在測試機的記憶體裡,而且必須以測試機那不算快的時脈,一次一位元地*移入又移出*。對一顆有著上千萬個掃描單元、上千組圖樣的晶片來說,那是數十億位元的向量資料,每顆晶片要花上好幾秒慢慢移位——而測試機的時間是按秒計費的,那台機器的價格甚至可能比做出晶圓的廠房設備還貴。

內建自我測試,也就是 [[ic-built-in-self-test|BIST]],提出一個讓人解脫的問題:如果晶片自己帶著一台測試機上路呢?與其從外界串流圖樣進來,不如讓一小塊邏輯在內部*產生*刺激,再讓另一小塊邏輯把響應*壓縮*成一個短短的簽章。昂貴的 ATE 於是縮水成一個保母——它替晶片上電、發一個「開始」訊號、等待,然後讀回少少幾位元:通過或失敗。刺激在晶粒上誕生、在晶粒上被消耗,全程以晶粒自己的速度進行。

邏輯 BIST:一台骰子機與一台指紋讀取器

測試隨機邏輯的經典架構叫做 STUMPS——Self-Test Using a MISR and Parallel Scan-chains(使用 MISR 與並行掃描鏈的自我測試)——它只是在你既有的掃描基礎設施上,多栓了兩個巧妙的零件。第一個是骰子機。ATPG 把每一位元手工雕出來;邏輯 BIST 反其道而行,用線性回授移位暫存器(LFSR)產生的偽隨機刺激灌滿掃描鏈。LFSR 是一串正反器,有幾個 XOR 抽頭回授到它的輸入;給它時脈,它就走過一段很長、可重現、看起來在統計上像隨機的狀態序列——一個最大長度的 n 位元 LFSR 會在重複之前,循環走過全部 2ⁿ−1 個非零值。它是一顆決定式的骰子:建造便宜,而且永遠不必儲存任何一條向量。

第二個零件是指紋讀取器。每組圖樣傳播過邏輯之後,擷取到的響應會掃描出來——但 BIST 不是把每一位元都拿去和黃金值比對(那意味著要儲存那些黃金位元,整件事的意義就沒了),而是把整條串流灌進一個多輸入簽章暫存器(MISR)。MISR 是一個多了幾個 XOR 輸入的 LFSR;它把數百萬個響應位元攪拌、壓縮成一個短短的*簽章*,通常是 16 或 32 位元。這道擠壓叫做響應壓縮。一輪跑完,你只需把那一個簽章和那一個預期值比對。只要這數百萬個響應位元裡有任何一位元出錯,XOR 回授的雪崩效應幾乎總會弄壞最終的簽章——所以一個 32 位元的簽章,能抓出一顆故障晶片,僅有微乎其微、約四十億分之一的僥倖漏網機率。

Logic BIST (STUMPS) data flow:

  +--------+   pseudo-random fill    +-----------------+
  |  LFSR  |------------------------>| scan chain 1    |
  | (PRPG) |------------------------>| scan chain 2    |--+
  +--------+        ...              |   ...           |  |
      ^                              | scan chain k    |  |
      | seed                        +-----------------+   |
      |                                  | (combinational | 
      |                                  |  logic under   |
      |                                  |  test)         |
      |                                  v                |
  +--------+   <-- compacted bits   +-----------------+   |
  |  MISR  |<-----------------------| captured resp.  |<--+
  +--------+                        +-----------------+
      |
      v
  32-bit SIGNATURE  ==  golden value ?   -> PASS / FAIL

LFSR example (4-bit, taps at bits 4 and 3, x^4 + x^3 + 1):
  next_in = q4 XOR q3
  q <= {next_in, q4, q3, q2}   // shift right, feed at top
  cycles through 15 non-zero states before repeating

MISR: same shift+XOR taps, PLUS each response bit XOR'd in:
  q[i] <= q[i+1] (^ tap) ^ response[i]
  -> millions of bits collapse into one short fingerprint
LFSR 把偽隨機刺激噴進掃描鏈;MISR 把每個擷取到的響應壓縮成單一簽章。

隨機對決定式:覆蓋率的缺口與全速的回報

偽隨機刺激很便宜,但並非沒有代價。大多數故障很快就被打下來——頭幾百組隨機圖樣就能激發那些容易的節點——但有一小撮頑固分子是抗隨機圖樣的。想像一個埋在邏輯深處的 10 輸入 AND 閘:要測它輸出的固定型 0 故障,你得讓十個輸入同時為高,每一發隨機射擊只有 1024 分之一的機會命中,而餵這些輸入的邏輯,甚至可能把這機率壓得更低。決定式 ATPG 會直接*解出*那唯一一條辦得到的向量;隨機 BIST 卻可能跑了一百萬組圖樣仍然錯過它。這正是核心的取捨:ATPG 用少量、儲存昂貴的圖樣,替你買到極高的故障覆蓋率;邏輯 BIST 則替你買到便宜、零儲存的圖樣,但若不幫它一把,覆蓋率會在較低處停滯。

工程師用兩招來補上這個缺口。測試點插入會在那些抗隨機的邏輯錐裡,加入幾個控制點與觀測點,讓骰子終於有機會擲出一組制勝的組合——這是一筆小小的面積代價,卻能把覆蓋率從比方說 92% 拉到 99%。而混合/補強圖樣則讓 ATPG 產生一小組決定式圖樣,精準瞄準 BIST 漏掉的那少數故障,有時還會編碼成 LFSR 種子(重新播種 reseeding),這樣它們仍能搭著 BIST 的機制運行。現代的做法很少是純粹的任何一邊:隨機 BIST 掃掉大宗,決定式 ATPG 清理角落。

記憶體 BIST:為什麼上百萬個一模一樣的單元需要不同的測試

現在把同樣的想法對準一塊 SRAM,隨機骰子機就垮掉了。記憶體不是一團各自獨特的邏輯錐;它是一座龐大、嚴酷規整的網格——上百萬個一模一樣的 6T 位元單元共用位元線字元線,並透過纖細的讀出放大器讀取。它的失效是物理性的、而且*講究鄰里關係*:一個只能寫 0、寫不進 1 的單元,兩個短路在一起、寫其中一個就翻動另一個的單元(耦合故障),一個會落到錯誤列上的位址解碼器,或一個會慢慢把自己的值漏光的單元。隨機圖樣會白費力氣,卻仍然錯過這些結構性的缺陷。記憶體需要的刺激恰恰與隨機相反——一場精確、*演算法式*的掃描,按刻意安排的順序走過每一個位址。

那場演算法式掃描就是march 測試。一個 march 是一串*march 元素*,每個元素都按定義好的順序(升冪 ⇑ 或降冪 ⇓)走訪每一個位址,執行一組固定的讀寫圖樣。著名的 March C- 跑六個元素,只用 10n 次操作(n 是單元數)就抓住標準的那一群故障——固定型、轉態、耦合、以及位址解碼器故障。因為工作量與 n 成線性,即使是數 Mb 的 RAM 也能在毫秒內跑完。一個專屬的記憶體 BIST(MBIST)控制器——一個由位址計數器與資料產生器構成的小型有限狀態機——完全在晶片內、以全速驅動這一切,沒有向量要儲存,也沒有測試機接腳得辛苦地一路擠進深埋的記憶體埠。

March C-  (10n operations, n = number of cells)

  element 0:  ⇕ (w0)        write 0 to every cell, any order
  element 1:  ⇑ (r0, w1)    ascending:  read 0, then write 1
  element 2:  ⇑ (r1, w0)    ascending:  read 1, then write 0
  element 3:  ⇓ (r0, w1)    descending: read 0, then write 1
  element 4:  ⇓ (r1, w0)    descending: read 1, then write 0
  element 5:  ⇕ (r0)        read 0 from every cell

  ⇑ ascending addresses   ⇓ descending   ⇕ either direction
  r0 = read expecting 0    w1 = write 1

What each catches:
  stuck-at        : any cell that won't hold both 0 and 1
  transition (TF) : a cell that can't make a 0->1 or 1->0 flip
  coupling (CF)   : writing cell A disturbs cell B  (the up/down
                    passes expose order-dependent coupling)
  address decoder : a write that lands on the wrong row/col

MBIST controller (sketch):
  FSM: for each march element
         for addr in (up | down):
           apply read/write ops; compare read data vs expected
         if mismatch -> log {addr, bit} to repair register
March C-:一場決定式、按位址排序的讀寫掃描,用 10n 次操作抓出記憶體的結構性故障。

內建自我修復:找到壞單元只是一半的工作

這裡,記憶體測試使出了一招邏輯辦不到的把戲。在現代 SoC 上,記憶體可能佔去超過一半的晶粒面積,而且它們被建造在密度的最前沿——所以它們是*最先*接住一顆迷途粒子或一個邊緣單元的地方。如果一千萬位元裡只要有一個壞位元就判全晶片死刑,良率會崩盤。於是記憶體設計者做了一件大膽的事:他們把陣列建得比實際需要的更大,預留幾條備援列與備援行。當 MBIST 找到一個失效的單元,晶片可以*繞過它*。

這套機制就是[[ic-redundancy-repair|記憶體備援與修復]],它可以有兩種跑法。在*硬修復*中,一個叫做 BISR(內建自我修復)的搭檔區塊,接過 MBIST 記錄下的失效位址,算出該換入哪些備援列或備援行,然後燒斷一組一次性的 [[ic-efuse|eFuse]],把重映射永久燒錄進去——零件離開工廠時就已經修好了。在*軟修復*中,修復簽章在每次開機時重新計算、重新載入,於是晶片能在現場修補新冒出來的弱單元。結果意義深遠:一顆晶片能診斷自己的缺陷,並重新組態自己來把它們藏起來,唯一來自外界的幫助就是電源。

  1. 測試。 MBIST 控制器以全速在陣列上跑它的 march 演算法,記錄每一個失效的位址與位元。
  2. 分析。 BISR 引擎讀取失效紀錄,求解一個小小的配置問題:這些失效能否用現有的備援列與備援行覆蓋掉?
  3. 修復。 若可以,它就規劃重映射——燒斷 eFuse 做永久修復,或載入暫存器做開機軟修復——陣列從此改由備援單元、而非壞單元來回應。
  4. 重新驗證。 MBIST 在修復後的陣列上再跑一次;唯有乾淨地通過,零件才能出貨。超出備援能力範圍的失效,則把這顆晶粒標記為真正的不良品。

整合應用:一顆醒來就檢查自己的晶片

退一步,兩個半邊就拼成同一幅畫。現代 SoC 是一片邏輯之海,交織著數十或數百個記憶體巨集。邏輯 BIST 用偽隨機 LFSR 刺激與 MISR 壓縮處理不規則的邏輯,再在骰子搆不到的地方用決定式 ATPG 補強。記憶體 BIST 用決定式 march 演算法處理每一座規整的陣列,由 BISR 修復撐腰,讓少數壞單元永遠拖不垮整顆零件。兩者共享你在開頭遇到的同一套哲學:把測試來源與響應裁判搬上晶粒,交給測試機一個一位元的判決,並以晶片自己的速度運行。

回報恰恰就是我們一開始想戒掉的那些昂貴習慣。圖樣儲存縮向歸零——一個 LFSR 種子加一套 march 演算法,取代了數十億位元的向量。透過 ATE 的慢速移位,讓位給晶片內的全速時脈,於是每顆零件的測試機時間下降,全速延遲故障也被抓住。又因為自我測試邏輯是永久性的,晶片終其一生都保有這份能力:你筆電裡的開機自我測試,硬碟內的定期自檢,汽車裡每次啟動的安全關鍵重測。代價是誠實的——BIST 與修復邏輯吃掉百分之幾的面積,且必須被仔細驗證、X 受控、時序收斂。但對今日這些又密、又深、又重視安全的晶片而言,讓矽自己批改作業,早已不是奢侈品。它是預設值。