KR20180082927A - 메모리장치의 에러정정장치 및 에러정정방법과, 에러정정장치를 포함하는 메모리 컨트롤러 - Google Patents

메모리장치의 에러정정장치 및 에러정정방법과, 에러정정장치를 포함하는 메모리 컨트롤러 Download PDF

Info

Publication number
KR20180082927A
KR20180082927A KR1020170004430A KR20170004430A KR20180082927A KR 20180082927 A KR20180082927 A KR 20180082927A KR 1020170004430 A KR1020170004430 A KR 1020170004430A KR 20170004430 A KR20170004430 A KR 20170004430A KR 20180082927 A KR20180082927 A KR 20180082927A
Authority
KR
South Korea
Prior art keywords
data
scrambled
error correction
outputting
receiving
Prior art date
Application number
KR1020170004430A
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 KR1020170004430A priority Critical patent/KR20180082927A/ko
Priority to US15/653,792 priority patent/US10691530B2/en
Publication of KR20180082927A publication Critical patent/KR20180082927A/ko
Priority to US16/884,377 priority patent/US11269721B2/en

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1044Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices with specific ECC/EDC distribution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1012Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1048Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1068Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30029Logical and Boolean instructions, e.g. XOR, NOT
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/52Protection of memory contents; Detection of errors in memory contents
    • 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/35Unequal or adaptive error protection, e.g. by providing a different level of protection according to significance of source information or by adapting the coding according to the change of transmission channel characteristics
    • H03M13/353Adaptation to the channel
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04KSECRET COMMUNICATION; JAMMING OF COMMUNICATION
    • H04K1/00Secret communication
    • H04K1/04Secret communication by frequency scrambling, i.e. by transposing or inverting parts of the frequency band or by inverting the whole band
    • 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

Abstract

에러정정장치는, 오리지널 데이터를 입력받아 랜덤화하여 스크램블링된 데이터를 출력하는 스크램블러와, 스크램블링된 데이터를 입력받아 메모리장치에 쓰여질 인코딩된 데이터를 출력하는 에러정정코드 인코더와, 메모리장치로부터 읽은 인코딩된 데이터에 대해 에러정정코드 디코딩을 수행하여 에러 정정된 디코딩된 데이터를 출력하는 에러정정코드 디코더와, 그리고 디코딩된 데이터를 입력받아 스크램블러에 의해 랜덤화된 데이터의 비트 배열을 오리지널 데이터의 데이터 비트 배열로 복원하는 디스크램블러를 포함한다.

Description

메모리장치의 에러정정장치 및 에러정정방법과, 에러정정장치를 포함하는 메모리 컨트롤러{Apparatus and method for correcting error of memory device and memory controller including the apparatus for correcting error of memory device}
본 개시의 여러 실시예들은 메모리장치의 에러정정장치에 관한 것으로서, 특히 메모리장치의 소프트 에러(soft error) 및 노이즈(noise)에 의한 오동작이 억제되도록 하는 메모리장치의 에러정정장치 및 에러정정방법과, 에러정정장치를 포함하는 메모리 컨트롤러에 관한 것이다.
불휘발성(non-volatile) 메모리는 전원이 공급되지 않아도 저장된 데이터가 유지되는 메모리로서, 이를 기반으로 하는 데이터 저장장치는 스마트폰, 디지털 카메라 등 포터블 기기 및 컴퓨터 등에 널리 사용되고 있다. 불휘발성 메모리, 특히 낸드(NAND) 메모리의 집적도는, 미세 공정을 사용하여 셀의 크기와 회로 선폭을 줄이는 기술 및 셀 당 저장할 수 있는 비트 수를 늘려주는 멀티-레벨 셀(multi-level cell; 이하 MLC) 기술에 의해 향상되었다. 최근에는 기존의 2차원 형태인 플래너(planar) 구조가 갖는 미세 공정화의 한계를 극복하고 메모리의 집적도를 지속적으로 높이기 위한 새로운 기술로 셀을 3차원 배열 형태로 구성하는 수직형(vertical) 구조가 개발되었다.
메모리의 집적도를 높이기 위한 미세 공정화 및 MLC화는 메모리 자체의 신뢰성을 하락시키는 원인이 되고 있다. 공정 미세화로 인한 회로 선폭 감소에 의한 셀 간 간섭(cell-to-cell interference)에 취약해지고, MLC화로 각 레벨 간의 간격이 줄어들어 인접 레벨 간 겹치는 영역이 증가하기 때문이다. 이와 같이 메모리 자체의 오류가 증가하는 상황에서, 데이터 저장 장치의 신뢰성을 높은 수준으로 보장하기 위해서는 에러 정정 코드(Error Correction Code; 이하 ECC) 기술을 사용할 필요가 있다.
한편 상변화 램(PCRAM; Phase Change RAM), 자기메모리(MRAM; Magnetoresistive RAM), 나노 플로팅 게이트 메모리(NFGM; Nano Floating Gate Memory), 저항성 램(RRAM; Resistive RAM), 또는 폴리머 램(Polymer RAM)과 같이 최근 활발하게 연구가 이루어지고 있는 불휘발성 메모리의 경우, 셀 특성으로 인하여 데이터 "0"과 데이터 "1"을 구분하는 리드 마진(read margin)이 상대적으로 작다. 이와 같은 불휘발성 메모리는, 싱글 레벨 셀(single-level cell)의 구조를 갖더라도 낸드 메모리에 비하여 상대적으로 높은 에러율(error rate)을 나타내며, 그 결과 ECC 기술의 적용에 대한 요구가 더욱 더 크다.
본 출원이 해결하고자 하는 과제는, 메모리장치의 소프트 에러 및 노이즈에 의한 오동작이 억제되도록 하는 메모리장치의 에러정정장치 및 에러정정방법을 제공하는 것이다.
본 출원이 해결하고자 하는 다른 과제는, 위와 같은 메모리장치의 에러정정장치를 포함하는 메모리 컨트롤러를 제공하는 것이다.
본 개시의 일 예에 따른 에러정정장치는, 오리지널 데이터를 입력받아 랜덤화하여 스크램블링된 데이터를 출력하는 스크램블러와, 스크램블링된 데이터를 입력받아 메모리장치에 쓰여질 인코딩된 데이터를 출력하는 에러정정코드 인코더와, 메모리장치로부터 읽은 인코딩된 데이터에 대해 에러정정코드 디코딩을 수행하여 에러 정정된 디코딩된 데이터를 출력하는 에러정정코드 디코더와, 그리고 디코딩된 데이터를 입력받아 스크램블러에 의해 랜덤화된 데이터의 비트 배열을 오리지널 데이터의 데이터 비트 배열로 복원하는 디스크램블러를 포함한다.
본 개시의 다른 예에 따른 에러정정장치는, 오리지널 데이터를 입력받아 랜덤화하여 스크램블링된 데이터를 출력하는 스크램블러와, 오리지널 데이터 및 스크램블링된 데이터를 입력받아 두 데이터의 랜덤화 정도를 분석하여 제1 제어선택신호를 발생시키는 랜덤화 체커와, 오리지널 데이터 및 스크램블링된 데이터를 입력받고, 제1 제어선택신호에 응답하여 오리지널 데이터 및 스크램블링된 데이터 중 선택된 어느 하나의 데이터를 출력시키는 스크램블링 선택기와, 스크램블링 선택기로부터 출력되는 데이터를 입력받아 메모리장치에 쓰여질 인코딩된 데이터를 출력하는 에러정정코드 인코더와, 메모리장치로부터 읽은 인코딩된 데이터에 대해 에러정정코드 디코딩을 수행하여 에러 정정된 디코딩된 데이터를 출력하는 에러정정코드 디코더와, 디코딩된 데이터를 입력받아 제2 제어선택신호에 응답하여 디코딩된 데이터를 제1 경로 및 제2 경로 중 선택된 어느 하나의 경로로 출력하는 디스크램블링 선택기와, 그리고 제1 경로를 따라 디스크램블링 선택기로부터 디코딩된 데이터가 입력되는 경우 스크램블러에 의해 랜덤화된 데이터의 비트 배열을 오리지널 데이터의 데이터 비트 배열로 복원하는 디스크램블러를 포함한다.
본 개시의 또 다른 예에 따른 에러정정장치는, 오리지널 데이터를 입력받아 1차 랜덤화하여 제1 스크램블링된 데이터를 출력하는 제1 스크램블러와, 제1 스크램블링된 데이터를 입력받아 2차 랜덤화하여 제2 스크램블링된 데이터를 출력하는 제2 스크램블러와, 제2 스크램블링된 데이터를 입력받아 메모리장치에 쓰여질 인코딩된 데이터를 출력하는 에러정정코드 인코더와, 메모리장치로부터 읽은 인코딩된 데이터에 대해 에러정정코드 디코딩을 수행하여 에러 정정된 디코딩된 데이터를 출력하는 에러정정코드 디코더와, 디코딩된 데이터를 입력받아 제2 스크램블러에 의해 랜덤화된 데이터의 비트 배열이 제1 스크램블링된 데이터의 데이터 비트 배열로 복원되는 제1 디스크램블링된 데이터를 출력하는 제1 디스크램블러와, 그리고 제1 디스크램블링된 데이터를 입력받아 제1 스크램블러에 의해 랜덤화된 데이터의 비트 배열이 오리지널 데이터의 데이터 비트 배열로 복원되는 제2 디스크램블링된 데이터를 출력하는 제2 디스크램블러를 포함한다.
본 개시의 또 다른 예에 따른 에러정정장치는, 오리지널 데이터를 입력받아 1차 랜덤화하여 제1 스크램블링된 데이터를 출력하는 제1 스크램블러와, 제1 스크램블링된 데이터를 입력받아 2차 랜덤화하여 제2 스크램블링된 데이터를 출력하는 제2 스크램블러와, 오리지널 데이터, 제1 스크램블링된 데이터, 및 제2 스크램블링된 데이터를 입력받아 세 데이터의 랜덤화 정도를 분석하여 제1 제어선택신호를 발생시키는 랜덤화 체커와, 오리지널 데이터, 제1 스크램블링된 데이터, 및 제2 스크램블링된 데이터를 입력받고, 제1 제어선택신호에 응답하여 오리지널 데이터, 제1 스크램블링된 데이터, 및 제2 스크램블링된 데이터 중 선택된 어느 하나의 데이터를 출력시키는 스크램블링 선택기와, 스크램블링 선택기로부터 출력되는 데이터를 입력받아 메모리장치에 쓰여질 인코딩된 데이터를 출력하는 에러정정코드 인코더와, 메모리장치로부터 읽은 인코딩된 데이터에 대해 에러정정코드 디코딩을 수행하여 에러 정정된 디코딩된 데이터를 출력하는 에러정정코드 디코더와, 디코딩된 데이터를 입력받아 제2 제어선택신호에 응답하여 디코딩된 데이터를 제1 경로, 제2 경로, 및 제3 경로 중 선택된 어느 하나의 경로로 출력하는 디스크램블링 선택기와, 제1 경로를 따라 디스크램블링 선택기로부터 디코딩된 데이터가 입력되는 경우 제2 스크램블러에 의해 2차 랜덤화된 데이터의 비트 배열이 제1 스크램블링된 데이터의 데이터 비트 배열로 복원되는 제1 디스크램블링된 데이터를 출력하는 제1 디스크램블러와, 그리고 제1 디스크램블러로부터의 제1 디스크램블링된 데이터가 입력되는 경우 및 제2 경로를 따라 디스크램블링 선택기로부터 상기 디코딩된 데이터가 입력되는 경우 제1 스크램블러에 의해 1차 랜덤화된 데이터의 비트 배열이 오리지널 데이터의 데이터 비트 배열로 복원되는 제2 디스크램블링된 데이터를 출력하는 제2 디스크램블러를 포함한다.
본 개시의 여러 예들에 따른 메모리 컨트롤러는, 위와 같은 에러정정장치를 포함할 수 있다.
본 개시의 일 예에 따른 에러정정방법은, 오리지널 데이터를 랜덤화하는 스크램블링을 수행하여 스크램블링된 데이터를 발생시키는 단계와, 스크램블링된 데이터에 대한 에러정정코드 인코딩을 수행하여 메모리장치에 쓰여질 인코딩된 데이터를 발생시키는 단계와, 메모리장치로부터 읽은 인코딩된 데이터에 대해 에러정정코드 디코딩을 수행하여 에러 정정된 디코딩된 데이터를 출력하는 단계와, 그리고 디코딩된 데이터의 데이터 비트 배열을 스크램블링에 의해 랜덤화된 데이터의 비트 배열로부터 상기 오리지널 데이터의 데이터 비트 배열로 복원하는 디스크램블링 데이터를 발생시키는 단계를 포함한다.
본 개시의 다른 예에 따른 에러정정방법은, 오리지널 데이터를 입력받아 랜덤화하여 스크램블링된 데이터를 발생시키는 단계와, 오리지널 데이터 및 스크램블링된 데이터를 입력받아 두 데이터의 랜덤화 정도를 분석하여 제1 제어선택신호를 발생시키는 단계와, 제1 제어선택신호에 응답하여 오리지널 데이터 및 스크램블링된 데이터 중 하나의 데이터를 선택하는 단계와, 선택된 데이터에 대한 에러정정코드 인코딩을 수행하여 메모리장치에 쓰여질 인코딩된 데이터를 발생시키는 단계와, 메모리장치로부터 읽은 인코딩된 데이터에 대해 에러정정코드 디코딩을 수행하여 에러 정정된 디코딩된 데이터를 발생시키는 단계와, 그리고 제2 제어선택신호에 응답하여, 디코딩된 데이터를 외부로 직접 출력시키거나, 또는 상기 랜덤화에 의해 스크램블링된 데이터의 비트 배열에서 오리지널 데이터의 데이터 비트 배열로 복원되는 디스크램블링된 데이터를 발생시키는 단계를 포함한다.
본 개시의 또 다른 예에 따른 에러정정방법은, 오리지널 데이터를 입력받아 1차 랜덤화하는 제1 스크램블링을 수행하여 제1 스크램블링된 데이터를 발생시키는 단계와, 제1 스크램블링된 데이터를 2차 랜덤화하는 제2 스크램블링을 수행하여 제2 스크램블링된 데이터를 발생시키는 단계와, 제2 스크램블링된 데이터에 대한 에러정정코드 인코딩을 수행하여 메모리장치에 쓰여질 인코딩된 데이터를 발생시키는 단계와, 메모리장치로부터 읽은 인코딩된 데이터에 대해 에러정정코드 디코딩을 수행하여 에러 정정된 디코딩된 데이터를 발생시키는 단계와, 디코딩된 데이터에 대한 제1 디스크램블링을 수행하여 제2 스크램블링에 의해 2차 랜덤화된 데이터의 비트 배열에서 제1 스크램블링된 데이터의 데이터 비트 배열로 복원되는 제1 디스크램블링된 데이터를 발생시키는 단계와, 그리고 제1 디스크램블링된 데이터에 대한 제2 디스크램블링을 수행하여 제1 스크램블링에 의해 1차 랜덤화된 데이터의 비트 배열에서 오리지널 데이터의 데이터 비트 배열로 복원되는 제2 디스크램블링된 데이터를 발생시키는 단계를 포함한다.
본 개시의 또 다른 예에 따른 에러정정방법은, 오리지널 데이터를 입력받아 1차 랜덤화하는 제1 스크램블링을 수행하여 제1 스크램블링된 데이터를 발생시키는 단계와, 제1 스크램블링된 데이터를 2차 랜덤화하는 제2 스크램블링을 수행하여 제2 스크램블링된 데이터를 발생시키는 단계와, 오리지널 데이터, 제1 스크램블링된 데이터, 및 제2 스크램블링된 데이터에 대한 랜덤화 정도를 분석하여 제1 제어선택신호를 발생시키는 단계와, 제1 제어선택신호에 응답하여 오리지널 데이터, 제1 스크램블링된 데이터, 및 제2 스크램블링된 데이터 중 하나의 데이터를 선택하는 단계와, 선택된 데이터에 대한 에러정정코드 인코딩을 수행하여 메모리장치에 쓰여질 인코딩된 데이터를 발생시키는 단계와, 메모리장치로부터 읽은 인코딩된 데이터에 대해 에러정정코드 디코딩을 수행하여 에러 정정된 디코딩된 데이터를 발생시키는 단계와, 제2 제어선택신호에 응답하여, 디코딩된 데이터를 외부로 직접 출력시키거나, 2차 랜덤화에 의해 제2 스크램블링된 데이터의 비트 배열에서 제1 스크램블링된 데이터의 데이터 비트 배열로 복원되는 제1 디스크램블링된 데이터를 발생시키거나, 또는 1차 랜덤화에 의해 제1 스크램블링된 데이터의 비트 배열에서 오리지널 데이터의 데이터 비트 배열로 복원되는 제2 디스크램블링된 데이터를 발생시키는 단계와, 그리고 제1 디스크램블링된 데이터가 발생되는 경우 1차 랜덤화에 의해 제1 스크램블링된 데이터의 비트 배열에서 오리지널 데이터의 데이터 비트 배열로 복원되는 제2 디스크램블링된 데이터를 발생시키는 단계를 포함한다.
여러 실시예들에 따르면, ECC 인코딩을 수행하기 전에 스크램블링이 수행되도록 함으로써 노이즈 및 소프트 에러에 의한 에러가 모두 정상적으로 정정되도록 할 수 있다는 이점이 제공된다.
도 1은 본 개시의 일 예에 따른 메모리 컨트롤러를 나타내 보인 블록도이다.
도 2 및 도 3은, 각각 도 1의 에러정정장치의 스크램블링/ECC 인코딩부 및 에러정정장치의 디스크램블링/ECC 디코딩부의 일 예를 나타내 보인 블록도들이다.
도 4 및 도 5는, 각각 도 1의 에러정정장치의 스크램블링/ECC 인코딩부 및 에러정정장치의 디스크램블링/ECC 디코딩부의 다른 예를 나타내 보인 블록도들이다.
도 6 및 도 7은, 각각 도 1의 에러정정장치의 스크램블링/ECC 인코딩부 및 에러정정장치의 디스크램블링/ECC 디코딩부의 또 다른 예를 나타내 보인 블록도들이다.
도 8 및 도 9는, 각각 도 1의 에러정정장치의 스크램블링/ECC 인코딩부 및 에러정정장치의 디스크램블링/ECC 디코딩부의 또 다른 예를 나타내 보인 블록도들이다.
도 10 및 도 11은, 각각 도 1의 에러정정장치의 스크램블링/ECC 인코딩부 및 에러정정장치의 디스크램블링/ECC 디코딩부의 또 다른 예를 나타내 보인 블록도들이다.
도 12는 도 2의 스크램블러의 일 예를 나타내 보인 회로도이다.
도 13 내지 도 20은 도 12의 스크램블러의 동작을 설명하기 위해 나타내 보인 회로도들이다.
도 21은 도 2의 스크램블러의 다른 예를 나타내 보인 회로도이다.
도 22 내지 도 31은 도 21의 스크램블러의 로직 구성을 위해 수행되는 XOR 연산식 도출 과정을 설명하기 위해 나타내 보인 도면들이다.
본 출원의 예의 기재에서 "제1" 및 "제2"와 같은 기재는 부재를 구분하기 위한 것이며, 부재 자체를 한정하거나 특정한 순서를 의미하는 것으로 사용된 것은 아니다. 또한, 어느 부재의 "상"에 위치하거나 "상부", "하부", 또는 "측면"에 위치한다는 기재는 상대적인 위치 관계를 의미하는 것이지 그 부재에 직접 접촉하거나 또는 사이 계면에 다른 부재가 더 도입되는 특정한 경우를 한정하는 것은 아니다. 또한, 어느 한 구성 요소가 다른 구성 요소에 "연결되어 있다"거나 "접속되어 있다"의 기재는, 다른 구성 요소에 전기적 또는 기계적으로 직접 연결되어 있거나 또는 접속되어 있을 수 있으며, 또는, 중간에 다른 별도의 구성 요소들이 개재되어 연결 관계 또는 접속 관계를 구성할 수도 있다.
도 1은 본 개시의 일 예에 따른 메모리 컨트롤러를 나타내 보인 블록도이다. 도 1을 참조하면, 본 예에 따른 메모리 컨트롤러(Memory Controller)(100)는 호스트(Host)와의 인터페이스를 수행하고, 또한 메모리장치(Memory Device)의 제어 및 액세스(access)를 제공한다. 일반적으로 "호스트"는 메모리 컨트롤러(100)에 데이터를 보내고 받는 시스템의 업스트림 파트(upstream part)를 의미할 수 있다. 메모리장치는, 낸드 플래시 메모리와 같은 일반적인 메모리이거나, 또는 상변화 램(PCRAM), 자기메모리(MRAM), 나노 플로팅 게이트 메모리(NFGM), 저항성 램(RRAM), 또는 폴리머 램(Polymer RAM)과 같은 뉴 메모리(new memory)일 수 있다. 메모리 컨트롤러(100)는 에러정정장치(200)를 포함할 수 있다. 에러정정장치(200)는, 스크램블링/ECC 인코딩부(scrambling/ECC encoding)(210)와, 디스크램블링/ECC 디코딩부(descrampbling/ECC decoding)(220)를 포함할 수 있다. 스크램블링/ECC 인코딩부(210)는, 호스트로부터의 명령에 의해 메모리장치에 쓰여질 오리지널 데이터에 대한 스크램블링 및 ECC 인코딩을 수행한다. 디스크램블링/ECC 디코딩부(220)는, 호스트로부터의 명령에 의해 메모리장치에서 읽은 리드 데이터에 대한 ECC 디코딩 및 디스크램블링을 수행한다.
도 2 및 도 3은, 각각 도 1의 에러정정장치의 스크램블링/ECC 인코딩부 및 에러정정장치의 디스크램블링/ECC 디코딩부의 일 예를 나타내 보인 블록도들이다. 먼저 도 2를 참조하면, 스크램블링/ECC 인코딩부(210-1)는 스크램블러(scrambler)(211) 및 ECC 인코더(ECC encoder)(212)를 포함하여 구성된다. 스크램블러(211)는, k비트의 오리지널 데이터(original data)를 입력받아 랜덤(random)화하여 k비트의 스크램블링된 데이터(scrambled data)를 생성하여 출력한다. 오리지널 데이터의 비트 데이터들 중에서 "0" 또는 "1"의 동일한 데이터가 연속적으로 배치되는 경우, 메모리장치에 기록되는 과정에서 노이즈(noise) 효과가 발생될 수 있으며, 이 경우 메모리장치에 기록하는 과정에서 오류가 발생되는 기록 에러(write error)가 유발될 수 있다. 스크램블러(211)는, 이와 같이 노이즈에 의한 기록 에러를 억제하기 위한 것으로서, 오리지널 데이터의 비트 데이터들 중에서 "0" 또는 "1"의 동일한 데이터가 연속적으로 배치되는 비트 위치를 랜덤하게 변경하여 동일한 데이터가 연속적으로 배치되는 비트들의 수가 최소화되도록 한다. ECC 인코더(212)는, 스크램블러(211)로부터 k비트의 스크램블링된 데이터를 입력받아 ECC 인코딩을 수행하여 n비트의 인코딩된 데이터(encoded data)를 출력한다. 인코딩된 데이터는 메모리 컨트롤러(100)와 메모리장치 사이의 인터페이스 장치를 통해 메모리장치에 기록된다. n비트의 인코딩된 데이터는, k비트의 오리지널 데이터에 (n-k)비트의 패리티 비트들(parity bits)이 더해지는 구성을 갖는다.
다음에 도 3을 참조하면, 디스크램블링/ECC 디코딩부(220-1)는 ECC 디코더(ECC decoder)(221) 및 디스크램블러(descrambler)(222)를 포함하여 구성된다. ECC 디코더(221)는, 호스트로부터의 읽기 명령에 따라 메모리장치에 저장되어 있던 코드워드 형태의 리드 데이터(read data)를 입력받는다. 리드 데이터는 ECC 인코더(212)에 의해 ECC 인코딩된 데이터와 같이 k비트의 오리지널 데이터와 (n-k)비트의 패리티로 구성된다. ECC 디코더(221)는, 메모리장치에 쓰거나 읽는 과정에서 메모리장치 고유의 특성으로 인한 에러인 소프트 에러(soft error)에 의한 에러를 정정하기 위한 ECC 디코딩을 수행한다. 일 예에서, ECC 디코딩은 신드롬 연산, 에러 위치 다항식 연산, 에러 위치 연산, 및 에러 정정의 과정들을 통해 수행될 수 있다. 일 예에서, 에러 위치 다항식 연산은, BM(Berlekamp-Massey) 알고리즘을 사용하여 수행될 수 있다. 다른 예에서, ECC 디코딩은 BM 알고리즘이 변형된 RiBM(Reconfigured Inversionless BM) 알고리즘이나, 또는 SiBM(Simplified reconfigured Inversionless BM) 알고리즘을 사용하여 수행될 수 있다. ECC 디코더(221)는, ECC 디코딩에 의해 에러가 정정된 k비트의 디코딩된 데이터(decoded data)를 출력한다. 디스크램블러(222)는, k비트의 디코딩된 데이터(decoded data)를 입력받아 스크램블러(211)에 의해 랜덤화된 데이터의 비트 배열이 오리지널 데이터(original data)의 데이터 비트 배열로 복원된 디스크램블링된 데이터(descrambled data)를 출력한다.
ECC 인코딩이 수행된 후에 스크램블링이 수행되는 경우, ECC 디코딩이 수행되기 전에 디스크램블링이 이루어진다. 이 경우 스크램블링을 통해 ECC 인코딩이 수행된 인코딩된 데이터가 랜덤하게 배열된다. 따라서 메모리장치로 쓰거나 읽는 과정에서 연속적인 동일 데이터 배열로 인한 노이즈는 발생되지 않지만, 메모리장치의 소프트 에러에 의한 에러가 발생될 수 있다. 이 소프트 에러에 의한 에러가 발생되는 경우, 메모리장치로부터 디스크램블러에 입력되는 리드 데이터는, 스크램블러에 의해 스크램블링된 데이터와 달라질 수 있으며, 이 경우 ECC 디코딩을 수행하더라도 에러가 정정되지 않을 수 있다. 반면에 도 2 및 도 3을 참조하여 설명한 바와 같이, 본 예에 따른 에러정정장치(200)에 따르면, ECC 인코딩이 수행되기 전에 스크램블링이 먼저 수행된다. 이 경우 스크램블링을 먼저 수행하여 노이즈에 의한 에러를 억제한 후에 ECC 인코딩을 수행함으로써 메모리장치에 데이터를 쓰거나 읽을 때 메모리장치의 소프트 에러 특성만 반영된다. 이에 따라 메모리장치로부터 ECC 디코더(221)에 입력되는 리드 데이터는, 소프트 에러에 의한 에러만 반영된 데이터이며, ECC 디코딩에 의해 에러가 정정된 디코딩된 데이터를 출력시킨다. 이 디코딩된 데이터는, 스크램블러에 의해 스크램블링된 데이터와 동일하다.
도 4 및 도 5는, 각각 도 1의 에러정정장치의 스크램블링/ECC 인코딩부 및 에러정정장치의 디스크램블링/ECC 디코딩부의 다른 예를 나타내 보인 블록도들이다. 도 4 및 도 5에서 각각 도 2 및 도 3과 동일한 참조부호는 동일한 구성요소를 나타낸다. 먼저 도 4를 참조하면, 본 예에 따른 스크램블링/ECC 인코딩부(210-2)는, 스크램블링 판별기(scrambling discriminator)(231)와, 스크램블러(scrambler)(211)와, 그리고 ECC 인코더(ECC encoder)(212)를 포함하여 구성된다. 스크램블링 판별기(231)는, 입력되는 k비트의 오리지널 데이터(original data)에 대한 스크램블링 여부를 판단한다. 즉 오리지널 데이터의 비트 데이터들 중에서 "0" 또는 "1"의 동일한 데이터가 연속적으로 배치되어 노이즈 효과가 발생될 수 있는 경우, 스크램블링 판별기(231)는 입력되는 k비트의 오리지널 데이터를 스크램블러(211)에 입력시킨다. 이후의 동작은 도 2를 참조하여 설명한 바와 동일하다. 반면에 오리지널 데이터의 비트 데이터들 중에서 "0" 또는 "1"의 동일한 데이터가 연속적으로 배치되지 않아서 노이즈 효과에 의한 에러 발생 확율이 낮은 경우, 스크램블링 판별기(231)는 입력되는 k비트의 오리지널 데이터를 ECC 인코더(212)에 입력시킨다. 즉 이 경우 스크램블러(211)에 의한 스크램블링 동작은 생략된다.
다음에 도 5를 참조하면, 본 예에 따른 디스크램블링/ECC 디코딩부(220-2)는 ECC 디코더(ECC decoder)(221)와, 디스크램블러(descrambler)(222)와, 그리고 디스크램블링 판별기(descrambling discriminator)(232)를 포함하여 구성된다. 도 3을 참조하여 설명한 바와 동일하게, ECC 디코더(221)는, 호스트로부터의 읽기 명령에 따라 메모리장치에 저장되어 있던 코드워드 형태의 리드 데이터(read data)에 대한 ECC 디코딩을 수행하여 에러가 정정된 k비트의 디코딩된 데이터(decoded data)를 출력한다. 디코딩된 데이터는 디스크램블링 판별기(232)에 입력된다. 디스크램블링 판별기(232)는, 리드 데이터에 대해 ECC 인코딩 전에 스크램블링이 이루어진 데이터인지의 여부를 판단한다. 그리고 스크램블링이 이루어진 경우, 디스크램블러(222)에 디코딩된 데이터를 입력시켜, 디스크램블러(222)에 의한 데이터 복원을 수행한다. 반면에 스크램블링이 이루어지지 않는 경우, 디스크램블링 판별기(232)는, 디코딩된 데이터를 디스크램블러(222)에 입력시키지 않고 직접 호스트 인터페이스 또는 메모리 컨트롤러 내의 다른 장치로 전송되도록 한다.
도 6 및 도 7은, 각각 도 1의 에러정정장치의 스크램블링/ECC 인코딩부 및 에러정정장치의 디스크램블링/ECC 디코딩부의 또 다른 예를 나타내 보인 블록도들이다. 도 6 및 도 7에서 각각 도 2 및 도 3과 동일한 참조부호는 동일한 구성요소를 나타낸다. 먼저 도 6을 참조하면, 본 예에 따른 스크램블링/ECC 인코딩부(210-3)는 스크램블러(scrambler)(211)와, 랜덤화 체커(randomness checker)(241)와, 스크램블링 선택기(scrambling selector)(251)와, 그리고 ECC 인코더(ECC encoder)(212)를 포함하여 구성된다. 스크램블링/ECC 인코딩부(210-3)로 입력되는 k비트의 오리지널 데이터(original data)는, 스크램블러(211)와 스크램블링 선택기(251)에 공통으로 입력된다. 스크램블러(211)는, 입력되는 k비트의 오리지널 데이터에 대한 랜덤화를 수행하여 k비트의 스크램블링된 데이터(scrambled data)를 생성하여 출력한다. 이 스크램블링된 데이터는, 랜덤화 체커(241)와 스크램블링 선택기(251)에 공통으로 입력된다. 랜덤화 체커(241)는, 입력된 2개의 데이터, 즉 오리지널 데이터 및 스크램블링된 데이터 중에서 "0" 또는 "1"의 동일한 데이터가 연속적으로 배치되는 경우가 가장 적은 데이터를 선택한 후에 그에 따른 제1 제어선택신호(CS1)를 스크램블링 선택기(251)에 입력시킨다. 스크램블링 선택기(251)는, 제1 제어선택신호(CS1)에 응답하여, 스크램블링 선택기(251)에 입력된 오리지널 데이터 및 스크램블링된 데이터 중 하나를 ECC 인코더(212)에 입력시킨다. ECC 인코더(212)는, 스크램블링 선택기(251)로부터 출력되는 오리지널 데이터 또는 스크램블링된 데이터에 대한 ECC 인코딩을 수행하여 n비트의 인코딩된 데이터(encoded data)를 출력한다. 인코딩된 데이터는 메모리 컨트롤러(100)와 메모리장치 사이의 인터페이스 장치를 통해 메모리장치에 기록된다. 일 예에서 랜덤화 체커(241) 또는 스크램블링 선택기(251)는, 인코딩된 데이터가 쓰여질 메모리장치의 어드레스(address) 기준으로 스크램블링 정보가 저장되도록 하여, 이 스크램블링 정보가 그 인코딩된 데이터의 읽기 동작시에 이용될 수 있도록 할 수 있다.
다음에 도 7을 참조하면, 본 예에 따른 디스크램블링/ECC 디코딩부(220-3)는, ECC 디코더(ECC decoder)(221)와, 디스크램블링 선택기(descrambling selector)(252)와, 그리고 디스크램블러(descrambler)(222)를 포함하여 구성된다. ECC 디코더(221)는, 호스트로부터의 읽기 명령에 따라 메모리장치에 저장되어 있던 코드워드 형태의 n비트의 리드 데이터(read data)를 입력받는다. ECC 디코더(221)는, ECC 디코딩에 의해 에러가 정정된 k비트의 디코딩된 데이터(decoded data)를 출력한다. k비트의 디코딩된 데이터는 디스크램블링 선택기(252)에 입력된다. 디스크램블링 선택기(252)는, 제2 제어선택신호(CS2)에 응답하여 k비트의 디코딩된 데이터를 디스크램블러(222)에 입력하거나, 또는 에러정정장치(200) 외부로 직접 출력시킨다. 디스크램블링 선택기(252)에 입력되는 제2 제어선택신호(CS2)는, 메모리컨트롤러(200) 내의 다른 장치로부터 공급될 수 있다. 이 경우 이 다른 장치는, 메모리장치로부터의 리드 데이터가 저장되어 있는 어드레스(address) 기준으로 저장되는 스크램블링 정보를 기초로 제2 제어선택신호(CS2)를 발생시킬 수 있다.
제2 제어선택신호(CS2)가 스크램블링이 이루어지지 않았다는 스크램블링 정보에 해당하는 경우, 디스크램블링 선택기(22)는 디코딩된 데이터를 에러정정장치(200) 외부로 직접 출력시킨다(route A). 제2 제어선택신호(CS2)가 스크램블러(도 6의 211)에 의한 스크램블링이 이루어졌다는 스크램블링 정보에 해당하는 경우, 디스크램블링 선택기(252)는 디코딩된 데이터를 디스크램블러(222)에 입력시킨다(route B). 디스크램블러(222)는, k비트의 디코딩된 데이터(decoded data)를 입력받아 스크램블러(도 6의 211)에 의해 랜덤화된 데이터의 비트 배열이 k비트의 스크램블링된 데이터(scrambled data)의 데이터 비트 배열로 복원된 디스크램블링된 데이터(descrambled data)를 출력한다.
도 8 및 도 9는, 각각 도 1의 에러정정장치의 스크램블링/ECC 인코딩부 및 에러정정장치의 디스크램블링/ECC 디코딩부의 또 다른 예를 나타내 보인 블록도들이다. 도 8 및 도 9에서 각각 도 2 및 도 3과 동일한 참조부호는 동일한 구성요소를 나타낸다. 먼저 도 8을 참조하면, 본 예에 따른 스크램블링/ECC 인코딩부(210-4)는 제1 스크램블러(1st scrambler)(211A)와, 제2 스크램블러(2nd scrambler)(211B)와, 그리고 ECC 인코더(ECC encoder)(212)를 포함하여 구성된다. 제1 스크램블러(211A)는, k비트의 오리지널 데이터(original data)를 입력받아 1차 랜덤(random)화하여 k비트의 제1 스크램블링된 데이터(1st scrambled data)를 생성하여 출력한다. 제2 스크램블러(211B)는, k비트의 제1 스크램블링된 데이터를 입력받아 2차 랜덤화하여 k비트의 제2 스크램블링된 데이터(2nd scrambled data)를 생성하여 출력한다. ECC 인코더(212)는, 제2 스크램블러(211)로부터 k비트의 제2 스크램블링된 데이터를 입력받아 ECC 인코딩을 수행하여 n비트의 인코딩된 데이터(encoded data)를 출력한다. 인코딩된 데이터는 메모리 컨트롤러(100)와 메모리장치 사이의 인터페이스 장치를 통해 메모리장치에 기록된다.
다음에 도 9를 참조하면, 본 예에 따른 디스크램블링/ECC 디코딩부(220-4)는, ECC 디코더(ECC decoder)(221)와, 제1 디스크램블러(1st descrambler)(222A)와, 그리고 제2 디스크램블러(2nd descrambler)(222B)를 포함하여 구성된다. ECC 디코더(221)는, 호스트로부터의 읽기 명령에 따라 메모리장치에 저장되어 있던 코드워드 형태의 n비트의 리드 데이터(read data)를 입력받는다. ECC 디코더(221)는, ECC 디코딩에 의해 에러가 정정된 k비트의 디코딩된 데이터(decoded data)를 출력한다. 제1 디스크램블러(222A)는, k비트의 디코딩된 데이터(decoded data)를 입력받아 제2 스크램블러(211B)에 의해 2차 랜덤화된 데이터의 비트 배열이 제1 스크램블링된 데이터의 데이터 비트 배열로 복원된 제1 디스크램블링된 데이터(1st descrambled data)를 출력한다. 제2 디스크램블러(222B)는, k비트의 제1 디스크램블링된 데이터(1st descrambled data)를 입력받아 제1 스크램블러(211A)에 의해 1차 랜덤화된 데이터의 비트 배열이 오리지널 데이터의 데이터 비트 배열로 복원된 제2 디스크램블링된 데이터(2nd descrambled data)를 출력한다.
도 10 및 도 11은, 각각 도 1의 에러정정장치의 스크램블링/ECC 인코딩부 및 에러정정장치의 디스크램블링/ECC 디코딩부의 또 다른 예를 나타내 보인 블록도들이다. 도 10 및 도 11에서 각각 도 8 및 도 9와 동일한 참조부호는 동일한 구성요소를 나타낸다. 먼저 도 10을 참조하면, 본 예에 따른 스크램블링/ECC 인코딩부(210-5)는 제1 스크램블러(1st scrambler)(211A)와, 제2 스크램블러(2nd scrambler)(211B)와, 랜덤화 체커(randomness checker)(261)와, 스크램블링 선택기(scrambling selector)(271)와, 그리고 ECC 인코더(ECC encoder)(212)를 포함하여 구성된다. 스크램블링/ECC 인코딩부(210-5)로 입력되는 k비트의 오리지널 데이터(original data)는, 제1 스크램블러(211A)와, 랜덤화 체커(261)와, 그리고 스크램블링 선택기(271)에 공통으로 입력된다. 제1 스크램블러(211A)는, 입력되는 k비트의 오리지널 데이터에 대한 1차 랜덤화를 수행하여 k비트의 제1 스크램블링된 데이터(1st scrambled data)를 생성하여 출력한다. 이 제1 스크램블링된 데이터는, 제2 스크램블러(211B)와, 랜덤화 체커(261)와, 그리고 스크램블링 선택기(271)에 공통으로 입력된다. 제2 스크램블러(211B)는, 입력되는 k비트의 제1 스크램블링된 데이터에 대한 2차 랜덤화를 수행하여 k비트의 제2 스크램블링된 데이터(2nd scrambled data)를 생성하여 출력한다. 이 제2 스크램블링된 데이터는, 랜덤화 체커(261) 및 스크램블링 선택기(271)에 공통으로 입력된다.
랜덤화 체커(261)는, 입력된 3개의 데이터, 즉 오리지널 데이터, 제1 스크램블링된 데이터, 및 제2 스크램블링된 데이터 중에서 "0" 또는 "1"의 동일한 데이터가 연속적으로 배치되는 경우가 가장 적은 데이터를 선택한 후에 그에 따른 제1 제어선택신호(CS3)를 스크램블링 선택기(271)에 입력시킨다. 스크램블링 선택기(271)는, 제1 제어선택신호(CS3)에 응답하여, 스크램블링 선택기(271)에 입력된 오리지널 데이터, 제1 스크램블링된 데이터, 및 제2 스크램블링된 데이터 중 어느 하나의 데이터를 ECC 인코더(212)에 입력시킨다. ECC 인코더(212)는, 스크램블링 선택기(271)로부터 입력되는 데이터에 대한 ECC 인코딩을 수행하여 n비트의 인코딩된 데이터(encoded data)를 출력한다. 인코딩된 데이터는 메모리 컨트롤러(100)와 메모리장치 사이의 인터페이스 장치를 통해 메모리장치에 기록된다. 일 예에서 랜덤화 체커(261) 또는 스크램블링 선택기(271)는, 인코딩된 데이터가 쓰여질 메모리장치의 어드레스(address) 기준으로 스크램블링 정보가 저장되도록 하여, 이 스크램블링 정보가 그 인코딩된 데이터의 읽기 동작시에 이용될 수 있도록 할 수 있다.
다음에 도 11을 참조하면, 본 예에 따른 디스크램블링/ECC 디코딩부(220-5)는, ECC 디코더(ECC decoder)(221)와, 디스크램블링 선택기(descrambling selector)(272)와, 제1 디스크램블러(1st descrambler)(222A)와, 그리고 제2 디스크램블러(2nd descrambler)(222B)를 포함하여 구성된다. ECC 디코더(221)는, 호스트로부터의 읽기 명령에 따라 메모리장치에 저장되어 있던 코드워드 형태의 n비트의 리드 데이터(read data)를 입력받는다. ECC 디코더(221)는, ECC 디코딩에 의해 에러가 정정된 k비트의 디코딩된 데이터(decoded data)를 출력한다. k비트의 디코딩된 데이터는 디스크램블링 선택기(272)에 입력된다. 디스크램블링 선택기(272)는, 제2 제어선택신호(CS4)에 응답하여 k비트의 디코딩된 데이터를 제1 디스크램블러(222A)에 입력하거나, 제2 디스크램블러(222B)에 입력하거나, 또는 에러정정장치(200) 외부로 직접 출력시킨다. 디스크램블링 선택기(272)에 입력되는 제2 제어선택신호(CS4)는, 메모리컨트롤러(200) 내의 다른 장치로부터 공급될 수 있다. 이 경우 이 다른 장치는, 메모리장치로부터의 리드 데이터가 저장되어 있는 어드레스(address) 기준으로 저장되는 스크램블링 정보를 기초로 제2 제어선택신호(CS4)를 발생시킬 수 있다.
제2 제어선택신호(CS4)가 스크램블링이 이루어지지 않았다는 스크램블링 정보에 해당하는 경우, 디스크램블링 선택기(272)는 디코딩된 데이터를 에러정정장치(200) 외부로 직접 출력시킨다(route A). 제2 제어선택신호(CS4)가 제1 스크램블러(도 10의 211A)에 의한 1차 스크램블링만 이루어졌다는 스크램블링 정보에 해당하는 경우, 디스크램블링 선택기(272)는 디코딩된 데이터를 제2 디스크램블러(222B)에 입력시킨다(route B). 제2 디스크램블러(222B)는, k비트의 디코딩된 데이터를 입력받아 제1 스크램블러(도 10의 211A)에 의해 1차 랜덤화된 데이터의 비트 배열이 오리지널 데이터의 데이터 비트 배열로 복원된 제2 디스크램블링된 데이터(2nd descrambled data)를 출력한다.
제2 제어선택신호(CS4)가 제1 스크램블러(도 8의 211A) 및 제2 스크램블러(도 8의 211B)에 의한 스크램블링이 모두 이루어졌다는 스크램블링 정보에 해당하는 경우, 디스크램블링 선택기(272)는 디코딩된 데이터를 제1 디스크램블러(222A)에 입력시킨다(route C). 제1 디스크램블러(222A)는, k비트의 디코딩된 데이터를 입력받아 제2 스크램블러(211B)에 의해 2차 랜덤화된 데이터의 비트 배열이 k비트의 제1 스크램블링된 데이터(1st scrambled data)의 데이터 비트 배열로 복원된 제1 디스크램블링된 데이터(1st descrambled data)를 출력한다. 제2 디스크램블러(222B)는, k비트의 제1 디스크램블링된 데이터(1st descrambled data)를 입력받아 제1 스크램블러(211A)에 의해 1차 랜덤화된 데이터의 비트 배열이 오리지널 데이터의 데이터 비트 배열로 복원된 제2 디스크램블링된 데이터(2nd descrambled data)를 출력한다.
도 12는 도 2의 스크램블러의 일 예를 나타내 보인 회로도이다. 본 예에 따른 스크램블러 구조는, 도 4 및 도 6의 스크램블러와, 도 8 및 도 10의 제1 및 제2 스크램블러에도 동일하게 적용될 수 있다. 도 12를 참조하면, 본 예에 따른 스크램블러(211-1)는 복수개의 저장소들을 갖는 리니어 피드백 쉬프트 레지스터(Linear Feedback Shift Register; 이하 LFSR)(310)를 포함한다. 본 예에서 LFSR(310)은 5개의 저장소들(S1-S5)을 갖지만, 이는 단지 하나의 예로서 저장소들의 개수는 더 적거나 많을 수도 있다. LFSR(310)의 저장소들(S1-S5) 중 제2 저장소(S2)의 데이터와 제5 저장소(S5)의 데이터는 제1 XOR 연산기(321)에 입력된다. 제1 XOR 연산기(321)는 제2 저장소(S2)의 데이터와 제5 저장소(S5)의 데이터에 대한 XOR 연산을 수행한 후에 그 결과 데이터를 출력한다. 제1 XOR 연산기(321)로부터 출력되는 데이터는, 제2 XOR 연산기(322)에 입력된다. 제2 XOR 연산기(322)는, 에러정정장치(도 1의 200)에 입력되는 입력 데이터, 예컨대 k비트의 오리지널 데이터의 첫번째 비트 데이터부터 마지막 비트 데이터에 이르기까지의 각 비트 데이터(D[0:k-1])를 순차적으로 입력받는다. 이에 따라 제2 XOR 연산기(322)는, 이 각 비트 데이터와 제1 XOR 연산기(321)로부터 출력되는 데이터에 대한 XOR 연산을 수행하여 출력한다. 제2 XOR 연산기(322)로부터 출력되는 데이터(SD[0:k-1])는 스크램블러(211)로부터 출력되는 스크램블된 데이터의 첫번째 비트 데이터부터 마지막 비트 데이터에 이르기까지의 각 비트 데이터를 순차적으로 구성한다.
도 13 내지 도 20은 도 10의 스크램블러의 동작의 일 예를 설명하기 위해 나타내 보인 회로도들이다. 본 예에서는 스크램블러에 입력되는 데이터, 예컨대 오리지널 데이터가 8비트의 데이터, 예컨대 "10000000"의 스트림을 갖는 경우를 예로 들기로 한다. 먼저 도 13을 참조하면, LFSR(310)은, 모든 저장소들(S1-S5)에 데이터 "0"이 저장된 상태로 리셋된다. 따라서 제1 XOR 연산기(321)에는 제2 저장소(S2)에 저장된 데이터 "0"과 제5 저장소(S5)에 저장된 데이터 "0"이 입력된다. 제1 XOR 연산기(321)는 데이터 "0" 및 데이터 "0"에 대한 XOR 연산 결과인 데이터 "0"을 출력하여 제2 XOR 연산기(322)에 입력시킨다. 오리지널 데이터의 첫번째 비트 데이터(D<0>) "1"이 제2 XOR 연산기(322)에 입력되면, 제2 XOR 연산기(322)는 입력 데이터들에 대한 XOR 연산을 수행하여 그 결과 데이터 "1"을 출력시킨다. 이 출력 데이터 "1"은, LFSR(310)의 제1 저장소로 입력되는 피드백 데이터를 구성하며, 또한 스크램블러(211)로부터 출력되는 스크램블링된 데이터의 첫번째 비트 데이터(SD<0>)를 구성한다.
다음에 도 14를 참조하면, LFSR(310)의 제1 저장소에 피드백 데이터인 "1"이 저장됨에 따라, LFSR(310)의 제1 내지 제5 저장소에는 각각 "1", "0", "0", "0", "0"의 데이터가 저장된다. 제1 XOR 연산기(321)에는 제2 저장소(S2)에 저장된 데이터 "0"과 제5 저장수(S5)에 저장된 데이터 "0"이 입력된다. 제1 XOR 연산기(321)는 데이터 "0" 및 데이터 "0"에 대한 XOR 연산 결과인 데이터 "0"을 출력하여 제2 XOR 연산기(322)에 입력시킨다. 오리지널 데이터의 두번째 비트 데이터(D<1>) "0"이 제2 XOR 연산기(322)에 입력되면, 제2 XOR 연산기(322)는 입력 데이터들에 대한 XOR 연산을 수행하여 그 결과 데이터 "0"을 출력시킨다. 이 출력 데이터 "0"은, LFSR(310)의 제1 저장소로 입력되는 피드백 데이터를 구성하며, 또한 스크램블러(211)로부터 출력되는 스크램블링된 데이터의 두번째 비트 데이터(SD<1>)를 구성한다.
다음에 도 15를 참조하면, LFSR(310)의 제1 저장소에 피드백 데이터인 "0"이 저장됨에 따라, LFSR(310)의 제1 내지 제5 저장소에는 각각 "0", "1", "0", "0", "0"의 데이터가 저장된다. 제1 XOR 연산기(321)에는 제2 저장소(S2)에 저장된 데이터 "1"과 제5 저장수(S5)에 저장된 데이터 "0"이 입력된다. 제1 XOR 연산기(321)는 데이터 "1" 및 데이터 "0"에 대한 XOR 연산 결과인 데이터 "1"을 출력하여 제2 XOR 연산기(322)에 입력시킨다. 오리지널 데이터의 세번째 비트 데이터(D<2>) "0"이 제2 XOR 연산기(322)에 입력되면, 제2 XOR 연산기(322)는 입력 데이터들에 대한 XOR 연산을 수행하여 그 결과 데이터 "1"을 출력시킨다. 이 출력 데이터 "1"은, LFSR(310)의 제1 저장소로 입력되는 피드백 데이터를 구성하며, 또한 스크램블러(211)로부터 출력되는 스크램블링된 데이터의 세번째 비트 데이터(SD<2>)를 구성한다.
다음에 도 16을 참조하면, LFSR(310)의 제1 저장소에 피드백 데이터인 "1"이 저장됨에 따라, LFSR(310)의 제1 내지 제5 저장소에는 각각 "1", "0", "1", "0", "0"의 데이터가 저장된다. 제1 XOR 연산기(321)에는 제2 저장소(S2)에 저장된 데이터 "0"과 제5 저장수(S5)에 저장된 데이터 "0"이 입력된다. 제1 XOR 연산기(321)는 데이터 "0" 및 데이터 "0"에 대한 XOR 연산 결과인 데이터 "0"을 출력하여 제2 XOR 연산기(322)에 입력시킨다. 오리지널 데이터의 네번째 비트 데이터(D<3>) "0"이 제2 XOR 연산기(322)에 입력되면, 제2 XOR 연산기(322)는 입력 데이터들에 대한 XOR 연산을 수행하여 그 결과 데이터 "0"을 출력시킨다. 이 출력 데이터 "0"은, LFSR(310)의 제1 저장소로 입력되는 피드백 데이터를 구성하며, 또한 스크램블러(211)로부터 출력되는 스크램블링된 데이터의 네번째 비트 데이터(SD<3>)를 구성한다.
다음에 도 17을 참조하면, LFSR(310)의 제1 저장소에 피드백 데이터인 "0"이 저장됨에 따라, LFSR(310)의 제1 내지 제5 저장소에는 각각 "0", "1", "0", "1", "0"의 데이터가 저장된다. 제1 XOR 연산기(321)에는 제2 저장소(S2)에 저장된 데이터 "1"과 제5 저장수(S5)에 저장된 데이터 "0"이 입력된다. 제1 XOR 연산기(321)는 데이터 "1" 및 데이터 "0"에 대한 XOR 연산 결과인 데이터 "1"을 출력하여 제2 XOR 연산기(322)에 입력시킨다. 오리지널 데이터의 다섯번째 비트 데이터(D<4>) "0"이 제2 XOR 연산기(322)에 입력되면, 제2 XOR 연산기(322)는 입력 데이터들에 대한 XOR 연산을 수행하여 그 결과 데이터 "1"을 출력시킨다. 이 출력 데이터 "1"은, LFSR(310)의 제1 저장소로 입력되는 피드백 데이터를 구성하며, 또한 스크램블러(211)로부터 출력되는 스크램블링된 데이터의 다섯번째 비트 데이터(SD<4>)를 구성한다.
다음에 도 18을 참조하면, LFSR(310)의 제1 저장소에 피드백 데이터인 "1"이 저장됨에 따라, LFSR(310)의 제1 내지 제5 저장소에는 각각 "1", "0", "1", "0", "1"의 데이터가 저장된다. 제1 XOR 연산기(321)에는 제2 저장소(S2)에 저장된 데이터 "0"과 제5 저장수(S5)에 저장된 데이터 "1"이 입력된다. 제1 XOR 연산기(321)는 데이터 "0" 및 데이터 "1"에 대한 XOR 연산 결과인 데이터 "1"을 출력하여 제2 XOR 연산기(322)에 입력시킨다. 오리지널 데이터의 여섯번째 비트 데이터(D<5>) "0"이 제2 XOR 연산기(322)에 입력되면, 제2 XOR 연산기(322)는 입력 데이터들에 대한 XOR 연산을 수행하여 그 결과 데이터 "1"을 출력시킨다. 이 출력 데이터 "1"은, LFSR(310)의 제1 저장소로 입력되는 피드백 데이터를 구성하며, 또한 스크램블러(211)로부터 출력되는 스크램블링된 데이터의 여섯번째 비트 데이터(SD<5>)를 구성한다.
다음에 도 19를 참조하면, LFSR(310)의 제1 저장소에 피드백 데이터인 "1"이 저장됨에 따라, LFSR(310)의 제1 내지 제5 저장소에는 각각 "1", "1", "0", "1", "0"의 데이터가 저장된다. 제1 XOR 연산기(321)에는 제2 저장소(S2)에 저장된 데이터 "1"과 제5 저장수(S5)에 저장된 데이터 "0"이 입력된다. 제1 XOR 연산기(321)는 데이터 "1" 및 데이터 "0"에 대한 XOR 연산 결과인 데이터 "1"을 출력하여 제2 XOR 연산기(322)에 입력시킨다. 오리지널 데이터의 일곱번째 비트 데이터(D<6>) "0"이 제2 XOR 연산기(322)에 입력되면, 제2 XOR 연산기(322)는 입력 데이터들에 대한 XOR 연산을 수행하여 그 결과 데이터 "1"을 출력시킨다. 이 출력 데이터 "1"은, LFSR(310)의 제1 저장소로 입력되는 피드백 데이터를 구성하며, 또한 스크램블러(211)로부터 출력되는 스크램블링된 데이터의 일곱번째 비트 데이터(SD<6>)를 구성한다.
다음에 도 20을 참조하면, LFSR(310)의 제1 저장소에 피드백 데이터인 "1"이 저장됨에 따라, LFSR(310)의 제1 내지 제5 저장소에는 각각 "1", "1", "1", "0", "1"의 데이터가 저장된다. 제1 XOR 연산기(321)에는 제2 저장소(S2)에 저장된 데이터 "1"과 제5 저장수(S5)에 저장된 데이터 "1"이 입력된다. 제1 XOR 연산기(321)는 데이터 "1" 및 데이터 "1"에 대한 XOR 연산 결과인 데이터 "0"을 출력하여 제2 XOR 연산기(322)에 입력시킨다. 오리지널 데이터의 여덟번째 비트 데이터(D<7>) "0"이 제2 XOR 연산기(322)에 입력되면, 제2 XOR 연산기(322)는 입력 데이터들에 대한 XOR 연산을 수행하여 그 결과 데이터 "1"을 출력시킨다. 이 출력 데이터 "1"은, LFSR(310)의 제1 저장소로 입력되는 피드백 데이터를 구성하며, 또한 스크램블러(211)로부터 출력되는 스크램블링된 데이터의 여덟번째 비트 데이터(SD<7>)를 구성한다.
도 13 내지 도 20을 참조하여 설명한 바와 같이, 오리지널 데이터가 "10000000"의 스트림을 갖는 경우, 스크램블러(211-1)에 의해 스크램블링된 데이터(scrambled data)는 "10101110"의 스트림을 갖는다. 오리지널 데이터의 경우 데이터 "0"이 두번째 비트부터 마지막인 여덟번째 비트까지 연속적으로 배치되어 노이즈 에러가 발생될 확율이 높은 반면, 스크램블링된 데이터는 다섯번째 비트부터 일곱번째 비트까지만 데이터 "1"이 연속적으로 배치되도록 랜덤화가 이루어졌으므로 노이즈 에러가 발생될 확율이 낮아진다.
도 21은 도 2의 스크램블러의 다른 예를 나타내 보인 회로도이다. 본 예에 따른 스크램블러 구조는, 도 4 및 도 6의 스크램블러와, 도 8 및 도 10의 제1 및 제2 스크램블러에도 동일하게 적용될 수 있다. 도 21을 참조하면, 본 예에 따른 스크램블러(211-2)는, 복수개, 예컨대 15개의 XOR 연산기들(351-365)로만 구성된다. XOR 연산기들(351-365)의 개수는, 스크램블링되는 대상 데이터, 예컨대 오리지널 데이터가 8비트인 경우에 스크램블러(211-2)를 구현하는데 필요한 개수를 예로 들었다. 오리지널 데이터가 8비트가 아닌 경우 XOR 연산기들의 개수는 달라질 수 있다. 오리지널 데이터의 비트 수에 상관 없이, 본 예에 따른 스크램블러(211-2)는, 오리지널 데이터의 각 비트 데이터를 병렬로 입력받아 랜덤화를 수행하여 스크램블링된 데이터의 각 비트 데이터를 병렬로 출력시킬 수 있다. 즉 스크램블링 과정이 하나의 클럭 사이클 동안 수행되도록 할 수 있다.
오리지널 데이터가 8비트인 경우, 각 비트 데이터는 첫번째 비트부터 마지막인 여덟번째 비트까지 순차적으로 임의변수인 "A00", "B00", "C00", "D00", "E00", "F00", "G00", "H00"로 나타낼 수 있다. 예컨대 오리지널 데이터 스트림이 "10000000"인 경우, "A00=1", "B00=0", "C00=0", "D00=0", "E00=0", "F00=0", "G00=0", "H00=0"의 값들이 스크램블링 과정에 사용된다. 스크램블러(211-2)로부터 출력되는 스크램블링 데이터의 첫번째 비트 데이터(SD<0>)는 임의변수 "A00"과 동일한 값을 갖는다. 즉 임의변수 "A00"의 값인 오리지널 데이터의 첫번째 비트 데이터는 스크램블링 데이터의 첫번째 비트 데이터(SD<0>)로 그대로 출력된다. 스크램블러(211-2)로부터 출력되는 스크램블링 데이터의 두번째 비트 데이터(SD<1>)는 임의변수 "B00"과 동일한 값을 갖는다. 즉 임의변수 "B00"의 값인 오리지널 데이터의 두번째 비트 데이터는 스크램블링 데이터의 두번째 비트 데이터(SD<1>)로 그대로 출력된다.
제1 XOR 연산기(351)는, 스크램블링 데이터의 세번째 비트 데이터(SD<2>)를 발생시킨다. 제1 XOR 연산기(351)는 임의변수 "A00"과 "C00", 즉 오리지널 데이터의 첫번째 비트 데이터와 세번째 비트 데이터를 입력받아 XOR 연산을 수행하고 그 결과를 스크램블링 데이터의 세번째 비트 데이터(SD<2>)로 출력시킨다. 제2 XOR 연산기(352)는, 스크램블링 데이터의 네번째 비트 데이터(SD<3>)를 발생시킨다. 제2 XOR 연산기(352)는 임의변수 "B00"과 "D00", 즉 오리지널 데이터의 두번째 비트 데이터와 네번째 비트 데이터를 입력받아 XOR 연산을 수행하고 그 결과를 스크램블링 데이터의 네번째 비트 데이터(SD<3>)로 출력시킨다. 제3 XOR 연산기(353) 및 제4 XOR 연산기(354)는, 스크램블링 데이터의 다섯번째 비트 데이터(SD<4>)를 발생시킨다. 제3 XOR 연산기(353)는 임의변수 "A00"과 "C00", 즉 오리지널 데이터의 첫번째 비트 데이터와 세번째 비트 데이터를 입력받아 XOR 연산을 수행하고 그 결과를 제4 XOR 연산기(354)에 입력시킨다. 제4 XOR 연산기(354)는 제3 XOR 연산기(353)로부터 출력되는 데이터와 임의변수 "E00", 즉 오리지널 데이터의 다섯번째 비트 데이터를 입력받아 XOR 연산을 수행하고 그 결과를 스크램블링 데이터의 다섯번째 비트 데이터(SD<4>)로 출력시킨다.
제5 XOR 연산기(355), 제6 XOR 연산기(356), 및 제7 XOR 연산기(357)는, 스크램블링 데이터의 여섯번째 비트 데이터(SD<5>)를 발생시킨다. 제5 XOR 연산기(355)는 임의변수 "B00"과 "D00", 즉 오리지널 데이터의 두번째 비트 데이터와 네번째 비트 데이터를 입력받아 XOR 연산을 수행하고 그 결과를 제6 XOR 연산기(356)에 입력시킨다. 제6 XOR 연산기(356)는 제5 XOR 연산기(355)로부터 출력되는 데이터와 임의변수 "A00", 즉 오리지널 데이터의 첫번째 비트 데이터를 입력받아 XOR 연산을 수행하고 그 결과를 제7 XOR 연산기(357)에 입력시킨다. 제7 XOR 연산기(357)는 제6 XOR 연산기(356)로부터 출력되는 데이터와 임의변수 "F00", 즉 오리지널 데이터의 여섯번째 비트 데이터를 입력받아 XOR 연산을 수행하고 그 결과를 스크램블링 데이터의 여섯번째 비트 데이터(SD<5>)로 출력시킨다.
제8 XOR 연산기(358), 제9 XOR 연산기(359), 제10 XOR 연산기(360), 및 제11 XOR 연산기(361)는, 스크램블링 데이터의 일곱번째 비트 데이터(SD<6>)를 발생시킨다. 제8 XOR 연산기(358)는 임의변수 "A00"과 "C00", 즉 오리지널 데이터의 첫번째 비트 데이터와 세번째 비트 데이터를 입력받아 XOR 연산을 수행하고 그 결과를 제10 XOR 연산기(360)에 입력시킨다. 제9 XOR 연산기(359)는 임의변수 "B00"과 "E00", 즉 오리지널 데이터의 두번째 비트 데이터와 다섯번째 비트 데이터를 입력받아 XOR 연산을 수행하고 그 결과를 제10 XOR 연산기(360)에 입력시킨다. 제10 XOR 연산기(360)는 제8 XOR 연산기(358)로부터의 출력 데이터와 제9 XOR 연산기(359)로부터의 출력 데이터에 대한 XOR 연산을 수행하고 그 결과를 제11 XOR 연산기(361)에 입력시킨다. 제11 XOR 연산기(361)는 제10 XOR 연산기(360)로부터 출력되는 데이터와 임의변수 "G00", 즉 오리지널 데이터의 일곱번째 비트 데이터를 입력받아 XOR 연산을 수행하고 그 결과를 스크램블링 데이터의 일곱번째 비트 데이터(SD<6>)로 출력시킨다.
제12 XOR 연산기(362), 제13 XOR 연산기(363), 제14 XOR 연산기(364), 및 제15 XOR 연산기(365)는, 스크램블링 데이터의 여덟번째 비트 데이터(SD<7>)를 발생시킨다. 제12 XOR 연산기(362)는 임의변수 "B00"과 "D00", 즉 오리지널 데이터의 두번째 비트 데이터와 네번째 비트 데이터를 입력받아 XOR 연산을 수행하고 그 결과를 제14 XOR 연산기(364)에 입력시킨다. 제13 XOR 연산기(363)는 임의변수 "C00"과 "F00", 즉 오리지널 데이터의 세번째 비트 데이터와 여섯번째 비트 데이터를 입력받아 XOR 연산을 수행하고 그 결과를 제14 XOR 연산기(364)에 입력시킨다. 제14 XOR 연산기(364)는 제12 XOR 연산기(362)로부터의 출력 데이터와 제13 XOR 연산기(363)로부터의 출력 데이터에 대한 XOR 연산을 수행하고 그 결과를 제15 XOR 연산기(365)에 입력시킨다. 제15 XOR 연산기(365)는 제13 XOR 연산기(363)로부터 출력되는 데이터와 임의변수 "H00", 즉 오리지널 데이터의 여덟번째 비트 데이터를 입력받아 XOR 연산을 수행하고 그 결과를 스크램블링 데이터의 여덟번째 비트 데이터(SD<7>)로 출력시킨다.
본 예에 따른 스크램블러(211-2)에서 제1 XOR 공유기(351), 제3 XOR 공유기(353), 및 제8 XOR 공유기(358)는, 모두 "A00 (XOR) C00"의 연산을 수행한다. 따라서 제1 XOR 공유기(351), 제3 XOR 공유기(353), 및 제8 XOR 공유기(358)로서, "A00 (XOR) C00"의 연산을 수행하는 하나의 XOR 공유기를 공통으로 사용함으로써 XOR 공유기들의 개수를 줄일 수 있다. 마찬가지로 제2 XOR 공유기(352), 제5 XOR 공유기(355), 및 제12 XOR 공유기(362)는, 모두 "B00 (XOR) D00"의 연산을 수행한다. 따라서 제2 XOR 공유기(352), 제5 XOR 공유기(355), 및 제12 XOR 공유기(362)로서, "B00 (XOR) D00"의 연산을 수행하는 하나의 XOR 공유기를 공통으로 사용함으로써 XOR 공유기들의 개수를 추가적으로 줄일 수 있다.
일 예에서 오리지널 데이터 스트림이 "10000000"인 경우, 도 21의 로직 회로에서의 임의변수값으로서 "A00=1", "B00=0", "C00=0", "D00=0", "E00=0", "F00=0", "G00=0", "H00=0"을 적용시키면, 스크램블링된 데이터(SD[0:7])로서 "10101110"의 스트림이 발생된다. 이 결과는, 도 20의 예에 따른 스크램블러(211-1)와 동일한 결과이다. 도 20을 참조하여 설명한 스크램블러(211-1)는 반복 연산 수행으로 인해 여러 클럭 사이클이 소요되는 반면, 본 예에서의 스크램블러(211-2)는 반복 연산 없이 하나의 클럭 사이클로 스크램블링 과정을 수행할 수 있다.
도 22 내지 도 31은 도 21의 스크램블러의 로직 구성을 위해 수행되는 XOR 연산식 도출 과정을 설명하기 위해 나타내 보인 도면들이다. 이하에서는 스크램블링되어질 대상 데이터, 예컨대 오리지널 데이터가 8비트인 경우를 예로 들기로 한다. 도 22를 참조하면, 오리지널 데이터의 각각의 비트 위치에 따른 데이터 값(D[0:7])에 임의변수를 할당한다. 구체적으로 오리지널 데이터의 첫번째 비트부터 여덟번째 비트까지 순차적으로 각 비트 데이터 값(D[0:7])에 임의변수 "A00", "B00", "C00", "D00", "E00", "F00", "G00", "H00"를 각각 할당한다. 일 예에서 8비트의 오리지널 데이터가 "10000000"의 스트림을 갖는 경우, 임의변수 "A00", "B00", "C00", "D00", "E00", "F00", "G00", "H00"는 각각 "D<0>=1", "D<1>=0", "D<2>=0", "D<3>=0", "D<4>=0", "D<5>=0", "D<6>=0", "D<7>=0"의 데이터 값을 갖는다. 다음에 도 12를 참조하여 설명한 스크램블러(211-1)를 이용한 반복 연산을 수행하여 스크램블링된 데이터의 각 비트 데이터(SD[0:7])가 임의변수들의 XOR 연산식으로만 표현되는 XOR 연산식을 도출시킨다. 이하에서는 도 23 내지 도 31을 도 12와 함께 참조하면서 이와 같은 XOR 연산식 도출 과정을 설명하기로 한다.
먼저 도 23에 나타낸 바와 같이, 초기 상태(initial state)에서 LFSR(310)은 리셋되고, LFSR(310)의 모든 저장소들(S1-S5)에는 데이터 "0"이 저장된 상태가 된다. 다음에 도 24에 나타낸 바와 같이, 반복연산의 제1 단계(1st iteration step)를 수행한다. 이 단계에서 오리지널 데이터의 첫번째 비트 데이터(D<0>)인 임의변수 "A00" 및 제1 XOR 연산기(321)의 출력 데이터(X00)가 제2 XOR 연산기(322)에 입력된다. 본 단계에서 제1 XOR 연산기(321)의 출력 데이터(X00)는 제2 저장소(S2) 및 제5 저장소(S5)에 각각 저장되어 있는 데이터 "0" 및 "0"에 대한 XOR 연산 결과인 "0"의 값을 갖는다. 제2 XOR 연산기(322)는, 제1 XOR 연산기(321)의 출력 데이터(X00)인 "0"과 임의변수 "A00"에 대한 XOR 연산 결과인 "A00"을 출력한다. 이 데이터 "A00"은, 스크램블러(211-1)로부터 출력되는 스크램블링된 데이터(scrambled data)의 첫번째 비트 데이터(SD<0>)를 구성하는 동시에, LFSR(310)의 제1 저장소(S1)로 저장되는 피드백 데이터를 구성한다.
다음에 도 25에 나타낸 바와 같이, 반복연산의 제2 단계(2nd iteration step)를 수행한다. 이 단계에서 오리지널 데이터의 두번째 비트 데이터(D<1>)인 임의변수 "B00" 및 제1 XOR 연산기(321)의 출력 데이터(X00)가 제2 XOR 연산기(322)에 입력된다. 본 단계에서 제1 XOR 연산기(321)의 출력 데이터(X00)는 제2 저장소(S2) 및 제5 저장소(S5)에 각각 저장되어 있는 데이터 "0" 및 "0"에 대한 XOR 연산 결과인 "0"의 값을 갖는다. 제2 XOR 연산기(322)는, 제1 XOR 연산기(321)의 출력 데이터(X00)인 "0"과 임의변수 "B00"에 대한 XOR 연산 결과인 "B00"을 출력한다. 이 데이터 "B00"은, 스크램블러(211-1)로부터 출력되는 스크램블링된 데이터(scrambled data)의 두번째 비트 데이터(SD<1>)를 구성하는 동시에, LFSR(310)의 제1 저장소(S1)로 저장되는 피드백 데이터를 구성한다. LFSR(310)의 제1 저장소(S1)에 저장되어 있던 데이터 "A00"는 제2 저장소(S2)로 이동된다.
다음에 도 26에 나타낸 바와 같이, 반복연산의 제3 단계(3rd iteration step)를 수행한다. 이 단계에서 오리지널 데이터의 세번째 비트 데이터(D<2>)인 임의변수 "C00" 및 제1 XOR 연산기(321)의 출력 데이터(X00)가 제2 XOR 연산기(322)에 입력된다. 본 단계에서 제1 XOR 연산기(321)의 출력 데이터(X00)는 제2 저장소(S2) 및 제5 저장소(S5)에 각각 저장되어 있는 데이터 "A00" 및 "0"에 대한 XOR 연산 결과인 "A00"의 값을 갖는다. 제2 XOR 연산기(322)는, 제1 XOR 연산기(321)의 출력 데이터(X00)인 "A00"과 임의변수 "C00"에 대한 XOR 연산 결과인 "A00 (XOR) C00"을 출력한다. 이 데이터 "A00 (XOR) C00"은, 스크램블러(211-1)로부터 출력되는 스크램블링된 데이터(scrambled data)의 세번째 비트 데이터(SD<2>)를 구성하는 동시에, LFSR(310)의 제1 저장소(S1)로 저장되는 피드백 데이터를 구성한다. LFSR(310)의 제1 저장소(S1)에 저장되어 있던 데이터 "B00"은 제2 저장소(S2)로 이동되고, 제2 저장소(S2)에 저장되어 있던 데이터 "A00"은 제3 저장소(S3)로 이동된다.
다음에 도 27에 나타낸 바와 같이, 반복연산의 제4 단계(4th iteration step)를 수행한다. 이 단계에서 오리지널 데이터의 네번째 비트 데이터(D<3>)인 임의변수 "D00" 및 제1 XOR 연산기(321)의 출력 데이터(X00)가 제2 XOR 연산기(322)에 입력된다. 본 단계에서 제1 XOR 연산기(321)의 출력 데이터(X00)는 제2 저장소(S2) 및 제5 저장소(S5)에 각각 저장되어 있는 데이터 "B00" 및 "0"에 대한 XOR 연산 결과인 "B00"의 값을 갖는다. 제2 XOR 연산기(322)는, 제1 XOR 연산기(321)의 출력 데이터(X00)인 "B00"과 임의변수 "D00"에 대한 XOR 연산 결과인 "B00 (XOR) D00"을 출력한다. 이 데이터 "B00 (XOR) D00"은, 스크램블러(211-1)로부터 출력되는 스크램블링된 데이터(scrambled data)의 네번째 비트 데이터(SD<3>)를 구성하는 동시에, LFSR(310)의 제1 저장소(S1)로 저장되는 피드백 데이터를 구성한다. LFSR(310)의 제1 저장소(S1)에 저장되어 있던 데이터 "A00 (XOR) C00"은 제2 저장소(S2)로 이동되고, 제2 저장소(S2)에 저장되어 있던 데이터 "B00"은 제3 저장소(S3)로 이동되며, 그리고 제3 저장소(S3)에 저장되어 있던 데이터 "A00"은 제4 저장소(S4)로 이동된다.
다음에 도 28에 나타낸 바와 같이, 반복연산의 제5 단계(5th iteration step)를 수행한다. 이 단계에서 오리지널 데이터의 다섯번째 비트 데이터(D<4>)인 임의변수 "E00" 및 제1 XOR 연산기(321)의 출력 데이터(X00)가 제2 XOR 연산기(322)에 입력된다. 본 단계에서 제1 XOR 연산기(321)의 출력 데이터(X00)는 제2 저장소(S2) 및 제5 저장소(S5)에 각각 저장되어 있는 데이터 "A00 (XOR) C00" 및 "0"에 대한 XOR 연산 결과인 "A00 (XOR) C00"의 값을 갖는다. 제2 XOR 연산기(322)는, 제1 XOR 연산기(321)의 출력 데이터(X00)인 "A00 (XOR) C00"과 임의변수 "E00"에 대한 XOR 연산 결과인 "A00 (XOR) C00 (XOR) E00"을 출력한다. 이 데이터 "A00 (XOR) C00 (XOR) E00"은, 스크램블러(211-1)로부터 출력되는 스크램블링된 데이터(scrambled data)의 다섯번째 비트 데이터(SD<4>)를 구성하는 동시에, LFSR(310)의 제1 저장소(S1)로 저장되는 피드백 데이터를 구성한다. LFSR(310)의 제1 저장소(S1)에 저장되어 있던 데이터 "B00 (XOR) D00"은 제2 저장소(S2)로 이동되고, 제2 저장소(S2)에 저장되어 있던 데이터 "A00 (XOR) C00"은 제3 저장소(S3)로 이동되고, 제3 저장소(S3)에 저장되어 있던 데이터 "B00"은 제4 저장소(S4)로 이동되며, 그리고 제4 저장소(S4)에 저장되어 있던 데이터 "A00"은 제5 저장소(S5)로 이동된다.
다음에 도 29에 나타낸 바와 같이, 반복연산의 제6 단계(6th iteration step)를 수행한다. 이 단계에서 오리지널 데이터의 여섯번째 비트 데이터(D<5>)인 임의변수 "F00" 및 제1 XOR 연산기(321)의 출력 데이터(X00)가 제2 XOR 연산기(322)에 입력된다. 본 단계에서 제1 XOR 연산기(321)의 출력 데이터(X00)는 제2 저장소(S2) 및 제5 저장소(S5)에 각각 저장되어 있는 데이터 "B00 (XOR) D00" 및 "A00"에 대한 XOR 연산 결과인 "A00 (XOR) B00 (XOR) D00"의 값을 갖는다. 제2 XOR 연산기(322)는, 제1 XOR 연산기(321)의 출력 데이터(X00)인 "A00 (XOR) B00 (XOR) D00"과 임의변수 "F00"에 대한 XOR 연산 결과인 "A00 (XOR) B00 (XOR) D00 (XOR) F00"을 출력한다. 이 데이터 "A00 (XOR) B00 (XOR) D00 (XOR) F00"은, 스크램블러(211-1)로부터 출력되는 스크램블링된 데이터(scrambled data)의 여섯번째 비트 데이터(SD<5>)를 구성하는 동시에, LFSR(310)의 제1 저장소(S1)로 저장되는 피드백 데이터를 구성한다. LFSR(310)의 제1 저장소(S1)에 저장되어 있던 데이터 "A00 (XOR) C00 (XOR) E00"은 제2 저장소(S2)로 이동되고, 제2 저장소(S2)에 저장되어 있던 데이터 "B00 (XOR) D00"은 제3 저장소(S3)로 이동되고, 제3 저장소(S3)에 저장되어 있던 데이터 "A00 (XOR) C00"은 제4 저장소(S4)로 이동되며, 그리고 제4 저장소(S4)에 저장되어 있던 데이터 "B00"은 제5 저장소(S5)로 이동된다.
다음에 도 30에 나타낸 바와 같이, 반복연산의 제7 단계(7th iteration step)를 수행한다. 이 단계에서 오리지널 데이터의 일곱번째 비트 데이터(D<6>)인 임의변수 "G00" 및 제1 XOR 연산기(321)의 출력 데이터(X00)가 제2 XOR 연산기(322)에 입력된다. 본 단계에서 제1 XOR 연산기(321)의 출력 데이터(X00)는 제2 저장소(S2) 및 제5 저장소(S5)에 각각 저장되어 있는 데이터 "A00 (XOR) C00 (XOR) E00" 및 "B00"에 대한 XOR 연산 결과인 "A00 (XOR) B00 (XOR) C00 (XOR) E00"의 값을 갖는다. 제2 XOR 연산기(322)는, 제1 XOR 연산기(321)의 출력 데이터(X00)인 "A00 (XOR) B00 (XOR) C00 (XOR) E00"과 임의변수 "G00"에 대한 XOR 연산 결과인 "A00 (XOR) B00 (XOR) C00 (XOR) E00 (XOR) G00"을 출력한다. 이 데이터 "A00 (XOR) B00 (XOR) C00 (XOR) E00 (XOR) G00"은, 스크램블러(211-1)로부터 출력되는 스크램블링된 데이터(scrambled data)의 일곱번째 비트 데이터(SD<6>)를 구성하는 동시에, LFSR(310)의 제1 저장소(S1)로 저장되는 피드백 데이터를 구성한다. LFSR(310)의 제1 저장소(S1)에 저장되어 있던 데이터 "A00 (XOR) B00 (XOR) D00 (XOR) F00"는 제2 저장소(S2)로 이동되고, 제2 저장소(S2)에 저장되어 있던 데이터 "A00 (XOR) C00 (XOR) E00"은 제3 저장소(S3)로 이동되고, 제3 저장소(S3)에 저장되어 있던 데이터 "B00 (XOR) D00"은 제4 저장소(S4)로 이동되며, 그리고 제4 저장소(S4)에 저장되어 있던 데이터 "A00 (XOR) C00"은 제5 저장소(S5)로 이동된다.
다음에 도 31에 나타낸 바와 같이, 마지막 단계인 반복연산의 제8 단계(8th iteration step)를 수행한다. 이 단계에서 오리지널 데이터의 여덟번째 비트 데이터(D<7>)인 임의변수 "H00" 및 제1 XOR 연산기(321)의 출력 데이터(X00)가 제2 XOR 연산기(322)에 입력된다. 본 단계에서 제1 XOR 연산기(321)의 출력 데이터(X00)는 제2 저장소(S2) 및 제5 저장소(S5)에 각각 저장되어 있는 데이터 "A00 (XOR) B00 (XOR) D00 (XOR) F00" 및 "A00 (XOR) C00"에 대한 XOR 연산 결과인 "B00 (XOR) C00 (XOR) D00 (XOR) F00"의 값을 갖는다. 제2 XOR 연산기(322)는, 제1 XOR 연산기(321)의 출력 데이터(X00)인 "B00 (XOR) C00 (XOR) D00 (XOR) F00"과 임의변수 "H00"에 대한 XOR 연산 결과인 "B00 (XOR) C00 (XOR) D00 (XOR) F00 (XOR) H00"을 출력한다. 이 데이터 "B00 (XOR) C00 (XOR) D00 (XOR) F00 (XOR) H00"은, 스크램블러(211-1)로부터 출력되는 스크램블링된 데이터(scrambled data)의 여덟번째 비트 데이터(SD<7>)를 구성한다.
도 22 내지 도 31을 참조하여 설명한 바와 같이, 오리지널 데이터(D[0:7])에 대한 스크램블링 결과로 스크램블러(211-1)로부터 출력되는 스크램블링된 데이터(srambled data)(SD[0:7])의 각각의 비트 데이터 값이 임의변수들(A00-H00)의 XOR 연산식으로만 표현되는 XOR 연산식들을 도출시킬 수 있다. 즉 스크램블링된 데이터의 첫번째 비트 데이터(SD<0>)는 "A00"이고, 두번째 비트 데이터(SD<1>)는 "B00"이고, 세번째 비트 데이터(SD<2>)는 "A00 (XOR) C00"이고, 네번째 비트 데이터(SD<3>)는 "B00 (XOR) D00"이고, 다섯번째 비트 데이터(SD<4>)는 "A00 (XOR) C00 (XOR) E00"이고, 여섯번째 비트 데이터(SD<5>)는 "A00 (XOR) B00 (XOR) D00 (XOR) F00)이고, 일곱번째 비트 데이터(SD<6>)는 "A00 (XOR) B00 (XOR) C00 (XOR) E00 (XOR) G00"이며, 그리고 여덟번째 비트 데이터(SD<7>)는 "B00 (XOR) C00 (XOR) D00 (XOR) F00 (XOR) H00"이 된다. 따라서 XOR 연산기를 이용하여 이와 같은 XOR 연산식들을 로직으로 구현하면 도 21의 스크램블러(211-2) 구성과 같이 스크램블링 동작이 병렬 처리될 수 있도록 할 수 있다.
상술한 바와 같이 본 출원의 실시 형태들을 도면들을 예시하며 설명하지만, 이는 본 출원에서 제시하고자 하는 바를 설명하기 위한 것이며, 세밀하게 제시된 형상으로 본 출원에서 제시하고자 하는 바를 한정하고자 한 것은 아니다.
100...메모리 컨트롤러 200...에러정정장치
210...스크램블링/ECC 인코딩부 220...디스크램블링/ECC 디코딩부
211...스크램블러 212...ECC 인코더
221...ECC 디코더 222...디스크램블러

Claims (22)

  1. 오리지널 데이터를 입력받아 랜덤화하여 스크램블링된 데이터를 출력하는 스크램블러;
    상기 스크램블링된 데이터를 입력받아 메모리장치에 쓰여질 인코딩된 데이터를 출력하는 에러정정코드 인코더;
    상기 메모리장치로부터 읽은 인코딩된 데이터에 대해 에러정정코드 디코딩을 수행하여 에러 정정된 디코딩된 데이터를 출력하는 에러정정코드 디코더; 및
    상기 디코딩된 데이터를 입력받아 상기 스크램블러에 의해 랜덤화된 데이터의 비트 배열을 상기 오리지널 데이터의 데이터 비트 배열로 복원하는 디스크램블러를 포함하는 에러정정장치.
  2. 제1항에 있어서,
    상기 인코딩된 데이터는 상기 오리지널 데이터에 패리티가 더해진 구성을 갖는 에러정정장치.
  3. 제1항에 있어서,
    상기 오리지널 데이터에 대한 스크램블링 여부의 판단을 수행하여 상기 오리지널 데이터를 상기 스크램블러에 입력시키거나 상기 에러정정코드 인코더에 입력시키는 스크램블링 판별기를 더 포함하는 에러정정장치.
  4. 제3항에 있어서,
    상기 에러정정코드 디코더로부터의 디코딩된 데이터를 입력받아 상기 인코딩된 데이터의 스크램블링 여부의 판단을 수행하여 상기 디코딩된 데이터를 상기 디스크램블러에 입력시키거나 상기 에러정정장치 외부로 직접 출력시키는 디스크램블링 판별기를 더 포함하는 에러정정장치.
  5. 제1항에 있어서, 상기 스크램블러는,
    복수개의 저장소들을 갖는 쉬프트 레지스터;
    상기 쉬프트 레지스터의 저장소들 중 2개의 저장소들의 데이터를 입력받아 XOR 연산하여 출력하는 제1 XOR 연산기; 및
    상기 XOR 연산기로부터 출력되는 데이터와 상기 인코딩된 데이터의 첫번째 비트 데이터부터 마지막 비트 데이터에 이르기까지의 각 비트 데이터를 순차적으로 입력받아 XOR 연산을 수행하여 출력하는 제2 XOR 연산기를 포함하는 에러정정장치.
  6. 제5항에 있어서,
    상기 제2 XOR 연산기로부터 출력되는 데이터는, 상기 쉬프트 레지스터의 첫번째 저장소로 피드백되는 에러정정장치.
  7. 제5항에 있어서,
    상기 제2 XOR 연산기로부터 출력되는 데이터는, 상기 스크램블링된 데이터의 LSB(Least Significant Bit) 데이터부터 MSB(Most Significant Bit) 데이터에 이르기까지의 각 비트 데이터를 구성하는 에러정정장치.
  8. 제1항에 있어서, 상기 스크램블러는,
    상기 오리지널 데이터의 각각의 비트 데이터를 병렬로 입력받아 복수의 XOR 연산들을 수행하여 상기 스크램블링된 데이터의 각각의 비트 데이터를 병렬로 출력하는 복수개의 XOR 연산기들로 구성되는 에러정정장치.
  9. 제8항에 있어서,
    상기 복수개의 XOR 연산기들은, 상기 스크램블링된 데이터의 각각의 비트 데이터가 상기 오리지널 데이터의 각각의 비트 데이터에 대응되는 임의변수들의 XOR 연산식으로 표현되는 XOR 연산식에 부합되도록 구성되는 에러정정장치.
  10. 오리지널 데이터를 입력받아 랜덤화하여 스크램블링된 데이터를 출력하는 스크램블러;
    상기 오리지널 데이터 및 스크램블링된 데이터를 입력받아 두 데이터의 랜덤화 정도를 분석하여 제1 제어선택신호를 발생시키는 랜덤화 체커;
    상기 오리지널 데이터 및 스크램블링된 데이터를 입력받고, 상기 제1 제어선택신호에 응답하여 상기 오리지널 데이터 및 스크램블링된 데이터 중 선택된 어느 하나의 데이터를 출력시키는 스크램블링 선택기;
    상기 스크램블링 선택기로부터 출력되는 데이터를 입력받아 메모리장치에 쓰여질 인코딩된 데이터를 출력하는 에러정정코드 인코더;
    상기 메모리장치로부터 읽은 인코딩된 데이터에 대해 에러정정코드 디코딩을 수행하여 에러 정정된 디코딩된 데이터를 출력하는 에러정정코드 디코더;
    상기 디코딩된 데이터를 입력받아 제2 제어선택신호에 응답하여 상기 디코딩된 데이터를 제1 경로 및 제2 경로 중 선택된 어느 하나의 경로로 출력하는 디스크램블링 선택기; 및
    상기 제1 경로를 따라 상기 디스크램블링 선택기로부터 상기 디코딩된 데이터가 입력되는 경우 상기 스크램블러에 의해 랜덤화된 데이터의 비트 배열을 상기 오리지널 데이터의 데이터 비트 배열로 복원하는 디스크램블러를 포함하는 에러정정장치.
  11. 제10항에 있어서,
    상기 제2 경로는, 상기 디코딩 데이터가 상기 에러정정장치 외부로 직접 출력되도록 하는 경로인 에러정정장치.
  12. 오리지널 데이터를 입력받아 1차 랜덤화하여 제1 스크램블링된 데이터를 출력하는 제1 스크램블러;
    상기 제1 스크램블링된 데이터를 입력받아 2차 랜덤화하여 제2 스크램블링된 데이터를 출력하는 제2 스크램블러;
    상기 제2 스크램블링된 데이터를 입력받아 메모리장치에 쓰여질 인코딩된 데이터를 출력하는 에러정정코드 인코더;
    상기 메모리장치로부터 읽은 인코딩된 데이터에 대해 에러정정코드 디코딩을 수행하여 에러 정정된 디코딩된 데이터를 출력하는 에러정정코드 디코더;
    상기 디코딩된 데이터를 입력받아 상기 제2 스크램블러에 의해 랜덤화된 데이터의 비트 배열이 상기 제1 스크램블링된 데이터의 데이터 비트 배열로 복원되는 제1 디스크램블링된 데이터를 출력하는 제1 디스크램블러; 및
    상기 제1 디스크램블링된 데이터를 입력받아 상기 제1 스크램블러에 의해 랜덤화된 데이터의 비트 배열이 상기 오리지널 데이터의 데이터 비트 배열로 복원되는 제2 디스크램블링된 데이터를 출력하는 제2 디스크램블러를 포함하는 에러정정장치.
  13. 오리지널 데이터를 입력받아 1차 랜덤화하여 제1 스크램블링된 데이터를 출력하는 제1 스크램블러;
    상기 제1 스크램블링된 데이터를 입력받아 2차 랜덤화하여 제2 스크램블링된 데이터를 출력하는 제2 스크램블러;
    상기 오리지널 데이터, 제1 스크램블링된 데이터, 및 제2 스크램블링된 데이터를 입력받아 세 데이터의 랜덤화 정도를 분석하여 제1 제어선택신호를 발생시키는 랜덤화 체커;
    상기 오리지널 데이터, 제1 스크램블링된 데이터, 및 제2 스크램블링된 데이터를 입력받고, 상기 제1 제어선택신호에 응답하여 상기 오리지널 데이터, 제1 스크램블링된 데이터, 및 제2 스크램블링된 데이터 중 선택된 어느 하나의 데이터를 출력시키는 스크램블링 선택기;
    상기 스크램블링 선택기로부터 출력되는 데이터를 입력받아 메모리장치에 쓰여질 인코딩된 데이터를 출력하는 에러정정코드 인코더;
    상기 메모리장치로부터 읽은 인코딩된 데이터에 대해 에러정정코드 디코딩을 수행하여 에러 정정된 디코딩된 데이터를 출력하는 에러정정코드 디코더;
    상기 디코딩된 데이터를 입력받아 제2 제어선택신호에 응답하여 상기 디코딩된 데이터를 제1 경로, 제2 경로, 및 제3 경로 중 선택된 어느 하나의 경로로 출력하는 디스크램블링 선택기;
    상기 제1 경로를 따라 상기 디스크램블링 선택기로부터 상기 디코딩된 데이터가 입력되는 경우 상기 제2 스크램블러에 의해 2차 랜덤화된 데이터의 비트 배열이 상기 제1 스크램블링된 데이터의 데이터 비트 배열로 복원되는 제1 디스크램블링된 데이터를 출력하는 제1 디스크램블러; 및
    상기 제1 디스크램블러로부터의 제1 디스크램블링된 데이터가 입력되는 경우 및 상기 제2 경로를 따라 상기 디스크램블링 선택기로부터 상기 디코딩된 데이터가 입력되는 경우 상기 제1 스크램블러에 의해 1차 랜덤화된 데이터의 비트 배열이 상기 오리지널 데이터의 데이터 비트 배열로 복원되는 제2 디스크램블링된 데이터를 출력하는 제2 디스크램블러를 포함하는 에러정정장치.
  14. 제13항에 있어서,
    상기 제3 경로는, 상기 디코딩 데이터가 상기 에러정정장치 외부로 직접 출력되도록 하는 경로인 에러정정장치.
  15. 호스트와 메모리 장치 사이에서 상기 호스트의 명령에 의해 상기 메모리 장치를 제어하는 메모리 컨트롤러에 있어서,
    상기 메모리 컨트롤러는, 에러정정장치를 포함하되,
    상기 에러정정장치는,
    오리지널 데이터를 입력받아 랜덤화하여 스크램블링된 데이터를 출력하는 스크램블러;
    상기 스크램블링된 데이터를 입력받아 메모리장치에 쓰여질 인코딩된 데이터를 출력하는 에러정정코드 인코더;
    상기 메모리장치로부터 읽은 인코딩된 데이터에 대해 에러정정코드 디코딩을 수행하여 에러 정정된 디코딩된 데이터를 출력하는 에러정정코드 디코더; 및
    상기 디코딩된 데이터를 입력받아 상기 스크램블러에 의해 랜덤화된 데이터의 비트 배열을 상기 오리지널 데이터의 데이터 비트 배열로 복원하는 디스크램블러를 포함하는 메모리 컨트롤러.
  16. 호스트와 메모리 장치 사이에서 상기 호스트의 명령에 의해 상기 메모리 장치를 제어하는 메모리 컨트롤러에 있어서,
    상기 메모리 컨트롤러는, 에러정정장치를 포함하되,
    상기 에러정정장치는,
    오리지널 데이터를 입력받아 랜덤화하여 스크램블링된 데이터를 출력하는 스크램블러;
    상기 오리지널 데이터 및 스크램블링된 데이터를 입력받아 두 데이터의 랜덤화 정도를 분석하여 제1 제어선택신호를 발생시키는 랜덤화 체커;
    상기 오리지널 데이터 및 스크램블링된 데이터를 입력받고, 상기 제1 제어선택신호에 응답하여 상기 오리지널 데이터 및 스크램블링된 데이터 중 선택된 어느 하나의 데이터를 출력시키는 스크램블링 선택기;
    상기 스크램블링 선택기로부터 출력되는 데이터를 입력받아 메모리장치에 쓰여질 인코딩된 데이터를 출력하는 에러정정코드 인코더;
    상기 메모리장치로부터 읽은 인코딩된 데이터에 대해 에러정정코드 디코딩을 수행하여 에러 정정된 디코딩된 데이터를 출력하는 에러정정코드 디코더;
    상기 디코딩된 데이터를 입력받아 제2 제어선택신호에 응답하여 상기 디코딩된 데이터를 제1 경로 및 제2 경로 중 선택된 어느 하나의 경로로 출력하는 디스크램블링 선택기; 및
    상기 제1 경로를 따라 상기 디스크램블링 선택기로부터 상기 디코딩된 데이터가 입력되는 경우 상기 스크램블러에 의해 랜덤화된 데이터의 비트 배열을 상기 오리지널 데이터의 데이터 비트 배열로 복원하는 디스크램블러를 포함하는 메모리 컨트롤러.
  17. 호스트와 메모리 장치 사이에서 상기 호스트의 명령에 의해 상기 메모리 장치를 제어하는 메모리 컨트롤러에 있어서,
    상기 메모리 컨트롤러는, 에러정정장치를 포함하되,
    상기 에러정정장치는,
    오리지널 데이터를 입력받아 1차 랜덤화하여 제1 스크램블링된 데이터를 출력하는 제1 스크램블러;
    상기 제1 스크램블링된 데이터를 입력받아 2차 랜덤화하여 제2 스크램블링된 데이터를 출력하는 제2 스크램블러;
    상기 제2 스크램블링된 데이터를 입력받아 메모리장치에 쓰여질 인코딩된 데이터를 출력하는 에러정정코드 인코더;
    상기 메모리장치로부터 읽은 인코딩된 데이터에 대해 에러정정코드 디코딩을 수행하여 에러 정정된 디코딩된 데이터를 출력하는 에러정정코드 디코더;
    상기 디코딩된 데이터를 입력받아 상기 제2 스크램블러에 의해 랜덤화된 데이터의 비트 배열이 상기 제1 스크램블링된 데이터의 데이터 비트 배열로 복원되는 제1 디스크램블링된 데이터를 출력하는 제1 디스크램블러; 및
    상기 제1 디스크램블링된 데이터를 입력받아 상기 제1 스크램블러에 의해 랜덤화된 데이터의 비트 배열이 상기 오리지널 데이터의 데이터 비트 배열로 복원되는 제2 디스크램블링된 데이터를 출력하는 제2 디스크램블러를 포함하는 메모리 컨트롤러.
  18. 호스트와 메모리 장치 사이에서 상기 호스트의 명령에 의해 상기 메모리 장치를 제어하는 메모리 컨트롤러에 있어서,
    상기 메모리 컨트롤러는, 에러정정장치를 포함하되,
    상기 에러정정장치는,
    오리지널 데이터를 입력받아 1차 랜덤화하여 제1 스크램블링된 데이터를 출력하는 제1 스크램블러;
    상기 제1 스크램블링된 데이터를 입력받아 2차 랜덤화하여 제2 스크램블링된 데이터를 출력하는 제2 스크램블러;
    상기 오리지널 데이터, 제1 스크램블링된 데이터, 및 제2 스크램블링된 데이터를 입력받아 세 데이터의 랜덤화 정도를 분석하여 제1 제어선택신호를 발생시키는 랜덤화 체커;
    상기 오리지널 데이터, 제1 스크램블링된 데이터, 및 제2 스크램블링된 데이터를 입력받고, 상기 제1 제어선택신호에 응답하여 상기 오리지널 데이터, 제1 스크램블링된 데이터, 및 제2 스크램블링된 데이터 중 선택된 어느 하나의 데이터를 출력시키는 스크램블링 선택기;
    상기 스크램블링 선택기로부터 출력되는 데이터를 입력받아 메모리장치에 쓰여질 인코딩된 데이터를 출력하는 에러정정코드 인코더;
    상기 메모리장치로부터 읽은 인코딩된 데이터에 대해 에러정정코드 디코딩을 수행하여 에러 정정된 디코딩된 데이터를 출력하는 에러정정코드 디코더;
    상기 디코딩된 데이터를 입력받아 제2 제어선택신호에 응답하여 상기 디코딩된 데이터를 제1 경로, 제2 경로, 및 제3 경로 중 선택된 어느 하나의 경로로 출력하는 디스크램블링 선택기;
    상기 제1 경로를 따라 상기 디스크램블링 선택기로부터 상기 디코딩된 데이터가 입력되는 경우 상기 제2 스크램블러에 의해 2차 랜덤화된 데이터의 비트 배열이 상기 제1 스크램블링된 데이터의 데이터 비트 배열로 복원되는 제1 디스크램블링된 데이터를 출력하는 제1 디스크램블러; 및
    상기 제1 디스크램블러로부터의 제1 디스크램블링된 데이터가 입력되는 경우 및 상기 제2 경로를 따라 상기 디스크램블링 선택기로부터 상기 디코딩된 데이터가 입력되는 경우 상기 제1 스크램블러에 의해 1차 랜덤화된 데이터의 비트 배열이 상기 오리지널 데이터의 데이터 비트 배열로 복원되는 제2 디스크램블링된 데이터를 출력하는 제2 디스크램블러를 포함하는 메모리 컨트롤러.
  19. 오리지널 데이터를 랜덤화하는 스크램블링을 수행하여 스크램블링된 데이터를 발생시키는 단계;
    상기 스크램블링된 데이터에 대한 에러정정코드 인코딩을 수행하여 메모리장치에 쓰여질 인코딩된 데이터를 발생시키는 단계;
    상기 메모리장치로부터 읽은 인코딩된 데이터에 대해 에러정정코드 디코딩을 수행하여 에러 정정된 디코딩된 데이터를 출력하는 단계; 및
    상기 디코딩된 데이터의 데이터 비트 배열을 상기 스크램블링에 의해 랜덤화된 데이터의 비트 배열로부터 상기 오리지널 데이터의 데이터 비트 배열로 복원하는 디스크램블링 데이터를 발생시키는 단계를 포함하는 에러정정방법.
  20. 오리지널 데이터를 입력받아 랜덤화하여 스크램블링된 데이터를 발생시키는 단계;
    상기 오리지널 데이터 및 스크램블링된 데이터를 입력받아 두 데이터의 랜덤화 정도를 분석하여 제1 제어선택신호를 발생시키는 단계;
    상기 제1 제어선택신호에 응답하여 상기 오리지널 데이터 및 스크램블링된 데이터 중 하나의 데이터를 선택하는 단계;
    상기 선택된 데이터에 대한 에러정정코드 인코딩을 수행하여 메모리장치에 쓰여질 인코딩된 데이터를 발생시키는 단계;
    상기 메모리장치로부터 읽은 인코딩된 데이터에 대해 에러정정코드 디코딩을 수행하여 에러 정정된 디코딩된 데이터를 발생시키는 단계; 및
    제2 제어선택신호에 응답하여, 상기 디코딩된 데이터를 외부로 직접 출력시키거나, 또는 상기 랜덤화에 의해 스크램블링된 데이터의 비트 배열에서 상기 오리지널 데이터의 데이터 비트 배열로 복원되는 디스크램블링된 데이터를 발생시키는 단계를 포함하는 에러정정방법.
  21. 오리지널 데이터를 입력받아 1차 랜덤화하는 제1 스크램블링을 수행하여 제1 스크램블링된 데이터를 발생시키는 단계;
    상기 제1 스크램블링된 데이터를 2차 랜덤화하는 제2 스크램블링을 수행하여 제2 스크램블링된 데이터를 발생시키는 단계;
    상기 제2 스크램블링된 데이터에 대한 에러정정코드 인코딩을 수행하여 메모리장치에 쓰여질 인코딩된 데이터를 발생시키는 단계;
    상기 메모리장치로부터 읽은 인코딩된 데이터에 대해 에러정정코드 디코딩을 수행하여 에러 정정된 디코딩된 데이터를 발생시키는 단계;
    상기 디코딩된 데이터에 대한 제1 디스크램블링을 수행하여 상기 제2 스크램블링에 의해 2차 랜덤화된 데이터의 비트 배열에서 상기 제1 스크램블링된 데이터의 데이터 비트 배열로 복원되는 제1 디스크램블링된 데이터를 발생시키는 단계; 및
    상기 제1 디스크램블링된 데이터에 대한 제2 디스크램블링을 수행하여 상기 제1 스크램블링에 의해 1차 랜덤화된 데이터의 비트 배열에서 상기 오리지널 데이터의 데이터 비트 배열로 복원되는 제2 디스크램블링된 데이터를 발생시키는 단계를 포함하는 에러정정장치.
  22. 오리지널 데이터를 입력받아 1차 랜덤화하는 제1 스크램블링을 수행하여 제1 스크램블링된 데이터를 발생시키는 단계;
    상기 제1 스크램블링된 데이터를 2차 랜덤화하는 제2 스크램블링을 수행하여 제2 스크램블링된 데이터를 발생시키는 단계;
    상기 오리지널 데이터, 제1 스크램블링된 데이터, 및 제2 스크램블링된 데이터에 대한 랜덤화 정도를 분석하여 제1 제어선택신호를 발생시키는 단계;
    상기 제1 제어선택신호에 응답하여 상기 오리지널 데이터, 제1 스크램블링된 데이터, 및 제2 스크램블링된 데이터 중 하나의 데이터를 선택하는 단계;
    상기 선택된 데이터에 대한 에러정정코드 인코딩을 수행하여 메모리장치에 쓰여질 인코딩된 데이터를 발생시키는 단계;
    상기 메모리장치로부터 읽은 인코딩된 데이터에 대해 에러정정코드 디코딩을 수행하여 에러 정정된 디코딩된 데이터를 발생시키는 단계;
    제2 제어선택신호에 응답하여, 상기 디코딩된 데이터를 외부로 직접 출력시키거나, 상기 2차 랜덤화에 의해 제2 스크램블링된 데이터의 비트 배열에서 상기 제1 스크램블링된 데이터의 데이터 비트 배열로 복원되는 제1 디스크램블링된 데이터를 발생시키거나, 또는 상기 1차 랜덤화에 의해 제1 스크램블링된 데이터의 비트 배열에서 상기 오리지널 데이터의 데이터 비트 배열로 복원되는 제2 디스크램블링된 데이터를 발생시키는 단계; 및
    상기 제1 디스크램블링된 데이터가 발생되는 경우 상기 1차 랜덤화에 의해 제1 스크램블링된 데이터의 비트 배열에서 상기 오리지널 데이터의 데이터 비트 배열로 복원되는 제2 디스크램블링된 데이터를 발생시키는 단계를 포함하는 에러정정방법.
KR1020170004430A 2017-01-11 2017-01-11 메모리장치의 에러정정장치 및 에러정정방법과, 에러정정장치를 포함하는 메모리 컨트롤러 KR20180082927A (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
KR1020170004430A KR20180082927A (ko) 2017-01-11 2017-01-11 메모리장치의 에러정정장치 및 에러정정방법과, 에러정정장치를 포함하는 메모리 컨트롤러
US15/653,792 US10691530B2 (en) 2017-01-11 2017-07-19 Apparatuses and methods for correcting errors and memory controllers including the apparatuses for correcting errors
US16/884,377 US11269721B2 (en) 2017-01-11 2020-05-27 Memory system for preventing write error

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020170004430A KR20180082927A (ko) 2017-01-11 2017-01-11 메모리장치의 에러정정장치 및 에러정정방법과, 에러정정장치를 포함하는 메모리 컨트롤러

Publications (1)

Publication Number Publication Date
KR20180082927A true KR20180082927A (ko) 2018-07-19

Family

ID=62783074

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170004430A KR20180082927A (ko) 2017-01-11 2017-01-11 메모리장치의 에러정정장치 및 에러정정방법과, 에러정정장치를 포함하는 메모리 컨트롤러

Country Status (2)

Country Link
US (2) US10691530B2 (ko)
KR (1) KR20180082927A (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114840455A (zh) * 2021-02-02 2022-08-02 辉达公司 存储器接口上的数据加扰技术

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10742237B2 (en) * 2018-06-21 2020-08-11 Western Digital Technologies, Inc. Memory device with adaptive descrambling
US10956259B2 (en) 2019-01-18 2021-03-23 Winbond Electronics Corp. Error correction code memory device and codeword accessing method thereof
TWI707354B (zh) * 2019-03-20 2020-10-11 華邦電子股份有限公司 錯誤更正碼記憶體裝置和碼字存取方法
US11275515B1 (en) * 2020-08-27 2022-03-15 Micron Technology, Inc. Descrambling of scrambled linear codewords using non-linear scramblers
JP2022102785A (ja) 2020-12-25 2022-07-07 キオクシア株式会社 メモリシステム
TWI805231B (zh) * 2022-02-18 2023-06-11 慧榮科技股份有限公司 資料儲存裝置以及非揮發式記憶體控制方法
TW202334821A (zh) 2022-02-18 2023-09-01 慧榮科技股份有限公司 資料儲存裝置以及非揮發式記憶體控制方法

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4620541B2 (ja) * 2005-08-04 2011-01-26 ルネサスエレクトロニクス株式会社 誤り検出符号算出回路、誤り検出符号算出方法及び記録装置
US20100122143A1 (en) * 2007-03-27 2010-05-13 Hughes Network Systems, Llc Method and system for providing low density parity check (ldpc) coding for scrambled coded multiple access (scma)
EP2131516A1 (en) * 2008-06-04 2009-12-09 THOMSON Licensing A cell dependent multi-group hybrid automatic repeat request method for multicast in wireless networks
US8154918B2 (en) * 2008-06-30 2012-04-10 Sandisk Il Ltd. Method for page- and block based scrambling in non-volatile memory
US8713330B1 (en) * 2008-10-30 2014-04-29 Apple Inc. Data scrambling in memory devices
US8489961B2 (en) * 2009-10-19 2013-07-16 Lg Electronics Inc. Transmitting system and method of processing digital broadcast signal in transmitting system, receiving system and method of receiving digital broadcast signal in receiving system
KR101678919B1 (ko) * 2011-05-02 2016-11-24 삼성전자주식회사 메모리 시스템 및 에러 정정 방법
KR20130049332A (ko) * 2011-11-04 2013-05-14 삼성전자주식회사 메모리 시스템 및 그것의 동작 방법
US8984373B2 (en) 2012-02-22 2015-03-17 Silicon Motion, Inc. Method for accessing flash memory and associated flash memory controller
US20130343131A1 (en) * 2012-06-26 2013-12-26 Lsi Corporation Fast tracking for flash channels
US9645177B2 (en) * 2012-05-04 2017-05-09 Seagate Technology Llc Retention-drift-history-based non-volatile memory read threshold optimization
JP2014165710A (ja) * 2013-02-26 2014-09-08 Ricoh Imaging Co Ltd 画像表示装置
US20140310534A1 (en) * 2013-04-15 2014-10-16 Apple Inc. Data scrambling in memory devices using combined sequences
US9129701B2 (en) * 2013-12-19 2015-09-08 Sandisk Technologies Inc. Asymmetric state detection for non-volatile storage
KR102461453B1 (ko) * 2015-06-10 2022-11-02 삼성전자주식회사 스토리지 장치
US9727261B2 (en) * 2015-09-24 2017-08-08 Western Digital Technologies, Inc. Weighted programming patterns in solid-state data storage systems

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114840455A (zh) * 2021-02-02 2022-08-02 辉达公司 存储器接口上的数据加扰技术

Also Published As

Publication number Publication date
US10691530B2 (en) 2020-06-23
US11269721B2 (en) 2022-03-08
US20200285538A1 (en) 2020-09-10
US20180196712A1 (en) 2018-07-12

Similar Documents

Publication Publication Date Title
KR20180082927A (ko) 메모리장치의 에러정정장치 및 에러정정방법과, 에러정정장치를 포함하는 메모리 컨트롤러
US10771091B2 (en) Flash memory apparatus and storage management method for flash memory
US10019355B2 (en) Flash memory apparatus and storage management method for flash memory
JP5999926B2 (ja) 不揮発性メモリ装置、該メモリ装置を制御するコントローラ、及び該コントローラの動作方法
CN101635158B (zh) 编码和/或解码系统数据的方法、装置、系统和体系结构
US10741212B2 (en) Error correction code (ECC) encoders, ECC encoding methods capable of encoding for one clock cycle, and memory controllers including the ECC encoders
CN102017425A (zh) 用于执行级联纠错的方法和系统
JP6847796B2 (ja) メモリシステム
CN110797075B (zh) 具有可重新配置的邻区辅助llr校正的nand闪速存储器
CN110941504B (zh) 使用解码器和神经网络来解码数据
JP6730215B2 (ja) メモリコントローラ、メモリシステムおよび制御方法
KR20180059151A (ko) 에러 정정 회로 및 이를 포함하는 메모리 컨트롤러
US11025281B2 (en) Memory system
US10326473B2 (en) Symbol-based coding for NAND flash devices
US20180373850A1 (en) Memory system including data obfuscation
CN113535075B (zh) 具有增强的物理安全性的数据加扰器
US9098391B2 (en) Memory system and method of operating memory system using reconstructed data
US10970166B2 (en) Memory system and method of controlling non-volatile memory
KR20180059149A (ko) 에러 정정 코드 디코더, 이를 포함하는 메모리 컨트롤러, 및 에러 정정 코드 디코팅 방법
US11916569B2 (en) Flash memory apparatus and storage management method for flash memory
KR102007163B1 (ko) 인코더, 디코더 및 이를 포함하는 반도체 장치
US10951238B1 (en) Memory system and method for controlling non-volatile memory
Levina et al. Wavelet Codes and Their Implementation for Protection of NAND Flash Memory
Bu Coding Techniques for Noisy Channels with Gain and/or Offset Mismatch
Kousa et al. Error control coding for multi-level cell memories

Legal Events

Date Code Title Description
A201 Request for examination