스캔 설계와 테스트 압축
5장의 ATPG는 조합 회로를 전제로 했다. 입력을 마음대로 넣고 출력을 바로 볼 수 있다는 가정이다. 그러나 TB-7에는 플립플롭이 1,000만 개 있고, 그 대부분은 칩의 핀에서 수십 클록을 거쳐야 닿는 깊은 곳에 있다. 스캔 설계는 모든 플립플롭을 테스트 모드에서 하나의 긴 시프트 레지스터로 엮어, 순차 회로를 "상태를 직접 쓰고 읽을 수 있는" 조합 회로로 바꾼다. 이 장은 그 장치가 어떻게 움직이는지, 4만 개 패턴을 넣고 빼는 데 시간이 얼마나 드는지, 그 시간을 100분의 1로 줄이는 압축과 그 대가(X, 전력, 진단)를 차례로 다룬다.
- 순차 회로의 제어성·관측성 문제를 설명하고 SCOAP 값을 손으로 계산한다.
- mux-D 스캔 플립플롭과 스캔 체인의 시프트·캡처·겹친 시프트 아웃 동작을 단계별로 따라간다.
- \(T \approx (P+1)L/f_{shift}\)로 테스트 시간을 계산하고, 체인 균형과 압축이 그 값을 어떻게 바꾸는지 말한다.
- LOC와 LOS 실속도 테스트의 클록·스캔 인에이블 타이밍 차이와 온칩 클록 제어기의 역할을 설명한다.
- 디컴프레서·XOR 압축기 구조와 X가 커버리지를 깎는 원리, 마스킹의 효과를 설명한다.
- 시프트 전력과 IR 강하가 시프트 주파수를 묶는 이유, 끊긴 체인을 찾는 진단 절차를 설명한다.
순차 회로는 왜 어려운가
조합 회로에서 폴트 하나를 잡는 일은 입력 벡터 하나를 찾는 일이었다. 순차 회로에서는 폴트를 활성화하는 데 필요한 내부 상태를 먼저 만들어야 하고, 폴트의 효과가 플립플롭에 갇히면 그것을 출력까지 몇 클록에 걸쳐 끌어내야 한다. 회로를 클록마다 복사해 펼친 시간 프레임 전개(Time-frame expansion)로 순차 ATPG를 조합 문제로 바꿀 수 있지만, 필요한 프레임 수(순차 깊이)가 10을 넘으면 회로가 10배로 커지고 탐색이 사실상 불가능해진다. 초기 상태를 모르는 플립플롭(전원을 켤 때의 값)은 X로 남아 전파를 막는다.
어떤 배선이 얼마나 다루기 어려운지를 숫자로 나타낸 것이 SCOAP(Sandia Controllability/Observability Analysis Program, Goldstein 1979)다. 배선마다 0으로 만들기 어려움 CC0, 1로 만들기 어려움 CC1, 출력까지 관측하기 어려움 CO를 둔다. 주입력의 CC0 = CC1 = 1, 주출력의 CO = 0에서 시작해 게이트를 지날 때마다 1을 더한다.
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)이다.
다른 방식도 있다. 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%가 가능한 이유다.
스캔 체인과 동작
스캔 테스트의 패턴 하나는 세 단계로 이루어진다.
- 시프트 인(Shift-in, load): SE = 1. 체인 길이 L만큼 클록을 주어 ATPG가 만든 FF 값(자극)을 차례로 밀어 넣는다. 같은 동안 주입력에도 값을 건다.
- 캡처(Capture): SE = 0. 클록 하나(실속도 테스트면 둘)를 주어 조합 논리의 결과를 FF가 잡게 한다. 주출력은 이때 비교한다.
- 시프트 아웃(Shift-out, unload): SE = 1. 다시 L 클록 동안 체인을 밀어 FF에 잡힌 응답을 스캔 출력 핀에서 꺼내 기대값과 비교한다.
요령은 세 번째 단계를 따로 하지 않는 것이다. 패턴 k의 응답을 밀어내는 L 클록 동안 스캔 입력에서는 패턴 k+1의 자극이 들어온다. 그래서 패턴 P개에 필요한 클록은 \(P(L+1)+L\)개, 대략 \((P+1)L\)이다.
스캔 체인 애니메이션: 시프트 · 캡처 · 비교
실제 칩에서는 체인 하나에 FF가 수백~수천 개다. 체인을 여러 개로 나누어 병렬로 시프트하면 L이 줄어 시간이 준다. 체인 수는 처음에는 스캔 입출력 핀 수로 묶였다. 체인 하나에 입력 핀 하나, 출력 핀 하나가 필요하기 때문이다. 이 제약을 푸는 것이 뒤에 나오는 압축이다.
스캔 테스트 시간과 체인 균형
겹친 시프트 덕분에 스캔 테스트 시간은 간단한 식으로 쓸 수 있다.
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는 상상할 수 없는 숫자다.
시간만이 아니다. 테스터의 패턴 메모리도 같은 식으로 정해진다. 채널 하나에 실어야 할 벡터 수는 \(P \times L\)이다. TB-7은 \(40{,}000 \times 2{,}000 = 8\times10^7\), 채널당 8,000만 벡터라 2장의 사이트당 약 1 Gvector 메모리에 넉넉히 들어간다. 압축이 없다면 채널당 80억 벡터가 필요하다. 압축은 시간과 메모리를 같은 비율로 줄인다.
스캔 테스트 시간 계산기
실속도 테스트: LOC와 LOS
5장의 천이 폴트를 잡으려면 론치와 캡처 사이 간격이 실제 동작 주기, TB-7이라면 2.8 GHz의 약 357 ps여야 한다. 시프트는 100 MHz로 천천히 하더라도, 마지막 두 엣지만은 빨라야 한다. 스캔에서 이 두 엣지를 만드는 방법이 둘이다.
- LOC(Launch-off-capture, broadside): 시프트를 끝내고 SE를 천천히 0으로 내린 뒤, 기능 모드에서 빠른 클록 펄스 두 개를 준다. 첫 펄스(론치)가 조합 논리의 결과를 FF에 잡으면서 천이를 일으키고, 둘째 펄스(캡처)가 그 결과를 잡는다. 두 번째 벡터 V2는 첫 번째 벡터 V1이 논리를 지나 만든 값이라 ATPG가 마음대로 정할 수 없다(두 프레임 순차 문제).
- LOS(Launch-off-shift, skewed-load): 마지막 시프트 엣지가 곧 론치다. V2는 V1을 한 칸 민 값이라 역시 제약이 있지만 종류가 다르다. 문제는 SE다. 론치 직후, 캡처 엣지 전에 SE가 1에서 0으로 바뀌어야 하므로 SE 신호가 칩 전체 FF에 실속도로 퍼져야 한다. SE를 클록처럼 버퍼 트리로 키우거나 파이프라인 해야 한다.
보통 LOS가 같은 패턴 수로 커버리지가 몇 % 높고 패턴 수도 적지만, 고속 SE의 타이밍 마감이 부담이다. 그래서 많은 설계가 LOC를 기본으로 하고, 필요한 블록만 LOS를 쓰거나 둘을 섞는다. 빠른 두 펄스는 테스터가 아니라 칩 안의 PLL이 만든다. 테스터 클록 채널로 2.8 GHz 펄스를 정확히 보내기는 어렵기 때문이다. 온칩 클록 제어기(On-chip clock controller, OCC)는 시프트 동안 테스터의 느린 클록을 통과시키고, 캡처 때는 PLL 클록에서 정해진 수의 펄스만 골라 낸다.
LOC와 LOS의 클록 파형
스캔 압축: 디컴프레서와 압축기
압축의 출발점은 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)이라 한다. 실제 압축기는 체인마다 둘 이상의 출력에 서로 다른 조합으로 연결해 이 확률을 줄인다.
X는 어디서 오는가. 초기화되지 않은 메모리나 레지스터 파일의 출력, 아날로그 블록 경계, 여러 드라이버가 다투는 버스, 타이밍 예외 경로(다중 사이클 경로를 실속도로 캡처하면 값이 불확정), 비동기 클록 도메인 경계가 대표적이다. 설계에서 X 원천을 막는 것이 첫째이고, 남는 X는 체인별 X 마스킹(X-masking)으로 처리한다. X가 있는 체인을 그 패턴 동안 압축기 앞에서 0으로 막는다. 대가는 마스크된 체인의 다른 값도 볼 수 없다는 것이다. 그래서 마스크 정보도 패턴마다 테스터가 보내야 하고, 셀 단위로 정교하게 마스킹하는 구조일수록 데이터가 는다.
XOR 압축과 X 마스킹
시프트 전력과 IR 강하
기능 동작에서 한 클록에 값이 바뀌는 FF는 보통 10~20%다. 스캔 시프트에서는 무작위 값이 체인을 흘러가므로 매 클록 FF의 약 절반이 바뀌고, 그 FF들이 구동하는 조합 논리도 덩달아 출렁인다. 1,000만 개 FF가 동시에 그렇게 움직이면 전류가 기능 동작보다 몇 배 크고, 전원망의 저항으로 IR 강하(IR drop)가 생긴다. 전압이 내려가면 게이트가 느려져 시프트가 실패하거나, 캡처에서 정상 칩이 떨어진다(과잉 불량). 패키지와 프로브의 전류 한계, 칩의 온도도 문제다.
α를 줄이는 가장 값싼 방법은 X를 채우는 방식이다. 케어 비트 사이의 X를 무작위로 채우면 토글률이 약 50%다. 모두 0으로 채우면(0-fill) 케어 비트 근처에서만 바뀌고, 바로 앞 케어 비트 값을 이어 채우면(adjacent fill, repeat fill) 케어 비트 값이 바뀌는 곳에서만 토글한다. 대가는 덤 검출의 감소다. 무작위 채우기는 X 자리로 다른 폴트를 우연히 잡아 주지만 반복 채우기는 그렇지 않아서 패턴 수가 몇 % 는다. 압축을 쓰면 X 값을 디컴프레서가 정하므로, 압축 구조에 저전력 모드(채널 값을 붙잡아 두는 홀드)를 따로 둔다. 이 밖에 체인을 나눠 번갈아 시프트하거나, 시프트 중 조합 논리 입력을 막는 게이팅(output gating)도 쓴다.
시프트 전력과 IR 강하
스캔 체인 진단
스캔 테스트는 체인이 멀쩡하다는 전제 위에 서 있다. 그래서 모든 스캔 테스트의 첫 단계는 체인 테스트(Chain integrity test)다. SE = 1로 두고 캡처 없이 0011 0011…같은 패턴을 밀어 넣어 그대로 나오는지 본다. 0011은 0→0, 0→1, 1→1, 1→0 네 가지 천이를 모두 담고 있어 고착과 느린 천이를 함께 본다. 체인 하나가 끊기면 그 체인의 모든 스캔 패턴이 쓸모없어지므로, 체인 테스트는 짧지만 가장 먼저 돈다. 웨이퍼 테스트에서 스캔 불량의 상당수가 체인 불량이다. 체인은 칩 면적의 큰 몫을 지나가니 결함이 걸릴 확률도 크다.
체인이 끊긴 것은 알았는데 어디서 끊겼는가. 체인 테스트만으로는 모른다. 셀 k의 출력이 0에 고착되면 그 뒤로 지나가는 모든 비트가 0이 되므로, 어디서 끊겼든 출력은 모두 0이다. 위치를 찾는 열쇠는 캡처다. 기능 경로를 통해 FF들에 값을 잡게 한 뒤 시프트 아웃하면, 끊긴 자리보다 출력 쪽에 있는 셀의 값은 끊긴 자리를 지나지 않으므로 제대로 나온다. 끊긴 자리보다 입력 쪽에 있는 셀의 값은 모두 고착값으로 바뀐다. 제대로 나온 마지막 비트의 위치가 곧 끊긴 자리다.
현실의 캡처 값은 조합 논리가 정하므로 원하는 셀에 원하는 값을 넣기 어렵다. 그래서 진단 도구는 여러 패턴의 결과를 모아 후보 구간을 좁힌다. 고착 말고도 느린 천이(slow-to-rise), 홀드 위반, 간헐 불량이 있어 패턴 종류를 바꿔 가며 본다. 아래 게임은 이 과정을 단순화했다. 원하는 셀 하나에만 반대값을 캡처할 수 있다고 가정하고, 최소 시도로 끊긴 자리를 찾는다.
끊긴 체인 찾기
TB-7 테스트 계획
스캔 체인 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 원천(메모리 출력, 아날로그 경계, 다중 사이클 경로)은 설계에서 막고 남는 것은 체인별 마스크로 처리한다. 모든 스캔 테스트 앞에 체인 테스트를 둔다.
핵심 정리
- 순차 회로는 상태를 만들고 끌어내는 데 여러 클록이 필요해 ATPG가 어렵다. SCOAP의 CC0·CC1·CO가 그 어려움을 숫자로 보여 준다.
- mux-D 스캔 FF는 SE로 기능 입력과 스캔 입력을 고른다. 전체 스캔은 모든 FF를 제어점이자 관측점으로 만들어 순차 회로를 조합 회로처럼 시험하게 한다.
- 패턴 하나는 시프트 인 → 캡처 → 시프트 아웃이며, 언로드와 다음 로드를 겹쳐 전체 시간은 \(T \approx (P+1)L/f_{shift}\)다. 가장 긴 체인이 L을 정하므로 체인 균형이 중요하다.
- 실속도 테스트는 LOC(기능 모드의 두 펄스)와 LOS(마지막 시프트가 론치)로 한다. LOS는 커버리지가 높지만 SE가 한 주기 안에 바뀌어야 한다. 빠른 펄스는 OCC가 PLL에서 골라 낸다.
- 스캔 압축은 케어 비트가 적다는 점을 이용해 디컴프레서로 펼치고 XOR 압축기로 접는다. TB-7은 100배 압축으로 80 s를 0.8 s로 줄인다. X는 압축 출력 전체를 오염시키므로 원천 차단과 마스킹이 필요하다.
- 시프트 전력은 fshift와 토글률에 비례하고, IR 강하가 시프트 주파수의 상한을 정한다. 인접 채우기 같은 저전력 X 채우기가 토글을 크게 줄인다.
- 체인 테스트(0011)가 모든 스캔 테스트에 앞선다. 끊긴 위치는 캡처 뒤 언로드에서 제대로 나온 비트의 경계로 찾는다.
확인 퀴즈
스캔 FF 200만 개, 내부 체인 1,000개, 패턴 9,999개, 시프트 50 MHz다. 스캔 시간은 대략 얼마인가?
LOS가 LOC보다 설계하기 어려운 가장 큰 이유는?
XOR 압축기 출력 하나가 내부 체인 100개를 묶는다. 각 체인 출력이 시프트마다 독립적으로 2% 확률로 X라면, 그 압축 출력 비트가 X가 아닐 확률은 약 얼마인가?
체인 테스트(0011…)에서 출력이 모두 1로 나왔다. 이것으로 알 수 있는 것은?