폴트 모델과 ATPG
공정이 남긴 결함은 모양도 크기도 제각각이다. 입자 하나가 두 배선을 잇기도 하고, 비아 하나가 반쯤 끊기기도 하며, 트랜지스터 하나의 산화막이 새기도 한다. 이 무한한 경우를 하나하나 따져 테스트 패턴을 만들 수는 없다. 그래서 테스트 공학은 결함을 논리 수준의 단순한 가짜 고장, 곧 폴트로 바꿔 놓고 생각한다. 폴트 목록을 만들고, 그 폴트를 출력까지 끌어내는 입력을 자동으로 찾고(ATPG), 찾은 패턴이 폴트를 몇 %나 잡는지 센다(폴트 시뮬레이션). 이 장은 이 세 단계를 직접 손으로 해 본다. 그리고 99%가 넘는 고착 폴트 커버리지가 왜 TB-7의 50 DPPM 목표에는 여전히 모자란지도 숫자로 확인한다.
- 결함과 폴트 모델의 관계를 설명하고, 단일 고착 폴트 가정이 왜 쓸모 있는지 말한다.
- 게이트별 등가·지배 규칙으로 폴트 목록을 축약하고 축약 후 폴트 수를 계산한다.
- 활성화·전파·정당화 세 단계와 D·D̄ 표기로 한 폴트의 테스트 벡터를 손으로 구한다.
- D 알고리즘과 PODEM의 차이, 테스트 불가 폴트, 폴트·테스트 커버리지의 정의를 구분한다.
- 랜덤 패턴 저항 폴트가 커버리지 곡선을 포화시키는 이유와 테스트 포인트의 효과를 설명한다.
- 천이·경로 지연·브리지·셀 인식 폴트가 고착 폴트가 놓치는 결함을 어떻게 메우는지 말한다.
결함에서 폴트 모델로
세 낱말을 먼저 구별한다. 결함(Defect)은 칩에 실제로 생긴 물리적 이상이다. 입자에 의한 배선 단락, 빈 비아, 산화막 핀홀이 그렇다. 폴트(Fault)는 그 결함을 회로 모델 위에 옮겨 놓은 추상이다. "이 배선이 항상 0이다"처럼 논리나 지연으로 적는다. 고장(Failure)은 칩이 사양대로 동작하지 않는 관찰 결과다. 결함이 있어도 동작을 바꾸지 않으면 고장이 아니고, 폴트 모델이 그 결함을 정확히 흉내 내지 못할 수도 있다. 1장의 구분을 다시 쓰자면, 테스트는 고장을 보고 결함을 추정하며, 패턴 생성은 폴트를 겨냥한다.
왜 추상화가 필요한가. 첫째, 수가 다룰 만해진다. 회로의 결함 가능 위치와 크기와 저항값의 조합은 사실상 무한하지만, 배선 N개에 고착 폴트는 정확히 2N개다. 둘째, 자동화가 가능해진다. 폴트가 불 대수로 표현되면 그 폴트를 드러내는 입력을 알고리즘이 찾을 수 있다. 셋째, 측정이 가능해진다. 몇 개의 폴트를 잡았는지 세어 커버리지라는 숫자 하나로 테스트의 품질을 말할 수 있다. 대가는 정확도다. 모델은 모델일 뿐이어서, 모델이 그리지 못하는 결함은 커버리지 숫자에 나타나지 않는 채로 빠져나간다.
좋은 폴트 모델의 조건은 둘이다. 실제 결함의 행동을 충분히 닮아야 하고(accuracy), 동시에 계산이 다룰 만해야 한다(tractability). 이 둘은 서로 당긴다. 트랜지스터 수준 회로 시뮬레이션은 정확하지만 1.5억 게이트의 TB-7에는 쓸 수 없고, 고착 폴트는 빠르지만 저항성 결함을 모른다. 그래서 산업 현장은 하나의 모델에 기대지 않고, 고착 폴트를 기본으로 깔고 그 위에 천이 폴트, 셀 인식 폴트, 브리지 폴트를 차례로 덧입힌다. 1장에서 TB-7이 요구하는 결함 커버리지가 약 99.97%라고 계산했다. 이 장의 마지막에서 그 숫자에 얼마나 다가갈 수 있는지 본다.
| 폴트 모델 | 대표하는 결함 | 폴트 수(배선 N) | 필요한 패턴 | 대략의 계산 부담 |
|---|---|---|---|---|
| 고착(stuck-at) | 단선, 전원·접지로의 단락 | 2N | 1개 벡터 | 기준(1×) |
| 천이(transition) | 저항성 비아, 약한 트랜지스터 | 2N | 2개 벡터(실속도) | 약 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%에 그친다.
아래 회로는 테스트 연구의 표준 예제인 ISCAS-85 벤치마크의 c17이다. 입력 5개(1, 2, 3, 6, 7), 2입력 NAND 6개, 출력 2개(22, 23)로 이루어져 있다. 줄기 3, 11, 16이 각각 두 가지로 갈라지므로 배선은 입력 5 + 게이트 출력 6 + 가지 6 = 17개, 고착 폴트는 34개다. 직접 입력을 바꾸고 아무 배선에나 폴트를 심어 보면, 폴트가 출력에서 보이려면 무엇이 맞아떨어져야 하는지 금방 감이 온다.
c17 폴트 주입기
폴트 등가·지배와 축약
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이기만 하면 잡히니 더 쉽다. 쉬운 쪽(지배하는 쪽)을 버린다. 다만 지배 축약은 팬아웃이 있는 회로에서 출력 폴트가 다른 경로로 관측될 수 있어 조심해서 쓰며, 많은 상용 도구는 등가 축약만 기본으로 쓴다.
게이트별 규칙을 정리하면 다음과 같다. 핵심은 게이트의 지배값(Controlling value)이다. 입력 하나만으로 출력을 결정하는 값으로, AND·NAND는 0, OR·NOR는 1이다. 입력이 지배값에 고착된 폴트는 출력 고착과 등가가 된다.
| 게이트 | 지배값 | 등가 묶음 | 지배 관계(지울 폴트) | n입력 축약 후 |
|---|---|---|---|---|
| AND | 0 | 입력 SA0 전부 ≡ 출력 SA0 | 출력 SA1 | n+2 → n+1 |
| NAND | 0 | 입력 SA0 전부 ≡ 출력 SA1 | 출력 SA0 | n+2 → n+1 |
| OR | 1 | 입력 SA1 전부 ≡ 출력 SA1 | 출력 SA0 | n+2 → n+1 |
| NOR | 1 | 입력 SA1 전부 ≡ 출력 SA0 | 출력 SA1 | n+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 도구가 다루는 목록이 이 정도다.
폴트 축약 계산기
경로 민감화와 D 표기
폴트 하나를 잡는 벡터를 손으로 찾는 일을 경로 민감화(Path sensitization)라 한다. 세 단계다.
- 활성화(Activation, excitation): 폴트 자리에 고착값과 반대인 값을 만든다. SA0을 잡으려면 그 배선이 정상일 때 1이어야 한다. 그래야 정상 회로와 고장 회로가 그 자리에서 갈린다.
- 전파(Propagation): 갈린 값을 주출력까지 끌고 간다. 지나가는 게이트마다 다른 입력을 비지배값으로 둔다. AND·NAND라면 1, OR·NOR라면 0이다. 그래야 그 게이트가 차이를 그대로 통과시킨다.
- 정당화(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̄가 나타나면 그 벡터가 폴트를 잡는다.
정당화에서 가장 까다로운 것은 재수렴 팬아웃(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는 모두 이 틀 위에서 탐색 공간을 더 줄이는 기법을 더했다.
ATPG가 돌려주는 벡터에는 정해지지 않은 입력(X)이 많다. 실제 회로에서 한 패턴이 요구하는 값, 곧 케어 비트(Care bit)는 스캔 셀의 1~5%에 불과하다. 도구는 한 패턴에 여러 폴트를 동시에 겨냥해 X를 채우는 동적 압축(Dynamic compaction)으로 패턴 수를 줄이고, 다 만든 뒤 폴트 시뮬레이션으로 중복 패턴을 지우는 정적 압축(Static compaction)을 더한다. 패턴 수는 곧 테스트 시간이므로, 같은 커버리지를 더 적은 벡터로 얻는 것이 ATPG 품질의 절반이다. 아래 퍼즐에서 그 감을 잡아 보자.
ATPG 퍼즐: 최소 벡터로 c17 전부 잡기
테스트 불가 폴트와 커버리지의 정의
ATPG가 어떤 폴트의 벡터를 끝내 찾지 못하는 경우는 두 가지다. 하나는 시간 제한(abort limit)에 걸려 포기한 것(aborted)이고, 다른 하나는 그런 벡터가 아예 존재하지 않음을 증명한 것이다. 뒤의 것을 테스트 불가 폴트(Untestable fault)라 한다. 대표가 중복(Redundant) 폴트다. 회로에 논리적으로 쓸모없는 부분이 있으면 그 부분의 폴트는 출력을 결코 바꾸지 못한다. 예를 들어 \(f = ab + \bar a c + bc\)에서 항 \(bc\)는 합의항이라 없어도 함수가 같다. 그 AND 게이트의 출력 SA0은 어떤 입력으로도 관측되지 않는다. 그 밖에 상수로 묶인 입력(tied), 테스트 모드에서 막힌 경로(blocked), 아날로그 경계처럼 구조적으로 관측이 없는 곳(unused)도 테스트 불가로 분류한다.
중복 폴트는 그 자체로는 해가 없지만 두 가지 문제를 낳는다. 커버리지 숫자를 깎아 먹고, 같은 자리에 다른 폴트가 겹치면 그 폴트를 가릴 수 있다. 그래서 설계 단계에서 중복을 제거하는 것이 원칙이지만, 타이밍 때문에 일부러 넣은 중복 논리(해저드 제거용)나 IP 경계의 상수 입력은 남는다. 그래서 커버리지를 말할 때는 분모를 무엇으로 했는지가 중요하다.
커버리지가 품질로 이어지는 다리가 윌리엄스–브라운 식(Williams–Brown)이다. 수율 Y인 공정에서 결함 커버리지 T로 테스트하면 출하품의 불량률(결함 수준)은 다음과 같다.
고착 폴트 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)라 한다.
아래 시뮬레이터는 실제로 폴트 시뮬레이션을 돌린다. 회로는 세 덩어리다. 4비트 리플 덧셈기(쉬운 폴트), 8비트 일치 비교기(A = B일 때만 1이 되는 출력, p ≈ 1/256), 12입력 AND 트리(p ≈ 1/4096)다. 패턴 32개를 한 워드에 실어 비트 연산으로 계산하는 병렬 패턴 단일 폴트 전파(PPSFP) 방식이고, 잡힌 폴트는 즉시 목록에서 뺀다.
랜덤 패턴 커버리지 곡선
실무에서 무작위 패턴은 로직 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)).
천이 폴트의 약점은 어느 경로로 시험하는지를 정하지 않는다는 점이다. ATPG는 보통 가장 찾기 쉬운, 그래서 대개 가장 짧은 경로로 전파한다. 결함이 더한 지연이 그 경로의 여유(slack)보다 작으면 놓친다. 작은 지연 결함(small delay defect)을 잡으려면 폴트 자리를 지나는 가장 긴 경로를 고르는 타이밍 인식 ATPG(Timing-aware ATPG)를 쓴다. 정적 타이밍 분석의 경로 지연을 받아 여유가 작은 경로를 우선한다. 패턴 수가 1.5~3배 늘어난다.
경로 지연 폴트(Path delay fault)는 한 걸음 더 나아가 특정 경로 전체의 누적 지연이 주기를 넘는지를 본다. 작은 지연이 여러 게이트에 흩어져 쌓이는 경우까지 잡지만, 경로의 수가 회로 크기에 지수적으로 늘어 모든 경로를 다룰 수는 없다. 정적 타이밍 분석이 고른 임계 경로 수천~수만 개만 대상으로 한다. 경로를 따라 천이가 확실히 전파되게 하는 조건에 따라 강건한(robust) 테스트와 비강건한(non-robust) 테스트로 나뉜다. 강건한 테스트는 다른 경로의 지연과 상관없이 결과가 보장되지만 존재하지 않는 경로가 많다.
천이 폴트의 2-패턴 테스트
브리지 폴트, 셀 인식 폴트, N-검출
배선 사이의 단락은 고착 폴트가 가장 서툴게 흉내 내는 결함이다. 전원이나 접지로의 단락이 아니라 두 신호선 사이의 단락이라면, 두 선이 같은 값일 때는 아무 일이 없고 다른 값일 때만 다툰다(fight). 결과는 두 드라이버의 세기와 단락 저항이 정한다. 이를 논리로 옮긴 것이 브리지 폴트(Bridging fault)다.
- wired-AND: 0이 이긴다. 두 선 모두 A·B가 된다. NMOS 풀다운이 PMOS 풀업보다 센 CMOS에서 흔한 근사다.
- wired-OR: 1이 이긴다. 두 선 모두 A + B가 된다.
- 지배형(dominant): 더 센 드라이버 쪽 값이 이긴다. "A가 B를 지배"라면 B가 A를 따른다.
- 저항성(resistive): 단락 저항이 크면 두 선의 전압이 중간에 걸리고, 받는 게이트의 문턱에 따라 어떤 쪽은 틀리고 어떤 쪽은 맞게 읽는다. 저항이 더 크면 논리는 맞고 전류만 흐른다. 4장의 IDDQ가 이 경우를 본다.
브리지 후보는 회로도가 아니라 배치에서 나온다. 같은 층에서 가까이 긴 거리를 나란히 달리는 배선 쌍을 추출하고(layout extraction), 결함 크기 분포로 단락 가능성을 가중한다. YieldBook의 임계 면적과 같은 계산이다. 이를 겨냥한 패턴을 결함 기반 테스트(Defect-oriented test)라 부른다.
브리지 폴트를 잡는 벡터
셀 인식 폴트
고착·천이 폴트는 표준 셀의 핀에만 있다. 그러나 5 nm급 공정의 결함 상당수는 셀 안쪽, 트랜지스터와 셀 내부 배선에서 생긴다. 셀 내부의 단선은 특정 입력 조합에서만, 혹은 특정 천이에서만 출력을 틀리게 한다. 예를 들어 NAND2의 병렬 PMOS 두 개 중 하나가 끊기면(트랜지스터 고착 개방(stuck-open)), 그 PMOS만 출력을 1로 끌어올려야 하는 입력 조합에서 출력이 떠 버려 이전 값을 기억한다. 핀 고착 폴트 테스트로는 우연에 맡겨진다.
셀 인식 테스트(Cell-aware test)는 라이브러리의 셀마다 배치에서 가능한 내부 단선·단락을 뽑고, 아날로그 회로 시뮬레이션으로 각 결함이 어떤 입력(또는 입력 쌍)에서 출력을 바꾸는지 표로 만든다. ATPG는 그 표를 폴트 목록으로 받아 "이 NAND2 인스턴스에 입력 01 다음 11을 넣어라"는 식의 요구를 만족시킨다. 셀 라이브러리 특성화는 한 번만 하면 되고, 보고된 산업 사례에서는 고착·천이 테스트 위에 더해 수백 DPPM 수준의 유출을 줄였다고 한다. 패턴 수는 대개 10~30% 늘어난다.
N-검출
모델이 그리지 못하는 결함을 통계적으로 더 잡는 값싼 방법이 N-검출 테스트(N-detect)다. 폴트 하나를 한 번이 아니라 서로 다른 N개의 벡터로 잡도록 패턴을 만든다. 같은 자리를 다른 이웃 값, 다른 경로로 여러 번 건드리므로 브리지나 셀 내부 결함 같은 미지의 결함이 우연히 활성화될 확률이 오른다. 실험적으로 N = 3~5에서 효과 대부분이 나오고, 패턴 수는 대략 N에 비례해 는다. 셀 인식 테스트가 나온 뒤로는 셀 인식 + 낮은 N이 흔한 조합이다.
각 모델은 결함 공간의 일부를 덮는다. 고착 폴트가 덩어리를, 천이 폴트가 느린 결함을, 셀 인식 폴트가 셀 안쪽을, 브리지·N-검출이 이웃 상호작용을 덮는다. 겹치는 부분이 크기 때문에 모델을 하나 더할 때마다 추가 패턴 대비 이득은 줄어든다. 어디서 멈출지는 13장의 비용과 유출의 맞바꿈으로 정한다.
TB-7 테스트 계획
고착 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장)가 겹쳐서 덮는다.
핵심 정리
- 결함은 물리적 이상, 폴트는 그 논리적 추상, 고장은 관찰된 오동작이다. 폴트 모델은 수를 다룰 만하게 하고 ATPG와 커버리지 측정을 가능하게 하지만, 모델이 그리지 못하는 결함은 숫자에서 사라진다.
- 단일 고착 폴트는 배선(줄기와 가지를 따로)마다 SA0·SA1 두 개, 모두 2N개다. 등가 축약은 지배값 규칙으로 n입력 게이트의 2(n+1)개를 n+2개로 줄이고, 지배 축약은 n+1개까지 줄인다. XOR에는 축약이 없다.
- 테스트 벡터는 활성화(반대값 만들기) → 전파(비지배값으로 길 열기) → 정당화(주입력까지 거슬러 맞추기)로 찾는다. D = 1/0, D̄ = 0/1 표기로 정상·고장 회로를 한꺼번에 계산한다.
- D 알고리즘은 내부 배선에, PODEM은 주입력에만 결정을 내려 탐색 나무와 되돌림을 줄인다. 정해지지 않은 입력(X)은 압축과 저전력 채우기에 쓰인다.
- FC = 검출/전체, TC = 검출/(전체 − 테스트 불가). 같은 결과라도 분모에 따라 1~2%p 다르다. 고착 TC 99.2%는 윌리엄스–브라운 식으로 약 1,300 DPPM이라 50 DPPM에 한참 모자란다.
- 무작위 패턴 커버리지는 검출 확률 p가 작은 랜덤 패턴 저항 폴트 때문에 포화한다. 95% 검출에 약 3/p개가 필요하며, 관측점·제어점이 p를 수십~수백 배 키운다.
- 천이 폴트는 2-패턴 실속도 테스트로 느린 결함을 잡고, 긴 경로로 시험해야 작은 지연도 잡는다. 브리지·셀 인식·N-검출이 핀 고착 모델 밖의 결함을 메운다.
확인 퀴즈
4입력 NAND 게이트 하나(팬아웃 없음)의 고착 폴트를 등가 축약만 하면 몇 개가 남는가?
2입력 OR 게이트의 입력 a가 SA0인 폴트를 출력에서 보이게 하려면 입력을 어떻게 두어야 하는가?
폴트 100만 개 가운데 검출 96만 개, 테스트 불가로 증명된 폴트 3만 개, 포기 1만 개다. 소수 둘째 자리까지 표시한 테스트 커버리지(TC)는?
무작위 패턴 BIST에서 검출 확률이 1/8,192인 폴트를 약 95% 확률로 잡으려면 대략 몇 개의 패턴이 필요한가?