BIST와 메모리 테스트
6장의 스캔은 테스트 패턴을 장비가 만들어 칩에 밀어 넣고, 응답을 장비가 받아 비교한다. 패턴이 많아지고 칩 속도가 장비보다 빨라지면 이 방식의 비용이 커진다. 패턴 생성기와 응답 비교기를 칩 안에 넣으면 칩이 스스로 자신을 검사한다. 이것이 내장 자체 테스트(BIST, Built-in self-test)다. 이 장은 BIST의 두 부품인 LFSR과 MISR에서 출발해, 로직 BIST의 구조와 한계, 칩 면적의 큰 몫을 차지하는 내장 메모리의 폴트 모델과 March 알고리즘, 그리고 불량 메모리를 여분 행·열로 고쳐 수율을 되찾는 리페어까지 다룬다.
- LFSR이 최대 길이 수열을 만드는 조건(원시 다항식)을 설명하고 피보나치형·갈루아형을 구분한다.
- MISR로 응답을 시그니처 하나로 압축할 때 생기는 별칭 확률 \(2^{-n}\)의 뜻을 실험으로 확인한다.
- 로직 BIST(STUMPS)의 구조와 랜덤 패턴 저항 폴트, 테스트 포인트의 역할을 설명한다.
- 메모리 폴트 모델(SAF·TF·CF·AF·NPSF·데이터 보존)을 구분하고 March 표기법으로 알고리즘을 읽고 쓴다.
- MATS+, March X, March C−의 검출 능력과 길이를 비교하고 고장 시뮬레이션으로 검증한다.
- 여분 행·열 할당 문제(must-repair와 탐색)를 풀고 리페어가 수율을 얼마나 되찾는지 계산한다.
왜 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가 흔히 쓰인다.
대가도 있다. 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% |
LFSR: 칩 안의 난수 생성기
BIST의 패턴 생성기는 거의 언제나 선형 되먹임 시프트 레지스터(LFSR, Linear feedback shift register)다. 플립플롭 n개를 시프트 레지스터로 잇고, 몇몇 단의 출력을 XOR해 입력으로 되돌린다. 게이트 몇 개로 만들 수 있고, 클록마다 n비트 상태가 바뀌며, 상태 수열이 난수처럼 보인다. 그러나 완전히 결정론적이어서 같은 씨앗(seed)에서 시작하면 늘 같은 수열이 나온다. BIST에는 이 점이 중요하다. 정상 칩의 응답을 미리 시뮬레이션해 둘 수 있기 때문이다.
되먹임 위치는 특성 다항식(Characteristic polynomial)으로 적는다. 단 i에서 되먹임이 있으면 \(c_i = 1\)이다.
모든 다항식이 최대 길이를 주지는 않는다. \(f(x)\)가 원시 다항식(Primitive polynomial)일 때만 주기가 \(2^n-1\)이 된다. 원시 다항식은 기약(irreducible)이면서, \(x^k \equiv 1 \pmod{f}\)를 만족하는 가장 작은 k가 \(2^n-1\)인 다항식이다. 기약이 아니면 주기가 씨앗에 따라 달라지고, 기약이지만 원시가 아니면 주기가 \(2^n-1\)의 진약수가 된다. n비트 원시 다항식의 수는 오일러 함수로 센다.
같은 다항식을 두 가지 방식으로 만들 수 있다. 피보나치형(Fibonacci, external XOR)은 되먹임 단의 출력을 XOR 트리 하나로 모아 첫 단에 넣는다. 갈루아형(Galois, internal XOR)은 마지막 단 출력을 되먹임 위치마다 XOR로 끼워 넣는다. 갈루아형은 단과 단 사이에 XOR 하나만 있어 빠르고, 피보나치형은 XOR 트리의 깊이만큼 느리지만 상태가 단순 시프트라 이해하기 쉽다. 두 형태의 주기는 같고, 상태 수열의 순서만 다르다.
LFSR 놀이터: 탭을 눌러 주기를 바꿔 보자
| n | 원시 다항식의 예 | 주기 2ⁿ−1 | 원시 다항식 수 |
|---|---|---|---|
| 3 | 1 + x² + x³ | 7 | 2 |
| 4 | 1 + x³ + x⁴ | 15 | 2 |
| 5 | 1 + x³ + x⁵ | 31 | 6 |
| 8 | 1 + x⁴ + x⁵ + x⁶ + x⁸ | 255 | 16 |
| 16 | 1 + x⁴ + x¹³ + x¹⁵ + x¹⁶ | 65,535 | 2,048 |
| 32 | 1 + 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가 보드 고장 진단용으로 쓴 데서 이름이 왔다.
압축에는 대가가 따른다. 서로 다른 응답 수천억 비트가 n비트 시그니처로 접히므로, 틀린 응답이 우연히 정상과 같은 시그니처를 낼 수 있다. 이를 별칭(Aliasing)이라 한다. MISR가 선형이라는 점이 분석을 쉽게 한다. 정상 응답을 R, 오류열을 E라 하면 시그니처는 \(S(R \oplus E) = S(R) \oplus S(E)\)다. 별칭은 0이 아닌 E가 \(S(E) = 0\)을 만들 때 일어난다. 오류열이 충분히 길고 무작위라면 \(S(E)\)는 \(2^n\)가지 값에 고르게 퍼지므로
이 근사가 깨지는 경우도 알아 둬야 한다. 오류가 한 비트뿐이면 MISR는 절대 별칭을 내지 않는다. 선형 사상이 가역이어서 0이 아닌 입력 하나는 0이 아닌 상태를 남기기 때문이다. 반대로 구조적인 오류는 \(2^{-n}\)보다 훨씬 자주 별칭을 낼 수 있다. MISR의 i번째 입력에 시각 t의 오류가, (i+1)번째 입력에 시각 t+1의 오류가 나면 첫 오류가 한 칸 밀려 온 자리에서 둘째 오류와 정확히 상쇄된다. 이웃 스캔 체인이 같은 결함을 한 클록 차이로 보는 일은 드물지 않다. 그래서 실제 설계는 MISR 앞에 공간 압축기를 두고 MISR 폭을 넉넉히(32~64비트) 잡는다.
MISR 별칭 실험: 오류를 넣고 시그니처가 속는 비율을 잰다
로직 BIST: STUMPS와 테스트 포인트
로직 BIST의 표준 구조는 STUMPS(Self-test using MISR and parallel shift register sequence generator)다. 6장의 스캔 체인을 그대로 쓴다. PRPG가 위상 변환기를 거쳐 모든 스캔 체인에 동시에 의사 난수 비트를 밀어 넣고, 체인 길이만큼 시프트한 뒤 캡처 클록 한두 번으로 회로의 응답을 플립플롭에 잡는다. 다음 시프트 동안 그 응답이 체인 끝에서 공간 압축기를 거쳐 MISR로 들어가고, 동시에 다음 패턴이 들어온다. 이를 수천~수만 번 되풀이한 뒤 MISR 값을 읽는다.
로직 BIST의 약점은 랜덤 패턴 저항 폴트(Random-pattern-resistant fault)다. 16입력 AND 게이트 출력의 고착-0 폴트를 검출하려면 16개 입력이 모두 1이어야 하는데, 무작위 패턴에서 그 확률은 \(2^{-16} \approx 1.5\times10^{-5}\)이다. 한 패턴의 검출 확률이 p인 폴트를 N개 패턴 안에 한 번이라도 검출할 확률은
이런 폴트가 회로 곳곳에 있어 커버리지 곡선은 처음에 빠르게 오르다 곧 평평해진다. 패턴 수를 열 배 늘려도 몇 %p밖에 안 오른다. 해법은 회로를 고치는 것이다. 제어 포인트(Control point)는 테스트 모드에서 노드를 강제로 0이나 1 쪽으로 기울이는 AND/OR 게이트를 넣어 깊은 노드의 활성화 확률을 올리고, 관측 포인트(Observation point)는 관측이 어려운 노드를 스캔 FF로 바로 뽑아낸다. 보통 FF 수의 0.1~1% 정도의 테스트 포인트로 고착 커버리지를 90%대 중반까지 올린다. 남는 폴트는 결정론적 패턴을 PRPG 씨앗으로 넣는 방식(reseeding)이나 외부 ATPG로 덮는다.
랜덤 패턴 커버리지와 테스트 포인트
메모리 폴트 모델
칩에서 가장 조밀한 구조는 메모리다. 5 nm급 고밀도 SRAM 비트셀은 약 0.02 µm²로, 같은 면적의 로직보다 트랜지스터와 배선이 몇 배 빽빽하다. 그래서 같은 결함 밀도라도 메모리 배열은 결함에 더 민감하고, 결함의 증상도 로직과 다르다. 로직의 고착 폴트 모델만으로는 "셀 하나가 이웃 셀을 쓸 때 뒤집힌다" 같은 증상을 표현할 수 없다. 메모리에는 따로 기능 폴트 모델을 쓴다.
| 폴트 | 표기 | 증상 | 물리적 원인의 예 | 검출 조건 |
|---|---|---|---|---|
| 고착 폴트 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)\) 시간에 덮는다.
March 알고리즘
March 테스트는 몇 개의 March 원소를 차례로 실행한다. 원소 하나는 "주소 순서 + 연산 목록"이다. 주소를 그 순서로 하나씩 방문하면서 각 주소에서 연산 목록을 다 실행한 뒤 다음 주소로 간다. 표기법은 다음과 같다.
| 기호 | 뜻 |
|---|---|
| ⇑ | 주소 오름차순 (0 → N−1) |
| ⇓ | 주소 내림차순 (N−1 → 0). ⇑의 정확한 역순이면 어떤 순서든 된다 |
| ⇕ | 순서 무관 |
| w0, w1 | 0(1) 쓰기 |
| r0, r1 | 읽어서 0(1)이 나와야 함. 다르면 실패 |
| Del | 정해진 시간 동안 기다림(데이터 보존 테스트) |
가장 널리 쓰이는 March C−는 원소 여섯 개, 주소당 연산 10번이다.
왜 이 순서가 결합 폴트를 잡는지 따라가 보자. 공격 셀 a가 희생 셀 v보다 낮은 주소에 있고 폴트가 ⟨↑;↕⟩라 하자. 둘째 원소 ⇑(r0,w1)은 오름차순이므로 a를 먼저 방문해 1을 쓴다. 이때 v가 뒤집혀 1이 된다. 그 뒤에 v를 방문하면 r0을 기대하는데 1이 나온다. 검출이다. 반대로 a가 v보다 높은 주소에 있으면 v를 먼저 읽고 지나간 뒤에 a가 바뀌므로 둘째 원소로는 못 잡는다. 그래서 같은 일을 내림차순으로 한 번 더 한다. ⇑와 ⇓, 0→1과 1→0의 네 조합을 모두 갖춘 것이 March C−다.
| 알고리즘 | 원소 | 길이 | SAF | TF | AF | CFin | CFid | CFst |
|---|---|---|---|---|---|---|---|---|
| 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다. 그래서 목표 폴트 모델을 다 덮는 가장 짧은 알고리즘을 고르는 것이 메모리 테스트 설계의 출발점이다.
March 알고리즘 실행기: 폴트를 심고 쓸어 보자
실제 메모리는 비트가 아니라 워드(32~144비트) 단위로 읽고 쓴다. 한 워드 안의 비트끼리 생기는 결합 폴트를 잡으려면 같은 March를 여러 데이터 배경(Data background)으로 반복한다. 모두 0/1 대신 0101…, 0011…, 00001111… 같은 배경을 쓰면 워드 폭 w에 대해 \(\lceil\log_2 w\rceil + 1\)개 배경으로 워드 안 모든 비트 쌍이 서로 다른 값을 한 번씩 갖는다. 물리 배치도 중요하다. 논리 주소와 물리 위치가 다르게 섞여 있으면(scrambling) "이웃"이 주소상 이웃이 아니므로, 체커보드처럼 물리 배치를 따르는 배경은 스크램블 정보를 알아야 만들 수 있다.
MBIST 제어기
메모리 BIST 제어기는 March 알고리즘을 하드웨어로 돌리는 작은 상태 기계다. 주소 생성기(⇑/⇓ 카운터), 데이터 생성기(배경과 반전), 연산 순서기, 비교기, 그리고 실패를 기록하는 회로로 이루어진다. 알고리즘을 회로에 고정하는 방식과, 원소·연산을 명령어처럼 레지스터에 올려 실리콘이 나온 뒤에도 알고리즘을 바꿀 수 있게 하는 프로그래머블 MBIST가 있다. 요즘은 대개 프로그래머블을 쓴다. 양산 중 새로운 폴트가 보이면 테스트 프로그램만 바꿔 대응할 수 있기 때문이다.
제어기 하나가 메모리 인스턴스 수십 개를 맡는다. 같은 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를 쓴다. 기다리는 시간이 대부분이라 보존 테스트는 다른 테스트와 겹쳐 돌리기도 한다.
메모리 리페어와 수율
메모리는 조밀해서 결함에 약하지만, 규칙적이어서 고치기 쉽다. 배열에 여분 행·열(Spare rows/columns, redundancy)을 몇 개 더 만들어 두고, 불량 셀이 있는 행이나 열의 주소가 들어오면 여분으로 돌린다. 어느 주소를 돌릴지는 eFuse(전류로 끊는 전기 퓨즈)나 안티퓨즈에 기록한다. DRAM은 이 방식이 없으면 상업적으로 존재할 수 없고, 큰 SRAM을 가진 SoC에도 필수다.
여분 행 R개, 여분 열 C개로 불량 비트를 모두 덮는 할당을 찾는 문제는 이분 그래프의 정점 덮개 문제로 바뀌며, 일반적으로 NP-완전이다. 그러나 실제 메모리의 불량 수는 적어서 두 단계로 빠르게 푼다. 먼저 must-repair 분석이다. 어떤 행에 불량이 남은 여분 열 수보다 많으면 열로는 그 행을 다 고칠 수 없으므로 반드시 여분 행을 써야 한다. 열도 마찬가지다. 이를 더 바뀌지 않을 때까지 되풀이한다. 그다음 남은 희소한 불량에 대해 가능한 할당을 모두 시도하거나 분기 한정법으로 찾는다. BIRA 하드웨어는 이 과정을 테스트와 동시에 처리한다.
메모리 리페어 퍼즐: 여분 행 2개, 열 2개
리페어가 수율을 얼마나 되찾는지는 결함 수의 분포로 계산한다. 메모리 하나에 떨어지는 결함 수가 평균 λ인 포아송 분포를 따르고 결함 하나가 여분 하나를 쓴다고 단순화하면, 여분 S개로 고칠 수 있는 확률은
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%로 돌아오는 이유다.
리페어 수율 곡선과 TB-7
TB-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⁻²⁰로 무시할 수 있다.
핵심 정리
- BIST는 패턴 생성(TPG)과 응답 분석(ORA)을 칩 안에 넣어 장비 대역폭·속도·장소의 한계를 넘는다. 대가는 면적, 낮은 진단성, 의사 난수 패턴의 커버리지 한계다.
- n비트 LFSR은 특성 다항식이 원시 다항식일 때 최대 주기 \(2^n-1\)을 갖는다. 피보나치형(외부 XOR)과 갈루아형(내부 XOR)은 같은 주기를 낸다.
- MISR는 응답을 n비트 시그니처로 압축한다. 무작위 오류에서 별칭 확률은 약 \(2^{-n}\)이고, 한 비트 오류는 별칭이 없지만 구조적인 오류는 훨씬 자주 별칭을 낸다.
- 로직 BIST(STUMPS)는 랜덤 패턴 저항 폴트 때문에 커버리지가 포화한다. 제어·관측 테스트 포인트로 회로를 고쳐 끌어올린다.
- 메모리에는 SAF·TF·CF(in/id/st)·AF·NPSF·DRF 같은 기능 폴트 모델을 쓰며, March 알고리즘은 주소 순서와 연산의 조합으로 이를 O(N)에 검출한다. March C−(10N)는 단순 결합 폴트까지 모두 잡고, 보존 폴트에는 Del이 필요하다.
- 여분 행·열 할당은 must-repair 분석 뒤 탐색으로 푼다. TB-7은 리페어로 웨이퍼 수율을 약 82%에서 85%로 되찾는다.
확인 퀴즈
5비트 LFSR의 특성 다항식이 원시 다항식이다. 0이 아닌 씨앗에서 출발하면 몇 클록 뒤 처음 상태로 돌아오는가?
20비트 MISR로 응답을 압축한다. 불량 칩의 응답에 무작위 오류가 많이 섞여 있을 때 시그니처가 정상과 같게 나올 확률은 대략?
March X {⇕(w0); ⇑(r0,w1); ⇓(r1,w0); ⇕(r0)}가 잡지 못할 수 있는 폴트는?
여분 행 2개, 여분 열 2개가 있는 메모리에서 한 행에 불량 비트가 3개 있다. 이 행에 대해 옳은 것은?