Chapter 05

폴트 모델과 ATPG

공정이 남긴 결함은 모양도 크기도 제각각이다. 입자 하나가 두 배선을 잇기도 하고, 비아 하나가 반쯤 끊기기도 하며, 트랜지스터 하나의 산화막이 새기도 한다. 이 무한한 경우를 하나하나 따져 테스트 패턴을 만들 수는 없다. 그래서 테스트 공학은 결함을 논리 수준의 단순한 가짜 고장, 곧 폴트로 바꿔 놓고 생각한다. 폴트 목록을 만들고, 그 폴트를 출력까지 끌어내는 입력을 자동으로 찾고(ATPG), 찾은 패턴이 폴트를 몇 %나 잡는지 센다(폴트 시뮬레이션). 이 장은 이 세 단계를 직접 손으로 해 본다. 그리고 99%가 넘는 고착 폴트 커버리지가 왜 TB-7의 50 DPPM 목표에는 여전히 모자란지도 숫자로 확인한다.

결함에서 폴트 모델로

세 낱말을 먼저 구별한다. 결함(Defect)은 칩에 실제로 생긴 물리적 이상이다. 입자에 의한 배선 단락, 빈 비아, 산화막 핀홀이 그렇다. 폴트(Fault)는 그 결함을 회로 모델 위에 옮겨 놓은 추상이다. "이 배선이 항상 0이다"처럼 논리나 지연으로 적는다. 고장(Failure)은 칩이 사양대로 동작하지 않는 관찰 결과다. 결함이 있어도 동작을 바꾸지 않으면 고장이 아니고, 폴트 모델이 그 결함을 정확히 흉내 내지 못할 수도 있다. 1장의 구분을 다시 쓰자면, 테스트는 고장을 보고 결함을 추정하며, 패턴 생성은 폴트를 겨냥한다.

왜 추상화가 필요한가. 첫째, 수가 다룰 만해진다. 회로의 결함 가능 위치와 크기와 저항값의 조합은 사실상 무한하지만, 배선 N개에 고착 폴트는 정확히 2N개다. 둘째, 자동화가 가능해진다. 폴트가 불 대수로 표현되면 그 폴트를 드러내는 입력을 알고리즘이 찾을 수 있다. 셋째, 측정이 가능해진다. 몇 개의 폴트를 잡았는지 세어 커버리지라는 숫자 하나로 테스트의 품질을 말할 수 있다. 대가는 정확도다. 모델은 모델일 뿐이어서, 모델이 그리지 못하는 결함은 커버리지 숫자에 나타나지 않는 채로 빠져나간다.

물리적 결함 폴트 모델 입자 단락두 배선이 이어짐 비아 단선완전히 끊어짐 저항성 비아수 kΩ, 느려짐 셀 내부 결함게이트 산화막 누설 브리지 폴트wired-AND/OR 고착 폴트SA0 / SA1 천이·지연 폴트STR / STF 셀 인식 폴트셀 표 기반 IDDQ·전류 이상 점선: 부분적으로만 흉내 낸다
결함과 폴트 모델의 대응. 한 결함이 여러 모델로 옮겨지고, 한 모델이 여러 결함을 대표한다. 입자 단락은 저항이 작으면 브리지(또는 고착)로, 크면 전류 이상으로만 보인다. 완전한 단선은 고착에 가깝지만 부분 단선은 지연으로 나타난다. 셀 안쪽의 결함은 셀 경계의 고착 폴트로는 일부만 잡힌다.

좋은 폴트 모델의 조건은 둘이다. 실제 결함의 행동을 충분히 닮아야 하고(accuracy), 동시에 계산이 다룰 만해야 한다(tractability). 이 둘은 서로 당긴다. 트랜지스터 수준 회로 시뮬레이션은 정확하지만 1.5억 게이트의 TB-7에는 쓸 수 없고, 고착 폴트는 빠르지만 저항성 결함을 모른다. 그래서 산업 현장은 하나의 모델에 기대지 않고, 고착 폴트를 기본으로 깔고 그 위에 천이 폴트, 셀 인식 폴트, 브리지 폴트를 차례로 덧입힌다. 1장에서 TB-7이 요구하는 결함 커버리지가 약 99.97%라고 계산했다. 이 장의 마지막에서 그 숫자에 얼마나 다가갈 수 있는지 본다.

폴트 모델대표하는 결함폴트 수(배선 N)필요한 패턴대략의 계산 부담
고착(stuck-at)단선, 전원·접지로의 단락2N1개 벡터기준(1×)
천이(transition)저항성 비아, 약한 트랜지스터2N2개 벡터(실속도)약 2~3×
경로 지연(path delay)작은 지연이 쌓인 경로경로 수(지수적)2개 벡터선택한 경로만
브리지(bridging)이웃 배선 단락이웃 쌍 수1개 벡터배치 정보 필요
셀 인식(cell-aware)셀 내부 단선·단락셀 종류 × 결함 수1~2개 벡터셀 특성화 필요

고착 폴트와 단일 고착 가정

가장 오래되고 가장 널리 쓰이는 모델은 고착 폴트(Stuck-at fault)다. 회로의 어느 한 배선이 입력과 상관없이 항상 0이거나(stuck-at-0, SA0) 항상 1이라고(stuck-at-1, SA1) 가정한다. 배선 하나마다 두 개씩이니 배선이 N개면 폴트는 2N개다. 여기서 배선은 게이트 출력만이 아니다. 출력 하나가 여러 게이트로 갈라지는 팬아웃(Fanout)에서는 갈라지기 전의 줄기(stem)와 갈라진 뒤의 각 가지(branch)를 다른 배선으로 센다. 줄기의 고착은 모든 가지에 영향을 주지만, 가지 하나의 고착은 그 가지가 들어가는 게이트에만 영향을 준다.

현실의 결함은 여럿일 수 있는데 왜 하나만 가정하는가. 단일 고착 폴트 가정(Single stuck-at assumption)의 근거는 세 가지다. 다중 폴트를 다 세면 조합이 \(3^N - 1\)개로 폭발한다. 단일 폴트 테스트 집합은 실험적으로 대부분의 다중 폴트도 잡는다(다중 폴트가 서로를 가리는 경우는 드물다). 그리고 결함 밀도가 낮은 양산 공정에서는 다이 하나에 결함이 하나뿐인 경우가 대부분이다. TB-7처럼 D₀ ≈ 0.2개/cm², 면적 0.81 cm²라면 다이당 평균 결함은 약 0.16개이고, 결함이 있는 다이 가운데 두 개 이상인 다이는 약 8%에 그친다.

줄기 고착: 모든 가지가 영향 G1 G2 × SA0 폴트 1개가 G1, G2 모두를 바꾼다 가지 고착: 그 가지만 영향 G1 G2 × SA1 G1은 정상 값을 받는다 줄기 1개 + 가지 2개 = 배선 3개 → 고착 폴트 6개
줄기와 가지. 팬아웃이 있는 곳에서는 줄기와 가지를 따로 센다. 가지 하나의 폴트는 같은 줄기의 다른 가지와 다른 값을 만들 수 있어서, 줄기 폴트로 대신할 수 없다. 팬아웃이 없는 배선에서는 구동 게이트의 출력과 받는 게이트의 입력이 같은 배선이다.

아래 회로는 테스트 연구의 표준 예제인 ISCAS-85 벤치마크의 c17이다. 입력 5개(1, 2, 3, 6, 7), 2입력 NAND 6개, 출력 2개(22, 23)로 이루어져 있다. 줄기 3, 11, 16이 각각 두 가지로 갈라지므로 배선은 입력 5 + 게이트 출력 6 + 가지 6 = 17개, 고착 폴트는 34개다. 직접 입력을 바꾸고 아무 배선에나 폴트를 심어 보면, 폴트가 출력에서 보이려면 무엇이 맞아떨어져야 하는지 금방 감이 온다.

SIMULATOR

c17 폴트 주입기

입력 사각형: 값 바꾸기 · 배선: 폴트 심기
배선을 누르면
입력 (1,2,3,6,7)—
심은 폴트—
출력 22 / 23—
판정—
해설배선을 눌러 폴트를 심어 보자.
해볼 것: ① 배선 16에 SA0을 심고, 정상일 때 16이 1이 되도록(입력 2 = 0 또는 11 = 0) 입력을 바꿔 보자. 이것이 활성화다. ② 활성화해도 출력이 같다면 NAND의 다른 입력이 0이어서 막힌 것이다. 22로 가려면 10 = 1, 23으로 가려면 19 = 1이 필요하다(전파). ③ 가지 3a와 줄기 3에 같은 SA1을 심어 보고, 어떤 입력에서 결과가 다른지 찾아보자. ④ "테스트 벡터 찾기"는 32개 입력을 모두 시험해 폴트를 잡는 벡터 수를 센다. 폴트마다 4개에서 19개까지 다르다. (모델: 단일 고착 폴트, 조합 회로, 지연 없음. 빨간 선은 D = 정상 1/폴트 0, 청록 선은 D̄ = 정상 0/폴트 1.)

폴트 등가·지배와 축약

34개 폴트를 모두 따로 다룰 필요는 없다. NAND 게이트의 한 입력이 0에 고착되면 출력은 항상 1이 된다. 출력이 1에 고착된 것과 구별할 방법이 없다. 이처럼 어떤 입력에서도 같은 출력을 내는 두 폴트를 등가(Fault equivalence)라 하고, 한 등가 묶음에서는 대표 하나만 남긴다. 이것이 폴트 축약(Fault collapsing)이다. c17에는 NAND가 6개이고 게이트마다 "두 입력의 SA0 = 출력의 SA1"이라는 3개짜리 묶음이 있으므로 34 − 6 × 2 = 22개가 남는다.

한 단계 더 나아갈 수 있다. 폴트 f를 잡는 모든 벡터가 폴트 g도 잡는다면, g는 f를 지배(Fault dominance)한다고 한다. 그러면 f만 목록에 두어도 g는 덤으로 잡힌다. AND 게이트에서 입력 a의 SA1을 잡는 벡터는 a = 0, 나머지 = 1뿐이고, 그 벡터는 출력 SA1도 잡는다. 반대로 출력 SA1은 아무 입력이 0이기만 하면 잡히니 더 쉽다. 쉬운 쪽(지배하는 쪽)을 버린다. 다만 지배 축약은 팬아웃이 있는 회로에서 출력 폴트가 다른 경로로 관측될 수 있어 조심해서 쓰며, 많은 상용 도구는 등가 축약만 기본으로 쓴다.

AND abz 등가 묶음 {a/0, b/0, z/0} 셋 다 출력이 항상 0 → 테스트 a=1, b=1 하나 a/1a=0, b=1 b/1a=1, b=0 z/1아무 입력 0 폴트 6개 → 등가 축약 4개 → 지배 축약 3개 점선: a/1이나 b/1의 테스트가 z/1도 잡는다
2입력 AND의 축약. 입력 SA0과 출력 SA0은 등가다. 출력 SA1은 각 입력 SA1을 지배하므로 지울 수 있다. n입력 AND/NAND/OR/NOR는 2(n+1)개에서 등가로 n+2개, 지배까지 쓰면 n+1개가 된다. XOR에는 등가 관계가 없다.

게이트별 규칙을 정리하면 다음과 같다. 핵심은 게이트의 지배값(Controlling value)이다. 입력 하나만으로 출력을 결정하는 값으로, AND·NAND는 0, OR·NOR는 1이다. 입력이 지배값에 고착된 폴트는 출력 고착과 등가가 된다.

게이트지배값등가 묶음지배 관계(지울 폴트)n입력 축약 후
AND0입력 SA0 전부 ≡ 출력 SA0출력 SA1n+2 → n+1
NAND0입력 SA0 전부 ≡ 출력 SA1출력 SA0n+2 → n+1
OR1입력 SA1 전부 ≡ 출력 SA1출력 SA0n+2 → n+1
NOR1입력 SA1 전부 ≡ 출력 SA0출력 SA1n+2 → n+1
NOT / BUF—입력 SA0 ≡ 출력 SA1(NOT)—2
XOR / XNOR없음없음없음2(n+1)

회로 전체로 보면 등가 축약은 폴트 수를 보통 40~60% 줄인다. 또 체크포인트 정리(Checkpoint theorem)에 따르면 조합 회로에서는 주입력과 팬아웃 가지의 폴트만 잡으면 나머지 모든 단일 고착 폴트가 잡힌다. 1.5억 게이트의 TB-7이라면 축약 전 폴트가 약 6억 개, 축약 후 약 3억 개 수준이다. ATPG 도구가 다루는 목록이 이 정도다.

SIMULATOR

폴트 축약 계산기

게이트
전체 폴트 2(n+1)—
등가 묶음—
최종 목록—
축약률—
이 게이트로만 이루어진 회로라면—
해볼 것: ① AND에서 n을 2에서 8로 올려 보자. 전체 폴트는 2n+2로 늘지만 축약 후는 n+1이라 축약률이 50%에 가까워진다. ② XOR로 바꾸면 묶음이 하나도 생기지 않는다. 패리티 트리나 암호 회로가 ATPG에 부담인 이유 중 하나다. ③ 색이 같은 점들이 하나의 묶음이고, 오른쪽 벡터가 그 묶음의 테스트다. ④ 회로 게이트 수를 TB-7의 1.5억(10^8.18)으로 두면 폴트 목록 규모가 나온다. (모델: 팬아웃 없는 독립 게이트. 실제 회로는 팬아웃 가지 폴트가 더해지고, 게이트 사이 경계에서도 등가가 생긴다.)

경로 민감화와 D 표기

폴트 하나를 잡는 벡터를 손으로 찾는 일을 경로 민감화(Path sensitization)라 한다. 세 단계다.

  1. 활성화(Activation, excitation): 폴트 자리에 고착값과 반대인 값을 만든다. SA0을 잡으려면 그 배선이 정상일 때 1이어야 한다. 그래야 정상 회로와 고장 회로가 그 자리에서 갈린다.
  2. 전파(Propagation): 갈린 값을 주출력까지 끌고 간다. 지나가는 게이트마다 다른 입력을 비지배값으로 둔다. AND·NAND라면 1, OR·NOR라면 0이다. 그래야 그 게이트가 차이를 그대로 통과시킨다.
  3. 정당화(Justification): 앞의 두 단계가 요구한 내부 값들을 주입력 값으로 거슬러 올라가 맞춘다. 요구들이 서로 모순이면 다른 경로나 다른 선택으로 되돌아간다.

정상/고장 두 값을 한꺼번에 다루려고 로스(J. P. Roth, 1966)는 다섯 값 대수를 만들었다. 0, 1, X(미정) 외에 D는 "정상 1, 고장 0", D̄는 "정상 0, 고장 1"이다. 게이트 연산은 두 회로를 따로 계산해 다시 묶으면 된다. 예를 들어 NAND(1, D) = D̄, AND(D, D̄) = 0, NAND(0, D) = 1이다. 마지막 예는 지배값 0이 D를 막아 버린 경우다. 출력에 D나 D̄가 나타나면 그 벡터가 폴트를 잡는다.

$$D \equiv 1/0,\qquad \bar D \equiv 0/1,\qquad \mathrm{NAND}(1,D)=\overline{1\cdot D}=\bar D,\qquad \mathrm{NAND}(0,D)=1$$
"정상값/고장값" 쌍을 하나의 기호로 쓴다. 지배값을 만나면 D가 사라지고, 비지배값과 만나면 (반전 게이트라면 뒤집혀) 통과한다.
10 11 16 19 22 23 1 = 0 3 = 0 6 = 0 2 = 1 7 = 0 11 = 1 10 = 1 19 = 1 D̄ DD × 16 SA1 활성화: 16 정상값 0 ← 2 = 1, 11 = 1 · 전파: 10 = 1(22 쪽), 19 = 1(23 쪽) · 정당화: 3 = 0 하나로 10 = 11 = 1
배선 16 SA1을 잡는 벡터 찾기. 16의 정상값이 0이어야 하므로 2 = 1, 11 = 1이다(활성화). 16의 차이 D̄가 22로 가려면 10 = 1, 23으로 가려면 19 = 1이 필요하다(전파). 입력 3 = 0 하나가 10과 11을 동시에 1로 만들고, 7 = 0이 19 = 1을 만든다(정당화). 벡터 (1,2,3,6,7) = (0,1,0,0,0)에서 두 출력 모두 D가 나타난다.

정당화에서 가장 까다로운 것은 재수렴 팬아웃(Reconvergent fanout)이다. 한 줄기에서 갈라진 신호가 다시 한 게이트에서 만나면, 한쪽 가지에 요구한 값이 다른 쪽 가지의 값을 함께 정해 버린다. c17의 줄기 11과 16이 그렇다. 위의 예에서 3 = 0 하나가 10과 11을 동시에 결정한 것도 재수렴 때문이다. 결정 하나가 여러 곳의 값을 묶어 버리므로, 앞의 선택이 뒤에서 모순을 낳으면 되돌아가야(backtrack) 한다. 이것이 ATPG가 NP-완전 문제인 이유다.

D 알고리즘과 PODEM

경로 민감화를 체계적으로 자동화한 첫 알고리즘이 로스의 D 알고리즘(D-algorithm, 1966)이다. 폴트 자리에 D를 놓고, D가 닿아 있지만 아직 출력이 정해지지 않은 게이트들의 집합(D 프런티어(D-frontier))에서 하나를 골라 D를 한 칸씩 앞으로 민다. 동시에 값이 요구되었지만 아직 입력으로 설명되지 않은 게이트들(J 프런티어(J-frontier))을 거꾸로 정당화한다. 문제는 결정을 내부 배선에 내린다는 점이다. 내부 배선의 값 선택지는 회로 크기만큼 많고, 한 번 잘못 고르면 한참 뒤에야 모순이 드러난다.

고엘(P. Goel, 1981)의 PODEM(Path-Oriented DEcision Making)은 발상을 바꿨다. 결정은 주입력에만 내린다. 목표(예: "16을 0으로")가 생기면 그 목표를 만족시킬 만한 주입력 하나를 거슬러 찾아(backtrace) 값을 정하고, 순방향 시뮬레이션(implication)으로 그 결과를 퍼뜨린다. 폴트가 활성화될 수 없거나 D 프런티어가 비어 버리면 마지막 주입력 결정을 뒤집는다. 주입력이 k개면 탐색 나무의 크기는 많아야 \(2^k\)이고, 모순이 즉시 드러나므로 되돌림이 훨씬 적다. 이후의 FAN(1983), SOCRATES, 그리고 현대의 SAT 기반 ATPG는 모두 이 틀 위에서 탐색 공간을 더 줄이는 기법을 더했다.

PODEM: 목표 → 거슬러 찾기 → 주입력 결정 → 시뮬레이션 목표 16 = 0 2 = 0 16 = 1 → 활성화 실패 2 = 1 되돌림: 2를 뒤집는다 3 = 0 11 = 1, 10 = 1 22 = D → 성공 결정 변수: 주입력 5개뿐 나머지 1, 6, 7은 X로 남는다(돈 케어)
PODEM의 탐색. 결정은 주입력에만 내리고, 매 결정 뒤에 3값(0·1·X) 시뮬레이션으로 결과를 확인한다. 활성화 실패나 D 프런티어 소멸이 보이면 가장 최근 결정을 뒤집는다. 끝까지 정하지 않은 입력은 X로 남아 6장의 스캔 압축과 저전력 채우기에 쓰인다.

ATPG가 돌려주는 벡터에는 정해지지 않은 입력(X)이 많다. 실제 회로에서 한 패턴이 요구하는 값, 곧 케어 비트(Care bit)는 스캔 셀의 1~5%에 불과하다. 도구는 한 패턴에 여러 폴트를 동시에 겨냥해 X를 채우는 동적 압축(Dynamic compaction)으로 패턴 수를 줄이고, 다 만든 뒤 폴트 시뮬레이션으로 중복 패턴을 지우는 정적 압축(Static compaction)을 더한다. 패턴 수는 곧 테스트 시간이므로, 같은 커버리지를 더 적은 벡터로 얻는 것이 ATPG 품질의 절반이다. 아래 퍼즐에서 그 감을 잡아 보자.

GAME

ATPG 퍼즐: 최소 벡터로 c17 전부 잡기

벡터 32개 (입력 1·2·3·6·7 순서). 눌러서 테스트 집합에 넣고 빼기. 청록 테두리: 고른 폴트를 잡는 벡터.
폴트 목록 (초록: 잡힘). 폴트를 누르면 그 폴트를 잡는 벡터가 표시된다.
폴트 목록
고른 벡터0
폴트 커버리지0%
최소 가능 벡터 수?
점수—
상태벡터를 골라 34개 폴트를 모두 초록으로 만들자. 목표: 4개.
해볼 것: ① 아무 벡터나 하나 넣으면 34개 중 몇 개가 잡히는지 보자. 벡터 하나가 대략 30~50%를 잡는다. ② 남은 회색 폴트를 하나 눌러 청록 테두리 벡터 중에서 고르는 식으로 100%를 만들어 보자. ③ "탐욕 ATPG"는 남은 폴트를 가장 많이 잡는 벡터를 하나씩 더한다. 실제 도구의 동적 압축과 비슷한 전략이지만 항상 최적은 아니다. ④ "최적해 보기"는 32개 중 k개를 고르는 모든 조합을 시험해 4개가 최소임을 확인한다. 4개짜리 해는 10가지다. 축약 22개 목록으로 바꿔도 필요한 벡터 수는 같다. 등가 폴트는 같은 벡터로 잡히기 때문이다. (모델: c17, 단일 고착 폴트 34개. 커버리지 = 잡힌 폴트 / 목록의 폴트.)

테스트 불가 폴트와 커버리지의 정의

ATPG가 어떤 폴트의 벡터를 끝내 찾지 못하는 경우는 두 가지다. 하나는 시간 제한(abort limit)에 걸려 포기한 것(aborted)이고, 다른 하나는 그런 벡터가 아예 존재하지 않음을 증명한 것이다. 뒤의 것을 테스트 불가 폴트(Untestable fault)라 한다. 대표가 중복(Redundant) 폴트다. 회로에 논리적으로 쓸모없는 부분이 있으면 그 부분의 폴트는 출력을 결코 바꾸지 못한다. 예를 들어 \(f = ab + \bar a c + bc\)에서 항 \(bc\)는 합의항이라 없어도 함수가 같다. 그 AND 게이트의 출력 SA0은 어떤 입력으로도 관측되지 않는다. 그 밖에 상수로 묶인 입력(tied), 테스트 모드에서 막힌 경로(blocked), 아날로그 경계처럼 구조적으로 관측이 없는 곳(unused)도 테스트 불가로 분류한다.

중복 폴트는 그 자체로는 해가 없지만 두 가지 문제를 낳는다. 커버리지 숫자를 깎아 먹고, 같은 자리에 다른 폴트가 겹치면 그 폴트를 가릴 수 있다. 그래서 설계 단계에서 중복을 제거하는 것이 원칙이지만, 타이밍 때문에 일부러 넣은 중복 논리(해저드 제거용)나 IP 경계의 상수 입력은 남는다. 그래서 커버리지를 말할 때는 분모를 무엇으로 했는지가 중요하다.

$$\mathrm{FC}=\frac{\text{검출 폴트}}{\text{전체 폴트}},\qquad \mathrm{TC}=\frac{\text{검출 폴트}}{\text{전체 폴트}-\text{테스트 불가 폴트}},\qquad \text{ATPG 효율}=\frac{\text{검출}+\text{테스트 불가}}{\text{전체 폴트}}$$
FC: 폴트 커버리지(Fault coverage), TC: 테스트 커버리지(Test coverage). 도구 보고서는 흔히 TC를 앞세운다. ATPG 효율은 도구가 결론을 낸 비율로, 100%에서 모자라는 만큼이 포기한 폴트다.
TB-7 고착 폴트 목록 (축약 후 약 3억 개) 검출 97.7% 테스트 불가1.5% 포기 0.5% 미검출 0.3% FC 분모: 전체 TC 분모: 전체 − 테스트 불가 FC ≈ 97.7%, TC ≈ 97.7 / 98.5 ≈ 99.2%
같은 결과, 다른 숫자. 검출 비율이 같아도 테스트 불가 폴트를 분모에서 빼면 커버리지가 1.5%p쯤 올라간다. 보고서를 비교할 때는 어느 정의인지, 테스트 불가 분류가 증명된 것인지 확인한다. 이 장의 TB-7 숫자(99.2%)는 TC다.

커버리지가 품질로 이어지는 다리가 윌리엄스–브라운 식(Williams–Brown)이다. 수율 Y인 공정에서 결함 커버리지 T로 테스트하면 출하품의 불량률(결함 수준)은 다음과 같다.

$$\mathrm{DL}=1-Y^{\,1-T}$$
Y = 0.85, T = 0.992이면 DL = 1 − 0.850.008 ≈ 1.3 × 10⁻³ = 약 1,300 DPPM. 목표 50 DPPM의 26배다. 이 식의 T는 결함 커버리지인데, 고착 폴트 커버리지가 결함 커버리지를 과대평가한다는 점까지 생각하면 실제는 더 나쁘다.
99.2%는 충분하지 않다

고착 폴트 99.2%는 훌륭한 숫자처럼 보이지만 TB-7의 목표(결함 커버리지 약 99.97%, 1장)에는 한참 모자란다. 게다가 잡지 못한 0.8%가 아니라, 고착 모델이 아예 그리지 못하는 결함(저항성 비아, 셀 내부 결함, 작은 지연)이 문제의 대부분이다. 뒤의 절들이 이 빈틈을 다른 모델로 메운다.

폴트 시뮬레이션과 랜덤 패턴 저항 폴트

폴트 시뮬레이션(Fault simulation)은 주어진 패턴 집합이 폴트 목록의 무엇을 잡는지 계산한다. ATPG가 만든 패턴의 덤 검출을 세고(폴트 드로핑: 한 번 잡힌 폴트는 목록에서 뺀다), 로직 BIST(7장)의 의사 랜덤 패턴을 평가하고, 고장 진단에서 후보를 좁히는 데 모두 쓰인다. 단순히 폴트마다 회로를 한 번씩 시뮬레이션하는 직렬(serial) 방식은 폴트 3억 개 × 패턴 4만 개라 쓸 수 없다. 그래서 세 가지 묘수가 쓰인다.

방식아이디어강점약점
병렬(parallel)컴퓨터 워드의 비트마다 다른 폴트(또는 다른 패턴)를 싣고 비트 연산 한 번에 64개를 계산구현이 단순, 조합 회로에 매우 빠름(PPSFP)지연·다값 모델에 불편
연역적(deductive)정상 회로만 시뮬레이션하고, 각 배선에 "이 배선 값을 뒤집는 폴트 목록"을 집합 연산으로 전달한 패턴에 모든 폴트를 한 번에목록 크기가 크고 순차 회로에 약함
동시(concurrent)정상 회로와 다른 값을 내는 게이트만 폴트별로 따로 기록하는 사건 구동 방식순차·지연 모델까지 일반적메모리 사용량이 큼

무작위 패턴을 넣으면 커버리지는 어떻게 오를까. 폴트마다 무작위 벡터 하나가 그 폴트를 잡을 확률, 곧 검출 확률(Detection probability) p가 있다. N개 패턴 뒤에 그 폴트가 아직 남아 있을 확률은 \((1-p)^N\)이다. 검출 확률이 큰 폴트는 몇십 개 패턴 만에 다 잡히지만, 12입력 AND의 출력 SA0처럼 모든 입력이 1이어야 하는 폴트는 \(p = 2^{-12} = 1/4096\)이다. 95% 확률로 잡으려면 약 \(3/p \approx 12{,}000\)개가 필요하다. 이런 폴트를 랜덤 패턴 저항 폴트(Random-pattern-resistant fault)라 한다.

$$\mathrm{FC}(N)=\frac{1}{|F|}\sum_{f\in F}\Bigl[1-(1-p_f)^N\Bigr],\qquad N_{95\%}\approx\frac{\ln 20}{p_f}\approx\frac{3}{p_f}$$
pf: 폴트 f의 검출 확률. 곡선은 처음엔 가파르게 오르다가 p가 작은 폴트들이 남으면서 로그 축 위에서도 완만해진다(포화).
12입력 AND: 출력 SA0의 p = 1/4096 C0–2C3–5C6–8C9–11 Z p(1) = 1/8 Z/0: p = (1/8)⁴ 테스트 포인트 삽입 뒤 관측점 OR 제어점 T (테스트 입력) Z 관측점: 중간 노드를 직접 관측, p: 1/4096 → 1/8 제어점: T = 1이면 그 갈래를 1로 강제
랜덤 패턴 저항과 테스트 포인트. 입력이 많은 AND/OR 트리, 비교기, 디코더가 대표적인 저항 구조다. 중간 노드를 스캔 셀로 직접 관측하는 관측점과, 테스트 모드에서 값을 강제하는 제어점을 넣으면 검출 확률이 수십~수백 배 커진다. 대가는 면적(셀 하나당 플립플롭 하나)과 타이밍이다.

아래 시뮬레이터는 실제로 폴트 시뮬레이션을 돌린다. 회로는 세 덩어리다. 4비트 리플 덧셈기(쉬운 폴트), 8비트 일치 비교기(A = B일 때만 1이 되는 출력, p ≈ 1/256), 12입력 AND 트리(p ≈ 1/4096)다. 패턴 32개를 한 워드에 실어 비트 연산으로 계산하는 병렬 패턴 단일 폴트 전파(PPSFP) 방식이고, 잡힌 폴트는 즉시 목록에서 뺀다.

SIMULATOR

랜덤 패턴 커버리지 곡선

최대 패턴 수
폴트 수—
적용 패턴—
커버리지—
99%에 든 패턴—
남은 폴트 (랜덤 패턴 저항)—
해볼 것: ① 10⁴로 실행해 보자. 덧셈기 폴트는 수십 패턴 만에 다 잡히고 곡선은 약 65%에서 한동안 평평해진다. 비교기의 폴트는 A = B인 패턴(약 1/256)이 처음 나올 때 한꺼번에 떨어져 수백 패턴 근처에 큰 계단을 만들고, AND 트리의 폴트는 수천 패턴 뒤에야 떨어진다. 이 시드에서는 1만 개로도 '모두 1' 패턴이 한 번도 나오지 않는다. ② 남은 폴트 목록을 보자. C·G·Z로 시작하는 AND 트리 폴트가 마지막까지 남는다. ③ 관측점과 제어점을 켜고 다시 실행하면 같은 커버리지에 드는 패턴 수가 한두 자릿수 줄어든다. ④ 시드를 바꾸면 계단 위치가 흔들린다. 저항 폴트의 검출은 운에 크게 좌우된다. (모델: 28 + 4입력 조합 회로, 줄기·가지 단일 고착 폴트, 패턴 32개/워드 PPSFP, 폴트 드로핑. 관측점은 추가 출력, 제어점은 확률 1/2의 테스트 입력과 OR.)

실무에서 무작위 패턴은 로직 BIST의 주력이고, 결정적 ATPG에서도 처음 몇백 패턴은 무작위로 채워 쉬운 폴트를 싸게 걷어 낸다. 랜덤 패턴 저항 폴트가 많은 블록은 테스트 포인트를 넣거나, 확률을 기울인 가중 랜덤 패턴(Weighted random)을 쓰거나, 결정적 패턴으로 마무리(top-off)한다. 이 선택은 7장의 로직 BIST에서 다시 만난다.

천이 폴트와 경로 지연 폴트

공정이 미세해질수록 "완전히 끊어진" 결함보다 "조금 느린" 결함이 많아진다. 저항이 수 kΩ인 비아, 문턱 전압이 높은 트랜지스터, 좁아진 배선은 값을 결국 맞게 만들지만 늦게 만든다. 저속 고착 테스트는 이런 칩을 합격시킨다. 3.2 GHz에서 동작해야 할 CPU 경로가 400 ps 늦어도, 테스터가 10 MHz로 천천히 재면 아무 문제가 없어 보인다.

천이 폴트(Transition fault)는 각 배선에 "0→1이 너무 느림(slow-to-rise, STR)"과 "1→0이 너무 느림(slow-to-fall, STF)" 두 폴트를 둔다. 지연이 어느 경로로 나가든 클록 주기 하나보다 커서 다음 엣지에 잡힌다고 가정한다. 그래서 고착 폴트처럼 배선 N개에 2N개이고, ATPG도 고착 폴트 알고리즘을 거의 그대로 쓴다. 다른 점은 두 개의 벡터가 필요하다는 것이다. 첫 벡터 V1로 배선을 초기값(STR이면 0)에 두고, 두 번째 벡터 V2로 천이를 일으키며(론치(launch)), 동시에 V2가 그 배선의 SA0 테스트가 되도록 전파 경로를 연다. 그리고 실제 동작 속도의 주기 뒤에 결과를 잡는다(캡처(capture)).

V1 → V2, 주기 T 뒤 캡처 클록 V1 적용론치캡처 배선 x 정상 경로 끝 느린 경로 끝 T = 357 ps (2.8 GHz) 1 캡처 → 합격 0 캡처 → 검출
천이 폴트 테스트. V1이 x를 0에 두고, 론치 엣지에서 V2가 x를 1로 올린다. 정상 회로라면 경로 끝이 캡처 엣지 전에 1이 된다. 느린 회로는 캡처 순간에도 아직 0이라 스캔 셀에 틀린 값이 잡힌다. 두 엣지 사이 간격이 실제 동작 주기여야 하므로, 칩 안의 PLL과 클록 제어기가 이 두 펄스를 만든다(6장의 LOC·LOS).

천이 폴트의 약점은 어느 경로로 시험하는지를 정하지 않는다는 점이다. ATPG는 보통 가장 찾기 쉬운, 그래서 대개 가장 짧은 경로로 전파한다. 결함이 더한 지연이 그 경로의 여유(slack)보다 작으면 놓친다. 작은 지연 결함(small delay defect)을 잡으려면 폴트 자리를 지나는 가장 긴 경로를 고르는 타이밍 인식 ATPG(Timing-aware ATPG)를 쓴다. 정적 타이밍 분석의 경로 지연을 받아 여유가 작은 경로를 우선한다. 패턴 수가 1.5~3배 늘어난다.

경로 지연 폴트(Path delay fault)는 한 걸음 더 나아가 특정 경로 전체의 누적 지연이 주기를 넘는지를 본다. 작은 지연이 여러 게이트에 흩어져 쌓이는 경우까지 잡지만, 경로의 수가 회로 크기에 지수적으로 늘어 모든 경로를 다룰 수는 없다. 정적 타이밍 분석이 고른 임계 경로 수천~수만 개만 대상으로 한다. 경로를 따라 천이가 확실히 전파되게 하는 조건에 따라 강건한(robust) 테스트와 비강건한(non-robust) 테스트로 나뉜다. 강건한 테스트는 다른 경로의 지연과 상관없이 결과가 보장되지만 존재하지 않는 경로가 많다.

SIMULATOR

천이 폴트의 2-패턴 테스트

전파 경로
테스트 방식
주기 T—
도착 시각—
여유 (T − 도착 − 셋업)—
판정—
해볼 것: ① 2.8 GHz, 긴 경로에서 지연을 0부터 올려 보자. 약 40 ps를 넘으면 캡처 순간에 경로 끝이 아직 0이라 검출된다. ② 같은 결함을 짧은 경로로 시험하면 200 ps 가까이 되어야 잡힌다. 작은 지연 결함은 긴 경로로 시험해야 한다는 뜻이다. ③ "저속 고착"으로 바꾸면 400 ps가 넘는 결함도 놓친다. 값이 결국 맞게 도착하기 때문이다. ④ 주파수를 3.2 GHz로 올리면 정상 칩도 떨어진다(과잉 불량). 실속도 테스트의 주파수는 사양에 맞춰 정해진다. (모델: 론치 플립플롭 clk→Q 40 ps, 셋업 15 ps, 정상 경로 지연 고정, 결함은 경로 지연에 더해지는 고정 지연.)

브리지 폴트, 셀 인식 폴트, N-검출

배선 사이의 단락은 고착 폴트가 가장 서툴게 흉내 내는 결함이다. 전원이나 접지로의 단락이 아니라 두 신호선 사이의 단락이라면, 두 선이 같은 값일 때는 아무 일이 없고 다른 값일 때만 다툰다(fight). 결과는 두 드라이버의 세기와 단락 저항이 정한다. 이를 논리로 옮긴 것이 브리지 폴트(Bridging fault)다.

브리지 후보는 회로도가 아니라 배치에서 나온다. 같은 층에서 가까이 긴 거리를 나란히 달리는 배선 쌍을 추출하고(layout extraction), 결함 크기 분포로 단락 가능성을 가중한다. YieldBook의 임계 면적과 같은 계산이다. 이를 겨냥한 패턴을 결함 기반 테스트(Defect-oriented test)라 부른다.

SIMULATOR

브리지 폴트를 잡는 벡터

브리지 모델
논리로 검출하는 벡터—
IDDQ로만 보이는 벡터—
선택한 벡터의 다툼 전류—
검출 조건—
해볼 것: ① wired-AND에서 빨간 칸은 A = 1, B = 0이거나 A = 0, B = 1인 행에만 생긴다. 두 선이 다를 때만 다투기 때문이다. ② 모델을 바꾸면 검출 벡터가 달라진다. 같은 단락이라도 어떤 모델을 믿느냐가 패턴을 바꾼다. ③ 저항성 모델은 저항이 작을 때 wired-AND처럼 1인 쪽이 0으로 끌려 내려간다. 저항을 1 kΩ(풀업과 풀다운 저항의 차이) 넘게 올리면 논리 오류가 모두 사라지고 청록 칸(IDDQ만)만 남는다. ④ 표의 행을 누르면 그 벡터의 전압이 회로에 표시된다. (모델: A = AND(x1,x2), B = OR(x3,x4). 풀업 2 kΩ, 풀다운 1 kΩ의 선형 드라이버, 수신 문턱 0.5 VDD. 다툼 전류는 VDD = 0.75 V 기준.)

셀 인식 폴트

고착·천이 폴트는 표준 셀의 핀에만 있다. 그러나 5 nm급 공정의 결함 상당수는 셀 안쪽, 트랜지스터와 셀 내부 배선에서 생긴다. 셀 내부의 단선은 특정 입력 조합에서만, 혹은 특정 천이에서만 출력을 틀리게 한다. 예를 들어 NAND2의 병렬 PMOS 두 개 중 하나가 끊기면(트랜지스터 고착 개방(stuck-open)), 그 PMOS만 출력을 1로 끌어올려야 하는 입력 조합에서 출력이 떠 버려 이전 값을 기억한다. 핀 고착 폴트 테스트로는 우연에 맡겨진다.

셀 인식 테스트(Cell-aware test)는 라이브러리의 셀마다 배치에서 가능한 내부 단선·단락을 뽑고, 아날로그 회로 시뮬레이션으로 각 결함이 어떤 입력(또는 입력 쌍)에서 출력을 바꾸는지 표로 만든다. ATPG는 그 표를 폴트 목록으로 받아 "이 NAND2 인스턴스에 입력 01 다음 11을 넣어라"는 식의 요구를 만족시킨다. 셀 라이브러리 특성화는 한 번만 하면 되고, 보고된 산업 사례에서는 고착·천이 테스트 위에 더해 수백 DPPM 수준의 유출을 줄였다고 한다. 패턴 수는 대개 10~30% 늘어난다.

NAND2 내부: PMOS P1 개방 VDD P1 P2 Y N1 N2 GND AB P1은 A의 PMOS: A = 0일 때만 Y를 1로 끌어올린다 A B정상 YP1 개방검출 0 011 (P2)— 0 11이전 값조건부 1 011 (P2)— 1 100— 필요한 2-패턴: (A,B) = 11 → 01 11이 Y를 0으로 두고, 01에서 Y가 떠서 0으로 남는다
셀 인식 폴트의 예. P1이 끊긴 NAND2는 A = 0, B = 1일 때 출력을 1로 올릴 길이 없다. 출력이 떠서 직전 값을 유지하므로, 바로 앞 벡터가 Y = 0을 만든 경우에만 틀린 값이 보인다. 핀 고착 폴트 목록에는 이 조건이 없다. 셀 인식 폴트 표가 이 "11 다음 01"을 ATPG에 요구로 넘긴다.

N-검출

모델이 그리지 못하는 결함을 통계적으로 더 잡는 값싼 방법이 N-검출 테스트(N-detect)다. 폴트 하나를 한 번이 아니라 서로 다른 N개의 벡터로 잡도록 패턴을 만든다. 같은 자리를 다른 이웃 값, 다른 경로로 여러 번 건드리므로 브리지나 셀 내부 결함 같은 미지의 결함이 우연히 활성화될 확률이 오른다. 실험적으로 N = 3~5에서 효과 대부분이 나오고, 패턴 수는 대략 N에 비례해 는다. 셀 인식 테스트가 나온 뒤로는 셀 인식 + 낮은 N이 흔한 조합이다.

모델을 겹쳐 쌓는 이유

각 모델은 결함 공간의 일부를 덮는다. 고착 폴트가 덩어리를, 천이 폴트가 느린 결함을, 셀 인식 폴트가 셀 안쪽을, 브리지·N-검출이 이웃 상호작용을 덮는다. 겹치는 부분이 크기 때문에 모델을 하나 더할 때마다 추가 패턴 대비 이득은 줄어든다. 어디서 멈출지는 13장의 비용과 유출의 맞바꿈으로 정한다.

TB-7 테스트 계획

TB-7 TEST PLAN테스트 계획서 · 5장

고착 99.2%, 천이 92%, 그리고 셀 인식 패턴

TB-7의 축약 고착 폴트 목록은 약 3억 개다. ATPG 결과 검출 97.7%, 테스트 불가로 증명된 폴트 1.5%(상수 입력, IP 경계, 아날로그 경계, 중복 논리), 포기와 미검출이 합쳐 0.8%다. 테스트 불가를 분모에서 빼면 테스트 커버리지는 97.7 / 98.5 ≈ 99.2%다. 포기 폴트는 ATPG 시간 제한을 늘리고 남은 것은 테스트 포인트로 줄인다. 천이 폴트는 실속도 LOC 방식으로 92%다. 비동기 클록 도메인 경계, 거짓 경로·다중 사이클 경로 같은 타이밍 예외, 실속도로 캡처할 수 없는 I/O 경로가 빠진 몫이다.

고착 99.2%만으로는 윌리엄스–브라운 식이 약 1,300 DPPM을 준다. 그래서 셀 라이브러리 전체를 셀 인식 특성화하고, 셀 인식 폴트를 고착·천이 ATPG의 목표에 함께 넣는다. 패턴 예산은 고착 15,000개 + 천이 25,000개 = 4만 개 안에서 맞추고(셀 인식 요구를 같은 패턴에 실어 패턴 증가를 약 20%로 억제), 그 덕에 6장의 스캔 시간 약 0.8 s가 유지된다. 남는 결함은 IDDQ(4장), Vmin 셔무(10장), SLT(14장)가 겹쳐서 덮는다.

이 장의 결정고착 TC 99.2%, 천이 TC 92%(LOC), 셀 인식 폴트를 같은 패턴 예산에 통합. 테스트 불가 폴트 1.5%는 증명된 것만 분모에서 제외.
근거 숫자축약 폴트 약 3억 개, FC 97.7% / TC 99.2%, DL = 1 − 0.850.008 ≈ 1,300 DPPM, 패턴 4만 개.
남은 문제1,000만 개 플립플롭에 4만 개 패턴을 어떻게 1초 안에 넣고 빼는가. 순차 회로를 조합 회로처럼 다루는 장치가 필요하다(6장).

핵심 정리

  1. 결함은 물리적 이상, 폴트는 그 논리적 추상, 고장은 관찰된 오동작이다. 폴트 모델은 수를 다룰 만하게 하고 ATPG와 커버리지 측정을 가능하게 하지만, 모델이 그리지 못하는 결함은 숫자에서 사라진다.
  2. 단일 고착 폴트는 배선(줄기와 가지를 따로)마다 SA0·SA1 두 개, 모두 2N개다. 등가 축약은 지배값 규칙으로 n입력 게이트의 2(n+1)개를 n+2개로 줄이고, 지배 축약은 n+1개까지 줄인다. XOR에는 축약이 없다.
  3. 테스트 벡터는 활성화(반대값 만들기) → 전파(비지배값으로 길 열기) → 정당화(주입력까지 거슬러 맞추기)로 찾는다. D = 1/0, D̄ = 0/1 표기로 정상·고장 회로를 한꺼번에 계산한다.
  4. D 알고리즘은 내부 배선에, PODEM은 주입력에만 결정을 내려 탐색 나무와 되돌림을 줄인다. 정해지지 않은 입력(X)은 압축과 저전력 채우기에 쓰인다.
  5. FC = 검출/전체, TC = 검출/(전체 − 테스트 불가). 같은 결과라도 분모에 따라 1~2%p 다르다. 고착 TC 99.2%는 윌리엄스–브라운 식으로 약 1,300 DPPM이라 50 DPPM에 한참 모자란다.
  6. 무작위 패턴 커버리지는 검출 확률 p가 작은 랜덤 패턴 저항 폴트 때문에 포화한다. 95% 검출에 약 3/p개가 필요하며, 관측점·제어점이 p를 수십~수백 배 키운다.
  7. 천이 폴트는 2-패턴 실속도 테스트로 느린 결함을 잡고, 긴 경로로 시험해야 작은 지연도 잡는다. 브리지·셀 인식·N-검출이 핀 고착 모델 밖의 결함을 메운다.

확인 퀴즈

4입력 NAND 게이트 하나(팬아웃 없음)의 고착 폴트를 등가 축약만 하면 몇 개가 남는가?

전체 2(4+1) = 10개. 네 입력의 SA0과 출력 SA1이 하나의 등가 묶음(5개 → 1개)이 되므로 10 − 4 = 6개(n + 2)다. 지배 축약까지 쓰면 출력 SA0을 지워 5개(n + 1)가 된다.

2입력 OR 게이트의 입력 a가 SA0인 폴트를 출력에서 보이게 하려면 입력을 어떻게 두어야 하는가?

활성화를 위해 a는 고착값의 반대인 1이어야 한다. 전파를 위해 다른 입력 b는 OR의 비지배값 0이어야 한다. b = 1이면 출력이 항상 1이라 a의 차이(D)가 가려진다.

폴트 100만 개 가운데 검출 96만 개, 테스트 불가로 증명된 폴트 3만 개, 포기 1만 개다. 소수 둘째 자리까지 표시한 테스트 커버리지(TC)는?

TC = 검출 / (전체 − 테스트 불가) = 96 / 97 ≈ 98.97%. FC는 96.00%, ATPG 효율은 (96 + 3) / 100 = 99.00%다. ATPG 효율은 테스트 불가 폴트까지 도구가 결론을 낸 비율이므로 TC와 정의가 다르다.

무작위 패턴 BIST에서 검출 확률이 1/8,192인 폴트를 약 95% 확률로 잡으려면 대략 몇 개의 패턴이 필요한가?

남을 확률 (1 − p)N ≈ e−pN = 0.05에서 N = ln 20 / p ≈ 3 × 8,192 ≈ 24,500개. 8,000개(1/p)에서는 검출 확률이 약 63%에 그친다.