KR102217966B1 - 스토리지 드라이브의 비휘발성 반도체 메모리에 그리고 상기 비휘발성 반도체 메모리로부터 데이터를 전달하기 위해 디스크립터들을 생성하는 장치 및 방법 - Google Patents

스토리지 드라이브의 비휘발성 반도체 메모리에 그리고 상기 비휘발성 반도체 메모리로부터 데이터를 전달하기 위해 디스크립터들을 생성하는 장치 및 방법 Download PDF

Info

Publication number
KR102217966B1
KR102217966B1 KR1020157019144A KR20157019144A KR102217966B1 KR 102217966 B1 KR102217966 B1 KR 102217966B1 KR 1020157019144 A KR1020157019144 A KR 1020157019144A KR 20157019144 A KR20157019144 A KR 20157019144A KR 102217966 B1 KR102217966 B1 KR 102217966B1
Authority
KR
South Korea
Prior art keywords
descriptors
module
data
descriptor
nvsm
Prior art date
Application number
KR1020157019144A
Other languages
English (en)
Other versions
KR20150095900A (ko
Inventor
치공 이
슈-헝 프레데릭 아우
준길 박
현석 신
웨이 쉬
진진 히
페이 선
Original Assignee
마벨 월드 트레이드 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마벨 월드 트레이드 리미티드 filed Critical 마벨 월드 트레이드 리미티드
Publication of KR20150095900A publication Critical patent/KR20150095900A/ko
Application granted granted Critical
Publication of KR102217966B1 publication Critical patent/KR102217966B1/ko

Links

Images

Classifications

    • 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
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0688Non-volatile semiconductor memory arrays
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/32Timing circuits

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

제1, 제2, 제3, 제4 및 제5 모듈들을 포함하는 스토리지 드라이브가 제공된다. 상기 제1 모듈은 호스트 디바이스와 상기 스토리지 드라이브 간의 데이터 블록들의 전달을 제어하도록 구성된다. 상기 제2 모듈은 상기 스토리지 드라이브 내의 비휘발성 반도체 메모리에 그리고 상기 비휘발성 반도체 메모리로부터 상기 데이터 블록들을 전달하도록 구성된다. 상기 제3 모듈은 상기 제2 모듈과 상기 비휘발성 반도체 메모리 간의 데이터 블록들의 전달을 기술하는 제1 디스크립터를 생성하도록 구성된다. 상기 제4 모듈은 상기 제1 디스크립터에 따라 제2 디스크립터들을 생성하도록 구성된다. 상기 제2 디스크립터들 각각은 상기 데이터 블록들 중 각각의 데이터 블록에 대응한다. 상기 제5 모듈은 상기 제2 디스크립터들에 근거하여 명령어 신호들을 생성하도록 구성된다. 상기 제2 모듈은 상기 명령어 신호들에 근거하여, 상기 제1 모듈과 상기 비휘발성 반도체 메모리 간에 데이터 블록들을 전달하도록 구성된다.

Description

스토리지 드라이브의 비휘발성 반도체 메모리에 그리고 상기 비휘발성 반도체 메모리로부터 데이터를 전달하기 위해 디스크립터들을 생성하는 장치 및 방법{APPARATUS AND METHOD FOR GENERATING DESCRIPTORS TO TRANSFER DATA TO AND FROM NON-VOLATILE SEMICONDUCTOR MEMORY OF A STORAGE DRIVE}
[관련 출원의 상호 참조]
본 출원은 2013년 12월 18일자로 출원된 미국 출원 제14/132,810호에 대한 우선권 및 2013년 11월 5일자로 출원된 미국 가출원 제61/900,104호 및 2012년 12월 19일자로 출원된 미국 가출원 제61/739,386호의 이득을 주장한다. 상기 출원들의 개시내용은 그 전체가 본 명세서에 참조로서 포함된다.
[기술분야]
본 발명은 비휘발성 반도체 메모리 액세스 시스템들에 관한 것이며, 특히 비휘발성 반도체 메모리용 데이터 전달 제어 시스템들에 관한 것이다.
본 명세서에서 제공되는 배경 설명은 본 발명의 배경을 개괄적으로 제시하기 위한 것이다. 본 배경기술란에서 기술되는 정도의 본 발명의 발명자들의 연구는 물론, 출원 시점에 달리 종래기술로서 볼 수 없는 본 발명의 양상들은, 본 발명에 대해 명시적으로나 암시적으로도 종래기술로서 인정되는 것은 아니다.
비휘발성 반도체 메모리(NVSM) 드라이브(예컨대, 플래시 드라이브)는 NVSM을 포함하며, 데이터 페이지의 사이즈에 근거하여 동작한다. 예를 들어, NVSM으로 그리고 NVSM으로부터 전달되는 데이터는 데이터 세트들로 그룹화된다. 데이터 세트들 각각은 하나 이상의 데이터 페이지들의 길이와 동일한 길이를 가진다. 데이터 페이지는 예컨대, 8키로바이트(KB)의 길이를 가질 수 있다.
NVSM 드라이브는 예컨대, NVSM 인터페이스, 버퍼 관리 모듈, 에러 정정 코드(ECC) 모듈, 인터페이스 관리 모듈 및 NVSM 제어 모듈을 포함할 수 있다. NVSM 인터페이스는 호스트와 통신할 수 있다. 데이터는 NVSM 인터페이스와 호스트 간에 전달된다. 버퍼 관리 모듈은 NVSM에 저장되기 전에 호스트로부터 데이터를 수신하고, 호스트로 전달되기 전에 NVSM으로부터 데이터를 수신한다. ECC 모듈은 NVSM에 제공되는 데이터를 인코딩하고, NVSM으로부터 수신되는 데이터를 디코딩한다. 인터페이스 관리 모듈은 ECC 모듈과 NVSM 사이의 데이터 전달들을 제어한다.
NVSM 제어 모듈은 호스트로부터 수신되는 액세스 요청 신호들에 응답하여 디스크립터들을 생성한다. 상기 디스크립터들은 예컨대, 판독 동작 또는 프로그램(즉, 기입) 동작이 수행되어야 하는지의 여부, 전달되는 데이터의 양 및 액세스할 NVSM 내의 어드레스들을 나타낼 수 있다. ECC 모듈 및 인터페이스 관리 모듈은 디스크립터들에 근거하여 동작된다.
인터페이스 제어 모듈은 복수의 채널들(예컨대, NVSM 칩 당 8 채널들)을 통해 NVSM과 통신하며 채널들 각각에 대한 선입선출(FIFO) 레지스터를 포함한다. FIFO 레지스터들은 판독 및 프로그램 동작들 동안 순차적으로 액세스된다. FIFO 레지스터들 각각의 사이즈는 하나 이상의 데이터 페이지들의 사이즈와 동일하다.
프로그램 동작 동안, ECC 모듈은 NVSM에 저장되기 전에 인터페이스 제어 모듈에 데이터를 페이지 기반(page-based) 포맷으로 전달한다. ECC 모듈은 FIFO 레지스터들 각각에 하나 이상의 데이터 페이지들(M 페이지들)을 전달할 수 있고, M은 1보다 크거나 동일한 정수이다. ECC 모듈이 FIFO 레지스터들 각각에 전달하는 페이지들의 수는 NVSM 드라이브의 페이지 포맷에 좌우된다. 전달되는 M개의 페이지들의 각각의 세트에 대해, 단일의 디스크립터가 생성된다.
예를 들어, ECC 모듈이 단일 페이지 포맷으로 NVSM 드라이브에서 동작하는 경우, 1개의 데이터 페이지가 FIFO 레지스터들 각각에 전달된다. 이 예에서, FIFO 레지스터들 각각의 사이즈는 1개의 데이터 페이지의 사이즈와 동일하다. ECC 모듈이 듀얼 페이지 포맷으로 NVSM 드라이브에서 동작하는 경우, 2개의 데이터 페이지들이 FIFO 레지스터들 각각에 전달되고, FIFO 레지스터들 각각의 사이즈는 2개의 데이터 페이지들의 사이즈와 동일하다. M개의 데이터 페이지들은 다음(또는 후속적인) FIFO 레지스터에 데이터를 전달하기 전에 현재의 FIFO 레지스터에 전달된다. 상기 기술된 데이터 전달들은 판독 동작에 대해 역으로 수행된다.
현재의 FIFO 레지스터가 M개의 데이터 페이지들을 수신할 때까지 데이터가 다음 FIFO 레지스터에 전달되지 않기 때문에, 데이터 전달 지연들이 초래될 수 있다. 이러한 지연들은 FIFO 레지스터들 중 하나 이상에서 경험될 수 있고, 높은 차수의 페이지 포맷(higher order page format)들의 경우 증가될 수 있다. 페이지 포맷의 차수는 단일 데이터 전달 이벤트 동안 전달되는 페이지들의 수를 나타낸다. 데이터 전달 이벤트는 NVSM의 채널들 중 하나로 또는 하나로부터 데이터를 전달하는 것을 나타낸다. 예를 들어, 2-페이지 포맷을 갖는 NVSM 드라이브에서, ECC 모듈과 제1 채널 간의 속도차로 인해 제1 FIFO 레지스터에서 "병목"이 발생하면, 지연들이 상기 제1 FIFO 레지스터에 및 모든 후속적인 FIFO 레지스터들에서 발생할 수 있다. 두 개의 데이터 페이지들이 단일 FIFO 레지스터로 전달되기 때문에, 제1 데이터 페이지가 지연될 때 제2 데이터 페이지가 지연될 수 있다. 또한, 제1 FIFO 레지스터로의 제2 데이터 페이지를 전달함에 있어서의 지연들은 상기 제1 FIFO 레지스터에 후속적인 FIFO 레지스터들로의 데이터의 전달들을 지연시킨다.
스토리지 드라이브가 제공되고, 제1, 제2, 제3, 제4 및 제5 모듈들을 포함한다. 상기 제1 모듈은 호스트 디바이스와 스토리지 드라이브 간의 데이터 블록들의 전달을 제어하도록 구성된다. 상기 제2 모듈은 상기 스토리지 드라이브 내의 비휘발성 반도체 메모리로 그리고 상기 비휘발성 반도체 메모리로부터 데이터 블록들을 전달하도록 구성된다. 상기 제3 모듈은 상기 제2 모듈과 상기 비휘발성 반도체 메모리 간의 데이터 블록들의 전달을 기술하는 제1 디스크립터를 생성하도록 구성된다. 상기 제4 모듈은 상기 제1 디스크립터에 따라 제2 디스크립터들을 생성하도록 구성된다. 상기 제2 디스크립터들 각각은 데이터 블록들 중 각각의 블록에 대응한다. 상기 제5 모듈은 상기 제2 디스크립터들에 근거하여 명령어 신호들을 생성하도록 구성된다. 상기 제2 모듈은 상기 명령어 신호들에 근거하여, 상기 제1 모듈과 비휘발성 반도체 메모리 간에 데이터 블록들을 전달하도록 구성된다.
다른 특징들에서, 제4 모듈은 템플릿(template)에 액세스하고, 상기 제1 디스크립터의 파라미터들에 근거하여 상기 템플릿 내의 필드들을 갱신하며, 그리고 상기 템플릿에 따라 상기 제2 디스크립터들을 생성하도록 구성된다. 다른 특징들에서, 상기 제4 모듈은 템플릿의 필드들의 값들을 상기 파라미터들로 교체하도록 구성된다.
다른 특징들에서, 상기 파라미터들은 비휘발성 반도체 메모리를 제어하기 위한 제어 파라미터들을 포함한다. 상기 제4 모듈은 상기 제어 파라미터들을 포함하게끔 제2 파라미터들 중 일부 파라미터들를 생성하고 상기 제어 파라미터들을 포함하지 않게끔 제2 파라미터들의 다른 파라미터들을 생성하도록 구성된다.
다른 특징들에서, 상기 템플릿은 상기 제2 디스크립터들에 대한 독립 디스크의 리던던트 어레이(redundant array of independent disk) 값들을 포함한다. 상기 제4 모듈은 독립 디스크의 리던던트 어레이 값들을 각각 포함하도록 제2 디스크립터들을 생성하도록 구성된다. 상기 제2 모듈은 상기 독립 디스크의 리던던트 어레이 값들에 근거하여, 상기 제1 모듈과 비휘발성 반도체 메모리 간에 데이터 블록들을 전달하도록 구성된다.
다른 특징들에서, 템플릿들은 상기 제2 디스크립터들 각각에 대한 채널 값들 및 메모리 디바이스 값들을 포함한다. 상기 제2 모듈은 상기 채널 값들 및 메모리 디바이스 값들에 따라 상기 비휘발성 반도체 메모리에 그리고 상기 비휘발성 반도체 메모리로부터 각각의 채널들 상에서 데이터의 일부들을 전달하도록 구성된다.
다른 특징들에서, 상기 제1 디스크립터는 펌웨어 디스크립터이다. 상기 제2 디스크립터들은 하드웨어 디스크립터들이다.
다른 특징들에서, 상기 제3 모듈은 상기 제1 디스크립터를 생성하기 위해 펌웨어를 실행하도록 구성된다. 상기 제4 모듈은 전자 회로를 포함하고, 상기 전자 회로는 상기 제1 디스크립터에 따라 상기 제2 디스크립터들을 생성하도록 구성된다.
다른 특징들에서, 방법이 제공되며, 상기 방법은, 호스트 디바이스와 스토리지 드라이브 간의 데이터 블록들의 전달을 제어하는 단계와, 상기 스토리지 드라이브 내의 비휘발성 반도체 메모리로 또는 상기 비휘발성 반도체 메모리로부터 데이터 블록들을 전달하기 위해 제1 디스크립터를 생성하는 단계와, 상기 제1 디스크립터에 따라, 제2 디스크립터들 - 상기 제2 디스크립터들 각각은 데이터 블록들의 각각의 블록에 대응함 - 을 생성하는 단계와, 상기 제2 디스크립터들에 근거하여 명령어 신호들을 생성하는 단계와, 그리고 명령어 신호들에 근거하여, 호스트 디바이스와 비휘발성 반도체 메모리 간에 데이터의 블록들을 전달하는 단계를 포함한다.
다른 특징들에서, 방법은 또한, 템플릿에 액세스하는 단계와, 상기 제1 디스크립터 내의 파라미터들에 근거하여 상기 템플릿 내의 필드들을 갱신하는 단계와 그리고 상기 템플릿에 따라 상기 제2 디스크립터들을 생성하는 단계를 포함한다.
다른 특징들에서, 방법은 또한, 상기 템플릿의 필드들의 값들을 상기 파라미터들과 교체하는 단계 - 상기 파라미터들은 비휘발성 반도체 메모리를 제어하기 위한 제어 파라미터들을 포함함 - 와, 상기 제어 파라미터들을 포함하게끔 상기 제2 디스크립터들 중 일부 디스크립터들을 생성하는 단계와, 그리고 상기 제어 파라미터들을 포함하지 않게끔 상기 제2 디스크립터들 중 다른 디스크립터들을 생성하는 단계를 포함한다.
다른 특징들에서, 상기 제1 디스크립터는 펌웨어 디스크립터이고, 상기 제2 디스크립터들은 하드웨어 디스크립터들이다. 다른 특징들에서, 방법은 또한, 상기 제1 디스크립터를 생성하기 위해 펌웨어를 실행시키는 단계와 그리고 전자 회로를 통해 상기 제1 디스크립터에 따라 상기 제2 디스크립터를 생성하는 단계를 포함한다.
다른 특징들에서, 제어 시스템이 제공되며, 상기 제어 시스템은 데이터 전달 이벤트들의 각각의 이벤트에 대해 적어도 두 개의 디스크립터들에 근거하여 인터페이스 관리 모듈과 비휘발성 반도체 메모리 간의 데이터 블록들의 데이터 전달 이벤트들을 제어하도록 구성된 제어 모듈을 포함한다. 상기 비휘발성 반도체 메모리는 데이터 전달 이벤트의 판독 이벤트 또는 프로그램 이벤트에 대해 준비된다. 상기 인터페이스 관리 모듈 및 비휘발성 반도체 메모리는 고체-상태 메모리 드라이브 내에서 동작하도록 구성된다. 커맨드 관리 모듈이 적어도 두 개의 디스크립터들에 근거하여 파라미터 신호를 생성하도록 구성된다. 상기 인터페이스 관리 모듈은 상기 파리미터 신호에 근거하여 명령어 신호들을 생성하고, 상기 판독 이벤트 또는 프로그램 이벤트를 수행하기 위해 비휘발성 반도체 메모리에 상기 명령어 신호들을 전송하도록 구성된다.
다른 특징들에서, 상기 데이터 전달 이벤트들 각각은 데이터 페이지를 전달하는 것을 포함한다. 데이터 페이지의 사이즈는 데이터 블록들 중 적어도 두 개의 블록들의 사이즈와 동일하다. 상기 데이터 블록들 중 적어도 두 개의 블록들은 적어도 두 개의 디스크립터들 중 각각의 디스크립터에 근거하여 전달된다.
다른 특징들에서, 데이터 전달 이벤트들 각각은 데이터 페이지들을 전달하는 것을 포함한다. 다른 특징들에서, 상기 인터페이스 관리 모듈은 상기 데이터 블록들의 전달을 개시하기 위해 상기 데이터 전달 이벤트들 각각에 대한 트리거 명령어 세트들을 생성하도록 구성된다.
다른 특징들에서, 적어도 두 개의 디스크립터들의 수는 데이터 전달 이벤트들 각각에 대해 생성되는 트리거 명령어 세트들의 수와 동일하다. 다른 특징들에서, 상기 인터페이스 관리 모듈은 상기 데이터 전달 이벤트들 각각에 대한 준비 기간(preparing period)들 전에 상기 트리거 명령어 세트들을 생성하도록 구성된다. 상기 준비 기간들에 후속적으로, 상기 인터페이스 관리 모듈은 판독 명령어 세트들 또는 프로그램 명령어 세트들을 생성하도록 구성된다. 상기 데이터 전달 이벤트들 각각은 상기 트리거 명령어 세트들 중 적어도 하나 및 상기 판독 명령어 세트들 또는 프로그램 명령어 세트들 중 적어도 하나를 포함한다.
다른 특징들에서, 적어도 두 개의 디스크립터들 각각은 할당 블록 사이즈들, 비휘발성 반도체 메모리의 어드레스들 및 데이터 전달 이벤트들이 판독, 프로그램 또는 소거 이벤트들인지의 여부를 나타낸다.
다른 특징들에서, 파라미터 신호의 비트들은 전달할 데이터의 양, 비휘발성 반도체 메모리의 어드레스들 및 데이터 전달 이벤트들이 판독, 프로그램 또는 소거 이벤트들인지의 여부를 나타낸다.
다른 특징들에서, 파라미터 신호는 제1 파라미터 신호이다. 커맨드 관리 모듈은 적어도 두 개의 디스크립터들에 근거하여 제2 파라미터 신호를 생성하도록 구성된다. 에러 정정 코드 모듈은 상기 제2 파라미터 신호에 근거하여 인터페이스 관리 모듈로 그리고 상기 인터페이스 관리 모듈로부터 데이터 블록들을 전달하도록 구성된다.
다른 특징들에서, 상기 인터페이스 관리 모듈은 선입선출 레지스터들을 포함한다. 에러 정정 코드 모듈은 상기 선입선출 레지스터들에 데이터 블록들을 스프레드(spread)하도록 구성된다. 상기 선입선출 레지스터들 각각의 사이즈는 데이터 페이지의 사이즈보다 작다.
다른 특징들에서, 고체-상태 메모리 드라이브가 제공되며, 상기 고체-상태 메모리 드라이브는 제어 시스템, 버퍼 관리 모듈 및 에러 정정 코드 모듈을 포함한다. 상기 버퍼 관리 모듈은 상기 고체-상태 메모리 드라이브와 통신하여 호스트로부터 호스트 데이터 섹터들을 수신하고, 상기 호스트 데이터 섹터들에 근거하여 제1 드라이브 데이터 섹터들을 생성하며, 제2 드라이브 데이터 섹터들을 수신하고 상기 호스트에 호스트 데이터 섹터들을 전송하도록 구성된다. 상기 에러 정정 코드 모듈은 상기 버퍼 관리 모듈로부터 상기 인터페이스 관리 모듈로 제1 드라이브 데이터 섹터들을 전달하고 그리고 상기 인터페이스 관리 모듈로부터 상기 버퍼 관리 모듈로 상기 제2 드라이브 데이터 섹터들을 전달하도록 구성된다.
본 발명의 응용의 추가의 영역들이 상세한 설명, 특허청구범위 및 도면들로부터 분명해질 것이다. 상세한 설명 및 특정 예들은 단지 예시를 위해 의도된 것이며, 본 발명의 범위를 한정하고자 의도된 것이 아니다.
본 발명은 상세한 설명 및 첨부 도면들로부터 더욱 충분히 이해될 것이다.
도 1은 본 발명에 따른 인터페이스 관리 제어 시스템을 통합한 NVSM 스토리지 시스템의 기능 블록도이다.
도 2는 본 발명에 따른 인터페이스 관리 제어 시스템의 일부의 기능 블록도이다.
도 3은 본 발명에 따른 페이지 기반 전달을 위한 단일 페이지 판독 이벤트를 도시하는 타이밍도이다.
도 4는 본 발명에 따른 페이지 기반 전달을 위한 단일 페이지 프로그램 이벤트를 도시하는 타이밍도이다.
도 5는 본 발명에 따른 복수의 디스크립터들을 이용한 멀티-페이지 판독 이벤트를 도시하는 타이밍도이다.
도 6은 본 발명에 따른 복수의 디스크립터들을 이용한 멀티-페이지 프로그램 동작을 도시하는 타이밍도이다.
도 7은 본 발명에 따른 페이지-사이즈의(page-sized) 전달들을 갖는 멀티-페이지 프로그램 이벤트들을 도시하는 인터페이스 관리 제어 시스템의 일부의 기능 블록도이다.
도 8은 본 발명에 따른 전달되는 할당 블록들과 동일한 수의 디스크립터들을 갖는 판독 이벤트를 도시하는 타이밍도이다.
도 9는 본 발명에 따른 전달되는 할당 블록들보다 많은 디스크립터들을 갖는 판독 이벤트를 도시하는 타이밍도이다.
도 10은 본 발명에 따른 복수의 명령어 세트들을 갖는 멀티-할당 블록 판독 이벤트를 도시하는 타이밍도이다.
도 11은 본 발명에 따른 전달되는 할당 블록들과 동일한 수의 디스크립터들을 갖는 프로그램 이벤트를 도시하는 타이밍도이다.
도 12는 본 발명에 따른 전달되는 할당 블록들보다 많은 디스크립터들을 갖는 프로그램 이벤트를 도시하는 타이밍도이다.
도 13은 본 발명에 따른 복수의 명령어 세트들을 갖는 멀티-할당 블록 판독 이벤트를 도시하는 타이밍도이다.
도 14는 본 발명에 따른 할당 블록 사이즈의 전달들을 갖는 할당 블록 기반 프로그램 이벤트들을 도시하는 인터페이스 관리 제어 시스템의 일부의 기능 블록도이다.
도 15는 본 발명에 따른 복수의 인코더들 및 디코더들을 통합한 인터페이스 관리 제어 시스템의 일부의 기능 블록도이다.
도 16은 본 발명에 따른 NVSM 스토리지 시스템 및 NVSM 드라이브를 동작시키는 방법을 도시한다.
도 17은 본 발명에 따른 디스크립터 생성 모듈을 통합한 NVSM 스토리지 시스템의 일부의 기능 블록도이다.
도 18은 본 발명에 따른 할당 유닛 당 펌웨어 디스크립터의 생성을 도시하는 블록도이다.
도 19는 본 발명에 따른 할당 유닛 당 하드웨어 디스크립터의 생성을 도시하는 블록도이다.
도 20은 본 발명에 따른 디스크립터 생성 방법을 도시한다.
도 21은 본 발명에 따른 NVSM 제어 모듈에 의해 생성되는 펌웨어 디스크립터의 예를 도시한다.
도 22는 도 21의 펌웨어 디스크립터에 대한 제어 행들의 예들을 도시한다.
도 23은 본 발명에 따른 상태 레지스터의 예를 도시한다.
도 24는 본 발명에 따른 펌웨어 디스크립터의 예를 도시한다.
도 25는 본 발명에 따른 템플릿의 예를 도시한다.
도 26은 본 발명에 따른 독립 디스크들의 리던던트 어레이(RAID)에 대한 하드웨어 디스크립터들의 생성을 도시한다.
다음의 설명에서, 용어 "비휘발성 반도체 메모리(NVSM)"는 상변화 메모리(phase change memory: PCM), 전기적으로 소거가능하고 프로그래밍가능한 판독-전용 메모리(EEPROM), 판독 전용 메모리(ROM) 및/또는 랜덤 액세스 메모리(RAM)을 나타낼 수 있다. EEPROM의 한 쌍의 예들은 NAND 플래시 메모리 및 NOR 플래시 메모리이다.
또한, 다음의 설명에서, 용어 "호스트"는 NVSM 드라이브에 데이터를 전달하고 그리고/또는 NVSM 드라이브로부터의 데이터에 액세스하는 디바이스를 나타낼 수 있다. NVSM 드라이브는 플래시 드라이브, USB 드라이브, 고체-상태 메모리 드라이브, 등일 수 있다.
몇 가지 예들로서, 호스트는 컴퓨터, 카메라, 핸드헬드 디바이스, 포터블 디바이스, 셀룰러 폰, 프린터, PDA, 전자 노드 패드, 텔레비전, 디스플레이, 가전기기(appliance), 모니터링 시스템, 등을 나타낼 수 있다. 컴퓨터들의 예들은 데스크탑 컴퓨터, 랩탑 컴퓨터, 전자 노트 패드, 등이다. 가전기기의 예들은 세탁기, 드라이기, 냉장고, 등이다. NVSM 드라이브는 NVSM을 포함하고, 하드 디스크 드라이브 플래터와 같은 회전 자기 스토리지 매체를 포함하지 않을 수 있다. 모니터링 시스템들의 예들은 절도범 감시 모니터(burglar monitor)들, 연기 검출 시스템들, 베이비 모니터(baby monitor)들, 등을 포함한다.
추가적으로, 모듈들, 네트워크 디바이스들 및 회로 컴포넌트들과 같은 다양한 시스템 요소들이 본 명세서에 개시된다. 시스템 요소들의 구성의 예들이 개시되며, 인접 요소들 및 비인접 요소들을 포함한다. 인접 요소들은 서로 직접적으로 연결되어 있는 것으로 도시된다. 비인접 요소들은 서로 간접적으로 연결되어 있는 것으로 도시된다.
도 1은 비휘발성 반도체 메모리(NVSM) 스토리지 시스템(10)을 도시한다. NVSM 스토리지 시스템(10)은 호스트(12)(또는 호스트 측) 및 NVSM 드라이브(14)(또는 NVSM 측)을 포함한다. 호스트(12)는 호스트 제어 모듈(16) 및 호스트 인터페이스(18)를 포함한다. NVSM 드라이브(14)는 NVSM 드라이브 인터페이스(20)를 통해 호스트(12)와 통신한다. NVSM 드라이브(14)는 NVSM 드라이브 인터페이스(12), 수신 경로(22), 전송 경로(24), 인터페이스 관리 제어 시스템(26) 및 NVSM(28)을 포함한다. NVSM 드라이브 인터페이스(20)는 호스트 인터페이스(18)와 통신한다. 수신 및 전송 경로들(22, 24)은 NVSM 드라이브 인터페이스(20)와 NVSM(28) 간에 데이터를 전달한다. 인터페이스 관리 제어 시스템(26)은 NVSM 제어 모듈(27)을 포함하고, NVSM 제어 모듈(27)은 NVSM(28)로의 그리고 NVSM(28)로부터의 데이터 전달들을 제어한다.
인터페이스 관리 제어 시스템(26)은 데이터의 할당 블록들(또는 할당 유닛(AU)들)의 미리 결정된, 선택된 그리고/또는 결정된 사이즈(들)에 근거하여 동작한다. 이는 단일의 고정된 블록 사이즈에 근거하여 동작하는 종래의 NVSM 드라이브들과 다른 점이다. 종래의 NVSM에서, 단일 블록 사이즈는 데이터 페이지의 사이즈와 동일하다.
본 발명에서, 데이터 할당 블록은, NVSM 드라이브(14)에 의해 설정되고 NVSM 드라이브(14)의 디바이스들 및/또는 모듈들 간에 데이터를 전달하기 위해 사용되는 데이터의 양(또는 사이즈 바운더리)을 나타낸다. NVSM(25)로의 그리고 NVSM(25)로부터의 각각의 데이터 전달 이벤트는 하나 이상의 데이터 할당 블록들을 포함한다. 데이터 전달 이벤트들은 프로그램 이벤트들 또는 판독 이벤트들일 수 있다. 할당 블록들의 사이즈들은, 서로 다른 판독 이벤트들에 대해, 서로 다른 프로그램 이벤트들에 대해 그리고/또는 판독 이벤트들과 프로그램 이벤트들 간에 동일하거나 다를 수 있다. 할당 블록들의 사이즈는 NVSM 제어 모듈(27)에 의해 결정, 설정 및/또는 조정될 수 있다. 할당 블록들, 할당 블록 사이즈들 및 할당 블록들의 전달이 하기에 더 기술된다.
호스트 제어 모듈(16)은 호스트 인터페이스(18)를 통해 NVSM 드라이브(14)로 호스트 데이터를 전송하고 그리고 NVSM 드라이브(14)로부터 호스트 데이터를 수신한다. 이는 판독, 기입(또는 프로그램) 및 소거 액세스 이벤트들을 포함할 수 있다. 호스트(12)는 수신된 데이터 객체에 근거하여 HSS들을 생성하고 그리고/또는 NVSM 드라이브(14)로부터 호스트 데이터 섹터(HDS)들 요청할 수 있다. HDS는 호스트(12)로부터 NVSM 드라이브(14)로 전송되는 가장 작은 길이 데이터 요소일 수 있다. HDS들은 인터페이스들(18, 20)의 각각의 포트들 간에 전송된다. 인터페이스들(18, 20)은 예컨대, SATA(serial advanced technology attachment) 인터페이스들, SCSI(small computer system interface)들, SAS(serial-attached SCSI)들, 파이버 채널 인터페이스들, USB 인터페이스들, 등일 수 있다.
호스트 제어 모듈(16)은 또한, 데이터 프로그램 신호들, 데이터 판독 신호들, 데이터 소거 신호들, 등과 같은 액세스 요청 신호들(30)을 생성할 수 있다. 액세스 요청 신호들(30)은 NVSM 제어 모듈(27)에 의해 및/또는 NVSM 드라이브 인터페이스(20)를 통해 NVSM 드라이브(14)의 다른 모듈들에 의해 수신될 수 있다. NVSM 제어 모듈(27)은 액세스 요청 신호들(30)에 근거하여 NVSM(28)으로의 액세스를 제어한다. NVSM 드라이브(14)는 NVSM 드라이브 인터페이스(20)를 통해 HDS들을 수신한다. NVSM 제어 모듈(27)은 액세스 요청 신호들(30)에 근거하여 NVSM(28)으로부터의 드라이브 데이터 섹터(DDS)들에 액세스하고 그리고/또는 DDS들을 요청할 수 있다.
수신 경로(22)는 압축 모듈(40), 암호화 모듈(encryption module)(42), 버퍼 관리 모듈(44), 드라이브 데이터 섹터(DDS) 생성 모듈(46), 에러 정정 코드(ECC) 모듈(48), 인터페이스 관리 모듈(50) 및 NVSM(28)을 포함한다. 전송 경로(24)는 NVSM(28), 인터페이스 관리 모듈(50), ECC 모듈(48), HDS 생성 모듈(52), 버퍼 관리 모듈(44), 복호화 모듈(decryption module)(54) 및 압축해제 모듈(56)을 포함한다. 버퍼 관리 모듈(44) 및 DDS 및 HDS 생성 모듈들(46, 52)은 단일 모듈을 형성하도록 결합될 수 있다. 인터페이스 관리 제어 시스템(26)은 NVSM 제어 모듈(27), 커맨드 관리 모듈(60), ECC 모듈(48) 및 인터페이스 관리 모듈(50)을 포함한다. NVSM 드라이브(14)의 모듈들은 NVSM 스토리지 시스템으로 지칭될 수 있다.
NVSM 드라이브 인터페이스(20)는 호스트 인터페이스(18)로부터 단일 데이터 스트림 또는 복수의 동시적인 병렬 데이터 스트림들을 수신할 수 있다. 데이터 스트림들은 압축 모듈(40)에 전달될 수 있다. 복수의 동시적인 병렬 데이터 스트림들은 호스트 및 NVSM 인터페이스들(18, 20)이 예컨대, SAS 인터페이스들일 때 수신될 수 있다.
압축 모듈(40)은 가능할 때, 그리고 버퍼 관리 모듈(44)에 의해 수신되기 전에, 호스트 인터페이스(15)로부터 수신되는 HDS들을 압축한다. 압축은 호스트 인터페이스(18)로부터 수신되는 HDS들과 동일한 길이인 HDS들에 수행된다. 압축 모듈(40)은 손실 및/또는 무손실 압축 방법들을 이용할 수 있다. 손실 압축 및 압축해제는 압축 및 압축해제 후 본래의 데이터와 동일하지는 않지만 본래의 데이터와 가까운 데이터를 제공한다. 무손실 압축 및 압축해제는 압축 및 압축해제에 후속하여 본래와 동일한 데이터의 복원(reconstruction)을 제공한다. 무손실 데이터 압축은 반복 비트 패턴들을 검출하고 리던던시를 제거하는 것을 포함한다.
압축 모듈(40)은 가능할 때, 호스트(12)로부터 수신되는 호스트 데이터 섹터(HDS)들을 압축한다. HDS들은 수신될 때, 압축해제, 부분적으로 압축 및/또는 완전히 압축될 수 있다. HDS는 호스트(12)로부터 NVSM 드라이브(14)로 전송되는 가장 짧은 길이의 데이터 요소일 수 있다. 특정 HDS들은 예컨대, 무손실 압축이 사용되고 대응하는 데이터 패턴이 리던던시를 포함하지 않을 때 압축가능하지 않을 수 있다.
암호화 모듈(42)은 압축된 HDS들을 암호화한다. 암호화 모듈(42)은 압축 모듈(40)로부터 수신되는 데이터를 암호화한다. 암호화는 하나 이상의 공공 및 프라이빗 키들을 포함할 수 있다. 암호화는 또한, 예컨대, NVSM 제어 모듈(27) 및/또는 NVSM(28)에 특정한 키와 같은, NVSM 드라이브(14) 또는 NVSM 드라이브(14)의 컴포넌트에 특정한 하나 이상의 키들을 포함할 수 있다.
버퍼 관리 모듈(44)은 버퍼(70)에 HDS들을 저장하고, HDS들을 DDS 생성 모듈(46)에 포워딩한다. 버퍼(70)는 RAM, 동적 RAM(DRAM) 및/또는 정적 RAM(SRAM)과 같은 휘발성 메모리를 포함할 수 있다. 버퍼 관리 모듈(44)은 NVSM(28)에 저장하기 전에 하나 이상의 HDS들을 수집 및 저장할 수 있다.
버퍼 관리 모듈(44)은 가능할 때, 암호화 모듈(42)로부터 수신된 DDS들을 HDS들로 변환하고, 버퍼 관리 모듈(44)로부터 다운스트림에 있는 (버퍼 관리 모듈(44)과 NVSM(28) 사이의) 컴포넌트로부터 HDS들을 수신하며, 그리고/또는 압축해제 모듈(56)에 HDS들을 전달할 수 있다. DDS들 각각은 HDS들의 사이즈보다 크거나 동일할 수 있다. 압축해제된 HDS들은 호스트(12)에 전송된다. 버퍼 관리 모듈(44)은 HDS들이 수신되는 순서와 관계없이 미리 결정된 순서로 압축 및/또는 암호화된 HDS들을 결합 및 저장할 수 있다.
예를 들어, HDS들은 번호순(numerical order)으로 수신될 수 있거나 또는 다른 순서로 수신될 수 있다. 순차적으로 수신되는 HDS들은 번호순 또는 미리 결정된 순서로 HDS들을 재순서화할 수 있도록 서로 다른 HDS 레지스터들(72)에 저장될 수 있다. 따라서, HDS 레지스터들(72)은 각각의 DDS들에 HDS 세트들(72)을 제공하기 위해 사용될 수 있다(HDS 레지스터들 1-N 및 HDS 세트들 1-N이 도시된다). HDS 레지스터가 필터링되고 그리고/또는 미리 결정된 DDS 길이 제한이 충족됨에 따라, HDS 세트는 버퍼 관리 모듈(44)로부터 릴리즈(release)되어 DDS 생성 모듈(46)에 패스될 수 있다. 미리 결정된 DDS 길이 제한은 예컨대, 어떤 추가의 HDS들도 현재의 DDS의 다른 HDS들과 결합될 수 없고 그리고/또는 결합되지 않을 때 충족된다.
DDS 생성 모듈(46)은 HDS 레지스터들(72) 내의 결합 및/또는 저장된 HDS(들)에 근거하여 그리고 HDS 및 DDS 정보에 근거하여 DDS들을 생성한다. DDS 생성 모듈(46)은 NVSM(28)에 저장하기 전에 HDS들을 DDS들로 변환한다. HDS 및 DDS 정보는 버퍼 관리 모듈(44)로부터 수신될 수 있다. HDS 및 DDS 정보는 HDS 정보 비트들, 및 DDS 길이, DDS 비트 슬롯 가용성, 등과 같은 DDS 정보를 포함할 수 있다.
DDS 생성 모듈(46)은 동일한 비트 길이를 가지도록 각각의 DDS를 생성할 수 있다. 뉴슨스 데이터(nuisance data)는 생성되는 DDS가 미리 결정된 비트 길이를 가지도록 하나 이상의 HDS들에 추가되는 데이터를 나타낸다. 압축된 HDS들은 서로 다른 비트 길이들을 가질 수 있다. 서로 다른 양의 뉴슨스 데이터가 압축된 HDS들에 결합되도록 추가되어, 동일한 길이의 DDS들을 생성한다. NVSM 제어 모듈(27)은 뉴슨스 데이터를 추가함으로써 HDS가 두 개의 DDS들 사이에서 분리되는 것을 방지한다. HDS의 일부들을 둘 이상의 다른 HDS들과 함께 저장하는 대신, 뉴슨스 데이터가 첨부된다. 뉴슨스 데이터는 예컨대, 모든 '0'들, 모든 '1'들, 널(null) 상태들 및/또는 NVSM 제어 모듈(27)의 프로그래밍 및/또는 프로세싱을 최소화하기 위한 리던던트 데이터를 포함할 수 있다.
ECC 모듈(48) 및 인터페이스 관리 모듈(50)은 커맨드 관리 모듈(60)로부터의 파라미터 신호들에 근거하여 동작할 수 있다. 커맨드 관리 모듈(60)은 NVSM 제어 모듈(27)로부터 수신되는 커맨드들 및/또는 잡 디스크립터(job descriptor)들(84)(통합하여 디스크립터들로 지칭됨)에 근거하여 제1 파라미터 신호(80) 및 제2 파라미터 신호(82)를 생성한다.
데이터 전달 이벤트 동안, NVSM 제어 모듈(27) 또는 NVSM 드라이브(14)의 다른 모듈들 중 하나는 액세스 요청 신호들(30)을 수신한다. NVSM 제어 모듈(27)은 제1 비휘발성 메모리(90)를 포함하거나 이에 액세스할 수 있다. 제1 비휘발성 메모리(90)는 NVSM 제어 모듈(27)에 의해 실행되는 펌웨어(92)를 저장한다. 펌웨어(92)를 실행함에 있어서, NVSM 제어 모듈(27)은 액세스 요청 신호들(30)에 근거하여 디스크립터들(84)을 생성한다. 디스크립터들(84)은 제2 비휘발성 메모리(94)에 저장된다. 제2 비휘발성 메모리(94)는 커맨드 관리 모듈(60)의 일부일 수 있거나 도시된 바와 같이, 커맨드 관리 모듈(60)과는 별개일 수 있다. 제2 비휘발성 메모리(94)는 하기에 기술되는 바와 같이, 파라미터들을 결정하고 파라미터 신호들(80, 82)을 생성하기 위해 NVSM 제어 모듈(27)로부터 수신되는 디스크립터들(84)을 해석하기 위한 파라미터 정보(96) 및 디스크립터들(84)을 저장할 수 있다.
디스크립터들(84)을 생성함에 있어서, NVSM 제어 모듈(27)은 액세스 요청 신호들, 데이터 블록들의 사이즈들을 다른 파라미터들에 관계시키는 테이블들, 사용의 어플리케이션, 등에 근거하여 데이터 할당 블록의 사이즈를 결정할 수 있다. 데이터 할당 블록의 사이즈는 할당 유닛(AU) 사이즈 또는 할당 블록 사이즈로 지칭될 수 있다. 사용의 어플리케이션은 예컨대, 호스트의 타입, NVSM 드라이브의 타입 및 호스트 및 NVSM 드라이브의 속도들을 나타낼 수 있다. NVSM 제어 모듈(27)은 할당 블록 사이즈들을 나타내기 위한 디스크립터들(84)을 생성한다. 디스크립터들(84)은 각각, 할당 블록 사이즈들, 버퍼 레지스터 위치들, NVSM 어드레스들, NVSM 채널 식별자들(ID)들, NVSM 디바이스 식별자들(예컨대, 메모리 칩 ID들), 데이터 포맷들, 전달할 데이터의 양들, 동작 비트들의 타입(예컨대, 판독, 프로그램 및/또는 소거 비트들), 등을 포함할 수 있다.
할당 블록 사이즈들 각각은 페이지 기반, 서브-페이지 기반, 또는 비-페이지 기반일 수 있다. 할당 블록 사이즈는 할당 블록 사이즈가 하나 이상의 데이터 페이지들의 사이즈와 동일할 때 페이지 기반이다. 예로서, 단일 데이터 페이지는 8키로바이트(KB)와 동일할 수 있다. 다른 예시적인 페이지 사이즈들은 4KB, 16KB 및 32KB이다. 할당 블록 사이즈는 둘 이상의 데이터 할당 블록들의 사이즈가 1 데이터 페이지의 사이즈와 동일할 때 서브-페이지 기반이다. 할당 블록 사이즈는, 할당 블록 사이즈가 1 페이지의 정수배가 아니고 할당 블록 사이즈의 정수배가 1 데이터 페이지의 사이즈와 동일하지 않을 때 비-페이지 기반이다. 할당 블록은 어떤 양의 데이터도 포함할 수 있다.
데이터 할당 블록들은 NVSM(28)의 채널들(100)에 그리고 채널들(100)로부터 전달될 수 있다. 하나 이상의 데이터 할당 블록들("데이터 블록들")의 데이터 전달 이벤트로 지칭될 수 있다. 데이터 전달 이벤트들은 또한, 예컨대 채널들과 직렬인 그리고/또는 채널들과 통신하는 디바이스들 간에 발생할 수 있다. 예시적인 디바이스들 및/또는 모듈들 간의 예시적인 데이터 전달 이벤트들은 도 7, 14 및 15에 도시된다.
커맨드 관리 모듈(60)은 디스크립터들(84)에 근거하여, 할당 블록 사이즈들, ECC 정정 파워(정정되는 데이터 블록 당 비트 에러들의 수), 버퍼 레지스터 위치들, NVSM 어드레스들, 데이터 포맷들, 전달할 데이터의 양들, 독립 디스크들의 리던던트 어레이(RAID) 동작들, 판독, 프로그램 및/또는 소거 비트들, 등을 결정할 수 있다. 커맨드 관리 모듈(60)은 디스크립터들(84)을 실행하고 그리고/또는 디스크립터들(84)에 근거하여, 제1 및 제2 파라미터 신호들(80, 82)을 생성한다.
제1 파라미터 신호(80)는 ECC 정정 파워 비트, 버퍼 레지스터 위치 비트들, NVSM 어드레스 비트들, 데이터 포맷 비트들, 비트들을 전달할 데이터의 양, 비트들을 전달할 데이터 블록들의 수, RAID 동작 비트들, 판독, 프로그램 및/또는 소거 비트들, 등을 포함할 수 있다. 제2 파라미터 신호(82)는 NVSM 어드레스 비트들, 할당 블록 사이즈 비트들, 비트들을 전달할 데이터 블록들의 수, 판독, 프로그램 및/또는 소거 비트들, 등을 포함할 수 있다.
ECC 모듈(48)은 에러 정정을 수행하고, NVSM(28)으로부터 수신되는 DDS들 및 데이터를 인코딩 및 디코딩한다. ECC 모듈(48)은 제1 파라미터 신호(80)에 근거하여 인터페이스 관리 모듈(50)에 DDS들을 전달하고 인터페이스 관리 모듈(50)로부터 DDS들을 수신한다. 인터페이스 관리 모듈(50)은 제2 파라미터 신호(82)에 근거하여 NVSM(28)에 액세스한다. 인터페이스 관리 모듈(50)은 NVSM(28)로의 액세스를 제어하기 위해 NVSM(28)에 명령어 신호들(102)을 전송한다. NVSM(28)은 명령어 신호들(102)에 근거하여 그리고/또는 명령어 신호들(102)에 따라 채널들을 통해, 인터페이스 관리 모듈(50)에 데이터 신호들을 전송하고 그리고/또는 인터페이스 관리 모듈(50)로부터 데이터 신호들을 수신한다. 명령어 신호들(102)은 예컨대, 사이클 타입 신호 CT, 타이밍 스트로브 신호 DQx 및 상태 레지스터 비트 신호 SR[6]를 포함할 수 있고, 이들의 예들은 도 4 내지 6 및 8 내지 13에 도시되어 있다.
ECC 모듈(48) 및/또는 다른 ECC 모듈들은 도시된 바와 같이, 압축된 HDS들을 인코딩하기 위해 압축 모듈(40)과 암호화 모듈(42) 사이에, 암호화된 HDS들을 인코딩하기 위해 암호화 모듈(42)과 버퍼 관리 모듈(44) 사이에, 버퍼 관리 모듈(44)과 DDS 생성 모듈(46) 사이에, 그리고/또는 DDS 생성 모듈(46)과 NVSM(28) 사이에 연결될 수 있다. 그 다음, DDS들은 NVSM(28)에 저장된다.
ECC 모듈(48)은, NVSM(28)에 데이터를 기입하고 NVSM(28)로부터 데이터를 판독할 때 에러들을 방지하기 위해 하나 이상의 ECC 방법들을 이용할 수 있다. 패리티 비트들이 생성되고, NVSM(28)에 저장되기 전에 DDS들에 추가될 수 있으며 그리고/또는 NVSM(28) 내의 DDS들로부터 별개로 저장될 수 있다.
인터페이스 관리 모듈(50)은 NVSM(28) 내의 물리적 블록 어드레스(PBA)들에 DDS들을 저장할 수 있다. DDS들의 PBA들은 하나 이상의 위치들에 저장되며 NVSM(28) 내의 DDS들의 저장 위치들에 액세스할 때 인터페이스 관리 모듈(50)에 의해 취득될 수 있다. 예를 들어, PBA들은 제1 비휘발성 메모리(90) 및/또는 NVSM(28)에 저장될 수 있다. 제1 비휘발성 메모리(90) 또는 NVSM(28)는 PBA들의 매핑 테이블(104)을 저장할 수 있고, 상기 매핑 테이블은 할당 블록 사이즈에 근거할 수 있다. 예로서, 할당 블록과 관련된 PBA(들)은 매핑 테이블(104)에서 식별될 수 있다. 이는 데이터 페이지의 사이즈에 근거하여 PBA들을 저장하는 것과는 다르다. 할당 블록 사이즈는 데이터 페이지의 사이즈에 근거하여 또는 이에 독립적으로 설정될 수 있다. 펌웨어(92)가 할당 블록 사이즈에 근거하여 PBA들을 저장하기 때문에, 할당 블록 사이즈의 변경은 펌웨어 명령어들의 변경을 요하는 것이 아니라, 단순히 할당 블록 사이즈 설정 조정을 요한다. 매핑 테이블(104)은 로직적 블록 어드레스(LBA)들을 PBA들에 관계시킬 수 있다. 매핑 테이블(104)은 수신 및 전송 경로들(22, 24) 내의 모듈들 중 어느 것에 의해 액세스될 수 있다.
인터페이스 관리 모듈(50)은 ECC 모듈(48)에 DDS들을 포워딩하기 전에 NVSM(28) 내의 DDS들에 액세스할 수 있다. ECC 모듈(48)은 액세스 커맨드 신호들 및/또는 DDS와 관련된 패리티 정보에 근거하여 NVSM(28)으로부터 액세스되는 DDS들을 디코딩할 수 있다. 액세스 커맨드 신호들은 NVSM 제어 모듈(27) 및/또는 커맨드 관리 모듈(60)에 의해 생성될 수 있고, 제1 파라미터 신호(80)를 포함할 수 있다. 액세스 커맨드 신호들은 하나 이상의 PBA들을 포함할 수 있다. 액세스 커맨드 신호들은 NVSM 제어 모듈(27)에 의해 그리고 LBA들 및/또는 호스트(12)로부터 수신되는 액세스 요청 신호들에 근거하여 생성될 수 있다. HDS 생성 모듈(52)은 예컨대, 버퍼 관리 모듈(44)로부터 수신되는 데이터 요청 신호들에 근거하여 ECC 모듈(48)로부터 DDS들에 액세스하거나 DDS들을 수신한다.
HDS 생성 모듈(52) 및/또는 버퍼 관리 모듈(44)은 수신된 DDS들을 HDS들로 분리시킨다. HDS 생성 모듈(52)은 ECC 모듈(48)로부터 수신되는 복호화된 DDS들에 근거하여 하나 이상의 HDS들을 생성한다. HDS 생성 모듈(52)은 HDS 식별 정보 및/또는 데이터 요청 신호에 근거하여 HDS들을 생성한다. 데이터 요청 신호는 하나 이상의 LBA들을 포함할 수 있다. 복호화 모듈(54)은 ECC 모듈(48)로부터 디코딩된 DDS들을 복호화한다. 암호화 모듈(42)에 의해 사용되는 키들은 복호화 모듈(54)에 의해 공유, 액세스 및/또는 생성될 수 있다.
비록, 수신 및 전송 경로들(22, 24)의 모듈들이 특별한 순서로 도시되지만, 이들은 다른 순서로 재구성될 수 있다. 예를 들어, 암호화 모듈(42)은 압축 모듈(40)로부터의 업스트림에 위치될 수 있다. 다시 말해, 암호화 모듈(42)은 NVSM 드라이브 인터페이스(20)와 압축 모듈(40) 사이에 연결될 수 있다. 다른 예로서, 복호화 모듈(54)은 NVSM 드라이브 인터페이스(20)와 압축 해제 모듈(56) 사이에 연결될 수 있다.
다음의 도 2 내지 11은 NVSM 스토리지 시스템(10)의 구현들의 다른 예들을 도시한다.
도 2는 ECC 모듈(48), 인터페이스 관리 모듈(50) 및 NVSM(28)을 포함하는 인터페이스 관리 제어 시스템(26)의 일부(120)를 도시한다. ECC 모듈(48)은 인코더(122) 및 디코더(124)를 포함한다. 인코더(122)는 DDS들을 인코딩하고, 인코딩된 DDS들을 인터페이스 관리 모듈(50)에 데이터 할당 블록들의 형태로 포워딩한다. 인코더(122)는 데이터 할당 블록을 형성하기 위해 정수배의 DDS들을 결합할 수 있다. 디코더(124)는 DDS들을 생성하기 위해 인터페이스 관리 모듈(50)로부터 데이터 할당 블록들을 디코딩한다.
인터페이스 관리 모듈(50)은 도시된 예를 들어, 제1 시리즈의 FIFO 레지스터들(126) 및 제2 시리즈의 FIFO 레지스터들(128)을 포함한다. 제1 시리즈의 FIFO 레지스터들(126)은 프로그램 이벤트들과 관련되고, ECC 모듈(48)로부터 NVSM(28)로 전달되는 데이터를 버퍼링하기 위해 사용된다. 제2 시리즈의 FIFO 레지스터들(128)은 판독 이벤트들과 관련되고, NVSM(28)으로부터 ECC 모듈(48)로 전달되는 데이터를 버퍼링하기 위해 사용된다. 비록, FIFO 레지스터 시리즈가 인코더(122) 및 디코더(124) 각각에 대해 도시되지만, 인터페이스 관리 모듈(50)은 단일 시리즈의 FIFO 레지스터들을 포함할 수 있고, 이들은 인코더(122) 및 디코더(124)에 의해 공유된다. 제1 및 제2 FIFO 레지스터들(126, 128)은 예컨대, SRAM 또는 다른 적절한 메모리 디바이스들을 포함할 수 있다.
FIFO 레지스터들(126, 128) 각각의 사이즈는 NVSM 제어 모듈(27)에 의해 설정되는 할당 블록 사이즈보다 크거나 동일할 수 있다. FIFO 레지스터들(126, 128) 각각의 사이즈는, 할당 블록 사이즈가 데이터 페이지의 사이즈보다 크거나, 동일하거나 또는 작을 수 있기 때문에, 데이터 페이지의 사이즈보다 크거나, 동일하거나 또는 작을 수 있다. 데이터 페이지의 사이즈와 동일한 사이즈의 FIFO 레지스터들의 예가 도 7에 도시된다. 데이터 페이지의 사이즈보다 작은 사이즈의 FIFO 레지스터들의 예가 도 14에 도시된다.
인터페이스 관리 모듈(50)은 채널들 1001-N을 통해 NVSM(28)과 통신한다. FIFO 레지스터들(126, 128) 각각은 채널들 1001-N 중 각각의 채널과 관련된다. FIFO 레지스터들(126, 128)은 데이터를 NVSM(28)에 저장되기 전에 그리고/또는 (도 1에 도시된) 버퍼 관리 모듈(44)에 전달되기 전에 일시적으로 저장한다. NVSM(28)은 채널들 1001-N 각각에 대한 버퍼들(130)을 포함할 수 있다. FIFO 레지스터들(126, 128) 및/또는 버퍼들(130)은 인코더(122)와 NVSM(28) 간의 그리고/또는 디코더(124)와 NVSM(28) 간의 서로 다른 대역폭들(또는 속도들)을 밸런싱하기 위해 사용될 수 있다.
ECC 모듈(48)의 대역폭은 NVSM(28)의 대역폭과 다를 수 있다. 인코더(122) 및 디코더(124)의 속도들은 채널들 1001-N 각각의 속도들보다 빠를 수 있다. 예를 들어, 인코더(122) 및 디코더(124) 각각의 속도들은 채널들 1001-N 각각의 속도보다 8 내지 16배 빠를 수 있다. 속도차들은 또한, 예컨대 채널들 1001-N 중 하나 이상에서의 데이터 흐름 "병목들" 또는 지연들로 인해 초래될 수 있으며, 상기 병목들 또는 지연들은 인터페이스 관리 모듈(50) 및 NVSM(28)의 동작들로 인한 것일 수 있다. FIFO 레지스터들(126, 128) 및 버퍼들(130)은 속도차들을 밸런싱(balancing out)하는 것을 돕는다. 인코더(122)의 속도는 피크 동작 속도들에서 채널들 1001-N의 동작을 유지하도록 설정될 수 있다. 디코더(124)의 속도는 FIFO 레지스터들(128)의 제2 세트가 채워지는 것(filling)을 방지하고 피크 동작 속도들에서 채널들 1001-N의 출력을 유지하도록 설정될 수 있다.
다음의 도 3 내지 6 및 8 내지 13에서, 복수의 타이밍도들이 도시된다. 타이밍도들은 복수의 명령어 신호들을 포함하는 바, 상기 명령어 신호들은 도 1의 인터페이스 관리 모듈(50)로부터 NVSM(28)로 전송될 수 있다. 명령어 신호들(102)은 사이클 타입 신호들 CT, 타이밍 스토로브 신호들 DQx 및 상태 레지스터 비트 신호들 SR[6]을 포함한다. 사이클 타입 신호들 CT는 타이밍 스트로브 신호들 DQx에 제공되는 명령어의 타입을 식별한다. 타이밍 스트로브 신호들 DQx는 예컨대, 커맨드 명령어들 CMD, NVSM 어드레스 명령어들 ADDR, 판독 명령어들 DOUT, 프로그램 명령어들 DIN을 포함할 수 있고, 이들은 사이클 타입 신호들 CT에 의해 식별된다. 타이밍 스트로브 신호들 DQx는 커맨드들, 어드레스들 및 판독 및 프로그래밍되는 데이터를 식별한다. 커맨드들의 예들은 판독 커맨드의 시작(예컨대, 00h, 06h), 판독 커맨드의 종료(예컨대, 30h, 32h, EOh), 프로그램 커맨드의 시작(예컨대, 80h) 및 프로그램 커맨드의 종료(예컨대, 10h)이다. 어드레스들의 예들은 열 어드레스(예컨대, C1, C2) 및 행 어드레스(예컨대, R1, R2, R3)이다.
상태 레지스터 신호들 SR[6]은 사이클 타입 신호들 CT 및 타이밍 스트로브 신호들 DQx의 명령어 세트들 간의 대기 시간들을 나타낸다. 명령어 세트는 개시(또는 트리거링) 명령어 세트, 판독 명령어 세트 또는 프로그램 명령어 세트일 수 있다. 트리거링 명령어 세트들은 NVSM(28)에, 판독 동작 또는 프로그램 동작이 수행되어야 하는 것, 전달되는 데이터의 양 및/또는 할당 블록들의 수, 할당 블록들의 어드레스들, 등을 시그널링하기 위해 사용된다. 판독 명령어 세트들은 데이터가 NVSM(28)로부터 인터페이스 관리 모듈(50) 또는 ECC 모듈(48)로 전달(또는 로드)될 때를 나타낸다. 프로그램 명령어 세트들은 데이터가 인터페이스 관리 모듈(50) 또는 ECC 모듈(48)로부터 NVSM(28)로 전달될 때를 나타낸다.
대기 기간(wait period)들은 준비 트리거 기간(trigger to prepare period) tWB, 판독 준비 기간 tR, 판독 준비 완료 기간(ready to read period) tPR, 로드 트리거 기간 tADL, 프로그램 준비 기간 tPROG, 플레인 비지 기간(plane busy period) tPBSY, 열 변경 설정 기간(change column setup period) tCCS, 등을 포함할 수 있다. NVSM(28)은 판독 준비 기간 tR 및 프로그램 준비 기간 tPROG 동안 데이터 전달 이벤트들을 준비한다. 각각의 데이터 전달 이벤트는 단일 판독 준비 기간 또는 단일 프로그램 준비 기간을 갖는다.
또한, 다음의 도 3 내지 6 및 8 내지 13에서, 복수의 명령어 세트들이 도시된다. 명령어 세트들은 사이클 타입 및 타이밍 스트로브 신호들 CT, DQx의 일부로서 제공된다. 명령어 세트들 각각은 상기에 기술된 대기 기간들 중 하나 이상에 의해 분리되는 명령어의 그룹들을 포함한다. 명령어들은 6각형 모양의 블록들로 도시된다. 각각의 명령어 세트는 어떤 수의 명령어들이든 포함할 수 있다.
또한, 다음 도 3 내지 6 및 8 내지 13에서, 복수의 디스크립터들이 식별된다. 디스크립터들의 화살표들은 반드시, 디스크립터들의 타이밍을 나타내는 것이 아니다. 상기 디스크립터들의 화살표들은 디스크립터들 중 각각의 디스크립터에 근거하여 생성되는 명령어들을 식별하기 위해 제공된다. 디스크립터들 중 각각의 디스크립터에 대해, 하나 이상의 명령어들의 세트들이 생성된다. 예를 들어, 도 5에서, 복수의 페이지 디스크립터들1 -3이 각각의 화살표들 및 대응하는 명령어들로 도시된다. 페이지 디스크립터들1 -3은 도 5에 도시된 명령어들이 생성되기 전에 NVSM 제어 모듈(27)에 의해 생성되어 커맨드 관리 모듈(60)에 전송될 수 있다.
도 3 내지 6 및 8 내지 13의 디스크립터들은 페이지 디스크립터들 또는 할당 블록 디스크립터들일 수 있다. 페이지 디스크립터는 하나 이상의 데이터 페이지들을 트리거 및/또는 전달하기 위해 사용되는 디스크립터를 나타낸다. 할당 블록 디스크립터는 하나 이상의 데이터 할당 블록들을 트리거 및/또는 전달하기 위해 사용되는 디스크립터를 나타낸다. 페이지 디스크립터들 및 할당 블록 디스크립터들은 트리거 디스크립터들, 판독 디스크립터들 또는 프로그램 디스크립터들일 수 있다. 트리거 디스크립터들은 데이터 전달 이벤트(판독 또는 프로그램 이벤트)를 개시하기 위해 사용된다. 예로서, 트리거 디스크립터들은 커맨드 타입(판독 또는 프로그램), NVSM(28) 및/또는 버퍼 관리 모듈(44) 내의 타겟 어드레스들 및 얼마나 많은 데이터가 전달되는지(예컨대, 페이지들의 수 및/또는 할당 블록들의 수)를 식별할 수 있다.
판독 디스크립터들은 NVSM(28)로부터 데이터를 판독하기 위해 사용된다. 프로그램 디스크립터들은 NVSM(28)에 데이터를 프로그램하기 위해 사용된다. 예로서, 판독 디스크립터들 및 프로그램 디스크립터들은 얼마나 많은 데이터가 전달되는지, 그리고 데이터 페이지 내의 데이터의 위치들을 식별할 수 있다. 디스크립터는 트리거 디스크립터 및 판독 디스크립터 모두가 될 수 있다. 예를 들어, 도 8의 제1 디스크립터(AU 디스크립터1)를 참조하라. 디스크립터는 대안적으로는, 트리거 디스크립터 및 프로그램 디스크립터 모두가 될 수 있다. 예를 들어, 도 11의 제1 디스크립터(AU 디스크립터1)를 참조하라.
도 3은 페이지 기반의 전달에 대한 단일 페이지 판독 이벤트를 예시하는 타이밍도를 도시한다. 타이밍도는 명령어 신호들 CT(145), DQx(146) 및 SR[6](147)을 포함하며, 이들은 화살표(148)에 따른 단일 페이지 디스크립터에 근거하여 생성된다. 명령어 신호들(145 내지 147)은 명령어 신호들(102)의 예들이다. 예시된 바와 같이, 사이클 타입 및 타이밍 스트로브 신호들(145, 146) 각각은 두 개의 명령 세트들(150, 152)을 포함한다. 제1 명령 세트들(150)은 트리거링 명령어 세트들이다. 제2 명령어 세트들(152)은 판독 명령어 세트들이다. 명령어 세트들(150, 152) 각각은 (6각형 모양의 블록들로 도시된) 명령어들을 포함한다.
페이지 디스크립터는 NVSM 제어 모듈(27)에 의해 생성될 수 있다. 커맨드 관리 모듈(60)은 페이지 디스크립터에 근거하여 제1 및 제2 파라미터 신호들(80, 82)을 생성한다. 인터페이스 관리 모듈(50)은 제2 파라미터 신호(82)에 근거하여 명령어 신호들(145, 146 및 147)을 생성한다. NVSM(28)은 판독 준비 기간 tR 동안 명령어 신호들의 제1 명령어 세트들에 근거하여 데이터 전달 이벤트를 준비한다.
NVSM(28)은 판독 준비 기간 tR에 후속적으로 명령어 신호들(145, 146 및 147)에 근거하여 채널들(100) 중 하나를 통해 인터페이스 관리 모듈(50)에 데이터 페이지를 전달한다. 이 판독 이벤트에 대해 전달되는 데이터의 양(또는 데이터 블록의 사이즈)은 1 데이터 페이지의 사이즈와 동일할 수 있다. 대안으로서, 전달되는 데이터 블록의 사이즈는 1 데이터 페이지보다 작을 수 있다. 전달되는 데이터의 양은 데이터 할당 블록의 사이즈와 동일할 수 있다. 할당 블록의 사이즈는 상기에 기술된 바와 같이 설정될 수 있다. 할당 블록 디스크립터는 데이터 할당 블록들이 전달될 때 페이지 디스크립터(148)에 대한 대안(alternative)으로서 사용될 수 있다. 할당 블록 디스크립터는 하나 이상의 데이터 할당 블록들을 트리거 및/또는 전달하기 위해 사용되는 디스크립터를 나타낸다.
도 4는 페이지 기반 전달에 대한 단일 페이지 프로그램 이벤트를 예시하는 타이밍도를 도시한다. 타이밍도는 명령어 신호들 CT(155), DQx(156) 및 SR[6](157)을 포함하고, 이들은 화살표(160)에 따른 단일 페이지 디스크립터에 근거하여 생성된다. 명령어 신호들(155 내지 157)은 명령어 신호들(102)의 예들이다. 예시된 바와 같이, 신호들(155 및 156) 각각은 두 개의 명령 세트들(162, 164)을 포함한다. 제1 명령어 세트들(162)은 트리거링 명령어 세트들이다. 제2 명령어 세트들(164)은 프로그램 명령어 세트들이다.
도 4의 페이지 디스크립터는 NVSM 제어 모듈(27)에 의해 생성될 수 있다. 페이지 디스크립터는 데이터의 전달을 개시(또는 트리거)하고 데이터의 전달을 수행하기 위해 생성된다. 커맨드 관리 모듈(60)은 페이지 디스크립터(160)에 근거하여, 제1 및 제2 파라미터 신호들(80, 82)을 생성한다. NVSM(28)은 제2 파라미터 신호(82)에 근거하여 명령어 신호들(155 내지 157)을 생성한다. NVSM(28)은 로드 트리거 기간 tADL 동안 제1 명령어 세트들(162)에 근거하여 데이터 전달 이벤트를 준비한다.
ECC 모듈(48)은 인터페이스 관리 모듈(50)에 데이터 페이지를 전달한다. 데이터 페이지는 인터페이스 관리 모듈(50)의 FIFO 레지스터에 저장될 수 있다. 인터페이스 관리 모듈(50)은 채널들(100) 중 하나를 통해 NVSM(28)에 데이터 페이지를 전달한다. 데이터는 로드 트리거 기간 tADL에 후속하여 그리고 프로그램 준비 기간 tPROG에 앞서 채널에 전달된다.
이 프로그램 이벤트에 대해 전달되는 데이터의 양(또는 데이터 블록의 사이즈)는 기술된 바와 같이 1 데이터 페이지의 사이즈와 동일할 수 있거나 또는 대안적으로는, 1 데이터 페이지보다 작을 수 있다. 전달되는 데이터의 양은 할당 블록의 사이즈와 동일할 수 있다. 데이터 할당 블록의 사이즈는 상기에 기술된 바와 같이 설정될 수 있다. 할당 블록 디스크립터는 데이터 할당 블록이 전달될 때 페이지 디스크립터에 대한 대안으로서 사용될 수 있다.
도 5는 복수의 페이지 디스크립터들을 이용하는 멀티-페이지(또는 멀티-플레인) 판독 이벤트를 예시하는 타이밍도를 도시한다. 타이밍도는 명령어 신호들 CT(165), DQx(166) 및 SR[6](167)을 포함하고, 이들은 화살표들(170, 172, 174)에 따른 복수의 페이지 디스크립터들, 페이지 디스크립터1 -3에 근거하여 생성된다. 예시된 바와 같이, 신호들(165 및 166) 각각은 6개의 명령어 세트들(176, 178, 180, 182, 184, 186)을 포함한다. 명령어 신호들(165 내지 167)은 명령어 신호들(102)의 예들이다. 제1 및 제2 명령어 세트들(176, 178)은 멀티-페이지 판독 이벤트에 대한 트리거링 명령어 세트들이다. 제3 및 제5 명령어 세트들(180, 184)은 각각의 페이지에 대한 트리거링 명령어들이다. 제4 및 제6 명령어 세트들(182, 186)은 판독 명령어 세트들이다.
도시된 6개의 명령어 세트들(176 내지 186)은 2개의 데이터 페이지들을 전달하기 위해 사용된다. 추가적인 명령어 세트들이 추가적인 페이지들에 대해 추가될 수 있다. 이 예에서, 신호 당 트리거링 명령어들 세트들의 수 T는 전달되는 페이지들의 수 P의 두배와 동일하다(즉, T = 2 * P). 신호 당 판독 명령어 세트들의 수 R은 전달되는 페이지들의 수 P와 동일하다(즉, R = P). 또한, 페이지 디스크립터들의 수 D는 페이지들의 수에 1을 더한 것과 동일하다(즉, D = P + 1).
페이지 디스크립터들, 페이지 디스크립터1 -3는 NVSM 제어 모듈(27)에 의해 생성될 수 있다. 커맨드 관리 모듈(60)은 페이지 디스크립터들, 페이지 디스크립터1-3에 근거하여 제1 및 제2 파라미터 신호들(80, 82)을 생성한다. NVSM(28)은 제2 파라미터 신호(82)에 근거하여 명령어 신호들(165 내지 167)을 생성한다. NVSM(28)은 제1 및 제2 명령어 세트들(176, 178)에 근거하여 데이터 페이지들을 전달하기 위한 데이터 전달 이벤트를 준비한다.
그 다음, NVSM(28)은 판독 준비 기간 tR에 후속적으로 명령어 신호들(즉, 명령어 세트들(180 내지 186))에 근거하여 채널들(100) 중 하나 이상을 통해 인터페이스 관리 모듈(50)에 데이터 페이지들 각각을 준비 및 전달한다. 판독 명령어 세트들(182, 186)의 각 쌍(CT 신호에 대한 1 판독 명령어 세트 및 DQx 신호에 대한 1 판독 명령어 세트)에 대해 전달되는 데이터의 양(또는 데이터 블록의 사이즈)는 1 데이터 페이지의 사이즈와 동일할 수 있다. 대안으로서, 전달되는 데이터 블록의 사이즈는 1 데이터 페이지보다 작을 수 있다. 전달되는 데이터의 양은 데이터 할당 블록의 사이즈와 동일할 수 있다. 데이터 할당 블록의 사이즈는 상기에 기술된 바와 같이 설정될 수 있다. 할당 블록 디스크립터들은 데이터 할당 블록들이 전달될 때 페이지 디스크립터들, 페이지 디스크립터1 -3에 대한 대안으로서 사용될 수 있다. 이의 예가 도 10에 도시된다.
도 6은 복수의 페이지 디스크립터들을 이용하는 멀티-페이지 프로그램 이벤트를 예시하는 타이밍도를 도시한다. 상기 타이밍도는 명령어 신호들 CT(187), DQx(188) 및 SR[6](189)를 포함하고, 이들은 화살표(190, 192)에 따른 복수의 페이지 디스크립터들, 페이지 디스크립터1 -2에 근거하여 생성된다. 명령어 신호들(187 내지 189)은 명령어 신호들(102)의 예들이다. 예시된 바와 같이, 신호들(187 및 188) 각각은 네 개의 명령어 세트들(194, 196, 198, 200)을 포함한다. 제1 및 제3 명령어 세트들(194, 198)은 다중-페이지 판독 이벤트에 대한 트리거링 명령어 세트들이다. 제2 및 제4 명령어 세트들(196, 200)은 프로그램 명령어 세트들이다.
도시된 네 개의 명령어 세트들(194 내지 200)은 2 데이터 페이지들을 전달하기 위해 사용된다. 추가적인 명령어 세트들이 추가적인 페이지들에 대해 추가될 수 있다. 이 예에서, 신호 당 트리거링 명령어 세트들의 수 T는 전달되는 페이지들의 수 P와 동일하다(즉 T = P). 신호 당 프로그램 명령어 세트들의 수 G는 전달되는 페이지들의 수 P와 동일하다(즉 G = P). 또한, 페이지 디스크립터들의 수 D는 전달되는 페이지들의 수와 동일하다(즉 D = P).
페이지 디스크립터들, 페이지 디스크립터1 -2는 NVSM 제어 모듈(27)에 의해 생성될 수 있다. 페이지 디스크립터들, 페이지 디스크립터1 -2는 NVSM 제어 모듈(27)에 의해 생성될 수 있다. 커맨드 관리 모듈(60)은 페이지 디스크립터들, 페이지 디스크립터1 -2에 근거하여 제1 및 제2 파라미터 신호들(80, 82)을 생성한다. NVSM(28)은 제2 파라미터 신호(82)에 근거하여 명령어 신호들(187 내지 189)을 생성한다. NVSM(28)은 각각의 로드 트리거 기간들 tADLl, tADL2 동안 제1 및 제3 명령어 세트들(194, 198)에 근거하여 데이터 저달 이벤트들을 준비한다.
ECC 모듈(48)은 인터페이스 관리 모듈(50)에 데이터 페이지들을 전달한다. 데이터 페이지들은 인터페이스 관리 모듈(50)의 FIFO 레지스터들에 저장될 수 있다. 인터페이스 관리 모듈(50)은 채널들(100) 중 하나를 통해 NVSM(28)에 데이터 페이지들을 전달한다. 데이터 페이지들은 로드 트리거 기간들 tADLl, tADL2에 후속적으로 그리고 프로그램 준비 기간 tPROG 전에 채널에 전달된다.
프로그램 명령어들(196, 200) 각각에 대해 전달되는 데이터의 양(또는 데이터 블록들의 사이즈)는 기술된 바와 같이 1 데이터 페이지의 사이즈와 동일할 수 있거나 대안적으로는 데이터 페이지보다 작을 수 있다. 전달되는 데이터의 양은 데이터 할당 블록의 사이즈와 동일할 수 있다. 할당 블록의 사이즈는 상기에 기술된 바와 같이 설정될 수 있다. 할당 블록 디스크립터들은 데이터 할당 블록들이 전달될 때, 페이지 디스크립터들, 페이지 디스크립터1-2에 대한 대안으로서 사용될 수 있다. 이의 예가 도 13에 도시된다.
상기 도 5 및 6에서, 단일의 판독 준비 기간 tR 및 신호 프로그램 기간 tPROG이 존재함에 따라, 다중-페이지 전달 이벤트들에 대한 대기 시간이 최소화된다.
도 7에서, 페이지 사이즈의 전달들을 갖는 멀티-페이지 프로그램 이벤트들을 예시하는 인터페이스 관리 제어 시스템의 부분(210)이 도시된다. 상기 부분(210)은 도 1의 인터페이스 관리 제어 시스템(26) 내로 통합될 수 있다. 각각의 전달은 인터페이스 관리 모듈(50)의 FIFO 레지스터들(126) 중 하나를 채울 수 있다. 전달되는 각각의 데이터 페이지는 도 6에 관하여 상기에 기술된 바와 같이, 두 개의 관련 페이지 디스크립터들(미도시)을 가질 수 있다.
FIFO 레지스터들(126) 각각은 NVSM(28)의 채널들0 -7 중 각각의 채널에 연결된다. 채널들0 -7은 도 1의 채널들(100)에 포함될 수 있다. 비록, FIFO 레지스터들(126) 각각이 1 데이터 페이지보다 많은 데이터 페이지를 저장하도록 사이즈화되어 있지만은, FIFO 레지스터들(126) 각각은 1 데이터 페이지를 저장할 수 있는 것으로 도시되어 있다. (상기에 기술된 바와 같이) 멀티-페이지(M-페이지) 전달이 수행되는 경우, 전달되는 데이터 페이지 당 하나 이상의 페이지 디스크립터들이 사용되기 때문에 FIFO 레지스터들(126)은 M 데이터 페이지들을 저장하도록 사이즈화될 필요가 없다. 둘 이상의 데이터 페이지들보다는 단일의 데이터 페이지를 저장하도록 FIFO 레지스터들(126)을 사이즈화하는 것은 FIFO 레지스터들(126)에 대해 할당되는 메모리를 줄이고, 데이터 전달 시간들을 감소시킨다. 단일의 디스크립터만이 M 데이터 페이지들을 전달하기 위해 사용된 경우, FIFO 레지스터들(126) 각각은 데이터 페이지 내의 데이터의 양과 동일하게 사이즈화될 필요가 있는 바, 그 이유는 각각의 디스크립터가 단일 채널 및/또는 단일 FIFO 레지스터와 관련되기 때문이다.
멀티-페이지 전달 이벤트에서, 인터페이스 관리 모듈(50)에 제공되는 데이터는 페이지 단위(page-by-page)로 복수의 채널들에 걸쳐 스프레드된다. 데이터 페이지들, 데이터1 -16이 도시된다. 단일의 페이지는 채널들0 -7 중 어느 것에 제2 페이지를 전송하기 전에 채널들0 -7 각각에 전달된다. 데이터 페이지들은 채널들0 -7 및/또는 NVSM(28) 내부의 디바이스들의 속도들에 근거하여 FIFO 레지스터들(126)로부터 채널들0 -7로 전달된다. 데이터 페이지들이 FIFO 레지스터들(126) 각각에 전달됨에 따라, FIFO 레지스터들(126) 중 어느 하나에서의 데이터 병목의 확률(probability)이 감소된다. 예를 들어, 제1 채널(예컨대, 채널0)의 전달 속도가 느린 경우, 대응하는 제1 FIFO 레지스터 FIFO1에서의 병목이 발생하지 않을 수 있는 바, 그 이유는 제1 FIFO 레지스터 FIFO1 내로 다른 데이터 페이지를 로딩하기 전에 데이터 페이지들이 다른 FIFO 레지스터들 FIFO2 -8 내로 로딩되기 때문이다.
도 8은 전달되는 할당 블록들과 동일한 수의 디스크립터들을 갖는 판독 이벤트를 예시하는 타이밍도를 도시한다. 타이밍도는 명령어 신호들 CT(217), DQx(218) 및 SR[6](219)를 포함하며, 이들은 화살표들(220, 222)에 따른 복수의 할당 블록 디스크립터들 AU 디스크립터들1 -2에 근거하여 생성된다. 명령어 신호들(217 내지 219)은 명령어 신호들(102)의 예들이다. 예시된 바와 같이, 신호들(217 및 218) 각각은 세 개의 명령어 세트들(224, 226, 228)을 포함한다. 제1 명령어 세트들(224)은 트리거링 명령어 세트들이다. 제2 명령어 세트들(226)은 제1 판독 명령어 세트들이다. 제3 명령어 세트들(228)은 제2 판독 명령어 세트들이다.
판독 명령어 세트들(226, 228) 각각은 데이터 할당 블록과 관련된다. 제1 디스크립터 AU 디스크립터1는 제1 및 제2 명령어 세트들(226, 228)과 관련된다. 제2 디스크립터 AU 디스크립터2는 제3 명령어 세트들(228)과 관련된다.
할당 블록 디스크립터들 AU 디스크립터1 -2는 NVSM 제어 모듈(27)에 의해 생성될 수 있다. 커맨드 관리 모듈(60)은 할당 블록 디스크립터들, AU 디스크립터들1-2에 근거하여 제1 및 제2 파라미터 신호들(80, 82)을 생성한다. 인터페이스 관리 모듈(50)은 제2 파라미터 신호(82)에 근거하여 명령어 신호들(217 내지 219)을 생성한다. NVSM(28)은 판독 준비 기간 tR 동안 제1 명령어 세트들(224)에 근거하여 데이터 전달 이벤트를 준비한다.
NVSM(28)은 판독 준비 기간 tR에 후속적으로 명령어 신호들(217 내지 219)에 근거하여 채널들(100) 중 하나를 통해 인터페이스 관리 모듈(50)에 데이터 할당 블록들을 전달한다. 데이터 할당 블록들은 인터페이스 관리 모듈(50)의 서로 다른, 인접한 그리고/또는 순차적인 FIFO 레지스터들에 블록 단위로 스프레드될 수 있다. 이 판독 이벤트에 대해 전달되는 데이터의 양(또는 데이터 할당 블록들의 사이즈)는 예컨대, 1 데이터 페이지의 사이즈보다 작거나 동일할 수 있다. 데이터 할당 블록들의 사이즈는 상기에 기술된 바와 같이 설정될 수 있다.
도 9는 전달되는 할당 블록들보다 많은 디스크립터들을 갖는 판독 이벤트를 예시하는 타이밍도를 도시한다. 타이밍도는 명령어 신호들 CT(227), DQx(228) 및 SR[6](229)를 포함하며, 이들은 화살표들(230, 232, 234)에 따른 복수의 할당 블록 디스크립터들, AU 디스크립터들1 -3에 근거하여 생성된다. 명령어 신호들(227 내지 229)은 명령어 신호들(102)의 예들이다. 할당 블록 디스크립터들의 수 AUD는 전달되는 할당 블록들의 수 AB에 1을 더한 것과 같다(즉 AUD = AB + 1). 예시된 바와 같이, 신호들(227 및 228) 각각은 세 개의 명령어 세트들(236, 238, 240)을 포함한다. 제1 명령어 세트들(236)은 트리거링 명령어 세트들이다. 제2 명령어 세트들(238)은 제1 판독 명령어 세트들이다. 제3 명령어 세트들(240)은 제2 판독 명령어 세트들이다.
판독 명령어 세트들(238, 240)의 각각의 쌍(CT 신호 내의 1 판독 명령어 세트 및 DQx 신호 내의 1 판독 명령어 세트)은 데이터 할당 블록과 관련된다. 제1 디스크립터, AU 디스크립터1은 제1 명령어 세트들(236)과 관련된다. 제2 디스크립터, AU 디스크립터2는 제2 명령어 세트들(238)과 관련된다. 제3 디스크립터, AU 디스크립터3은 제3 명령어 세트들(240)과 관련된다.
할당 블록 디스크립터들, AU 디스크립터들1 -3은 NVSM 제어 모듈(27)에 의해 생성될 수 있다. 커맨드 관리 모듈(60)은 할당 블록 디스크립터들, AU 디스크립터들1-3에 근거하여 제1 및 제2 파라미터 신호들(80, 82)을 생성한다. 인터페이스 관리 모듈(50)은 제2 파라미터 신호(82)에 근거하여 명령어 신호들(227 내지 229)을 생성한다. NVSM(28)은 판독 준비 기간 tR 동안 제1 명령어 세트들(236)에 근거하여 데이터 전달 이벤트를 준비한다.
NVSM(28)은 판독 준비 기간 tR에 후속적으로 명령어 신호들(227 내지 229)에 근거하여 채널들(100) 중 하나를 통해 인터페이스 관리 모듈(50)에 데이터 할당 블록들을 전달한다. 이 판독 이벤트에 대해 전달되는 데이터의 양(또는 데이터 할당 블록들의 사이즈)은 예컨대, 1 데이터 페이지의 사이즈보다 작거나 동일할 수 있다. 데이터 할당 블록들의 사이즈는 상기에 기술된 바와 같이 설정될 수 있다.
도 8의 구현은 도 9의 구현보다 적은 디스크립터들을 사용한다. 더 적은 디스크립터들의 사용은 인터페이스 관리 제어 시스템(26)의 모듈들 간에 생성 및 전달되는 신호들의 수를 감소시킬 수 있다. 더 적은 디스크립터들의 사용은 또한, 매핑 테이블 사이즈 및 NVSM 제어 모듈(27)의 동작들을 줄일 수 있다. 도 8의 구현에 의한 더 많은 디스크립터들의 사용은 명령어 세트들의 증가된 데이터 전달 제어 및 더 작은 사이즈의 할당 블록들의 관리를 제공함으로써 펌웨어 설계 플렉서빌리티(flexibility)를 증가시킬 수 있다.
도 10은 복수의 명령어 세트들을 갖는 멀티-할당 블록 판독 이벤트를 예시하는 타이밍도를 도시한다. 도 10의 구현은, 페이지 디스크립터들이 데이터 페이지들을 전달하기 위해 생성되는 대신 할당 블록 디스크립터들이 데이터 할당 블록들을 전달하기 위해 생성된다는 점을 제외하고 도 5의 구현과 유사하다. 타이밍도는 CT(247), DQx(248) 및 SR[6](249)를 포함하며, 이들은 화살표들(250, 252, 254)에 따른 복수의 할당 블록 디스크립터들, AU 디스크립터들1 -3에 근거하여 생성된다. 명령어 신호들(247 내지 249)은 명령어 신호들(102)의 예들이다.
예시된 바와 같이, 신호들(247 및 248) 각각은 6개의 명령어 세트들(256, 258, 260, 262, 264, 266)을 포함한다. 제1 및 제2 명령어 세트들(256, 258)은 멀티-페이지 판독 이벤트에 대한 트리거링 명령어 세트들이다. 제3 및 제5 명령어 세트들(260, 264)은 각각의 페이지에 대한 트리거링 명령어들이다. 제4 및 제6 명령어 세트들(262, 266)은 판독 명령어 세트들이다. 도시된 6개의 명령어 세트들(256-266)은 2 데이터 페이지들을 전달하기 위해 사용된다. 추가적인 명령어 세트들이 추가적인 페이지들에 대해 추가될 수 있다. 이 예에서, 신호 당 트리거링 명령어 세트들의 수 T는 전달되는 페이지들의 수 P의 두배와 동일하다(즉 T = 2 * P). 신호 당 판독 명령어 세트들의 수 R는 전달되는 페이지들의 수 P와 동일하다(즉 R = P). 또한, 페이지 디스크립터들의 수 D는 페이지들의 수에 1을 뺀 것과 동일하다(즉 D = P - 1).
할당 블록 디스크립터들, AU 디스크립터들1 -3은 NVSM 제어 모듈(27)에 의해 생성될 수 있다. 커맨드 관리 모듈(60)은 할당 블록 디스크립터들, AU 디스크립터들1-3에 근거하여 제1 및 제2 파라미터 신호들(80, 82)을 생성한다. NVSM(28)은 제2 파라미터 신호(82)에 근거하여 명령어 신호들(247 내지 249)을 생성한다. NVSM(28)는 제1 및 제2 명령어 세트들(256, 258)에 근거하여 데이터 할당 블록들을 전달하기 위한 데이터 전달 이벤트를 준비한다.
그 다음, NVSM(28)은 판독 준비 기간 tR에 후속적으로 명령어 신호들(247 내지 249)(즉, 명령어 세트들(260, 264))에 근거하여 채널들 중 하나 이상을 통해 인터페이스 관리 모듈(50)에 데이터 할당 블록들 각각을 준비 및 전달한다. 판독 명령어 세트들(262, 266)의 각각의 쌍(CT 신호에 대한 1 판독 명령어 세트 및 DQx 신호에 대한 1 판독 명령어 세트)에 대해 전달되는 데이터의 양(또는 할당 블록 사이즈)은 1 데이터 페이지의 사이즈보다 작거나 동일할 수 있다.
도 11은 전달되는 할당 블록들과 동일한 수의 디스크립터들을 갖는 프로그램 이벤트를 예시하는 타이밍도를 도시한다. 타이밍도는 명령어 신호들 CT(267), DQx(268) 및 SR[6](269)을 포함하며, 이들은 화살표들(270, 272)에 따른 복수의 할당 블록 디스크립터들, AU 디스크립터들1 -2에 근거하여 생성된다. 명령어 신호들(267 내지 269)은 명령어 신호들(102)의 예들이다. 예시된 바와 같이, 신호들(267 및 268) 각각은 세 개의 명령어 세트들(274, 276, 278)을 포함한다. 제1 명령어 세트들(274)은 트리거링 명령어 세트들이다. 제2 명령어 세트들(276)은 제1 프로그램 명령어 세트들이다. 제3 명령어 세트들(278)은 제2 프로그램 명령어 세트들이다.
할당 블록 디스크립터들, AU 디스크립터들1 -2은 NVAM 제어 모듈(27)에 의해 생성될 수 있다. 커맨드 관리 모듈(60)은 할당 블록 디스크립터들, AU 디스크립터들1-2에 근거하여 제1 및 제2 파라미터 신호들(80, 82)을 생성한다. NVSM(28)은 제2 파라미터 신호(82)에 근거하여 명령어 신호들(267 내지 269)을 생성한다. NVSM(28)은 로드 트리거 기간 tADL 동안 제1 명령어 세트들(274)에 근거하여 데이터 전달 이벤트를 준비한다.
ECC 모듈(48)은 인터페이스 관리 모듈(50)에 데이터 할당 블록들을 전달한다. 데이터 할당 블록들은 인터페이스 관리 모듈(50)의 FIFO 레지스터에 저장될 수 있다. 인터페이스 관리 모듈(50)은 채널들(100) 중 하나를 통해 NVSM(28)에 데이터 할당 블록들을 전달한다. 데이터는 로드 트리거 기간 tADL에 후속적으로 그리고 프로그램 준비 기간 tPROG 전에 채널에 전달된다. 이 프로그램 이벤트에 대해 전달되는 데이터의 양(데이터 할당 블록들의 결합된 사이즈)은 1 데이터 페이지의 사이즈보다 작거나 동일할 수 있다.
도 12는 전달되는 할당 블록들보다 많은 디스크립터들을 갖는 프로그램 이벤트를 예시하는 타이밍도를 도시한다. 타이밍도는 명령어 신호들 CT(277), DQx(278) 및 SR[6](279)을 포함하며, 이들은 화살표들(280, 282, 284)에 따른 복수의 할당 블록 디스크립터들, AU 디스크립터들1 -3에 근거하여 생성된다. 명령어 신호들(277 내지 279)은 명령어 신호들(102)의 예들이다. 할당 블록 디스크립터들의 수 AUD는 전달되는 할당 블록의 수 AB에 1을 더한 것과 동일하다(즉 AUD = AB + 1). 예시된 바와 같이, 신호들(277 및 278) 각각은 세 개의 명령어 세트들(286, 288, 290)을 포함한다. 제1 명령어 세트들(286)은 트리거링 명령어 세트들이다. 제2 명령어 세트들(288)은 제1 프로그램 명령어 세트들이다. 제3 명령어 세트들(290)은 제2 프로그램 명령어 세트들이다.
할당 블록 디스크립터들, AU 디스크립터들1 -3은 NVSM 제어 모듈(27)에 의해 생성될 수 있다. 커맨드 관리 모듈(60)은 할당 블록 디스크립터들, AU 디스크립터들1 -3에 근거하여 제1 및 제2 파라미터 신호들(80, 82)을 생성한다. NVSM(28)은 제2 파라미터 신호(82)에 근거하여 명령어 신호들(277 내지 279)을 생성한다. NVSM(28)은 로드 트리거 기간 tADL 동안 제1 명령어 세트들(286)에 근거하여 데이터 전달 이벤트를 준비한다.
ECC 모듈(48)은 인터페이스 관리 모듈(50)에 데이터 할당 블록들을 전달한다. 데이터 할당 블록들은 인터페이스 관리 모듈(50)의 FIFO 레지스터에 저장될 수 있다. 인터페이스 관리 모듈(50)은 채널들(100) 중 하나를 통해 NVSM(28)에 데이터 할당 블록들을 전달한다. 데이터는 로드 트리거 기간 tADL에 후속적으로 그리고 프로그램 준비 기간 tPROG 전에 채널에 전달된다. 이 프로그램 이벤트에 대해 전달되는 데이터의 양(데이터 할당 블록들의 결합된 사이즈)은 1 데이터 페이지의 사이즈보다 작거나 동일할 수 있다.
도 13은 복수의 명령어 세트들을 갖는 멀티-할당 블록 판독 이벤트를 예시하는 타이밍도를 도시한다. 도 13의 구현은, 페이지 디스크립터들이 데이터 페이지들을 전달하기 위해 생성되는 대신 할당 블록 디스크립터들이 데이터 할당 블록들을 전달하기 위해 생성되는 점을 제외하고 도 6의 구현과 유사하다. 추가적으로, 단일의 페이지 디스크립터가 전달되는 데이터 페이지 당 생성되는 대신 두 개의 페이지 디스크립터들이 전달되는 데이터 할당 블록 당 생성된다.
도 13의 타이밍도는 명령어 신호들 CT(297), DQx(298) 및 SR[6](299)을 포함하고, 이들은 화살표들(300, 302, 304, 306)에 따른 복수의 할당 블록 디스크립터들, AU 디스크립터들1 -4에 근거하여 생성된다. 명령어 신호들(297 내지 299)은 명령어 신호들(102)의 예들이다. 예시된 바와 같이, 신호들(297 및 298) 각각은 6개의 명령어 세트들(308, 310, 312, 314, 316, 318)을 포함한다. 제1 및 제4 명령어 세트들(308, 314)은 멀티-할당 블록 판독 이벤트에 대한 트리거링 명령어 세트들이다. 제2 및 제4 명령어 세트들(310, 316)은 제1 및 제3 데이터 할당 블록들에 대한 프로그램 명령어 세트들이다. 제3 및 제6 명령어 세트들(312, 318)은 제2 및 제4 데이터 할당 블록들을 전달하기 위한 프로그램 명령어 세트들이다. 추가적인 트리거 및 프로그램 명령어 세트들이 추가적인 데이터 할당 블록들에 대해 추가될 수 있다.
이 예에서, 신호 당 트리거링 명령어 세트들의 수 T는 전달되는 데이터 할당 블록들의 수 AB의 두 배와 동일하다(즉, T = 2 * AB). 신호 당 프로그램 명령어 세트들의 수 G는 전달되는 데이터 할당 블록들의 수와 동일하다(즉, G = AB). 트리거 명령어 세트 당 할당 블록들의 수는 NVSM 제어 모듈(27)에 의해 증가될 수 있다.
할당 블록 디스크립터들, AU 디스크립터들1 -4은 NVSM 제어 모듈(27)에 의해 생성될 수 있다. 커맨드 관리 모듈(60)은 할당 블록 디스크립터들, AU 디스크립터들1-4에 근거하여 제1 및 제2 파라미터 신호들(80, 82)을 생성한다. NVSM(28)은 제2 파라미터 신호(82)에 근거하여 명령어 신호들(297 내지 299)을 생성한다. NVSM(28)은 로드 트리거 기간들 tADLl, tADL2 동안 제1 명령어 세트들(308, 314)에 근거하여 데이터 전달 이벤트를 준비한다.
ECC 모듈(48)은 인터페이스 관리 모듈(50)에 데이터 할당 블록들을 전달한다. 제1 및 제2 데이터 할당 블록들은 인터페이스 관리 모듈(50)의 제1 FIFO 레지스터에 저장될 수 있다. 제3 및 제4 데이터 할당 블록들은 인터페이스 관리 모듈(50)의 제2 FIFO 레지스터에 저장될 수 있다. 인터페이스 관리 모듈(50)은 채널들(100) 중 둘을 통해 NVSM(28)에 데이터 할당 블록들을 전달할 수 있다. 데이터 할당 블록들은 로드 트리거 시간들 tADLl, tADL2에 후속적으로 그리고 프로그램 준비 기간 tPROG에 앞서 채널들에 전달된다. 대안으로서, 제1, 제2, 제3 및 제4 데이터 블록들은 제1 및 제2 FIFO 레지스터들 중 하나에 전달되고 채널들(100) 중 하나를 통해 NVSM(28)에 전달될 수 있다.
프로그램 명령어 세트들의 각각의 쌍(제1 및 제2 프로그램 명령어 세트들(310, 312) 또는 제3 및 제4 프로그램 명령어 세트들(316, 318))에 대해 전달되는 데이터의 양(또는 데이터 할당 블록들의 사이즈)은 1 데이터 페이지의 사이즈보다 작거나 동일할 수 있다. 도시된 예에서, 1 데이터 페이지가 트리거 명령어 세트들의 각각의 쌍(CT 신호에 대한 1 트리거 명령어 세트 및 DQx 신호에 대한 1 트리거 명령어 세트)에 대해 전달되면, 두 개의 할당 블록들의 사이즈는 데이터 페이지의 사이즈와 동일하다. 데이터 페이지의 전달 당 할당 블록들의 수는 할당 블록 사이즈를 감소시킴으로써 증가될 수 있다.
도 14에서, 할당 블록 사이즈의 전달들을 갖는 할당 블록 기반의 프로그램 이벤트들을 예시하는 인터페이스 관리 제어 시스템의 부분(330)이 도시된다. 이 부분(330)은 도 1의 인터페이스 관리 제어 시스템(26) 내로 통합될 수 있다. 전달되는 각각의 데이터 할당 블록은 인터페이스 관리 모듈(50)의 FIFO 레지스터들(126') 중 하나를 채울 수 있다. 전달되는 각각의 데이터 할당 블록은 예컨대, 도 11 및 12에 관하여 상기에 기술된 바와 같이, 둘 또는 세 개의 관련 할당 블록 디스크립터들(미도시)을 가질 수 있다.
FIFO 레지스터들(126') 각각은 NVSM(28)의 채널들0 -7 중 하나에 연결된다. 비록, FIFO 레지스터들(126')은 1보다 많은 데이터 할당 블록을 저장하도록 사이즈화될 수 있지만, FIFO 레지스터들(126')은 1 데이터 할당 블록을 저장할 수 있는 것으로 각각 도시된다.
FIFO 레지스터들(126') 각각의 사이즈는 데이터 할당 블록들의 사이즈에 근거할 수 있고, 데이터 페이지의 사이즈에 독립적일 수 있다. 어떤 수의 할당 블록들은 일 데이터 페이지의 사이즈와 동일할 수 있다. 데이터 할당 블록들 및 FIFO 레지스터들(126')의 사이즈들을 감소시키는 것은 또한, 데이터 전달 속도들을 증가시키고, 병렬 데이터 전달 효율을 증가시키고 그리고 데이터 병목들을 방지할 수 있다.
멀티-할당 블록 전달 이벤트에서, 인터페이스 관리 모듈(50)에 제공되는 데이터는 복수의 채널들에 걸쳐 블록 단위로 스프레드된다. 데이터 할당 블록들, 데이터1-31가 도시된다. 단일의 데이터 할당 블록은 채널들 중 어느 것에 제2 할당 블록을 전송하기 전에 채널들 각각에 전달된다. 데이터 할당 블록들은 채널들 및/또는 NVSM(28) 내부의 디바이스들의 속도들에 근거하여 FIFO 레지스터들(126')로부터 채널들로 전달된다. 데이터 할당 블록들이 FIFO 레지스터들(126')의 각각에 전달됨에 따라, FIFO 레지스터들(126') 중 어느 하나에서의 데이터 병목의 확률이 감소된다.
도 15는 인터페이스 관리 제어 시스템의 부분(340)을 도시한다. 부분(340)은 도 1의 인터페이스 관리 제어 시스템(26) 내로 통합될 수 있고, 도 2의 부분(120)을 대체할 수 있으며, ECC 모듈(48'), 인터페이스 관리 모듈(50') 및 NVSM(28)을 포함한다. 도 2의 구현과는 달리, ECC 모듈(48')은 복수의 인코더들(342) 및 복수의 디코더들(344)을 포함하고, 인터페이스 관리 모듈(50')은 FIFO 레지스터들을 포함하지 않는다. 인코더들(342) 각각은 NVSM(28)의 채널들(100)과 거의 동일한 속도에서 데이터를 전달할 수 있다.
프로그램 이벤트 동안, DDS 생성 모듈(46)은, 예컨대 도 2 및 8 내지 14의 구현들에 관하여 기술된 바와 같이 FIFO 레지스터들에 데이터 할당 블록들을 스프레드하는 것과 유사하게 디코더들(342)에 데이터 할당 블록들을 스프레드할 수 있다. 도 15의 구현은 또한, 인터페이스 관리 모듈(50')에 FIFO 레지스터들을 통합하지 않음으로써 NVSM(28)에 그리고 NVSM(28)로부터 데이터를 전달하기 위해 사용되는 메모리의 양을 감소시킨다. FIFO 레지스터들이 통합되지 않음에 따라, 이 구현은 어떤 페이지 사이즈 또는 할당 블록 사이즈든 지원할 수 있다. 이는 펌웨어(92)의 개발 플렉서빌리티를 증가시킨다. 이 구현은 또한, 병렬 데이터 전달 효율을 증가시킬 수 있다.
도 14 및 15에 기술된 바와 같이, 일 페이지의 사이즈보다 작은 페이지들을 갖는 FIFO 레지스터들의 사용 및/또는 FIFO 레지스터들의 제거는 하드웨어/메모리 요건들을 최소화시킨다.
NVSM 스토리지 시스템(10) 및/또는 NVSM 드라이브(14)는 수많은 방법들을 이용하여 동작될 수 있고, 예시적인 할당 블록 기반의 방법이 도 16의 방법에 의해 제공된다. 도 16에서, NVSM 스토리지 시스템 및 NVSM 드라이브를 동작시키는 방법이 도시된다. 비록, 다음의 태스크들이 도 1 내지 15의 구현들에 관하여 주로 기술되지만, 이 태스크들은 본 발명의 다른 구현들에 적용하기 위해 쉽게 수정될 수 있다. 이 태스크들은 반복적으로(iteratively) 수행될 수 있다. 방법은 태스크(350)에서 시작될 수 있다.
태스크(352)에서, NVSM 드라이브 인터페이스(20)는 판독, 프로그램 및/또는 소거 이벤트들이 수행되어야 함을 요청하는 액세스 요청 신호들을 호스트 인터페이스(18)로부터 수신한다.
태스크(354)에서, NVSM 제어 모듈(27)은 액세스 요청 신호들에 근거하여 페이지 및/또는 할당 블록 디스크립터들을 생성한다. 페이지 및/또는 할당 블록 디스크립터들은 하나 이상의 데이터 전달 이벤트들을 수행하기 위해 생성될 수 있다. 데이터 전달 이벤트들 각각은 판독 이벤트 또는 프로그램 이벤트일 수 있고, 단 하나의 판독 준비 기간 또는 하나의 프로그램 준비 기간을 포함할 수 있다. 데이터 전달 이벤트 당 생성되는 디스크립터들의 수, 전달되는 데이터 페이지 및/또는 전달되는 데이터 할당 블록은 NVSM 제어 모듈(27)에 의해 결정될 수 있다.
데이터 전달 이벤트들 각각은 둘 이상의 디스크립터들을 포함한다. 전달 이벤트 당 데이터 페이지들의 수 및/또는 데이터 할당 블록들의 수는 또한, NVSM 제어 모듈(27)에 의해 결정되고, 생성된 디스크립터들로 표시될 수 있다. 하나 이상의 데이터 페이지들 및/또는 하나 이상의 데이터 할당 블록들이 데이터 전달 이벤트 마다 전달된다. 페이지 사이즈들은 미리 결정되고 고정될 수 있거나 또는 NVSM 제어 모듈(27)에 의해 설정될 수 있다.
태스크(356)에서, 커맨드 관리 모듈(60)은 페이지 및/또는 태스크(354)에서 생성된 할당 블록 디스크립터들에 근거하여 상기에 기술된 바와 같이 제1 파라미터 신호(80) 및 제2 파라미터 신호(82)를 생성한다.
태스크(358)에서, ECC 모듈(예컨대, ECC 모듈(48, 48') 중 하나) 및 인터페이스 관리 모듈(예컨대, 인터페이스 관리 모듈들(50, 50') 중 하나)는 제1 파라미터 신호(80) 및 제2 파라미터 신호(82)에 근거하여 판독 이벤트 또는 프로그램 이벤트가 수행되어야 하는지를 결정한다. 태스크(360)는 판독 이벤트가 수행될 때 수행된다. 태스크(370)는 프로그램 이벤트가 수행될 때 수행된다.
태스크(360)에서, 인터페이스 관리 모듈은 채널들(100)을 통해 NVSM(28)으로부터 인터페이스 관리 모듈로 데이터 블록들을 전달하도록 NVSM(28)에게 명령하기 위한 명령어 신호들(102)을 생성한다. 명령어 신호들(102)은 제2 파라미터 신호(82)에 근거하여 생성된다.
태스크(362)에서, NVSM(28)은 명령어 신호들의 명령어 세트들에 근거하여 채널들(100) 중 하나 이상에 데이터 페이지들 및/또는 데이터 할당 블록들을 준비 및 전달한다. 명령어 세트들은 예컨대, 도 3, 5, 8, 9 및/또는 10에 도시된 바와 같다. 데이터 페이지들 및/또는 데이터 할당 블록들은 인터페이스 관리 모듈의 FIFO 레지스터들에 의해 수신될 수 있다.
태스크(364)에서, 데이터 페이지들 및/또는 데이터 할당 블록들은 파라미터 신호들(80, 82)에 근거하여 인터페이스 관리 모듈로부터 ECC 모듈로 전달된다. 데이터 페이지들 및/또는 데이터 할당 블록들은 도 2, 7, 14 및 15에 도시된 바와 같이, ECC 모듈의 하나 이상의 디코더들에 전달될 수 있다.
태스크(366)에서, 데이터 페이지들 및/또는 데이터 할당 블록들은 예컨대, HDS 생성 모듈(52), 버퍼 관리 모듈(44), 복호화 모듈(54) 및 압축해제 모듈(56)을 통해 NVSM 드라이브 인터페이스(20)에 전달된다. 호스트(12)는 NVSM 드라이브 인터페이스(20)로부터 데이터 페이지들 및/또는 데이터 할당 블록들을 수신할 수 있다. 태스크(366)를 수행하는 것에 후속적으로, 방법은 도시된 바와 같이, 태스크(352)로 리턴하거나 또는 태스크(380)에서 종료할 수 있다.
태스크(370)에서, 데이터 페이지들 및/또는 데이터 할당 블록들은 NVSM 드라이브 인터페이스(20)에 의해 수신된다. 태스크(371)에서, 데이터 페이지들 및/또는 데이터 할당 블록들은 예컨대, 압축 모듈(40), 암호화 모듈(42), 버퍼 관리 모듈(44) 및 DDS 생성 모듈(46)을 통해 ECC 모듈에 포워딩된다.
태스크(372)에서, ECC 모듈은 제1 파라미터 신호(80)에 근거하여 인터페이스 관리 모듈에 데이터 페이지들 및/또는 데이터 할당 블록들을 전달할 수 있다. 데이터 페이지들 및/또는 데이터 할당 블록들은 도 2, 7 또는 14에 도시된 바와 같이, ECC 모듈의 인코더로부터 전달되어, 인터페이스 관리 모듈의 하나 이상의 FIFO 레지스터들에 스프레드될 수 있다. 대안으로서, 데이터 페이지들 및/또는 데이터 할당 블록들은 도 15에 도시된 바와 같이, ECC 모듈의 복수의 인코더들로부터 인터페이스 관리 모듈로 전달될 수 있다.
태스크(374)에서, 인터페이스 관리 모듈은 제2 파라미터 신호(82)에 근거하여 NVSM(28)에 데이터 페이지들 및/또는 데이터 할당 블록들을 전달하기 위한 명령어 신호들(102)을 생성한다. 명령어 신호들(102)은 명령어 세트들을 포함할 수 있다. 명령어 세트들은 예컨대, 도 4, 6, 11, 12 및/또는 13에 도시된 바와 같다.
태스크(376)에서, NVSM(28)은 채널들(100)을 통해 데이터 페이지들 및/또는 데이터 할당 블록들을 수신한다. 태스크(376)을 수행함에 후속적으로, 방법은 도시된 바와 같이, 태스크(352)로 리턴하거나 또는 태스크(380)에서 종료할 수 있다.
도 16의 상기 기술된 태스크들은 예시적인 예들로서 여겨지는 것이며, 태스크들은 어플리케이션에 따라, 순차적으로, 동기적으로, 동시에, 지속적으로, 중첩하는 시간 기간들 동안 또는 다른 순서로 수행될 수 있다. 예를 들어, 태스크(374)는 태스크(376)가 수행되는 동안 수행될 수 있다.
상기에 기술된 예들 중 일부는 NVSM에 그리고/또는 NVSM으로부터 전달되는, 페이지 당 (상기에 정의된 바와 같은) 복수의 디스크립터들 및/또는 할당 블록 당 복수의 디스크립터들을 이용한다. 복수의 디스크립터들을 생성 및 이용함으로써, 펌웨어 플렉서빌리티가 전달 당 단일의 디스크립터만을 이용하는 것에 비해 증가된다. 할당 블록 당 하나의 디스크립터를 생성하는 것을 포함하는 다른 예들이 하기에 제공된다. 선택된 할당 블록 사이즈에 근거하여 데이터 전달들을 수행하는 것은 판독 및 프로그램 이벤트들이 페이지 사이즈들에 관계없이 수행될 수 있게 하고, NVSM 드라이브가 NVSM의 어떤 페이지 사이즈든 수용할 수 있게 한다. 페이지의 사이즈보다 작은 할당 블록들은 NVSM 제어 모둘의 펨웨어가 다루기 더 쉽고, 인코딩 및 디코딩하기에 더 쉬우며, 호스트가 다루기 더 쉽다. 데이터 페이지들을 판독하는 것과는 반대로 NVSM으로부터 할당 블록들을 판독하는 것은 판독 레이턴시를 감소시킨다.
또한, 할당 블록 기반의 전달들은 NVSM 드라이브의 인터페이스 관리 모듈의 FIFO 사이즈들이 페이지 사이즈들에 독립적이게 할 수 있다. 또한, 전달 이벤트 당 NVSM의 복수의 채널들에 걸쳐 데이터 할당 블록들을 스프레드함으로써, 전달 효율을 향상시킨다. 데이터는 추가적인 데이터 블록이 이미 데이터 블록을 수신한 채널의 FIFO 내로 로딩됨을 기다림이 없이 복수의 채널들로 스프레드될 수 있다. 이는 전달 레이턴시들을 추가로 감소시킨다.
도 17은 NVSM 제어 모듈(402) 및 디스크립터 생성 모듈(404)을 포함하는 NVSM 스토리지 시스템의 부분(400)을 도시한다. NVSM 제어 모듈(402)은 도 1의 NVSM 제어 모듈(27)과 유사하게 동작할 수 있지만, 하기에 기술되는 바와 같이, 디스크립터 생성 모듈(404)을 이용한 동작에 대해 수정된다. NVSM 제어 모듈(402)은 NVSM 제어 모듈(402)의 메모리(406)에 저장된 펌웨어(405)에 따라 동작할 수 있다. 도 1의 NVSM 스토리지 시스템(10)은 부분(400)을 포함하도록 수정될 수 있다.
펌웨어를 통해 디스크립터들을 생성하기 위한 펌웨어 오버해드를 감소시키기 위해, 디스크립터 생성 모듈(404)이 포함된다. 디스크립터 생성 모듈(404)은 본 명세서에 기술된 디스크립터들을 생성하기 위해 예컨대, 전자 회로 및/또는 다른 적절한 하드웨어를 포함할 수 있다. 비록, 다음의 예들이 하드웨어를 포함하는 디스크립터 생성 모듈(404)을 나타내지만, 디스크립터 생성 모듈(404)은 디스크립터 생성을 위해 펌웨어를 실행할 수 있는 로직 디바이스들 및/또는 프로세서를 포함할 수 있다. 디스크립터 생성 모듈(404)에 의해 실행되는 펌웨어는 NVSM 제어 모듈(402)에 의해 실행되는 펌웨어(405)와 별개이며 이와는 다를 수 있다.
디스크립터 생성 모듈(404)은 예컨대, NVSM 제어 모듈(402)에 의해 디스크립터들(예컨대, 하드웨어 디스크립터들)을 생성하도록 트리거링될 수 있다. NVSM 제어 모듈(402)은 펌웨어(또는 제1) 디스크립터들을 생성하고 상기 펌웨어 디스크립터들을 디스크립터 생성 모듈(404) 내의 선입선출(FIFO) 메모리(407)에 포워딩할 수 있다. 펌웨어 디스크립터들은 입력 파라미터들을 포함할 수 있는 바, 상기 입력 파라미터들에 근거하여, 디스크립터 생성 모듈(404)은 제2 디스크립터들(예컨대, 하드웨어 디스크립터들)을 생성한다. 제2 디스크립터들은 상기에 기술된 다른 디스크립터들과 유사하게, 메모리(84)에 저장될 수 있다. 메모리(94)는 디스크립터들(펌웨어 및/또는 하드웨어 디스크립터들)을 저장하도록 할당되는 FIFO메모리를 포함할 수 있다. NVSM 제어 모듈(402)에 의해 생성되는 것들과 같이, 펌웨어를 이용하여 생성되는 디스크립터들은 펌웨어 디스크립터들로 지칭된다. 디스크립터 생성 모듈(404)에 의해 생성되는 것들과 같이, 하드웨어를 이용하여 생성되는 디스크립터들은 하드웨어 디스크립터들로 지칭된다.
그 다음, 디스크립터 생성 모듈(404)은 제2 디스크립터들이 생성되어 메모리(94) 저장됨을 AMB(advanced microcontroller bus)(408)를 통해 NVSM 제어 모듈(402)에 보고할 수 있다. 이는 예컨대, 디스크립터 생성 모듈(404)에 의해 생성되고 그리고/또는 NVSM 제어 모듈(402)에 의해 액세스되는 완료 상태 플래그를 통해 달성될 수 있다. 다른 예로서, 제2 디스크립터들 생성 완료가 디스크립터 생성 모듈(404)에 의해 생성되는 인터럽트를 통해 표시되고 NVSM 제어 모듈(402)에 전송될 수 있다. 디스크립터 생성 모듈(404)에 의한 제2 디스크립터들의 생성은 디스크립터들의 생성과 관련된 NVSM 제어 모듈(402)의 프로세싱 시간의 양을 감소시킨다. 이는 NVSM 제어 모듈(402)이 다른 태스크들을 수행할 수 있게 한다.
NVSM 스토리지 시스템의 부분(400)은 NVSM 제어 모듈(402), 디스크립터 생성 모듈(404), ECC 모듈(48), 커맨드 관리 모듈(410), 인터페이스 관리 모듈(50) 및 NVSM(28)을 포함한다. NVSM 제어 모듈(402)은 시스템-온-칩(SoC)로서 구현될 수 있고, 메모리(406)를 포함할 수 있다. 메모리(406)는 펌웨어(405) 및 테이블(104)을 저장할 수 있다. 펌웨어(405)는 도 1의 펌웨어(92)와 유사할 수 있지만, 하기에 개시된 펌워어-투-하드웨어(firmware-to-hardware) 그리고/또는 단일-투-복수(single-to-multiple) 디스크립터 동작들을 구현하기 위해 수정된다. 펌웨어(405)는 펌웨어 디스크립터들을 생성하며, 이들은 디스크립터 생성 모듈(404)에 의해 하나 이상의 다른 디스크립터들(예컨대, 하드웨어 디스크립터들)로 각각 변환된다. 테이블(104)은 디스크립터 생성 모듈(404)에 저장 및/또는 이와 공유될 수 있다.
커맨드 관리 모듈(410)은 도 1의 커맨드 관리 모듈(60)과 유사하게 동작하지만, 디스크립터 생성 모듈(404)과 통신하도록 수정된다. 커맨드 관리 모듈(410)은 디스크립터 생성 모듈(404)로부터 수신되는 디스크립터들(예컨대, 하드웨어 디스크립터들)을 수신 및 실행할 수 있다. 커맨드 관리 모듈(410)은 예컨대, AXI(advanced extensible interface) 버스(412)를 통해 메모리(94)와 통신한다. 커맨드 관리 모듈(410)이 디스크립터 생성 모듈(404)에 의해 생성되는 디스크립터들의 시퀀스를 순차적으로 실행할 수 있기 때문에, 상기 커맨드 관리 모듈(410)은 시퀀서로서 지칭될 수 있다. 메모리(94)는 파라미터 정보(96), 디스크립터들(84) 및 템플릿들(414)을 저장할 수 있다. 디스크립터들(84)은 펌웨어 및/또는 하드웨어 디스크립터들을 포함할 수 있다. 펌웨어 디스크립터들은 NVSM 제어 모듈(402) 및/또는 디스크립터 생성 모듈(404)로부터 수신될 수 있다. 하드웨어 디스크립터들은 디스크립터 생성 모듈(404)로부터 수신될 수 있다.
도 18은 할당 유닛 당 펌웨어 디스크립터의 생성을 예시하며, 도 1의 실시예에 관하여 기술된다. NVSM 제어 모듈(27)은 할당 유닛 당 펌웨어 디스크립터를 생성할 수 있고, 이는 그 다음, 메모리(94)에 저장될 수 있다. 예로서, 네 개의 데이터 할당 유닛들(또는 블록들) AU1 -4가 도시된다. NVSM 제어 모듈(402)은 NVSM(28)의 동작을 제어하기 위해 AU1 -4에 대한 펌웨어 디스크립터들, F/W Desc1 -4를 생성한다. 펌웨어 디스크립터들, F/W Desc1 -4은 데이터 할당 유닛들 AU1 -4에 각각 대응한다. 데이터 할당 유닛들 AU1 -4은 펌웨어 디스크립터들의 생성 전에 단일의 데이터 블록(420)으로 집합적으로 도시된다. 데이터 할당 유닛들 AU1 -4은 펌웨어 디스크립터들의 생성에 후속하여 개별적으로 도시된다. 데이터 할당 유닛들 AU1 -4은 동일한 시간 기간 동안 데이터 할당 유닛들 AU1 -4의 병렬적인 전달을 할 수 있게 하기 위해 분리될 수 있다.
도 19는 도 17의 실시예에 관하여 기술된 바와 같이, 할당 유닛 당 디스크립터(예컨대, 하드웨어 디스크립터)의 생성을 예시한다. NVSM 제어 모듈(402)은 미리 정해진 수의 데이터 할당 유닛들 AU1 -4을 갖는 단일의 데이터 블록(424)에 대한 펌웨어(또는 제1) 디스크립터를 생성할 수 있다. 펌웨어 디스크립터(422)는 메모리(94)에 저장 및/또는 디스크립터 생성 모듈(404)에 제공될 수 있다. 디스크립터 생성 모듈(404)은 데이터 할당 유닛들 AU1 -4 각각에 대해 제2 디스크립터를 생성할 수 있다. 제2 디스크립터들은 하드웨어 디스크립터들일 수 있고, H/W Desc1 -4로서 식별된다. 제2 디스크립터들은 NVSM(28)을 제어하기 위해 사용된다. 제2 디스크립터들과 관련된 데이터의 양은 NVSM 제어 모듈(402)에 의해 생성되는 펌웨어 디스크립터(422)와 관련된 데이터의 양과 동일하다. 비록, 도 19에서 제2 디스크립터들과 데이터 할당 유닛들 AU1 -4 간에 일 대 일 관계가 도시되지만, 제2 디스크립터들 각각은 하나 이상의 데이터 할당 유닛들 AU1 -4과 관련될 수 있다. 펌웨어(또는 제1) 디스크립터들로부터 하드웨어(또는 제2) 디스크립터들로의 변환들이 하기에 더 기술된다.
데이터 할당 유닛들 AU1 -4 각각은 어떤 양의 데이터든 가질 수 있다. 데이터 할당 유닛들 AU1 -4의 사이즈는 NVSM 제어 모듈(402)에 의해 미리 결정, 고정, 및/또는 설정될 수 있다. 할당 유닛들의 사이즈는 데이터 페이지의 사이즈보다 작거나 동일하거나 클 수 있다. 제2 디스크립터들 각각은 하나 이상의 데이터 페이지들의 전달을 제어하기 위해 사용될 수 있고, 따라서 단일 또는 멀티플레인 판독 및/또는 프로그램(또는 기입) 동작에 대응할 수 있다. 디스크립터 생성 모듈(404)은 인터페이스 관리 모듈(50)과 NVSM(28) 사이의 데이터의 병렬적인 전달을 최대화하기 위해 데이터 할당 유닛들 AU1 -4을 NVSM(28)의 복수의 채널들에 스프레드하기 위한 제2 디스크립터들을 생성할 수 있다.
도 17 및 19의 상기에 기술된 특징들은 NVSM 제어 모듈(402)이 데이터의 멀티플레인(복수의 페이지) 전달을 수행할 때 단일의 펌웨어 디스크립터를 생성할 수 있게 한다. 이는 디스크립터 생성 모듈(404)이 단일 펌웨어 디스크립터를 커맨드 관리 모듈(410)에 의해 실행되는 복수의 디스크립터들로 변환하기 때문이다. 디스크립터 생성 모듈(404)에 의한 디스크립터들의 생성은 NVSM 제어 모듈(402)이 NVSM(28)에게 인식가능한 순서로 NVSM(28)에 그리고 NVSM(28)로부터 데이터를 디스패치하는 것을 지속할 수 있게 한다. 디스크립터 생성 모듈(404)은 NVSM 제어 모듈(402) 대신 어드래스 매핑을 수행할 수 있다. 디스크립터 생성 모듈(404)은 예컨대, 데이터 할당 유닛들에 대한 로직적 블록 어드레스들을 물리적 블록 어드레스들에 매핑할 수 있다. 물리적 블록 어드레스들은 NVSM(28) 내의 메모리 위치들의 어드레스들이다. 디스크립터 생성 모듈(404)에 의해 수행되는 데이터의 디스패칭, 디스크립터들의 생성 및 어드레스 매핑은 데이터 전달들을 수행함에 있어서 NVSM 제어 모듈(402)에 의해 수행되는 계산들의 양을 최소화한다.
메모리(94)는 예컨대 도 2에 도시된 선입선출(FIFO) 레지스터들을 포함할 수 있다. FIFO 레지스터들 각각은 할당 유닛과 동일한 사이즈일 수 있다. 그 결과, FIFO 레지스터들의 사이즈들은 데이터 페이지 사이즈에 독립적일 수 있다. FIFO 레지스터들의 사이즈들을 데이터 할당 유닛들의 사이즈들과 매칭시키는 것은, 예컨대 도 2의 ECC 모듈(48)과 FIFO 레지스터들 사이의 속도 미스매치를 방지한다. 데이터 페이지보다 적은 양의 데이터를 전달함으로써, 적은 데이터가 전달 이벤트 당 FIFO 레지스터들 외부에서 전달되는 바, 이는 더 빠른 데이터 전달들을 할 수 있게 한다. 이는 FIFO 레지스터들과 관련된 데이터 전달 레이턴시들을 감소시킨다. 전달 레이턴시들을 더 감소시키기 위해, ECC 모듈(48)은 NVSM(28)로부터 데이터를 수신하고 NVSM(28)에 데이터를 전달할 때 FIFO 레지스터들 및/또는 대응하는 채널들을 통해 로테이팅할 수 있다. 데이터 블록은 전달 동안 데이터의 둘 이상의 부분들로 분리될 수 있다. 예를 들어, 16키로바이트(KB) 데이터 블록은 두 개의 8KB 부분들로 분리될 수 있다. 제1 부분은 제1 FIFO 레지스터에 그리고/또는 제1 FIFO 레지스터로부터 전달될 수 있고, 제2 부분은 제2 FIFO 레지스터에 그리고/또는 제2 FIFO 레지스터로부터 전달된다.
상기에 언급한 바와 같이, 본 명세서에 개시된 NVSM 스토리지 시스템들은 수많은 방법들을 이용하여 동작될 수 있다. 다른 예시적인 방법이 도 20에 예시된다. 도 20은 디스크립터 생성 방법을 예시한다. 비록, 도 20의 태스크들이 도 1, 17 및 19의 예들에 관하여 주로 기술되지만, 이 태스크들은 본 발명의 다른 실시예들에 적용될 수 있다. 태스크들은 반복적으로 수행될 수 있다.
방법은 태스크(500)에서 시작될 수 있다. 태스크(502)에서, NVSM 제어 모듈(402)은 호스트 디바이스(12)로부터 액세스 요청 신호들을 수신 및/또는 이의 수신을 검출한다. 태스크(504)에서, 펌웨어(405)를 이용하는 NVSM 제어 모듈(402)은 액세스 요청 신호들에 근거하여 하나 이상의 펌웨어(제1) 디스크립터들을 생성한다. 도 21은 NVSM 제어 모듈(402)에 의해 생성되는 펌웨어 디스크립터(505)의 예를 도시한다. 펌웨어 디스크립터(505)는 (행들 0-2로 식별되는) 세 개의 제어 행들 및 (행들 3-66로 식별되는) 64개의 파라미터 행들을 포함할 수 있다. 제어 행들 및 파라미터 행들 각각은 정보의 워드(word)를 가질 수 있다. 워드들의 각각은 디스크립터 워드(또는 DWORD)로 지칭될 수 있다. 어떤 수의 제어 행들 및 파라미터 행들이든 펌웨어 디스크립터에 포함될 수 있다. 파라미터 행들에서, 정보의 각각의 바이트는 입력 파라미터로 나타내질 수 있다. 파라미터 행들 내의 각각의 DWORD는 4 바이트의 파라미터들을 포함할 수 있다. 각각의 펌웨어 디스크립터가 64개의 파라미터 행들을 포함할 수 있기 때문에, 각각의 펌웨어 디스크립터는 256개의 파라미터들을 포함할 수 있다.
펌웨어 디스크립터의 제어 행들은 제어 정보를 갖는 제어 필드들을 포함한다. 도 22는 도 21의 펌웨어 디스크립터(505)에 대한 제어 행들의 예를 도시한다. 제1 제어 행, 행 0은 제어 필드들 PRMT_ROW_NUM, SRC_LEN 및 SRC_PTR를 포함한다. 제2 제어 행, 행 2는 제어 필드들 DF_SEL 및 DST_PTR을 포함한다. 제3 제어 행, 행 3은 제어 필드들 SC0-SC9을 포함한다. 예약된(reserved) 필드들 RSVD은 다른 제어 정보를 위해 사용될 수 있다. 제어 필드들 PRMT_ROW_NUM, SRC_LEN, SRC_PTR, DF_SEL 및 DST_PTR, 및 SC0-SC9에 대한 설명이 하기 표에 제공된다.
디스크립터 필드들의 표
디스크립터 필드 설명
SRC_PTR 이 필드는 템플릿의 위치를 나타내는 디스크립터 템플릿 포인터이다. 이는 메모리(94) 내의 템플릿의 물리적 어드레스를 나타낼 수 있다. 디스크립터 생성 모듈(404)은 디스크립터 템플릿 포인터에 근거하여 디스크립터들에 대한 템플릿들의 위치를 찾는다.
SRC_LEN 이 필드는 디스크립터 템플릿 길이 및/또는 예컨대 생성할 디스크립터들(예컨대, 하드웨어 디스크립터들)의 수를 나타낸다. 디스크립터 생성 모듈(404)은 대응하는 템플릿 및/또는 대응하는 펌웨어 디스크립터에 대해 생성할 디스크립터들의 수를 결정하기 위해 SCR-LEN 필드를 사용한다.
PRMT_ROW_NUM 이 필드는 대응하는 펌웨어 디스크립터 내의 파라미터 행들의 수를 나타낸다.
DST_PTR 이 필드는 메모리(94)에 디스크립터 생성 모듈(404)에 의해 생성되는 디스크립터들을 저장하기 위한 위치를 나타내는 포인터이다. 이는 메모리(94) 내의 하나 이상의 어드레스들을 나타낼 수 있다. 디스크립터 생성 모듈(404)은 DST_PTR에 의해 표시되는 어드레스들에 생성된 디스크립터들을 저장한다.
DF_SEL 이 필드는 FIFO 메모리의 어느 타입 또는 메모리의 어느 영역에 디스크립터 생성 모듈(404)에 의해 생성되는 디스크립터들을 놓을지를 나타내는 우선순위 선택 필드이다. 메모리(94)는 둘 이상의 FIFO 레지스터들을 포함할 수 있다. 예로서, 메모리(94)는 높은 우선순위 FIFO 레지스터들 및 낮은 우선순위 FIFO 레지스터들을 포함할 수 있다. DF_SEL 필드는 디스크립터 생성 모듈(404)에 의해 생성되는 디스크립터들을 높은 우선순위 FIFO 레지스터에 놓을지 낮은 우선순위 FIFO 레지스터에 높을지를 나타낼 수 있다. 높은 우선순위 FIFO 레지스터 내의 디스크립터들은 낮은 우선순위 FIFO 레지스터들 내의 디스크립터들 전에 커맨드 관리 모듈(410)에 의해 실행될 수 있다. 높은 우선순위 FIFO 레지스터들 내의 디스크립터들은 낮은 우선순위 FIFO 레지스터들 내의 디스크립터들보다 빨리 실행될 수 있다.
SC0 이 제어 필드는 디스크립터 생성 모듈(404)에 의해 생성되는 하나 이상의 디스크립터들과 관련된 사용자 데이터 또는 다른 데이터를 전송할 채널 및 디바이스를 나타낸다. 채널들의 예들은 도 7 및 14에 도시된다. 디바이스는 NVSM 칩을 나타낸다. 예를 들어, NVSM(28)은 복수의 NVSM 및/또는 NAND 칩들을 포함할 수 있다.
SC1 이 제어 필드는 RAID 제어에 대해 사용되며, 커맨드 RAID_CMD 및 식별자 RAID_ID를 포함할 수 있다. 이 제어 필드는 판독 스트라이프들을 생성하기 위해 디스크립터 생성 모듈(404)에 의해 사용될 수 있다.
SC2 이 제어 필드는 버퍼 관리 모듈(예컨대, 도 1의 버퍼 관리 모듈(44))과 NVSM(28) 사이의 데이터의 스트리밍 제어를 위해 사용된다. 이 필드는 버퍼 관리 모듈로부터 NVSM(28)으로 데이터를 스트리밍 및/또는 전달할지 또는 NVSM(28)로부터 버퍼 관리 모듈로 데이터를 스트리밍 및/또는 전달할지를 나타낼 수 있다. 이 제어 필드는 대안적으로는, NVSM(28)로부터 버퍼 관리 모듈로 데이터를 스트리밍 및/또는 전달하는 중에 버퍼 관리 모듈로부터 NVSM(28)으로 데이터를 스트리밍 및/또는 전달할 것을 나타낼 수 있다.
SC3 이 제어 필드는 NVSM(28) 내의 데이터 전달을 시작할 어드레스 START_ROW_ADDR을 나타낸다. NVSM(28)에 기입되는 데이터는 어드레스 START_ROW_ADDR에서 시작될 수 있거나 또는 데이터는 어드레스 START_ROW_ADDR에서 시작하여 NVSM(28)로부터 판독될 수 있다.
어드레스 START_ROW_ADDR는 세 개의 파라미터들을 포함할 수 있다. 이 파라미터들은 페이지 어드레스, 블록 어드레스, 룬(lun) 어드레스를 포함한다. 페이지 어드레스는 메모리 셀의 특정 행을 식별하기 위한 행 인덱스로서 사용된다. 블록 어드레스는 메모리 셀의 특정 어레이를 식별하기 위한 어레이 인덱스로서 사용된다. 룬 어드레스는 특정 디바이스, NVSM 칩, 및/또는 NAND 칩을 식별하기 위한 디바이스, NVSM 칩 및/또는 NAND 칩 인덱스로서 사용된다.
SC4 이 제어 필드는 NVSM(28)에 액세스할 때 시작할 열 어드레스 START_COL_ADDR를 나타낸다.
SC5 이 제어 필드는 얼마나 많은 데이터가 디스크립터 생성 모듈(404)에 의해 생성되는 하나 이상의 디스크립터들에 대해 전달되는지를 나타낸다. 디스크립터 당 데이터의 양이 표시될 수 있다.
SC6 이 제어 필드는 데이터 전달에 수반되는 버퍼 관리 모듈(44) 내의 버퍼(70)의 세그먼트들을 식별할 수 있다. 데이터는 버퍼(70)의 다른 세그먼트에 또는 다른 세그먼트로부터 데이터를 전달하는 동안에 버퍼(70)의 제1 세그먼트에 또는 제1 세그먼트로부터 전달될 수 있다. 데이터는 동일한 시간 기간 동안 버퍼(70)의 복수의 세그먼트들에 또는 복수의 세그먼트들로부터 스트리밍될 수 있다.
SC7 이 제어 필드는 버퍼 관리 모듈의 퍼버 내의 물리적 어드레스들에 대한 포인터들을 포함할 수 있다. 버퍼 관리 모듈(44)은 데이터가 전달될 때 어드레스들로 점프(또는 어드레스들을 스킵)할 수 있다. 이러한 상황이 발생할 때, 물리적 어드레스들은 포인터들을 이용하여 효과적으로 링킹될 수 있다. 이 필드는, 제공된 포인터들을 이용하여 스킵된 어드레스들을 고려하면서 로직적 블록 어드레스들을 물리적 블록 어드레스들로 변환하기 위해 디스크립터 생성 모듈(404)에 의해 사용될 수 있다.
SC8 이 제어 필드는 커맨드 그룹 식별자(ID)로서 지칭되며 메모리(94)에 저장된 펌웨어 디스크립터들의 그룹을 식별하기 위해 사용될 수 있다. 디스크립터 생성 모듈(404)은 디스크립터 생성 모듈(404)에 의해 디스크립터들의 생성을 완료함에 후속하여 NVSM 제어 모듈(402)에 이 ID를 리턴할 수 있다.
SC9 이 제어 필드는 NVSM(28)의 파라미터들을 제어하기 위해 사용될 수 있다. 예를 들어, 이 필드는 NAND의 메모리 셀들에 저장된 비트 값들 간을 구별하기 위해 NAND에 의해 사용되는 전압 참조 조정 값들 VREF을 포함할 수 있다.
상기 표에 언급된 정보에 추가적으로, 펌웨어 디스크립터의 제어 필드들 각각은 또한, (i) 템플릿 내의 디폴트 값들 및/또는 정보를 사용할지 또는 (ii) 템플릿 내의 디폴트 값들 및/또는 정보를 펌웨어 디스크립터의 파라미터 행들 내의 대응하는 값들 및/또는 정보로 교체할지를 나타낼 수 있다. 예를 들어, 제어 필드 SC0는 템플릿 내의 대응하는 디폴트 바이트의 사용을 나타내기 위해 '0'으로 설정될 수 있는 디폴트 비트를 포함할 수 있다. 이 디폴트 비트는 펌웨어 디스크립터의 파라미터 행 내의 파라미터들 중 하나로서 제공되는 대응하는 바이트 값의 사용을 표시하기 위해 '1'로 설정될 수 있다. 제어 필드들은 하나보다 많은 디폴트 비트를 포함할 수 있다. 예를 들어, 제어 필드 SC3은 디폴트 페이지 어드레스, 디폴트 블록 어드레스 및/또는 디폴트 룬 어드레스를 사용할지를 나타내기 위해 페이지 어드레스, 블록 어드레스 및 룬 어드레스 각각에 대한 디폴트 비트를 포함할 수 있다. 이들 어드레스들은 상기 표에 정의된다. 추가적으로, 제어 필드들 각각은 서로 다른 포맷들을 가질 수 있고, 제어 필드들의 포맷들은 대응하는 NVSM 시스템이 사용되고 있는 어플리케이션에 근거하여 설정될 수 있다.
태스크(506)에서, NVSM 제어 모듈(402)은 FIFO 메모리(407)에 펌웨어 디스크립터들을 전송한다. 태스크(507)에서, NVSM 제어 모듈(402)은 펌웨어 디스크립터들을 저장함에 후속하여 디스크립터 생성 모듈(404)을 트리거할 수 있다. NVSM 제어 모듈(402)은 예컨대, FIFO 메모리(407)로의 하나 이상의 펌웨어 디스크립터들의 전달을 표시하는 커맨드 신호를 디스크립터 생성 모듈(404)에 전송함으로써 디스크립터 생성 모듈(404)을 트리거할 수 있다. 태스크(507)는 수행되지 않을 수 있다. 다른 예로서, 디스크립터 생성 모듈(404)은 펌웨어 디스크립터들의 전달을 검출할 수 있고, NVSM 제어 모듈(402)로부터 커맨드 신호를 수신함이 없이 하드웨어 디스크립터들의 생성을 시작할 수 있다.
단계(508)에서, 디스크립터 생성 모듈(404)은 FIFO 메모리(407)에 액세스하며 펌웨어 디스크립터들 중 하나 이상으로부터 커맨드 파라미터들을 파싱한다. 태스크(510)에서, 디스크립터 생성 모듈(404)은 메모리(94)로부터 하나 이상의 디스크립터 템플릿들(이하, "템플릿들"로 지칭)에 액세스하고, 하나 이상의 펌웨어 디스크립터들 내의 커맨드 파라미터들에 근거하여 템플릿들 내의 디스크립터 필드들을 갱신한다. 템플릿들 각각은 일반적인 디스크립터 및/또는 플렉서블 디스크립터일 수 있다. 일반적인 디스크립터는 파라미터 필드들 각각 내에 미리 결정된 디폴트 값들을 갖는 파라미터 필드들의 미리 결정된 세트를 가질 수 있다. 일반적인 디스크립터의 목적은 고정될 수 있다. 플렉서블 디스크립터는 파라미터 필드들이 서로 다른 목적들로 갱신 및/또는 사용될 수 있는 디스크립터를 나타낸다. 예를 들어, 플렉서블 디스크립터의 필드들은 NVSM의 서로 다른 제어 파라미터들을 설정하기 위해 사용될 수 있다.
태스크(512)에서, 디스크립터 생성 모듈(404)은 메모리(94)에 태스크(510)에서 수정된 하나 이상의 템플릿들을 저장한다. 수정된 하나 이상의 템플릿들은 태스크(510)에서 액세스되는 대응하는 하나 이상의 템플릿들을 교체하지 않는다. 이는 동일한 디폴트 템플릿들 및/또는 수정된 템플릿들이 후속적으로 생성되는 디스크립터들(하드웨어 및/또는 펌웨어 디스크립터들)에 대해 사용될 수 있게 한다.
태스크(514)에서, 펌웨어 디스크립터들 각각에 대해 그리고 대응 및 수정된 템플릿에 따라 디스크립터 생성 모듈(404)은 하나 이상의 제2 디스크립터들(예컨대, 하드웨어 디스크립터들)을 생성한다. 복수의 제2 디스크립터들이 (i) NVSM 제어 모듈(402)에 의해 생성되는 펌웨어 디스크립터들 및/또는 (ii) 대응 및 수정된 템플릿 각각에 대해 생성될 수 있다. 제2 디스크립터들은 하드웨어 및/또는 펌웨어 디스크립터들을 포함할 수 있다. 복수의 하드웨어 디스크립터들을 생성하는 예들이 도 24 내지 26의 실시예들 관하여 하기에 기술된다.
태스크(516)에서, 디스크립터 생성 모듈(404)은 메모리(94)에 태스크(514)에서 생성된 제2 디스크립터들을 저장한다. 태스크(514)에서 생성된 제2 디스크립터들은 대응 및 수정된 템플릿의 일부로서 또는 이와는 별개로 저장될 수 있다. 태스크(518)에서 그리고 제2 디스크립터들을 생성 및/또는 저장(save)함에 후속적으로, 디스크립터 생성 모듈(404)은 현재의 하나 이상의 제2 디스크립터들의 생성이 완료됨을 NVSM 제어 모듈(404)에 나타낼 수 있다. 디스크립터 생성 모듈(404)은, NVSM 제어 모듈(402)에 상태 신호를 전송함으로써, 예컨대 AHB 버스(408)를 통해 NVSM 제어 모듈(402)에 액세스가능한 플래그를 설정함으로써, 그리고/또는 인터럽트를 생성함으로써 이 표시를 제공할 수 있다. 상태 신호는 AHB 버스(408)를 통해 전송될 수 있다.
태스크(520)에서, 디스크립터 생성 모듈(404)은, 예컨대 복수의 하드웨어 디스크립터들로 변환할 NVSM 제어 모듈(402)에 의해 생성되는 다른 펌웨어 디스크립터가 존재하는지를 결정할 수 있다. 다른 펌웨어 디스크립터가 존재하는 경우, 태스크(508)가 수행될 수 있고, 그렇지 않으면 방법은 태스크(522)에서 종료될 수 있다.
상기 기술된 방법 동안, 예컨대 태스크(518)에서, 하나 이상의 상태 레지스터들은 생성된, 실행되는, 그리고/또는 하드웨어 디스크립터들로 변환되는 펌웨어 디스크립터들 각각에 대해 갱신될 수 있다. 디스크립터 생성 모듈(404)은, 디스크립터 생성 모듈이 하나 이상의 디스크립터들의 생성을 완료하는 동안 및/또는 완료함에 후속하여 상태 레지스터들 내의 필드들을 갱신할 수 있다. NVSM 제어 모듈(402)은 펌웨어-투-하드웨어(또는 단일-투-복수) 디스크립터 변환이 실행 및 완료되었는지를 결정하기 위해 이 필드들을 트랙킹할 수 있다. 도 23은 이러한 트랙킹 목적들을 위해 사용될 수 있는 상태 레지스터(530)의 예를 도시한다.
도시된 상태 레지스터(530)는 네 개의 필드들을 포함한다. DGE_GENDES_CNT로서 식별되는 제1 필드는 특별한 펌웨어 디스크립터에 대해 디스크립터 생성 모듈(404)에 의해 생성되는 디스크립터들의 수(예컨대, 하드웨어 및/또는 펌웨어 디스크립터들의 수)를 나타낸다. DES_FIFO_ADDR로서 식별되는 제2 필드는 디스크립터 생성 모듈(404)에 의해 생성되는 디스크립터들이 저장되는 메모리(94) 내의 어드레스를 나타내는 어드레스 포인터이다. DGE_ERR_CODE로서 식별되는 제3 필드는 펌웨어-투-하드웨어 및/또는 단일-투-복수 디스크립터 변환 프로세스 동안 에러가 발생되었는지를 나타낸다. 예로서, 제3 필드는 펌웨어 디스크립터의 파라미터 행에 제공되는 파라미터가 "경계외(out of boundary)"에 있을 때를 나타낼 수 있는 바, "경계외"는 디스크립터 생성 모듈(404)이 분간할 수 없음(indiscernible)을 의미한다. DES_FIFO_ADDR_WRAPPED로서 식별되는 제4 필드는 디스크립터가 순환 메모리(circular memory)를 랩(wrap)핑했는지를 나타낸다. 예를 들어, 버퍼 또는 FIFO 레지스터는, 상기 버퍼 또는 FIFO 레지스터를 채울 시 나머지 데이터가 상기 버퍼 또는 FIFO 레지스터의 시작부(beginning)의 데이터 위에 기입되도록 하는 순환 메모리로서 사용될 수 있다. 그 결과, 디스크립터가 버퍼 또는 FIFO 레지스터보다 클 때, 디스크립터의 마지막 부분이 버퍼 또는 FIFO 레지스터 내의 디스크립터의 시작부분 위에 기록될 수 있다.
도 20의 상기 기술된 태스크들은 예시적인 예들을 의미하는 것이며, 이 태스크들은 어플리케이션에 따라 순차적으로, 동기적으로, 동시에, 지속적으로, 중첩하는 시간 기간들 동안 또는 다른 순서로 수행될 수 있다. 또한, 태스크들 중 어느 것은 구현 및/또는 이벤트들의 시퀀스에 따라 수행 또는 스킵될 수 있다.
도 24 및 25 각각은 펌웨어 디스크립터(540)의 예 및 탬플릿(550)의 예를 도시한다. 펌웨어 디스크립터(540)는 도 17의 NVSM 제어 모듈(402)에 의해 생성될 수 있다. 펌웨어 디스크립터(540) 및 탬플릿(550)은 도 17의 메모리(94)에 저장될 수 있다. 도시된 예에서, 펌웨어 디스크립터(540)는, NVSM(28)의 셀이 3-레벨 셀(TLC)들을 포함하는 멀티-레벨 셀 실시예에 대해 생성된다. TLC들 각각은 또한, 복수의 데이터 비트들을 저장할 수 있다.
도시된 예에서, 펌웨어 디스크립터(540)는 필드들 SRC_PTR, SRC_LEN, PRMT_ROW_NUM과 같은 복수의 필드들을 포함한다. 펌웨어 디스크립터(540)는 필드들 SC0, SC8, SC9 및 SC5와 같이, 도 17의 디스크립터 생성 모듈(404)에 의해 생성되는 하드웨어(또는 제2) 디스크립터들에 어느 필드들을 포함시킬지를 나타낼 수 있다. 펌웨어 디스크립터(540)는 도시된 바와 같이 필드들 SC0, SC8, SC9 및 SC5에 대응하는 채널 및/또는 디바이스 식별자 CH/DEV ID, 그룹 커맨드 식별자 TRACK_ID, 제어 파라미터 DQ0 및/또는 어드레스에 대한 값들을 포함할 수 있다.
펌웨어 디스크립터(540)는 또한, 템플릿(550) 내의 대응하는 디스크립터 값들을 갱신하기 위한 값들을 포함할 수 있다. 예를 들어, 펌웨어 디스크립터(540)의 바이트 0-3은 템플릿(550)의 필드 SC8에 대응한다. 다른 예로서, 펌웨어 디스크립터(540)의 바이트들 4-19은 템플릿(550)의 필드들 DQ0-3에 대한 값들을 포함한다. 필드들 DQ0-3에 대한 값들은 템플릿(550) 내의 네 개의 제1 디스크립터들 각각에 제공될 수 있다. 펌웨어 디스크립터(540)는 또한, 필드 SC5에 대한 시작 행 어드레스를 갖는 바이트들(예컨대, 바이트들 20-23)을 포함할 수 있다.
도시된 바와 같이, 템플릿(550)은 5개의 디스크립터들 각각에 대한 필드들을 포함한다. 템플릿(550)은 각각의 디스크립터에 대한 어떤 수의 필드들이든 포함할 수 있고, 어떤 수의 디스크립터들에 대한 값들을 가질 수 있다. 또한, 어떤 수의 디스크립터들이든 템플릿(550) 및/또는 템플릿(550) 내의 디스크립터와 관련된 값들을 이용하여 생성될 수 있다. 템플릿(550) 및/또는 템플릿(550)의 일부에 근거하여 생성된 디스크립터들의 수는 필드들 SRC_PTR 및 SRC_LEN을 통해 표시될 수 있다. 템플릿(550)은 사용자에 의해 정의되고, 미리 결정되고 그리고/또는 NVSM 제어 모듈(402)에 의해 생성될 수 있고, 메모리(94)에 저장될 수 있다.
TLC 판독의 경우, NVSM(28)에 대한 최대 네 개의 전압 기준(VREF) 임계 조정들이 판독(또는 제5) 디스크립터(예컨대, DES5)를 발행하기 전에 수행될 수 있다. 이러한 이유로, 템플릿(550)은 VREF 조정들에 대한 디스크립터 값들을 포함할 수 있다. 디스크립터들 DES1-4에 대한 템플릿(550)에 제공되는 디스크립터 값들은 네 개의 VREF 조정들에 대해 각각 사용될 수 있다. 디스크립터 값들 DES1-4은 각각의 VREF를 나타내기 위해 사용될 수 있는 값 DQ0을 갖는 제어 파라미터 필드 SC9를 포함할 수 있다. 도시된 예에서, 제어 파라미터 필드들 DQ1-3는 사용되지 않는다. 예로서, NVSM 제어 모듈(402)은 메모리 셀들의 각각의 상부, 중간 및 하부 비트들에 대해 VREF 조정 값들을 갖는 펌웨어 디스크립터를 생성할 수 있다. VREF 조정 값들은 메모리 셀들의 상태들을 결정하기 위한 임계들을 제공할수 있다. 메모리 셀 당 두 개의 비트의 예에서, VREF 조정 값들은 메모리 셀 상태들 00, 01, 10, 11에 대한 임계들을 제공할 수 있다. 임계들은 메모리 셀들의 비트 값들을 결정하기 위해 메모리 셀들의 상태들에 대응하는 검출된 전압들 간을 구별하기 위해 사용된다.
템플릿(550)에 근거하여 생성되는 디스크립터들은 일반적인 그리고/또는 플렉서블 디스크립터들일 수 있다. 디스크립터들 각각은 도시된 바와 같이, 필드들 SC0, SC8, SC9, 및 SC5와 같은 소스 제어 필드들 SRC_CTRL을 포함할 수 있다. SC0 필드는 상기에 기술된 바와 같이, 채널 CH 및/또는 디바이스 DEV를 나타낼 수 있다. SC8 필드는 상기에 기술된 바와 같이, 그룹 커맨드(또는 트랙) 식별자를 나타낼 수 있다. SC5 필드는 NVSM(28)에서 데이터가 저장되는 시작 행 어드레스 START_ROW_ADDR를 나타낼 수 있다. 디스크립터 값들 DES1-5의 필드들 SC0, SC8, SC9, SC5 내의 값들은 입력 파라미터 인덱스 값들이며, 이들은 펌웨어 디스크립터로부터 획득될 수 있고 템플릿 내의 대응하는 값들을 교체할 수 있다. 예를 들어, 필드 DQ0가 제1 디스크립터 값 DES1에 의해 표시되는 4와 동일하면, 제1 디스크립터 값들 DES1에 대한 필드들 DQ0-3은 입력 파라미터 바이트들 4-7로 교체된다.
디스크립터 생성 모듈(404)은 템플릿(550)에 제공된 디스크립터 값들 DES1-5 및 바이트들4-9에 저장된 입력 커맨드 파라미터들과 같은 펌웨어 디스크립터(540) 내의 입력 커맨드 파라미터들에 근거하여 5개의 디스크립터들을 생성한다. 도시된 예에서, 바이트들 4-19에 저장된 VREF들은 입력 커맨드 파라미터들이다. 다른 입력 커맨드 파라미터들(이들의 예들은 상기에 개시되어 있음)은 펌웨어 디스크립터(540)를 통해 제공되며 템플릿(550)에 갱신될 수 있다.
개시된 실시예들은 템플릿들 및/또는 디스크립터들이 재사용될 수 있게 한다. 예로서, 제4 디스크립터 값들 DES4을 재사용하기 위해, NVSM 제어 모듈(402)은 제4 디스크립터 값들 DES4을 가리키도록 필드 SCR_PTR을 설정하고, 필드 SRC_LEN=2로 설정할 수 있다. 이는 동일한 템플릿(550) 내의 동일한 값들을 이용하여 두 개의 디스크립터들을 생성하도록 행해질 수 있다.
도 26은 독립 디스크들의 리던던트 어레이(RAID)에 대한 하드웨어 디스크립터들의 생성을 도시한다. RAID는 어떤 수의 메모리 칩들(예컨대, NAND 칩들)도 포함할 수 있고, 이 칩들 각각은 메모리 디바이스(또는 디스크)로서 지칭된다. 복수의 메모리 디바이스들은 단일 채널을 공유할 수 있다. 이러한 이유로, 채널 CH 및 메모리 디바이스 DEV의 식별이 메모리 디바이스들로 그리고 메모리 디바이스들로부터 데이터를 전달할 때 제공된다. 상기에 기술된 필드 SC0는 채널 및 메모리 디바이스에 대한 값들을 포함한다.
도 26은 도 17의 NVSM 제어 모듈(402)에 의해 생성된 펌웨어 디스크립터(560) 및 펌웨어 디스크립터(560)에 근거하여 생성된 대응하는 디스크립터 값들 DES1-8을 갖는 탬플릿(570)을 도시한다. 펌웨어 디스크립터(560)는 (행들 0-2으로 식별되는) 제어 필드들을 갖는 제어 행들 및 (행들 3-4로 식별되는) 입력 커맨드 파라미터 행들을 포함할 수 있다. 비록, 제어 행들이 제어 필드들 SC5 및 SC1을 포함하는 것으로 도시되지만, 다른 제어 필드들이 포함될 수 있다. 디스크립터 생성 모듈(404)은 디스크립터 값들 DES1-8에 근거하여 8 개의 디스크립터들을 생성할 수 있다.
도시된 예에서, 템플릿(570)은 동일한 시간 기간 동안 복수의 페이지 디스크립터들을 생성하기 위해 제공된다. 복수의 페이지 디스크립터들 각각은 복수의 페이지 디스크립터들 중 다른 페이지 디스크립터들이 생성 및/또는 실행되는 동안, 생성 및/또는 실행될 수 있다. 이는 ("슈퍼 데이터 블록"으로 지칭되는) 많은 양의 데이터를 전달하기 위해 행해진다. 예로서, 8개의 데이터 블록들이 각각의 채널들 상에서 동일한 시간 기간 동안 그리고 NVSM(28) 내의 각각의 메모리 디바이스들에 전달될 수 있다. NVSM(28)은 RAID를 포함 및/또는 RAID로 지칭될 수 있다. 도시된 예에서, NVSM(28)은 RAID(580)를 포함한다. 각각의 기입 동작은 8개의 데이터 페이지들을 각각의 채널들 상에서 NVSM(28) 내의 각각의 메모리 디바이스들에 기입하는 것을 포함할 수 있다. 채널들 및 메모리 디바이스들 각각에 대한 SC0 필드는 비록 도 26에 도시되지는 않지만, 템플릿(570)에 포함될 수 있다.
도시된 템플릿(570)은 메모리 디바이스들 각각에 대해 START_ROW_ADDR, RAID_CMD/RAID_ID 필드들을 포함하지 않는다. 이 필드들은 펌웨어 디스크립터(560)에 제공되는 입력 파라미터 값들에 근거하여 구성될 수 있다. 예를 들어, 입력 파라미터 값들 PRMT0-3은 START_ROW_ADDR 필드들에 대해 사용될 수 있다. 입력 파라미터 값들 PRMT4-6은 RAID_CMD/RAID_ID 필드들에 대해 사용될 수 있다.
동작 시, 많은 양의 데이터가 예컨대, 도 1의 버퍼(70)에 누적될 수 있다. 그 다음, NVSM 제어 모듈(402)은 펌웨어(405)를 통해, 디스크립터 값들 DES1-8을 갖는 템플릿(570)에 액세스 및/또는 템플릿(570)을 생성할 수 있다. 디스크립터 값들 DES1-8은 일반적인 디스크립터 값들일 수 있다. 템플릿의 필드들 START_ROW_ADDR, RAID_CMD, RAID-ID은 펌웨어 디스크립터로부터 대응하는 입력 파라미터 값들로 채워진다. 템플릿(570)의 필드들은 DATA 필드를 포함할 수 있다. DATA 필드는 대응하는 디스크립터에 대한 데이터가 시작 데이터인지, XOR(exclusive-OR) 데이터인지 또는 패리티 데이터인지를 나타낼 수 있다. 시작 데이터는 디스크립터와 관련된 제1 데이터를 나타낸다. XOR 데이터는 패리티 데이터를 제공하기 위해 함께 XOR되는 데이터를 나타낸다. 패리티 데이터는 데이터 복구를 위해 사용되는 리던던트 또는 에러 정정 코딩(ECC) 데이터를 나타낼 수 있다. 그 다음, 도 17의 디스크립터 생성 모듈(404)은 대응하는 8개의 채널들 상에서의 병렬 데이터 전달을 위해 템플릿(570)에 근거하여 8개의 디스크립터들을 생성할 수 있다. 이는 NVSM 제어 모듈(402)이 단일의 펌웨어 디스크립터를 생성함으로써 많은 양의 데이터의 전달을 위해 많은 디스크립터들의 생성을 트리거할 수 있게 한다.
본 발명의 다수의 구현들이 존재하기 때문에, 구성들이 구현들 모두를 명시적으로 보여주지는 않는다. 예를 들어, 예컨대 도 1, 2, 7, 14, 15 및 17에 도시된 인접 및 비인접 요소들은 서로 직접 또는 간접적으로 연결될 수 있다. 인접 및 비인접 요소들은 서로와 무선으로 통신할 수 있고 그리고/또는 유선 링크들을 통해 서로와 통신할 수 있다. 본 발명에 개시된 무선 통신들은 IEEE 표준 802.11-2012, IEEE 표준 802.16-2009, IEEE 표준 802.20-2008, 및/또는 블루투스 코어 사양 v4.0와 전체적으로 또는 부분적으로 부합하여 수행될 수 있다. 다양한 구현들에서, 블루투스 코어 사양 v4.0은 블루투스 코어 사양 부록(addendum)들 2, 3 또는 4 중 하나 이상에 의해 수정될 수 있다. 다양한 구현들에서, IEEE 802.11-2012는 드레프트 IEEE 표준 802.11ac, 드레프트 IEEE 표준 802.11ad, 및/또는 드레프트 IEEE 표준 802.11ah에 의해 보충될 수 있다.
상기 설명은 사실상 단지 예시적인 것이며, 어떤 방식으로도 본 발명, 이의 응용 또는 사용들을 제한하고자 의도된 것이 아니다. 본 발명의 넓은 교시들이 다양한 형태들로 구현될 수 있다. 그러므로, 본 발명이 특별한 예들을 포함하지만, 다른 수정들이 도면들, 명세서 및 다음의 특허청구범위의 학습 시 분명해질 것이기 때문에 본 발명의 진정한 범위는 이러한 특별한 예들에 제한되어서는 안된다. 본 명세서에서 사용된 문구 'A, B 및 C 중 적어도 하나'는 비-배타적 논리 OR을 이용하여 논리적(A 또는 B 또는 C)를 의미하는 것으로 해석되어야 한다. 일 방법 내의 하나 이상의 단계들이 본 발명의 원리들을 벗어남이 없이 다른 순서로 (또는 동시에) 실행될 수 있다.
이 어플리케이션에서, 하기의 정의들을 포함하여, 용어 모듈은 용어 회로로 교체될 수 있다. 용어 모듈은 응용 주문형 집적 회로(ASIC), 디지털, 아날로그 또는 혼합식 아날로그/디지털 이산 회로(mixed analog/digital discrete circuit), 디지털, 아날로그 또는 혼합식 아날로그/디지털 집적 회로, 결합형 로직 회로, 현장 프로그래머블 게이트 어레이(FPGA), 코드를 실행하는 (공유, 전용 또는 그룹) 프로세서, 프로세서에 의해 실행되는 코드를 저장하는 (공유, 전용 또는 그룹) 메모리, 기술된 기능을 제공하는 다른 적절한 하드웨어 컴포넌트들, 또는 시스템-온-칩과 같이, 상술한 것들 중 일부 또는 모두의 조합을 나타내거나, 이들 중 일부이거나 또는 이들을 포함할 수 있다.
상기에 사용된 용어, 코드는 소프트웨어, 펌웨어, 및/또는 마이크로코드를 포함할 수 있고, 프로그램들, 루틴들, 함수(function)들, 클래스들 및/또는 객체(object)들을 나타낼 수 있다. 상기 용어, 공유 프로세서는 복수의 모듈들로부터 일부 또는 모든 코드를 실행하는 단일 프로세서를 포괄한다. 상기 용어, 그룹프로세서는, 추가적인 프로세서들과 조합하여 하나 이상의 모듈로부터의 일부 또는 모든 코드를 실행하는 프로세서를 포괄한다. 상기 용어, 공유 메모리는 복수의 모듈들로부터 일부 또는 모든 코드를 저장하는 단일 메모리를 포괄한다. 상기 용어, 그룹 메모리는, 추가적인 메모리들과 조합하여 하나 이상의 모듈들로부터 일부 또는 모든 코드를 저장하는 메모리를 포괄한다. 상기 용어, 메모리는 용어, 컴퓨터 판독가능 매체의 서브세트일 수 있다. 본 명세서에서 사용된 상기 용어, 컴퓨터 판독가능 매체는 매체를 통해 전파되는 일시적 전기 및 전자기적 신호들을 포괄하지 않고, 그러므로, 용어 컴퓨터 판독가능 매체는 유형이며 비 일시적인 것으로 고려될 수 있다. 비 일시적 유형 컴퓨터 판독가능 매체의 비제한적인 예들은 (플래시 메모리와 같은) 비휘발성 메모리, (정적 랜덤 액세스 메모리 및 동적 랜덤 액세스 메모리와 같은) 휘발성 메모리, (자기 테이프 또는 하드 디스크 드라이브와 같은) 자기 스토리지 및 광학 스토리지를 포함한다.
본 어플리케이션에 기술된 장치들 및 방법들은 하나 이상의 프로세서들에 의해 실행되는 하나 이상의 컴퓨터 프로그램들에 의해 부분적으로 또는 전체적으로 구현될 수 있다. 컴퓨터 프로그램들은 적어도 하나의 비 일시적 유형 컴퓨터 판독가능 매체 상에 저장된 프로세서로 실행가능한 명령어들을 포함한다. 컴퓨터 프로그램들은 또한, 저장된 데이터를 포함하고 그리고/또는 이에 의존할 수 있다.
비록, 용어들, 제1, 제2, 제3 등이 다양한 요소들, 컴포넌트들, 채널들, 모듈들, 및/또는 디바이스들을 기술하도록 본 명세서에서 사용될 수 있지만, 이 요소들, 컴포넌트들, 채널들, 모듈들, 및/또는 디바이스들은 이러한 용어들에 의해 제한되어서는 안 된다. 이 용어들은 단지, 일 요소들, 컴포넌트들, 채널들, 모듈들 및/또는 디바이스들을 다른 요소들, 컴포넌트들, 채널들, 모듈들 및/또는 디바이스들로부터 구별하기 위해 사용될 수 있다. "제1", "제2"와 같은 용어들 및 다른 숫자 용어들은 본 명세서에 사용될 때 문맥에 의해 명확하게 나타내지지 않은 한, 시퀀스 또는 순서를 의미하지 않는다. 따라서, 하기에 논의된 제1 요소들, 컴포넌트들, 채널들, 모듈들 및/또는 디바이스들은 예시적 구현들의 교시들로부터 벗어남 없이 제2 요소들, 컴포넌트들, 채널들, 모듈들 및/또는 디바이스들이라고 지칭될 수 있다.

Claims (20)

  1. 스토리지 드라이브(storage drive)로서,
    호스트 디바이스와 상기 스토리지 드라이브 간의 복수의 데이터 블록들의 전달을 제어하도록 구성된 제1 모듈과;
    제2 모듈, 상기 제2 모듈은 상기 스토리지 드라이브 내의 비휘발성 반도체 메모리와 상기 제2 모듈 사이에서 상기 복수의 데이터 블록들을 전달하도록 구성되며;
    상기 제2 모듈과 상기 비휘발성 반도체 메모리 간의 상기 복수의 데이터 블록들의 전달을 기술하는 제1 디스크립터(descriptor)를 생성하도록 구성된 제3 모듈과;
    상기 제1 디스크립터에 따라, 복수의 제2 디스크립터들을 생성하도록 구성된 제4 모듈 - 상기 복수의 제2 디스크립터들 각각은 상기 복수의 데이터 블록들 중 각각의 데이터 블록에 대응함 - 과;
    상기 복수의 제2 디스크립터들에 근거하여 파라미터 신호를 생성하도록 구성된 제5 모듈과; 그리고
    상기 파라미터 신호에 근거하여 명령어 신호들을 생성하도록 구성된 제6 모듈을 포함하며,
    상기 제2 모듈은 상기 명령어 신호들에 근거하여, 상기 제1 모듈과 상기 비휘발성 반도체 메모리 간에 상기 복수의 데이터 블록들을 전달하도록 구성된 것을 특징으로 하는 스토리지 드라이브.
  2. 제1항에 있어서,
    상기 제4 모듈은:
    템플릿(template)에 액세스하고,
    상기 제1 디스크립터 내의 복수의 파라미터들에 근거하여 상기 템플릿 내의 필드들을 갱신하며, 그리고
    상기 템플릿에 따라 상기 복수의 제2 디스크립터들을 생성하도록 구성된 것을 특징으로 하는 스토리지 드라이브.
  3. 제2항에 있어서,
    상기 제4 모듈은 상기 템플릿의 필드들의 값들을 상기 복수의 파라미터들로 교체하도록 구성된 것을 특징으로 하는 스토리지 드라이브.
  4. 제2항에 있어서,
    상기 복수의 파라미터들은 상기 비휘발성 반도체 메모리를 제어하기 위한 제어 파라미터들을 포함하고, 그리고
    상기 제4 모듈은 상기 제어 파라미터들을 포함하게끔 상기 복수의 제2 디스크립터들 중 일부 디스크립터들을 생성하고 상기 제어 파라미터들을 포함하지 않게끔 상기 복수의 제2 디스크립터들 중 다른 디스크립터들을 생성하도록 구성된 것을 특징으로 하는 스토리지 드라이브.
  5. 제2항에 있어서,
    상기 템플릿은 상기 복수의 제2 디스크립터들에 대한 독립 디스크의 리던던트 어레이(RAID: redundant array of independent disk) 값들을 포함하고,
    상기 제4 모듈은 상기 RAID 값들을 각각 포함하게끔 상기 복수의 제2 디스크립터들을 생성하도록 구성되며, 그리고
    상기 제2 모듈은 상기 RAID 값들에 근거하여, 상기 제1 모듈과 상기 비휘발성 반도체 메모리 간에 상기 복수의 데이터 블록들을 전달하도록 구성된 것을 특징으로 하는 스토리지 드라이브.
  6. 제2항에 있어서,
    상기 템플릿은 상기 복수의 제2 디스크립터들 각각에 대한 채널 값들 및 메모리 디바이스 값들을 포함하며, 그리고
    상기 제2 모듈은 상기 채널 값들 및 상기 메모리 디바이스 값들에 따라 각각의 채널 상에서 상기 비휘발성 반도체 메모리에 그리고 상기 비휘발성 반도체 메모리로부터 데이터의 일부분들을 전달하도록 구성된 것을 특징으로 하는 스토리지 드라이브.
  7. 제1항에 있어서,
    상기 제4 모듈은 상기 제3 모듈에 상기 복수의 제2 디스크립터들의 생성이 완료되는 때를 나타내도록 구성된 것을 특징으로 하는 스토리지 드라이브.
  8. 제7항에 있어서,
    상기 제4 모듈은 상기 복수의 제2 디스크립터들의 생성이 완료됨을 상기 상기 제3 모듈에 나타내기 위한 인터럽트(interrupt)를 생성하도록 구성된 것을 특징으로 하는 스토리지 드라이브.
  9. 제7항에 있어서,
    상기 제3 모듈은 상기 복수의 제2 디스크립터들의 생성이 완료되는지를 결정하기 위해 상기 제4 모듈을 폴링(poll)하도록 구성된 것을 특징으로 하는 스토리지 드라이브.
  10. 제7항에 있어서,
    상기 제4 모듈은 상태 레지스터의 필드들을 갱신하도록 구성되며,
    상기 상태 레지스터의 필드들은 생성되는 디스크립터들의 수 및 상기 복수의 제2 디스크립터들의 위치의 어드레스를 포함하며,
    상기 제3 모듈은 상기 복수의 제2 디스크립터들의 생성이 완료되는지를 결정하기 위해 상기 상태 레지스터에 액세스하도록 구성된 것을 특징으로 하는 스토리지 드라이브.
  11. 제1항에 있어서,
    상태 정보를 저장하도록 구성된 선입선출 레지스터(first-in-first-out register)를 더 포함하며,
    상기 상태 정보는 상기 복수의 제2 디스크립터들 중 하나가 상기 선입선출 레지스터의 사이즈보다 큰지를 나타내는 필드를 포함하는 것을 특징으로 하는 스토리지 드라이브.
  12. 제1항에 있어서,
    상기 제1 디스크립터는 펌웨어 디스크립터이고,
    상기 복수의 제2 디스크립터들은 하드웨어 디스크립터들인 것을 특징으로 하는 스토리지 드라이브.
  13. 제1항에 있어서,
    상기 제3 모듈은 상기 제1 디스크립터를 생성하기 위해 펌웨어를 실행하도록 구성되고, 그리고
    상기 제4 모듈은 전자 회로를 포함하며,
    상기 전자 회로는 상기 제1 디스크립터에 따라 상기 복수의 제2 디스크립터들을 생성하도록 구성된 것을 특징으로 하는 스토리지 드라이브.
  14. 방법으로서,
    제1 모듈에 의해, 호스트 디바이스와 스토리지 드라이브 간의 복수의 데이터 블록들의 전달을 제어하는 단계와;
    제3 모듈에 의해, 상기 스토리지 드라이브 내의 비휘발성 반도체 메모리와 제2 모듈 사이에서 상기 복수의 데이터 블록들을 전달하기 위한 제1 디스크립터를 생성하는 단계와;
    상기 제1 디스크립터에 따라, 제4 모듈에 의해, 복수의 제2 디스크립터들을 생성하는 단계 - 상기 복수의 제2 디스크립터들 각각은 상기 복수의 데이터 블록들 중 각각의 데이터 블록에 대응함 - 와;
    제5 모듈에 의해, 상기 복수의 제2 디스크립터들에 근거하여 파라미터 신호를 생성하는 단계와;
    제6 모듈에 의해, 상기 파라미터 신호에 근거하여 명령어 신호들을 생성하는 단계와; 그리고
    상기 명령어 신호들에 근거하여, 상기 제2 모듈에 의해, 상기 호스트 디바이스와 상기 비휘발성 반도체 메모리 간에 상기 복수의 데이터 블록들을 전달하는 단계를 포함하는 것을 특징으로 하는 방법.
  15. 제14항에 있어서,
    템플릿에 액세스하는 단계와;
    상기 제1 디스크립터 내의 복수의 파라미터에 근거하여 상기 템플릿 내의 필드들을 갱신하는 단계와; 그리고
    상기 템플릿에 따라 상기 복수의 제2 디스크립터들을 생성하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  16. 제15항에 있어서,
    상기 템플릿의 필드들의 값들을 상기 복수의 파라미터들로 교체하는 단계 - 상기 복수의 파라미터들은 상기 비휘발성 반도체 메모리를 제어하기 위한 제어 파라미터들을 포함함 - 와;
    상기 제어 파라미터들을 포함하게끔 상기 복수의 제2 디스크립터들 중 일부 디스크립터들을 생성하는 단계와; 그리고
    상기 제어 파라미터들을 포함하지 않게끔 상기 복수의 제2 디스크립터들 중 다른 디스크립터들을 생성하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  17. 제14항에 있어서,
    상기 복수의 제2 디스크립터들의 생성이 완료되는 때를 나타내는 단계를 더 포함하는 것을 특징으로 하는 방법.
  18. 제14항에 있어서,
    선입선출 레지스터에 상태 정보를 저장하는 단계를 더 포함하며,
    상기 상태 정보는 상기 복수의 제2 디스크립터들 중 하나가 상기 선입선출 레지스터의 사이즈보다 큰지를 나타내는 필드를 포함하는 것을 특징으로 하는 방법.
  19. 제14항에 있어서,
    상기 제1 디스크립터는 펌웨어 디스크립터이고, 그리고
    상기 복수의 제2 디스크립터들은 하드웨어 디스크립터들인 것을 특징으로 하는 방법.
  20. 제14항에 있어서,
    상기 제1 디스크립터를 생성하도록 펌웨어를 실행하는 단계와, 그리고
    전자 회로를 통해, 상기 제1 디스크립터에 따라 상기 복수의 제2 디스크립터들을 생성하는 단계를 더 포함하는 것을 특징으로 하는 방법.
KR1020157019144A 2012-12-19 2013-12-19 스토리지 드라이브의 비휘발성 반도체 메모리에 그리고 상기 비휘발성 반도체 메모리로부터 데이터를 전달하기 위해 디스크립터들을 생성하는 장치 및 방법 KR102217966B1 (ko)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US201261739386P 2012-12-19 2012-12-19
US61/739,386 2012-12-19
US201361900104P 2013-11-05 2013-11-05
US61/900,104 2013-11-05
US14/132,810 US9141538B2 (en) 2010-07-07 2013-12-18 Apparatus and method for generating descriptors to transfer data to and from non-volatile semiconductor memory of a storage drive
US14/132,810 2013-12-18
PCT/US2013/076437 WO2014100362A1 (en) 2012-12-19 2013-12-19 Apparatus and method for generating descriptors to transfer data to and from non-volatile semiconductor memory of a storage drive

Publications (2)

Publication Number Publication Date
KR20150095900A KR20150095900A (ko) 2015-08-21
KR102217966B1 true KR102217966B1 (ko) 2021-02-22

Family

ID=49918916

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157019144A KR102217966B1 (ko) 2012-12-19 2013-12-19 스토리지 드라이브의 비휘발성 반도체 메모리에 그리고 상기 비휘발성 반도체 메모리로부터 데이터를 전달하기 위해 디스크립터들을 생성하는 장치 및 방법

Country Status (4)

Country Link
US (1) US9141538B2 (ko)
KR (1) KR102217966B1 (ko)
CN (1) CN105190524B (ko)
WO (1) WO2014100362A1 (ko)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9141538B2 (en) 2010-07-07 2015-09-22 Marvell World Trade Ltd. Apparatus and method for generating descriptors to transfer data to and from non-volatile semiconductor memory of a storage drive
US8868852B2 (en) 2010-07-07 2014-10-21 Marvell World Trade Ltd. Interface management control systems and methods for non-volatile semiconductor memory
US9135168B2 (en) 2010-07-07 2015-09-15 Marvell World Trade Ltd. Apparatus and method for generating descriptors to reaccess a non-volatile semiconductor memory of a storage drive due to an error
US9423961B2 (en) 2014-09-08 2016-08-23 Apple Inc. Method to enhance programming performance in multilevel NVM devices
US10459660B2 (en) 2014-11-20 2019-10-29 Rambus Inc. Memory systems, modules, and methods for improved capacity
US10467155B2 (en) * 2015-10-26 2019-11-05 Micron Technology, Inc. Command packets for the direct control of non-volatile memory channels within a solid state drive
US10114549B2 (en) * 2016-03-17 2018-10-30 Sandisk Technologies Llc Error correction code processing and data shaping for reducing wear to a memory
US10152237B2 (en) 2016-05-05 2018-12-11 Micron Technology, Inc. Non-deterministic memory protocol
US10534540B2 (en) 2016-06-06 2020-01-14 Micron Technology, Inc. Memory protocol
US11003602B2 (en) 2017-01-24 2021-05-11 Micron Technology, Inc. Memory protocol with command priority
JP7083717B2 (ja) * 2018-07-23 2022-06-13 ルネサスエレクトロニクス株式会社 半導体装置
WO2020118656A1 (zh) * 2018-12-14 2020-06-18 深圳鲲云信息科技有限公司 基于文件传输协议的数据传输方法、装置和电子设备
CN113760793A (zh) * 2020-06-01 2021-12-07 富泰华工业(深圳)有限公司 自动数据传输方法、装置及存储介质
CN116483280B (zh) * 2023-04-26 2023-11-28 珠海妙存科技有限公司 固件存储方法、固件查找方法、设备及介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007510978A (ja) 2003-10-20 2007-04-26 ザ ボード オブ ガバナーズ フォー ハイヤー エデュケーション, ステート オブ ロード アイランド アンド プロヴィデンス プランテーションズ ストレージサーバーのボトムアップキャッシュ構造
JP2009503738A (ja) 2005-08-03 2009-01-29 サンディスク コーポレイション 直接データファイル記憶を用いるフラッシュメモリにおけるデータ操作
WO2012169124A1 (ja) 2011-06-10 2012-12-13 パナソニック株式会社 配置決定装置、配置決定方法、データ構造、メモリ、アクセス装置及びメモリアクセス方法

Family Cites Families (52)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4611278A (en) 1983-04-01 1986-09-09 Honeywell Information Systems Inc. Wraparound buffer for repetitive decimal numeric operations
JP2509297B2 (ja) 1987-08-31 1996-06-19 沖電気工業株式会社 自己訂正機能付半導体記憶装置及びマイクロコンピュ―タ
US5426747A (en) 1991-03-22 1995-06-20 Object Design, Inc. Method and apparatus for virtual memory mapping and transaction management in an object-oriented database system
US5475860A (en) 1992-06-15 1995-12-12 Stratus Computer, Inc. Input/output control system and method for direct memory transfer according to location addresses provided by the source unit and destination addresses provided by the destination unit
JPH09212411A (ja) 1996-02-06 1997-08-15 Tokyo Electron Ltd メモリシステム
US7953931B2 (en) * 1999-08-04 2011-05-31 Super Talent Electronics, Inc. High endurance non-volatile memory devices
US7877542B2 (en) * 2000-01-06 2011-01-25 Super Talent Electronics, Inc. High integration of intelligent non-volatile memory device
JP2001051904A (ja) 1999-08-11 2001-02-23 Hitachi Ltd 不揮発性半導体メモリを用いた外部記憶装置
JP4842417B2 (ja) 1999-12-16 2011-12-21 ソニー株式会社 記録装置
US20080320209A1 (en) * 2000-01-06 2008-12-25 Super Talent Electronics, Inc. High Performance and Endurance Non-volatile Memory Based Storage Systems
ATE376211T1 (de) 2000-02-09 2007-11-15 Texas Instruments Inc Gerät zur signalsynchronisierung zwischen zwei taktbereichen
JP2001331377A (ja) 2000-05-22 2001-11-30 Hitachi Ltd 再生エラーの処理方法及びこれを用いたディスク装置
JP3574078B2 (ja) 2001-03-16 2004-10-06 東京エレクトロンデバイス株式会社 記憶装置と記憶装置制御方法
US7617515B1 (en) 2001-05-24 2009-11-10 Vixs Systems, Inc. Method and apparatus for managing resources in a multimedia system
US7155560B2 (en) 2001-06-27 2006-12-26 Intel Corporation Method and apparatus for storing data in flash memory
US6895408B1 (en) 2002-03-19 2005-05-17 Oracle International Corporation Method and apparatus to facilitate interaction management between loosely coupled applications
AU2003219414A1 (en) * 2002-04-30 2003-11-17 Koninklijke Philips Electronics N.V. Apparatus and method for fetching data from memory
US6795872B2 (en) 2002-05-09 2004-09-21 Renesas Technology America, Inc. Maintaining at least partial functionality of a device as defined by a hardware configuration at a USB bus enumeration while the device memory is programmed
TWI220959B (en) * 2003-06-05 2004-09-11 Carry Computer Eng Co Ltd Storage device with optimized compression management mechanism
US7237141B2 (en) 2003-06-19 2007-06-26 Lsi Corporation Method for recovering data from a redundant storage object
KR100475125B1 (ko) 2003-06-21 2005-03-14 삼성전자주식회사 데이터 버스 폭 변경이 자유로운 이동형 저장 장치 및이에 대한 데이터 버스 폭 설정 방법
KR100546348B1 (ko) 2003-07-23 2006-01-26 삼성전자주식회사 플래시 메모리 시스템 및 그 데이터 저장 방법
KR100608592B1 (ko) * 2004-01-27 2006-08-03 삼성전자주식회사 플래시 메모리의 데이터 관리 장치 및 방법
US7313649B2 (en) 2004-04-28 2007-12-25 Matsushita Electric Industrial Co., Ltd. Flash memory and program verify method for flash memory
US7212440B2 (en) 2004-12-30 2007-05-01 Sandisk Corporation On-chip data grouping and alignment
JP4456490B2 (ja) 2005-01-14 2010-04-28 富士通株式会社 Dma装置
JP4416694B2 (ja) 2005-05-12 2010-02-17 株式会社ソニー・コンピュータエンタテインメント データ転送調停装置およびデータ転送調停方法
US7546392B2 (en) 2005-05-13 2009-06-09 Texas Instruments Incorporated Data transfer with single channel controller controlling plural transfer controllers
US20070011396A1 (en) 2005-06-30 2007-01-11 Utstarcom, Inc. Method and apparatus for bandwidth efficient and bounded latency packet buffering
TW200717527A (en) 2005-08-10 2007-05-01 Seiko Epson Corp Semiconductor memory device
US7954037B2 (en) 2005-10-25 2011-05-31 Sandisk Il Ltd Method for recovering from errors in flash memory
US7600090B2 (en) 2005-11-28 2009-10-06 Atmel Corporation Microcontroller based flash memory digital controller system
JP2007200457A (ja) 2006-01-26 2007-08-09 Renesas Technology Corp 不揮発性半導体記憶装置
JP4863749B2 (ja) 2006-03-29 2012-01-25 株式会社日立製作所 フラッシュメモリを用いた記憶装置、その消去回数平準化方法、及び消去回数平準化プログラム
US8074022B2 (en) 2006-09-28 2011-12-06 Virident Systems, Inc. Programmable heterogeneous memory controllers for main memory with different memory modules
KR20080038991A (ko) * 2006-10-31 2008-05-07 주식회사 하이닉스반도체 메모리 소자의 테스트 장치 및 방법
KR100869675B1 (ko) 2007-02-05 2008-11-21 지인정보기술 주식회사 디스크립터 배열을 이용한 플래시 메모리 제어 시스템 및방법
US7716448B2 (en) * 2007-02-28 2010-05-11 Red Hat, Inc. Page oriented memory management
US20080222365A1 (en) 2007-03-08 2008-09-11 Staktek Group L.P. Managed Memory System
CN100511193C (zh) 2007-03-28 2009-07-08 华为技术有限公司 一种外部存储器控制器时序配置的装置及方法
JP5087347B2 (ja) 2007-09-06 2012-12-05 株式会社日立製作所 半導体記憶装置及び半導体記憶装置の制御方法
US8046542B2 (en) 2007-11-21 2011-10-25 Micron Technology, Inc. Fault-tolerant non-volatile integrated circuit memory
US8190950B2 (en) 2007-12-21 2012-05-29 Atmel Corporation Dynamic column redundancy replacement
US8751755B2 (en) 2007-12-27 2014-06-10 Sandisk Enterprise Ip Llc Mass storage controller volatile memory containing metadata related to flash memory storage
KR101553532B1 (ko) 2008-04-17 2015-09-16 삼성전자주식회사 스토리지 장치
US8195909B2 (en) 2009-10-05 2012-06-05 Seagate Technology Llc Data management in a data storage system
US9135168B2 (en) 2010-07-07 2015-09-15 Marvell World Trade Ltd. Apparatus and method for generating descriptors to reaccess a non-volatile semiconductor memory of a storage drive due to an error
US8868852B2 (en) 2010-07-07 2014-10-21 Marvell World Trade Ltd. Interface management control systems and methods for non-volatile semiconductor memory
US9141538B2 (en) 2010-07-07 2015-09-22 Marvell World Trade Ltd. Apparatus and method for generating descriptors to transfer data to and from non-volatile semiconductor memory of a storage drive
WO2012087971A2 (en) 2010-12-20 2012-06-28 Marvell World Trade Ltd. Descriptor scheduler
TWI446160B (zh) 2011-07-21 2014-07-21 Silicon Motion Inc 快閃記憶體控制器及資料讀取方法
WO2014144043A1 (en) 2013-03-15 2014-09-18 Marvell World Trade Ltd. Apparatus and method for generating descriptors to reaccess a non-volatile semiconductor memory of a storage drive due to an error

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007510978A (ja) 2003-10-20 2007-04-26 ザ ボード オブ ガバナーズ フォー ハイヤー エデュケーション, ステート オブ ロード アイランド アンド プロヴィデンス プランテーションズ ストレージサーバーのボトムアップキャッシュ構造
JP2009503738A (ja) 2005-08-03 2009-01-29 サンディスク コーポレイション 直接データファイル記憶を用いるフラッシュメモリにおけるデータ操作
WO2012169124A1 (ja) 2011-06-10 2012-12-13 パナソニック株式会社 配置決定装置、配置決定方法、データ構造、メモリ、アクセス装置及びメモリアクセス方法

Also Published As

Publication number Publication date
KR20150095900A (ko) 2015-08-21
US20140108714A1 (en) 2014-04-17
CN105190524A (zh) 2015-12-23
US9141538B2 (en) 2015-09-22
WO2014100362A1 (en) 2014-06-26
CN105190524B (zh) 2018-04-10

Similar Documents

Publication Publication Date Title
KR102217966B1 (ko) 스토리지 드라이브의 비휘발성 반도체 메모리에 그리고 상기 비휘발성 반도체 메모리로부터 데이터를 전달하기 위해 디스크립터들을 생성하는 장치 및 방법
US9183141B2 (en) Method and apparatus for parallel transfer of blocks of data between an interface module and a non-volatile semiconductor memory
CN111081308B (zh) 用于混合非易失性存储系统的系统和方法
WO2014144043A1 (en) Apparatus and method for generating descriptors to reaccess a non-volatile semiconductor memory of a storage drive due to an error
US8707134B2 (en) Data storage apparatus and apparatus and method for controlling nonvolatile memories
JP6443794B2 (ja) ホストとコントローラとの間でパーティション化された変換レイヤ
US9135168B2 (en) Apparatus and method for generating descriptors to reaccess a non-volatile semiconductor memory of a storage drive due to an error
US20160062829A1 (en) Semiconductor memory device
KR20150017948A (ko) Ecc 디코더의 동작 방법 및 그것을 포함하는 메모리 컨트롤러
US10048867B2 (en) Method to shorten hash chains in lempel-ziv compression of data with repetitive symbols
US11599465B2 (en) Configurable burst optimization for a parameterizable buffer
US9252810B2 (en) Memory system and method of controlling memory system
KR20210112548A (ko) 메모리 시스템 내 맵 정보를 제어하는 장치 및 방법
KR20150087646A (ko) 불 휘발성 메모리 장치를 포함하는 메모리 시스템 및 그것의 동작 방법
KR20220045343A (ko) 데이터 처리 시스템 내 데이터 전송에서 발생한 에러를 정정하는 장치 및 방법
CN112597078A (zh) 数据处理系统、存储器系统和用于操作存储器系统的方法
JP6342013B2 (ja) 不揮発性メモリ・アレイを含むデータ・ストレージ・システムを動作させるための方法、システム及びコンピュータ・プログラム
KR20210124705A (ko) 메모리 시스템 내 맵 정보를 제어하는 장치 및 방법
KR101332774B1 (ko) 비휘발성 메모리 시스템 및 이의 데이터 전송 제어 방법
KR20220032826A (ko) 메모리 시스템 내 맵 정보를 제어 및 저장하는 장치 및 방법
US20170177260A1 (en) Memory management method, memory control circuit unit and memory storage device
CN109271108B (zh) 一种存储器控制装置及数据存储设备
KR20230036682A (ko) 인터리빙 동작을 지원하는 메모리 장치, 메모리 시스템 및 그의 동작 방법

Legal Events

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