KR20180015896A - 저항 변화 메모리의 수명 연장 방법 및 그 방법을 이용하는 데이터 저장 시스템 - Google Patents

저항 변화 메모리의 수명 연장 방법 및 그 방법을 이용하는 데이터 저장 시스템 Download PDF

Info

Publication number
KR20180015896A
KR20180015896A KR1020160099479A KR20160099479A KR20180015896A KR 20180015896 A KR20180015896 A KR 20180015896A KR 1020160099479 A KR1020160099479 A KR 1020160099479A KR 20160099479 A KR20160099479 A KR 20160099479A KR 20180015896 A KR20180015896 A KR 20180015896A
Authority
KR
South Korea
Prior art keywords
data
hash
candidates
stored
change memory
Prior art date
Application number
KR1020160099479A
Other languages
English (en)
Other versions
KR102565005B1 (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 KR1020160099479A priority Critical patent/KR102565005B1/ko
Priority to CN201710524262.1A priority patent/CN107689241B/zh
Priority to US15/641,158 priority patent/US10310940B2/en
Publication of KR20180015896A publication Critical patent/KR20180015896A/ko
Application granted granted Critical
Publication of KR102565005B1 publication Critical patent/KR102565005B1/ko

Links

Images

Classifications

    • 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/1068Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0616Improving the reliability of storage systems in relation to life time, e.g. increasing Mean Time Between Failures [MTBF]
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C13/00Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00
    • G11C13/0002Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00 using resistive RAM [RRAM] elements
    • 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/1012Adding 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 codes or arrangements adapted for a specific type of error
    • 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/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • G06F11/108Parity data distribution in semiconductor storages, e.g. in SSD
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0864Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using pseudo-associative means, e.g. set-associative or hashing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/02Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using magnetic elements
    • G11C11/16Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using magnetic elements using elements in which the storage effect is based on magnetic spin effect
    • G11C11/165Auxiliary circuits
    • G11C11/1675Writing or programming circuits or methods
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C13/00Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00
    • G11C13/0002Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00 using resistive RAM [RRAM] elements
    • G11C13/0021Auxiliary circuits
    • G11C13/0023Address circuits or decoders
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C13/00Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00
    • G11C13/0002Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00 using resistive RAM [RRAM] elements
    • G11C13/0021Auxiliary circuits
    • G11C13/0035Evaluating degradation, retention or wearout, e.g. by counting writing cycles
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C13/00Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00
    • G11C13/0002Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00 using resistive RAM [RRAM] elements
    • G11C13/0021Auxiliary circuits
    • G11C13/004Reading or sensing circuits or methods
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C13/00Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00
    • G11C13/0002Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00 using resistive RAM [RRAM] elements
    • G11C13/0021Auxiliary circuits
    • G11C13/0059Security or protection circuits or methods
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C13/00Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00
    • G11C13/0002Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00 using resistive RAM [RRAM] elements
    • G11C13/0021Auxiliary circuits
    • G11C13/0069Writing or programming circuits or methods
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/52Protection of memory contents; Detection of errors in memory contents
    • 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
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/02Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using magnetic elements
    • G11C11/16Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using magnetic elements using elements in which the storage effect is based on magnetic spin effect
    • G11C11/165Auxiliary circuits
    • G11C11/1673Reading or sensing circuits or methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Semiconductor Memories (AREA)

Abstract

본 발명은 최소 bit flip을 갖도록 쓰여질 데이터의 bit 위치를 바꾸어 데이터 쓰기를 수행함으로써 저항 변화 메모리의 수명을 연장시키는 데에 목적이 있다.
본원의 제1 발명에 따른 저항 변화 메모리의 수명 연장 방법은, 해쉬 후보군과 저장 대상 데이터의 비트 위치를 논리 조합하여 데이터 및 해쉬 후보군을 생성하는 단계; 상기 데이터 및 해쉬 후보군과 기 저장된 데이터 및 해쉬를 비교하여 해밍 길이를 연산하는 단계; 저항 변화 메모리 내 소정 비트에 스턱 데이터가 있으면, 상기 비트의 상기 스턱 데이터와 상기 데이터 후보군을 매칭시켜 상기 데이터 후보군 중 상기 스턱 데이터와 불일치하는 데이터 후보를 제외하는 단계; 상기 데이터 및 해쉬 후보군 중 상기 해밍 길이가 가장 짧은 데이터 및 해쉬 후보를 부호화 데이터 및 해쉬로 선정하는 단계; 및 상기 부호화 데이터 및 해쉬를 상기 저항 변화 메모리에 저장하는 단계를 포함한다.

Description

저항 변화 메모리의 수명 연장 방법 및 그 방법을 이용하는 데이터 저장 시스템{METHOD FOR LIFETIME IMPROVEMENT OF RESISTIVE CHANGE MEMORY AND DATA STORAGE SYSTEM USING IT}
본 발명은 비휘발성 메모리, 특히, 저항 변화 메모리의 수명 연장 방법에 관한 것으로, 쓰기 작업에 대하여 쓰고자 하는 데이터의 비트 위치를 변경하여 bit flip 수를 최소화함으로써 메모리의 수명을 연장할 수 있는 방법과 그 방법을 이용하는 데이터 저장 시스템에 관한 것이다.
모바일 및 디지털 정보 통신과 가전 산업의 급속한 발전에 따라, 기존의 전자의 전하 제어에 기반을 둔 소자 연구는 한계에 봉착할 것으로 전망된다. 이에, 기존 전자 전하 소자의 개념이 아닌 새로운 개념의 신 기능성 메모리 장치의 개발이 요구되고 있다. 특히, 주요 정보 기기의 메모리의 대용량화 요구를 충족시키기 위해, 차세대 대용량 초고속 및 초전력 메모리 장치의 개발이 필요하다.
현재, 차세대 메모리 장치로서 가변 저항 물질을 메모리 매체로 사용하는 저항 변화 메모리가 제안되고 있다.
그런데, 저항 변화 메모리는 전통적인 비휘발성 플래쉬 메모리에 비해 많은 장점을 가진다. 또한, 저항 변화 메모리는 DRAM과 같이 byte-addressable 하지만, 같은 비용으로 2 내지 4배의 용량을 확보할 수 있다. 또한 다른 비휘발성 메모리들에 비해 읽기 속도가 빠른 특성을 가지고 있어 비용 대비 용량이 중요한 서버 시스템에서 DRAM을 상당 부분 대체할 수 있을 것으로 기대된다.
하지만 저항 변화 메모리는 Write 시 필요한 에너지가 크고 지연 시간이 길며, 사실상 DRAM의 Write 수명은 무제한인데 비해 저항 변화 메모리의 수명은 유한하다는 단점이 있다. 그중에서도 저항 변화 메모리는 열화로 인해 많은 에러를 유발할 수 있다. 예컨대, 상변화 메모리는 107 ~ 108 정도의 Write 횟수를 반복하게 되면 데이터 셀에 stuck at fault가 발생하게 되는데 해당 fault를 회복하지 못하면 시스템 오류(system failure)가 발생한다.
또한, 메모리에 데이터를 Write 시 bit flip이 발생하면 bit flip을 위해 에너지가 소모될 뿐 아니라 저항 변화 메모리에서는 write time이 증가하고 해당 메모리 셀에 fault가 발생할 확률이 높아진다.
미국등록특허 US 8,812,934호 Techniques for storing bits in memory cells having stuck-at faults
Flip-N-Write: A Simple Deterministic Technique to Improve PRAM Write Performance, Energy and Endurance, Sangyeun Cho et al., MICRO '09, Dec. 12-16 2009
본 발명은 최소 bit flip을 갖도록 쓰여질 데이터의 bit 위치를 바꾸어 데이터 쓰기를 수행함으로써 저항 변화 메모리의 수명을 연장시키는 데에 목적이 있다.
본 발명에 따르면, 저장 대상 데이터의 비트 위치를 바꾸기 위하여 해쉬가 필요하며, 저장 대상 데이터의 위치를 바꾸어 데이터 및 해쉬 후보군을 생성한다.
본원의 제1 발명에 따른 저항 변화 메모리의 수명 연장 방법은, 해쉬 후보군과 저장 대상 데이터의 비트 위치를 논리 조합하여 데이터 및 해쉬 후보군을 생성하는 단계; 상기 데이터 및 해쉬 후보군과 기 저장된 데이터 및 해쉬를 비교하여 해밍 길이를 연산하는 단계; 저항 변화 메모리 내 소정 비트에 스턱 데이터가 있으면, 상기 비트의 상기 스턱 데이터와 상기 데이터 후보군을 매칭시켜 상기 데이터 후보군 중 상기 스턱 데이터와 불일치하는 데이터 후보를 제외하는 단계; 상기 데이터 및 해쉬 후보군 중 상기 해밍 길이가 가장 짧은 데이터 및 해쉬 후보를 부호화 데이터 및 해쉬로 선정하는 단계; 및 상기 부호화 데이터 및 해쉬를 상기 저항 변화 메모리에 저장하는 단계를 포함한다.
또한, 상기 저항 변화 메모리에 쓰기 요청이 없으면, 상기 저항 변화 메모리에 읽기 요청이 있는지 판단하는 단계; 상기 읽기 요청이 있으면, 기 저장된 해쉬와 기 저장된 데이터의 비트 위치를 논리 조합하여 데이터를 디코딩하며 디코딩된 상기 데이터를 독출하는 데이터 독출 단계를 더 포함할 수 있다.
또한, 상기 데이터 및 해쉬 후보군을 생성하는 단계는, 상기 해쉬 후보군 중 개별 해쉬 후보와 상기 저장 대상 데이터의 비트 위치를 각각 배타적 논리합하여 상기 데이터 및 해쉬 후보군을 생성할 수 있다.
또한, 상기 데이터 및 해쉬 후보군을 생성하는 단계는, 상기 해쉬 후보군 중 개별 해쉬 후보와 상기 저장 대상 데이터의 비트 위치를 각각 배타적 부정논리합하여 상기 데이터 및 해쉬 후보군을 생성할 수 있다.
또한, 상기 데이터 및 해쉬 후보군의 개수는 매회 저장되는 데이터 비트 수이다.
또한, 상기 데이터 독출 단계는, 상기 저장된 해쉬와 상기 저장된 데이터의 비트 위치를 각각 배타적 논리합하여 디코딩된 데이터를 생성할 수 있다.
또한, 상기 데이터 독출 단계는, 상기 저장된 해쉬와 상기 저장된 데이터의 비트 위치를 각각 배타적 부정논리합하여 디코딩된 데이터를 생성할 수 있다.
또한, 본원의 제2 발명에 따른 저항 변화 메모리의 수명 연장 방법은, 저항 변화 메모리에 쓰기 요청이 있으면, 저장 대상 데이터의 비트 위치와 상기 해쉬 후보군을 논리 연산하여 데이터 및 해쉬 후보군을 생성하는 단계; 상기 데이터 및 해쉬 후보군과 기 저장된 데이터 및 해쉬를 비교하여 해밍 길이를 연산하는 단계; 상기 데이터 및 해쉬 후보군 중 상기 해밍 길이가 가장 짧은 데이터 및 해쉬 후보를 부호화 데이터 및 해쉬로 선정하는 단계; 및 상기 부호화 데이터 및 해쉬를 상기 저항 변화 메모리에 저장하는 단계를 포함한다.
또한, 본원의 제3 발명에 따른 데이터 저장 시스템은, 해쉬 후보군과 저장 대상 데이터의 비트 위치를 논리 조합하여 데이터 및 해쉬 후보군을 생성하고, 상기 데이터 및 해쉬 후보군과 기 저장된 데이터 및 해쉬를 비교하여 해밍 길이를 연산하고, 저항 변화 메모리 내 소정 비트에 스턱 데이터가 있으면, 상기 비트의 상기 스턱 데이터와 상기 데이터 후보군을 매칭시켜 상기 데이터 후보군 중 상기 스턱 데이터와 불일치하는 데이터 후보를 제외하고, 상기 데이터 및 해쉬 후보군 중 상기 해밍 길이가 가장 짧은 데이터 및 해쉬 후보를 부호화 데이터 및 해쉬로 선정하고, 상기 부호화 데이터 및 해쉬를 상기 저항 변화 메모리에 저장하는 콘트롤러를 포함한다.
또한, 본원의 제4 발명에 따른 데이터 저장 시스템은, 저항 변화 메모리에 쓰기 요청이 있으면, 저장 대상 데이터의 비트 위치와 상기 해쉬 후보군을 논리 연산하여 데이터 및 해쉬 후보군을 생성하고, 상기 데이터 및 해쉬 후보군과 기 저장된 데이터 및 해쉬를 비교하여 해밍 길이를 연산하고, 상기 데이터 및 해쉬 후보군 중 상기 해밍 길이가 가장 짧은 데이터 및 해쉬 후보를 부호화 데이터 및 해쉬로 선정하고, 상기 부호화 데이터 및 해쉬를 상기 저항 변화 메모리에 저장하는 콘트롤러를 포함한다.
본 발명에 따르면, 데이터 조합(data shuffling)을 이용하여 비휘발성 메모리에서 bit flip을 최소화할 뿐만 아니라 Stuck at fault를 hiding 함으로써 비휘발성 메모리의 수명을 연장할 수 있는 효과가 있다.
도 1은 본 발명의 일실시예에 따른 데이터 저장 시스템의 전체 블록도,
도 2는 본 발명의 일실시예에 따른 콘트롤러의 동작 흐름도,
도 3은 본 발명의 일실시예에 따른 쓰기 동작시 데이터 인코딩 예시도, 및
도 4는 본 발명의 일실시예에 따른 데이터 조합을 위한 논리 연산 예시도이다.
본 발명에 따른 저항 변화 메모리는 억세스 소자 및 저항 소자를 기본 구성으로 하고 있으며, 저항 소자의 상태에 따라 "0" 또는 "1"의 데이터를 저장하게 된다.
한편, 본 발명에 따른 저항 변화 메모리는, 드레인 패턴과 전기적으로 연결되는 가변 저항부의 재료에 따라 그 종류가 결정된다. 예를 들어, ReRAM인 경우, 가변 저항부는 저항체(Resistive Material, PCMO막 등)으로 형성될 수 있고, PCRAM인 경우 칼코게나이드막으로 형성될 수 있으며, MRAM인 경우 자화물질의 자성층으로 형성될 수 있고, STTMRAM인 경우, 자화물질의 자화 반전 소자층으로 형성될 수 있다.
이하 첨부된 도면을 참조하여 본 발명의 바람직한 실시예를 상세히 설명하기로 한다. 이에 앞서, 본 명세서 및 청구범위에 사용된 용어나 단어는 통상적이거나 사전적인 의미로 한정해서 해석되어서는 아니되며, 발명자는 그 자신의 발명을 가장 최선의 방법으로 설명하기 위해 용어의 개념을 적절하게 정의할 수 있다는 원칙에 입각하여 본 발명의 기술적 사상에 부합하는 의미와 개념으로 해석되어야만 한다. 따라서, 본 명세서에 기재된 실시예와 도면에 도시된 구성은 본 발명의 가장 바람직한 일 실시예에 불과할 뿐이고 본 발명의 기술적 사상을 모두 대변하는 것은 아니므로, 본 출원시점에 있어서 이들을 대체할 수 있는 다양한 균등물과 변형예들이 있을 수 있음을 이해하여야 한다.
도 1은 본 발명의 일실시예에 따른 데이터 저장 시스템의 전체 블록도이다.
데이터 저장 시스템(100)은 콘트롤러(110), 및 저항 변화 메모리(120)를 포함한다. 콘트롤러(110)는, 예컨대, 메모리 콘트롤 회로, 프로세서 회로, 또는 저항 변화 메모리에 데이터를 쓰거나 저항 변화 메모리로부터 데이터를 읽기 위한 여하의 제어 회로일 수 있다. 콘트롤러(110)와 저항 변화 메모리(120) 간에는 적어도 하나 이상의 온칩 또는 외부 버스 또는 다른 형태의 신호 라인을 통해 데이터가 전송될 수 있다. 콘트롤러(110), 및 저항 변화 메모리(120)는 동일 집적 회로 내에 배치되거나, 구별되는 집적 회로에 배치될 수 있다. 또는 데이터 저장 시스템(100)은 2개의 구별되는 집적 회로 소자(110, 120)를 포함할 수 있다.
도 2는 본 발명의 일실시예에 따른 콘트롤러의 동작 흐름도이다.
저항 변화 메모리에 쓰기 요청이 있으면(S210), 해쉬 후보군 중 개별 해쉬 후보와 입력 데이터를 각각 논리 조합하여 데이터 후보군을 생성한다(S220).
메모리 셀 내에 스턱 데이터가 있으면(S230), 해당 비트의 스턱 데이터와 각각의 데이터 후보를 매칭시켜 해당 비트의 스턱 데이터와 불일치하는 데이터 후보를 제외시킨다(S240).
해당 비트의 스턱 데이터와 일치하는 데이터를 포함하는 데이터 및 해쉬 후보군 중 최소 비트 플립 수(Hamming distance, 해밍 길이)를 가진 데이터 및 해쉬 후보를 부호화 데이터 및 해쉬로 선정한다(S250).
이후, 부호화 데이터 및 해쉬를 저항 변화 메모리(120)에 저장한다(S260).
한편, S210 단계에서 저항 변화 메모리에 쓰기 요청이 없으면, 저항 변화 메모리에 읽기 요청이 있는지를 판단하고(S270), 읽기 요청이 있으면, 기 저장된 해쉬와 기 저장된 데이터의 비트 위치를 논리 조합하여 데이터를 디코딩하며 디코딩된 데이터를 읽는다(S280).
도 3은 본 발명의 일실시예에 따른 쓰기 동작시 데이터 인코딩 예시도이다.
본 발명에 관하여 예를 들어 설명하면, 기 저장된 데이터가 "0011"이고 저장된 해쉬는 "10"이며, 저장할 데이터가 "1001"이다(S310).
콘트롤러(110)는 저장할 데이터 "1001"의 비트 위치에 대하여 해쉬 후보군(hash candidates)과 논리 연산을 수행하여 데이터 후보군(data candidates)을 얻는다(S320). 본 발명에 따르면, 데이터 후보군의 갯수는 N개이다. 여기서, N은 매회 저장되는 데이터 비트수이다. 본 발명의 일실시예에 따른 논리 연산은 배타적 논리합(XOR)일 수 있다. 또한, 본 발명의 다른 실시예에 따른 논리 연산은 배타적 부정 논리합(XNOR)일 수 있다. 도 3에 도시된 결과값은 배타적 논리합을 수행한 결과이다.
콘트롤러(110)는 데이터 및 해쉬 후보군(C1, C2, C3, C4)과 기 저장된 데이터 및 해쉬(S)를 1:1로 비교하여 비트 플립(bit flip) 수(Hamming distance)를 계산한다(S330). 즉, 단계 S331에서 제1 데이터 및 해쉬 후보(C1)와 기 저장된 데이터 및 해쉬 키(S)를 비교한다. 나머지 단계 S332 내지 S334도 동일한 방식으로 처리된다. 여기서, 단계 S331 내지 S334는 병렬적으로 처리되거나 순차적으로 처리될 수 있다. 한편, 비트 플립(bit flip) 수(Hamming distance)라 함은 메모리 셀 내에 저장된 데이터를 "0"에서 "1"로, 또는 "1"에서 "0"으로 변경하여야 하는 비트 수를 의미한다.
이때, 콘트롤러(110)는 데이터 및 해쉬 후보군(C1, C2, C3, C4) 중에서 비트 플립 수가 가장 적은 후보를 부호화 데이터 및 해쉬(encoded data)로 선정한다(S340). 본 발명의 일실시예에 따르면, 데이터 및 해쉬 후보군 중 비트 플립 수가 2인 제3 데이터 및 해쉬 후보(C3)를 부호화 데이터 및 해쉬로 선정한다.
콘트롤러(110)는 저항 변화 메모리(120)에 부호화 데이터 및 해쉬를 저장한다.
도 4는 본 발명의 일실시예에 따른 데이터 조합을 위한 논리 연산 예시도이다.
예컨대, 저장할 데이터 "1001"의 각각의 비트 위치는 "11", "10", "01", "00"이고, 제2 해쉬 후보(Hash1)는 "01"이므로, 이들을 각각 XOR 연산하면 다음의 표 1과 같다.
비트 위치 11 10 01 00
해쉬 후보 01 01 01 01
변경 비트 위치 10 11 00 01
입력 데이터 1 0 0 1
제2 데이터 후보 0 1 1 0
즉, 제2 해쉬 후보(Hash1)에 따르면, 첫번째 비트 데이터는 두번째 비트 위치로, 두번째 비트 데이터는 첫번째 비트 위치로, 세번째 비트 데이터는 네번째 비트 위치로, 네번째 비트 데이터는 세번째 비트 위치로 각각 변경된다.
이와 같이, 저장할 데이터의 각각의 비트 위치 "11", "10", "01", "00"에 대하여 제1 해쉬 후보(Hash0)는 "00"로, 제3 해쉬 후보(Hash2)는 "10"으로, 제4 해쉬 후보(Hash3)는 "11"로 XOR 연산하여 제1 데이터 후보, 제3 데이터 후보, 및 제4 데이터 후보를 생성한다.
이상과 같이, 본 발명은 비록 한정된 실시예와 도면에 의해 설명되었으나, 본 발명은 이것에 의해 한정되지 않으며 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에 의해 본 발명의 기술사상과 아래에 기재될 특허청구범위의 균등범위 내에서 다양한 수정 및 변형 가능함은 물론이다.
100: 데이터 저장 시스템
110: 콘트롤러
120: 저항 변화 메모리

Claims (20)

  1. 해쉬 후보군과 저장 대상 데이터의 비트 위치를 논리 조합하여 데이터 및 해쉬 후보군을 생성하는 단계;
    상기 데이터 및 해쉬 후보군과 기 저장된 데이터 및 해쉬를 비교하여 해밍 길이를 연산하는 단계;
    저항 변화 메모리 내 소정 비트에 스턱 데이터가 있으면, 상기 비트의 상기 스턱 데이터와 상기 데이터 후보군을 매칭시켜 상기 데이터 후보군 중 상기 스턱 데이터와 불일치하는 데이터 후보를 제외하는 단계;
    상기 데이터 및 해쉬 후보군 중 상기 해밍 길이가 가장 짧은 데이터 및 해쉬 후보를 부호화 데이터 및 해쉬로 선정하는 단계; 및
    상기 부호화 데이터 및 해쉬를 상기 저항 변화 메모리에 저장하는 단계
    를 포함하는 저항 변화 메모리의 수명 연장 방법.
  2. 제1항에 있어서,
    상기 저항 변화 메모리에 쓰기 요청이 없으면, 상기 저항 변화 메모리에 읽기 요청이 있는지 판단하는 단계;
    상기 읽기 요청이 있으면, 기 저장된 해쉬와 기 저장된 데이터의 비트 위치를 논리 조합하여 데이터를 디코딩하며 디코딩된 상기 데이터를 독출하는 데이터 독출 단계
    를 더 포함하는 저항 변화 메모리의 수명 연장 방법.
  3. 제1항에 있어서, 상기 데이터 및 해쉬 후보군을 생성하는 단계는,
    상기 해쉬 후보군 중 개별 해쉬 후보와 상기 저장 대상 데이터의 비트 위치를 각각 배타적 논리합하여 상기 데이터 및 해쉬 후보군을 생성하는 저항 변화 메모리의 수명 연장 방법.
  4. 제1항에 있어서, 상기 데이터 및 해쉬 후보군을 생성하는 단계는,
    상기 해쉬 후보군 중 개별 해쉬 후보와 상기 저장 대상 데이터의 비트 위치를 각각 배타적 부정논리합하여 상기 데이터 및 해쉬 후보군을 생성하는 저항 변화 메모리의 수명 연장 방법.
  5. 제3항에 있어서,
    상기 데이터 및 해쉬 후보군의 개수는 매회 저장되는 데이터 비트 수인 저항 변화 메모리의 수명 연장 방법.
  6. 제2항에 있어서, 상기 데이터 독출 단계는,
    상기 저장된 해쉬와 상기 저장된 데이터의 비트 위치를 각각 배타적 논리합하여 디코딩된 데이터를 생성하는 저항 변화 메모리의 수명 연장 방법.
  7. 제2항에 있어서, 상기 데이터 독출 단계는,
    상기 저장된 해쉬와 상기 저장된 데이터의 비트 위치를 각각 배타적 부정논리합하여 디코딩된 데이터를 생성하는 저항 변화 메모리의 수명 연장 방법.
  8. 저항 변화 메모리에 쓰기 요청이 있으면, 저장 대상 데이터의 비트 위치와 상기 해쉬 후보군을 논리 연산하여 데이터 및 해쉬 후보군을 생성하는 단계;
    상기 데이터 및 해쉬 후보군과 기 저장된 데이터 및 해쉬를 비교하여 해밍 길이를 연산하는 단계;
    상기 데이터 및 해쉬 후보군 중 상기 해밍 길이가 가장 짧은 데이터 및 해쉬 후보를 부호화 데이터 및 해쉬로 선정하는 단계; 및
    상기 부호화 데이터 및 해쉬를 상기 저항 변화 메모리에 저장하는 단계
    를 포함하는 저항 변화 메모리의 수명 연장 방법.
  9. 제8항에 있어서,
    상기 저항 변화 메모리에 쓰기 요청이 없으면, 상기 저항 변화 메모리에 읽기 요청이 있는지 판단하는 단계; 및
    상기 읽기 요청이 있으면, 기 저장된 해쉬와 기 저장된 데이터의 비트 위치를 논리 조합하여 데이터를 디코딩하며 디코딩된 상기 데이터를 독출하는 데이터 독출 단계
    를 더 포함하는 저항 변화 메모리의 수명 연장 방법.
  10. 제8항에 있어서, 상기 데이터 및 해쉬 후보군을 생성하는 단계는,
    상기 해쉬 후보군 중 개별 해쉬 후보와 상기 저장 대상 데이터의 비트 위치를 각각 배타적 논리합하여 상기 데이터 및 해쉬 후보군을 생성하는 저항 변화 메모리의 수명 연장 방법.
  11. 제8항에 있어서, 상기 데이터 및 해쉬 후보군을 생성하는 단계는,
    상기 해쉬 후보군 중 개별 해쉬 후보와 상기 저장 대상 데이터의 비트 위치를 각각 배타적 부정논리합하여 상기 데이터 및 해쉬 후보군을 생성하는 저항 변화 메모리의 수명 연장 방법.
  12. 제10항에 있어서,
    상기 데이터 및 해쉬 후보군의 개수는 매회 저장되는 데이터 비트 수인 저항 변화 메모리의 수명 연장 방법.
  13. 제9항에 있어서, 상기 데이터 독출 단계는,
    상기 저장된 해쉬와 상기 저장된 데이터의 비트 위치를 각각 배타적 논리합하여 디코딩된 데이터를 생성하는 저항 변화 메모리의 수명 연장 방법.
  14. 제9항에 있어서, 상기 데이터 독출 단계는,
    상기 저장된 해쉬와 상기 저장된 데이터의 비트 위치를 각각 배타적 부정논리합하여 디코딩된 데이터를 생성하는 저항 변화 메모리의 수명 연장 방법.
  15. 해쉬 후보군과 저장 대상 데이터의 비트 위치를 논리 조합하여 데이터 및 해쉬 후보군을 생성하고, 상기 데이터 및 해쉬 후보군과 기 저장된 데이터 및 해쉬를 비교하여 해밍 길이를 연산하고, 저항 변화 메모리 내 소정 비트에 스턱 데이터가 있으면, 상기 비트의 상기 스턱 데이터와 상기 데이터 후보군을 매칭시켜 상기 데이터 후보군 중 상기 스턱 데이터와 불일치하는 데이터 후보를 제외하고, 상기 데이터 및 해쉬 후보군 중 상기 해밍 길이가 가장 짧은 데이터 및 해쉬 후보를 부호화 데이터 및 해쉬로 선정하고, 상기 부호화 데이터 및 해쉬를 상기 저항 변화 메모리에 저장하는 콘트롤러
    를 포함하는 데이터 저장 시스템.
  16. 제15항에 있어서,
    상기 데이터 및 해쉬 후보군의 개수는 매회 저장되는 데이터 비트 수인 데이터 저장 시스템.
  17. 제15항에 있어서,
    상기 논리 조합은 배타적 논리합 또는 배타적 부정논리합을 이용하여 처리되는 데이터 저장 시스템.
  18. 저항 변화 메모리에 쓰기 요청이 있으면, 저장 대상 데이터의 비트 위치와 상기 해쉬 후보군을 논리 연산하여 데이터 및 해쉬 후보군을 생성하고, 상기 데이터 및 해쉬 후보군과 기 저장된 데이터 및 해쉬를 비교하여 해밍 길이를 연산하고, 상기 데이터 및 해쉬 후보군 중 상기 해밍 길이가 가장 짧은 데이터 및 해쉬 후보를 부호화 데이터 및 해쉬로 선정하고, 상기 부호화 데이터 및 해쉬를 상기 저항 변화 메모리에 저장하는 콘트롤러
    를 포함하는 데이터 저장 시스템.
  19. 제18항에 있어서,
    상기 데이터 및 해쉬 후보군의 개수는 매회 저장되는 데이터 비트 수인 데이터 저장 시스템.
  20. 제18항에 있어서,
    상기 논리 조합은 배타적 논리합 또는 배타적 부정논리합을 이용하여 처리되는 데이터 저장 시스템.
KR1020160099479A 2016-08-04 2016-08-04 저항 변화 메모리의 수명 연장 방법 및 그 방법을 이용하는 데이터 저장 시스템 KR102565005B1 (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
KR1020160099479A KR102565005B1 (ko) 2016-08-04 2016-08-04 저항 변화 메모리의 수명 연장 방법 및 그 방법을 이용하는 데이터 저장 시스템
CN201710524262.1A CN107689241B (zh) 2016-08-04 2017-06-30 延长阻变存储器寿命的方法和使用其的数据储存系统
US15/641,158 US10310940B2 (en) 2016-08-04 2017-07-03 Method for extending lifetime of resistive change memory and data storage system using the same

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020160099479A KR102565005B1 (ko) 2016-08-04 2016-08-04 저항 변화 메모리의 수명 연장 방법 및 그 방법을 이용하는 데이터 저장 시스템

Publications (2)

Publication Number Publication Date
KR20180015896A true KR20180015896A (ko) 2018-02-14
KR102565005B1 KR102565005B1 (ko) 2023-08-07

Family

ID=61071402

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020160099479A KR102565005B1 (ko) 2016-08-04 2016-08-04 저항 변화 메모리의 수명 연장 방법 및 그 방법을 이용하는 데이터 저장 시스템

Country Status (3)

Country Link
US (1) US10310940B2 (ko)
KR (1) KR102565005B1 (ko)
CN (1) CN107689241B (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190104740A (ko) * 2018-03-02 2019-09-11 고려대학교 산학협력단 메모리 장치 및 메모리 장치의 인코딩 방법

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10419346B1 (en) 2018-04-30 2019-09-17 Hewlett Packard Enterprise Development L.P. Hash computation using memristor-implemented dot product engine
CN110211617B (zh) * 2019-05-17 2020-12-29 中国科学院计算技术研究所 一种哈希硬件处理装置及方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012523023A (ja) * 2009-09-18 2012-09-27 株式会社日立製作所 重複したデータを排除するストレージシステム
KR20140071783A (ko) * 2012-12-04 2014-06-12 삼성전자주식회사 비휘발성 메모리 장치 및 그것의 동작방법
JP2014130489A (ja) * 2012-12-28 2014-07-10 Fujitsu Ltd データ格納プログラム、データ検索プログラム、データ検索装置、データ格納方法及びデータ検索方法
JP2015022318A (ja) * 2013-07-16 2015-02-02 日本電気株式会社 暗号化装置、復号装置、暗号化方法および暗号化プログラム
WO2015140167A1 (en) * 2014-03-21 2015-09-24 Koninklijke Philips N.V. Soft generation of biometric candidates and references based on empirical bit error probability

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7814033B2 (en) * 2001-07-20 2010-10-12 Chien-Tzu Hou Control method to make IC's operation mode to be provided with uncertainty
US7831573B2 (en) * 2003-08-12 2010-11-09 Hewlett-Packard Development Company, L.P. System and method for committing to a set
US7472330B2 (en) * 2003-11-26 2008-12-30 Samsung Electronics Co., Ltd. Magnetic memory which compares compressed fault maps
US20060106857A1 (en) * 2004-11-12 2006-05-18 Lillibridge Mark D Method and system for assured document retention
US9195665B2 (en) * 2006-04-28 2015-11-24 Hewlett-Packard Development Company, L.P. Method and system for data retention
US7894448B1 (en) * 2006-05-24 2011-02-22 Hewlett-Packard Development Company, L.P. Proving that a user profile satisfies selection criteria for targeted data delivery
JP5086585B2 (ja) * 2006-08-11 2012-11-28 アラクサラネットワークス株式会社 ネットワーク中継装置
US8141152B1 (en) * 2007-12-18 2012-03-20 Avaya Inc. Method to detect spam over internet telephony (SPIT)
US8443261B2 (en) * 2009-12-11 2013-05-14 Vmware, Inc. Transparent recovery from hardware memory errors
WO2011111211A1 (ja) * 2010-03-11 2011-09-15 三菱電機株式会社 メモリ診断方法、メモリ診断装置およびメモリ診断プログラム
US8612398B2 (en) * 2010-03-11 2013-12-17 Microsoft Corporation Clean store for operating system and software recovery
US20110307758A1 (en) * 2010-06-15 2011-12-15 Fusion-Io, Inc. Apparatus, system, and method for providing error correction
US9069688B2 (en) * 2011-04-15 2015-06-30 Sandisk Technologies Inc. Dynamic optimization of back-end memory system interface
US8464135B2 (en) * 2010-07-13 2013-06-11 Sandisk Technologies Inc. Adaptive flash interface
US8429495B2 (en) * 2010-10-19 2013-04-23 Mosaid Technologies Incorporated Error detection and correction codes for channels and memories with incomplete error characteristics
US8996955B2 (en) 2011-11-16 2015-03-31 HGST Netherlands B.V. Techniques for storing data in stuck and unstable memory cells
US8504533B2 (en) * 2011-12-20 2013-08-06 Matthew Dewey De-duplication reference tag reconciliation
US9304944B2 (en) * 2012-03-29 2016-04-05 Broadcom Corporation Secure memory access controller
US9235465B2 (en) 2012-06-06 2016-01-12 University of Pittsburgh—of the Commonwealth System of Higher Education Recursively determined invertible set approach to correct multiple stuck-at faults in rewritable memory
US9274884B2 (en) 2012-10-10 2016-03-01 HGST Netherlands B.V. Encoding and decoding data to accommodate memory cells having stuck-at faults
US8812934B2 (en) 2012-12-12 2014-08-19 HGST Netherlands B.V. Techniques for storing bits in memory cells having stuck-at faults
US9058870B2 (en) * 2013-02-08 2015-06-16 Seagate Technology Llc Hash functions used to track variance parameters of resistance-based memory elements
US9384144B1 (en) * 2014-03-25 2016-07-05 SK Hynix Inc. Error detection using a logical address key
US9384128B2 (en) * 2014-04-18 2016-07-05 SanDisk Technologies, Inc. Multi-level redundancy code for non-volatile memory controller
WO2016101282A1 (zh) * 2014-12-27 2016-06-30 华为技术有限公司 一种i/o任务处理的方法、设备和系统
US9977623B2 (en) * 2015-10-15 2018-05-22 Sandisk Technologies Llc Detection of a sequential command stream
GB2545409B (en) * 2015-12-10 2020-01-08 Advanced Risc Mach Ltd Wear levelling in non-volatile memories
US10387887B2 (en) * 2016-01-12 2019-08-20 Sugarcrm Inc. Bloom filter driven data synchronization
US11481126B2 (en) * 2016-05-24 2022-10-25 Micron Technology, Inc. Memory device error based adaptive refresh rate systems and methods
US10409672B2 (en) * 2016-11-16 2019-09-10 SK Hynix Inc. Media quality aware ECC decoding method selection to reduce data access latency

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012523023A (ja) * 2009-09-18 2012-09-27 株式会社日立製作所 重複したデータを排除するストレージシステム
KR20140071783A (ko) * 2012-12-04 2014-06-12 삼성전자주식회사 비휘발성 메모리 장치 및 그것의 동작방법
JP2014130489A (ja) * 2012-12-28 2014-07-10 Fujitsu Ltd データ格納プログラム、データ検索プログラム、データ検索装置、データ格納方法及びデータ検索方法
JP2015022318A (ja) * 2013-07-16 2015-02-02 日本電気株式会社 暗号化装置、復号装置、暗号化方法および暗号化プログラム
WO2015140167A1 (en) * 2014-03-21 2015-09-24 Koninklijke Philips N.V. Soft generation of biometric candidates and references based on empirical bit error probability

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Flip-N-Write: A Simple Deterministic Technique to Improve PRAM Write Performance, Energy and Endurance, Sangyeun Cho et al., MICRO '09, Dec. 12-16 2009
미국등록특허 US 8,812,934호 Techniques for storing bits in memory cells having stuck-at faults

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190104740A (ko) * 2018-03-02 2019-09-11 고려대학교 산학협력단 메모리 장치 및 메모리 장치의 인코딩 방법

Also Published As

Publication number Publication date
KR102565005B1 (ko) 2023-08-07
CN107689241A (zh) 2018-02-13
CN107689241B (zh) 2021-02-26
US10310940B2 (en) 2019-06-04
US20180039539A1 (en) 2018-02-08

Similar Documents

Publication Publication Date Title
US10073733B1 (en) System and method for in-memory computing
US7036068B2 (en) Error correction coding and decoding in a solid-state storage device
US7107507B2 (en) Magnetoresistive solid-state storage device and data storage methods for use therewith
US8136017B2 (en) Multi-layer semiconductor memory device comprising error checking and correction (ECC) engine and related ECC method
CN105122217A (zh) 电阻式随机存取存储器以及存储及检索电阻式随机存取存储器的信息的方法
US10552257B2 (en) Adaptive error correction in memory devices
US11211106B2 (en) Memory device and reference circuit thereof
KR20140113100A (ko) 레퍼런스 셀을 포함하는 불휘발성 메모리 장치 및 그것의 데이터 관리 방법 및
US20160132388A1 (en) Semiconductor memory device and ecc method thereof
US7325157B2 (en) Magnetic memory devices having selective error encoding capability based on fault probabilities
KR102565005B1 (ko) 저항 변화 메모리의 수명 연장 방법 및 그 방법을 이용하는 데이터 저장 시스템
JP2004362587A (ja) メモリシステム
Ning Advanced bit flip concatenates BCH code demonstrates 0.93% correctable BER and faster decoding on (36 864, 32 768) emerging memories
CN110729017B (zh) 存储器装置以及电子装置
US20030172339A1 (en) Method for error correction decoding in a magnetoresistive solid-state storage device
Liu et al. Proactive correction coset decoding scheme based on SEC-DED code for multibit asymmetric errors in STT-MRAM
JP2017107620A (ja) 半導体装置及び不揮発メモリ
Das et al. Online correction of hard errors and soft errors via one-step decodable OLS codes for emerging last level caches
US20130044011A1 (en) Encoding data based on weight constraints
Adeyemo et al. Exploring error-tolerant low-power multiple-output read scheme for memristor-based memory arrays
US20230007998A1 (en) Storage apparatus, storage control apparatus, and storage apparatus control method
US20040141389A1 (en) Solid state storage device and data storage method
JP5712681B2 (ja) 半導体記憶装置
CN112017724A (zh) 存储系统和在存储系统中纠正错误的方法

Legal Events

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