KR20160143005A - Bch 인코더, bch 디코더, 이를 포함하는 시스템, 및 이의 동작 방법 - Google Patents

Bch 인코더, bch 디코더, 이를 포함하는 시스템, 및 이의 동작 방법 Download PDF

Info

Publication number
KR20160143005A
KR20160143005A KR1020150078978A KR20150078978A KR20160143005A KR 20160143005 A KR20160143005 A KR 20160143005A KR 1020150078978 A KR1020150078978 A KR 1020150078978A KR 20150078978 A KR20150078978 A KR 20150078978A KR 20160143005 A KR20160143005 A KR 20160143005A
Authority
KR
South Korea
Prior art keywords
data
parity codes
parity
rti
codes
Prior art date
Application number
KR1020150078978A
Other languages
English (en)
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 KR1020150078978A priority Critical patent/KR20160143005A/ko
Publication of KR20160143005A publication Critical patent/KR20160143005A/ko

Links

Images

Classifications

    • 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/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • H03M13/151Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
    • H03M13/152Bose-Chaudhuri-Hocquenghem [BCH] codes
    • 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
    • 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/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/09Error detection only, e.g. using cyclic redundancy check [CRC] codes or single parity bit
    • 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/27Coding, 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 using interleaving techniques
    • H03M13/2703Coding, 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 using interleaving techniques the interleaver involving at least two directions
    • H03M13/2707Simple row-column interleaver, i.e. pure block interleaving

Landscapes

  • Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Algebra (AREA)
  • General Physics & Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

BCH 인코더, BCH 디코더, 이를 포함하는 시스템, 및 이의 동작 방법이 개시된다. 일 실시예에 따른 BCH 인코더의 동작 방법은 호스트로부터 전송된 복수의 데이터를 로우 방향으로 인코딩하여 제1 패리티 코드들을 생성하는 단계와, 상기 복수의 데이터를 컬럼 방향으로 인코딩하여 제2 패리티 코드들을 생성하는 단계와, 상기 제1 패리티 코드들 및 상기 제2 패리티 코드들에 포함된 제로 패딩 비트들에 기초하여 상기 복수의 데이터, 상기 제1 패리티 코드들, 및 상기 제2 패리티 코드들을 정렬하는 단계를 포함한다.

Description

BCH 인코더, BCH 디코더, 이를 포함하는 시스템, 및 이의 동작 방법{BCH ENCODER, BCH DECODER, SYSTEM INCLUDING THE SAME, AND METHOD THEREOF}
아래 실시예들은 BCH 인코더, BCH 디코더, 이를 포함하는 시스템, 및 이의 동작 방법에 관한 것이다.
하나의 셀에 1비트의 정보를 저장하는 기존의 SLC 방식의 플래시 메모리 대신, 복수의 정보를 하나의 셀에 저장하는 MLC 방식의 플래시 메모리가 사용된다.
플래시 메모리의 데이터 저장 방식이 복수의 정보를 하나의 셀에 저장하는 방식으로 바뀜으로서 에러 발생 빈도가 올라가고, 그에 따라 오정정확률이 올라가게 된다.
데이터를 블록 단위로 BCH 코드를 수행하여 플래시 메모리에 저장할 때, 데이터와 달리 이때 생성되는 패리티 코드는 바이트 단위로 정렬되지 않는다. 만약, 이를 그대로 플래시 메모리에 저장하게 되면, 패리티 코드와 데이터 사이에 빈 공간이 발생하고, 블록이 커질수록 그 빈 공간의 양은 더욱 커지게 된다.
실시예들은 패리티 코드와 복수의 데이터 사이에 메모리 장치에서의 빈 공간의 발생을 방지하는 기술을 제공할 수 있다.
또한, 실시예들은 ECC 처리 속도를 향상시키고 데이터 리드 속도를 향상시키는 기술을 제공할 수 있다.
일 실시예에 따른 BCH 인코더의 동작 방법은 호스트로부터 전송된 복수의 데이터를 로우 방향으로 인코딩하여 제1 패리티 코드들을 생성하는 단계와, 상기 복수의 데이터를 컬럼 방향으로 인코딩하여 제2 패리티 코드들을 생성하는 단계와, 상기 제1 패리티 코드들 및 상기 제2 패리티 코드들에 포함된 제로 패딩 비트들에 기초하여 상기 복수의 데이터, 상기 제1 패리티 코드들, 및 상기 제2 패리티 코드들을 정렬하는 단계를 포함할 수 있다.
상기 정렬하는 단계는 상기 제1 패리티 코드들 및 상기 제2 패리티 코드들로부터 상기 제로 패딩 비트들을 삭제하는 단계와, 상기 제로 패딩 비트들이 삭제된 상기 제1 패리티 코드들 및 상기 제2 패리티 코드들을 비트 단위로 상기 복수의 데이터와 함께 정렬하는 단계를 포함할 수 있다.
상기 제2 패리티 코드들을 생성하는 단계는 상기 복수의 데이터를 인터리빙하는 단계와, 인터리빙된 복수의 데이터에 기초하여 상기 복수의 데이터를 컬럼 방향으로 인코딩하여 상기 제2 패리티 코드들을 생성하는 단계를 포함할 수 있다.
상기 방법은 상기 복수의 데이터에 대한 CRC(Cyclic redundancy check) 코드를 생성하는 단계를 더 포함할 수 있다.
일 실시예에 따른 BCH 인코더는 호스트로부터 전송된 복수의 데이터를 로우 방향으로 인코딩하여 제1 패리티 코드들을 생성하는 로우 인코더와, 상기 복수의 데이터를 컬럼 방향으로 인코딩하여 제2 패리티 코드들을 생성하는 컬럼 인코더와, 상기 제1 패리티 코드들 및 상기 제2 패리티 코드들에 포함된 제로 패딩 비트들에 기초하여 상기 복수의 데이터, 상기 제1 패리티 코드들, 및 상기 제2 패리티 코드들을 정렬하는 정렬 모듈을 포함할 수 있다.
상기 정렬 모듈은 상기 제1 패리티 코드들 및 상기 제2 패리티 코드들로부터 상기 제로 패딩 비트들을 삭제하고, 상기 제로 패딩 비트들이 삭제된 상기 제1 패리티 코드들 및 상기 제2 패리티 코드들을 비트 단위로 상기 복수의 데이터와 함께 정렬할 수 있다.
상기 BCH 인코더는 상기 복수의 데이터를 인터리빙하는 인터리버를 더 포함하고, 상기 컬럼 인코더는 인터리빙된 복수의 데이터에 기초하여 상기 복수의 데이터를 컬럼 방향으로 인코딩하여 상기 제2 패리티 코드들을 생성할 수 있다.
상기 BCH 인코더는 상기 복수의 데이터에 대한 CRC(Cyclic redundancy check) 코드를 생성하는 CRC 코드 생성 모듈을 더 포함할 수 있다.
일 실시예에 따른 BCH 디코더의 동작 방법은 메모리 장치로부터 복수의 데이터와 패리티 코드들을 리드하는 단계와, 상기 패리티 코드들에 제로 패딩 비트들을 삽입하고, 상기 제로 패딩 비트들이 삽입된 상기 패리티 코드들을 바이트 단위로 상기 복수의 데이터와 함께 정렬하는 단계를 포함할 수 있다.
상기 방법은 제어 신호에 응답하여 상기 복수의 데이터를 바이패스 또는 상기 복수의 데이터를 디인터리빙(de-interleaving)하는 단계를 포함할 수 있다.
상기 방법은 상기 복수의 데이터를 로우 방향 또는 컬럼 방향으로 디코딩하는 단계를 더 포함할 수 있다.
상기 방법은 디코딩 결과에 기초하여 상기 복수의 데이터에 대한 디코딩의 반복 횟수를 결정하는 단계를 더 포함할 수 있다.
일 실시예에 따른 BCH 디코더는 메모리 장치로부터 복수의 데이터와 패리티 코드들을 리드하고, 상기 패리티 코드들에 제로 패딩 비트들을 삽입하고, 상기 제로 패딩 비트들이 삽입된 패리티 코드들을 바이트 단위로 상기 복수의 데이터와 함께 정렬하는 정렬 모듈과, 상기 복수의 데이터에 대한 디코딩을 제어하기 위한 제어 신호를 생성하는 디코딩 제어 모듈을 포함할 수 있다.
상기 BCH 디코더는 상기 제어 신호에 응답하여 상기 복수의 데이터를 바이패스 또는 상기 복수의 데이터를 디인터리빙하는 디인터리버를 더 포함할 수 있다.
상기 BCH 디코더는 상기 복수의 데이터를 로우 방향 또는 컬럼 방향으로 디코딩하고, 디코딩 결과를 상기 디코딩 제어 모듈로 출력하는 디코더를 더 포함할 수 있다.
상기 제어 신호가 제1 레벨일 때, 상기 디인터리버는 상기 복수의 데이터를 바이패스하고, 상기 디코더는 상기 복수의 데이터를 로우 방향으로 디코딩할 수 있다.
상기 제어 신호가 제2 레벨일 때, 상기 디인터리버는 상기 복수의 데이터를 디인터리버하고, 상기 디코더는 디인터리버된 복수의 데이터에 기초하여 상기 복수의 데이터를 컬럼 방향으로 디코딩할 수 있다.
상기 디코딩 제어 모듈은 상기 디코딩 결과에 기초하여 상기 복수의 데이터에 대한 디코딩의 반복 횟수를 결정할 수 있다.
도 1은 일 실시예에 따른 전자 시스템의 개략적인 블록도이다.
도 2는 도 1에 도시된 메모리 컨트롤러의 일 실시예에 따른 개략적인 블록도이다.
도 3은 도 1에 도시된 불휘발성 메모리 장치의 개략적인 블록도이다.
도 4는 도 2에 도시된 BCH 인코더의 개략적인 블록도이다.
도 5a는 도 2에 도시된 BCH 인코더에 의해 생성되는 패리티 코드들을 포함하는 코드 블록의 일 실시예를 나타낸다.
도 5b는 도 5a에 도시된 각 패리티 코드의 일 실시예를 나타낸다.
도 6은 도 2에 도시된 BCH 디코더의 개략적인 블록도이다.
도 7은 도 4에 도시된 BCH 인코더의 동작 방법을 설명하기 위한 플로우 차트이다.
도 8은 도 6에 도시된 BCH 디코더의 동작 방법을 설명하기 위한 플로우 차트이다.
도 9는 도 1에 도시된 메모리 컨트롤러와 불휘발성 메모리 장치를 포함하는 전자 시스템의 일 실시예에 따른 블록도이다.
도 10은 도 1에 도시된 메모리 컨트롤러와 불휘발성 메모리 장치를 포함하는 전자 시스템의 다른 실시예에 따른 블록도이다.
도 11은 도 1에 도시된 메모리 컨트롤러와 불휘발성 메모리 장치를 포함하는 전자 시스템의 또 다른 실시예에 따른 블록도이다.
도 12는 도 1에 도시된 데이터 저장 장치를 포함하는 전자 시스템의 또 다른 실시예에 따른 블록도이다.
도 13은 본 발명의 일 실시예에 따른 전자 시스템의 블록도이다.
본 명세서에 개시되어 있는 본 발명의 개념에 다른 실시예들에 대해서 특정한 구조적 또는 기능적 설명들은 단지 본 발명의 개념에 따른 실시예들을 설명하기 위한 목적으로 예시된 것으로서, 본 발명의 개념에 따른 실시예들은 다양한 형태로 실시될 수 있으며 본 명세서에 설명된 실시예들에 한정되지 않는다.
본 발명의 개념에 따른 실시예들은 다양한 변경들을 가할 수 있고 여러 가지 형태들을 가질 수 있으므로 실시예들을 도면에 예시하고 본 명세서에 상세하게 설명하고자 한다. 그러나, 이는 본 발명의 개념에 따른 실시예들을 특정한 개시형태들에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물, 또는 대체물을 포함한다.
제1 또는 제2 등의 용어를 다양한 구성요소들을 설명하는데 사용될 수 있지만, 상기 구성요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만, 예를 들어 본 발명의 개념에 따른 권리 범위로부터 이탈되지 않은 채, 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소는 제1 구성요소로도 명명될 수 있다.
어떤 구성요소가 다른 구성요소에 "연결되어" 있다거나 "접속되어" 있다고 언급된 때에는, 그 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성요소가 다른 구성요소에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는, 중간에 다른 구성요소가 존재하지 않는 것으로 이해되어야 할 것이다. 구성요소들 간의 관계를 설명하는 표현들, 예를 들어 "~사이에"와 "바로~사이에" 또는 "~에 이웃하는"과 "~에 직접 이웃하는" 등도 마찬가지로 해석되어야 한다.
본 명세서에서 사용한 용어는 단지 특정한 실시예들을 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 명세서에서, "포함하다" 또는 "가지다" 등의 용어는 설시된 특징, 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가진다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미를 갖는 것으로 해석되어야 하며, 본 명세서에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
이하, 실시예들을 첨부된 도면을 참조하여 상세하게 설명한다.
본 명세서에서의 모듈(module)은 본 명세서에서 설명되는 각 명칭에 따른 기능과 동작을 수행할 수 있는 하드웨어를 의미할 수도 있고, 특정 기능과 동작을 수행할 수 있는 컴퓨터 프로그램 코드를 의미할 수도 있고, 또는 특정 기능과 동작을 수행시킬 수 있는 컴퓨터 프로그램 코드가 탑재된 전자적 기록 매체, 예를 들어 프로세서 또는 마이크로 프로세서를 의미할 수 있다.
다시 말해, 모듈이란 본 발명의 기술적 사상을 수행하기 위한 하드웨어 및/또는 상기 하드웨어를 구동하기 위한 소프트웨어의 기능적 및/또는 구조적 결합을 의미할 수 있다.
도 1은 일 실시예에 따른 전자 시스템의 개략적인 블록도이다.
도 1을 참조하면, 전자 시스템(electronic system; 1)은 호스트(host; 10)와 데이터 저장 장치(data storage device; 20)를 포함할 수 있다.
전자 지스템(1)은 PC(personal computer), 서버(server), 데이터 서버, 데이터베이스 서버, 웹 서버, 네트워크-결합 스토리지(network-attached storage(NAS)), 또는 휴대용 전자 장치로 구현될 수 있다.
휴대용 전자 장치는 랩탑 컴퓨터(laptop computer), 넷북(netbook), 이동전화기, 스마트폰(smartphone), 태블릿(tablet) PC, 모바일 인터넷 디바이스(mobile internet device(MID)), PDA(personal digital assistant), EDA(enterprise digital assistant), 디지털 스틸 카메라(digital still camera), 디지털 비디오 카메라(digital video camera), PMP(portable multimedia player), PND(personal navigation device 또는 portable navigation device), 휴대용 게임 콘솔(handheld game console), 또는 e-북(e-book)으로 구현될 수 있다.
호스트(10)는 인터페이스(30)를 통해 데이터 저장 장치(20)와 통신할 수 있다. 예를 들어, 호스트(10)는 인터페이스(30)를 통해 데이터 및/또는 명령을 데이터 저장 장치(20)로 전송할 수 있다.
예를 들어, 호스트(10)는 상술한 PC(personal computer), 서버(server), 데이터 서버, 데이터베이스 서버, 웹 서버, 네트워크-결합 스토리지(network-attached storage(NAS)), 또는 휴대용 전자 장치일 수 있다. 또한, 호스트(10)는 애플리케이션 프로세서 또는 모바일 애플리케이션 프로세서를 의미할 수 있다.
인터페이스(30)는 통신을 위하여 인터페이스 프로토콜(interface protocol)을 포함할 수 있다.
예를 들어, 인터페이스 프로토콜은 UHI(UHS-I 또는 UHS-II), PCI-E(peripheral component interconnect-express), ATA(Advanced attached SCSI), SATA(serial advanced technology attachment), SAS(Serial Attached SCSI), 또는 DDRx(Double Data Rate x)와 같은 인터페이스 프로토콜일 수 있다.
또한, 인터페이스 프로토콜은 USB(Universal Serial Bus), MMC(multi-media card), ESDI(enhanced small disk interface), 또는 IDE(Integrated Drive Electronics) 등에 적합한 프로토콜일 수 있다.
데이터 저장 장치(20)는 메모리 컨트롤러(memory controller; 100)와 불휘발성 메모리 장치(non-volatile memory device; 200)를 포함할 수 있다.
데이터 저장 장치(20)는 데이터베이스, 솔리드 스테이트 드라이브(Solid State Drive(SSD)), 유니버셜 플래시 스토리지(universal flash storage(UFS)), 플래시 USB 드라이브(flash universal serial bus drive), SD(secure digital) 카드, MMC(multimedia card), 임베디드 MMC(embedded MMC), 스마트 카드(smart card), 메모리 카드(memory card), 또는 레이드(Redundant Array of Independent Disks(RAID) 또는 Redundant Array of Inexpensive Disks(RAID))로 구현될 수 있으나, 반드시 이에 한정되지 않는다.
예를 들어, 데이터 저장 장치(20)는 eMMC, UFC, 또는 SSD 등과 같이 플래시 메모리 컨트롤러를 포함하는 플래시-기반 데이터 저장 장치일 수 있다.
메모리 컨트롤러(100)는 호스트(10)의 명령에 따라 불휘발성 메모리 장치(200)를 제어함으로써 데이터를 리드하거나 데이터를 라이트할 수 있다.
또한, 메모리 컨트롤러(100)는 불휘발성 메모리 장치(200)의 동작 조건(operation condition)을 제어하거나 불휘발성 메모리 장치(200)의 효율적인 관리를 위하여 필요한 내부 동작(예를 들어, 가비지 컬렉션(garbage collection), 웨어 레벨링(wear-leveling) 등)을 제어할 수 있다.
도 2는 도 1에 도시된 메모리 컨트롤러의 일 실시예에 따른 개략적인 블록도이고, 도 3은 도 1에 도시된 불휘발성 메모리 장치의 개략적인 블록도이다.
도 1 내지 도 3을 참조하면, 메모리 컨트롤러9100)는 제1 메모리(first memory; 110), CPU(central processing unit; 120), 제2 메모리(second memory; 130), BCH 인코더(Bose-Chaudhuri-Hocquenghem encoder; 140), BCH 디코더(Bose-Chaudhuri-Hocquenghem decoder; 150), 및 불휘발성 메모리 인터페이스(non-volatile memory interface; 160)을 포함할 수 있다.
제1 메모리(110)는 CPU(120)의 동작에 필요한 프로그램 코드 또는 펌웨어(firmware)를 저장할 수 있다. 제1 메모리(110)는 불휘발성 메모리, 예를 들어 RAM(random access memory)으로 구현될 수 있다.
CPU(120)는 메모리 컨트롤러(100)의 전반적인 동작을 제어할 수 있다. CPU(120)는 버스(170)를 통하여 제1 메모리(110), 제2 메모리(130), BCH 인코더(140), 및 BCH 디코더(150) 사이에서 데이터의 교환을 제어할 수 있다.
또한, CPU(120)는 불휘발성 메모리 장치(200)의 FTL(Flash Translation Layer)을 구동할 수 있다.
제2 메모리(130)는 휘발성 메모리, 예를 들어 DRAM(dynamic RAM) 또는 SRAM(static RAM)으로 구현될 수 있다. 제2 메모리(130)는 인터페이스(30)를 통해 호스트(10)로부터 전송된 데이터를 일시적으로 저장 또는 버퍼링할 수 있다. 또한, 제2 메모리(130)는 인터페이스(30)를 통해 호스트(10)로 전송하기 위한 불휘발성 메모리 장치(200)로부터 출력된 데이터를 일시적으로 저장 또는 버퍼링할 수 있다. 예를 들어, 제2 메모리(130)는 버퍼 메모리(buffer memory)일 수 있다. 도 2에서는 제2 메모리(130)가 메모리 컨트롤러(100)의 내부에 구현되는 것으로 도시되어 있지만, 메모리 컨트롤러(100)의 외부에 구현될 수도 있다.
BCH 인코더(140)는 호스트(10)로부터 전송된 복수의 데이터를 인코딩하여 패리티 코드들을 생성할 수 있다. 예를 들어, 상기 패리티 코드들은 로우(row) 방향에 따라 생성된 패리티 코드들 및/또는 컬럼(column) 방향에 따라 생성된 패리티 코드들을 포함할 수 있다.
BCH 인코더(140)는 패리티 코드들에 포함된 제로 패딩 비트들(zero padding bits)에 기초하여 복수의 데이터, 상기 패리티 코드들을 정렬할 수 있다.
BCH 인코더(140)는 연접(concatenated) BCH 인코더일 수 있다. BCH 인코더(140)에 대해서는 도 4를 참조하여 후술한다.
BCH 디코더(150)는 불휘발성 메모리 장치(200)로부터 복수의 데이터와 패리티 코드들을 리드할 수 있다. 예를 들어, 상기 패리티 코드들은 상기 복수의 데이터가 불휘발성 메모리 장치(200)에 라이트될 때, 상기 복수의 데이터에 대해 로우 방향에 따라 생성된 패리티 코드들 및/또는 컬럼 방향에 따라 생성된 패리티 코드들을 포함할 수 있다.
BCH 디코더(150)는 패리티 코드들에 제로 패딩 비트들을 삽입하고, 상기 제로 패딩 비트들이 삽입된 상기 패리티 코드들을 복수의 데이터와 함께 정렬할 수 있다.
BCH 디코더(150)는 복수의 데이터를 로우 방향 및/또는 컬럼 방향으로 디코딩할 수 있다. BCH 디코더(150)는 디코딩 결과에 기초하여 상기 복수의 데이터에 대한 디코딩의 반복 횟수를 결정할 수 있다.
BCH 디코더(150)는 연접(concatenated) BCH 디코더일 수 있다. BCH 디코더(150)에 대해서는 도 4를 참조하여 후술한다.
불휘발성 메모리 인터페이스(160)는 불휘발성 메모리 장치(200)와 메모리 컨트롤러(100) 사이에서 데이터의 교환을 인터페이싱할 수 있다.
불휘발성 메모리 장치(200)는 각종 프로그램들(programs)과 데이터(data)를 저장할 수 있다.
불휘발성 메모리 장치(200)는 플래시 메모리 장치일 수 있으나, 이에 한정되지 않는다. 불휘발성 메모리 장치(200)가 플래시 메모리 장치인 경우, 불휘발성 메모리 장치(200)는 플로팅 게이트 방식의 NAND 플래시 메모리 장치 또는 CTF(Charge Trap Flash) 방식의 NAND 플래시 메모리 장치일 수 있다. 불휘발성 메모리 장치(200)의 메모리 셀 트랜지스터들은 2차원적으로 배열된 구조를 가질 수도 있고, 또한 3차원적으로 배열된 구조를 가질 수도 있다.
불휘발성 메모리 장치(200)는 복수의 뱅크들(210)을 포함할 수 있다. 복수의 뱅크들 각각은 뱅크(Bank0) 내지 뱅크(BankN)로 레벨된 메모리 셀 어레이(memory cell array; 211)를 포함할 수 있다. 메모리 셀 어레이(211)는 불휘발성 메모리 셀들을 포함할 수 있다.
불휘발성 메모리 셀들 각각은 EEPROM(Electrically Erasable Programmable Read-Only Memory), 플래시(flash) 메모리, MRAM(Magnetic RAM), 스핀전달토크 MRAM(Spin-Transfer Torque MRAM), Conductive bridging RAM(CBRAM), FeRAM(Ferroelectric RAM), PRAM(Phase change RAM), 저항 메모리(Resistive RAM(RRAM)), 나노튜브 RRAM(Nanotube RRAM), 폴리머 RAM(Polymer RAM(PoRAM)), 나노 부유 게이트 메모리(Nano Floating Gate Memory(NFGM)), 홀로그래픽 메모리(holographic memory), 분자 전자 메모리(Molecular Electronics Memory Device), 또는 절연 저항 변화 메모리(Insulator Resistance Change Memory)로 구현될 수 있다.
불휘발성 메모리 셀들 각각은 1-비트 또는 그 이상의 비트들을 저장할 수 있다. 예를 들어, 불휘발성 메모리 셀들은 셀(cell)당 1-비트 정보를 저장할 수 있는 싱글-레벨 셀들(single level cells(SLCs)) 및/또는 셀당 2-비트 정보 또는 그 이상의 정보를 저장할 수 있는 멀티-레벨 셀들(multi-level cells(MLCs))을 포함할 수 있다. MLCs는 트리플-레벨 셀들(triple-level cells(TLCs)) 또는 쿼드러플-레벨 셀들(Quadruple-level cells(QLCs))을 포함할 수 있다.
도 4는 도 2에 도시된 BCH 인코더의 개략적인 블록도이고, 도 5a는 도 2에 도시된 BCH 인코더에 의해 생성되는 패리티 코드들을 포함하는 코드 블록의 일 실시예를 나타내고, 도 5b는 도 5a에 도시된 각 패리티 코드의 일 실시예를 나타낸다.
도 1 내지 도 4를 참조하면, BCH 인코더(140)는 제1 인코더(first encoder; 141), 인터리버(interleaver; 143), 제2 인코더(second encoder; 145), CRC 코드 생성 모듈(cyclic redundancy check(CRC) code generation module; 147), 및 정렬 모듈(alignment module; 149)을 포함할 수 있다.
호스트(10)로부터 전송된 복수의 데이터(DATA)는 설명의 편의를 위해 도 5a에 도시된 복수의 데이터(DATA0~DATA15)임을 가정하여 설명한다.
호스트(10)로부터 전송된 복수의 데이터(DATA0~DATA15)는 순차적인(sequential) 데이터일 수 있다. 예를 들어, 복수의 데이터(DATA0~DATA15)는 순차적으로 각 구성요소(141, 143, 147, 및 149)로 전송될 수 있다.
제1 인코더(141)는 호스트(10)로부터 전송된 복수의 데이터(DATA0~DATA15)를 로우 방향으로 인코딩하여 제1 패리티 코드들(PR0~PR3)을 생성할 수 있다. 이때, 제1 인코더(141)는 복수의 데이터(DATA0~DATA15)를 BCH 코드를 이용하여 로우 방향으로 인코딩할 수 있다. 예를 들어, 제1 인코더(141)는 로우 인코더일 수 있다.
제1 인코더(141)는 제1 패리티 코드들(PR0~PR3)을 정렬 모듈(149)로 출력할 수 있다.
인터리버(143)는 복수의 데이터(DATA0~DATA15)를 인터리빙할 수 있다. 인터리버(143)는 인터리빙된 복수의 데이터를 제2 인코더(145)로 출력할 수 있다.
제2 인코더(145)는 복수의 데이터(DATA0~DATA15)를 컬럼 방향으로 인코딩하여 제2 패리티 코드들(PC0~PC3)을 생성할 수 있다. 제2 인코더(145)는 인터리빙된 복수의 데이터에 기초하여 복수의 데이터(DATA0~DATA15)를 컬럼 방향으로 인코딩하여 제2 패리티 코드들(PC0~PC3)을 생성할 수 있다. 이때, 제1 인코더(141)는 복수의 데이터(DATA0~DATA15)를 BCH 코드를 이용하여 컬럼 방향으로 인코딩할 수 있다. 예를 들어, 제2 인코더(145)는 컬럼 인코더일 수 있다.
제2 인코더(145)는 제2 패리티 코드들(PC0~PC3)을 정렬 모듈(149)로 출력할 수 있다.
제1 인코더(141)와 제2 인코더(145)는 복수의 데이터(DATA0~DATA15)를 데이터 블록 단위로 인코딩을 수행하여 도 5b에 도시된 바와 같은 패리티 코드들(PR0~PR3, PC0~PC3)을 생성할 수 있다. 도 5a에서는 설명의 편의를 위해 인코더(141 및 145)가 복수의 데이터(DATA0~DATA15)를 1x1 kB 데이터 블록 단위로 처리하는 것으로 도시하고 있지만, 반드시 이에 한정되지 않으며, mxn kB(m, n은 1 이상의 자연수) 데이터 블록 단위로 처리할 수 있다.
도 5b에 도시된 바와 같이, 제1 패리티 코드들(PR0~PR3) 및 제2 패리티 코드들(PC0~PC3) 각각은 패리티 비트들(PB) 및/또는 제로 패딩 비트들(ZPB)을 포함할 수 있다. 패리티 비트들(PB)은 BCH 코드를 이용하여 인코딩 결과에 의해 생성된 의미있는 에러 검출용 비트들을 의미할 수 있다. 제로 패딩 비트들(ZPB)은 패리티 비트들(PB) 이외에 패리티 코드의 규격(또는 구조)를 채우기 위해 삽입되는 의미없는 비트들을 의미할 수 있다.
이때, 도 5a 및 도 5b에 도시된 바와 같이, 제1 패리티 코드들(PR0~PR3) 및 제2 패리티 코드들(PC0~PC3) 각각은 바이트 단위로 정렬되어 있지 않을 수 있다.
CRC 코드 생성 모듈(147)은 복수의 데이터(DATA0~DATA15)에 대한 CRC 코드를 생성할 수 있다. CRC 코드 생성 모듈(147)은 불휘발성 메모리 장치(200)에 저장될 복수의 데이터(DATA0~DATA15)에 포함된 에러를 검출 및 정정하기 위해 CRC 코드를 생성할 수 있다.
CRC 코드 생성 모듈(147)은 생성된 복수의 데이터(DATA0~DATA15)에 대한 CRC 코드를 정렬 모듈(149)로 출력할 수 있다.
정렬 모듈(149)는 제1 패리티 코드들(PR0~PR3) 및 제2 패리티 코드들(PC0~PC3)에 포함된 제로 패딩 비트들(ZPB)에 기초하여 복수의 데이터(DATA0~DATA15), 제1 패리티 코드들(PR0~PR3), 및 제2 패리티 코드들(PC0~PC3)을 정렬할 수 있다.
예를 들어, 정렬 모듈(149)은 제1 패리티 코드들(PR0~PR3) 및 제2 패리티 코드들(PC0~PC3)로부터 제로 패팅 비트들(ZPB)을 삭제하고, 제로 패팅 비트들(ZPB)이 삭제된 제1 패리티 코드들(PR0~PR3) 및 제2 패리티 코드들(PC0~PC3)을 비트 단위로 복수의 데이터(DATA0~DATA15)와 함께 정렬할 수 있다. 즉, 패리티 비트들(PB)만이 포함된 제1 패리티 코드들(PR0~PR3) 및 제2 패리티 코드들(PC0~PC3)이 비트 단위로 복수의 데이터(DATA0~DATA15)와 함께 정렬될 수 있다.
또한, 정렬 모듈(149)는 복수의 데이터(DATA0~DATA15), 제1 패리티 코드들(PR0~PR3), 제2 패리티 코드들(PC0~PC3), 및 CRC 코드를 정렬할 수 있다.
정렬 모듈(149)은 정렬된 복수의 데이터(DATA0~DATA15), 제1 패리티 코드들(PR0~PR3), 및 제2 패리티 코드들(PC0~PC3)을 불휘발성 메모리 장치(200)에 저장할 수 있다. 또한, 정렬 모듈(149)은 정렬된 복수의 데이터(DATA0~DATA15), 제1 패리티 코드들(PR0~PR3), 제2 패리티 코드들(PC0~PC3) 및 CRC 코드를 불휘발성 메모리 장치(200)에 저장할 수 있다.
정렬 모듈(149)이 패리티 코드들(PR0~PR3, PC0~PC3)로부터 제로 패팅 비트들(ZPB)을 삭제하여, 복수의 데이터(DATA0~DATA15)와 패리티 코드들을 정렬(또는 재편성)함으로써, 데이터 저장 장치(20)는 패리티 코드들(PR0~PR3, PC0~PC3)과 복수의 데이터(DATA0~DATA15) 및 불휘발성 메모리 장치(200)에 저장될 이후의 복수의 데이터 사이에 불휘발성 메모리 장치(200)에서의 빈 공간의 발생을 방지할 수 있다. 따라서, 데이터 저장 장치(20)는 불휘발성 메모리 장치(200)의 저장 공간을 효율적으로 사용할 수 있고, 오류 정정 능력을 향상시킬 수 있다.
도 6은 도 2에 도시된 BCH 디코더의 개략적인 블록도이다.
이하에서는, 설명의 편의를 위해 도 5a 및 도 5b를 참조하여 설명된 복수의 데이터(DATA0~DATA15), 제1 패리티 코드들(PR0~PR3), 제2 패리티 코드들(PC0~PC3), 및 CRC 코드들이 정렬되어 불휘발성 메모리 장치(200)에 저장되어 있는 것으로 가정한다.
도 1 내지 도 3 및 도 6을 참조하면, BCH 디코더(150)는 정렬 모듈(alignment module; 151), 디코딩 제어 모듈(decoding control module; 152), 디인터리버(de-interleaver; 153), 디코더(decoder; 154), CRC 블록(CRC block; 155), 및 정정 모듈(correction module; 156)을 포함할 수 있다.
정렬 모듈(151)은 불휘발성 메모리 장치(200)로부터 복수의 데이터(DATA0~DATA15)와 패리티 코드들, 예를 들어 제1 패리티 코드들(PR0~PR3)과 제2 패리티 코드들을 리드할 수 있다.
정렬 모듈(151)은 패리티 코드들(PR0~PR3, PC0~PC3)에 제로 패팅 비트들(ZPB)을 삽입하고, 제로 패딩 비트들(ZPB)이 삽입된 패리티 코드들(PR0~PR3, PC0~PC3)을 바이트 단위로 복수의 데이터(DATA0~DATA15)와 함께 정렬할 수 있다. 즉, 패리티 비트들(PB)과 제로 패딩 비트들(ZPB)이 포함된 패리티 코드들(PR0~PR3, PC0~PC3)이 바이트 단위로 복수의 데이터(DATA0~DATA15)와 함께 정렬될 수 있다.
정렬 모듈(151)은 정렬된 복수의 데이터(DATA0~DATA15) 및 패리티 코드들(PR0~PR3, PC0~PC3)을 디코딩 제어 모듈(152)로 출력할 수 있다.
디코딩 제어 모듈(152)은 BCH 디코더(150)의 전반적인 동작을 제어할 수 있다. 예를 들어, 디코딩 제어 모듈(152)은 각 구성요소(151, 153, 154, 155, 및 156)의 동작을 제어할 수 있다.
디코딩 제어 모듈(152)은 복수의 데이터(DATA0~DATA15)를 디인터리버(153)로 출력할 수 있다. 이때, 디코딩 제어 모듈(152)은 복수의 데이터(DATA0~DATA15)에 대한 디코딩을 제어하기 위한 제어 신호(CTRL)를 생성하고, 복수의 데이터(DATA0~DATA15)와 함께 제어 신호(CTRL)를 디인터리버(153)로 출력할 수 있다.
또한, 디코딩 제어 모듈(152)은 디코더(154)로부터 출력된 디코딩 결과에 기초하여 복수의 데이터(DATA0~DATA15)에 대한 디코딩의 반복 횟수를 결정할 수 있다. 디코딩 제어 모듈(152)이 복수의 데이터(DATA0~DATA15)에 대한 디코딩의 반복 횟수를 제어함으로써, 데이터 저장 장치(20)는 소수의 디코더(154)를 사용하여 사이즈를 최소화할 수 있다.
디인터리버(153)는 제어 신호에 응답하여 복수의 데이터(DATA0~DATA15)를 바이패스 또는 복수의 데이터(DATA0~DATA15)를 디인터리빙할 수 있다.
제어 신호(CTRL)가 제1 레벨, 예를 들어 로우 레벨 또는 로직 0일 때, 디인터리버(153)는 복수의 데이터(DATA0~DATA15)를 바이패스할 수 있다.
제어 신호(CTRL)가 제2 레벨, 예를 들어 하이 레벨 또는 로직 1일 때, 디인터리버(153)는 복수의 데이터(DATA0~DATA15)를 디인터리버할 수 있다.
디인터버리버(153)는 복수의 데이터(DATA0~DATA15) 또는 디인터리버된 복수의 데이터를 디코더(154)로 출력할 수 있다.
디코더(154)는 복수의 데이터(DATA0~DATA15)를 로우 방향 또는 컬럼 방향으로 디코딩하고, 디코딩 결과를 디코딩 제어 모듈(152)로 출력할 수 있다.
디인터리버(153)가 복수의 데이터(DATA0~DATA15)를 바이패스할 때, 디코더(154)는 복수의 데이터(DATA0~DATA15)를 로우 방향으로 디코딩할 수 있다.
디인터리버(153)가 복수의 데이터(DATA0~DATA15)를 디인터리버할 때, 디코더(154)는 디인터리버된 데이터(D_DATA0~D_DATA15)에 기초하여 복수의 데이터(DATA0~DATA15)를 컬럼 방향으로 디코딩할 수 있다.
또한, 디코더(154)는 디코딩 결과에 따라 복수의 데이터(DATA0~DATA15)에 대한 에러 위치 정보(EPI)를 생성할 수 있다. 디코더(154)는 에러 위치 정보(EPI)를 CRC 블록(155), 및 정정 모듈(156)로 출력할 수 있다. 예를 들어, 에러 위치 정보(EPI)는 복수의 데이터(DATA0~DATA15)에 포함된 에러의 위치 정보일 수 있다.
CRC 블록(155)은 불휘발성 메모리 장치(200)로부터 리드된 복수의 데이터(DATA0~DATA15)에 대한 제1 CRC 코드를 생성할 수 있다. CRC 블록(155)은 에러 위치 정보에 기초하여 제1 CRC 코드를 업데이트할 수 있다. 예를 들어, CRC 블록(155)은 에러 위치 정보를 디코더(154)로부터 수신할 때마다 제1 CRC 코드를 반복적으로 업데이트할 수 있다.
CRC 블록(155)은 업데이트된 제1 CRC 코드와 복수의 데이터(DATA0~DATA15)가 불휘발성 메모리 장치(200)에 저장될 때 계산된 CRC 코드, 예를 들어 제2 CRC 코드를 비교하고, 비교결과에 따라 복수의 데이터(DATA0~DATA15)의 성공 또는 실패를 결정할 수 있다.
정정 모듈(156)은 에러 위치 정보에 기초하여 복수의 데이터(DATA0~DATA15)에 포함된 에러를 정정할 수 있다. 이때, 복수의 데이터(DATA0~DATA15)는 제2 메모리에 임시로 저장될 수 있다.
CRC 블록(155)이 온-더-플라이(on-the-fly) 방식, 예를 들어 에러 위치 정보를 디코더(154)로부터 수신할 때마다 CRC 코드를 업데이트하여 복수의 데이터(DATA0~DATA15)의 성공 또는 실패 여부를 결정할 수 있다. 즉, 정정 모듈(156)이 복수의 데이터(DATA0~DATA15)에 대해 에러 정정을 완료한 이후에, CRC 볼록(155)이 CRC 코드를 다시 계산할 필요가 없다.
정정 모듈(156)을 통해 복수의 데이터(DATA0~DATA15)에 대해 에러 정정이 완료될 때, CRC 블록(155)을 통해 CRC 코드 계산이 완료됨으로써, 데이터 저장 장치(20)는 복수의 데이터(DATA0~DATA15)에 대해 에러 정정을 완료한 이후에 CRC 코드를 다시 계산해야 하는 시간을 없앴다. 따라서, 데이터 저장 장치(20)는 ECC 처리 속도를 향상시키고 데이터 리드 속도를 향상시킬 수 있다.
도 7은 도 4에 도시된 BCH 인코더의 동작 방법을 설명하기 위한 플로우 차트이다.
도 7을 참조하면, 제1 인코더(141)는 호스트(10)로부터 전송된 복수의 데이터(DATA0~DATA15)를 로우 방향으로 인코딩하여 제1 패리티 코드들(PR0~PR3)을 생성할 수 있다(S710).
제2 인코더(145)는 복수의 데이터(DATA0~DATA15)를 컬럼 방향으로 인코딩하여 제2 패리티 코드들(PC0~PC3)을 생성할 수 있다(S730).
정렬 모듈(149)는 제1 패리티 코드들(PR0~PR3) 및 제2 패리티 코드들(PC0~PC3)에 포함된 제로 패딩 비트들(ZPB)에 기초하여 복수의 데이터(DATA0~DATA15), 제1 패리티 코드들(PR0~PR3), 및 제2 패리티 코드들(PC0~PC3)을 정렬할 수 있다(S750).
도 8은 도 6에 도시된 BCH 디코더의 동작 방법을 설명하기 위한 플로우 차트이다.
도 8을 참조하면, 정렬 모듈(151)은 불휘발성 메모리 장치(200)로부터 복수의 데이터(DATA0~DATA15)와 패리티 코드들, 예를 들어 제1 패리티 코드들(PR0~PR3)과 제2 패리티 코드들을 리드할 수 있다(S810).
정렬 모듈(151)은 패리티 코드들(PR0~PR3, PC0~PC3)에 제로 패팅 비트들(ZPB)을 삽입하고, 제로 패딩 비트들(ZPB)이 삽입된 패리티 코드들(PR0~PR3, PC0~PC3)을 바이트 단위로 복수의 데이터(DATA0~DATA15)와 함께 정렬할 수 있다(S830).
도 9는 도 1에 도시된 메모리 컨트롤러와 불휘발성 메모리 장치를 포함하는 전자 시스템의 일 실시예에 따른 블록도이다.
도 1과 도 9를 참조하면, 전자 시스템(400)은 이동 전화기(cellular phone), 스마트 폰(smart phone), PDA(personal digital assistant), 또는 무선 통신 장치 등으로 구현될 수 있다.
전자 시스템(400)은 불휘발성 메모리 장치(200), 불휘발성 메모리 장치(200)의 동작을 제어할 수 있는 메모리 컨트롤러(100), 프로세서(processor; 410), 디스플레이(display; 420), 무선 송수신기(radio transceiver; 430), 및 입력 장치(input device; 440)를 포함할 수 있다.
메모리 컨트롤러(100)는 프로세서(410)의 제어에 따라 불휘발성 메모리 장치(200)의 데이터 액세스 동작, 예를 들어 프로그램(program) 동작, 이레이즈(erase) 동작, 또는 리드(read) 동작을 제어할 수 있다.
불휘발성 메모리 장치(200)에 프로그램된 데이터는 프로세서(410) 및/또는 메모리 컨트롤러(100)의 제어에 따라 디스플레이(420)를 통하여 디스플레이될 수 있다.
프로세서(410)는 메모리 컨트롤러(100)로부터 출력된 데이터, 무선 송수신기(430)로부터 출력된 데이터, 또는 입력 장치(440)로부터 출력된 데이터가 디스플레이(420)를 통하여 디스플레이될 수 있도록 디스플레이(420)의 동작을 제어할 수 있다.
무선 송수신기(430)는 안테나(ANT)를 통하여 무선 신호를 주거나 받을 수 있다. 예를 들어, 무선 송수신기(430)는 안테나(ANT)를 통하여 수신된 무선 신호를 프로세서(410)에서 처리될 수 있는 신호로 변환할 수 있다.
따라서, 프로세서(410)는 무선 송수신기(430)로부터 출력된 신호를 처리하고 처리된 신호를 메모리 컨트롤러(100) 또는 디스플레이(420)로 전송할 수 있다.
또한, 무선 송수신기(430)는 프로세서(410)로부터 출력된 신호를 무선 신호로 변경하고 변경된 무선 신호를 안테나(ANT)를 통하여 외부 장치로 출력할 수 있다.
입력 장치(440)는 프로세서(410)의 동작을 제어하기 위한 제어 신호 또는 프로세서(410)에 의하여 처리될 데이터를 입력할 수 있는 장치로서, 터치 패드(touch pad)와 컴퓨터 마우스(computer mouse)와 같은 포인팅 장치(pointing device), 키패드(key pad), 또는 키보드 등으로 구현될 수 있다.
예를 들어, 불휘발성 메모리 장치(200)의 동작을 제어할 수 있는 메모리 컨트롤러(100)는 프로세서(410)의 일부로서 구현될 수 있고 또한 프로세서(410)와 별도의 칩으로 구현될 수 있다.
도 10은 도 1에 도시된 메모리 컨트롤러와 불휘발성 메모리 장치를 포함하는 전자 시스템의 다른 실시예에 따른 블록도이다.
도 1과 도 10을 참조하면, 전자 시스템(500)은 메모리 카드(memory card) 또는 스마트 카드(smart card) 등으로 구현될 수 있다.
전자 시스템(500)은 메모리 컨트롤러(100), 불휘발성 메모리 장치(200), 및 카드 인터페이스(520)를 포함한다.
메모리 컨트롤러(100)는 불휘발성 메모리 장치(200)와 카드 인터페이스(520) 사이에서 데이터의 교환을 제어할 수 있다.
카드 인터페이스(520)는 호스트(530)의 프로토콜에 따라 호스트(530)와 메모리 컨트롤러(100) 사이에서 데이터 교환을 인터페이싱할 수 있다.
예를 들어, 카드 인터페이스(520)는 SD(secure digital) 카드 인터페이스 또는 MMC(multi-media card) 인터페이스일 수 있으나 이에 한정되는 것은 아니다.
다른 예를 들어, 카드 인터페이스(520)는 USB(Universal Serial Bus) 프로토콜, IC(InterChip)-USB 프로토콜을 지원할 수 있다. 여기서, 카드 인터페이스라 함은 호스트(530)가 사용하는 프로토콜을 지원할 수 있는 하드웨어, 상기 하드웨어에 탑재된 소프트웨어, 또는 신호 전송 방식을 의미할 수 있다.
호스트(530)는 PC, 태블릿 PC, 디지털 카메라, 디지털 오디오 플레이어, 이동 전화기, 콘솔 비디오 게임 하드웨어, 또는 디지털 셋-탑 박스 등으로 구현될 수 있다.
전자 시스템(500)이 호스트(530)의 호스트 인터페이스(550)와 접속될 때, 호스트 인터페이스(550)는 마이크로프로세서(540)의 제어에 따라 카드 인터페이스(520)와 메모리 컨트롤러(100)를 통하여 불휘발성 메모리 장치(200)와 데이터 통신을 수행할 수 있다.
도 11은 도 1에 도시된 메모리 컨트롤러와 불휘발성 메모리 장치를 포함하는 전자 시스템의 또 다른 실시예에 따른 블록도이다.
도 1과 도 11을 참조하면, 전자 시스템(600)은 SSD(solid state drive)로 구현될 수 있다.
전자 시스템(600)은 메모리 컨트롤러(100), 복수의 불휘발성 메모리 장치들(200), 버퍼 매니저(620), 휘발성 메모리 장치(630), 및 호스트(640)를 포함할 수 있다.
메모리 컨트롤러(100)는 복수의 불휘발성 메모리 장치들(200) 각각의 데이터 처리 동작을 제어할 수 있다.
버퍼 매니저(620)는 메모리 컨트롤러(100)와 호스트(640) 사이에서 주고받는 데이터를 휘발성 메모리 장치(630)에 저장하는 것을 제어할 수 있다.
휘발성 메모리 장치(630)는 메모리 컨트롤러(100)와 호스트(640) 사이에서 주고받는 데이터를 버퍼링할 수 있다. 예를 들어, 휘발성 메모리 장치(630)는 DRAM(dynamic random access memory)으로 구현될 수 있다.
도 12는 도 1에 도시된 데이터 저장 장치를 포함하는 전자 시스템의 또 다른 실시예에 따른 블록도이다.
도 1 및 도 12를 참조하면, RAID(redundant array of independent disks) 시스템으로 구현될 수 있는 데이터 처리 시스템(700)은 RAID 컨트롤러(710)와 다수의 메모리 시스템들(700-1~700-n, n은 자연수)을 포함할 수 있다.
다수의 메모리 시스템들(700-1~700-n) 각각은 도 1에 도시된 데이터 저장 장치(20)일 수 있다. 다수의 메모리 시스템들(700-1~700-n)은 RAID 어레이(array)를 구성할 수 있다. 예를 들어, 데이터 처리 시스템(700)은 PC(personal computer) 또는 SSD로 구현될 수 있다.
프로그램 동작이 수행되는 동안, RAID 컨트롤러(710)는 호스트(HOST)로부터 출력된 프로그램 명령에 따라 호스트(HOST)로부터 출력된 프로그램 데이터를 RAID 레벨에 따라 다수의 메모리 시스템들(700-1~700-n) 중에서 적어도 어느 하나로 전송할 수 있다.
리드 동작이 수행되는 동안, RAID 컨트롤러(710)는 호스트(HOST)로부터 출력된 리드 명령에 따라 다수의 메모리 시스템들(700-1~700-n) 중에서 적어도 어느 하나의 메모리 시스템으로부터 리드된 데이터를 호스트(HOST)로 전송할 수 있다.
도 12의 호스트(HOST)는 도 1의 호스트(10)를 의미할 수 있다.
도 13은 본 발명의 일 실시예에 따른 전자 시스템의 블록도이다.
도 1과 도 13을 참조하면, 도 1의 전자 시스템(1)은 도 13의 전자 시스템(1000)으로 구현될 수 있다. 전자 시스템(1000)은 MIPI®(mobile industry processor interface)를 사용 또는 지원할 수 있는 데이터 처리 장치, 예컨대, PDA (personal digital assistants), PMP(portable multimedia player), IPTV(internet protocol television) 또는 스마트 폰(smart phone)으로 구현될 수 있다.
애플리케이션 프로세서(1010)에 구현된 CSI 호스트(camera serial interface(CSI) host; 1012)는 카메라 시리얼 인터페이스를 통하여 이미지 센서(1040)의 CSI 장치(1041)와 시리얼 통신할 수 있다. 이때, 예를 들어, CSI 호스트(1012)는 디시리얼라이저(deserializer(DES))를 포함할 수 있고, CSI 장치(1041)는 시리얼라이저(serializer(SER))를 포함할 수 있다.
애플리케이션 프로세서(1010)에 구현된 DSI 호스트(1011)는 디스플레이 시리얼 인터페이스(display serial interface(DSI))를 통하여 디스플레이(1050)의 DSI 장치(1051)와 시리얼 통신할 수 있다. 이때, 예를 들어, DSI 호스트(1011)는 시리얼라이저(SER)를 포함할 수 있고, DSI 장치(1051)는 디시리얼라이저(DES)를 포함할 수 있다.
예를 들어, 전자 시스템(1000)은 애플리케이션 프로세서(1010)와 통신할 수 있는 RF 칩(1060)을 더 포함할 수 있다. 애플리케이션 프로세서(1010)에 포함된 PHY(PHYsical layer; 1013)와 RF 칩(1060)에 포함된 PHY(1061)는 MIPI DigRF에 따라 데이터를 주고받을 수 있다.
예를 들어, 전자 시스템(1000)은 GPS(1020), 스토리지(storage; 1070), 마이크로폰(microphone(MIC); 1080), DRAM(dynamic random access memory; 1085), 및 스피커(speaker; 1090)를 더 포함할 수 있다.
도 1의 호스트(10)는 도 13의 AP(1010)로 구현되고, 도 1의 데이터 저장 장치(20)는 도 13의 스토리지91070)로 구현될 수 있다.
전자 시스템(1000)은 Wimax(world interoperability for microwave access; 1030) 모듈, WLAN(wireless lan; 1100) 모듈 및/또는 UWB(ultra wideband; 1110) 모듈 등을 이용하여 통신할 수 있다.
이상에서 설명된 장치는 하드웨어 구성요소, 소프트웨어 구성요소, 및/또는 하드웨어 구성요소 및 소프트웨어 구성요소의 조합으로 구현될 수 있다. 예를 들어, 실시예들에서 설명된 장치 및 구성요소는, 예를 들어, 프로세서, 콘트롤러, ALU(arithmetic logic unit), 디지털 신호 프로세서(digital signal processor), 마이크로컴퓨터, FPGA(field programmable gate array), PLU(programmable logic unit), 마이크로프로세서, 또는 명령(instruction)을 실행하고 응답할 수 있는 다른 어떠한 장치와 같이, 하나 이상의 범용 컴퓨터 또는 특수 목적 컴퓨터를 이용하여 구현될 수 있다. 처리 장치는 운영 체제(OS) 및 상기 운영 체제 상에서 수행되는 하나 이상의 소프트웨어 애플리케이션을 수행할 수 있다. 또한, 처리 장치는 소프트웨어의 실행에 응답하여, 데이터를 접근, 저장, 조작, 처리 및 생성할 수도 있다. 이해의 편의를 위하여, 처리 장치는 하나가 사용되는 것으로 설명된 경우도 있지만, 해당 기술분야에서 통상의 지식을 가진 자는, 처리 장치가 복수 개의 처리 요소(processing element) 및/또는 복수 유형의 처리 요소를 포함할 수 있음을 알 수 있다. 예를 들어, 처리 장치는 복수 개의 프로세서 또는 하나의 프로세서 및 하나의 콘트롤러를 포함할 수 있다. 또한, 병렬 프로세서(parallel processor)와 같은, 다른 처리 구성(processing configuration)도 가능하다.
소프트웨어는 컴퓨터 프로그램(computer program), 코드(code), 명령(instruction), 또는 이들 중 하나 이상의 조합을 포함할 수 있으며, 원하는 대로 동작하도록 처리 장치를 구성하거나 독립적으로 또는 결합적으로(collectively) 처리 장치를 명령할 수 있다. 소프트웨어 및/또는 데이터는, 처리 장치에 의하여 해석되거나 처리 장치에 명령 또는 데이터를 제공하기 위하여, 어떤 유형의 기계, 구성요소(component), 물리적 장치, 가상 장치(virtual equipment), 컴퓨터 저장 매체 또는 장치, 또는 전송되는 신호 파(signal wave)에 영구적으로, 또는 일시적으로 구체화(embody)될 수 있다. 소프트웨어는 네트워크로 연결된 컴퓨터 시스템 상에 분산되어서, 분산된 방법으로 저장되거나 실행될 수도 있다. 소프트웨어 및 데이터는 하나 이상의 컴퓨터 판독 가능 기록 매체에 저장될 수 있다.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 상기된 하드웨어 장치는 실시예의 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
이상과 같이 실시예들이 비록 한정된 실시예와 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 상기의 기재로부터 다양한 수정 및 변형이 가능하다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.
그러므로, 다른 구현들, 다른 실시예들 및 특허청구범위와 균등한 것들도 후술하는 특허청구범위의 범위에 속한다.

Claims (18)

  1. 호스트로부터 전송된 복수의 데이터를 로우 방향으로 인코딩하여 제1 패리티 코드들을 생성하는 단계;
    상기 복수의 데이터를 컬럼 방향으로 인코딩하여 제2 패리티 코드들을 생성하는 단계; 및
    상기 제1 패리티 코드들 및 상기 제2 패리티 코드들에 포함된 제로 패딩 비트들에 기초하여 상기 복수의 데이터, 상기 제1 패리티 코드들, 및 상기 제2 패리티 코드들을 정렬하는 단계
    를 포함하는 BCH 인코더의 동작 방법.
  2. 제1항에 있어서,
    상기 정렬하는 단계는,
    상기 제1 패리티 코드들 및 상기 제2 패리티 코드들로부터 상기 제로 패딩 비트들을 삭제하는 단계; 및
    상기 제로 패딩 비트들이 삭제된 상기 제1 패리티 코드들 및 상기 제2 패리티 코드들을 비트 단위로 상기 복수의 데이터와 함께 정렬하는 단계
    를 포함하는 BCH 인코더의 동작 방법.
  3. 제1항에 있어서,
    상기 제2 패리티 코드들을 생성하는 단계는,
    상기 복수의 데이터를 인터리빙하는 단계; 및
    인터리빙된 복수의 데이터에 기초하여 상기 복수의 데이터를 컬럼 방향으로 인코딩하여 상기 제2 패리티 코드들을 생성하는 단계
    를 포함하는 BCH 인코더의 동작 방법.
  4. 제1항에 있어서,
    상기 복수의 데이터에 대한 CRC(Cyclic redundancy check) 코드를 생성하는 단계
    를 더 포함하는 BCH 인코더의 동작 방법.
  5. 호스트로부터 전송된 복수의 데이터를 로우 방향으로 인코딩하여 제1 패리티 코드들을 생성하는 로우 인코더;
    상기 복수의 데이터를 컬럼 방향으로 인코딩하여 제2 패리티 코드들을 생성하는 컬럼 인코더; 및
    상기 제1 패리티 코드들 및 상기 제2 패리티 코드들에 포함된 제로 패딩 비트들에 기초하여 상기 복수의 데이터, 상기 제1 패리티 코드들, 및 상기 제2 패리티 코드들을 정렬하는 정렬 모듈
    을 포함하는 BCH 인코더.
  6. 제5항에 있어서,
    상기 정렬 모듈은,
    상기 제1 패리티 코드들 및 상기 제2 패리티 코드들로부터 상기 제로 패딩 비트들을 삭제하고, 상기 제로 패딩 비트들이 삭제된 상기 제1 패리티 코드들 및 상기 제2 패리티 코드들을 비트 단위로 상기 복수의 데이터와 함께 정렬하는 BCH 인코더.
  7. 제5항에 있어서,
    상기 복수의 데이터를 인터리빙하는 인터리버
    를 더 포함하고,
    상기 컬럼 인코더는 인터리빙된 복수의 데이터에 기초하여 상기 복수의 데이터를 컬럼 방향으로 인코딩하여 상기 제2 패리티 코드들을 생성하는 BCH 인코더.
  8. 제5항에 있어서,
    상기 복수의 데이터에 대응하는 CRC(Cyclic redundancy check) 코드를 생성하는 CRC 코드 생성 모듈
    를 더 포함하는 BCH 인코더.
  9. 메모리 장치로부터 복수의 데이터와 패리티 코드들을 리드하는 단계; 및
    상기 패리티 코드들에 제로 패딩 비트들을 삽입하고, 상기 제로 패딩 비트들이 삽입된 상기 패리티 코드들을 바이트 단위로 상기 복수의 데이터와 함께 정렬하는 단계
    를 포함하는 BCH 디코더의 동작 방법.
  10. 제9항에 있어서,
    제어 신호에 응답하여 상기 복수의 데이터를 바이패스 또는 상기 복수의 데이터를 디인터리빙(de-interleaving)하는 단계
    를 더 포함하는 BCH 디코더의 동작 방법.
  11. 제10항에 있어서,
    상기 복수의 데이터를 로우 방향 또는 컬럼 방향으로 디코딩하는 단계
    를 더 포함하는 BCH 디코더의 동작 방법.
  12. 제11항에 있어서,
    디코딩 결과에 기초하여 상기 복수의 데이터에 대한 디코딩의 반복 횟수를 결정하는 단계
    를 더 포함하는 BCH 디코더의 동작 방법.
  13. 메모리 장치로부터 복수의 데이터와 패리티 코드들을 리드하고, 상기 패리티 코드들에 제로 패딩 비트들을 삽입하고, 상기 제로 패딩 비트들이 삽입된 패리티 코드들을 바이트 단위로 상기 복수의 데이터와 함께 정렬하는 정렬 모듈; 및
    상기 복수의 데이터에 대한 디코딩을 제어하기 위한 제어 신호를 생성하는 디코딩 제어 모듈
    을 포함하는 BCH 디코더.
  14. 제13항에 있어서,
    상기 제어 신호에 응답하여 상기 복수의 데이터를 바이패스 또는 상기 복수의 데이터를 디인터리빙하는 디인터리버
    를 더 포함하는 BCH 디코더.
  15. 제14항에 있어서,
    상기 복수의 데이터를 로우 방향 또는 컬럼 방향으로 디코딩하고, 디코딩 결과를 상기 디코딩 제어 모듈로 출력하는 디코더
    를 더 포함하는 BCH 디코더.
  16. 제15항에 있어서,
    상기 제어 신호가 제1 레벨일 때,
    상기 디인터리버는 상기 복수의 데이터를 바이패스하고, 상기 디코더는 상기 복수의 데이터를 로우 방향으로 디코딩하는 BCH 디코더.
  17. 제15항에 있어서,
    상기 제어 신호가 제2 레벨일 때,
    상기 디인터리버는 상기 복수의 데이터를 디인터리버하고, 상기 디코더는 디인터리버된 복수의 데이터에 기초하여 상기 복수의 데이터를 컬럼 방향으로 디코딩하는 BCH 디코더.
  18. 제15항에 있어서,
    상기 디코딩 제어 모듈은 상기 디코딩 결과에 기초하여 상기 복수의 데이터에 대한 디코딩의 반복 횟수를 결정하는 BCH 디코더.
KR1020150078978A 2015-06-04 2015-06-04 Bch 인코더, bch 디코더, 이를 포함하는 시스템, 및 이의 동작 방법 KR20160143005A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020150078978A KR20160143005A (ko) 2015-06-04 2015-06-04 Bch 인코더, bch 디코더, 이를 포함하는 시스템, 및 이의 동작 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020150078978A KR20160143005A (ko) 2015-06-04 2015-06-04 Bch 인코더, bch 디코더, 이를 포함하는 시스템, 및 이의 동작 방법

Publications (1)

Publication Number Publication Date
KR20160143005A true KR20160143005A (ko) 2016-12-14

Family

ID=57575999

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020150078978A KR20160143005A (ko) 2015-06-04 2015-06-04 Bch 인코더, bch 디코더, 이를 포함하는 시스템, 및 이의 동작 방법

Country Status (1)

Country Link
KR (1) KR20160143005A (ko)

Similar Documents

Publication Publication Date Title
CN110399311B (zh) 存储器系统及该存储器系统的操作方法
US10331514B2 (en) Tiered error correction code (ECC) operations in memory
US10460774B2 (en) Apparatus and method capable of removing duplication write of data in memory
CN107229577B (zh) 存储系统及其操作方法
KR102081588B1 (ko) Ecc 디코더의 동작 방법 및 그것을 포함하는 메모리 컨트롤러
CN106169312B (zh) 用于快闪存储的广义乘积码
US9136872B2 (en) Memory, memory system, and error checking and correcting method for memory
KR102275717B1 (ko) 플래시 메모리 시스템 및 그의 동작 방법
CN110473582B (zh) 存储器系统及其操作方法
KR102611292B1 (ko) 메모리 시스템 및 메모리 시스템의 동작 방법
US20110125975A1 (en) Interleaving apparatuses and memory controllers having the same
CN106445749B (zh) 使用独立磁盘冗余阵列的动态自动调谐的最大延迟的减小
US11023160B2 (en) Controller and operating method thereof
US11194661B1 (en) Memory system for accessing data in stripe form and operating method thereof
CN106158046B (zh) 用于turbo乘积码的误校正避免
CN108108122B (zh) 控制器和存储器系统及其操作方法
US11281381B2 (en) Storage node of distributed storage system and method of operating the same
CN110275844B (zh) 利用自适应阈值解码的存储器系统及其操作方法
KR102513782B1 (ko) 컨트롤러 및 그것의 동작 방법
KR20160143005A (ko) Bch 인코더, bch 디코더, 이를 포함하는 시스템, 및 이의 동작 방법
US10141072B2 (en) Efficient encoder based on modified RU algorithm
KR20160143010A (ko) 메모리 컨트롤러, 이를 포함하는 시스템, 및 이의 동작 방법
CN110047554B (zh) 具有超级芯片删除恢复的存储器系统及其操作方法
US10768821B2 (en) Memory system and method of operating the same
CN108073469B (zh) 用于通用产品代码的数据映射方案