KR20220098562A - 코드 밀도를 조절하는 데이터 스크램블링 방법 - Google Patents

코드 밀도를 조절하는 데이터 스크램블링 방법 Download PDF

Info

Publication number
KR20220098562A
KR20220098562A KR1020210000393A KR20210000393A KR20220098562A KR 20220098562 A KR20220098562 A KR 20220098562A KR 1020210000393 A KR1020210000393 A KR 1020210000393A KR 20210000393 A KR20210000393 A KR 20210000393A KR 20220098562 A KR20220098562 A KR 20220098562A
Authority
KR
South Korea
Prior art keywords
code
plane
cipher
appearance frequency
memory device
Prior art date
Application number
KR1020210000393A
Other languages
English (en)
Other versions
KR102496011B1 (ko
Inventor
이동희
현철승
정관일
유수원
Original Assignee
서울시립대학교 산학협력단
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 서울시립대학교 산학협력단 filed Critical 서울시립대학교 산학협력단
Priority to KR1020210000393A priority Critical patent/KR102496011B1/ko
Priority to US17/535,255 priority patent/US11923000B2/en
Publication of KR20220098562A publication Critical patent/KR20220098562A/ko
Application granted granted Critical
Publication of KR102496011B1 publication Critical patent/KR102496011B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/56Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency
    • G11C11/5621Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency using charge storage in a floating gate
    • G11C11/5628Programming or writing circuits; Data input circuits
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1408Protection against unauthorised use of memory or access to memory by using cryptography
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1048Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/78Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
    • G06F21/79Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data in semiconductor storage media, e.g. directly-addressable memories
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/56Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency
    • G11C11/5621Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency using charge storage in a floating gate
    • G11C11/5642Sensing or reading circuits; Data output circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/10Programming or data input circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/26Sensing or reading circuits; Data output circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C29/08Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
    • G11C29/12Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
    • G11C29/18Address generation devices; Devices for accessing memories, e.g. details of addressing circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C29/08Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
    • G11C29/12Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
    • G11C29/38Response verification devices
    • G11C29/42Response verification devices using error correcting codes [ECC] or parity check
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • G11C7/1006Data managing, e.g. manipulating data before writing or reading out, data bus switches or control circuits therefor
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/39Sequence estimation, i.e. using statistical methods for the reconstruction of the original codes
    • H03M13/3905Maximum a posteriori probability [MAP] decoding or approximations thereof based on trellis or lattice decoding, e.g. forward-backward algorithm, log-MAP decoding, max-log-MAP decoding
    • H03M13/3933Decoding in probability domain
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C2029/0411Online error correction
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C8/00Arrangements for selecting an address in a digital store
    • G11C8/06Address interface arrangements, e.g. address buffers

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Probability & Statistics with Applications (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Storage Device Security (AREA)

Abstract

본 발명의 일 실시예에 따른 코드 밀도를 조절하는 데이터 스크램블링 방법은 비휘발성 메모리 장치에 저장할 코드인 플레인코드(plain code) 및 상기 플레인코드를 기록할 주소인 저장주소를 입력받는 단계; 개별 플레인코드에 대응되는 출현 빈도 순위 정보를 포함하는 ET테이블 및 상기 저장주소에 기반하는 랜덤넘버를 이용하여, 상기 플레인코드에 대응되는 조정순위를 산출하는 단계; 개별 플레인코드의 출현 빈도 순위에 대응되는 사이퍼코드(cipher code)의 정보를 포함하는 ECC테이블 및 상기 조정순위를 이용하여, 상기 플레인코드의 출현 빈도 순위에 대응되는 사이퍼코드를 결정하는 단계; 및 상기 저장주소에 상기 사이퍼코드를 저장하는 단계를 포함한다.

Description

코드 밀도를 조절하는 데이터 스크램블링 방법{DATA SCRAMBLING METHOD THAT CONTROLS CODE DENSITY}
본 발명은 비휘발성 메모리에 기반한 메모리 장치 및 그 메모리 장치의 관리 방법에 관한 것이다.
데이터를 저장하는 장치로는 휘발성 메모리와 비휘발성 메모리가 있다. 휘발성 메모리의 경우 전원이 차단되면 데이터가 사라지지만 비휘발성 메모리는 전원이 차단되어도 데이터를 유지한다. 비휘발성 메모리로 MRAM, PRAM 등이 있으며, 데이터 저장장치로 널리 사용되는 플래시 메모리도 비휘발성 메모리의 일종이다.
비휘발성 메모리의 경우 읽기와 쓰기에 대하여 소요 시간과 에너지 소비량 등이 다르고, 가능한 비트 쓰기 회수와 읽기 회수가 정해져 있다. 또한, 비휘발성 메모리의 수명을 늘리기 위해 비트 변화(bit flipping)를 최소화하는 기법 등이 연구되어 왔으며, 이러한 비트 변화를 프로그래밍 디스턴스, 줄여서 PD (Programming Distance)로 정의할 수 있다.
플래시 메모리와 같은 비휘발성 메모리 장치는 전기적으로 읽기(read), 쓰기(write) 및 소거(erase)가 가능하며, 공급 전원이 없는 상태에서도 저장된 데이터를 유지할 수 있는 반도체 메모리 장치이다. 플래시 메모리와 같은 비휘발성 메모리 장치에 대한 데이터의 기록은 소거와 쓰기 동작으로 구성되며, 데이터 쓰기를 프로그래밍(programming)이라고 부르기도 한다.
비휘발성 메모리 장치에 대한 소거는 블록 단위로 수행될 수 있고, 프로그래밍은 페이지 단위로 수행될 수 있다.
SLC (Single-Level Cell) 플래시 메모리는 셀 당 1 비트를 저장한다. 소거 후 셀의 상태를 S0라고 정의하고 프로그래밍 후 상태로는 S0과 S1이 존재할 수 있다. 각 상태에 논리적인 비트 값을 지정할 수 있으며, 한 가지 방법으로 S0를 비트 '1'로, S1을 비트 '0'으로 정의할 수 있다. 이 경우 소거 후에는 모든 비트가 '1'이다. 소거 후 비트 '1'을 기록하는 경우 셀의 상태는 S0에서 S0로 상태 변화가 없으며, 이 때 PD(Programming Distance)를 0으로 정의할 수 있다. 비트 '0'을 기록하는 경우 셀의 상태는 S0에서 S1으로 변경되며, 이 때 PD를 1로 정의할 수 있다.
MLC(Multi-Level Cell) 플래시 메모리는 셀 당 2 비트를 저장한다. 소거 후 셀의 상태를 S0로 정의하고, 프로그래밍 동작은 셀의 상태를 S0, S1, S2, S3로 변경할 수 있다. 상태마다 비트 코드를 할당하는 한 가지 방법으로 S0~S3에 '11', '10', '00', '01'을 할당할 수 있다. 각 상태에 비트를 할당하는 여러가지 방법이 존재할 수 있다.
TLC(Triple-Level Cell) 플래시 메모리는 셀 당 3 비트를 저장한다. 소거 후 셀의 상태를 S0로 정의하고, 프로그래밍 동작은 셀의 상태를 S0, S1, S2, S3, S4, S5, S6, S7로 변경할 수 있다. 상태마다 비트 코드를 할당하는 한 가지 방법으로 S0~S7에 '111', ''110', '100', '101', '001', '000', '010', '011'을 할당할 수 있다. 각 상태에 비트를 할당하는 여러가지 방법이 존재할 수 있다.
QLC(Quad-Level Cell) 플래시 메모리는 셀 당 4비트를 저장한다. 소거 후 셀의 상태를 S0로 정의하고, 프로그래밍 동작은 셀의 상태를 S0, S1, …, S14, S15로 변경할 수 있다. 상태마다 비트 코드를 할당하는 한 가지 방법으로 S0~S15에 '1111', ''1110', '1100', '1101', …, '0111'을 할당할 수 있다. 상태에 비트를 할당하는 방법은 여러가지 방법이 존재할 수 있다.
한편, 데이터를 기록할 때 평균 PD를 줄이는 방법으로 자주 나타나는 데이터 코드를 PD가 작은 코드로 치환하여 기록하고, 읽을 때 원래 코드로 변환하는 방법이 있다. 그러나 이 방법에서 특정 코드는 정해진 다른 코드로 변환되며, 동일한 데이터가 반복적으로 기록되면, 동일한 변환코드가 반복되어 기록된다. 따라서, 이와 같이 1:1 변환은 PD를 작게 만들 수는 있으나 스크램블링을 불가능하게 만드는 문제가 있다.
목적 함수에 따라서 PD를 작게 만드는 것이 목표가 아니라 특정 값 근처로 만드는 것이 목적일 수 있다. 예를 들면, QLC 플래시 메모리는 셀들의 PD 값으로 0~15 값을 가질 수 있으며, 에러율 측면에서 셀들의 평균 PD를 가운데 값인 7.5로 만드는 것이 유리할 수 있다. 이 경우 목적 함수는 셀들의 평균 PD를 가운데 값으로 만드는 것이다.
이와 같이 데이터를 기록할 때 평균 셀 상태를 원하는 상태로 만들면서 스크램블링을 가능하게 하는 기술에 대한 필요성이 대두되고 있다. 기존의 스크램블링 기법은 순수한 랜덤화를 수행하여 셀들의 평균 PD를 중앙 값으로 만든다. 그러나 특정 값을 가지는 코드를 더 많이 생성하는 스크램블링 기법을 사용하여 셀들의 평균 상태를 특정 값으로 설정하면, 다양한 목적을 달성할 수 있다.
본 발명은 비휘발성 메모리 장치에서 데이터를 기록할 때 목적하는 셀 상태를 가지는 코드를 더 많이 기록하도록, 코드 밀도를 조절하는 데이터 스크램블링 방법을 제공한다.
상술한 목적을 달성하기 위한 본 발명의 일 실시예에 따른 코드 밀도를 조절하는 데이터 스크램블링 방법은 상기 비휘발성 메모리 장치에 저장할 코드인 플레인코드(plain code) 및 상기 플레인코드를 기록할 주소인 저장주소를 입력받는 단계; 개별 플레인코드에 대응되는 출현 빈도 순위 정보를 포함하는 ET테이블 및 상기 저장주소에 기반하는 랜덤넘버를 이용하여, 상기 플레인코드에 대응되는 조정순위를 산출하는 단계; 개별 플레인코드의 출현 빈도 순위에 대응되는 사이퍼코드(cipher code)의 정보를 포함하는 ECC테이블 및 상기 조정순위를 이용하여, 상기 플레인코드의 출현 빈도 순위에 대응되는 사이퍼코드를 결정하는 단계; 및 상기 저장주소에 상기 사이퍼코드를 저장하는 단계를 포함한다.
바람직하게는, 상기 플레인코드에 대응되는 조정순위를 산출하는 단계는 상기 ET테이블을 이용하여 상기 플레인코드에 대응되는 출현 빈도 순위를 결정하는 단계; 및 상기 결정된 출현 빈도 순위에 상기 랜덤넘버를 더하여 상기 조정순위를 산출하는 단계를 포함할 수 있다.
바람직하게는, 상기 플레인코드의 출현 빈도 순위에 대응되는 사이퍼코드를 결정하는 단계는 상기 조정순위가 상기 ECC테이블의 인덱스 범위를 벗어나면, 상기 ECC테이블의 인덱스 개수에 기반하여 상기 조정순위를 변경하고, 상기 ECC테이블은 상기 ECC테이블의 인덱스가 증가함에 따라, 출현 빈도 순위가 높아지다가 다시 낮아지도록 재구성될 수 있다.
바람직하게는, 상기 랜덤넘버는 0을 반환할 확률이 가장 크고, 0과 차이가 큰 값일수록 반환할 확률이 작아지는 확률밀도함수를 이용하여 결정될 수 있다.
바람직하게는, 상기 플레인코드에 대응되는 조정순위를 산출하는 단계 이전 또는 이후에, 상기 ET테이블의 출현 빈도 순위를 소정의 기준에 따라 인접한 인덱스 간에 맞변경하여 재구성하는 단계를 더 포함할 수 있다.
바람직하게는, 상기 ECC테이블이 순위에 따라 복수의 클래스로 분류되었을 때, 상기 플레인코드에 대응되는 사이퍼코드를 결정하는 단계는 상기 복수의 클래스 중 상기 플레인코드에 대응되는 순위가 포함된 클래스 내에서 상기 플레인코드에 대응되는 상기 사이퍼코드를 결정할 수 있다.
바람직하게는, 상기 저장주소에 상기 사이퍼코드를 저장하는 단계의 이후에, 상기 저장주소와 함께 상기 랜덤넘버를 생성하기 위하여 이용되는 시드(seed)를 변경하는 단계를 포함할 수 있다.
바람직하게는, 상기 비휘발성 메모리 장치에 최근 저장된 소정 개수의 플레인코드를 포함하는 히스토리큐를 이용하여, 상기 소정 개수의 플레인코드에 대응되는 소정 개수의 사이퍼코드를 획득하였을 때, 상기 소정 개수의 사이퍼코드에 대응되는 셀의 상태값에 따라 복수의 확률밀도함수 중 하나를 이용하여 상기 랜덤넘버를 결정할 수 있다.
바람직하게는, 상기 ECC테이블은 정해진 순서에 대응되는 사이퍼코드를 가지며, 이러한 순서는, 사이퍼코드 각각에 대하여 상기 비휘발성 메모리 장치의 성능 목표를 소정 기준에 따라 수치화한 목적함수의 값으로 프로그래밍 디스턴스(Programming Distance, PD)를 정의하였을 때, PD 값이 결정할 수 있다.
바람직하게는, 개별 플레인코드의 출현 빈도 순위가 높아질수록, 목적하는 PD값에 가까운 사이퍼코드와 매칭될 수 있다.
바람직하게는, 상기 목적함수는 상기 비휘발성 메모리 장치에 대하여, 프로그래밍 시 셀의 상태, 프로그래밍 속도, 에러율 및 에너지 소비량 등 적어도 하나에 관한 성능 목표를 수치화한 함수일 수 있다.
또한, 상술한 목적을 달성하기 위한 본 발명의 일 실시예에 따른 데이터 디스크램블링 방법은 제1항의 데이터 스크램블링 방법에 따라 스크램블링된 데이터에 대하여 비휘발성 메모리 장치가 디스크램블링을 수행하는 방법에 있어서, 플레인코드를 독출할 독출주소를 입력받는 단계; 상기 독출주소에서 사이퍼코드를 독출하는 단계; 개별 사이퍼코드에 대응되는 플레인코드의 출현 빈도 순위 정보를 포함하는 DT테이블 및 상기 독출주소에 기반하는 랜덤넘버를 이용하여, 상기 사이퍼코드에 대응되는 출현 빈도 순위를 산출하는 단계; 및 상기 산출된 출현 빈도 순위를 이용하여, 개별 플레인코드의 출현 빈도 순위에 대응되는 플레인코드의 정보를 포함하는 DCC테이블에서 플레인코드를 획득하는 단계;를 포함한다.
본 발명은 비휘발성 메모리 장치에서 데이터를 기록할 때 스크램블링을 수행하면서 특정 상태를 가지는 셀이 차지하는 비율을 높일 수 있는 효과가 있다.
이로 인해, 본 발명은 비휘발성 메모리 장치의 프로그래밍 속도를 개선하고, 에러 발생 확률을 낮추며, 수명을 증대시키는 등, 셀 상태 비율을 조절하여 다양한 목적을 달성할 수 있다.
도 1은 본 발명의 일 실시예에 따른 코드 밀도를 조절하는 데이터 스크램블링 방법을 설명하기 위한 흐름도이다.
도 2는 본 발명의 일 실시예에 따른 데이터 디스크램블링 방법을 설명하기 위한 흐름도이다.
도 3은 데이터 스크램블링 방법을 설명하기 위한 도면이다.
도 4는 데이터 디스크램블링 방법을 설명하기 위한 도면이다.
도 5는 본 발명의 실시예에 따른 데이터 스크램블링 방법을 위해 생성하는 테이블을 위한 도면이다.
도 6은 본 발명의 실시예에 따른 데이터 스크램블링 방법을 위해 생성하는 테이블을 위한 도면이다.
도 7은 본 발명의 실시예에 따른 데이터 디스크램블링 방법을 위해 생성하는 테이블을 위한 도면이다.
도 8는 본 발명의 실시예에 따른 데이터 스크램블링 방법을 설명하기 위한 도면이다.
도 9는 본 발명의 실시예에 따른 데이터 디스크램블링 방법을 설명하기 위한 도면이다.
도 10 내지 11은 본 발명의 일 실시예에 따른 확률밀도함수를 나타내는 도면이다.
도 12는 순수한 랜덤화를 위한 확률밀도함수를 나타내는 도면이다.
도 13은 본 발명의 또 다른 실시예에서 코드 출현 빈도에 따라 테이블을 동적으로 재구성하는 방법을 설명하기 위한 도면이다.
도 14는 기존 스크램블링 기법을 사용할 때 셀 상태의 비율을 설명하기 위한 도면이다.
도 15는 본 발명의 또 다른 실시예에서 셀 상태를 가운데로 만들기 위해 구성하는 테이블을 설명하기 위한 도면이다.
도 16은 본 발명의 또 다른 실시예에서 셀 상태의 비율을 설명하기 위한 도면이다.
도 17은 본 발명의 또 다른 실시예에 따른 셀의 상태 영역을 설명하기 위한 도면이다.
도 18은 본 발명의 또 다른 실시예에 따른 히스토리큐를 이용한 차등적 랜덤화를 설명하기 위한 도면이다.
도 19는 본 발명의 또 다른 일 실시예에 따른 스크램블링 기법을 설명하기 위한 도면이다.
도 20은 본 발명의 또 다른 일 실시예에 따른 디스크램블링 기법을 설명하기 위한 도면이다.
본 발명은 다양한 변경을 가할 수 있고 여러 가지 실시예를 가질 수 있는 바, 특정 실시예들을 도면을 참조하여 상세하게 설명하도록 한다. 그러나 이는 본 발명을 특정한 실시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다. 각 도면을 설명하면서 유사한 참조부호를 유사한 구성요소에 대해 사용하였다.
제1, 제2, A, B 등의 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 상기 구성요소들은 상기 용어들에 의해 한정되어서는 안된다. 상기 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 사용된다. 예를 들어, 본 발명의 권리범위를 벗어나지 않으면서 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소도 제1 구성요소로 명명될 수 있다. 및/또는 이라는 용어는 복수의 관련된 기재 항목들의 조합 또는 복수의 관련된 기재 항목들 중의 어느 항목을 포함한다.
어떤 구성요소가 다른 구성요소에 "연결되어" 있다거나 "접속되어" 있다고 언급될 때에는 그 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성요소가 다른 구성요소에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는, 중간에 다른 구성요소가 존재하지 않는 것으로 이해되어야 할 것이다.
본 출원에서 사용한 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 출원에서, "포함하다" 또는 "가지다" 등의 용어는 명세서상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥 상 가지는 의미와 일치하는 의미를 가지는 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
본 출원의 실시 예에서 사용하는 데이터 크기는 특정한 값에 국한되지 않으며, 다른 크기가 사용될 수 있다. 아울러 제시된 크기 이외에 다른 크기의 데이터를 사용하여 테이블이나 자료구조가 구성될 수 있다. 제시된 기법들은 특정 데이터 크기에 국한되지 않고, 다양한 데이터 크기에서도 동작할 수 있다.
명세서 및 청구범위 전체에서, 어떤 부분이 어떤 구성 요소를 포함한다고 할때, 이는 특별히 반대되는 기재가 없는 한 다른 구성 요소를 제외하는 것이 아니라 다른 구성 요소를 더 포함할 수 있다는 것을 의미한다.
이하, 첨부된 도면을 참조하여 본 발명에 대해 상세하게 설명한다.
도 1은 데이터 스크램블링 방법의 실시예를 설명하기 위한 흐름도이다.
단계 S110에서는, 비휘발성 메모리 장치가 플레인코드(plain code) 및 그 플레인코드를 기록할 주소인 저장주소를 입력받는다.
여기서, 플레인코드는 비휘발성 메모리 장치에 기록되어야 하는 데이터 코드이며, 사이퍼코드(cipher code)는 플레인코드를 소정의 목적함수에 따라 변환한 데이터 코드로서, 실질적으로 비휘발성 메모리 장치에 기록되는 코드이다.
단계 S120에서는, 비휘발성 메모리 장치가 개별 플레인코드에 대응되는 ET테이블에서의 순위 및 그 저장주소에 기반하는 랜덤넘버를 이용하여 조정순위를 산출한다.
예컨대, 도 3을 참조하면, ET테이블은 플레인코드 1에 대하여 순위 1위의 값을 포함하고 있다.
또한, 랜덤넘버는 플레인코드와는 무관하게, 저장주소와 미리 결정된 시드(seed)를 이용하여 생성된 무작위의 숫자이다. 예컨대, 도 3을 참조하면, Encode함수에 입력되는 addr에 대하여 shift(addr) 함수값인 s가 랜덤넘버를 나타낸다.
즉, 비휘발성 메모리 장치는 ET테이블과 랜덤넘버를 이용하여 플레인코드에 대응되는 조정순위를 산출할 수 있다. 이때, 조정순위는 플레인코드에 대응되는 ET테이블의 순위를 랜덤넘버를 이용하여 변경한 후의 순위를 의미한다.
예컨대, 도 3을 참조하면, 비휘발성 메모리 장치는 플레인코드 1에 대하여 순위로 1을 획득하고, 1에 랜덤넘버 s(31)를 더하여 조정순위 32를 산출할 수 있다.
단계 S130에서는, 비휘발성 메모리 장치가 개별 플레인코드의 순위에 대응되는 사이퍼코드(cipher code)의 정보를 포함하는 ECC테이블 및 그 조정순위를 이용하여, 플레인코드의 조정 순위에 대응되는 사이퍼코드를 결정한다.
다른 실시예에서는, 비휘발성 메모리 장치가 플레인코드에 대응되는 사이퍼코드를 결정할 때, 조정순위가 ECC테이블의 인덱스 범위를 벗어나면, ECC테이블의 인덱스 개수에 기반하여 조정순위를 변경할 수 있다.
예컨대, 비휘발성 메모리 장치는 조정순위가 0보다 작은 음수이거나, ECC테이블의 인덱스 개수 이상인 경우, 사이퍼코드를 결정하기 어려울 수 있다.
이 경우, 비휘발성 메모리 장치는 조정순위가 0보다 작은 음수이면, 조정순위가 0이상이 될 때까지 조정순위에 ECC테이블의 인덱스 개수를 반복하여 더할 수 있다. 보다 구체적으로, 비휘발성 메모리 장치는 ECC테이블의 인덱스 범위가 0에서 255이고, 인덱스 개수가 256개인 경우를 가정하면, 조정순위가 -100인 경우, -100에 인덱스 개수 256을 더하여 156으로 조정순위를 변경할 수 있다.
반대로, 비휘발성 메모리 장치는 조정순위가 ECC테이블의 인덱스 개수 이상이면, 조정순위가 ECC테이블의 인덱스 개수 미만이 될 때까지 조정순위에 ECC테이블의 인덱스 개수를 반복하여 뺄 수 있다. 보다 구체적으로, 비휘발성 메모리 장치는 ECC테이블의 인덱스 범위가 0에서 255이고, 인덱스 개수가 256개인 경우를 가정하면, 조정순위가 356인 경우, 356에서 인덱스 개수 256을 빼서 100으로 조정순위를 변경할 수 있다.
이때, ECC테이블은 ECC테이블의 인덱스가 증가함에 따라, 출현 빈도 순위가 높아지다가 다시 낮아지도록 재구성된 상태일 수 있다.
도 6을 참조하여 구체적으로 설명하면, ECC[0]의 코드는 EW[128]에, ECC[1]의 코드는 EW[127]에, ECC[2]의 코드는 EW[129]에, ECC[3]의 코드는 EW[126]에 배치될 수 있다. 그리고 ECC[254]의 코드는 EW[255]에, ECC[255]의 코드는 EW[0]에 배치될 수 있다. 여기서, EW테이블이 원형 형태로 재구성된 ECC테이블일 수 있으며, EW테이블을 살펴보면 EW[0]에서 인덱스가 증가함에 따라 대응되는 출현 빈도 순위가 높아지다가, EW[128]에서 인덱스가 증가함에 따라 대응되는 출현 빈도 순위가 다시 낮아지는 것을 알 수 있다.
마지막으로 단계 S140에서는, 비휘발성 메모리 장치가 저장주소에 사이퍼코드를 저장한다.
도 2는 데이터 디스크램블링 방법의 실시예를 설명하기 위한 흐름도이다.
단계 S210에서는, 비휘발성 메모리 장치가 플레인코드를 독출할 독출주소를 입력받는다.
예컨대, 비휘발성 메모리 장치는 외부 장치로부터 플레인코드를 독출하기 위한 독출주소를 입력받을 수 있다.
단계 S220에서는, 비휘발성 메모리 장치가 독출주소에서 사이퍼코드를 독출한다.
예컨대, 비휘발성 메모리 장치는 독출주소에서 8bit의 데이터를 독출할 수 있으나, 이는 사이퍼코드값으로서 플레인코드가 아니기 때문에, 추가적인 변환이 필요한 상태이다.
단계 S230에서는, 비휘발성 메모리 장치가 개별 사이퍼코드의 순위에 대응되는 플레인코드의 정보를 포함하는 DT테이블 및 그 독출주소에 기반하는 랜덤넘버를 이용하여, 조정 순위를 산출한다.
예컨대, 비휘발성 메모리 장치는 DT테이블에서 사이퍼코드에 대응되는 순위를 획득하고, 그 획득한 순위에서 랜덤넘버(s)를 뺀 후에, 사이퍼코드에 대응되는 최종적인 조정순위를 산출할 수 있다.
마지막으로 단계 S240에서는, 비휘발성 메모리 장치가 그 산출된 조정 순위에 대응되는 플레인코드의 정보를 포함하는 DCC테이블에서 플레인코드를 획득한다.
예컨대, 도 4를 참조하면, 비휘발성 메모리 장치는 사이퍼코드 32에 대하여 순위로 32를 획득하고, 32에 랜덤넘버 s(31)를 빼서 조정순위 1을 산출할 수 있다. 그리고 이 순위에 대응되는 플레인코드를 획득할 수 있다.
즉, 비휘발성 메모리 장치는 플레인코드를 다수의 사이퍼코드 중 하나로 인코딩하여 저장주소에 저장함으로써 스크램블링을 가능하게 한다. 아울러 변환된 사이퍼코드를 가지고 다시 플레인코드로 디코딩할 수 있다.
모든 사이퍼코드를 동일한 확률로 생성하는 것을 목적으로 하는 스크램블링 기법과 다르게, 본 발명은 목적함수에 맞게 사이퍼코드의 밀도를 조절하는 것을 목표로 한다.
생성하는 사이퍼코드의 밀도를 비균일하게 만들기 위해서는 비균일을 유발하는 원천 (source)이 존재해야 하며, 본 발명에서는 이를 위하여 코드 출현 빈도의 차이를 이용한다.
사이퍼코드 밀도를 조절하는 본 발명의 실시예는 저장 확률이 다른 플레인 코드, 출현 빈도가 다른 플레인코드와 원하는 PD 값을 가지는 사이퍼코드를 연결하는 테이블 구성, 랜덤 넘버를 비균일로 반환하는 확률 밀도 함수를 사용할 수 있다.
도 5는 본 발명의 실시예를 위한 테이블들의 구성을 보여준다. 먼저 플레인코드의 출현 빈도에 따라 순위를 지정한 FT 테이블을 구성한다. 그리고 목적하는 PD 값에 가까운 순으로 순위를 지정한 PDT 테이블을 생성한다.
예컨대, 도 5에서 플레인코드 0은 출현 빈도가 가장 높으며, 그 다음으로 플레인코드 255가 출현 빈도가 높다고 하면 FT 테이블에서 이들은 순위 0과 1을 차지한다.
PD값으로 정의된 목적함수에 따라 부여된 순서에 따라, 사이퍼코드 255, 127, 247이 순서 0, 1, 2를 가진다고 할 때, 도 5와 같이 PDT 테이블을 구성할 수 있다.
그리고 FT와 PDT 테이블을 이용하여 인코딩과 디코딩을 위한 ET, ECC, DT, DCC 테이블을 도 5와 같이 구성할 수 있다.
상기 인코딩과 디코딩을 위한 테이블은 조정 순위에 따라 위치가 결정될 때 순위가 붕괴되지 않도록 재구성될 필요가 있다. 예컨대, 도 5에서 DCC 테이블은 FT 테이블을 기반으로 만들어진다. DCC 테이블은 코드 출현 빈도에 따라 순위 0부터 255까지 존재한다. 그런데, 순위 0과 1, 1과 2는 그 발생 빈도 순이 점진적이지만, 순위 0과 255 사이는 순위 차이가 점진적이지 않다.
아울러, 도 5의 ECC 테이블은 PDT 테이블을 기반으로 만들어진다. ECC 테이블에는 사이퍼코드의 PD 값에 따라 순위가 0부터 255까지 존재한다. 그런데 순위 0과 1은 그 PD 순위가 점진적이지만, 순위 0과 255는 순위 차이가 점진적이지 않다.
이런 경우 인코딩과 디코딩 과정에서 테이블 인덱스가 0보다 작아지거나 255보다 커지는 경우 테이블의 반대쪽으로 재진입하는 순환 과정에서 순위 차이가 붕괴되어 순위를 지정한 의미가 사라진다.
앞서 ECC테이블의 재구성을 설명한 바와 같이, 이 문제를 해결하기 위하여 본 발명의 실시예는 ECC와 DCC 테이블을 원형 형태로 재구성할 수 있다.
도 6을 보면, ECC 테이블을 기반으로 원형 형태의 EW 테이블을 구성할 수 있다. 사이퍼코드들이 EW 테이블에 저장된 형태를 보면, PD 값에 따른 코드들의 순위가 점진적으로 감소하다가 다시 점진적으로 증가하는 형태를 가진다.
도 6과 같이 ECC 테이블을 거치지 않고 ET 테이블이 EW 테이블을 바로 가리키도록 최적화할 수 있다.
또한, 도 7에서 보면, DCC 테이블을 기반으로 원형 형태의 DW 테이블을 구성할 수 있다. 플레인코드들이 DW 테이블에 저장된 형태를 보면, 코드들의 출현 빈도 순위가 점진적으로 감소하다가 다시 점진적으로 증가하는 형태를 가진다. 이렇게 원형 형태로 구성하여 순위 차이가 붕괴되지 않고 점전적이 되도록 한다.
도 7과 같이 DCC 테이블을 거치지 않고 DT 테이블이 DW 테이블을 바로 가리키도록 최적화할 수 있다.
도 8은 인코딩과 디코딩을 위한 테이블을 원형 형태로 구성할 때 플레인코드를 사이퍼코드로 변환하는 과정을 보여준다. 상기 실시예에서 변환하고자 하는 플레인 코드 255는 도 5에 따르면 FT와 ECC에서 순위 1번이며, 이와 대응되는 사이퍼코드는 PDT와 ECC 테이블의 1순위 위치에 있는 코드 127이다.
도 8에서 ET 테이블은 각 플레인코드에 대응되는 사이퍼코드가 존재하는 EW 테이블의 특정 위치(인덱스)를 가리킨다. 도 8의 예에서 플레인코드 255와 대응되는 사이퍼코드는 127이며, ET 테이블의 255번 위치로부터 사이퍼코드가 존재하는 EW 테이블의 인덱스(wh_index)를 찾을 수 있다.
EW 테이블의 인덱스를 찾으면, 다음 단계로 저장주소에 기반하는 랜덤넘버를 이용하여 s값을 받으며, 이를 인덱스(wh_index)와 더하여 조정순위를 산출한다. 조정순위를 산출할 때 rotate()는 EW 테이블의 경계에서 반대 방향으로 재진입하여 인덱스 값 wh_index+s를 재조정하는 역할을 한다.
이와 같이 EW에서 조정순위가 가리키는 위치의 사이퍼코드를 반환함으로써 플레인코드가 사이퍼코드로 변환된다. 도 8의 예에서는 플레인코드 255는 사이퍼코드 247로 변환된다.
도 9는 인코딩과 디코딩을 위한 테이블을 원형 형태로 구성할 때 사이퍼코드를 플레인코드로 변환하는 과정을 보여준다. 상기 실시예에서는 사이퍼코드 247을 플레인코드로 변환하며, 먼저 DT 테이블의 247번 항목에서 출발하여 DW 테이블의 인덱스(wh_index)를 구한다. 다음 단계로 저장주소에 기반하는 랜덤넘버를 이용하여 s값을 받으며, 이를 인덱스(wh_index)와 빼서 조정순위를 산출한다. 조정순위를 산출할 때 rotate()는 DW 테이블에서 경계를 벗어나는 경우 반대 방향으로 재진입하여 인덱스 값 wh_index-s를 재조정하는 역할을 수행한다. 그리고 DW에서 조정순위가 가리키는 위치의 플레인코드를 반환함으로써 사이퍼코드가 플레인코드로 변환된다. 도 9의 예에서는 사이퍼코드 247은 플레인코드 255로 변환된다.
코드 출현 빈도 차이를 활용하여 사이퍼코드 밀도를 조절하기 위해서는 테이블의 적절한 구성 이외에도 비균일 확률밀도함수를 사용하여 랜덤넘버를 획득해야 할 수도 있다. 실시예에서는 shift(addr)라는 함수 이름을 사용하여 랜덤넘버를 획득하였다.
도 10 및 11은 0을 반환할 확률이 가장 크며, 0과 멀어질수록 반환 확률이 작아지는 비균일 확률밀도함수를 보여준다. 이러한 확률밀도함수를 사용하여 랜덤넘버를 획득하면, 랜덤넘버로 0이 반환될 확률이 가장 크고, 0과 차이가 큰 값일수록 반환될 확률이 작아진다. 이와 같이 랜덤넘버를 반환하는 확률밀도함수로 비균일 함수를 사용하는 경우 PDT 테이블에서의 순위에 비례하도록 사이퍼코드의 밀도를 조절할 수 있다.
확률밀도함수로는 도 10과 도 11에 나타난 확률밀도함수 이외에도 다른 비균일 확률밀도함수를 사용할 수 있다.
한편, 도 12에 나타난 균일한 확률밀도함수를 사용하면 기존 순수한 랜덤화 기법을 적용한 것과 같다. 이런 경우 사이퍼코드 밀도가 조절되지 않을 수 있다.
본 발명은 변환된는 사이퍼코드들의 밀도를 다르게 만들기 위해 플레인코드의 출현 빈도 차이를 활용한다. 이를 위해 플레인코드의 출현 빈도를 조사하여 초기 테이블을 구축할 수 있다.
다른 실시예로 인코딩과 디코딩 과정에서 출현하는 플레인코드를 보고 변환을 위한 테이블을 동적으로 재구성할 수 있다.
예를 들어 도 5에서 플레인코드 32는 FT 테이블과 이를 기반으로 만들어지는 ECC 테이블에서 순위 2번을 가진다. 만약 플레인코드 32가 출현하여, 사이퍼코드로 변환되어 저장되는 경우, 동적 재구성 기법은 플레인코드 32의 순위를 증가시킨다. 도 5에서 32의 순위는 2에서 1로 상승하고, 1번 순위를 가진 플레인코드 255의 순위는 2가 된다. 이러한 순위 변화에 맞게 ET와 DCC 테이블 및 이를 기반으로 만들어지는 DW 테이블도 변경된다. 도 13에서 rank_up() 함수는 이러한 변경작업을 수행한다.
어떤 사이퍼코드 e가 플레인코드로 변경되는 경우에도 역시 동적으로 테이블을 재구성한다. 예를 들어 사이퍼코드 e가 플레인코드 32로 변환되었다고 하면, 동적 재구성 기법에 따르면 도 5의 FT 테이블에서 플레인코드 32의 순위가 상승한다. 그리고 상위에 있던 플레인코드의 순위는 하락한다. 그리고 이러한 순위 변화에 맞게 ET와 DCC 테이블 및 이를 기반으로 만들어지는 DW 테이블도 변경된다. 도 13의 rank_up() 함수는 이러한 변경작업을 수행한다.
상기 실시예에서는 출현하는 코드의 순위를 1씩 증가시키지만, 꼭 1로 한정되지 않는다. 필요에 따라 n 단계만큼 증가시킬 수 있고, 동일한 코드가 반복적으로 나타나면 한 번에 증가시키는 단계를 크게 할 수도 있다. 아울러 매 변환시마다 동적 재구성을 수행하지 않고, 일정 횟수를 변환한 후 동적 재구성을 수행할 수도 있다. 이와 같이 동적 재구성 기법은 상기 기술한 특정한 예에 국한되지 않는다.
또 다른 실시예로 동적 재구성은 인코딩과 디코딩되는 매 순간마다 실행될 수 있고, 주기적으로 실행될 수 있다. 실시예로 주기 P 마다 동적 재구성을 실행할 수 있다. P 횟수만큼 인코딩 또는 디코딩을 수행하면서 플레인코드들의 출현 빈도를 수집한다. 그리고 수집한 출현 빈도를 기반으로 매 주기 P마다 도 5의 FT 테이블을 재구성한다. 그리고 동적 재구성 기법은 이러한 순위 변화에 맞게 ET와 DCC 테이블 및 이를 기반으로 만들어지는 DW 테이블도 변경한다.
본 발명의 효과인 사이퍼코드의 밀도를 조절하여 비휘발성 메모리 셀들의 평균 상태를 조절하는 또 다른 실시예는 다음과 같다.
QLC(Quad-Level Cell) 플래시 메모리는 셀 당 4비트를 저장한다. 소거 후 셀의 상태를 S0로 정의하고, 프로그래밍 동작은 셀의 상태를 S0, S1, …, S14, S15로 변경할 수 있다. 그리고 S0~S15에 비트 '1111', ''1110', '1100', '1101', …, '0111'을 할당할 수 있다.
셀의 상태 S0~S15를 0~15까지 숫자로 표현할 수 있다. 기존의 스크램블링 기법은 사이퍼코드를 랜덤화하여 셀의 평균 상태 값을 중간 값이 7.5 근처로 만든다. 도 14에서 보듯이 모든 사이퍼코드의 밀도가 동일하면 모든 셀 상태가 고루 사용되며, 셀 상태의 평균 값은 그 중앙 값이 7.5 근처가 된다.
기존 스크램블링 기법이 셀 상태를 랜덤화하는 이유는 셀 간 상태 차이의 편차를 줄이기 위함이다. 플래시메모리에서 인접 셀 간에 상태 차이가 클수록 간섭효과로 인하여 에러율이 커진다. 따라서 셀 상태 차이를 줄이기 위해 기존 스크램블링 기법은 사이퍼코드를 랜덤화하여 최악의 경우에 발생할 수 있는 상태 차이 편차를 줄이려고 노력한다.
동일한 문제를 해결하기 위하여 본 발명의 또다른 실시예는 되도록 많은 셀의 상태를 중간 값인 7.5에 가깝도록 만드는 것이 될 수 있다. 즉, 목적 함수는 상태값이 7.5에 가까운 사이퍼코드의 밀도를 높이는 것이며, 이를 위해서 본 발명의 일 실시예는 PDT 테이블을 도 15와 같이 구성할 수 있다.
도 15에서 FT는 플레인코드의 출현 빈도에 따라 순위를 부여한 것이며, PDT는 사이버 코드가 가지는 셀 상태 값이 중간 값인 7.5에 가까운 순으로 순위를 부여한 것이다. 이러한 FT와 PDT 테이블을 기반으로 본 발명의 기법을 적용하면 셀 상태가 중간 값에 가까운 코드 밀도를 높여, 도 16에서 보듯이 더 많은 셀이 중간 상태 값을 가지게 된다.
그렇지만 일부 셀들은 도 17에서 보듯이 구역 0이나 1 또는 3이나 4와 같이 평균에서 떨어진 상태를 가질 수 있으며, 이러한 셀들이 많아질수록 셀들간 간섭 효과로 에러율이 상승할 수 있다.
이와 같은 문제를 해결하기 위하여, 본 발명의 또 다른 실시예는 히스토리큐를 이용하여, 선택적으로 확률밀도함수를 변경하는 방식을 사용할 수 있다. 여기서, 히스토리큐는 최대 M개의 이전 플레인코드를 저장하는 선입선출(FIFO) 히스토리큐일 수 있다.
보다 구체적으로, 비휘발성 메모리 장치는 히스토리큐에 저장된 플레인코드를 가지고 이들과 1:1로 대응되는 사이퍼코드를 획득할 수 있다. 그리고, 이 사이퍼코드들이 실제 저장될 때 가지는 셀의 상태에 관한 정보를 획득할 수 있다.
플레인코드와 1:1로 대응되는 사이퍼코드는 랜덤넘버를 이용한 순위가 조정되지 않을 때 얻어지는 코드이다. 이러한 1:1 대응 사이퍼코드는 랜덤넘버를 이용한 조정순위가 적용된 후에도 셀 상태에 대한 정보를 획득할 수 있는 중요한 단서가 될 수 있다.
특히 비균일 확률밀도함수로부터 얻어진 랜덤넘버로 순위를 조정하는 경우, 조정후 얻어지는 사이퍼코드는 1:1로 대응되는 사이퍼코드와 유사한 셀 상태를 가질 확률이 크다. 따라서 1:1로 대응되는 사이퍼코드의 셀 상태로부터 조정 후 얻어지는 사이퍼코드의 셀 상태에 대한 정보를 획득할 수 있다.
도 17을 참조하면, 본 발명의 실시 예는 히스토리큐에 저장된 플레인코드에 대하여 이에 1:1로 대응되는 사이퍼코드의 주된 셀 상태가 어느 영역에 속하는지를 판단할 수 있다. 한가지 예로, 주된 상태가 도 17과 같이 region 0, 1, 2, 3, 4중 하나로 결정할 수 있다. 그리고, 본 발명의 실시 예는 그 상태값에 따라 복수의 확률밀도함수 중 하나를 이용하여 랜덤넘버를 결정함으로써 차등적 랜덤화를 수행할 수 있다.
이는, 도 18을 참조하면, Eval__HIST()함수에 구현되어 있으며, Eval__HIST()함수의 리턴값에 따라 복수의 확률밀도함수 중 하나를 이용하여 랜덤넘버(s)가 결정될 수 있다.
보다 구체적으로, 비휘발성 메모리 장치는 셀 상태 값이 낮거나 높은 코드가 연속적으로 저장되어 에러율이 높아질 가능성이 있는 경우, 도 18의 shift_0()함수를 이용하여 랜덤화 정도를 높이거나 순수한 랜덤화 기법을 적용할 수 있다. 그렇지 않고 가운데 상태에 가까운 값을 가지는 코드가 주로 나타나는 경우 도 18의 shift_1() 또는 shift_2()함수를 이용하여 차등적 랜덤화를 적용할 수 있다.
상기 실시예에서 region 0과 region 4는 모두 중앙 값에서 떨어진 정도를 볼 때 동일한 것으로 취급될 수 있다. 동일한 이유로 그리고 region1과 region 3은 동일한 것으로 간주될 수 있다. Eval__HIST()는 이들을 동일하게 취급하여 차등적 램덤화를 수행할 수 있다.
상기 실시예에서 일정 개수 이상의 코드가 특정 영역에 속한다고 판단되는 경우 매번 Eval_HIST()로 영역을 결정하지 않고 지정된 횟수동안 특정 특정확률밀도 함수를 적용하도록 할 수 있다.
또 다른 실시예에서는, 확률밀도함수를 사용하지 않고, ECC 및 DCC 테이블을 클래스로 분할하여, 플레인코드의 출현 빈도 차이를 이용하여 사이퍼코드의 밀도를 조절할 수 있다.
구체적으로 실시 예에서 ECC테이블이 복수의 클래스로 분류되었을 때, 플레인코드와 1:1로 대응되는 사이퍼코드의 인덱스를 ECC에서 구한 후, 해당 사이퍼 코드가 소속된 클래스 내부에서 조정순위를 결정하는 것이다.
예컨대, 도 19를 참조하면, 비휘발성 메모리 장치는 ECC테이블이 256개의 인덱스 개수를 가지는 경우, 이를 16개씩 16개의 클래스로 분류할 수 있다. 즉, 비휘발성 메모리 장치는 ECC테이블의 인덱스 0~15까지를 클래스 0, 16~31까지를 클래스 1, 그리고 이와 동일하게 클래스 15까지로 분류할 수 있다.
이때, 비휘발성 메모리 장치는 플레인코드 32에 대한 순위 2가 ECC테이블에서 클래스 0에 속함을 파악하고, 조정순위 값으로 클래스의 멤버 개수인 0~15를 생성하여 클래스에 소속된 16개의 사이퍼코드 중 하나를 결정할 수 있다. 보다 구체적으로, 비휘발성 메모리 장치는 플레인코드 32에 대한 조정순위를 15로 결정하고, 최종적으로 127로 사이퍼코드를 결정할 수 있다.
상기 실시예에서 조정순위를 결정하기 위하여 도 19에 있는 shift16A(addr)이 제공하는 랜덤넘버를 이용하였다.
도 20을 참조하면, 사이퍼코드를 플레인코드로 변환하기 위하여 비휘발성 메모리 장치는 DCC테이블이 256개의 인덱스 개수를 가지는 경우, 이를 16개씩 16개의 클래스로 분류할 수 있다. 즉, 비휘발성 메모리 장치는 DCC테이블의 인덱스 0~15까지를 클래스 0, 16~31까지를 클래스 1, 그리고 이와 동일하게 클래스 15까지로 분류할 수 있다.
이때, 비휘발성 메모리 장치는 사이퍼코드 127에 대한 순위 1이 DCC테이블에서 클래스 0에 속함을 파악하고, 조정순위 값으로 클래스의 멤버 개수인 0~15를 생성하여 클래스에 소속된 16개의 플레인코드 중 하나를 결정할 수 있다. 보다 구체적으로, 비휘발성 메모리 장치는 사이퍼코드 127에 대한 조정순위를 -15로 결정하고, 최종적으로 32로 플레인코드를 결정할 수 있다.
상기 실시예에서 조정순위를 결정하기 위하여 도 20에 있는 shift16A(addr)이 제공하는 랜덤넘버를 이용하였다.
도 19와 20에서 보듯이 shift16B(addr)이 제공하는 랜덤넘버를 이용하여 클래스번호도 조정할 수 있다. 일정한 확률로 클래스번호를 조정하여 스크램블링 정도를 조절할 수 있다.
클래스분할 기법을 사용할 때에서 상기 실시예에서 언급한 동적테이블재구성 기법과 히스토리 큐 기법에 같이 적용될 수 있다.
히스토리 큐 기법을 같이 적용하는 경우 Eval_HIST() 함수가 리턴한 값에 따라 클래스번호 조정 확률을 변경할 수 있다.
예컨대, Eval_HIST() 함수가 영역 값으로 0 또는 4를 리턴한 경우 100%의 확률로 클래스번호를 조정할 수 있다. 그리고 1 또는 3인 경우 50% 확률로 클래스번호를 조정할 수 있다. 영역 값으로 2를 리턴한 경우 10% 확률로 클래스번호를 조정할 수 있다. 도 19와 20에서 probability(hret) 함수는 Eval_HIST()의 리턴 값 hret에 따라 정해진 확률로 TRUE를 리턴하는 함수이다.
비휘발성 메모리 장치는 특정 크기 또는 페이지의 배수 크기로 데이터를 저장하고 읽어올 수 있다. 그리고 이러한 크기 단위로 스크램블링과 디스크램블링이 수행될 수 있다. 본 발명의 실시예에서 동적 재구성 기법과 히스토리큐 방법 등은 코드 패턴에 적응하는 방법이며, 코드 패턴에 적응하는데 일정 기간이 필요할 수 있다. 항상 페이지의 시작 부분부터 스크램블링과 디스크램블링을 수행하면 적응 기간 동안 변환되는 코드는 항상 페이지의 시작 부분에 존재하게 된다. 적응 기간에 변환되는 코드의 위치를 여러 부분으로 분산시키기 위하여 도 21과 같이 스크램블링과 디스크램블링 시작 위치를 다르게 설정할 수 있다. 도 21에서는 페이지마다 스크램블링과 디스크램블링 시작 위치를 다르게 설정하였으며, 이 시작위치는 페이지의 주소(addr)를 기반으로 한 랜덤넘버로 결정할 수 있다.
이상의 설명은 본 발명의 기술 사상을 예시적으로 설명한 것에 불과한 것으로, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 사람이라면 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 다양한 수정 및 변형이 가능할 것이다. 따라서, 본 발명에 개시된 실시예들은 본 발명의 기술 사상을 한정하기 위한 것이 아니라 설명하기 위한 것이고, 이러한 실시예에 의하여 본 발명의 기술 사상의 범위가 한정되는 것은 아니다. 본 발명의 보호 범위는 아래의 청구범위에 의하여 해석되어야 하며, 그와 동등한 범위 내에 있는 모든 기술 사상은 본 발명의 권리범위에 포함되는 것으로 해석되어야 할 것이다.

Claims (10)

  1. 비휘발성 메모리 장치가 데이터 스크램블링을 수행하는 방법에 있어서,
    상기 비휘발성 메모리 장치에 저장할 코드인 플레인코드(plain code) 및 상기 플레인코드를 기록할 주소인 저장주소를 입력받는 단계;
    개별 플레인코드에 대응되는 출현 빈도 순위 정보를 포함하는 ET테이블 및 상기 저장주소에 기반하는 랜덤넘버를 이용하여, 상기 플레인코드에 대응되는 조정순위를 산출하는 단계;
    개별 플레인코드의 출현 빈도 순위에 대응되는 사이퍼코드(cipher code)의 정보를 포함하는 ECC테이블 및 상기 조정순위를 이용하여, 상기 플레인코드의 출현 빈도 순위에 대응되는 사이퍼코드를 결정하는 단계; 및
    상기 저장주소에 상기 사이퍼코드를 저장하는 단계;
    를 포함하는 것을 특징으로 하는 코드 밀도를 조절하는 데이터 스크램블링 방법.
  2. 제1항에 있어서,
    상기 플레인코드에 대응되는 조정순위를 산출하는 단계는
    상기 ET테이블을 이용하여 상기 플레인코드에 대응되는 출현 빈도 순위를 결정하는 단계; 및
    상기 결정된 출현 빈도 순위에 상기 랜덤넘버를 더하여 상기 조정순위를 산출하는 단계
    를 포함하는 것을 특징으로 하는 코드 밀도를 조절하는 데이터 스크램블링 방법.
  3. 제1항에 있어서,
    상기 플레인코드의 출현 빈도 순위에 대응되는 사이퍼코드를 결정하는 단계는
    상기 조정순위가 상기 ECC테이블의 인덱스 범위를 벗어나면, 상기 ECC테이블의 인덱스 개수에 기반하여 상기 조정순위를 변경하고,
    상기 ECC테이블은
    상기 ECC테이블의 인덱스가 증가함에 따라, 출현 빈도 순위가 높아지다가 다시 낮아지도록 재구성되는 것을 특징으로 하는 코드 밀도를 조절하는 데이터 스크램블링 방법.
  4. 제3항에 있어서,
    상기 랜덤넘버는
    0을 반환할 확률이 가장 크고, 0과 차이가 큰 값일수록 반환할 확률이 작아지는 확률밀도함수를 이용하여 결정되는 것을 특징으로 하는 코드 밀도를 조절하는 데이터 스크램블링 방법.
  5. 제3항에 있어서,
    상기 ECC테이블이 개별 플레인코드의 출현 빈도 순위에 따라 복수의 클래스로 분류되었을 때,
    상기 플레인코드에 대응되는 사이퍼코드를 결정하는 단계는
    상기 복수의 클래스 중 상기 플레인코드에 대응되는 출현 빈도 순위가 포함된 클래스 내에서 상기 플레인코드에 대응되는 상기 사이퍼코드를 결정하는 것을 특징으로 하는 코드 밀도를 조절하는 데이터 스크램블링 방법.
  6. 제1항에 있어서,
    상기 플레인코드에 대응되는 조정순위를 산출하는 단계의 이전 또는 이후에,
    상기 ET테이블의 출현 빈도 순위를 소정의 기준에 따라 인접한 인덱스 간에 맞변경하여 재구성하는 단계를 더 포함하는 것을 특징으로 하는 코드 밀도를 조절하는 데이터 스크램블링 방법.
  7. 제1항에 있어서,
    상기 랜덤넘버는
    상기 비휘발성 메모리 장치에 최근 저장된 소정 개수의 플레인코드를 포함하는 히스토리큐를 이용하여, 상기 소정 개수의 플레인코드에 대응되는 소정 개수의 사이퍼코드를 획득하였을 때,
    상기 소정 개수의 사이퍼코드에 대응되는 셀의 상태값에 따라 복수의 확률밀도함수 중 하나를 이용하여 결정되는 것을 특징으로 하는 코드 밀도를 조절하는 데이터 스크램블링 방법.
  8. 제1항에 있어서,
    상기 ECC테이블은
    사이퍼코드 각각에 대하여 상기 비휘발성 메모리 장치의 성능 목표를 소정 기준에 따라 수치화한 목적함수의 값으로 프로그래밍 디스턴스(Programming Distance, PD)를 정의하였을 때,
    개별 플레인코드의 출현 빈도 순위가 높아질수록, 낮은 PD값을 가지는 사이퍼코드와 매칭되는 것을 특징으로 하는 코드 밀도를 조절하는 데이터 스크램블링 방법.
  9. 제8항에 있어서,
    상기 목적함수는
    상기 비휘발성 메모리 장치에 대하여, 프로그래밍 시 셀의 상태, 프로그래밍 속도, 에러율 및 에너지 소비량 중 적어도 하나에 관한 성능 목표를 수치화한 함수인 것을 특징으로 하는 코드 밀도를 조절하는 데이터 스크램블링 방법.
  10. 제1항의 데이터 스크램블링 방법에 따라 스크램블링된 데이터에 대하여 비휘발성 메모리 장치가 디스크램블링을 수행하는 방법에 있어서,
    플레인코드를 독출할 독출주소를 입력받는 단계;
    상기 독출주소에서 사이퍼코드를 독출하는 단계;
    개별 사이퍼코드에 대응되는 플레인코드의 출현 빈도 순위 정보를 포함하는 DT테이블 및 상기 독출주소에 기반하는 랜덤넘버를 이용하여, 상기 사이퍼코드에 대응되는 출현 빈도 순위를 산출하는 단계; 및
    상기 산출된 출현 빈도 순위를 이용하여, 개별 플레인코드의 출현 빈도 순위에 대응되는 플레인코드의 정보를 포함하는 DCC테이블에서 플레인코드를 획득하는 단계;
    를 포함하는 것을 특징으로 하는 데이터 디스크램블링 방법.
KR1020210000393A 2021-01-04 2021-01-04 코드 밀도를 조절하는 데이터 스크램블링 방법 KR102496011B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020210000393A KR102496011B1 (ko) 2021-01-04 2021-01-04 코드 밀도를 조절하는 데이터 스크램블링 방법
US17/535,255 US11923000B2 (en) 2021-01-04 2021-11-24 Data scrambling method that controls code density

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020210000393A KR102496011B1 (ko) 2021-01-04 2021-01-04 코드 밀도를 조절하는 데이터 스크램블링 방법

Publications (2)

Publication Number Publication Date
KR20220098562A true KR20220098562A (ko) 2022-07-12
KR102496011B1 KR102496011B1 (ko) 2023-02-06

Family

ID=82219820

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210000393A KR102496011B1 (ko) 2021-01-04 2021-01-04 코드 밀도를 조절하는 데이터 스크램블링 방법

Country Status (2)

Country Link
US (1) US11923000B2 (ko)
KR (1) KR102496011B1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI774183B (zh) * 2021-01-08 2022-08-11 瑞昱半導體股份有限公司 具有位址打亂機制的記憶體存取裝置及其記憶體存取方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20090118060A (ko) * 2007-02-14 2009-11-17 가부시끼가이샤 도시바 반도체 메모리에 대한 데이터 기록 방법 및 메모리 컨트롤러
US20120297271A1 (en) * 2008-10-30 2012-11-22 Naftali Sommer Data scrambling schemes for memory devices

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002108710A (ja) * 2000-07-24 2002-04-12 Sony Corp 情報処理システム、情報処理方法、および情報処理装置、並びにプログラム提供媒体
JP5509438B2 (ja) * 2010-03-03 2014-06-04 株式会社日立製作所 データ転送装置及びデータ転送システム
US9021336B1 (en) * 2012-05-22 2015-04-28 Pmc-Sierra, Inc. Systems and methods for redundantly storing error correction codes in a flash drive with secondary parity information spread out across each page of a group of pages
US9379846B1 (en) * 2014-12-19 2016-06-28 Cadence Design Systems, Inc. System and method of encoding in a serializer/deserializer
US11658685B2 (en) * 2021-10-05 2023-05-23 Macronix International Co., Ltd. Memory with multi-mode ECC engine

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20090118060A (ko) * 2007-02-14 2009-11-17 가부시끼가이샤 도시바 반도체 메모리에 대한 데이터 기록 방법 및 메모리 컨트롤러
US20120297271A1 (en) * 2008-10-30 2012-11-22 Naftali Sommer Data scrambling schemes for memory devices

Also Published As

Publication number Publication date
US20220215874A1 (en) 2022-07-07
KR102496011B1 (ko) 2023-02-06
US11923000B2 (en) 2024-03-05

Similar Documents

Publication Publication Date Title
US8327246B2 (en) Apparatus for coding at a plurality of rates in multi-level flash memory systems, and methods useful in conjunction therewith
US6646913B2 (en) Method for storing and reading data in a multilevel nonvolatile memory
US8176234B2 (en) Multi-write coding of non-volatile memories
US8407400B2 (en) Dynamic SLC/MLC blocks allocations for non-volatile memory
US11683053B2 (en) Memory controller, memory system, and memory control method
KR100953047B1 (ko) 불휘발성 메모리 소자의 동작 방법
US20130227246A1 (en) Management information generating method, logical block constructing method, and semiconductor memory device
US9489294B2 (en) Data encoding for non-volatile memory
US9594627B2 (en) Controller and control method
US9947412B1 (en) Data writing method, memory control circuit unit and memory storage apparatus
US20220019357A1 (en) Storage controller and an operation method of the storage controller
US8582358B2 (en) Memory system, controller, and method for controlling memory system
US9865338B2 (en) Memory system and method of controlling nonvolatile memory by converting write data written to a page
KR20220098562A (ko) 코드 밀도를 조절하는 데이터 스크램블링 방법
CN107622781B (zh) 一种提升三层忆阻器写性能的编解码方法
US20190129629A1 (en) Method for controlling operations of data storage device, and associated data storage device and controller
KR20160118526A (ko) 에러 정정 코드 생성방법 및 장치
US20180166148A1 (en) Control method for memory device and memory controller
JP2022505728A (ja) メモリのデータ処理方法および関連するデータプロセッサ
US20150254131A1 (en) Memory controller, storage device and memory control method
JP2020113347A (ja) 半導体記憶装置
US20160065240A1 (en) Data storage device and operating method thereof
JPH0750555B2 (ja) 不揮発性半導体記憶装置
KR20090011207A (ko) 3비트 멀티 레벨 셀 메모리 소자의 프로그램 방법
JP2016212828A (ja) 不揮発性半導体メモリのコントローラ

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant