KR20100119502A - 증가된 용량의 이종의 스토리지 엘리먼트들 - Google Patents

증가된 용량의 이종의 스토리지 엘리먼트들 Download PDF

Info

Publication number
KR20100119502A
KR20100119502A KR20100035224A KR20100035224A KR20100119502A KR 20100119502 A KR20100119502 A KR 20100119502A KR 20100035224 A KR20100035224 A KR 20100035224A KR 20100035224 A KR20100035224 A KR 20100035224A KR 20100119502 A KR20100119502 A KR 20100119502A
Authority
KR
South Korea
Prior art keywords
memory
virtual
write
read
vector
Prior art date
Application number
KR20100035224A
Other languages
English (en)
Other versions
KR101264476B1 (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 인터내셔널 비지네스 머신즈 코포레이션
Publication of KR20100119502A publication Critical patent/KR20100119502A/ko
Application granted granted Critical
Publication of KR101264476B1 publication Critical patent/KR101264476B1/ko

Links

Images

Classifications

    • 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
    • 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/5678Digital 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 amorphous/crystalline phase transition storage elements
    • 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/0004Digital stores characterised by the use of storage elements not covered by groups G11C11/00, G11C23/00, or G11C25/00 using resistive RAM [RRAM] elements comprising amorphous/crystalline phase transition cells
    • 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
    • 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
    • G11C2013/0076Write operation performed depending on read result
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C2211/00Indexing scheme relating to digital stores characterized by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C2211/56Indexing scheme relating to G11C11/56 and sub-groups for features not covered by these groups
    • G11C2211/564Miscellaneous aspects
    • G11C2211/5641Multilevel memory having cells with different number of storage levels

Landscapes

  • Chemical & Material Sciences (AREA)
  • Crystallography & Structural Chemistry (AREA)
  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • For Increasing The Reliability Of Semiconductor Memories (AREA)
  • Read Only Memory (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

메모리에 쓰는 쓰기 프로세스 및 상기 메모리로부터 읽는 읽기 프로세스를 포함하는 데이터를 저장하기 위한 방법을 포함하는 이종의 스토리지 엘리먼트들에 증가된 용량을 제공하는 기술이 개시된다. 상기 메모리에서 메모리 셀들의 물리적 특성들은 데이터 레벨들의 서로 다른 세트들을 지원한다. 상기 쓰기 프로세스는 상기 메모리에 쓸 때 데이터 레벨들의 상기 서로 다른 세트들을 고려한다. 상기 읽기 프로세스는 먼저 상기 메모리에서의 데이터를 획득하고, 그 다음, 상기 데이터를 해석하기 위한 방법을 결정한다.

Description

증가된 용량의 이종의 스토리지 엘리먼트들{INCREASED CAPACITY HETEROGENEOUS STORAGE ELEMENTS}
본 발명은 일반적으로 컴퓨터 메모리와 관련되고, 더 상세하게는 이종의(heterogeneous) 스토리지 엘리먼트들의 스토리지를 증가시키는 것과 관련된다.
"이종의 스토리지 엘리먼트들(heterogeneous storage elements)" 이라는 용어는 서로 다른 물리적 특성들(physical characteristics) - 이 물리적 특성들은 엘리먼트가 저장할 수 있는 정보의 량 및 종류에 영향을 미침 - 을 갖는 개개의 메모리 엘리먼트들을 일컫는다. 따라서, 각각의 엘리먼트는 자신의 특정 물리적 특성들에 의존하여 서로 다른 종류의 정보 및 서로 다른 량의 정보를 저장할 수 있다. 이종의 스토리지 엘리먼트들을 갖는 메모리 시스템의 일 예는 상 변화 메모리(phase change memory, PCM) 시스템이다. 상기 PCM에서, 설정(set)될 수 있는 저항 값들의 범위는 서로 다른 PCM 셀들에 대해서 서로 다르다. 상기 PCM에서 각각의 셀은 서로 다른 범위의 저항 레벨들을 지원하는데, 이러한 서로 다른 범위의 저항 레벨들은 셀이 지원할 수 있는 레벨 범위(데이터의 량) 및 절대 레벨 값들(데이터의 종류) 둘 다에 영향을 미친다. 일반적으로, 엘리먼트들의 이종성(heterogeneity)은 메모리에 정보를 저장할 때 그리고 메모리로부터 정보를 회수(retrieve)할 때 에러를 초래할 수 있다. 특히, 메모리에 데이터를 쓸 때, 라이터(writer)가 하나의 셀에 정보를 저장하려고 노력하지만, 결국 그 셀은 지원할 수 없는 상황에 처하게 될 수 있다.
이종의 스토리지 엘리먼트 환경에서 에러들을 감소시키기 위한 한 가지 접근법은 모든 메모리 엘리먼트들에 공통되는 물리적 특성들의 범위를 찾아내고, 그런 다음 정보가 이러한 물리적 특성들의 공통 범위 내에서 회수될 수 있게 저장하는 것이다. 일 예로, PCM 메모리 셀에는, 모든 PCM 메모리 엘리먼트들에 걸쳐 설정될 수 있는 저항 값들의 범위가 존재할 수 있다. 그러면, 정보를 저장하기 위해 이 공통 범위의 저항 값들만이 사용된다. 또 하나의 접근법은 쓸 수 없는 셀 값들(non-writable cell values)을 에러들로 취급하고, 데이터를 정정하기 위해 에러 정정 코드(error correction code, ECC)를 사용하는 것이다. 이들 두 가지 접근법들의 단점은 스토리지 용량의 손실을 초래할 수 있다는 것이다.
이종의 스토리지 엘리먼트 환경에서 에러들을 감소시키기 위한 또 하나의 접근법은 메모리 블록들 또는 개개의 메모리 엘리먼트들이 결함이 있다고(defective) 또는 결함이 없다고(non-defective) 가정하고, 그런 다음 데이터 읽기(data reading) 및/또는 데이터 쓰기(data writing) 동안 결함이 있는 블록들 또는 엘리먼트들을 피하고자 하는 것이다. 이러한 접근법들의 단점은 블록들 또는 개별 엘리먼트들이 두 개의 상태들 중 단 하나의 상태에만 있을 수 있다는 것을 가정한다는 것이고, 따라서, 이러한 접근법들은 일반적으로 이종성을 위해서는 설계되지 않는다는 것이다.
본 발명의 일 실시예는 메모리에 쓰기를 하는 쓰기 프로세스(write process) 및 상기 메모리로부터 읽기를 하는 읽기 프로세스(read process)를 포함하는 데이터를 저장하기 위한 방법이다. 상기 메모리에서 메모리 셀들의 물리적 특성들은 데이터 레벨들의 서로 다른 세트들을 지원한다. 상기 쓰기 프로세스는 상기 메모리에 쓸 때 상기 데이터 레벨들의 서로 다른 세트들을 고려한다. 상기 읽기 프로세스는 먼저 상기 메모리에서 데이터를 획득(obtain)하고, 그 다음, 상기 데이터를 해석(interpret)하기 위한 방법을 결정한다.
본 발명의 다른 실시예는 메모리로부터 읽기 위한 방법이다. 상기 방법은 메모리 셀들의 블록으로부터 읽기 워드(read word)를 수신하는 단계를 포함한다. 여기서 상기 메모리 셀들의 물리적 특성들은 데이터 레벨들의 서로 다른 세트들을 지원한다. 상기 읽기 워드는 두 개 또는 그 이상의 가상 읽기 벡터들(virtual read vectors)로 분리된다. 상기 가상 읽기 벡터들 각각에 대해, 상기 가상 읽기 벡터를 발생시키기 위해 이용된 코드북(codebook)이 확인(identify)되고, 부분 읽기 데이터 벡터(partial read data vector)가 발생된다. 상기 발생 단계는 상기 가상 읽기 벡터에 상기 코드북을 표현(represent)하는 매트릭스(matrix)를 곱하는 단계를 포함한다. 상기 부분 읽기 데이터 벡터들은 읽기 메시지(read message)에 결합되고, 상기 읽기 메시지는 출력된다.
본 발명의 또 다른 실시예는 메모리, 테스터(tester) 및 인코더(encoder)를 포함하는 메모리 시스템이다. 상기 메모리는 메모리 셀들의 블록을 포함한다. 상기 메모리 셀들의 블록에서는 상기 메모리 셀들의 물리적 특성들이 데이터 레벨들의 서로 다른 세트를 지원한다. 상기 테스터는 상기 메모리 셀들의 물리적 특성들을 결정한다. 상기 인코더는 상기 메모리 및 상기 테스터에 연결되고, 적어도 하나의 코드북을 채용한다. 상기 인코더는 상기 메모리 셀들의 블록에 쓰여질 쓰기 메시지(write message)를 수신하고 또한 상기 물리적 특성들에 응답하여 상기 메모리 셀들의 블록과 연관된 가상 메모리들을 확인한다. 상기 가상 메모리들 각각에 대해, 상기 가상 메모리에서 가상 셀들을 기술하는 제한 벡터(constraint vector)가 발생된다. 상기 제한 벡터의 발생은 상기 물리적 메모리 셀들의 물리적 특성들, 이전에 발생된 제한 벡터들, 및 이전에 발생된 가상 쓰기 벡터들에 응답한다. 또한, 상기 가상 메모리들 각각에 대해 가상 쓰기 벡터가 계산된다. 상기 계산은 코드북, 상기 제한 벡터 및 상기 쓰기 메시지에 응답한다. 상기 가상 쓰기 벡터들은 쓰기 워드에 결합되고, 상기 쓰기 워드는 상기 메모리 셀들의 블록에 출력된다.
본 발명의 또 다른 실시예는 이종의 메모리에 쓰기를 하는이다. 상기 방법은 쓰기 메시지 및 메모리 셀들의 블록에 대응하는 쓰기 어드레스를 수신하는 단계 - 상기 메모리 셀들 중 적어도 두 개는 서로 다른 데이터 레벨들을 지원함 -; 상기 메모리 셀들의 물리적 특성들을 결정하는 단계; 상기 물리적 특성들에 응답하여 상기 메모리 셀들의 블록과 연관된 가상 메모리들을 확인하는 단계를 포함한다. 상기 가상 메모리들 각각에 대해, 다음의 단계들, 즉, 상기 가상 메모리에서 가상 셀들을 기술(describe)하는 제한 벡터를 상기 물리적 메모리 셀들의 물리적 특성들, 이전에 발생된 제한 벡터들, 및 이전에 발생된 가상 쓰기 벡터들에 응답하여 발생시키는 단계와; 상기 제한 벡터 및 상기 쓰기 메시지에 응답하여 상기 쓰기 메시지를 비트 단위(bit by bit)로, 순서대로(in order), 상기 가상 메모리에 쓰는 것과, 상기 제한 벡터에 의해 표시된 것에 따라 특정 값으로 고정(stuck)된 것으로 알려진 위치들을 스킵(skip)하는 것을 포함하는, 가상 쓰기 벡터를 계산하는 단계가 수행된다. 상기 가상 쓰기 벡터들은 쓰기 워드에 결합되고, 상기 쓰기 워드는 상기 메모리 셀들의 블록에 출력된다.
본 발명의 또 다른 실시예는 이종의 메모리로부터 읽기를 하는 방법이다. 상기 방법은, 메모리 셀들의 블록으로부터 읽기 워드(read word)를 수신하는 단계 - 상기 메모리 셀들 중 적어도 두 개는 서로 다른 데이터 레벨들을 지원함 -; 상기 메모리 셀들의 물리적 특성들을 결정하는 단계; 상기 물리적 특성들에 응답하여 상기 메모리 셀들의 블록과 연관된 가상 메모리들을 확인하는 단계; 및 상기 읽기 워드를 복수의 가상 읽기 벡터들로 분리시키는 단계 - 상기 분리시키는 단계는 상기 가상 메모리들에 응답함 - 를 포함한다. 상기 가상 읽기 벡터들에 대해, 다음의 단계들, 즉, 상기 가상 메모리에서 가상 셀들을 기술(describe)하는 제한 벡터를 상기 물리적 메모리 셀들의 물리적 특성들, 이전에 발생된 제한 벡터들, 및 이전에 발생된 부분 읽기 벡터들에 응답하여 발생시키는 단계와; 상기 제한 벡터 및 상기 가상 읽기 벡터에 응답하여 상기 가상 읽기 벡터를 비트 단위(bit by bit)로, 순서대로(in order), 읽는 것과, 상기 제한 벡터에 의해 표시된 것에 따라 고정된 것으로 알려진 비트들을 버리는 것(discarding)을 포함하는, 부분 읽기 데이터 벡터를 발생시키는 단계가 수행된다. 상기 부분 읽기 데이터 벡터들은 읽기 메시지에 결합되고, 상기 읽기 메시지는 출력된다.
본 발명의 기술들을 통해 추가의 특징들 및 이점들이 구현된다. 다른 실시예들 및 측면들이 본 명세서에 기술되며, 이것들은 청구된 발명의 일부로서 여겨진다. 상기 특징들 및 이점들을 갖는 발명의 이해를 더 돕기 위해, 상세한 설명 및 도면들을 참조한다.
본 발명의 보호 범위는 본 명세서의 결론 부분의 청구항들에서 구체적으로 언급되고 분명하게 청구되고 있다. 본 발명에 관하여 전술한 특징들 및 이점들 그리고 기타 특징들 및 이점들은 첨부되는 도면들과 함께 설명되는 다음의 상세한 설명으로부터 분명해질 것이다.
도 1은 예시적인 실시예에 의해 구현될 수 있는 데이터를 쓰기 위한 프로세스를 도시한다.
도 2는 예시적인 실시예에 의해 구현될 수 있는 데이터를 읽기 위한 프로세스를 도시한다.
도 3은 예시적인 실시예에 의해 구현될 수 있는 이종의 메모리에 데이터를 저장하기 위한 시스템의 블록도를 도시한다.
도 4는 예시적인 실시예에 의해 구현될 수 있는 상 변화 메모리(PCM)에 데이터를 저장하기 위한 시스템의 블록도를 도시한다.
도 5는 예시적인 실시예에 의해 구현될 수 있는 PCM에 데이터를 쓰기 위한 시스템의 블록도를 도시한다.
도 6은 예시적인 실시예에 의해 구현될 수 있는 PCM 메모리로부터 데이터를 읽기 위한 시스템의 블록도를 도시한다.
도 7은 이종의 메모리의, 예시적인 실시예에 의해 구현될 수 있는 다수의 가상 바이너리 메모리들로의 개념적인 분해(decomposition)를 도시한다.
도 8은 이종의 메모리 제한들의, 예시적인 실시예에 의해 구현될 수 있는 가상 바이너리 메모리들의 세트에 관한 상응하는 제한들(equivalent constraints)로의 개념적인 분해를 도시한다.
도 9는 이종의 메모리 제한들의, 예시적인 실시예에 의해 구현될 수 있는 가상 바이너리 메모리들의 세트에 관한 상응하는 제한들로의 개념적인 분해를 도시한다.
도 10은 이종의 메모리 제한들의, 예시적인 실시예에 의해 구현될 수 있는 가상 비-바이너리(non-binary) 메모리들에 관한 상응하는 제한들로의 개념적인 분해를 도시한다.
도 11은 예시적인 실시예에 의해 구현될 수 있는 바이너리 쓰기 워드 컴퓨터 및 바이너리 워드 디코더의 블록도를 도시한다.
도 12는 예시적인 실시예에 의해 구현될 수 있는 워드 라이터(word writer)의 블록도를 도시한다.
도 13은 예시적인 실시예에 의해 구현될 수 있는 PCM 데이터 바이너라이저(binarizer)의 블록도를 도시한다.
도 14는 예시적인 실시예에 의해 구현될 수 있는 바이너리 메모리 제한 컴퓨터(binary memory constraints computer)의 블록도를 도시한다.
도 15는 예시적인 실시예에 의해 구현될 수 있는 바이너리 제한들을 계산하기 위한 프로세스를 도시한다.
도 16은 예시적인 실시예에 의해 구현될 수 있는 랜덤 바이너리(random binary) 및 저밀도 패리티 체크(low density parity check, LDPC) 코드들 및 가우시안 소거법(Gaussian elimination)을 사용하는 바이너리 쓰기 워드 컴퓨터들의 블록도들을 도시한다.
도 17은 예시적인 실시예에 의해 구현될 수 있는, 루비 변환(Luby transform, LT) 코드들 및 필링(peeling)을 사용하는 바이너리 쓰기 워드 컴퓨터, 및 선형 프로그래밍(linear programming)을 사용하는 비-바이너리 쓰기 워드 컴퓨터의 블록도들을 도시한다.
도 18은 예시적인 실시예에 의해 구현될 수 있는 연쇄 코딩(concatenated coding)을 사용하는 쓰기 워드 컴퓨터의 블록도를 도시한다.
도 19는 예시적인 실시예에 의해 구현될 수 있는, 메시지를 인코딩하는 코드워드(codeword)를 발생시키고 이종의 메모리 제한들을 충족시키는 매트릭스를 찾아내기 위해 쓰기 프로세스 인코더가 매트릭스들(matrices)의 미리 정의된 시퀀스(predefined sequence)를 하고자 하는 프로세스를 도시한다.
도 20은 예시적인 실시예에 의해 구현될 수 있는 도 19에 도시된 미리 정의된 시퀀스의 매트릭스들을 발생시키기 위해 쓰기 프로세스 인코더가 슈도-랜덤 함수 발생기(pseudo-random function generator)를 사용하는 프로세스를 도시한다.
도 21은 예시적인 실시예에 의해 구현될 수 있는, 읽기 프로세스 및 쓰기 프로세스 둘 다 각각의 셀에 의해 지원되는 저항 레벨들을 측정할 경우, PCM 메모리에 데이터를 저장하기 위한 시스템의 블록도를 도시한다.
도 22는 예시적인 실시예에 의해 구현될 수 있는, 읽기 프로세스 및 쓰기 프로세스 둘 다 각각의 셀에 의해 지원되는 저항 레벨들을 측정할 경우, PCM 메모리에 데이터를 쓰기 위한 시스템의 블록도를 도시한다.
도 23은 예시적인 실시예에 의해 구현될 수 있는, 읽기 프로세스 및 쓰기 프로세스 둘 다 각각의 셀에 의해 지원되는 저항 레벨들을 측정할 경우, PCM 메모리로부터 데이터를 읽기 위한 시스템의 블록도를 도시한다.
도 24는 예시적인 실시예에 의해 구현될 수 있는 노이즈가 많은(noisy) 이종의 메모리에 데이터를 저장하기 위한 바이너리 워드 컴퓨터 및 바이너리 워드 디코더를 도시한다.
도 25는 예시적인 실시예에 의해 구현될 수 있는, 이종의 다차원(multidimensional) 메모리 제한들의 상응하는 1 차원(one-dimensional) 제한들로의 변환(conversion)을 도시한다.
도 26은 예시적인 실시예에 의해 구현될 수 있는, 다차원 메모리 제한들로부터 획득된 상응하는 1 차원 제한들의, 가상 메모리들의 세트에 관한 상응하는 제한들로의 분해를 도시한다.
본 발명의 예시적인 실시예는, 데이터를 쓰기에 앞서 및/또는 데이터를 읽은 후에 앞서 각각의 메모리 엘리먼트의 적절한 물리적 특성들을 측정함으로써, 그리고 코딩 기술들을 이용하는 이 지식을 이용함으로써, 이종의 엘리먼트들을 갖는 메모리의 스토리지 용량을 증가시킨다. 일 실시예에서, 상기 메모리는 상변화 메모리(PCM) 셀들로 구성되고, 상기 쓰기 프로세스는 쓰기에 앞서 RESET 및 SET 펄스들을 인가(apply)함으로써 각 셀의 저항 범위를 측정한다. 다음으로, 각 셀에 저장될 수 있는 저항 레벨들은 양자화(quantize)되고, 상기 양자화 인덱스들(quantization indices)은 바이너리로 변환되고, 상기 셀 저항 한계들(cell resistance limits)을 어기지(violate) 않으면서 각각의 셀에 데이터를 저장할 수 있는 바이너리 코드들의 세트가 사용된다. 다른 예시적인 실시예에서, 상기 읽기 프로세스는 RESET 및 SET 펄스들을 인가함으로써 읽은 후 각각의 셀의 물리적 특성들을 추가로 측정하고, 그런 다음, 원 데이터(original data)를 다시 쓴다(re-write). 상기 측정된 물리적 특성들은 상기 인코더에 의해 쓰여진 데이터를 디코딩하는 것을 지원하기 위해 상기 읽기 프로세스에 의해 이용된다.
예시적인 실시예는 PCM을 포함하고, 모든 PCM 셀들은 공통의 최대 (RESET) 저항 레벨 및 가변적인 최소 (SET) 레벨을 갖는 것으로 가정된다. 이 실시예에서, 상기 쓰기 프로세스는 적절한 프로그래밍 펄스를 사용하여 셀들의 블록 각각을 각각의 SET 레벨로 프로그램하는 단계, 및 상기 SET 저항 레벨을 측정하는 단계를 포함한다. 이 정보에 기초하여, 저항 레벨들의 세트에 쓰여지도록 상기 데이터를 변형(transform)하기 위해 적절한 코드가 사용되는데, 상기 저항 레벨들의 세트는 상기 셀 저항 범위들에 호환가능(compatible)하다. 또 다른 실시예에서, 각각의 PCM 셀의 최소 및 최대 저항 레벨들은 가변적이다. 상기 쓰기 프로세스는 셀들의 블록 각각을 각각의 SET 및 RESET 저항 레벨들로 프로그래밍하는 단계, 적절한 프로그래밍 펄스들을 사용하는 단계, 및 상기 SET 및 RESET 저항 레벨들을 측정하는 단계를 포함한다. 이 정보에 기초하여, 상기 데이터가 저항 레벨들의 세트에 쓰여지도록 변형하기 위해 적절한 코드가 사용되는데, 상기 저항 레벨들의 세트는 상기 셀 저항 범위들과 호환가능하다.
예시적인 실시예에서, 상기 변형 단계들은 다음과 같이 수행될 수 있다. 상기 저항 레벨들은 먼저 바이너리 값들로 변환된다. 각각의 비트플레인(bitplane)은 서로 다른 데이터 메시지를 저장하기 위해 사용된다. 주어진 비트플레인에 대해서, 메모리에 쓰여질 바이너리 워드는 바이너리 매트릭스("H")의 지원에 의해 발생되고, 상기 읽기 프로세스 및 쓰기 프로세스에 의해 공유된다. 특히, Hc가 저장될 바이너리 메시지와 같게 되고, c가 상기 메모리 셀 이종성에 의해 부과된 바이너리 제한들(binary constraints)의 세트를 충족시키도록, 바이너리 벡터 "c"가 구해진다. 상기 바이너리 벡터는 상기 비트플레인에 쓰여진다. 상기 읽기 프로세스는 Hc를 계산함으로써 상기 메시지를 재구성한다.
또 다른 예시적인 실시예에서, 저항 레벨들의 바이너리 값들로의 변환은, 주어진 레벨들에 대해 각각의 셀이 서로 다른 바이너리화(binarization)를 갖도록 달성된다. 이는 비트플레인들에 걸쳐 코딩 레이트들(coding rates)의 균등화(equalization)를 용이하게 하고, 그래서 시스템에 요구되는 바이너리 매트릭스들(H)의 수를 감소시킨다. 그래서, 상기 시스템은 스토리지/하드웨어 복잡성을 감소시킬 수 있다. 다른 예시적인 실시예에서, 저항 레벨들의 바이너리 값들로의 변환은 정수(integer)로 표현된 저항 레벨의 바이너리화의 픽스된(fixed) 순열(permutation)에 의해 달성된다. 또 다른 예시적인 실시예에서, 상기 변환 단계는 상기 읽기 프로세스 및 쓰기 프로세스에 의해 공유되는 비-바이너리 매트릭스 H의 지원에 의해 인코딩되도록 상기 데이터를 발생시킴으로써 수행된다. 특히, Hc가 저장될 비-바이너리 메시지들과 같게 되고, 그래서 c가 상기 메모리 이종성에 의해 부과된 제한들의 세트를 충족시키도록, 벡터 c 가 구해진다. 상기 벡터 c는 상기 메모리에 쓰여진다. 상기 읽기 프로세스는 Hc를 계산함으로써 상기 메시지를 재구성한다.
본 명세서에 사용되는 "데이터 레벨(data level)" 이라는 용어는 셀의 물리적 특성의 값의 미리 규정된 범위에 대응하는(또는 그러한 미리 규정된 범위에 의해 "표현된") 특정 데이터 값을 일컫는다. 주어진 데이터 레벨을 지원하기 위해, 상기 데이터 레벨에 대응하는 범위 내에서 하나의 값을 취하도록 상기 셀의 물리적 특성을 설정하는 것이 가능하다. 저항의 상기 물리적 특성을 갖는, PCM을 사용하는 예를 가정해 보면, 0-10 옴(Ohm)의 셀 저항은 데이터 값 = 1에 대응할 수 있고, 10-20 옴의 셀 저항은 데이터 값 = 2에 대응할 수 있다. 따라서, 만약 셀 저항이 0-10 옴 범위에 있도록 만들어진다면, 그 셀은 데이터 레벨 1을 지원한다.
도 1은 예시적인 실시예에 의해 구현될 수 있는 데이터를 쓰기 위한 프로세스를 도시한다. 블록 102에서, 쓰기 데이터(이는 쓰기 메시지(write message)로 일컬어짐) 및 이종의 메모리 셀들의 블록에 대응하는 어드레스가 수신된다(예를 들어, 인코더 내에). 블록 104에서, 메모리 셀들의 블록과 연관된 가상 메모리들 및 쓰기 데이터는 다수의 부분 쓰기 데이터 벡터들로 분리되는데, 이들 다수의 부분 쓰기 데이터 벡터들 각각은 하나의 가상 메모리와 연관된다. 가상 메모리들의 수는 메모리 셀들의 블록의 물리적 특성들에 의존한다. 예를 들어, PCM 셀들의 물리적 특성은 저항 레벨을 포함할 수 있다. 만약 저항 레벨이 4 개의 값들까지 가질 수 있다면, 가상 메모리들의 수는 두 개이다(즉, 2의 2승은 4이므로, 4 개의 값들은 2 비트들에서 지원될 수 있음). 이와는 다르게, 만약 저항 레벨이 5 내지 8 개의 값들을 가질 수 있다면, 가상 메모리들의 수는 3이다(즉, 2의 3승은 8이므로, 8 개의 값들은 3 비트들에서 지원될 수 있음).
도 1의 블록 106에서, 단계 104에서 확인된 각각의 가상 메모리에 대해 프로세스가 수행된다. 상기 가상 메모리에서 상기 가상 셀들을 기술(describe)하는 제한 벡터(constraint vector)가 발생된다. 상기 제한 벡터를 발생시키는데 있어서의 입력은 상기 메모리 셀들의 물리적 특성들, 메모리 셀들(예, 다른 가상 메모리들에 대한 메모리 셀들)의 블록에 대한 이전에 발생된 제한 벡터들 및 메모리 셀들의 블록에 대한 이전에 발생된 가상 쓰기 벡터들이다. 따라서, 상기 쓰기 프로세스는 상기 메모리 셀들의 물리적 특성들을 안다. 다음으로, 상기 제한 벡터의 내용들 및 메모리 셀들의 블록에서의 메모리 셀들의 수에 기초하여 코드북이 선택된다. 다른 예시적인 실시예에서, 상기 코드북은 읽기 프로세스 및 쓰기 프로세스 둘 다에 앞서 픽스(fix)되고 선험적으로(a-priori) 알려지는데, 이 경우에는 상기 선택 단계는 불필요하다. 상기 코드북은 선형(linear) 또는 비선형(non-linear) 코드 둘 다를 규정할 수 있다. 상기 가상 메모리에 대한 가상 쓰기 벡터는 상기 코드북, 상기 제한 벡터 및 상기 쓰기 데이터에 기초하여 계산된다. 상기 코드북이 픽스되지 않은 경우에는, 메모리 셀들의 블록이 읽혀질 때 상기 코드북이 이용될 수 있도록 하기 위해 상기 코드북과 연관된 확인자(identifier)가 저장된다. 이러한 코드 인덱스는 메타데이터(meta-data)로 일컬어질 수 있다. 이와 유사하게, 상기 코드북도 메타데이터로 일컬어질 수 있다. 메타데이터는 다양한 위치들(예를 들어, 이종이 아닌(non-heterogeneous) 서로 다른 메모리에, 또는 신뢰할 수 있는 방법으로 상기 이종의 메모리에(예를 들어, 메모리의 미리테스트된 특정 영역에), 또는 단지 모든 셀들에 의해 지원되는 레벨들에 대한 쓰기의 기술을 사용함으로써)에 저장될 수 있다. 만약 상기 코드북이 픽스된다면, 어떤 메터데이터도 저장될 필요가 없다. 블록 108에서, 상기 가상 쓰기 벡터들은 쓰기 워드(write word)로 결합된다. 블록 110에서, 상기 쓰기 워드는 쓰여질 메모리 셀들의 블록으로 출력된다.
도 2는 예시적인 실시예에 의해 구현될 수 있는 데이터를 쓰기 위한 프로세스를 도시한다. 이 예에서, 상기 읽기 프로세스에 의해 이용되는 디코더는 상기 이종의 메모리 셀들의 블록의 물리적 특성들을 알지 못한다(즉, 인식하지 못한다)고 가정한다. 상기 디코더는 상기 물리적 특성들의 범위(예, 0과 4의 저항 레벨 사이)를 알고, 상기 블록으로의 상기 마지막 쓰기 프로세스 동안 사용된 코드북들의 인덱스들을 안다. 블록 202에서, 데이터는 이종의 메모리 셀들의 블록으로부터 읽혀진다(즉, "읽기 워드(read word)"). 블록 204에서, 상기 읽기 워드는 상기 물리적 값들의 범위에 기초하여 가상 읽기 벡터들로 분리된다. 예를 들어, 만약 상기 범위가 4 개의 값들을 커버한다면, 상기 읽기 워드는 2 개의 가상 읽기 벡터들로 분리된다. 블록 206에서, 상기 가상 읽기 벡터들 각각에 대한 처리가 수행된다. 먼저, 코드북 확인자(codebook identifier)가 수신된다(예를 들어, 스토리지 위치로부터, 다르게는 상기 코드북 확인자는 픽스된 코드북 또는 미리 규정된 코드북일 수 있음). 상기 코드북 확인자는 데이터가 메모리에 쓰여졌을 때 상기 인코더에 의해 이용된 코드북을 확인한다. 다음으로, 상기 확인된 코드북을 이용함으로써 부분 읽기 데이터 벡터(partial read data vector)가 발생된다. 예시적인 실시예에서, 상기 코드북은 선형 코드(linear code)이고, 상기 부분 읽기 데이터 벡터는 상기 가상 읽기 벡터에 상기 확인된 코드북을 표현하는 매트릭스를 곱함으로써 발생된다. 블록 208에서, 상기 부분 읽기 데이터 벡터들은 읽기 데이터(또한 상기 읽기 메시지로 일컬어짐)에 결합된다. 블록 210에서, 상기 읽기 데이터는 출력된다(예를 들어, 읽기 요청기(read requestor)로).
도 3은 예시적인 실시예의 의해 구현될 수 있는 이종의 메모리에 데이터를 저장하기 위한 시스템의 블록도를 도시한다. 도 3에 도시된 시스템은 메모리 셀들의 블록들을 포함하는 이종의 메모리(302), 메모리 셀들의 물리적 특성들을 결정하기 위한 테스터(304), 쓰기 데이터를 수신하고 메모리 셀들에 저장하기 위한 쓰기 워드를 발생시키는 인코더(305), 및 메모리로부터 읽기 워드를 수신하고 읽기 데이터를 발생시키기 위한 디코더(308)를 포함한다. 예시적인 쓰기 프로세스(312)(예를 들어, 도 1을 참조하여 기술되는 프로세스)는 테스터(304), 인코더(306), 및 쓰기 프로세스(312)와 읽기 프로세스(314) 둘 다에 의해 이용되는 공유 코드들(310)(예, 코드북 확인자 및 코드북)을 이용한다. 예시적인 읽기 프로세스(314)(예를 들어, 도 2를 참조하여 기술되는 프로세스)는 디코더(308) 및 공유 코드들(310)을 이용한다.
도 4는 예시적인 실시예에 의해 구현될 수 있는 PCM에 데이터를 저장하기 위한 시스템의 블록도를 도시한다. 도 4에 도시된 시스템은 메모리 셀들을 포함하는 이종의 PCM 메모리(402), 메모리 셀들과 연관된 저항 레벨들을 결정하기 위한 저항 범위 테스터(404)(즉, 이 예에서의 물리적 특성은 저항 레벨임), 쓰기 데이터를 수신하고 메모리 셀들에 저장하기 위한 PCM 쓰기 워드를 발생시키기 위한 인코더(406), 및 PCM 메모리(402)로부터 PCM 읽기 워드를 수신하고 읽기 데이터를 발생시키기 위한 디코더(408)를 포함한다. PCM 메모리에 대한 예시적인 쓰기 프로세서(412)는 저항 범위 테스터(404), 인코더(406) 및 쓰기 프로세스(412)와 읽기 프로세스(414) 둘 다에 의해 이용되는 공유 코드들(410)을 이용한다. PCM 메모리(402)에 대한 예시적인 읽기 프로세스(414)는 디코더(408) 및 공유 코드들(410)을 이용한다. 또 다른 실시예에서, 저항 범위 테스터는 저항 테스터(resistance tester)로 대체될 수 있는데, 이 저항 테스터는 각각의 세트에 의해 지원되는 저항 레벨들의 세트를 결정한다. 이 경우, 이 세트는 인접하지 않는다(non-contiguous).
또 다른 실시예에서, 메모리는 플래쉬 메모리(flash memory) 이고 메모리 셀들은 플래쉬 메모리 셀들이다. 이 실시예에서, 정보를 저장하기 위해 사용되는 물리적 특성은 플로팅 게이트 전하(floating gate charge)이다. 플래쉬 메모리에서의 이종성은 상기 플래쉬 셀들의 전하 저장 특성들에서의 변화로 인해 생긴다.
도 5는 예시적인 실시예에 의해 구현될 수 있는 PCM 메모리(402)에 데이터를 저장하기 위한 시스템의 블록도를 도시한다. 도 5는 예시적인 실시예에 의해 구현될 수 있는 예시적인 인코더(406)의 상세도를 보여준다. 예시적인 인코더(406)는 바이너리 메모리 제한 컴퓨터(binary memory constraints computer)(502), 코드 선택기들(code selectors)(506), 바이너리 쓰기 워드 컴퓨터들(508), 데이터 바이너라이저(data binarizer)(510) 및 PCM 워드 라이터(word writer)(504)를 포함한다. 데이터 바이너라이저(510)는 쓰기 데이터를 수신하여 그것을 다수의 부분 쓰기 데이터 벡터들로 분리하는데, 상기 분리된 쓰기 데이터 벡터들 각각은 하나의 가상 메모리와 연관된다. 예시적인 실시예에서, 쓰기 데이터는 바이너리이고, 데이터 바이너라이저는 그것을 다수의 바이너리 벡터들로 나누는데, 상기 다수의 바이너리 벡터들은 제i 가상 메모리에 쓰여질 수 있는 비트들의 수를 결정함으로써 정해지는 제i 바이너리 벡터에서의 비트들의 수를 갖는다. 이는 바이너리 메모리 제한 컴퓨터(502)에 의해 계산된 메모리 제한들(memory constraints)의 함수로서 계산된다.
다른 예시적인 실시예에서, 상기 쓰기 데이터는 비-바이너리(non-binary)이고, 데이터 바이너라이저(510)는 그것을 바이너리로 변환하고, 그런 다음 그것을 다수의 바이너리 벡터들로 분리한다. 예시적인 실시예에서, 이러한 가상 메모리들의 수는 저항 범위 테스터(404)에 의해 측정되는 PCM 셀들에서의 가능한 저항 값들의 수에 의존한다. 바이너리 메모리 제한 컴퓨터(502)는 메모리 셀들의 블록에서 각 셀에 대해 지원되는 저항 레벨들을 수신한다. 저항 레벨들의 범위에 기초하여, 바이너리 메모리 제한 컴퓨터(502)는 상기 가상 메모리들과 연관된 제한들을 확인한다. 코드 선택기들(506)은 상기 블록에서의 메모리 셀들의 수 및 상기 가상 메모리에 대한 제한들에 기초하여 각각의 가상 메모리에 대한 코드북을 선택한다. 다른 예시적인 실시예에서, 상기 코드북은 읽기 프로세스와 쓰기 프로세스 둘 다에 대해 픽스되고 선험적으로 알려지고, 그래서 상기 코드 선택기들은 불필요하다. 바이너리 쓰기 워드 컴퓨터들(508)은 가상의 쓰기 벡터들을 계산한다. 예시적인 실시예에서, 상기 코드북은 가상 쓰기 벡터들에 신드롬들(syndromes)을 부여(assign)하는 선형 코드이고, 주어진 부분 쓰기 데이터 벡터에 대한 가상 쓰기 벡터는 상기 가상 메모리에 대해 발생된 제한 벡터와 일치하는 벡터를 계산함으로써 계산되고, 신드롬(syndrome)은 상기 부분 쓰기 벡터와 동일하다. 그래서, 상기 가상 쓰기 벡터들은 식 Hc = m (c에 대해)을 해결함으로써 계산되고, 상기 가상 메모리에 대한 제한들을 고려한다. 여기서 H는 상기 가상 메모리에 대해 선택된 선형 코드에 대응하는 코드 매트릭스이고, "m"은 상기 가상 메모리에 대응하는 부분 쓰기 데이터 벡터이고, 곱(product) Hc는 c에 대응하는 신드롬이다. 식 Hc = m은, 일반적으로, c에 대해 다수의 해들(solutions)을 가지며, 이 해들 각각은 부분 쓰기 벡터 m의 하나의 표현이고, 원하는 표현은 상기 가상 메모리 제한들과 일치하는 해 벡터 c이다. PCM 워드 라이터(504)는 상기 가상 쓰기 벡터들을 PCM 메모리(402)에 쓰여질 쓰기 워드에 결합한다.
도 6은 예시적인 실시예에 의해 구현될 수 있는 PCM 메모리(402)로부터 데이터를 읽기 위한 시스템의 블록도를 도시한다. 도 6은 예시적인 실시예에 의해 구현될 수 있는 예시적인 디코더(408)의 상세도를 보여준다. 예시적인 디코더(408)는 PCM 워드 리더(602), 데이터 바이너라이저(604), 바이너리 워드 디코더들(606) 및 읽기 데이터 발생기(608)를 포함한다. PCM 워드 리더(602)는 상기 읽기 어드레스에 의해 특정되는 셀들의 블록에서 각각의 셀을 읽는다. 상기 읽기 워드는 데이터 바이너라이저(604)에 의해 수신되며, 데이터 바이너라이저(604)는 가능한 저항 값들의 범위에 기초하여 상기 읽기 워드를 가상 읽기 벡터들로 나눈다. 각각의 가상 읽기 벡터는 개별 바이너리 워드 디코더(606)로 보내진다. 바이너리 워드 디코더(606)는 PCM(402)에 읽기 워드를 쓰기 위해 이용된 코드북에 대한 인덱스 또는 다른 확인자로의 접근을 갖는다. 선형 코드들인 경우, 바이너리 워드 디코더(606)는 부분 읽기 데이터 벡터를 생성하기 위해 상기 확인된 코드북에 대응하는 코드-매트릭스에 상기 가상 읽기 벡터의 내용들을 곱한다. 읽기 데이터 발생기(608)는 상기 부분 읽기 데이터 벡터들을 상기 읽기 데이터에 결합한다. 그런 다음 상기 읽기 데이터는 출력된다(예를 들어, 데이터 요청기(data requestor)로).
도 7은 예시적인 실시예에 의해 구현될 수 있는 이종의 메모리의 다수의 가상 바이너리 메모리들로의 개념적 분해를 도시한다. 도 7에 도시된 예는 5 개의 이종의 메모리 셀들을 갖는 메모리 블록(702)을 포함한다. 상기 메모리 셀들에 대한 저항 범위 레벨은 4 개의 값들(0, 1, 2, 3)을 가지며, 그러므로 상기 저항 범위의 물리적 특성은 2 개의 비트플레인들(704)에 표현될 수 있다. 상기 셀 저항 레벨들의 바이너리화에서 각각의 비트플레인은 상기 가상 메모리들(이는 또한 "바이너리 메모리들" 로 일컬어짐) 중 하나에 대응한다. 도 7은 제1 바이너리 메모리(708) 및 제2 바이너리 메모리(710)을 도시한다. 원(original) 메모리 블록(702)의 이종성은 상기 가상 메모리 셀들에 대한 제한들의 형태로 나타나고, 셀 3 및 셀 4는 레벨들 "10" 및 "11"을 저장할 수 없고, 그래서 제2 바이너리 메모리(710)에서 상기 대응하는 위치들은 "0"으로 고정된다. 즉 그것들의 값이 "1"로 변경될 수 없다. 예시적인 실시예에서, 가상 메모리에 대한 제한은 제한 벡터(constraint vector)로서 표현된다. 예를 들어, 제2 바이너리 메모리(710)에 대한 제한 벡터는 BP2:b=(3,4), v=(0,0)으로 표현될 수 있다.
도 8은 예시적인 실시예에 의해 구현될 수 있는, 이종의 메모리 제한들의, 가상 바이너리 메모리들의 세트에 대한 상응하는(equivalent) 제한들로의 개념적인 분해(decomposition)를 도시한다. 도 8은 메모리 블록(802)의 물리적 특성들을 기술하기 위해, 메모리 블록(802)이 있고 그것이 두 개의 비트플레인들(804)을 필요로 한다는 점에서 도 7과 유사하다. 이 예에서, 셀 2 및/또는 5는 레벨 "11"을 저장할 수 없다. 그러므로 만약 제1 바이너리 메모리(808)에서 셀 2 및/또는 5가 "1"이면, 제2 바이너리 메모리(810)에서 대응하는 셀들은 "0"으로 고정된다. 이 예는 제2 바이너리 메모리(810)에 대한 제한들이 제1 바이너리 메모리(808)에 저장되는 바이너리 데이터에 의존할 수 있다는 것을 도시한다.
도 9는 예시적인 실시예에 의해 구현될 수 있는, 이종의 메모리 제한들의, 가상 바이너리 메모리들의 세트에 관한 상응하는 제한들로의 개념적인 분해(decomposition)를 도시한다. 도 9는 메모리 블록(902)의 물리적 특성들을 기술하기 위해, 메모리 블록(902)이 있고 그것이 두 개의 비트플레인들(904)을 요구한다는 점에서 도 7 및 8과 유사하다. 이 예에서, 만약 비트플레인 1(908)에서의 셀 5가 "1"이면, 비트플레인 2(910)에서의 셀 5는 "0"으로 고정된다. 또한, 만약 비트플레인 1(908)에서의 셀 5가 "0"이면, 비트플레인 2(910)에서의 셀 5는 "1"로 고정된다.
그러한 제한들이 계산되는 가상 메모리들은 비-바이너리일 수 있는데, 이러한 비-바이너리는, 예를 들어, 계산될 필요가 있는 가상 쓰기 벡터들의 수를 감소시킴에 있어서 편리한 것으로 증명될 수 있다. 도 10은 예시적인 실시예에 의해 구현될 수 있는, 이종의 메모리 제한들의, 가상 터너리 메모리들(virtual ternary memories)의 세트에 대한 상응하는 제한들로의 개념적인 분해를 도시한다. 도 10에 도시된 예는 5 개의 이종의 메모리 셀들을 갖는 메모리 블록(1002)을 포함한다. 상기 메모리 셀들에 대한 저항 범위 레벨은 9 개의 값들(0, 1, 2, 3, 4, 5, 6, 7, 및 8)를 가지므로, 저항 범위의 물리적 특성은 2 개의 터너리 심볼-플레인들(1004)로 표현될 수 있다. 각각의 터너리 심볼-플레인은 가상 메모리들(이는 "터너리 메모리들"로도 일컬어짐) 중 하나에 대응한다. 도 10은 제1 터너리 메모리(1008) 및 제2 터너리 메모리(1010)를 갖는 터너리 메모리를 도시한다. 원 메모리 블록(1002)의 이종성은 가상 메모리 셀들에 대한 제한들의 형태로 나타난다. 예를 들어, 셀 5는 레벨 1(터너리에서 "01")보다 더 큰 어떤 레벨도 지원할 수 없고, 그래서 터너리 메모리 1(1008)에서 대응하는 가상 셀은 2보다 더 작게 되도록 제한되며, 터너리 메모리 2(1010)에서의 대응하는 셀은 0으로 고정된다. 이와 유사하게, 터너리 메모리 2(1010)에서의 가상 셀 2는, 셀 2가 레벨 2(터너리에서 "02")보다 더 큰 어떤 레벨도 지원할 수 없으므로, 0으로 고정된다. 또 다른 예로서, 셀 3은 단지 레벨 "00", "01", "02", "10", 및 "11" 만을 지원한다. 따라서 만약 터너리 메모리 1(1008)에 쓰여진 심볼이 위치 3에서 "0" 또는 "1"이면, 가상 셀 3은 터너리 메모리 2(1010)가 "0" 또는 "1"이 되도록 제한되고, 그렇지 않으면 "0"으로 고정된다.
도 11은 예시적인 실시예에 의해 구현될 수 있는 바이너리 쓰기 워드 컴퓨터(1106) 및 바이너리 워드 디코더(1110)의 블록도를 도시한다. 쓰기 프로세스는 쓰기 데이터(c)를 발생시키는데, 이러한 쓰기 데이터(c)는 또한 제i(i번째) 가상 메모리에 대한 가상 쓰기 벡터로서 일컬어진다. 상기 쓰기 프로세스는 바이너리 메모리 제한 컴퓨터(1102), 코드 선택기(1104), 및 바이너리 쓰기 워드 컴퓨터(1106)를 포함한다. 바이너리 메모리 제한 컴퓨터(1102)는 테스터로부터의 물리적 특성들뿐만 아니라, 이전의 쓰여진 가상 메모리들에 대응하는 가상 쓰기 벡터들을 수신하며, 비트플레인들 중 하나에 대한 고정된 위치들 및 고정된 값들을 기술하는 제한 벡터를 발생시킨다. 상기 제한 벡터들은 코드 선택기(1104)에 대한 입력이며, 이 코드 선택기(1104)는 상기 제한 벡터의 내용들 및 상기 메모리 셀들의 블록에서의 메모리 셀들의 수에 기초하여 코드북(이는 이 경우에 바이너리 코드 매트릭스에 의해 표현됨)을 선택한다. 또한, 코드 선택기(1104)는 상기 제한 벡터를 바이너리 워드 쓰기 컴퓨터(1106)로 패스한다. 상기 바이너리 쓰기 워드 컴퓨터(1106)는 코드매트릭스(H), 제한 벡터(b 및 v를 포함함), 및 쓰기 데이터(m)를 입력하여, 가상 쓰기 벡터(c)를 계산한다. 가상 쓰기 벡터 c는 "c"에 대해 Hc = m을 해결함으로써 계산되며, 이는 여전히 상기 제한 벡터에 의해 규정된 제한들을 충족시킨다. 가상 쓰기 벡터는 블록에 대한 가상 쓰기 벡터들을 쓰기 워드에 결합시키기 위해 PCM 워드 라이터에 입력된다. 또한, 가상 쓰기 벡터는 그 다음의 가상 메모리에 대해 제한 벡터들을 발생(develop)시키는 데 사용하기 위해 바이너리 메모리 제한 컴퓨터(1102)에 입력된다.
도 11에 도시된 예시적인 실시예에서 보여지는 바와 같이, 읽기 프로세스는 데이터 바이너라이저(1108) 및 바이너리 워드 디코더(1110)를 이용한다. PCM 워드 리더로부터의 읽기 워드(read word)는 데이터 바이너라이저(1108)에 수신된다. 상기 데이터 바이너라이저는 상기 읽기 워드를 복수의 가상 읽기 벡터들로 분리한다. 상기 가상 읽기 벡터들 중 하나는, 그 데이터가 그 메모리 블록에 쓰여졌을 때 이용된 코드북과 함께 바이너리 워드 디코더(1110)에 입력된다. 부분 읽기 데이터 벡터(이는 또한 바이너리 메시지로 일컬어짐)는 상기 가상 읽기 벡터에 상기 코드북을 곱함으로써 발생된다. 상기 부분 읽기 데이터 벡터는 읽기 워드 발생기로 보내지고, 이 읽기 워드 발생기는 그 메모리 블록에서의 가상 메모리들 각각으로부터의 부분 읽기 데이터 벡터들을 읽기 데이터에 결합한다.
도 11에 도시된 예는 비-바이너리 메모리 제한들 및 코드 매트릭스들이 사용되는 경우들에 대해 일반화될 수 있다.
도 12는 예시적인 실시예에 의해 구현될 수 있는 PCM 워드 라이터(504)와 같은 워드 라이터의 블록도를 도시한다. PCM 워드 라이터(504)는 가상 쓰기 벡터들(C1 ... Ci ... CB)을 PCM 메모리(402)에 쓰여질 쓰기 워드(W1 ... WK)에 결합한다. "K"는 메모리 셀들의 블록에서 셀들의 수이고 "B"는 메모리 셀들의 블록에서 가상 메모리들의 수이다. 도 12는 상기 쓰기 워드의 내용들을 결정하는 예시적인 방법을 보여주며, 또한 쓰기 워드를 생성하기 위해 상기 가상 쓰기 벡터들을 결합시키는 다른 방법들이 구현될 수 있다. 상기 가상 쓰기 벡터들을 발생시키는 방법(특히, 상기 가상 메모리 제한들과의 그것들의 일관성(consistency))은 상기 쓰기 워드에서의 각각의 심볼이 그것이 쓰여진 셀에 의해 지원되는 레벨이라는 것을 보장한다. 이는 상기 이종의 메모리가 정확하게 쓰여지도록 보장한다.
도 13은 예시적인 실시예에 의해 구현될 수 있는 데이터 바이너라이저(604)와 같은 PCM 데이터 바이너라이저의 블록도를 도시한다. PCM 워드 리더(602)는 읽기 메모리 읽기 어드레스(read memory read address)에서 PCM 메모리로부터 읽기 워드(W1 ... WK)를 수신하여, 그 읽기 워드를 복수의 가상 읽기 벡터들(c1 ... ci ... cB)로 분리한다. 도 13은 상기 쓰기 워드의 내용들을 결정하는 예시적인 방법을 도시하며, 또한 상기 분리를 수행하는 다른 방법들이 구현될 수 있다.
도 14는 예시적인 실시예에 의해 구현될 수 있는 바이너리 메모리 제한 컴퓨터(502)와 같은 바이너리 메모리 제한 컴퓨터의 블록도를 도시한다. 도 14는 셀 "i"에 대응하는 "B" 가상 메모리들에 대한 제한들(고정된 비트들 및 값들)의 계산을 도시한다. 저항 범위 - 이는 저항 범위 테스터(404)에 의해 측정됨 - 는 셀 "i"에 의해 지원되는 정수값의(integer-valued) 저항 레벨 인덱스들의 세트를 결정하기 위해 사용된다. 이 세트에 기초하여, 가상 메모리들 1 내지 k-1에서의 위치 "i"에 쓰여진 비트들, 그것은, 만약 바이너리 메모리 "k"에서의 위치 "i"가 고정된다면(그리고 만약 그렇다면, 그 고정된 값이) 결정될 수 있다.
도 15는 도 14에 도시된 블록도에 의해 구현될 수 있는 바이너리 제한들을 계산하기 위한 프로세스를 도시한다. 도 15에 도시된 예에서, 셀 "i"는 인덱스들 1,2,3,4 및 5에 의해 표현되는 저항 레벨들을 지원할 수 있다. 이 정보는 바이너라이저(1502)로 입력되고, 바이너라이저(1502)는 그 셀 레벨 인덱스들에 대응하는 바이너리화된 인덱스들을 생성한다. 상기 PCM 메모리에는 5 개 또는 그 이상의 저항 레벨들이 있기 때문에, 적어도 세 개의 가상 메모리들(이는 또한 바이너리 메모리들로 일컬어짐)이 존재한다. 도 15는 3 개의 가상 메모리들 각각에서 위치 "i"에 대응하는 메모리 제한들이 어떻게 계산되는지를 보여준다. 상기 바이너리화된 인덱스들은 바이너리 메모리 1 제한 컴퓨터(1504) - 이는 상기 바이너리화된 인덱스들의 최하위 비트들(least significant bits)에 어떤 값들이 포함되는지를 결정함 - 로 입력된다. 이 예에서, 그것들은 "0"들과 "1"들 둘 다를 포함하고, 그래서 바이너리 메모리 1, 위치 "i"는 고정되지 않는다(non-stuck or unstuck).
블록 1506에서, 바이너리 메모리 1에서의 비트 "i"에 "0"의 값이 쓰여진다. 상기 쓰기에 대한 입력은 바이너리 메모리 1과 연관된 제한 벡터를 포함하며, 상기 제한들은, 어떤 값이든지 쓰여질 수 있도록 바이너리 메모리 1에서의 비트 "i"가 고정되지 않는다는 것을 규정한다. 처리는 바이너리 메모리 2 제한 컴퓨터(1508)로 계속되며, 입력은 바이너리 메모리 1에서의 비트 "i"에 쓰여진 데이터 값을 포함한다. 남은 호환가능한 레벨들은, "0"이 바이너리 메모리 1에서의 비트 "i"에 쓰여졌다는 가정하에 계산된다. 바이너리 메모리 2 제한 컴퓨터(1508)에 도시된 바와 같이, "0"이 최하위비트(즉, 바이너리 메모리 1에서)에 위치하기 때문에, 남은 호환가능한 레벨들은 (010 및 100)이다. 바이너리 메모리 2 제한 컴퓨터는 바이너리 메모리 2, 위치 "i"가 고정되지 않는다는 것을 결정한다.
블록 1510에서, 입력으로서 바이너리 메모리 2 제한 컴퓨터(1508)로부터 제한 벡터를 사용하여 바이너리 메모리 2에서의 비트 "i"에 "1"의 값이 쓰여진다. 다음으로, 처리는 바이너리 메모리 3 제한 컴퓨터(1512)에서 계속되고, 입력은 바이너리 메모리들 1 및 2에서의 비트 "i"에 쓰여진 데이터 값들을 포함한다. 남은 호환가능한 레벨들은 "0"이 바이너리 메모리 1에서의 비트 "i"에 쓰여졌고 "1"이 바이너리 메모리 2에서의 비트 "i"에 쓰여졌다는 가정하에 계산된다. 바이너리 메모리 3 제한 컴퓨터(1512)에 도시된 바와 같이, 남은 호환가능한 레벨은 (010)이다. 바이너리 메모리 3 제한 컴퓨터(1512)는 바이너리 메모리 3, 위치 "i"가 "0"으로 고정됨을 결정한다. 이 제한 정보는 바이너리 메모리 3 워드 쓰기 프로세스에 입력된다.
일 실시예에서, 가상 쓰기 벡터 c를 계산하기 위해, c가 특정 고정된 위치 제한들을 충족시키도록 식 Hc = m을 해결하는 것이 필요하다. 이는 다수의 방법들에 의해 수행될 수 있는데, 이 방법들은 당업계에서 알려진 여러 방법들을 포함한다. 하나의 예시적인 실시예에서, 매트릭스 H는 불규칙(irregular) 저밀도 패리티 체크(low density parrity check(LDPC)) 코드의 패리티 체크 매트릭스를 계산함으로써 계산되고, 상기 쓰기 프로세스는 상기 벡터를 계산하기 위해 가우시안 소거법을 사용한다. 또 다른 예시적인 실시예에서, 매트릭스 H는 유한 알파벳으로부터 균일하게 도출된 랜덤 매트릭스를 계산함으로써 계산되고 상기 쓰기 프로세스는 상기 벡터를 계산하기 위해 가우시안 소거법을 사용한다. 또 다른 예시적인 실시예에서, 매트릭스 H는 루비 변환(Luby Transform, LT) 코드의 발생기 매트릭스의 전치(transpose)를 계산함으로써 계산되고, 상기 쓰기 프로세스는 가상 쓰기 벡터 "c"를 계산하기 위해 필링(peeling)을 사용한다. 또 다른 실시예에서, 매트릭스 H는 컨벌루션 코드(convolutional code)를 나타내고, 상기 인코딩 알고리즘은 가상 쓰기 벡터 "c"를 계산하기 위해 트렐리스(trellis) 기반의 비용 최소화(cost minimization)를 사용하며, 여기서 각각의 트렐리스 패쓰(trellis path)와 연관된 비용은 각각의 셀의 저항 레벨과 그 셀에 쓰여질 값의 함수이다. 또 다른 실시예에서, 매트릭스 H는 BCH 또는 리드-솔로몬 코드(Reed-Solomon code)와 같은 대수 코드(algebraic code)의 패리티 체크 매트릭스 또는 발생기 매트릭스를 계산함으로써 계산된다. 또 따른 예시적인 실시예에서, 상기 쓰기 프로세스는, 매트릭스 H와 c의 곱이 인코딩될 쓰기 벡터 m이 되도록, 가상 메모리에서 각각의 메모리 셀에 의해 취해질 수 있는 저항 값들의 범위에 의해 부과된(imposed) 각각의 성분 ci의 값에 대해 선형 제한들을 충족시키는 벡터 "c"를 발견하기 위해 선형 프로그램(linear program)을 해결한다.
도 16은 예시적인 실시예에 의해 구현될 수 있는 랜덤 바이너리 및 LDPC 코드들 및 가우시안 소거법을 사용하는 바이너리 쓰기 워드 컴퓨터들의 블록도들을 도시한다. "제i(ith) 바이너리 메모리"라는 용어는 가상 메모리들 중 하나를 일컫는다. 상기 제i 가상 메모리에서의 고정된 위치들은 대응하는 값들(v)과 함께 b로 표현된다. 이용되는 코드북은 H로 일컬어진다. 제i 바이너리 메시지 "m"는 제i 가상 메모리에 쓰여질 쓰기 데이터의 부분을 일컫는다.
도 17은 예시적인 실시예에 의해 구현될 수 있는, 루비 변환(Luby tranform, LT) 코드들을 사용하는 바이너리 쓰기 워드 컴퓨터, 및 선형 프로그래밍을 사용하는 비-바이너리 쓰기 워드 컴퓨터의 블록도들을 도시한다.
예시적인 실시예에서, 가상 쓰기 벡터(c) - 이는 가상 메모리 제한들을 충족시킴 - 는 다음과 같이 계산된다. 각각의 가상 메모리에 대해, 쓰기 프로세스 및 읽기 프로세스는 GHT = 0이 되도록 발생기 매트릭스 G 및 패리티 체크 매트릭스 H를 공유한다. 먼저 Hu = m이 되도록 벡터 u가 구해진다. 다음으로, 벡터 Gv+m이 가상 메모리 제한들(여기서 '+'는 모듈-2 덧셈(module-2 addition))을 나타냄)을 충족시키도록 벡터 v가 구해진다. 그런 다음 c는 c=Gv+m으로 계산된다. 예시적인 실시예에서, 매트릭스 G는, 상기 필링 알고리즘을 사용함으로써 벡터 v가 계산될 수 있도록 설계된 확률 분포(probability distribution)로부터 열들(columns)의 가중치(weight)를 선택함으로써 구성된다. 또 다른 예시적인 실시예에서, 매트릭스 G는 대수 코드의 패리티 체크 매트릭스 또는 발생기이다.
일반적으로, 상기 선택된 코드-매트릭스, 상기 벡터 m, 및 주어진 제한들에 대해 식 Hc = m이 해결될 수 없을 비-제로(non-zero) 확률이 있을 것이다. 도 18은 이 확률을 감소시키기 위해 예시적인 실시예에 의해 구현될 수 있는 연쇄 코딩(concatenated coding)을 사용하는 쓰기 워드 컴퓨터의 블록도를 도시한다. 이 예시적인 실시예에서, 각각의 가상 메모리에 대해, 두 개의 바이너리 매트릭스들 H1 및 H2는 쓰기 프로세스와 읽기 프로세스 사이에 공유된다. 주어진 가상 메모리에 대해, 쓰기 프로세스는 H1c1 = c2이고 H2c2는 메모리에 저장될 메시지와 같아지도록 벡터들 c1 및 c2를 구한다. 워드 c1은 메모리에 쓰여진다. 상기 읽기 프로세스는 H2H1c1을 계산함으로써 상기 메시지를 재구성한다. 그러한 연쇄 코딩은 적절한 가상 쓰기 벡터 c가 상기 메모리 제한들을 충족시키도록 구해질 수 없을 확률에서의 감소를 달성하기 위해 사용될 수 있고, 그로부터 상기 메시지는 되찾을 수 있다(recoverable).
또 다른 예시적인 실시예에서, 이 확률을 감소시키기 위해, 쓰기 프로세스와 읽기 프로세스는 다수의 H 매트릭스들을, 이들에 대한 미리결정된 순차적인 순서(sequential order)로 공유한다. 만약 상기 쓰기 프로세스에 의해 사용된 제1 H 매트릭스가 상기 메모리 이종성과 일치하는 벡터 c를 산출(yield)할 수 없다면, 쓰기 프로세스는 제2 H 매트릭스로써 재시도(retry)한다. 이는 상기 메모리 이종성과 일치하는 벡터 c가 계산될 때까지 계속된다. 상기 쓰기가 성공한 단계의 인덱스는 저장될 메타데이터의 일부가 된다.
도 19는 쓰기 프로세스 인코더가 매트릭스를 찾아내기 위해 미리 정의된 순서의 매트릭스들을 시도하는 과정을 도시하며, 이 매트릭스는 메시지를 인코딩하는 코드워드를 발생시키고 예시적인 실시예에 의해 구현될 수 있는 이종의 메모리 제한들을 충족시킨다. c를 생성하기 위해 사용된 매트릭스 인덱스는 메타데이터이고, 이 메타데이터는 앞서 기술된 바와 같이 저장될 수 있다. 상기 읽기 프로세스 디코더는 동일한 시퀀스들의 매트릭스들에 대한 접근을 가지며, 디코딩을 위해 어느 매트릭스를 사용할 것인지를 결정하기 위해 메타데이터 코드 인덱스를 사용한다.
엔트리들의 수 면에서 클 수 있는 다수의 코드-매트릭스들을 사용하는 것은, 공간 또는 시간상 복잡성 면에서 번거로울 수 있다. 이는 일련의 함수들을 적용함으로써 다수의 매트릭스들을 발생시킴에 의해 해결될 수 있는데, 상기 일련의 함수들은 하나의 매트릭스에 대해 슈도-랜덤(pseudo-random)일 수 있다. 도 20은 쓰기 프로세스 인코더가 예시적인 실시예에 의해 구현될 수 있는 도 19에 도시된 미리 정의된 순서의 매트릭스들을 발생시키기 위해 슈도-랜덤 함수 발생기 및 코드 매트릭스를 사용하는 프로세스를 도시한다. 상기 디코더는 동일한 슈도-랜덤 발생기를 공유한다. 사용될 수 있는 함수들의 일 예는 H의 열들(columns)을 순열로 배치(permute)하는 함수들이다. 그래서, 각각의 함수는, H의 열들의 서로 다른, 슈도-랜덤 열 순열(pseudo-random column permutation)이다. 이 실시예에서, 쓰기 프로세스와 읽기 프로세스는 H 매트릭스를 공유하며, 슈도-랜덤 또는 미리 결정된 순차적인 순서의 H 매트릭스의 열 순열들을 공유한다. 상기 쓰기 프로세스는 초기에 상기 H 매트릭스에 대한 상기 제1 열 순열에 의해 발생된 매트릭스를 사용한다. 만약 이것이 벡터 c - 이 벡터 c는 상기 메모리 이종성과 일치하지 않음 - 를 산출해 낸다면, 상기 쓰기 프로세스는 H 매트릭스에 대한 제2 열 순열에 의해 발생된 매트릭스로써 그 데이터를 다시 쓴다. 이는 상기 메모리 이종성과 일치하는 벡터 c가 계산될 때까지 계속된다. 상기 쓰기가 성공한 단계의 인덱스는 저장될 메타데이터의 일부가 된다.
예시적인 실시예에서, 각각의 메모리 셀은 동일한 수의 저항 레벨들(이 수를 n이라 함)을 지원하지만, 저항 레벨들의 범위는 셀과 함께 변한다. 이 경우, 상기 쓰기 프로세스는 1 모드(mod) n = d 가 되도록 상기 셀에 의해 지원되는 레벨 1을 계산함으로써 셀 i에서의 데이터 값 d(0<=d<=n-1)를 인코딩한다. 이 레벨은 상기 셀에 쓰여진다. 상기 읽기 프로세스는 d = 1 모드 n으로 그 데이터 값을 재구성한다.
예시적인 실시예에서, 상기 읽기 프로세스는 파괴적인 읽기(destructive read)를 수행함으로써 상기 셀들의 상태를 추가적으로 결정할 수 있다. 이것은 그것의 SET 및 RESET 레벨들에 대한 셀들의 블록 각각을 수행하는 단계, 적절한 프로그래밍 펄스를 사용하는 단계, 상기 데이터를 읽은 후, 상기 SET 및 RESET 저항 레벨들을 측정하는 단계를 포함한다. 이 단계들 뒤에는, 상기 데이터를 상기 셀들에 다시 쓰는 단계(rewriting)가 수행된다. 일 실시예에서, 상기 쓰기 프로세스는, 상기 셀 이종성과 일치하는 방법으로 데이터를 상기 메모리 셀들에 쓰기 위해 상기 저항 레벨들의 바이너리 분해(binary decomposition)를 사용한다. 상기 읽기 프로세스는 상기 쓰여진 데이터를 정확하게 해석하기 위해 상기 셀 상태들에 관한 그것의 지식을 사용한다.
도 21은 예시적인 실시예에 의해 구현될 수 있는, 읽기 프로세스와 쓰기 프로세스 둘 다가 각각의 셀에 의해 지원되는 저항 레벨들을 측정할 수 있을 경우, PCM 메모리에 데이터를 저장하기 위한 시스템의 블록도를 도시한다. 도 21에 도시된 시스템은 메모리 셀들의 블록들을 포함하는 이종의 PCM 메모리(2102), 메모리(2102)에 쓸 때 저항 레벨들을 결정하기 위한 저항 레벨 테스터(2104), 쓰기 데이터를 수신하고 메모리(2102)에 저장하기 위해 PCM 쓰기 워드를 발생시키는 인코더(2106), PCM 메모리(2102)로부터 PCM 읽기 워드를 수신하고 읽기 데이터를 발생시키기 위한 디코더(2112), 및 읽을 때 저항 레벨들을 결정하기 위한 저항 범위 테스터(2110)를 포함한다. PCM 메모리로의 예시적인 쓰기 프로세스(2108)는 저항 범위 테스터(2104) 및 인코더(2106)를 이용한다. PCM 메모리(2102)로의 예시적인 읽기 프로세스(2114)는 디코더(2112) 및 저항 범위 테스터(2110)를 이용한다. 예시적인 실시예에서, 저항 범위 테스터들(2104 및 2110)은 결합된다.
도 22는 읽기 프로세스와 쓰기 프로세스 둘 다 각각의 셀에 의해 지원되는 저항 레벨들을 측정할 수 있을 경우 PCM 메모리(2102)에 데이터를 쓰기 위한 예시적인 시스템의 블록도를 도시한다. 도 22는 예시적인 실시예에 의해 구현될 수 있는 인코더(2106)의 더욱 상세한 도면을 보여준다. 예시적인 인코더(2106)는 바이너리 메모리 제한 컴퓨터(2202), 쓰기 메시지 비트들 블록(2204), 데이터 바이너라이저(2208), 및 PCM 워드 라이터(2206)를 포함한다. 도 22의 시스템에 의해 구현될 수 있는 쓰기를 위한 예시적인 프로세스는 이종의 메모리 셀들의 블록에 대응하는 쓰기 어드레스 및 쓰기 데이터를 수신하는 단계를 포함한다. 상기 메모리 셀들의 물리적 특성들이 결정된다. 상기 쓰기 데이터는 다수의 부분 쓰기 데이터 벡터들로 분리되고, 다수의 부분 쓰기 데이터 벡터들 각각은 하나의 가상 메모리와 연관된다. 이는 각각의 가상 메모리에 대해 확인된 메모리 제한들에 기초하여 수행된다. 상기 가상 메모리들에 대해 다음의 단계들, 즉, 상기 가상 메모리에서 메모리 셀들을 기술하는 제한 벡터(constraint vector)를 발생시키는 단계(예를 들어, 바이너리 메모리 제한 컴퓨터(2202)에 의해 수행됨) - 상기 발생시키는 단계는 상기 메모리 셀들의 물리적 특성들, 상기 메모리 셀들의 블록에 대한 이전에 발생된 제한 벡터들, 및 상기 메모리 셀들의 블록에 대한 이전에 발생된 가상 쓰기 벡터들에 응답함 -; 및 상기 제한 벡터 및 상기 부분 쓰기 데이터에 응답하여 가상 쓰기 벡터를 계산하는 단계(예를 들어, 쓰기 메시지 비트들 블록(2204)에 의해 수행됨)가 수행된다. 상기 가상 쓰기 벡터는 단순히(simply) 상기 가상 메모리에 순서대로 상기 부분 쓰기 데이터의 비트들을 씀으로써 발생되고, 하나의 값으로 고정된 각각의 가상 메모리 셀을 스킵(skip)한다. 상기 가상 쓰기 벡터들은 PCM 워드 라이터(2206)에 의해 상기 메모리 셀들의 블록으로 출력되는 쓰기 워드에 결합된다.
도 23은 예시적인 실시예에 의해 구현될 수 있는, 읽기 프로세스와 쓰기 프로세스가 각각의 셀에 의해 지원되는 저항 레벨들을 측정할 수 있을 경우 PCM 메모리(2102)로부터 데이터를 읽기 위한 시스템의 블록도를 도시한다. 도 23은 예시적인 실시예에 의해 구현될 수 있는 예시적인 디코더(2112)의 더욱 상세한 도면을 보여준다. 예시적인 디코더(2202)는 PCM 워드 리더/라이터(2306), 데이터 바이너라이저(2304), 바이너리 메모리 제한 컴퓨터(2302), 읽기 메시지 비트 블록들(2308), 및 읽기 데이터 발생기(2310)를 포함한다. 도 23의 시스템에 의해 구현될 수 있는 읽기를 위한 하나의 예시적인 프로세스는 메모리 셀들의 블록으로부터 읽기 워드를 수신하는 단계(예를 들어, PCM 워드 리더/리라이터(2306)에 의해 수행됨), 및 상기 메모리 셀들의 물리적 특성들을 결정하는 단계(예를 들어, 저항 범위 테스터(2110)에 의해 수행됨)를 포함한다. 상기 읽기 워드는 상기 물리적 특성들에 기초하여 복수의 가상 읽기 벡터들로 분리된다(예를 들어, 바이너리 메모리 제한 컴퓨터(2302)에 의해 수행됨). 상기 가상 메모리들 각각에 대해 다음의 단계들, 즉, 상기 가상 메모리에서 메모리 셀들을 기술하는 제한 벡터를 발생시키는 단계 - 상기 발생시키는 단계는 상기 메모리 셀들의 물리적 특성들, 상기 메모리 셀들의 블록에 대한 이전에 발생된 제한 벡터들, 및 상기 메모리 셀들의 블록에 대한 이전에 발생된 가상 읽기 벡터들에 응답함 -; 상기 제한 벡터에 응답하여 부분 읽기 데이터 벡터를 발생시키는 단계(예를 들어, 읽기 메시지 비트 블록들(2308)에 의해 수행됨)가 수행된다. 상기 부분 읽기 벡터는 단순히 상기 가상 메모리로부터 차례대로 읽음으로써 발생되고, 하나의 값으로 고정된 각각의 가상 메모리 셀로부터 읽혀진 비트를 버린다. 상기 부분 읽기 데이터 벡터들은 읽기 데이터 발생기(2310)에 의해 읽기 데이터에 결합되고 상기 읽기 데이터는 출력된다.
예시적인 실시예에서, 각각의 셀은 레벨들의 서브세트(subset)를 갖는데, 이 레벨들의 서브세트는 쓰여질 수 있지만, 쓰기 시간 및 전력 면에서 비용이 증가된다. 하나의 예시적인 실시예에서, 상기 쓰기 프로세스는 도 1에 기술된 방법을 수행하지만, 만약 그 결과 벡터(c)가 다른 레벨들과 일치하지 않는다면 증가된 비용 레벨들을 사용한다. 또 다른 예시적인 실시예에서, 상기 쓰기 프로세스는 주어진 비용 제한에 대해 쓰기 위한 레벨들의 최적의 세트를 계산하고, 그런 다음, 이들 레벨들에 데이터를 쓰기 위해 도 1의 방법을 사용한다. 위의 두 실시예들에서, 상기 읽기 프로세스는 도 2의 방법을 사용한다.
예시적인 실시예에서, 상기 셀 레벨들은 잡음이 있고(noisy) 또한 이종(heterogeneous)이다. 당해 기술 분야에서 알려진 바와 같이, 잡음(noise)은 시간에 따른 메모리의 물리적 특성들에 대한 변화들을 일컫는다. 상기 쓰기 프로세스는 도 1에 기술된 셀 레벨들의 바이너리화(binarization)를 수행하는 바이너리 가상 메모리들의 세트를 채용할 수 있다. 계속해서, 상기 쓰기 프로세스는 각각의 가상 메모리에 대해 쓰기 위해 네스트된(nested) 코드들을 사용한다. 예시적인 실시예에서, 상기 쓰기 프로세스 및 읽기 프로세스는 HT = [H1T | H2T]가 되도록 매트릭스들 H1 및 H를 공유한다. 여기서 HT는 매트릭스 H의 전치(transpose)를 나타낸다. 상기 쓰기 프로세스는 H2c가 저장될 메시지이고, c가 상기 메모리의 이종성을 충족시키며, H1c가 0이도록, 벡터 c를 계산한다. 잡음이 있는 벡터 c'를 가정하면, 상기 읽기 프로세스는 c가 c'에 가깝도록(예를 들면, 해밍 거리(Hamming distance) 면에서) 그리고 H1c = 0이 되도록 벡터 c를 계산한다. 그런 다음 그것은 H2c로서 그 메시지를 재구성한다. 매트릭스들 H1 및 H2는 H가 상기 발생기 또는 BCH 또는 리드-솔로몬 코드(Reed-Solomon code)와 같은 대수 코드를 위한 패리티 체크 매트릭스가 되도록 할 수 있다.
도 24는 예시적인 실시예에 의해 구현될 수 있는 잡음이 있는 이종의 메모리에 데이터를 저장하기 위한 바이너리 워드 컴퓨터 및 바이너리 워드 디코더를 도시한다. 도 24에 도시된 디코더는 에러 교정을 수행하고, c를 회수(retrieve)하기 위해 매트릭스 H1을 사용한다. 그런 다음, 메시지 m은 m = H2c로 계산된다.
예시적인 실시예에서, 상기 쓰기 프로세스에 의해 메모리에 저장되기 위해 발생된 메타데이터는 매트릭스 H에 관한 부분 정보를 포함한다. 예로서, 상기 프로세스는 다수의 가능한 H 매트릭스들 중 하나를 사용하는 것을 선택하고, 상기 부분 정보는 상기 읽기 프로세스가 H 매트릭스들 중 어느 것이 상기 쓰기 프로세스에 의해 사용되었는지를 확인하도록 하는 데이터로 구성된다. 또 다른 예로서, 상기 부분 정보는 상기 수신기가 상기 쓰기 프로세스에 의해 사용된 H 매트릭스를 재구성하도록 하는 데이터로 구성된다(여기서 H 매트릭스는 읽기 프로세스와 쓰기 프로세스 둘 다에 의해 슈도-랜덤하게 발생됨).
예시적인 실시예에서, 정보를 저장하기 위해 사용된 상기 물리적 특성은 다차원적(multi-dimensional)이다. 예시적인 실시예에서, PCM 메모리 엘리먼트에 저장된 정보를 읽기 위해 복수의 전압 측정들(measurements)이 사용되고, 그래서 상기 셀 저항은 서로 다른 전압들에 대해 서로 다르다. 상기 다수의 전압 신호들에 걸쳐 결합된 셀 응답은 다차원적 값을 형성하며, 상기 다차원적 값이 정보를 저장하기 위해 사용된다. 상기 메모리는 각각의 차원(dimension)에서의 각각의 셀에 의해 지원되는 값들의 범위가 서로 다른 셀들에 대해 서로 다르다는 점에서 이종이다. 도 25 및 도 26은 이종의 다차원적 메모리 제한들이 가상 바이너리 메모리들의 세트에 대한 상응하는 1차원적 제한들로 분해(decompose)될 수 있는 방법에 관한 예시적인 실시예를 보여준다. 이 예에서, 도 25에서는 5 개의 셀들(2502)을 갖는 메모리 블록이 보여지고, 여기서 각각의 셀을 특징짓는 저항 값은 2 차원적이다. 셀 1은 차원 1에서의 3 개의 레벨들 및 차원 2에서의 하나의 레벨을 지원한다. 셀 2는 차원 1에서의 하나의 레벨 및 차원 2에서의 2 개의 레벨들을 지원한다. 셀 3은 차원 1에서의 2 개의 레벨들 및 차원 2에서의 2 개의 레벨들을 지원한다. 셀 4는 차원 1에서의 4 개의 레벨들 및 차원 2에서의 2 개의 레벨들을 지원한다. 셀 5는 차원 1에서의 4 개의 레벨들 및 차원 2에서의 하나의 레벨을 지원한다. 다차원적 값들의 전체 범위는 모든 2D 값들을 커버하는 2차원적 값들의 배치(ordering)를 선택함으로써 상응하는 1차원적 범위로 변환될 수 있다. 예시적인 배치는 표 2504에 보여진다. 그런 다음 각각의 셀은 레벨들의 상응하는 1D 범위로부터 레벨들의 세트를 지원한다. 1D 값들로의 상기 변환이 표 2504에 기술된 바에 따를 경우, 표 2506은 이종의 메모리 블록(2502)에 대해 각각의 셀에 의해 지원되는 레벨들을 보여준다. 하나의 세트에 의해 지원되는 1D 레벨들의 세트는 인접하지 않을 수도 있고 또는 인접할 수도 있다는 것을 주목하자. 예를 들어, 셀 1은 1D 레벨들 0, 2 및 4를 지원하는데, 이는 인접하지 않은 레벨들의 세트이다. 도 26에서는 다차원적 값들을 갖는 이종의 메모리가 이들 가상 메모리들의 가상 셀들에 대해 계산된 제한들을 갖는 가상 바이너리 메모리들로 분해될 수 있는 방법이 보여진다. 총 8 개의 1D 레벨들이 있으므로, 3 개의 가상 바이너리 메모리들이 필요하다. 바이너리 메모리 1(2602)에서의 가상 셀들 1 및 5는 0으로 고정되도록 제한된다. 바이너리 메모리 2(2604)에서의 가상 셀 2는 0으로 고정되도록 제한되고, 바이너리 메모리 2에서의 다른 셀들은 제한되지 않는다. 바이너리 메모리 3(2606)에서, 가상 셀들 1, 2 및 3은 여러가지 제한들을 갖는다. 일단 이들 제한들이 계산되면, 이 메모리에서 효과적으로 정보를 저장하기 위해 전술한 기술들이 사용된다.
예시적인 실시예에서, 상기 셀들의 물리적 특성들에 관한 정보는 단지 부분적으로만 이용가능하다. 예를 들어, 만약 단지 모든 셀들의 서브세트의 물리적 특성들이 이용가능하다면, 이것은 사실일 수 있다. 이 경우 위에서 기술된 기술들은, 상기 메모리에 쓰여진 데이터 벡터가 알려진 부분 셀 정보로부터 유도된 제한들을 충족시키도록 사용된다.
예시적인 실시예에서, 상기 메모리 셀 이종성에 의해 부과된 제한들의 세트는, 주어진 셀의 주어진 비트플레인에 또는 주어진 셀에 저장될 수 있는 문자들(letters)(바이너리 또는 비-바이너리)에 대한 제한의 형태로 나타나고, 그래서 이 제한은 서로 다른 셀들에 걸쳐 그리고 서로 다른 비트플레인들에 걸쳐 다양하다.
상기 기술들은 또한 상기 메모리 엘리먼트들이 정보를 저장하기 위해 저항 이외의 물리적 특성을 사용할 경우, 그리고 상기 물리적 특성이 서로 다른 메모리 엘리먼트들에 걸쳐 다양성을 나타낼 경우에도 사용될 수 있다. 이들 기술들은 그것들이 일부 또는 모든 이종의 셀들을 갖는 메모리들에 효율적인 데이터 저장을 허용하므로, 메모리 칩들의 수율을 개선하기 위해서 또한 사용될 수 있다. 본 발명을 이용하지 않는 시스템에서는, 메모리 레벨들의 특정의 미리 규정된 범위를 지원하지 않는 셀들의 특정 부분 이상을 갖는 어떤 메모리 칩은 버려질 필요가 있다. 이는 수율을 저하시킬 수 있다. 그러나, 본 명세서에 기술된 기술들을 사용하면, 메모리 셀들의 미리 규정된 범위를 지원하지 않는 셀들은 여전히 정보를 저장하기 위해 사용될 수 있다. 그래서, 버려지는 칩들이 더 적을 수 있고, 그에 따라 수율을 향상시킬 수 있다.
기술적인 효과 및 이점은, 셀 당 저장될 수 있는 데이터량 및 종류에 영향을 주는 어떤 종류의 이종성에 의해 특징지어지는 엘리먼트들을 가진 어떤 메모리에 정보를 저장할 수 있는 가능성을 포함한다. 이는 부분적으로 결함이 있는 메모리에 데이터를 저장하고자 한 이전의 접근법들이 비해 향상된 적응성을 제공한다. 예시적인 실시예들은 저장될 수 있는 정보량을 증가시킴으로써 매우 효과적인 메모리 스토리지를 가능하게 한다. 예시적인 실시예들은 또한 완벽하지 않은, 다양한 물리적 특성들을 보이는 셀들을 갖는 메모리들을 포함하는 칩들을 버리지 않고, 그러한 메모리들에 데이터를 효과적으로 저장할 수 있도록 함으로써 메모리 수율을 증가시키기 위해 이용될 수 있다.
본 명세서에 사용된 용어는 발명의 범위를 한정하려는 의도가 아니라 단지 특정 실시예들을 설명하기 위한 목적으로 사용되었다. 본 명세서에서 사용되는 바와 같이, 단수 형태인 "한", "일" 및 "하나의" 라는 용어들은 그 맥락에서 명확하게 그렇지 않은 것으로 나타내고 있지 않다면, 복수의 형태들을 또한 포함하는 것으로 의도된다. 또한 "포함하다" 및/또는 "포함하는" 이라는 용어들은 본 명세서에서 사용될 때, 언급된 특성들, 정수들, 단계들, 동작들, 구성요소들, 및/또는 컴포넌트들의 존재를 규정하지만, 하나 또는 그 이상의 다른 특성들, 정수들, 단계들, 동작들, 구성요소들, 성분들 및/또는 이것들의 그룹들을 배제하는 것은 아니라는 것이 이해되어야 한다.
이하의 청구항들에서의 대응하는 구조들, 재료들, 동작들, 및 모든 수단들 또는 단계 플러스 기능 구성요소들(step plus function elements)은 어떤 구조, 재료, 또는 구체적으로 청구되는 다른 청구되는 구성요소들과 함께 그 기능을 수행하기 위한 구조, 재료, 또는 동작을 포함하는 것으로 의도된다. 본 발명의 설명은 예시 및 설명을 위해서 제공되지만, 개시된 형태로 본 발명을 빠짐없이 총 망라하거나 본 발명의 범위를 제한하려는 의도는 아니다. 본 발명의 영역 및 사상을 벗어남이 없이, 많은 개조들 및 변형들이 있음은 당해 기술 분야에서 통상의 기술을 가진 자에게는 자명할 것이다. 발명의 원리들 및 실용적인 어플리케이션을 가장 잘 설명하기 위해, 그리고 당해 기술 분야에서 통상의 기술을 가진 자들이 본 발명을 이해할 수 있도록 하기 위해 고려되는 특정 사용에 적합한 다양한 변형들을 갖는 다양한 실시예들에 대해 실시예가 선택 및 기술되었다.
본 명세서에 기술된 흐름도들은 단지 하나의 예이다. 발명의 사상을 벗어남이 없이 본 명세서에 기술된 이 흐름드 또는 단계들(또는 동작들)에 대한 다양한 변경들이 있을 수 있다. 예를 들어, 상기 단계들은 다른 순서일 수도 있고, 또는 다른 단계들이 추가될 수도 있으며, 단계들이 삭제 또는 변경될 수도 있다. 이들 변경들 모두는 청구되는 발명의 일부로 간주된다.
위에서 기술된 바와 같이, 발명의 실시예들은 컴퓨터로 구현된 프로세스들(computer-implemented processes) 및 그러한 프로세스들을 실시하기 위한 장치들의 형태로 구체화될 수 있다. 발명의 실시예들은 또한 실체적인 매체(예를 들어, 플로피 디스켓, CD-ROM, 하드 드라이브, 또는 기타 컴퓨터 판독가능 스토리지 매체 )로 구체화된 명령들을 포함하는 컴퓨터 프로그램 코드의 형태로 구체화될 수 있는데, 여기서 상기 컴퓨터 프로그램 코드는 컴퓨터 내로 로드되어 실행될 때, 상기 컴퓨터가 본 발명을 실행하기 위한 장치가 된다. 본 발명은 또한 예를 들어, 스토리지 매체에 저장되거나, 컴퓨터 내로 로드되고 및/또는 컴퓨터에 의해 실행되거나, 어떤 전송 매체를 통해(예를 들어, 전기 배선 또는 케이블링 상으로, 광 섬유를 통해, 또는 전자기 방사를 통해) 전송되거나 간에, 컴퓨터 프로그램 코드의 형태로 구체화될 수 있는데, 여기서 상기 컴퓨터 프로그램 코드는 컴퓨터 내에 로드되어 실행될 때, 상기 컴퓨터가 본 발명을 실행하기 위한 장치가 된다. 범용 마이크로프로세서(general-purpose microprocessor) 상에서 구현될 경우, 상기 컴퓨터 프로그램 코드 세그먼트들은 상기 마이크로프로세서가 구체적인 로직 회로들을 만들도록 구성한다.
비록 본 발명에 대한 바람직한 실시예들이 위에서 기술되었으나, 당해 기술 분야에서 숙련된 자들이라면, 현재 그리고 장차, 이하의 청구항들의 범위 내에 들어오는 개선들 및 향상들을 이룰 수 있다는 것이 이해될 것이다. 이들 청구항들은 먼저 기술되는 발명에 대한 적절한 보호를 하는 것으로 해석되어야 한다.

Claims (24)

  1. 데이터를 저장하는 방법에 있어서,
    메모리에 쓰기를 하는 쓰기 프로세스; 및
    상기 메모리로부터 읽기를 하는 읽기 프로세스를 포함하되,
    상기 메모리에서 메모리 셀들의 물리적 특성들은 데이터 레벨들의 서로 다른 세트들을 지원하고,
    상기 쓰기 프로세스는 상기 메모리에 쓰기를 할 때 상기 데이터 레벨들의 서로 다른 세트들을 고려하며,
    상기 읽기 프로세스는 먼저 상기 메모리에서 데이터를 획득하고, 그 다음에 상기 데이터를 해석하기 위한 방법을 결정하는,
    데이터 저장 방법.
  2. 청구항 1에 있어서, 상기 쓰기 프로세스는, 적어도 하나의 코드북을 채용하되,
    상기 메모리에서 메모리 셀들의 블록에 쓰여질 쓰기 메시지를 수신하는 단계;
    상기 블록에서 메모리 셀들의 물리적 특성들을 결정하는 단계;
    상기 물리적 특성들에 응답하여 상기 메모리의 블록과 연관된 가상 메모리들을 확인하는 단계;
    상기 가상 메모리들 각각에 대해,
    상기 가상 메모리에서 가상 셀들을 기술(describe)하는 제한 벡터(constraint vector)를 상기 메모리 셀들의 물리적 특성들, 이전에(previously) 발생된 제한 벡터들, 및 이전에 발생된 가상 쓰기 벡터들에 응답하여 발생시키는 단계와; 코드북, 상기 제한 벡터 및 상기 쓰기 메시지에 응답하여 가상 쓰기 벡터를 계산하는 단계를,
    수행하는 단계;
    상기 가상 쓰기 벡터들을 쓰기 워드(write word)에 결합시키는 단계; 및
    상기 쓰기 워드를 상기 메모리 셀들의 블록으로 출력하는 단계를 포함하는,
    데이터 저장 방법.
  3. 청구항 2에 있어서, 상기 수행하는 단계는,
    상기 제한 벡터의 내용들에 기초하여 그리고 상기 메모리 셀들의 블록에서의 메모리 셀들의 수에 기초하여, 복수의 코드북들로부터 하나의 코드북을 선택하는 단계, 및 상기 가상 쓰기 벡터를 계산하기 위해 이용된 코드북을 확인하기 위해 코드북 확인자(codebook identifier)를 저장하는 단계를 더 포함하는,
    데이터 저장 방법.
  4. 청구항 2에 있어서, 상기 제한 벡터들은 상기 가상 셀들에 대한 지원 레벨들(supported levels) 및 위치들을 기술하는,
    데이터 저장 방법.
  5. 청구항 2에 있어서, 상기 쓰기 메시지는, 각각이 가상 메모리에 대응하는, 부분 쓰기 벡터들(partial write vectors)로 분리되고, 코드북은 가상 쓰기 벡터들에 신드롬들(syndromes)을 부여(assign)하는 선형 코드(linear code)이고, 상기 계산하는 단계는 상기 가상 메모리에 대해 발생된 제한 벡터와 일치하는 가상 쓰기 벡터를 계산하는 단계를 포함하되, 상기 가상 쓰기 벡터의 신드롬은 상기 가상 메모리에 대응하는 부분 쓰기 벡터인,
    데이터 저장 방법.
  6. 청구항 2에 있어서, 상기 계산하는 단계는 가우시안 소거법, 필링(peeling), 및 트렐리스 기반의 디코딩(trellis based decoding) 중 하나 또는 그 이상을 포함하고, 하나의 코드북은 랜덤 바이너리 매트릭스, 바이너리 저밀도 패리티 체크(low density parity check, LDPC) 매트릭스, 바이너리 루비 변환(Luby transform, LT) 매트릭스, 대수 코드(algebraic code), 및 컨벌루션 코드(convolutional code) 중 하나 또는 그 이상에 의해 정의되는,
    데이터 저장 방법.
  7. 청구항 2에 있어서, 상기 메모리 셀들의 블록은 상 변화 메모리(phase change memory, PCM)이고, 상기 물리적 특성들은 각각의 메모리 셀에 대한 저항 레벨 범위를 포함하는,
    데이터 저장 방법.
  8. 청구항 2에 있어서, 상기 메모리 셀들의 블록은 PCM이고, 상기 물리적 특성들은 각각의 메모리 셀에 대한 저항 레벨 범위를 포함하고, 상기 제한 벡터들은 상기 가상 메모리 셀들에 대한 지원 레벨들 및 위치들을 기술하고, 상기 쓰기 워드는 각각의 PCM 메모리 셀에 쓰여질 저항 레벨들을 포함하는,
    데이터 저장 방법.
  9. 청구항 2에 있어서, 하나의 코드북은 매트릭스에 의해 표현되고, 선형 프로그래밍은 상기 가상 쓰기 벡터를 계산하기 위해 이용되는,
    데이터 저장 방법.
  10. 청구항 2에 있어서, 하나의 코드북은 연쇄 코드(concatenated code)로써 표현되는,
    데이터 저장 방법.
  11. 청구항 2에 있어서, 상기 메모리 셀들의 블록은 플래쉬 메모리이고, 상기 물리적 특성들은 각각의 메모리 셀의 스레쉬홀드 전압 특성을 포함하는,
    데이터 저장 방법.
  12. 청구항 2에 있어서, 상기 계산하는 단계는 실패(fail)할 수 있고, 상기 가상 쓰기 벡터는 상기 계산하는 단계가 실패하지 않는 코드북이 찾아질 때까지 하나 또는 그 이상의 코드북들을 적용함으로써 계산되는,
    데이터 저장 방법.
  13. 청구항 2에 있어서, 상기 메모리 셀들은 잡음에 영향을 받으며(subject to noise), 상기 계산하는 단계는 상기 가상 쓰기 벡터가 추가로 제2 코드북에 속하도록 상기 가상 쓰기 벡터를 선택하는 단계를 포함하는,
    데이터 저장 방법.
  14. 청구항 2에 있어서, 상기 물리적 특성들은 다차원 레벨들을 포함하고, 상기 쓰기 프로세스는 모든 다차원 레벨들을 커버(cover)하는 배치(ordering)를 사용함으로써 상기 다차원 레벨들을 1 차원 레벨들로 변환하는 단계를 더 포함하는,
    데이터 저장 방법.
  15. 메모리로부터 읽기를 하는 방법에 있어서,
    메모리 셀들의 블록으로부터 읽기 워드를 수신하는 단계 - 상기 블록에서의 메모리 셀들의 물리적 특성들은 데이터 레벨들의 서로 다른 세트들을 지원함 -;
    상기 읽기 워드를 복수의 가상 읽기 벡터들로 분리하는 단계;
    상기 가상 읽기 벡터들 각각에 대해,
    상기 가상 읽기 벡터를 발생시키기 위해 이용된 코드북을 확인하는 단계와; 상기 가상 읽기 벡터에 상기 코드북을 표현하는 매트릭스를 곱하는 것을 포함하는 부분 읽기 데이터 벡터를 발생시키는 단계를,
    수행하는 단계;
    상기 부분 읽기 데이터 벡터들을 읽기 메시지에 결합시키는 단계; 및
    상기 읽기 메시지를 출력하는 단계를 포함하는,
    메모리로부터 읽기를 하는 방법.
  16. 청구항 15에 있어서, 상기 메모리 셀들의 블록은 상 변화 메모리(phase change memory, PCM)이고, 상기 물리적 특성들은 각각의 메모리 셀에 대한 저항 레벨 범위를 포함하는,
    메모리로부터 읽기를 하는 방법.
  17. 청구항 15에 있어서, 상기 메모리 셀들은 잡음이 있고, 상기 수행하는 단계는 상기 잡음을 보상하기 위해 상기 발생에 의해 이용되는 제2 코드북을 확인하는 단계를 포함하는,
    메모리로부터 읽기를 하는 방법.
  18. 메모리 시스템에 있어서,
    메모리 셀들의 블록을 포함하는 메모리 - 상기 메모리 셀들의 물리적 특성들은 서로 다른 데이터 레벨들을 지원함 -;
    상기 메모리 셀들의 물리적 특성들을 결정하는 테스터;
    상기 메모리 및 상기 테스터에 연결된 인코더 - 상기 인코더는 적어도 하나의 코드북을 채용함 - 를 포함하되,
    상기 메모리 셀들의 블록에 쓰여질 쓰기 메시지를 수신하는 단계;
    상기 물리적 특성들에 응답하여 상기 메모리 셀들의 블록과 연관된 가상 메모리들을 확인하는 단계;
    상기 가상 메모리들 각각에 대해,
    상기 가상 메모리에서 가상 셀들을 기술(describe)하는 제한 벡터(constraint vector)를 상기 물리적 메모리 셀들의 물리적 특성들, 이전에 발생된 제한 벡터들, 및 이전에 발생된 가상 쓰기 벡터들에 응답하여 발생시키는 단계와; 코드북, 상기 제한 벡터 및 상기 쓰기 메시지에 응답하여 가상 쓰기 벡터를 계산하는 단계를,
    수행하는 단계;
    상기 가상 쓰기 벡터들을 쓰기 워드에 결합시키는 단계; 및
    상기 쓰기 워드를 상기 메모리 셀들의 블록에 출력하는 단계를 실행하는 것을 포함하는,
    메모리 시스템.
  19. 청구항 18에 있어서, 상기 메모리 시스템은 하나의 스토리지 위치를 더 포함하며, 상기 가상 메모리들 각각에 대해 수행하는 단계는,
    상기 제한 벡터의 내용들 및 상기 메모리 셀들의 블록에서의 메모리 셀들의 수에 기초하여 복수의 코드북들로부터 상기 코드북을 선택하는 단계; 및
    상기 가상 쓰기 벡터를 계산하기 위해 이용된 코드북을 확인하기 위해 상기 스토리지 위치에 코드북 확인자(codebook identifier)를 저장하는 단계를 더 포함하는,
    메모리 시스템.
  20. 청구항 18에 있어서, 상기 메모리에 연결된 디코더를 더 포함하되,
    상기 메모리에서 메모리 셀들의 제2 블록으로부터 읽기 워드를 수신하는 단계;
    상기 읽기 워드를 복수의 가상 읽기 벡터들로 분리하는 단계;
    상기 가상 읽기 벡터들 각각에 대해,
    상기 가상 읽기 벡터를 발생시키기 위해 이용된 코드북을 확인하는 단계와; 상기 가상 벡터에 상기 확인된 코드북을 표현하는 매트릭스를 곱하는 것을 포함하는, 부분 읽기 데이터 벡터를 발생시키는 단계를,
    수행하는 단계;
    상기 부분 읽기 데이터 벡터들을 읽기 메시지에 결합시키는 단계; 및
    상기 읽기 메시지를 출력하는 단계를 실행하는 것을 포함하는,
    메모리 시스템.
  21. 이종의 메모리에 쓰기를 하는 방법에 있어서,
    쓰기 메시지 및 메모리 셀들의 블록에 대응하는 쓰기 어드레스를 수신하는 단계 - 상기 메모리 셀들 중 적어도 두 개는 서로 다른 데이터 레벨들을 지원함 -;
    상기 메모리 셀들의 물리적 특성들을 결정하는 단계;
    상기 물리적 특성들에 응답하여 상기 메모리 셀들의 블록과 연관된 가상 메모리들을 확인하는 단계;
    상기 가상 메모리들 각각에 대해,
    상기 가상 메모리에서 가상 셀들을 기술하는 제한 벡터(constraint vector)를 상기 물리적 메모리 셀들의 물리적 특성들, 이전에 발생된 제한 벡터들, 및 이전에 발생된 가상 쓰기 벡터들에 응답하여 발생시키는 단계와; 상기 제한 벡터 및 상기 쓰기 메시지에 응답하여, 상기 쓰기 메시지를 비트 단위(bit by bit)로, 순서대로, 상기 가상 메모리에 쓰는 것과, 상기 제한 벡터에 의해 표시된 것에 따라 특정 값으로 고정(stuck)된 것으로 알려진 위치들을 스킵(skip)하는 것을 포함하는, 가상 쓰기 벡터를 계산하는 단계를,
    수행하는 단계;
    상기 가상 쓰기 벡터들을 쓰기 워드에 결합시키는 단계; 및
    상기 쓰기 워드를 상기 메모리 셀들의 블록에 출력하는 단계를 포함하는,
    이종의 메모리에 쓰기를 하는 방법.
  22. 청구항 21에 있어서, 상기 메모리 셀들의 블록은 PCM이고, 상기 물리적 특성들은 각각의 메모리 셀에 대한 저항 레벨 범위를 포함하는,
    이종의 메모리에 쓰기를 하는 방법.
  23. 이종의 메모리로부터 읽기를 하는 방법에 있어서,
    메모리 셀들의 블록으로부터 읽기 워드를 수신하는 단계 - 상기 메모리 셀들 중 적어도 두 개는 서로 다른 데이터 레벨들을 지원함 -;
    상기 메모리 셀들의 물리적 특성들을 결정하는 단계;
    상기 물리적 특성들에 응답하여 상기 메모리 셀들의 블록과 연관된 가상 메모리들을 확인하는 단계;
    상기 읽기 워드를 복수의 가상 읽기 벡터들로 분리하는 단계 - 상기 분리하는 단계는 상기 가상 메모리들에 응답함 -;
    상기 가상 읽기 벡터들 각각에 대해,
    상기 가상 메모리에서 가상 셀들을 기술(describe)하는 제한 벡터(constraint vector)를 상기 물리적 메모리 셀들의 물리적 특성들, 이전에 발생된 제한 벡터들, 및 이전에 발생된 부분 읽기 벡터들에 응답하여 발생시키는 단계와; 상기 제한 벡터 및 상기 가상 읽기 벡터에 응답하여, 상기 가상 읽기 벡터를, 비트 단위(bit by bit)로, 순서대로, 읽는 것과 상기 제한 벡터에 의해 표시된 것에 따라 고정(stuck)된 것으로 알려진 비트들을 버리는 것을 포함하는, 부분 읽기 데이터 벡터를 발생시키는 단계를,
    수행하는 단계;
    상기 부분 읽기 데이터 벡터들을 읽기 메시지에 결합시키는 단계; 및
    상기 읽기 메시지를 출력하는 단계를 포함하는,
    이종의 메모리로부터 읽기를 하는 방법.
  24. 청구항 23에 있어서, 상기 메모리 셀들의 블록은 PCM이고, 상기 물리적 특성들은 각각의 메모리 셀에 대한 저항 레벨 범위를 포함하는,
    이종의 메모리로부터 읽기를 하는 방법.
KR1020100035224A 2009-04-30 2010-04-16 증가된 용량의 이종의 스토리지 엘리먼트들 KR101264476B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/433,157 2009-04-30
US12/433,157 US8331168B2 (en) 2009-04-30 2009-04-30 Increased capacity heterogeneous storage elements

Publications (2)

Publication Number Publication Date
KR20100119502A true KR20100119502A (ko) 2010-11-09
KR101264476B1 KR101264476B1 (ko) 2013-05-14

Family

ID=43030244

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020100035224A KR101264476B1 (ko) 2009-04-30 2010-04-16 증가된 용량의 이종의 스토리지 엘리먼트들

Country Status (4)

Country Link
US (3) US8331168B2 (ko)
JP (1) JP5464703B2 (ko)
KR (1) KR101264476B1 (ko)
CN (1) CN101944067B (ko)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8850292B2 (en) 2011-11-24 2014-09-30 Samsung Electronics Co., Ltd. Flash memory system and read method in flash memory system
KR20150043127A (ko) * 2013-10-14 2015-04-22 삼성전자주식회사 메모리 시스템에서의 코딩 방법 및 디코딩 방법
KR20150060019A (ko) * 2013-11-25 2015-06-03 삼성전자주식회사 메모리 시스템에서 데이터를 인코딩 및 디코딩하기 위한 방법 및 장치

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5556189B2 (ja) * 2010-01-20 2014-07-23 ソニー株式会社 記憶装置およびデータの書込み方法
US8352839B2 (en) * 2010-06-11 2013-01-08 International Business Machines Corporation Encoding data into constrained memory
US9128869B2 (en) * 2011-09-29 2015-09-08 Micron Technology, Inc. Systems and methods involving managing a problematic memory cell
US8996955B2 (en) 2011-11-16 2015-03-31 HGST Netherlands B.V. Techniques for storing data in stuck and unstable memory cells
US8732560B2 (en) * 2012-05-08 2014-05-20 Infineon Technologies Ag Method and device for correction of ternary stored binary data
CN102902629B (zh) * 2012-06-20 2016-06-22 华为技术有限公司 存储空间映射方法及装置
US9070483B2 (en) 2012-10-10 2015-06-30 HGST Netherlands B.V. Encoding and decoding redundant bits to accommodate memory cells having stuck-at faults
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
US8943388B2 (en) * 2012-12-12 2015-01-27 HGST Netherlands B.V. Techniques for encoding and decoding using a combinatorial number system
US9324438B2 (en) 2013-08-05 2016-04-26 Jonker Llc Method of operating incrementally programmable non-volatile memory
US20150085648A1 (en) * 2013-09-24 2015-03-26 Douglas Leith Congestion control in data networks
US11783898B2 (en) 2014-09-18 2023-10-10 Jonker Llc Ephemeral storage elements, circuits, and systems
US10061738B2 (en) 2014-09-30 2018-08-28 Jonker Llc Ephemeral peripheral device
US10839086B2 (en) 2014-09-30 2020-11-17 Jonker Llc Method of operating ephemeral peripheral device
US10115467B2 (en) 2014-09-30 2018-10-30 Jonker Llc One time accessible (OTA) non-volatile memory
CN108345428B (zh) * 2017-01-22 2021-08-31 厦门旌存半导体技术有限公司 控制密集型控制系统及其方法
US10236909B2 (en) * 2017-03-31 2019-03-19 Sandisk Technologies Llc Bit-order modification for different memory areas of a storage device
US10230395B2 (en) * 2017-03-31 2019-03-12 Sandisk Technologies Llc Determining codebooks for different memory areas of a storage device
US10355712B2 (en) * 2017-03-31 2019-07-16 Sandisk Technologies Llc Use of multiple codebooks for programming data in different memory areas of a storage device
US10567116B2 (en) * 2017-05-12 2020-02-18 Mediatek Inc. Wireless communication using codebooks from a QC-LDPC code for shorter processing latency and improved decoder throughput efficiency
CN107895191B (zh) 2017-10-30 2022-02-22 上海寒武纪信息科技有限公司 一种信息处理方法及相关产品
US20210133854A1 (en) 2018-09-13 2021-05-06 Shanghai Cambricon Information Technology Co., Ltd. Information processing method and terminal device
CN109658867A (zh) * 2018-12-10 2019-04-19 北京欧徕德微电子技术有限公司 数据读写方法及其装置
CN109841242A (zh) * 2019-01-08 2019-06-04 华中科技大学 一种基于相变存储器实现二进制并行加法的方法及系统
US20200364047A1 (en) * 2019-05-16 2020-11-19 Facebook, Inc. High throughput neural network operations using inter-layer memory layout transformation
CN111862885B (zh) * 2020-07-23 2021-12-24 大连集思特科技有限公司 一种内封ic的双向数据传输led控制方法、系统及存储介质
CN112817538B (zh) * 2021-02-22 2022-08-30 腾讯科技(深圳)有限公司 数据处理的方法、装置、设备和存储介质

Family Cites Families (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS51138335A (en) * 1975-05-26 1976-11-29 Hitachi Ltd Control system for control memory
JPS61214299A (ja) * 1985-03-20 1986-09-24 Toshiba Corp 読出し専用メモリ
US5596522A (en) * 1991-01-18 1997-01-21 Energy Conversion Devices, Inc. Homogeneous compositions of microcrystalline semiconductor material, semiconductor devices and directly overwritable memory elements fabricated therefrom, and arrays fabricated from the memory elements
US5278793A (en) * 1992-02-25 1994-01-11 Yeh Tsuei Chi Memory defect masking device
US5572470A (en) * 1995-05-10 1996-11-05 Sgs-Thomson Microelectronics, Inc. Apparatus and method for mapping a redundant memory column to a defective memory column
US6857099B1 (en) * 1996-09-18 2005-02-15 Nippon Steel Corporation Multilevel semiconductor memory, write/read method thereto/therefrom and storage medium storing write/read program
US5933852A (en) * 1996-11-07 1999-08-03 Micron Electronics, Inc. System and method for accelerated remapping of defective memory locations
US6473332B1 (en) * 2001-04-04 2002-10-29 The University Of Houston System Electrically variable multi-state resistance computing
JP2003022687A (ja) * 2001-07-09 2003-01-24 Mitsubishi Electric Corp 半導体記憶装置
JP2003022693A (ja) * 2001-07-09 2003-01-24 Mitsubishi Electric Corp 半導体メモリ
US6809362B2 (en) * 2002-02-20 2004-10-26 Micron Technology, Inc. Multiple data state memory cell
US6831856B2 (en) 2002-09-23 2004-12-14 Ovonyx, Inc. Method of data storage using only amorphous phase of electrically programmable phase-change memory element
JP4187197B2 (ja) * 2002-11-07 2008-11-26 シャープ株式会社 半導体メモリ装置の制御方法
JP4205938B2 (ja) * 2002-12-05 2009-01-07 シャープ株式会社 不揮発性メモリ装置
US6839275B2 (en) * 2003-06-04 2005-01-04 Hewlett-Packard Development Company, L.P. Memory system having control circuit configured to receive data, provide encoded received data to match a fault pattern in the array of memory cells
JP2005078721A (ja) * 2003-09-01 2005-03-24 Nippon Telegr & Teleph Corp <Ntt> 誤り訂正方法およびメモリ回路
US7453715B2 (en) * 2005-03-30 2008-11-18 Ovonyx, Inc. Reading a phase change memory
EP2249351B1 (en) * 2005-06-03 2013-05-01 STMicroelectronics Srl Method for multilevel programming of phase change memory cells using a percolation algorithm
JP2006351061A (ja) * 2005-06-14 2006-12-28 Matsushita Electric Ind Co Ltd メモリ回路
KR100732628B1 (ko) * 2005-07-28 2007-06-27 삼성전자주식회사 멀티-비트 데이터 및 싱글-비트 데이터를 저장하는 플래시메모리 장치
KR100855467B1 (ko) * 2006-09-27 2008-09-01 삼성전자주식회사 이종 셀 타입을 지원하는 비휘발성 메모리를 위한 맵핑장치 및 방법
JP2008108297A (ja) * 2006-10-23 2008-05-08 Toshiba Corp 不揮発性半導体記憶装置
CN101211252B (zh) * 2006-12-26 2012-05-23 劲永国际股份有限公司 存储器储存装置
JP2008299918A (ja) * 2007-05-29 2008-12-11 Toshiba Microelectronics Corp 不揮発性半導体記憶装置及びその不良ブロック置き換え方法
KR101308549B1 (ko) * 2007-07-12 2013-09-13 삼성전자주식회사 멀티-레벨 상변환 메모리 장치 및 그것의 쓰기 방법
KR101261008B1 (ko) * 2007-08-14 2013-05-06 삼성전자주식회사 3-레벨 비휘발성 메모리 셀을 포함하는 비휘발성 메모리장치의 구동 방법 및 그 방법을 사용하는 비휘발성 메모리장치
US8095735B2 (en) * 2008-08-05 2012-01-10 Convey Computer Memory interleave for heterogeneous computing
JP2009129477A (ja) * 2007-11-20 2009-06-11 Toshiba Corp 不揮発性半導体記憶装置
US8203872B2 (en) * 2008-02-26 2012-06-19 Ovonyx, Inc. Method and apparatus for accessing a multi-mode programmable resistance memory
US8356159B2 (en) * 2008-08-15 2013-01-15 Apple Inc. Break, pre-break, and remaining instructions for processing vectors
US8089805B2 (en) * 2008-11-20 2012-01-03 Micron Technology, Inc. Two-part programming methods and memories
US8839076B2 (en) * 2011-03-31 2014-09-16 International Business Machines Corporation Encoding a data word for writing the encoded data word in a multi-level solid state memory

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8850292B2 (en) 2011-11-24 2014-09-30 Samsung Electronics Co., Ltd. Flash memory system and read method in flash memory system
KR20150043127A (ko) * 2013-10-14 2015-04-22 삼성전자주식회사 메모리 시스템에서의 코딩 방법 및 디코딩 방법
KR20150060019A (ko) * 2013-11-25 2015-06-03 삼성전자주식회사 메모리 시스템에서 데이터를 인코딩 및 디코딩하기 위한 방법 및 장치

Also Published As

Publication number Publication date
CN101944067A (zh) 2011-01-12
US20100277989A1 (en) 2010-11-04
JP2010262730A (ja) 2010-11-18
US8331168B2 (en) 2012-12-11
US8553474B2 (en) 2013-10-08
US20120287714A1 (en) 2012-11-15
US20120290778A1 (en) 2012-11-15
JP5464703B2 (ja) 2014-04-09
KR101264476B1 (ko) 2013-05-14
US8488397B2 (en) 2013-07-16
CN101944067B (zh) 2013-04-24

Similar Documents

Publication Publication Date Title
KR101264476B1 (ko) 증가된 용량의 이종의 스토리지 엘리먼트들
KR101438072B1 (ko) 소거 없는 플래시 메모리의 다중 프로그래밍
KR101428891B1 (ko) 아날로그 메모리 셀들에서의 최적화된 임계치 검색
JP5567378B2 (ja) 不揮発性メモリの適応型エンデュランス・コーディング方法及びシステム
US9692449B2 (en) Read threshold calibration for LDPC
JP5723967B2 (ja) ソリッド・ステート・ストレージ・デバイスのsレベル・ストレージに入力データを記録するための方法、エンコーダ装置、およびソリッド・ステート・ストレージ・デバイス
KR102275717B1 (ko) 플래시 메모리 시스템 및 그의 동작 방법
US8656263B2 (en) Trellis-coded modulation in a multi-level cell flash memory device
JP2013524609A5 (ko)
JP2021111826A (ja) 復号装置及び復号方法
KR20150129325A (ko) 솔리드 스테이트 메모리에 저장된 데이터 디코딩
WO2019246527A1 (en) Method and apparatus for improved data recovery in data storage systems
US10326473B2 (en) Symbol-based coding for NAND flash devices
US10133628B2 (en) Apparatuses and methods for encoding using error protection codes
US8508391B1 (en) Code word formatter of shortened non-binary linear error correction code
US12009840B2 (en) Systems and methods of decoding error correction code of a memory device with dynamic bit error estimation
KR102633829B1 (ko) 버스트 에러 정정 코드 생성 방법, 컴퓨터 판독 가능한 기록 매체, 컴퓨터 프로그램 및 장치
US20230216526A1 (en) Systems and methods of decoding error correction code of a memory device with dynamic bit error estimation
KR20180034178A (ko) 플래시 메모리와 통신들에서 점진적 폴라 채널 코딩을 이용하여 데이터를 저장하는 방법, 데이터를 전송하는 방법, 및 데이터를 인코딩하는 방법
KR20150060019A (ko) 메모리 시스템에서 데이터를 인코딩 및 디코딩하기 위한 방법 및 장치
KR101361238B1 (ko) 간섭 채널 환경에서의 오류 정정 방법 및 회로, 이를 이용한 플래시 메모리 장치
KR101428849B1 (ko) 간섭 채널 환경에서의 저밀도 패리티 검사를 이용한 오류 정정 방법 및 회로, 이를 이용한 플래시 메모리 장치

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20160419

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20170420

Year of fee payment: 5

LAPS Lapse due to unpaid annual fee