Chapter 07

BIST와 메모리 테스트

6장의 스캔은 테스트 패턴을 장비가 만들어 칩에 밀어 넣고, 응답을 장비가 받아 비교한다. 패턴이 많아지고 칩 속도가 장비보다 빨라지면 이 방식의 비용이 커진다. 패턴 생성기와 응답 비교기를 칩 안에 넣으면 칩이 스스로 자신을 검사한다. 이것이 내장 자체 테스트(BIST, Built-in self-test)다. 이 장은 BIST의 두 부품인 LFSR과 MISR에서 출발해, 로직 BIST의 구조와 한계, 칩 면적의 큰 몫을 차지하는 내장 메모리의 폴트 모델과 March 알고리즘, 그리고 불량 메모리를 여분 행·열로 고쳐 수율을 되찾는 리페어까지 다룬다.

왜 BIST인가

테스트 장비(ATE)로 하는 테스트는 세 가지 벽에 부딪힌다. 첫째는 대역폭이다. 2장에서 본 것처럼 사이트당 디지털 채널은 수백 개, 채널당 데이터 레이트는 기껏해야 수 Gb/s다. 칩 안에서는 수천만 개의 플립플롭이 수 GHz로 움직인다. 칩 내부 상태를 바깥 핀으로 꺼내 보는 일은 늘 좁은 깔때기를 지난다. 둘째는 속도다. 3.2 GHz로 도는 CPU의 경로 지연을 재려면 그 속도로 패턴을 넣어야 하는데, 장비 핀과 프로브·로드보드를 거친 신호로는 GHz급 엣지를 정확히 배치하기 어렵다. 셋째는 장소다. 장비는 공장에만 있다. 출하된 뒤 자동차나 서버 안에서 칩이 늙어 가는 동안은 아무도 장비를 대 주지 않는다.

BIST는 이 세 벽을 칩 안으로 장비의 일부를 옮겨 넘는다. 구성 요소는 네 개다. 테스트 패턴 생성기(TPG, Test pattern generator)가 입력을 만들고, 검사 대상 회로(CUT, Circuit under test)가 응답하고, 출력 응답 분석기(ORA, Output response analyzer)가 응답을 압축·비교하고, BIST 제어기가 순서를 지휘한다. 장비는 "시작"을 걸고 끝난 뒤 "통과/실패" 한 비트나 시그니처 수십 비트만 읽으면 된다. 장비와의 통로로는 8장의 JTAG가 흔히 쓰인다.

외부 테스트 (ATE) ATE 패턴 메모리비교기 칩(CUT) 패턴응답 채널 수·속도·장비 시간이 모두 병목 BIST ATEJTAG 칩 제어기 TPGLFSR CUT ORAMISR 시작 통과/실패, 시그니처 패턴은 칩 안에서, 실속도로, 현장에서도
외부 테스트와 BIST. 왼쪽은 패턴과 응답이 모두 장비 채널을 지난다. 오른쪽은 패턴 생성(TPG)과 응답 압축(ORA)이 칩 안에 있어 장비는 시작 명령과 결과 몇 비트만 주고받는다.

대가도 있다. BIST 회로는 칩 면적을 쓴다(로직 BIST는 보통 수 %, 메모리 BIST는 메모리 면적의 1~3% 안팎). 의사 난수 패턴은 결정론적 ATPG 패턴보다 커버리지가 낮고, 응답을 압축하면 정보가 사라진다. 실패한 칩에서 "어디가" 틀렸는지 알려면 따로 진단 모드가 필요하다. 그래서 실제 칩은 두 방식을 섞는다. 로직은 6장의 스캔 압축 ATPG를 주력으로 쓰고 로직 BIST는 현장 자가 진단용으로 둔다. 메모리는 거의 언제나 BIST다.

구분외부 테스트(스캔 ATPG)로직 BIST메모리 BIST
패턴 출처ATPG가 계산, 장비 메모리에 저장칩 안 LFSR(의사 난수)칩 안 March 알고리즘(결정론적)
커버리지고착 99%대테스트 포인트 없이 80~90%대, 넣으면 95% 안팎목표 폴트 모델 100%
실속도LOC·LOS로 가능(6장)쉬움쉬움(메모리 클록 그대로)
진단실패 패턴·비트 단위로 좋음어려움(시그니처뿐)좋음(실패 주소·비트 기록)
현장 사용불가전원 켤 때·주기 검사전원 켤 때 검사·소프트 리페어
면적스캔 FF·압축기PRPG·MISR·테스트 포인트, 수 %제어기·비교기, 메모리의 1~3%
TB-7에서 BIST가 맡는 것내장 SRAM 24 MB(인스턴스 약 2,000개)는 장비로 패턴을 밀어 넣어 검사할 수 없다. 메모리 BIST(MBIST)가 웨이퍼 테스트에서 모든 셀을 검사하고, 실패한 인스턴스를 여분 행·열로 고친다. 로직 BIST는 출하 뒤 스마트폰이 켜질 때 스스로를 점검하는 데 쓴다.

LFSR: 칩 안의 난수 생성기

BIST의 패턴 생성기는 거의 언제나 선형 되먹임 시프트 레지스터(LFSR, Linear feedback shift register)다. 플립플롭 n개를 시프트 레지스터로 잇고, 몇몇 단의 출력을 XOR해 입력으로 되돌린다. 게이트 몇 개로 만들 수 있고, 클록마다 n비트 상태가 바뀌며, 상태 수열이 난수처럼 보인다. 그러나 완전히 결정론적이어서 같은 씨앗(seed)에서 시작하면 늘 같은 수열이 나온다. BIST에는 이 점이 중요하다. 정상 칩의 응답을 미리 시뮬레이션해 둘 수 있기 때문이다.

되먹임 위치는 특성 다항식(Characteristic polynomial)으로 적는다. 단 i에서 되먹임이 있으면 \(c_i = 1\)이다.

$$f(x) = 1 + c_1 x + c_2 x^2 + \cdots + c_{n-1}x^{n-1} + x^n,\qquad c_i \in \{0,1\}$$
덧셈은 XOR(GF(2))다. 0이 아닌 상태에서 출발한 LFSR은 최대 \(2^n-1\)개의 서로 다른 상태를 돌고 처음으로 돌아온다. 모두 0인 상태는 자기 자신으로만 가므로 빠진다.

모든 다항식이 최대 길이를 주지는 않는다. \(f(x)\)가 원시 다항식(Primitive polynomial)일 때만 주기가 \(2^n-1\)이 된다. 원시 다항식은 기약(irreducible)이면서, \(x^k \equiv 1 \pmod{f}\)를 만족하는 가장 작은 k가 \(2^n-1\)인 다항식이다. 기약이 아니면 주기가 씨앗에 따라 달라지고, 기약이지만 원시가 아니면 주기가 \(2^n-1\)의 진약수가 된다. n비트 원시 다항식의 수는 오일러 함수로 센다.

$$N_{\text{prim}}(n) = \frac{\varphi(2^n-1)}{n}$$
n = 4이면 \(\varphi(15)/4 = 8/4 = 2\)개(\(1+x+x^4\), \(1+x^3+x^4\)), n = 8이면 16개, n = 32이면 약 6,700만 개다. 실무에서는 XOR 수를 줄이려고 항이 셋(삼항식)이나 다섯인 것을 고른다.

같은 다항식을 두 가지 방식으로 만들 수 있다. 피보나치형(Fibonacci, external XOR)은 되먹임 단의 출력을 XOR 트리 하나로 모아 첫 단에 넣는다. 갈루아형(Galois, internal XOR)은 마지막 단 출력을 되먹임 위치마다 XOR로 끼워 넣는다. 갈루아형은 단과 단 사이에 XOR 하나만 있어 빠르고, 피보나치형은 XOR 트리의 깊이만큼 느리지만 상태가 단순 시프트라 이해하기 쉽다. 두 형태의 주기는 같고, 상태 수열의 순서만 다르다.

피보나치형 (외부 XOR) f(x) = 1 + x³ + x⁴ S1 S2 S3 S4 출력 c₃ = 1c₄ = 1 (항상) 갈루아형 (내부 XOR) 같은 f(x) S1 S2 S3 S4 출력 c₃: S3과 S4 사이 XOR
두 가지 LFSR. 위: S3과 S4를 XOR해 S1로 되돌린다. 아래: S4의 출력을 S1으로 되돌리면서 S3→S4 경로에 XOR로 끼워 넣는다. 둘 다 \(f(x) = 1 + x^3 + x^4\)(원시)이어서 0이 아닌 15개 상태를 모두 돈다.
SIMULATOR

LFSR 놀이터: 탭을 눌러 주기를 바꿔 보자

구조
다항식 f(x)—
현재 상태—
주기 / 최대 2ⁿ−1—
판정—
이 n의 원시 다항식 (탭 집합)—
해볼 것: ① 레지스터 칸 위의 작은 원(탭)을 눌러 되먹임 위치를 켜고 끈다. 마지막 단의 탭은 항상 켜져 있다. 주기와 판정이 즉시 바뀐다. ② n = 4에서 탭 {1}만, {3}만, {1,2,3}을 차례로 켜 보자. {1,2,3}(\(1+x+x^2+x^3+x^4\))은 기약이지만 원시가 아니어서 주기가 5다. ③ "실행"을 누르면 아래 격자(모든 상태 값)가 방문 순서대로 칠해진다. 최대 길이면 0을 뺀 모든 칸이 칠해진다. 비원시 다항식에서 "씨앗으로"의 씨앗을 바꾸려면 격자의 칸을 눌러 그 상태에서 출발한다. ④ 피보나치형과 갈루아형을 바꿔도 주기는 같고, 방문 순서만 달라진다. (주기는 현재 씨앗에서 출발해 처음 상태로 돌아올 때까지 직접 센 값이다.)
n원시 다항식의 예주기 2ⁿ−1원시 다항식 수
31 + x² + x³72
41 + x³ + x⁴152
51 + x³ + x⁵316
81 + x⁴ + x⁵ + x⁶ + x⁸25516
161 + x⁴ + x¹³ + x¹⁵ + x¹⁶65,5352,048
321 + x + x² + x²² + x³²약 4.3 × 10⁹약 6.7 × 10⁷

로직 BIST의 패턴 생성기(PRPG, Pseudo-random pattern generator)는 보통 24~64비트 LFSR이다. 32비트면 주기가 40억을 넘어 패턴 수십만 개를 써도 반복이 없다. 다만 LFSR 이웃 단끼리는 한 클록 늦은 같은 비트라 서로 강하게 상관되어 있다. 그대로 여러 스캔 체인에 나눠 넣으면 체인끼리 같은 수열이 한 칸씩 밀린 꼴이 된다. 이를 깨려고 LFSR 출력 뒤에 XOR 망인 위상 변환기(Phase shifter)를 둔다.

MISR와 시그니처 분석

패턴을 칩 안에서 만들었으면 응답도 칩 안에서 처리해야 한다. 스캔 체인 수천 개가 수천 패턴 동안 내놓는 응답 비트는 수천억 개다. 이를 모두 기대값과 비교하려면 기대값을 저장할 메모리가 필요한데, 그 메모리가 칩보다 클 것이다. 그래서 응답을 짧은 시그니처(Signature)로 압축하고, 마지막에 시그니처 하나만 기대값과 비교한다.

압축기로는 LFSR에 입력을 더한 구조를 쓴다. 입력이 한 줄이면 직렬 시그니처 레지스터(SISR), 여러 줄이 각 단에 XOR로 들어가면 다중 입력 시그니처 레지스터(MISR, Multiple-input signature register)다. 수학적으로 SISR은 입력 비트열을 다항식으로 보고 특성 다항식으로 나눈 나머지를 남긴다. 그래서 이 방식을 시그니처 분석이라 부른다. 1970년대 HP가 보드 고장 진단용으로 쓴 데서 이름이 왔다.

CUT의 응답 (스캔 체인 출력) D1~D4가 매 클록 각 단에 XOR로 들어간다 D1D2D3D4 S1 S2 S3 S4 되먹임 f(x) = 1 + x³ + x⁴ : S4 → S1, S4 → (S3과 S4 사이) 모든 패턴이 끝난 뒤 S1~S4가 시그니처. 정상 칩의 시그니처와 같으면 통과.
4비트 MISR. 갈루아형 LFSR의 각 단 앞에 응답 입력을 XOR한다. 회로가 선형이므로 불량 칩의 시그니처는 정상 시그니처에 "오류열만 넣었을 때의 시그니처"를 XOR한 것과 같다.

압축에는 대가가 따른다. 서로 다른 응답 수천억 비트가 n비트 시그니처로 접히므로, 틀린 응답이 우연히 정상과 같은 시그니처를 낼 수 있다. 이를 별칭(Aliasing)이라 한다. MISR가 선형이라는 점이 분석을 쉽게 한다. 정상 응답을 R, 오류열을 E라 하면 시그니처는 \(S(R \oplus E) = S(R) \oplus S(E)\)다. 별칭은 0이 아닌 E가 \(S(E) = 0\)을 만들 때 일어난다. 오류열이 충분히 길고 무작위라면 \(S(E)\)는 \(2^n\)가지 값에 고르게 퍼지므로

$$P_{\text{alias}} \approx 2^{-n}$$
n: MISR 비트 수. 원시 다항식이고, 오류가 충분히 길고 무작위일 때의 점근값이다. 16비트면 약 1.5 × 10⁻⁵, 32비트면 약 2.3 × 10⁻¹⁰.

이 근사가 깨지는 경우도 알아 둬야 한다. 오류가 한 비트뿐이면 MISR는 절대 별칭을 내지 않는다. 선형 사상이 가역이어서 0이 아닌 입력 하나는 0이 아닌 상태를 남기기 때문이다. 반대로 구조적인 오류는 \(2^{-n}\)보다 훨씬 자주 별칭을 낼 수 있다. MISR의 i번째 입력에 시각 t의 오류가, (i+1)번째 입력에 시각 t+1의 오류가 나면 첫 오류가 한 칸 밀려 온 자리에서 둘째 오류와 정확히 상쇄된다. 이웃 스캔 체인이 같은 결함을 한 클록 차이로 보는 일은 드물지 않다. 그래서 실제 설계는 MISR 앞에 공간 압축기를 두고 MISR 폭을 넉넉히(32~64비트) 잡는다.

SIMULATOR

MISR 별칭 실험: 오류를 넣고 시그니처가 속는 비율을 잰다

오류 종류
오류가 있었던 시행—
별칭(시그니처 일치)—
측정 별칭률—
이론 2⁻ⁿ—
해볼 것: ① n = 6에서 "이 폭으로 실행". 측정값이 이론선 \(2^{-6} \approx 1.6\%\) 근처에 찍힌다. ② "4~16비트 모두"로 점들이 2⁻ⁿ 직선을 따르는지 본다. 12비트를 넘으면 시행 수가 모자라 0이 자주 나온다(그때는 속이 빈 역삼각형으로 상한만 표시). ③ "한 비트"로 바꾸면 별칭이 0이다. ④ "대각선 쌍"(입력 i의 시각 t와 입력 i+1의 시각 t+1에 오류)은 폭과 상관없이 거의 100% 별칭이다. 위쪽 띠는 마지막으로 별칭이 난 시행의 오류 위치(가로 시각, 세로 입력)다. (원시 다항식 갈루아형 MISR. 선형성을 이용해 오류열만 넣고 시그니처가 0인지 본다. 비트 오류는 독립 베르누이.)

로직 BIST: STUMPS와 테스트 포인트

로직 BIST의 표준 구조는 STUMPS(Self-test using MISR and parallel shift register sequence generator)다. 6장의 스캔 체인을 그대로 쓴다. PRPG가 위상 변환기를 거쳐 모든 스캔 체인에 동시에 의사 난수 비트를 밀어 넣고, 체인 길이만큼 시프트한 뒤 캡처 클록 한두 번으로 회로의 응답을 플립플롭에 잡는다. 다음 시프트 동안 그 응답이 체인 끝에서 공간 압축기를 거쳐 MISR로 들어가고, 동시에 다음 패턴이 들어온다. 이를 수천~수만 번 되풀이한 뒤 MISR 값을 읽는다.

PRPGLFSR 위상변환기 CUT: 스캔 체인 + 조합 논리 ⋮ 체인 수천 개 CP OP 공간압축기 MISR시그니처 BIST 제어기 (패턴 카운터·시프트 카운터) CP: 제어 테스트 포인트, OP: 관측 테스트 포인트, X 발생원은 막아 둔다(X-bounding)
STUMPS. PRPG 하나가 위상 변환기를 거쳐 모든 체인을 채우고, 체인 출력은 압축기를 거쳐 MISR 하나로 모인다. 미정값(X)이 MISR에 들어가면 시그니처 전체가 쓸모없어지므로 초기화되지 않은 메모리 출력이나 아날로그 경계 같은 X 발생원은 설계 단계에서 막는다.

로직 BIST의 약점은 랜덤 패턴 저항 폴트(Random-pattern-resistant fault)다. 16입력 AND 게이트 출력의 고착-0 폴트를 검출하려면 16개 입력이 모두 1이어야 하는데, 무작위 패턴에서 그 확률은 \(2^{-16} \approx 1.5\times10^{-5}\)이다. 한 패턴의 검출 확률이 p인 폴트를 N개 패턴 안에 한 번이라도 검출할 확률은

$$P_{\text{det}}(N) = 1 - (1-p)^N \approx 1 - e^{-pN},\qquad N_{95\%} \approx \frac{3}{p}$$
p = 2⁻¹⁶이면 95% 확률로 잡는 데 약 20만 패턴이 필요하다. 32비트 비교기의 "같음" 출력이라면 \(2^{-32}\)이어서 사실상 영원히 걸리지 않는다.

이런 폴트가 회로 곳곳에 있어 커버리지 곡선은 처음에 빠르게 오르다 곧 평평해진다. 패턴 수를 열 배 늘려도 몇 %p밖에 안 오른다. 해법은 회로를 고치는 것이다. 제어 포인트(Control point)는 테스트 모드에서 노드를 강제로 0이나 1 쪽으로 기울이는 AND/OR 게이트를 넣어 깊은 노드의 활성화 확률을 올리고, 관측 포인트(Observation point)는 관측이 어려운 노드를 스캔 FF로 바로 뽑아낸다. 보통 FF 수의 0.1~1% 정도의 테스트 포인트로 고착 커버리지를 90%대 중반까지 올린다. 남는 폴트는 결정론적 패턴을 PRPG 씨앗으로 넣는 방식(reseeding)이나 외부 ATPG로 덮는다.

SIMULATOR

랜덤 패턴 커버리지와 테스트 포인트

고착 커버리지—
95% 도달 패턴 수—
테스트 포인트 블록—
BIST 시간 (체인 2,000 FF, 100 MHz)—
해볼 것: ① 패턴 재생을 눌러 폴트(작은 칸)가 검출되며 켜지는 모습을 본다. 대부분은 수백 패턴 안에 켜지지만 비교기·디코더 블록에 숨은 폴트는 10⁶ 패턴이 지나도 어둡다. ② 어두운 블록을 눌러 테스트 포인트를 넣는다. 그 블록의 폴트가 쉬워져 곡선(실선)이 테스트 포인트 없는 곡선(점선)보다 위로 올라선다. ③ 어느 블록 몇 개에 넣어야 5,000 패턴(TB-7 현장 자가 진단 예산, 약 0.1 s)에서 95%를 넘는지 찾아보자. 회색 칸은 중복 논리라 원래 검출 불가한 폴트다. (블록마다 폴트 50개. 쉬운 폴트의 검출 확률은 10⁻²·⁶~0.5, 블록마다 정해진 비율의 랜덤 패턴 저항 폴트는 블록별 범위에서 로그 균등하게 뽑았다. 테스트 포인트는 그 블록의 저항 폴트 검출 확률을 0.01~0.2로 올린다고 가정.)
현장 자가 진단에 쓰는 이유LBIST는 커버리지로 ATPG를 이기지 못한다. 대신 장비 없이 칩 혼자 돌 수 있다. 차량용 칩은 기능 안전 규격(ISO 26262) 때문에 시동 때마다, 주행 중에도 주기적으로 LBIST를 돌려 잠재 고장을 찾는다. 모바일 SoC인 TB-7도 전원을 켤 때 짧은 LBIST로 노화로 생긴 고장을 걸러 시스템에 알린다. 현장 고장의 경제학은 14장에서 다시 다룬다.

메모리 폴트 모델

칩에서 가장 조밀한 구조는 메모리다. 5 nm급 고밀도 SRAM 비트셀은 약 0.02 µm²로, 같은 면적의 로직보다 트랜지스터와 배선이 몇 배 빽빽하다. 그래서 같은 결함 밀도라도 메모리 배열은 결함에 더 민감하고, 결함의 증상도 로직과 다르다. 로직의 고착 폴트 모델만으로는 "셀 하나가 이웃 셀을 쓸 때 뒤집힌다" 같은 증상을 표현할 수 없다. 메모리에는 따로 기능 폴트 모델을 쓴다.

행디코더 S a v 열 MUX · 감지 증폭기 · 쓰기 구동 셀 배열 (행 = 워드선, 열 = 비트선 쌍) 이 장의 폴트 모델 S: 고착(SAF)·천이(TF) — 셀 하나 a → v: 결합 폴트(CF) — 두 셀 행 전체: 워드선 단선, 디코더 폴트(AF) 이웃 패턴 민감(NPSF): 주변 4~8셀의 값에 반응 데이터 보존(DRF): 시간이 지나면 값을 잃음 주변 회로 폴트는 대개 여러 셀의 증상으로 보인다 불량 행·열은 여분으로 교체(8절)
SRAM 배열과 폴트. 셀 하나에 갇힌 폴트(S), 한 셀의 동작이 다른 셀을 건드리는 결합 폴트(a → v), 행·열 단위의 폴트가 서로 다른 테스트를 요구한다. 셀 배열이 아니라 디코더가 망가지면 주소와 셀의 대응이 깨진다.
폴트표기증상물리적 원인의 예검출 조건
고착 폴트
SAF
SA0, SA1셀이 늘 0(1)셀 노드와 전원·접지 단락셀에 0과 1을 각각 쓰고 읽는다
천이 폴트
TF
⟨↑/0⟩, ⟨↓/1⟩0→1(1→0) 전환이 안 됨풀업 트랜지스터 단선, 접근 트랜지스터 저항↑ 쓰기 뒤 읽기, ↓ 쓰기 뒤 읽기
반전 결합
CFin
⟨↑;↕⟩, ⟨↓;↕⟩공격 셀 a의 전환이 희생 셀 v를 뒤집음두 셀 저장 노드 사이 용량성·저항성 결합a를 전환시킨 뒤 v를 읽는다(두 순서 모두)
멱등 결합
CFid
⟨↑;0⟩ 등 4종a의 전환이 v를 특정 값으로 만듦같은 원인, 비대칭v가 반대 값일 때 a를 전환, 이를 양방향으로
상태 결합
CFst
⟨0;0⟩ 등 4종a가 어떤 상태에 있는 동안 v가 고정셀 사이 누설 경로a의 두 상태 각각에서 v의 두 값을 확인
주소 디코더
AF
4종주소가 셀에 닿지 않음, 셀이 주소에 안 닿음, 한 주소가 여러 셀, 여러 주소가 한 셀디코더 게이트 폴트, 워드선 단선·단락오름차순 ⇑(rx,…,wx̄)와 내림차순 ⇓(rx̄,…,wx)
이웃 패턴 민감
NPSF
능동·수동·정적주변 셀들의 특정 패턴에서 셀이 오동작조밀한 배열의 누설·결합이웃 패턴을 모두 만드는 전용 테스트(길이 수십 N 이상)
데이터 보존
DRF
DRF0, DRF1시간이 지나면 값을 잃음풀업 경로 단선, 높은 누설쓴 뒤 수십 ms 기다렸다 읽는다(Del)

표기 ⟨S;F⟩에서 S는 폴트를 깨우는 조건, F는 결과다. 결합 폴트 ⟨↑;0⟩은 "공격 셀이 0에서 1로 바뀌면 희생 셀이 0이 된다"는 뜻이다. 한 셀의 폴트는 여섯 가지 남짓이지만 두 셀의 결합 폴트는 셀 쌍마다 생길 수 있어 수가 \(N^2\)에 비례한다. 모든 쌍을 따로 검사하면 \(O(N^2)\) 시간이 들어 메가비트 메모리에는 불가능하다. 다음 절의 March 알고리즘은 주소를 정해진 순서로 쓸고 지나가는 것만으로 이 모든 쌍을 \(O(N)\) 시간에 덮는다.

폴트 모델은 늘어난다위 모델은 한 번의 연산으로 깨어나는 정적 폴트다. 미세 공정에서는 같은 셀에 연속 두 번 연산해야 드러나는 동적 폴트(예: 쓰기 직후 읽기에서만 틀리는 dRDF)나, 읽기가 셀을 뒤집는 읽기 교란 폴트(RDF), 기대 값을 돌려주면서도 셀을 뒤집는 기만적 읽기 폴트(DRDF)가 중요해졌다. 이들을 잡으려고 March SS(22N), March RAW 같은 더 긴 알고리즘이 쓰인다.

March 알고리즘

March 테스트는 몇 개의 March 원소를 차례로 실행한다. 원소 하나는 "주소 순서 + 연산 목록"이다. 주소를 그 순서로 하나씩 방문하면서 각 주소에서 연산 목록을 다 실행한 뒤 다음 주소로 간다. 표기법은 다음과 같다.

기호뜻
⇑주소 오름차순 (0 → N−1)
⇓주소 내림차순 (N−1 → 0). ⇑의 정확한 역순이면 어떤 순서든 된다
⇕순서 무관
w0, w10(1) 쓰기
r0, r1읽어서 0(1)이 나와야 함. 다르면 실패
Del정해진 시간 동안 기다림(데이터 보존 테스트)

가장 널리 쓰이는 March C−는 원소 여섯 개, 주소당 연산 10번이다.

$$\text{March C-}:\ \{\ \Updownarrow(w0);\ \Uparrow(r0,w1);\ \Uparrow(r1,w0);\ \Downarrow(r0,w1);\ \Downarrow(r1,w0);\ \Updownarrow(r0)\ \}\quad \to 10N$$
N: 주소(워드) 수. 테스트 시간 \(T = 10N/f\). 16K 워드 인스턴스를 500 MHz로 돌리면 약 0.33 ms.

왜 이 순서가 결합 폴트를 잡는지 따라가 보자. 공격 셀 a가 희생 셀 v보다 낮은 주소에 있고 폴트가 ⟨↑;↕⟩라 하자. 둘째 원소 ⇑(r0,w1)은 오름차순이므로 a를 먼저 방문해 1을 쓴다. 이때 v가 뒤집혀 1이 된다. 그 뒤에 v를 방문하면 r0을 기대하는데 1이 나온다. 검출이다. 반대로 a가 v보다 높은 주소에 있으면 v를 먼저 읽고 지나간 뒤에 a가 바뀌므로 둘째 원소로는 못 잡는다. 그래서 같은 일을 내림차순으로 한 번 더 한다. ⇑와 ⇓, 0→1과 1→0의 네 조합을 모두 갖춘 것이 March C−다.

각 막대: 원소 실행 중 메모리 (위가 주소 0), 진한 부분 = 1 M0⇕(w0) M1⇑(r0,w1) M2⇑(r1,w0) M3⇓(r0,w1) M4⇓(r1,w0) M5⇕(r0) 현재 주소 모두 00을 1로1을 0으로역순 0→1역순 1→0확인
March C−의 진행. 원소 M1~M4는 각각 "아직 방문하지 않은 쪽은 옛 값, 지나간 쪽은 새 값"인 상태로 메모리를 쓸고 간다. 현재 주소의 셀을 바꾸는 순간 그 영향은 아직 읽지 않은 쪽(화살표 앞쪽) 셀에서 드러난다. 오름·내림차순과 0→1·1→0의 네 조합이 모든 공격·희생 배치를 덮는다.
알고리즘원소길이SAFTFAFCFinCFidCFst
MATS⇕(w0); ⇕(r0,w1); ⇕(r1)4N전부약 75%전부*일부일부일부
MATS+⇕(w0); ⇑(r0,w1); ⇓(r1,w0)5N전부약 75%전부일부일부일부
March X⇕(w0); ⇑(r0,w1); ⇓(r1,w0); ⇕(r0)6N전부전부전부전부약 60%약 80%
March Y⇕(w0); ⇑(r0,w1,r1); ⇓(r1,w0,r0); ⇕(r0)8N전부전부전부전부약 60%약 80%
March C−위 식10N전부전부전부전부전부전부

표의 백분율은 아래 시뮬레이터로 64셀 메모리에 폴트를 하나씩 넣어 얻은 값이다(*MATS의 AF는 이 시뮬레이터가 넣는 "두 주소가 한 셀" 유형 기준). 길이 차이는 크지 않아 보이지만 TB-7처럼 24 MB를 여러 데이터 배경과 전압 조건에서 돌리면 1N이 곧 수 ms다. 그래서 목표 폴트 모델을 다 덮는 가장 짧은 알고리즘을 고르는 것이 메모리 테스트 설계의 출발점이다.

SIMULATOR

March 알고리즘 실행기: 폴트를 심고 쓸어 보자

알고리즘
심을 폴트 (배열을 눌러 위치 지정)
결합 조건 (CF: 공격 셀 ↑/↓·상태, 희생 값 / DRF: 잃는 값)
길이—
진행—
심은 폴트—
결과—
해볼 것: ① CFin을 고른 채 배열의 칸 두 개를 차례로 누른다(먼저 공격 a, 다음 희생 v). "실행"으로 주소 쓸기를 보며 어느 원소에서 검출되는지 확인한다. ② 같은 폴트로 MATS+를 돌리면 a와 v의 위치에 따라 놓친다. a를 v보다 뒤 주소로 옮겨 다시 해 보자. ③ CFid ⟨↑;1⟩(a ↑, v → 1)을 March X로 돌려 놓치는 배치를 찾고, March C−로 잡히는지 본다. ④ DRF는 표준 March 모두 놓친다. 직접 입력에 del을 넣으면 잡힌다. ⑤ 아래 표는 64셀 메모리의 모든 단일 셀 폴트와 결합 폴트 약 920쌍에 대해 같은 알고리즘을 돌린 검출률이다. (비트 단위 메모리, 주소 = 행 × 8 + 열. AF는 "주소 a가 셀 b를 가리켜 셀 a는 접근 불가" 유형. 초기 내용은 임의값.)

실제 메모리는 비트가 아니라 워드(32~144비트) 단위로 읽고 쓴다. 한 워드 안의 비트끼리 생기는 결합 폴트를 잡으려면 같은 March를 여러 데이터 배경(Data background)으로 반복한다. 모두 0/1 대신 0101…, 0011…, 00001111… 같은 배경을 쓰면 워드 폭 w에 대해 \(\lceil\log_2 w\rceil + 1\)개 배경으로 워드 안 모든 비트 쌍이 서로 다른 값을 한 번씩 갖는다. 물리 배치도 중요하다. 논리 주소와 물리 위치가 다르게 섞여 있으면(scrambling) "이웃"이 주소상 이웃이 아니므로, 체커보드처럼 물리 배치를 따르는 배경은 스크램블 정보를 알아야 만들 수 있다.

MBIST 제어기

메모리 BIST 제어기는 March 알고리즘을 하드웨어로 돌리는 작은 상태 기계다. 주소 생성기(⇑/⇓ 카운터), 데이터 생성기(배경과 반전), 연산 순서기, 비교기, 그리고 실패를 기록하는 회로로 이루어진다. 알고리즘을 회로에 고정하는 방식과, 원소·연산을 명령어처럼 레지스터에 올려 실리콘이 나온 뒤에도 알고리즘을 바꿀 수 있게 하는 프로그래머블 MBIST가 있다. 요즘은 대개 프로그래머블을 쓴다. 양산 중 새로운 폴트가 보이면 테스트 프로그램만 바꿔 대응할 수 있기 때문이다.

MBIST 제어기 순서기 FSM 알고리즘 레지스터 주소 생성 ⇑⇓ 데이터 배경 비교기 BIRA SRAM 인스턴스 여분 행·열 주소·연산 읽은 값 eFuse리페어 정보 실패 주소 → 할당 결과 → 퓨즈 굽기 켤 때 로드 IJTAG(8장)
MBIST 구조. 제어기가 주소·데이터·연산을 메모리에 넣고, 읽은 값을 기대값과 비교한다. 실패 주소는 내장 리페어 분석기(BIRA)가 받아 여분 행·열 할당을 계산하고, 결과는 eFuse에 기록되어 전원을 켤 때마다 메모리의 리페어 레지스터로 옮겨진다. 제어기 시작·결과 읽기는 8장의 IJTAG 망을 통한다.

제어기 하나가 메모리 인스턴스 수십 개를 맡는다. 같은 March를 여러 인스턴스에 동시에 돌리면 빠르지만 동시에 스위칭하는 셀이 많아 전력이 치솟는다. 그래서 인스턴스를 전력 예산에 맞춰 묶음으로 나눠 차례로 돌린다. 실패가 나면 두 가지 중 하나를 한다. 생산 모드에서는 실패 주소를 BIRA로 보내 리페어 여부만 판정한다. 진단 모드에서는 실패한 주소·비트를 모두 꺼내 비트맵(Fail bitmap)을 그린다. 비트맵의 모양(단일 비트, 행, 열, 십자, 덩어리)은 결함의 종류를 말해 주므로 수율 분석의 핵심 자료가 된다. 비트맵 무늬 분석은 YieldBook이 다룬다.

TB-7의 MBIST 시간

TB-7의 SRAM 24 MB는 약 2억 비트다. 64비트 워드로 치면 약 310만 워드, March C−는 \(10N \approx 3{,}100\)만 사이클이다. 제어기 40개가 고르게 나눠 맡으면 제어기당 약 79만 사이클, 500 MHz에서 약 1.6 ms다. 데이터 배경 4개, 전압 두 조건(Vmin·Vmax)을 곱하면 약 13 ms, 여기에 데이터 보존 테스트(쓰고 약 50 ms 기다렸다 읽기, 0과 1 두 번)가 약 100 ms를 더한다. 리페어 분석과 퓨즈 굽기까지 합쳐 MBIST는 웨이퍼 테스트 4 s 가운데 약 0.2 s를 쓴다. 기다리는 시간이 대부분이라 보존 테스트는 다른 테스트와 겹쳐 돌리기도 한다.

$$T_{\text{MBIST}} \approx \frac{10\,N_{\text{word}}}{n_{\text{ctrl}}\,f}\times n_{\text{bg}}\times n_{V} + T_{\text{ret}} \approx \frac{10\times3.1\times10^{6}}{40\times500\,\text{MHz}}\times4\times2 + 0.1\,\text{s}\approx 0.11\,\text{s}$$
\(n_{\text{bg}}\): 데이터 배경 수, \(n_V\): 전압 조건 수, \(T_{\text{ret}}\): 보존 테스트 대기 시간. 실제로는 전력 제한으로 병렬도가 낮아져 이보다 길어진다.

메모리 리페어와 수율

메모리는 조밀해서 결함에 약하지만, 규칙적이어서 고치기 쉽다. 배열에 여분 행·열(Spare rows/columns, redundancy)을 몇 개 더 만들어 두고, 불량 셀이 있는 행이나 열의 주소가 들어오면 여분으로 돌린다. 어느 주소를 돌릴지는 eFuse(전류로 끊는 전기 퓨즈)나 안티퓨즈에 기록한다. DRAM은 이 방식이 없으면 상업적으로 존재할 수 없고, 큰 SRAM을 가진 SoC에도 필수다.

여분 행 여분 열 불량 5비트: 행 하나 + 열 하나로 수리 주소 비교 회로 퓨즈: 행 1 = 들어온 행 주소 일치 → 여분 행 켤 때 퓨즈 값을 리페어 레지스터로 옮기고, 매 접근마다 주소를 비교해 원래 행 대신 여분 행의 워드선을 켠다.
행·열 리페어. 같은 행에 불량이 둘(행 1), 같은 열에 셋(열 4)이므로 여분 행 1개와 여분 열 1개로 다섯 비트가 모두 고쳐진다. 비트마다 따로 고쳤다면 여분 다섯 개가 필요했다.

여분 행 R개, 여분 열 C개로 불량 비트를 모두 덮는 할당을 찾는 문제는 이분 그래프의 정점 덮개 문제로 바뀌며, 일반적으로 NP-완전이다. 그러나 실제 메모리의 불량 수는 적어서 두 단계로 빠르게 푼다. 먼저 must-repair 분석이다. 어떤 행에 불량이 남은 여분 열 수보다 많으면 열로는 그 행을 다 고칠 수 없으므로 반드시 여분 행을 써야 한다. 열도 마찬가지다. 이를 더 바뀌지 않을 때까지 되풀이한다. 그다음 남은 희소한 불량에 대해 가능한 할당을 모두 시도하거나 분기 한정법으로 찾는다. BIRA 하드웨어는 이 과정을 테스트와 동시에 처리한다.

GAME

메모리 리페어 퍼즐: 여분 행 2개, 열 2개

난이도
불량 비트—
사용한 여분 (행/열)—
남은 불량—
점수 (성공/시도)0 / 0
판정행 번호(왼쪽)나 열 번호(위쪽)를 눌러 여분을 할당한다.
해볼 것: ① 불량이 셋 이상 몰린 행·열부터 보자. 여분 열이 2개뿐이니 불량 3개 이상인 행은 반드시 여분 행을 써야 한다(must-repair). ② 모든 불량이 덮이면 성공이다. 수리할 수 없다고 판단되면 "수리 불가 선언"을 누른다. 맞으면 점수가 오른다. ③ "자동 해법"은 must-repair 뒤 남은 행·열 조합을 모두 시도한 결과다. ④ 어려움 단계는 흩어진 단일 비트가 많아 행·열 수보다 불량 비트가 많아진다. (16 × 16 배열. 불량은 단일 비트, 행·열 단위 불량, 2 × 2 덩어리를 섞어 만든다.)

리페어가 수율을 얼마나 되찾는지는 결함 수의 분포로 계산한다. 메모리 하나에 떨어지는 결함 수가 평균 λ인 포아송 분포를 따르고 결함 하나가 여분 하나를 쓴다고 단순화하면, 여분 S개로 고칠 수 있는 확률은

$$Y_S = \sum_{k=0}^{S} \frac{e^{-\lambda}\lambda^k}{k!},\qquad Y_S^{\text{NB}} = \sum_{k=0}^{S}\frac{\Gamma(k+\alpha)}{k!\,\Gamma(\alpha)}\frac{(\lambda/\alpha)^k}{(1+\lambda/\alpha)^{k+\alpha}}$$
오른쪽은 결함이 뭉쳐 떨어지는 효과를 군집 계수 α로 넣은 음이항 모델(YieldBook의 수율 모델 장 참고). α가 작을수록 뭉침이 심하고, 같은 평균에서 결함 0개인 다이가 많아진다.

TB-7에 적용해 보자. 다이 전체의 치명 결함 평균은 \(D_0 A = 0.2 \times 0.81 \approx 0.16\)이고, 이것만으로 수율은 \(e^{-0.16} \approx 85\%\)다. 그런데 메모리 배열은 로직보다 훨씬 조밀해 같은 공정에서 추가로 평균 약 0.036개의 결함을 겪는다. 리페어가 없으면 \(e^{-0.16-0.036} \approx 82\%\)다. 결함이 2,000개 인스턴스에 흩어지므로 한 인스턴스에 둘 이상 떨어질 확률은 매우 작고, 여분 하나만 있어도 거의 모두 고쳐진다. 고칠 수 없는 것은 디코더·감지 증폭기 같은 주변 회로에 떨어진 결함이다. 리페어 뒤 수율이 약 85%로 돌아오는 이유다.

SIMULATOR

리페어 수율 곡선과 TB-7

결함 수 분포
인스턴스당 여분
리페어 전 수율—
리페어 뒤 수율—
회복 (%p)—
웨이퍼당 추가 양품 (780개 중)—
해볼 것: ① 위 그래프는 메모리 하나의 리페어 수율을 평균 결함 수 λ에 대해 그린다. 여분 0~4개 곡선을 비교하자. λ = 1에서 여분 0개는 37%, 2개는 92%다. ② 음이항으로 바꾸고 α를 줄이면 여분 없는 곡선은 올라가고 여분 많은 곡선은 내려간다. 뭉친 결함은 한 메모리에 몰려 여분을 다 써 버린다. ③ 아래 그래프는 TB-7 칩 수율이다. D₀ = 0.2에서 82% → 85%를 확인하고, D₀를 키우면 리페어의 가치가 커지는 것을 본다. ④ 주변 회로 결함 비율을 올리면 리페어 뒤 수율이 내려간다. (TB-7 로직 치명 면적 0.81 cm², 메모리 추가 실효 면적 0.18 cm², 인스턴스 2,000개에 고르게 분배, 결함 하나가 여분 하나를 쓴다고 가정.)

TB-7 테스트 계획

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

SRAM 24 MB는 MBIST(March C−, 10N)로 검사·리페어, 로직 BIST는 현장 자가 진단

SRAM 인스턴스 약 2,000개를 MBIST 제어기 40개에 나눠 맡긴다. 기본 알고리즘은 March C−(10N)로, SAF·TF·AF와 단순 결합 폴트 전부를 덮는다. 워드 안 결합을 위해 데이터 배경 4개를 쓰고, Vmin·Vmax 두 전압에서 돌리며, 50 ms 대기의 보존 테스트를 더한다. 계산하면 웨이퍼 테스트 4 s 가운데 약 0.2 s다. 실패 주소는 BIRA가 must-repair와 탐색으로 여분 행·열(인스턴스당 행 2·열 2)에 할당하고, 결과를 압축해 eFuse에 굽는다. 리페어 덕분에 웨이퍼 수율이 약 82%에서 85%로 오른다. 웨이퍼당 양품 다이가 약 23개 늘어나는 셈이다.

로직 BIST는 양산 커버리지용이 아니라 출하 뒤 전원을 켤 때의 자가 진단에 쓴다. 64비트 PRPG·MISR, 패턴 약 5,000개(체인 2,000 FF를 100 MHz로 시프트해 약 0.1 s), 테스트 포인트를 FF의 약 0.1% 넣어 고착 커버리지 90%대 중반을 목표로 한다. 64비트 MISR의 별칭 확률은 약 5 × 10⁻²⁰로 무시할 수 있다.

이 장의 결정MBIST March C− + 배경 4개 + 보존 테스트, 웨이퍼 테스트에서 리페어. LBIST는 현장 자가 진단.
근거 숫자10N × 310만 워드 ÷ 제어기 40개 → 배경·전압당 약 1.6 ms. 메모리 추가 λ ≈ 0.036 → 82% → 85%(+약 3%p, 웨이퍼당 약 23개).
남은 문제제어기 40개, PLL 4개, 온도 센서 12개에 장비가 어떻게 닿는가. 핀은 몇 개 쓰는가(8장).

핵심 정리

  1. BIST는 패턴 생성(TPG)과 응답 분석(ORA)을 칩 안에 넣어 장비 대역폭·속도·장소의 한계를 넘는다. 대가는 면적, 낮은 진단성, 의사 난수 패턴의 커버리지 한계다.
  2. n비트 LFSR은 특성 다항식이 원시 다항식일 때 최대 주기 \(2^n-1\)을 갖는다. 피보나치형(외부 XOR)과 갈루아형(내부 XOR)은 같은 주기를 낸다.
  3. MISR는 응답을 n비트 시그니처로 압축한다. 무작위 오류에서 별칭 확률은 약 \(2^{-n}\)이고, 한 비트 오류는 별칭이 없지만 구조적인 오류는 훨씬 자주 별칭을 낸다.
  4. 로직 BIST(STUMPS)는 랜덤 패턴 저항 폴트 때문에 커버리지가 포화한다. 제어·관측 테스트 포인트로 회로를 고쳐 끌어올린다.
  5. 메모리에는 SAF·TF·CF(in/id/st)·AF·NPSF·DRF 같은 기능 폴트 모델을 쓰며, March 알고리즘은 주소 순서와 연산의 조합으로 이를 O(N)에 검출한다. March C−(10N)는 단순 결합 폴트까지 모두 잡고, 보존 폴트에는 Del이 필요하다.
  6. 여분 행·열 할당은 must-repair 분석 뒤 탐색으로 푼다. TB-7은 리페어로 웨이퍼 수율을 약 82%에서 85%로 되찾는다.

확인 퀴즈

5비트 LFSR의 특성 다항식이 원시 다항식이다. 0이 아닌 씨앗에서 출발하면 몇 클록 뒤 처음 상태로 돌아오는가?

원시 다항식이면 모두 0인 상태를 뺀 \(2^5-1 = 31\)개 상태를 모두 돈다. 씨앗에 따라 주기가 달라지는 것은 기약이 아닌 다항식의 경우다.

20비트 MISR로 응답을 압축한다. 불량 칩의 응답에 무작위 오류가 많이 섞여 있을 때 시그니처가 정상과 같게 나올 확률은 대략?

\(2^{-20} \approx 9.5\times10^{-7}\). 오류가 한 비트뿐이면 별칭이 0이지만, 오류가 많고 무작위면 시그니처가 \(2^{20}\)가지 값에 고르게 퍼진다.

March X {⇕(w0); ⇑(r0,w1); ⇓(r1,w0); ⇕(r0)}가 잡지 못할 수 있는 폴트는?

March X는 SAF·TF·AF·CFin을 모두 잡지만, 공격 셀의 같은 방향 전환을 두 주소 순서로 모두 만들지 않아 CFid의 일부를 놓친다. 그래서 오름·내림차순 각각에서 0→1, 1→0을 모두 갖춘 March C−(10N)를 쓴다.

여분 행 2개, 여분 열 2개가 있는 메모리에서 한 행에 불량 비트가 3개 있다. 이 행에 대해 옳은 것은?

불량 3개를 열로 덮으려면 여분 열 3개가 필요한데 2개뿐이다. 따라서 이 행은 must-repair 행이다. 다른 불량이 남은 여분으로 덮이면 수리 가능하다.