Chapter 06

스캔 설계와 테스트 압축

5장의 ATPG는 조합 회로를 전제로 했다. 입력을 마음대로 넣고 출력을 바로 볼 수 있다는 가정이다. 그러나 TB-7에는 플립플롭이 1,000만 개 있고, 그 대부분은 칩의 핀에서 수십 클록을 거쳐야 닿는 깊은 곳에 있다. 스캔 설계는 모든 플립플롭을 테스트 모드에서 하나의 긴 시프트 레지스터로 엮어, 순차 회로를 "상태를 직접 쓰고 읽을 수 있는" 조합 회로로 바꾼다. 이 장은 그 장치가 어떻게 움직이는지, 4만 개 패턴을 넣고 빼는 데 시간이 얼마나 드는지, 그 시간을 100분의 1로 줄이는 압축과 그 대가(X, 전력, 진단)를 차례로 다룬다.

순차 회로는 왜 어려운가

조합 회로에서 폴트 하나를 잡는 일은 입력 벡터 하나를 찾는 일이었다. 순차 회로에서는 폴트를 활성화하는 데 필요한 내부 상태를 먼저 만들어야 하고, 폴트의 효과가 플립플롭에 갇히면 그것을 출력까지 몇 클록에 걸쳐 끌어내야 한다. 회로를 클록마다 복사해 펼친 시간 프레임 전개(Time-frame expansion)로 순차 ATPG를 조합 문제로 바꿀 수 있지만, 필요한 프레임 수(순차 깊이)가 10을 넘으면 회로가 10배로 커지고 탐색이 사실상 불가능해진다. 초기 상태를 모르는 플립플롭(전원을 켤 때의 값)은 X로 남아 전파를 막는다.

순차 회로 조합 논리 FF PIPO 상태는 핀에서 바로 쓰거나 읽을 수 없다 시간 프레임 전개: 클록마다 복사 t = 0 t = 1 t = 2 × PI(t) PO ← 초기 상태 X 폴트(×)를 활성화할 상태를 앞 프레임들이 만들고, 그 효과를 뒤 프레임들이 출력까지 옮겨야 한다. 순차 깊이 d → 회로 d배, 탐색 공간 지수적
순차 ATPG의 어려움. 상태를 거쳐야만 닿는 폴트는 여러 클록에 걸친 입력 순서를 찾아야 한다. 스캔은 상태(FF)를 직접 쓰고 읽게 만들어 순차 깊이를 0으로 만든다. 그러면 남는 것은 FF 사이의 조합 논리뿐이고, 5장의 조합 ATPG가 그대로 쓰인다.

어떤 배선이 얼마나 다루기 어려운지를 숫자로 나타낸 것이 SCOAP(Sandia Controllability/Observability Analysis Program, Goldstein 1979)다. 배선마다 0으로 만들기 어려움 CC0, 1로 만들기 어려움 CC1, 출력까지 관측하기 어려움 CO를 둔다. 주입력의 CC0 = CC1 = 1, 주출력의 CO = 0에서 시작해 게이트를 지날 때마다 1을 더한다.

$$\text{AND: } CC1(z)=\sum_i CC1(a_i)+1,\quad CC0(z)=\min_i CC0(a_i)+1,\quad CO(a_j)=CO(z)+\sum_{i\ne j}CC1(a_i)+1$$
OR는 0과 1을 바꿔 쓴다. 순차 소자를 지나면 순차 제어성(SC)에 1을 더해 프레임 수를 센다. 값이 클수록 어렵다. 12입력 AND(주입력 12개)라면 CC1(z) = 13, CC0(z) = 2: 1로 만들기가 0으로 만들기보다 훨씬 어렵다는 것이 5장의 랜덤 패턴 저항 폴트와 같은 이야기다.

SCOAP은 근사다. 재수렴 팬아웃의 상관을 무시하므로 정확한 확률이 아니라 순위로 쓴다. ATPG는 거슬러 찾기(backtrace)에서 쉬운 입력을 먼저 고르는 데 이 값을 쓰고, DFT 도구는 관측성이 나쁜 노드를 골라 테스트 포인트를 넣는 데 쓴다. 그리고 SCOAP이 가장 극적으로 말해 주는 사실은, 순차 깊이가 깊은 FF의 값이 수십·수백이 되어 사실상 테스트할 수 없다는 것이다. 해법은 깊이 자체를 없애는 것이다.

스캔 플립플롭

가장 흔한 구현은 mux-D 스캔 플립플롭(Muxed-D scan flip-flop)이다. 보통 D 플립플롭 앞에 2:1 멀티플렉서를 하나 붙인다. 스캔 인에이블(Scan enable, SE)이 0이면 기능 입력 D를, 1이면 스캔 입력 SI를 받는다. 각 FF의 Q를 다음 FF의 SI에 이으면, SE = 1일 때 모든 FF가 하나의 시프트 레지스터가 된다. 이것이 스캔 체인(Scan chain)이다.

mux-D 스캔 FF MUX DSI 01 SE D FF CLK Q / SO SE = 0: 기능 동작 (D를 캡처) SE = 1: 시프트 (앞 FF의 값을 받음) 체인: Q → 다음 SI 조합 논리 (기능 경로) FFFFFFFF SI SO 실선: Q가 논리를 구동 · 점선: 논리 결과를 D로 캡처
mux-D 스캔 FF와 체인. 멀티플렉서 하나로 각 FF가 두 얼굴을 갖는다. 기능 경로에는 멀티플렉서 지연(수십 ps)이 더해지고, 면적은 FF당 약 10~20%, 칩 전체로 수 % 늘어난다. 이 비용을 내고 얻는 것은 1,000만 개 상태를 직접 쓰고 읽는 능력이다.

다른 방식도 있다. IBM이 1970년대에 쓴 LSSD(Level-Sensitive Scan Design)는 겹치지 않는 두 클록으로 래치 쌍을 움직여 레이스와 타이밍 문제를 원천 차단한다. 면적과 클록 배선이 더 들지만 타이밍이 견고하다. 클록드 스캔(Clocked scan)은 멀티플렉서 대신 별도 스캔 클록을 쓴다. 오늘날 표준 셀 설계는 거의 모두 mux-D다. 스캔으로 모든 FF를 체인에 넣는 것을 전체 스캔(Full scan)이라 하며, 일부만 넣는 부분 스캔은 면적을 아끼는 대신 순차 ATPG의 어려움이 일부 돌아온다.

스캔이 바꾸는 것

스캔 셀 하나는 "제어점 + 관측점"이다. 전체 스캔이면 모든 FF의 Q가 주입력처럼, 모든 D가 주출력처럼 된다. 그래서 TB-7의 1,000만 FF 회로는 테스트 모드에서 "입력 1,000만 개 + 실제 핀, 출력 1,000만 개 + 실제 핀"인 거대한 조합 회로가 된다. 5장의 3억 폴트와 고착 99.2%가 가능한 이유다.

스캔 체인과 동작

스캔 테스트의 패턴 하나는 세 단계로 이루어진다.

  1. 시프트 인(Shift-in, load): SE = 1. 체인 길이 L만큼 클록을 주어 ATPG가 만든 FF 값(자극)을 차례로 밀어 넣는다. 같은 동안 주입력에도 값을 건다.
  2. 캡처(Capture): SE = 0. 클록 하나(실속도 테스트면 둘)를 주어 조합 논리의 결과를 FF가 잡게 한다. 주출력은 이때 비교한다.
  3. 시프트 아웃(Shift-out, unload): SE = 1. 다시 L 클록 동안 체인을 밀어 FF에 잡힌 응답을 스캔 출력 핀에서 꺼내 기대값과 비교한다.

요령은 세 번째 단계를 따로 하지 않는 것이다. 패턴 k의 응답을 밀어내는 L 클록 동안 스캔 입력에서는 패턴 k+1의 자극이 들어온다. 그래서 패턴 P개에 필요한 클록은 \(P(L+1)+L\)개, 대략 \((P+1)L\)이다.

패턴 P개의 클록 타임라인 (체인 길이 L) SISESO 자극 1 로드 자극 2 로드 자극 3 로드 응답 1 언로드 응답 2 언로드 응답 3 … SE = 1, L 클록 CCC C: 캡처 (SE = 0, 1~2 클록). 로드와 언로드가 겹치므로 패턴당 약 L + 1 클록이 든다. 마지막 응답의 언로드 L 클록이 더해져 전체 ≈ (P + 1) · L 클록.
겹치는 시프트. 응답을 밀어내는 클록이 곧 다음 자극을 밀어 넣는 클록이다. 체인 길이 L이 테스트 시간을 정하고, 캡처 클록은 패턴당 한두 개라 무시할 만하다.
SIMULATOR

스캔 체인 애니메이션: 시프트 · 캡처 · 비교

FF를 누르면 그 FF의 캡처 입력에 폴트
클록0
모드—
비교한 응답 비트0
불일치0
지금 일어나는 일—
해볼 것: ① "1 클록"을 여섯 번 눌러 자극 비트가 왼쪽 스캔 입력에서 오른쪽으로 한 칸씩 이동하는 것을 보자(SE = 1). ② 일곱 번째 클록은 캡처다(SE = 0). 위 조합 논리의 결과가 FF 18개에 동시에 내려앉는다. ③ 그다음 여섯 클록은 응답을 밀어내면서 다음 자극을 밀어 넣는다. 오른쪽 출력 줄에서 초록은 기대값과 일치, 빨강은 불일치다. ④ FF 하나를 눌러 캡처 입력을 고착시키고 다시 실행하면, 그 FF가 기대값과 다른 값을 잡은 패턴에서만 빨강이 뜬다. 빨강이 뜬 체인과 시프트 순번으로 어느 FF인지 거꾸로 알 수 있다. (모델: 체인 3개 × FF 6개, 조합 논리는 이웃 FF 값의 고정된 AND/XOR 함수, 캡처 클록 1개, 첫 패턴의 출력은 초기값이라 비교하지 않는다.)

실제 칩에서는 체인 하나에 FF가 수백~수천 개다. 체인을 여러 개로 나누어 병렬로 시프트하면 L이 줄어 시간이 준다. 체인 수는 처음에는 스캔 입출력 핀 수로 묶였다. 체인 하나에 입력 핀 하나, 출력 핀 하나가 필요하기 때문이다. 이 제약을 푸는 것이 뒤에 나오는 압축이다.

스캔 테스트 시간과 체인 균형

겹친 시프트 덕분에 스캔 테스트 시간은 간단한 식으로 쓸 수 있다.

$$T_{scan}\approx\frac{(P+1)\,L}{f_{shift}},\qquad L=\left\lceil\frac{N_{FF}}{N_{chain}}\right\rceil,\qquad N_{chain}=N_{ch}\times R$$
P: 패턴 수, L: 가장 긴 체인의 길이, fshift: 시프트 주파수, NFF: 스캔 FF 수, Nchain: 내부 체인 수, Nch: 스캔 채널(테스터 핀 쌍) 수, R: 압축 비율. 캡처 클록과 테스트 설정 시간은 무시했다.

TB-7에 넣어 보자. FF 1,000만 개, 채널 50개, 압축 100배면 내부 체인 5,000개, 체인당 2,000 FF다. 패턴 4만 개(고착 15,000 + 천이 25,000), 시프트 100 MHz면 \(T = 40{,}001 \times 2{,}000 / 10^8 \approx 0.80\) s다. 압축 없이 같은 50채널로 했다면 체인당 20만 FF, 80 s다. 웨이퍼 테스트 터치다운 하나에 약 4 s(13장)를 쓰는 TB-7에서 80 s는 상상할 수 없는 숫자다.

가장 긴 체인이 시간을 정한다 불균형 L = 2,800 균형 L = 1,467 같은 FF 4,400개 시간 약 48% 감소 짧은 체인은 빈 값(패딩)으로 채워져 가장 긴 체인을 기다린다
체인 균형. 모든 체인은 동시에 시프트하므로 가장 긴 체인이 끝날 때까지 기다린다. DFT 삽입 도구는 클록 도메인과 배치를 고려해 체인 길이를 맞추고, 배치 뒤 체인 순서를 다시 엮어(scan reordering) 배선 길이를 줄인다.

시간만이 아니다. 테스터의 패턴 메모리도 같은 식으로 정해진다. 채널 하나에 실어야 할 벡터 수는 \(P \times L\)이다. TB-7은 \(40{,}000 \times 2{,}000 = 8\times10^7\), 채널당 8,000만 벡터라 2장의 사이트당 약 1 Gvector 메모리에 넉넉히 들어간다. 압축이 없다면 채널당 80억 벡터가 필요하다. 압축은 시간과 메모리를 같은 비율로 줄인다.

SIMULATOR

스캔 테스트 시간 계산기

내부 체인 × 길이—
스캔 시간—
채널당 벡터—
총 데이터(자극+기대)—
판단—
해볼 것: ① "TB-7 프리셋"에서 시간이 약 0.8 s인지 확인하자. ② "압축 끄기"를 누르면 체인 50개 × 20만 FF가 되어 80 s, 채널당 80억 벡터로 테스터 메모리(1 Gvector)를 넘는다. ③ 채널 수를 늘리면 시간이 줄지만 ATE 핀과 프로브 카드 접촉이 늘어 멀티 사이트 수가 준다. ④ 시프트 주파수를 400 MHz로 올리면 시간은 4분의 1이 되지만, 뒤의 시프트 전력 절에서 보듯 TB-7은 그 주파수를 견디지 못한다. (모델: 체인 완전 균형, 캡처·설정 시간 무시. 데이터량은 자극과 기대값을 채널마다 1비트씩 센 값이며 마스크 데이터는 제외했다. 웨이퍼 테스트 예산은 터치다운당 약 4 s.)

실속도 테스트: LOC와 LOS

5장의 천이 폴트를 잡으려면 론치와 캡처 사이 간격이 실제 동작 주기, TB-7이라면 2.8 GHz의 약 357 ps여야 한다. 시프트는 100 MHz로 천천히 하더라도, 마지막 두 엣지만은 빨라야 한다. 스캔에서 이 두 엣지를 만드는 방법이 둘이다.

보통 LOS가 같은 패턴 수로 커버리지가 몇 % 높고 패턴 수도 적지만, 고속 SE의 타이밍 마감이 부담이다. 그래서 많은 설계가 LOC를 기본으로 하고, 필요한 블록만 LOS를 쓰거나 둘을 섞는다. 빠른 두 펄스는 테스터가 아니라 칩 안의 PLL이 만든다. 테스터 클록 채널로 2.8 GHz 펄스를 정확히 보내기는 어렵기 때문이다. 온칩 클록 제어기(On-chip clock controller, OCC)는 시프트 동안 테스터의 느린 클록을 통과시키고, 캡처 때는 PLL 클록에서 정해진 수의 펄스만 골라 낸다.

LOC SECLK 느린 시프트 (10 ns) 론치캡처 357 ps SE는 여유 있게 내린다 LOS SECLK 론치=마지막 시프트캡처 SE: 357 ps 안에 0
LOC와 LOS. LOC는 SE를 느긋하게 바꾸고 기능 모드에서 두 펄스를 쏜다. LOS는 마지막 시프트가 론치이므로 SE가 론치와 캡처 사이 한 주기 안에 칩 전체에서 바뀌어야 한다. 두 경우 모두 빠른 펄스는 OCC가 PLL 클록에서 골라 낸다.
SIMULATOR

LOC와 LOS의 클록 파형

방식
실속도 주기—
SE가 쓸 수 있는 시간—
타이밍—
천이 커버리지(대략)—
해볼 것: ① LOC에서는 SE 지연을 3 ns로 늘려도 문제가 없다. 시프트가 끝난 뒤 론치까지 기다리면 되기 때문이다. ② LOS로 바꾸면 2.8 GHz에서 SE가 357 ps 안에 칩 전체로 퍼져야 해서 1.2 ns로는 실패한다. 캡처 엣지에서 SE가 아직 1인 FF는 캡처 대신 시프트를 해 버린다. ③ "SE 파이프라인"을 켜면 SE를 지역마다 플롭으로 다시 맞춰 유효 지연이 약 0.25 ns로 줄어 LOS가 가능해진다. 주파수를 낮춰도 된다. ④ 커버리지는 대략값이다: TB-7의 LOC 92%에 비해 LOS는 몇 %p 높다. (모델: 시프트 주기 10 ns, SE 셋업 여유 30 ps, 파이프라인 SE는 0.25 ns로 가정. 커버리지 숫자는 교과서에 보고된 일반적 차이를 단순화한 교육용 값이다.)

스캔 압축: 디컴프레서와 압축기

압축의 출발점은 5장에서 본 사실이다. 패턴 하나에서 값이 정해진 케어 비트는 FF의 1~5%뿐이고 나머지는 X다. 그렇다면 테스터에서 FF 1,000만 개 값을 다 보낼 필요가 없다. 테스터는 채널 50개로 적은 비트를 보내고, 칩 안의 디컴프레서(Decompressor)가 그것을 내부 체인 5,000개로 펼친다. 디컴프레서는 LFSR이나 XOR 네트워크로 된 선형 회로다. 각 체인 셀의 값은 테스터 입력 비트들의 XOR이 되고, ATPG는 케어 비트들이 원하는 값이 되도록 선형 방정식(GF(2))을 푼다. 케어 비트가 입력 비트보다 적은 한 거의 항상 풀린다. X는 방정식이 정하는 아무 값으로 채워진다.

출력 쪽에서는 압축기(Compactor)가 내부 체인 5,000개의 출력을 XOR 트리로 묶어 채널 50개로 줄인다. 체인 100개가 출력 하나를 공유하는 셈이다. XOR은 오류 하나를 반드시 통과시킨다. 오류 두 개가 같은 XOR 묶음, 같은 시프트 순번에 오면 서로 상쇄되는데, 이를 에일리어싱(Aliasing)이라 한다. 실제 압축기는 체인마다 둘 이상의 출력에 서로 다른 조합으로 연결해 이 확률을 줄인다.

ATE 채널 50 디컴프레서 내부 체인 5,000개 × 2,000 FF X M XOR압축기 ATE 채널 50 M: X 마스크(체인별 AND 게이트) 100배 압축: 입력 비트 1개가 체인 셀 100개를, 출력 비트 1개가 체인 100개를 대표한다
스캔 압축 구조. 입력 쪽 디컴프레서는 적은 비트를 많은 체인으로 펼치고, 출력 쪽 압축기는 많은 체인을 적은 출력으로 접는다. 접는 쪽의 약점은 X다. 체인 하나의 X가 XOR을 지나면 그 출력 비트 전체가 X가 되어, 함께 묶인 나머지 99개 체인의 같은 순번 값이 모두 버려진다.

X는 어디서 오는가. 초기화되지 않은 메모리나 레지스터 파일의 출력, 아날로그 블록 경계, 여러 드라이버가 다투는 버스, 타이밍 예외 경로(다중 사이클 경로를 실속도로 캡처하면 값이 불확정), 비동기 클록 도메인 경계가 대표적이다. 설계에서 X 원천을 막는 것이 첫째이고, 남는 X는 체인별 X 마스킹(X-masking)으로 처리한다. X가 있는 체인을 그 패턴 동안 압축기 앞에서 0으로 막는다. 대가는 마스크된 체인의 다른 값도 볼 수 없다는 것이다. 그래서 마스크 정보도 패턴마다 테스터가 보내야 하고, 셀 단위로 정교하게 마스킹하는 구조일수록 데이터가 는다.

SIMULATOR

XOR 압축과 X 마스킹

칸을 누르면 오류(폴트 효과) 주입
체인 마스크 (눌러서 켜기)
X 칸—
X가 된 압축 출력—
관측 가능한 칸—
오류 검출—
실제 규모(체인 100개 → 출력 1개)로 환산—
해볼 것: ① 처음 상태에서 오류(빨간 테두리) 하나가 X와 같은 묶음, 같은 열에 있으면 출력이 X가 되어 오류를 볼 수 없다. ② X가 있는 체인을 마스크하면 그 출력이 살아난다. 대신 마스크된 체인의 다른 칸도 모두 볼 수 없게 된다(회색). ③ 같은 묶음, 같은 열에 오류 두 개를 넣으면 XOR이 서로 상쇄해 출력이 정상처럼 보인다(에일리어싱). ④ X 밀도를 올리면 마스크 없이는 대부분의 출력이 X가 된다. 실제 압축 비율(체인 100개가 출력 1개)에서는 X 밀도 1%만 되어도 출력의 약 63%가 X다. (모델: 체인 8개 × 시프트 8, 체인 0~3과 4~7이 각각 XOR 출력 하나. 마스크는 체인을 0으로 만든다.)

시프트 전력과 IR 강하

기능 동작에서 한 클록에 값이 바뀌는 FF는 보통 10~20%다. 스캔 시프트에서는 무작위 값이 체인을 흘러가므로 매 클록 FF의 약 절반이 바뀌고, 그 FF들이 구동하는 조합 논리도 덩달아 출렁인다. 1,000만 개 FF가 동시에 그렇게 움직이면 전류가 기능 동작보다 몇 배 크고, 전원망의 저항으로 IR 강하(IR drop)가 생긴다. 전압이 내려가면 게이트가 느려져 시프트가 실패하거나, 캡처에서 정상 칩이 떨어진다(과잉 불량). 패키지와 프로브의 전류 한계, 칩의 온도도 문제다.

$$P_{shift}\approx N_{FF}\,V_{DD}^2\,f_{shift}\,\bigl(C_{clk}+\alpha\,C_{d}\bigr),\qquad \Delta V\approx\frac{P_{shift}}{V_{DD}}\,R_{grid}$$
α: 시프트 중 FF 토글률(자극과 응답의 평균), Cclk: FF당 클록 부하(매 클록 토글), Cd: FF 출력이 토글할 때 출렁이는 데이터 쪽 실효 용량, Rgrid: 전원망의 실효 저항. 전력은 fshift와 α에 비례한다.

α를 줄이는 가장 값싼 방법은 X를 채우는 방식이다. 케어 비트 사이의 X를 무작위로 채우면 토글률이 약 50%다. 모두 0으로 채우면(0-fill) 케어 비트 근처에서만 바뀌고, 바로 앞 케어 비트 값을 이어 채우면(adjacent fill, repeat fill) 케어 비트 값이 바뀌는 곳에서만 토글한다. 대가는 덤 검출의 감소다. 무작위 채우기는 X 자리로 다른 폴트를 우연히 잡아 주지만 반복 채우기는 그렇지 않아서 패턴 수가 몇 % 는다. 압축을 쓰면 X 값을 디컴프레서가 정하므로, 압축 구조에 저전력 모드(채널 값을 붙잡아 두는 홀드)를 따로 둔다. 이 밖에 체인을 나눠 번갈아 시프트하거나, 시프트 중 조합 논리 입력을 막는 게이팅(output gating)도 쓴다.

케어 비트 3개, 체인 24칸 무작위0 채우기인접 채우기 1 0 0 1 1 0 1 1 0 1 0 0 1 1 0 1 0 0 1 1 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 토글 16토글 4토글 2 굵은 색: ATPG가 정한 케어 비트. 나머지는 X를 채운 값. 시프트 중 토글 수가 곧 전력이다.
X 채우기와 토글. 같은 케어 비트를 담은 세 패턴은 고장 검출 목표가 같지만 시프트 전력이 몇 배 다르다. 인접 채우기는 케어 비트 값이 바뀌는 횟수만큼만 토글한다.
SIMULATOR

시프트 전력과 IR 강하

X 채우기
자극 토글률—
시프트 전력—
IR 강하 (한계 37.5 mV)—
한계 안 최대 주파수—
해볼 것: ① 인접 채우기, 100 MHz에서 IR 강하가 한계(VDD의 5%) 바로 아래인지 보자. ② 무작위 채우기로 바꾸면 같은 주파수에서 한계를 크게 넘는다. 시프트를 약 70 MHz 아래로 늦춰야 한다. ③ 인접 채우기에서도 주파수를 150 MHz로 올리면 넘는다. TB-7이 시프트를 100 MHz에 묶어 둔 이유다. ④ 케어 비트 밀도를 10%로 올리면 채우기로 줄일 수 있는 몫이 줄어든다. 응답(캡처된 값)의 토글은 채우기와 무관해서 바닥이 있다. (모델: FF 1,000만 개, VDD 0.75 V, Cclk 2 fF, Cd 10 fF, 응답 토글률 30% 고정, Rgrid 12 mΩ의 정적 모델. 실제 동적 IR 강하는 국부적이며 배치 기반 해석이 필요하다.)

스캔 체인 진단

스캔 테스트는 체인이 멀쩡하다는 전제 위에 서 있다. 그래서 모든 스캔 테스트의 첫 단계는 체인 테스트(Chain integrity test)다. SE = 1로 두고 캡처 없이 0011 0011…같은 패턴을 밀어 넣어 그대로 나오는지 본다. 0011은 0→0, 0→1, 1→1, 1→0 네 가지 천이를 모두 담고 있어 고착과 느린 천이를 함께 본다. 체인 하나가 끊기면 그 체인의 모든 스캔 패턴이 쓸모없어지므로, 체인 테스트는 짧지만 가장 먼저 돈다. 웨이퍼 테스트에서 스캔 불량의 상당수가 체인 불량이다. 체인은 칩 면적의 큰 몫을 지나가니 결함이 걸릴 확률도 크다.

체인이 끊긴 것은 알았는데 어디서 끊겼는가. 체인 테스트만으로는 모른다. 셀 k의 출력이 0에 고착되면 그 뒤로 지나가는 모든 비트가 0이 되므로, 어디서 끊겼든 출력은 모두 0이다. 위치를 찾는 열쇠는 캡처다. 기능 경로를 통해 FF들에 값을 잡게 한 뒤 시프트 아웃하면, 끊긴 자리보다 출력 쪽에 있는 셀의 값은 끊긴 자리를 지나지 않으므로 제대로 나온다. 끊긴 자리보다 입력 쪽에 있는 셀의 값은 모두 고착값으로 바뀐다. 제대로 나온 마지막 비트의 위치가 곧 끊긴 자리다.

셀 5 출력 SA0, 캡처로 모든 셀에 1을 잡은 뒤 언로드 SI 0:11:12:1 3:14:15:1 6:17:18:1 × SA0 SO 언로드 순서(SO에 나오는 순서): 8 → 1, 7 → 1, 6 → 1, 5 → 0, 4 → 0, 3 → 0, 2 → 0, 1 → 0, 0 → 0 세 비트(셀 8, 7, 6)가 맞게 나오고 그 뒤로 모두 0 → 끊긴 곳은 셀 5와 6 사이(셀 5 출력) 셀 5 자신의 값도 고착된 출력을 거쳐 나가므로 0으로 보인다
캡처로 끊긴 곳 찾기. 체인 테스트는 "SA0이 있다"까지만 알려 준다. 캡처한 값을 언로드하면 끊긴 자리 하류의 셀만 제대로 나온다. 실제로는 캡처 값을 마음대로 정할 수 없어서 ATPG가 만든 진단 패턴 여러 개로 후보를 좁히고, 마지막에는 물리 불량 분석(YieldBook)으로 넘긴다.

현실의 캡처 값은 조합 논리가 정하므로 원하는 셀에 원하는 값을 넣기 어렵다. 그래서 진단 도구는 여러 패턴의 결과를 모아 후보 구간을 좁힌다. 고착 말고도 느린 천이(slow-to-rise), 홀드 위반, 간헐 불량이 있어 패턴 종류를 바꿔 가며 본다. 아래 게임은 이 과정을 단순화했다. 원하는 셀 하나에만 반대값을 캡처할 수 있다고 가정하고, 최소 시도로 끊긴 자리를 찾는다.

GAME

끊긴 체인 찾기

탐색 모드: 셀을 누르면 그 셀에 캡처 테스트
셀을 누르면
캡처할 값
시도0
이론적 최소—
남은 후보—
결과—
마지막 언로드 (SO 순서)먼저 체인 테스트로 고착값을 알아내자.
해볼 것: ① 체인 테스트를 먼저 돌려 출력이 모두 0인지 1인지 보자. 그것이 고착값이다. 어디서 끊겼는지는 아직 모른다. ② "캡처할 값"을 고착값의 반대로 두고 셀 하나를 눌러 캡처 테스트를 하자. 그 값이 출력에 보이면 끊긴 곳은 그 셀보다 입력 쪽이고, 안 보이면 그 셀이거나 출력 쪽이다. ③ 후보 구간의 가운데를 누르는 이분 탐색이면 32칸을 5번 안에 좁힌다. 체인 테스트 1번을 더해 이론적 최소는 6번이다. ④ 후보가 하나 남으면 "고장 위치 지목"으로 그 셀을 누른다. (모델: 체인 32셀, 셀 k의 스캔 출력이 0 또는 1에 고착된 단일 고장. 캡처 테스트는 고른 셀에만 원하는 값을, 나머지에는 그 반대 값을 잡는다고 단순화했다.)

TB-7 테스트 계획

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

스캔 체인 5,000개, 압축 100배, 0.8초

TB-7의 스캔 FF 1,000만 개를 내부 체인 5,000개(체인당 2,000 FF)로 균형 있게 나누고, 디컴프레서·XOR 압축기로 100배 압축해 스캔 채널 50개(입력 50, 출력 50)로 테스터에 연결한다. 고착 패턴 15,000개와 천이 패턴 25,000개, 모두 4만 개를 100 MHz로 시프트하면 \((40{,}000+1)\times 2{,}000 / 10^8 \approx 0.80\) s다. 채널당 벡터는 8,000만 개로 2장의 사이트당 패턴 메모리(약 1 Gvector)에 들어간다. 압축이 없다면 같은 채널로 80 s, 채널당 80억 벡터라 불가능하다.

시프트 주파수를 올리지 못하는 이유는 전력이다. 인접 채우기로 토글을 줄여도 100 MHz에서 IR 강하가 한계(VDD의 5%, 37.5 mV)에 가깝고, 무작위 채우기라면 100 MHz도 넘는다. 실속도 테스트는 LOC로 2.8 GHz(빈 B 경계, 약 357 ps) 경로를 검사한다. SE를 실속도로 마감할 필요가 없어서다. 두 펄스는 PLL 4개 각각에 붙은 OCC가 만든다. X 원천(메모리 출력, 아날로그 경계, 다중 사이클 경로)은 설계에서 막고 남는 것은 체인별 마스크로 처리한다. 모든 스캔 테스트 앞에 체인 테스트를 둔다.

이 장의 결정체인 5,000 × 2,000 FF, 압축 100배, 채널 50, 시프트 100 MHz(인접 채우기), 패턴 4만 개, 실속도는 LOC 2.8 GHz + OCC, 체인 테스트 선행.
근거 숫자T = (P+1)L/f ≈ 0.80 s, 채널당 8 × 10⁷ 벡터, 압축 없을 때 80 s, 시프트 IR 강하 ≈ 32 mV / 한계 37.5 mV.
남은 문제SRAM 24 MB는 스캔으로 시험할 수 없다. 메모리 셀의 고장 모델과 칩 안에서 스스로 패턴을 만드는 MBIST가 필요하다(7장).

핵심 정리

  1. 순차 회로는 상태를 만들고 끌어내는 데 여러 클록이 필요해 ATPG가 어렵다. SCOAP의 CC0·CC1·CO가 그 어려움을 숫자로 보여 준다.
  2. mux-D 스캔 FF는 SE로 기능 입력과 스캔 입력을 고른다. 전체 스캔은 모든 FF를 제어점이자 관측점으로 만들어 순차 회로를 조합 회로처럼 시험하게 한다.
  3. 패턴 하나는 시프트 인 → 캡처 → 시프트 아웃이며, 언로드와 다음 로드를 겹쳐 전체 시간은 \(T \approx (P+1)L/f_{shift}\)다. 가장 긴 체인이 L을 정하므로 체인 균형이 중요하다.
  4. 실속도 테스트는 LOC(기능 모드의 두 펄스)와 LOS(마지막 시프트가 론치)로 한다. LOS는 커버리지가 높지만 SE가 한 주기 안에 바뀌어야 한다. 빠른 펄스는 OCC가 PLL에서 골라 낸다.
  5. 스캔 압축은 케어 비트가 적다는 점을 이용해 디컴프레서로 펼치고 XOR 압축기로 접는다. TB-7은 100배 압축으로 80 s를 0.8 s로 줄인다. X는 압축 출력 전체를 오염시키므로 원천 차단과 마스킹이 필요하다.
  6. 시프트 전력은 fshift와 토글률에 비례하고, IR 강하가 시프트 주파수의 상한을 정한다. 인접 채우기 같은 저전력 X 채우기가 토글을 크게 줄인다.
  7. 체인 테스트(0011)가 모든 스캔 테스트에 앞선다. 끊긴 위치는 캡처 뒤 언로드에서 제대로 나온 비트의 경계로 찾는다.

확인 퀴즈

스캔 FF 200만 개, 내부 체인 1,000개, 패턴 9,999개, 시프트 50 MHz다. 스캔 시간은 대략 얼마인가?

L = 2,000,000 / 1,000 = 2,000. T ≈ (9,999 + 1) × 2,000 / (5 × 10⁷) = 2 × 10⁷ / 5 × 10⁷ = 0.4 s.

LOS가 LOC보다 설계하기 어려운 가장 큰 이유는?

LOS에서는 마지막 시프트 엣지가 론치이므로 SE가 그 직후 1 → 0으로 바뀌어 캡처 엣지 전에 모든 FF에 도착해야 한다. 2.8 GHz라면 약 357 ps다. LOC는 시프트가 끝난 뒤 SE를 느긋하게 내리면 된다. 빠른 펄스는 두 방식 모두 OCC가 만든다.

XOR 압축기 출력 하나가 내부 체인 100개를 묶는다. 각 체인 출력이 시프트마다 독립적으로 2% 확률로 X라면, 그 압축 출력 비트가 X가 아닐 확률은 약 얼마인가?

100개 모두 X가 아니어야 하므로 0.98¹⁰⁰ ≈ e⁻² ≈ 0.13. 출력의 87%가 X로 오염되어 그 순번에서 100개 체인의 값을 모두 잃는다. 그래서 X 마스킹이나 X 원천 차단이 필수다.

체인 테스트(0011…)에서 출력이 모두 1로 나왔다. 이것으로 알 수 있는 것은?

시프트되는 모든 비트가 고착 지점을 지나므로 어디서 끊겼든 출력은 고착값 하나로 같다. 위치를 알려면 캡처로 값을 잡은 뒤 언로드해, 제대로 나온 비트(하류 셀)의 경계를 봐야 한다.