모든 이야기

NAND는 왜 목표 전압을 한 번에 쓰지 않고 조금씩 올릴까

NAND에 2bit를 저장한다는 말은 셀 안에 작은 digital register가 두 개 있다는 뜻이 아니다. 하나의 transistor threshold voltage를 네 구간으로 나누어 정보를 읽는다. 구간 사이 여유가 좁아질수록 목표 threshold에 정확히 도착하는 일이 중요해진다. ISPP가 한 번의 큰 pulse보다 작은 pulse와 확인을 반복하는 이유다.

Incremental Step-Pulse Programming은 program voltage pulse를 단계적으로 올리고, 매 단계 뒤 verify로 목표 도달 여부를 검사하는 방식이다. charge를 주입하는 속도는 셀의 조건에 따라 다르다. 큰 voltage를 정해진 시간 한 번 가하는 open-loop 방식은 빠른 셀과 느린 셀의 차이를 그대로 결과에 남길 수 있다.

Errors in Flash-Memory-Based Solid-State Drives 원문 2.4절은 ISPP의 pulse·verify 반복과 목표에 도달한 셀의 program inhibit를 설명한다. 이 글의 수치 예는 실제 제품의 pulse 크기를 인용한 것이 아니라, step과 feedback이 만드는 차이를 분리한 model이다.

같은 목표에 서로 다른 속도로 접근하기

가상 목표 threshold를 2.0V, 초기값을 1.0V라고 하자. 각 작은 pulse가 A 셀은 0.25V, B 셀은 0.15V씩 threshold를 올린다고 단순화하면 A는 4번에 2.0V, B는 7번에 2.05V다. A가 목표에 도착한 뒤 inhibit 하지 않고 B가 끝날 때까지 계속 같은 pulse를 받으면 A는 2.75V가 된다. feedback과 셀별 완료 관리가 없을 때 빠른 셀이 overshoot하는 예다.

실제 ISPP에서는 program voltage 자체를 단계적으로 변화시키고 pulse별 반응도 일정하지 않다. 위 선형 model은 정확한 voltage waveform이나 distribution 예측이 아니다. 그래도 빠른 셀을 멈추고 느린 셀을 계속 진행시키는 의미를 명확하게 보여 준다.

목표 부근에서 threshold가 0.2V씩 이동하는 toy와 0.05V씩 이동하는 toy를 비교하면, 같은 1V 이동에 각각 5번과 20번의 pulse가 필요하다. 일정 increment와 딱 나누어떨어지는 목표를 가정한 결과다. 작은 step은 목표를 넘는 마지막 이동의 크기를 낮출 수 있지만 pulse·verify의 횟수는 늘어난다.

program speed와 좁은 분포를 함께 얻기 어려운 이유

multi-level NAND는 threshold 구간 사이 간격을 공유한다. 마지막 step의 overshoot와 셀별 편차가 커지면 읽기 기준에 가까운 tail이 늘 수 있다. program을 빨리 끝내려고 step을 키우는 선택은 write latency를 줄이면서 이 여유를 소비할 수 있다.

그래서 coarse하게 접근한 뒤 fine하게 마무리하는 전략이 의미를 갖는다. 다만 coarse/fine 절차와 page 순서는 제품에 따라 다르고, 모든 세대가 같은 algorithm을 사용한다고 말할 수 없다. step 크기의 한 숫자보다 해당 state의 마지막 분포와 이후 변화를 평가해야 한다.

작은 step도 retention과 interference를 없애지 않는다. program 직후 좁게 맞춘 threshold는 시간 경과와 다른 셀의 programming에 따라 달라질 수 있다. ISPP가 제어하는 것은 현재의 program 경로이며 모든 미래 noise를 지우는 것은 아니다. read error가 적다는 결과를 볼 때 initial distribution과 이후 drift를 나누는 이유다.

host의 write 시간은 pulse 시간보다 길다

host가 관찰하는 write completion에는 controller buffer, page 구성, NAND command와 transfer, 내부 program, 여러 die의 scheduling이 들어간다. pulse 횟수를 줄였다고 application latency가 같은 비율로 줄어드는 것은 아니다. 작은 random write의 처리와 큰 sequential write의 처리도 다르다.

ISPP parameter를 평가한다면 조건이 맞는 page-program latency 분포와 threshold 분포, endurance 이후 결과를 같이 확인하자. 평균 program 시간만 보면 빨리 끝난 대부분의 셀은 보이지만 느린 tail과 마지막 overshoot를 놓칠 수 있다.

ISPP의 핵심은 threshold를 한 번에 맞히는 대신 관측을 통해 접근 과정을 조절하는 데 있다. 작은 pulse는 미세한 제어를, verify는 언제 멈춰야 하는지를 제공한다. 더 촘촘한 step을 택할 가치는 “느리지만 정확하다”는 이름보다 실제 저장 구간의 여유와 program 횟수의 교환으로 판단해야 한다.