ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • NAND FLASH의 구조와 특징
    _[HARDWARE]/CORE 2012. 9. 12. 15:00
    전자 시스템은 물리적으로 눈에 보이고 만져지는 hardware 부분과 OS 또는 각종 응용 프로그램들인 software의 부분으로 이루어져 있다.

    Software는 어떤 형식으로든 hardware에 저장되어야 하는데 일반적인 PC의 경우 LPC ROM에 BIOS
    program이 들어가고 HDD에 OS나 응용 프로그램들이 저장되며 스마트폰 같은 경우엔 NOR Flash나
    NAND Flash등에 software가 저장된다.

    즉 software의 storage로 HDD, ROM이 사용될 수 있으며 ROM의 종류엔 EEPROM, Flash ROM등이 있고
    Flash ROM의 종류엔 SPI Flash, NOR Flash, NAND Flash등이 있는데 본 포스트에선 Flash ROM의
    한 종류인 NAND Flash에 대해 살펴보고자 한다.

    1. NAND FLASH의 종류
    NAND Flash는 크게 Single Level Cell이라고 하는 SLC type과 Multi Level Cell이라고 하는
    MLC type으로 나눠진다.

    SLC와 MLC type NAND Flash간의 가장 큰 차이점은 SLC는 memory cell당 1bit의 data가 저장되는데
    반해 MLC는 memory cell당 2bit 이상의 data를 저장할 수 있다는 점이다.

    SLC type의 cell에 전압을 인가하고 전류값을 읽었을 때 전류값이 있으면 저장되어 있는 bit가 '1'이라고
    판단하고 전류값이 읽혀지지 않으면 저장되어 있는 bit가 '0'이라고 판단하게 되는것이다.

    한 종류의 전압 level만 있으면 cell에 있는 data를 판단할 수 있어서 Single Level Cell인 것이다.

    위 그림에서 reference point의 voltage가 인가되면 저장된 bit value가 '0'또는 '1'로 얻어지게 된다.

    MLC type의 cell엔 3종류의 전압 level을 인가시켜서 4종류의 bit value가 얻어질 수 있기 때문에
    Multi Level Cell 이라고 한다.

    위 그림에서 reference point의 voltage로 3가지가 인가되면 bit value가 '00', '01', '10', '11'로 4가지가
    얻어지게 된다.

    이상의 원리에 의해 SLC와 MLC의 실리콘 size가 같다면 MLC는 SLC대비 2배의 용량이 가능하기 때문에
    가격 이점이 있지만 속도는 3배가 느린 단점이 있게 된다. (전압 레벨을 3번 바꿔가며 판단하므로...)

    그래서 아래의 표에서 보듯이 SLC대비 MLC의 가격이 싸다고 표기되어 있지만 ECC 알고리즘은
    어렵다고 되어있고 performance도 낮게 매겨지는 것이다.
    (좋은 그림들 고마워요 micron !!!)


    2. NAND FLASH의 특징
       [BAD BLOCK]
        ① BAD BLOCK IDENTIFICATION
            모든 mass storage와 같이 NAND Flash도 메모리 안에 초기의 bad block이 존재한다.
             - NAND 제조사는 생산 공정에서 factory test를 거쳐 bad block을 검출
             - 검출된 bad block에 marking을 하고 NAND의 특정 영역에 해당 위치들을 표기함
             - 해당의 initial bad block을 사용자가 program이나 erase하면 marking 또한 지워지기 때문에 어떠한
                용도로도 사용해선 안됨 (정상적인 cell에 영향을 줄 수도 있음)
             - 그러므로 NAND를 사용하기 전엔 항상 NAND를 읽고 bad block을 검출하여 bad block table을
                만들어서 관리해야 함

        ② PERMANENT FAILURES
            - NAND를 동작시키다가 발생하는 불량
            - NAND의 cell에 0이나 1이 들어있지만 program, erase되지 않음
            - Permanent failure가 발생하면 해당 block을 bad block table에 추가해서 추후에 사용치 않아야 함

        ③ TEMPORARY FAILURES
            - NAND를 동작시키다가 발생하는 불량
            - 적절한 방법을 통하여 복구할 수 있기 때문에 bad block table에 추가시키지 않음

       [WEAR LEVELING]
        - NAND의 cell은 기대 수명이 있기 때문에 특정 cell을 반복해서 사용하다 보면 해당 block이 wear out
           되어 bad block이 될 수 있음
        - Wear leveling이란 NAND의 logical memory address를 다른 physical memory address로 변경함으로써
           momory의 전체 영역을 골고루 사용하여 cell의 기대 수명을 연장하는 것임

       [ECC]
        - Digital 신호의 처리에서 error는 항상 발생하는 요소이기 때문에 NAND에서의 bit error에 대해서도
           적절한 Error Correction Code 알고리즘이 요구됨
        - 저장 할 bit data를 ECC encoder에서 encoding해서 저장하고 저장된 bit data를 읽을 땐 ECC
           decoding을 통해서 error를 검출하고... 만일 error가 발생했다면 정정해서 읽게 됨
        - ECC encoding을 할 때 redundant bit가 발생하는데 이 부분이 나중에 NAND의 size를 논할 때 매우
           중요한 요인이 됨
        - Redundant bit란 RS-232통신을 예로들면 7bit의 data '0101000'를 전송할 때 odd parity 방식이라면
           data의 끝에 '1'을 붙여서 실제 전송하게되는 신호는 '01010001'이 되는데 정보 data와는
           무관하지만 수신측에서 에러 검출용으로 필요하기 때문에 정보 data와 같이 전송하게되는 마지막
           bit '1'이 바로 redundant bit 임
        - ECC는 다음의 종류들이 있으나 NAND에서 주로 사용하는 ECC는 block code계열인 Hamming code
           BCH

        - Hamming code는 single error를 정정할 때, BCH code는 double error를 정정할 때 사용됨 (SLC)
        - 더 많은 error를 정정하기 위해 convolution code나 LDPC를 사용할 수도 있겠지만 가격이 올라가니
           trade off가 되지 않음
        - 일반적으로 NAND에서의 Error Correction Code는 1 sector인 512byte에서 몇 개의 error를 정정시킬
           수 있느냐로 명시함
        - 예를 들어 1bit Hamming ECC라고 하면 22bit의 redundant bit를 사용해서 sector당 1bit의 error를
           정정시킬 수 있다는 의미임

    3. NAND FLASH의 용량
    NAND Flash의 구조는 가장 작은 page단위가 모여서 block을 이루고 이 block이 몇개냐에 따라서 전체
    용량이 결정된다.

    1Gbit 이하의 density가 주로 생산되던 예전엔 block size를 32page로 구성하는 small block 구조였으나
    근래엔 NAND의 용량이 커지면서 memory를 좀 더 효율적으로 관리하기 위해 block size를 64pgae로
    구성하는 large block 구성이 주를 이루게 된다.

    Large block NAND Flash의 장점은 block간의 회로가 줄었기 때문에 chip의 size가 작아지고 program,
    read 등의 performance가 향상된다는 것이다.

    Page와 block으로 구성되어 있는 이 NAND의 용량은 어떻게 계산되는가?

    필자는 처음에 이 부분이 매우 이해하기 어려웠다.

    김대리들은 어떤가요? NAND Flash의 datasheet들 보면서 금방 이해 했나요? 같이 알아가 봅시다.


    NAND는 모눈종이 같은 page가 여러장 모여서 1 block을 형성하고 이 block을 모두 합치면 전체 NAND의
    용량이 결정된다.

    1Gbit용량의 large block NAND 구조를 보면서 계산해 보도록 한다.

    위 그림에서 보라색이 1 page를 나타낸다.

    Page는 cell이 한층으로 종이처럼 구성되어 넓게 퍼져있는 영역이다.

    Large block에서 1 page는 2048Byte의 data 영역으로 이루어져 있다.
    거기에 ECC에서 설명한 redundant bit로 사용되는 spare영역인 64Byte가 덧붙여져서 1 page는
    2KByte + 64Byte
    가 된다.
    (Small block에선 512Byte + 16Byte 구성임)

    위 그림에서 초록색은 1 block을 나타내는데 large block에서 1 block은 64page로 구성된다.
    여기엔 1 page에서 포함되었던 64Byte의 spare 영역이 64page만큼 들어있게 된다.

    그래서 전체 용량은 다음과 같게 된다.
    1 page = 2112 Byte

    1 block = 1 page * 64

    1 device = 1 block * 1024 = 2112 * 64 * 1024 = 138,412,032 Byte = 1056 Mbit ≒ 1 Gbit

    어지러운가요?

    실제의 NAND datasheet에서 해당 부분을 다시 한번 숙지해 보자.
    다음은 T社의 2Gbit SLC 제품의 datasheet이다.

    1 page size는 2112Byte 이다. (2048Byte + 64Byte)

    Block size는 1 page의 data 영역인 2048Byte에 64 page를 곱한 128KByte와 1 page의 spare 영역인
    64Byte에 64 page를 곱한 4KByte의 합으로 표현되어 있다. (128KByte + 4KByte)

    1 page = 2112 Byte

    1 block = 1 page * 64 = 128 KByte + 4 KByte

    1 device = 1 block * 2048

    그러므로 전체 용량은 132 * 2048 = 2Gbit 가 된다.


    [참고]
    ECC in SLC NAND
    - Micron -

    Design and Use Considerations for NAND Flash Memory
    - Micron -

    Small Block vs Large Block NAND Flash Devices
    - Micron -

Designed by Tistory.