KR20100072263A - 솔리드 스테이트 메모리 제어기를 위한 플렉시블 시퀀서 디자인 아키텍쳐 - Google Patents

솔리드 스테이트 메모리 제어기를 위한 플렉시블 시퀀서 디자인 아키텍쳐 Download PDF

Info

Publication number
KR20100072263A
KR20100072263A KR20107008424A KR20107008424A KR20100072263A KR 20100072263 A KR20100072263 A KR 20100072263A KR 20107008424 A KR20107008424 A KR 20107008424A KR 20107008424 A KR20107008424 A KR 20107008424A KR 20100072263 A KR20100072263 A KR 20100072263A
Authority
KR
South Korea
Prior art keywords
descriptor
firmware
data
sequencer
aux
Prior art date
Application number
KR20107008424A
Other languages
English (en)
Other versions
KR101507975B1 (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 KR20100072263A publication Critical patent/KR20100072263A/ko
Application granted granted Critical
Publication of KR101507975B1 publication Critical patent/KR101507975B1/ko

Links

Images

Classifications

    • 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/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
    • 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/0683Plurality of storage devices
    • G06F3/0688Non-volatile semiconductor memory arrays

Abstract

펌웨어로부터의 간섭을 최소화하면서도 솔리드 스테이트 메모리 디바이스들로 액세스하는데 최대의 병렬성을 허용할 수 있는 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 방법 및 장치가 제공된다. 호스트 시간의 낭비를 줄이기 위해, 다수의 플래시 메모리 디바이스들이 각 채널에 연결될 수 있다. 작업/디스크립터 아키텍쳐는 각 메모리 디바이스가 개별적으로 동작하게 하여 병렬성을 증가시키는데 이용될 수 있다. 펌웨어가 디바이스에 작업을 할당하고자 할 때, 펌웨어는 디스크립터를 발행할 수 있는데, 디스크립터는 타겟 채널, 타겟 디바이스, 동작의 타입 등에 관한 정보를 포함할 수 있다. 펌웨어는 메모리 디바이스로부터의 응답을 기다리지 않고 디스크립터들을 제공할 수 있고, 다수의 작업들이 작업 큐를 형성하기 위해 지속적으로 발행될 수 있다. 펌웨어가 디스크립터들의 프로그래밍을 완료한 후에, 시퀀서는 남아있는 작업을 처리할 수 있고 이에 따라 펌웨어는 다른 작업들에 집중할 수 있다.

Description

솔리드 스테이트 메모리 제어기를 위한 플렉시블 시퀀서 디자인 아키텍쳐{FLEXIBLE SEQUENCER DESIGN ARCHITECTURE FOR SOLID STATE MEMORY CONTROLLER}
본 출원은 "FLEXIBLE SEQUENCER DESIGN ARCHITECTURE FOR SOLID STATE MEMORY CONTROLLER"라는 명칭으로 2007년 9월 19일 출원된 미국 가출원 번호 제60/973,579호(대리인 관리 번호 MP2172PR)를 우선권 주장의 기초출원으로 청구하며, 이 문헌은 그 전체가 참조로써 본 명세서에 통합된다.
본 발명은 솔리드 스테이트 메모리 제어기에 관한 것으로서, 더욱 상세하게는 솔리드 스테이트 메모리 제어기를 위한 시퀀서에 관한 것이다.
솔리드 스테이트 드라이브의 성능 및 용량은 솔리드 스테이트 메모리 디바이스들(예를 들어 플래시 메모리 디바이스들)에 액세스하는 병렬성(parallelism)에 의존한다. 도 1A는 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 현재 이용가능한 시스템이다. 도시된 바와 같이, 플래시 제어기(101)는 일 측에서는 버퍼(103)를 통해 호스트(102)와 통신하고, 다른 측에서는 채널들(CH0 내지 CH7)을 통해 플래시 메모리 디바이스들(D0 내지 D7)과 통신하며, 각 채널은 하나의 메모리 디바이스에 전용된다. 플래시 메모리 디바이스들(D0 내지 D7)은 NAND 또는 NOR 플래시 메모리 디바이스들일 수 있다. 플래시 제어기(101)는 ECC(오류 정정 코드)(Error Correcting Code)부(1011), 포맷터(1012), 플래시 인터페이스(I/F) 제어기(1013) 및 시퀀서(1014)를 포함한다. ECC부(1011)는 ECC부(1011)를 통과하는 데이터 플로우 내의 오류들을 정정할 수 있다. 포맷터(1012)는 플래시 인터페이스 제어기(1013)의 요건에 부합하기 위하여 호스트(102)로부터의 데이터 플로우의 포맷을 변환하고, 호스트(102)의 요건에 부합하기 위하여 플래시 메모리 디바이스로부터의 데이터 플로우의 포맷을 변환할 수 있다. 플래시 인터페이스 제어기(1013)는 플래시 제어기(101)와 플래시 메모리 디바이스들(D0 내지 D7) 사이의 인터페이스가 될 수 있다. 펌웨어(104)는 플래시 제어기(101)로의 제어 신호를 생성할 수 있다. 시퀀서(1014)는 펌웨어(104)로부터 제어 신호들을 수신하고 그에 따라 ECC부(1011), 포맷터(1012) 및 플래시 인터페이스 제어기(1013)를 제어한다.
플래시 메모리 디바이스(D0)로의 기록 동작 동안에, 플래시 제어기(101)는 버퍼(103)를 통해 호스트(102)로부터 데이터를 수신할 수 있다. 플래시 제어기(101)에서, 호스트(102)로부터의 데이터는 ECC부(1011), 포맷터(1012) 및 플래시 인터페이스 제어기(1013)를 통과할 수 있고, 최종적으로 플래시 메모리 디바이스의 내부 버퍼에 송신된다. 그리고 데이터는 내부 버퍼에서 플래시 메모리 디바이스로 이동될 수 있다.
도 1B는 도 1A에 도시된 시스템에서의 기록 동작의 파형을 도시한다. 도시된 바와 같이, 플래시 메모리 디바이스(D0)에서, 데이터는 시간 t0에서 t1까지 플래시 제어기(101)로부터 디바이스(D0)의 내부 버퍼로 전송되고, t1에서 t4까지 내부 버퍼로부터 디바이스(D0)로 이동될 수 있다. 그리고 디바이스(D0)는 기록 동작이 완료되었다는 것을 나타내는 확인(confirmation)을 전송하여 다음 동작 요청이 처리되기 시작할 수 있다. 호스트(102)가 내부 버퍼와 디바이스(D0) 사이의 t1 에서 t4의 트랙잭션에 수반되지 않더라도, 호스트(102)는 t4까지 다음 동작 요청을 처리할 수 없다. t1에서 t4의 시간 주기는 t0에서 t1의 시간 주기보다 훨씬 길기 때문에, 많은 호스트 시간이 낭비된다. 일 예에서, t0에서 t1의 시간 주기와 t1에서 t4의 시간 주기 사이의 비율은 대략 1:4이다.
플래시 메모리(D0)로부터 데이터를 판독하는 동작 동안, 요청된 데이터는 플래시 메모리 디바이스(D0)로부터 그 내부 버퍼로 먼저 이동될 수 있다. 그후 데이터는 플래시 메모리 디바이스(D0)의 내부 버퍼로부터 플래시 제어기(101)에 전송될 수 있다. 플래시 제어기(101)에서, 데이터는 플래시 인터페이스 제어기(1013), 포맷터(1012) 및 ECC부(1011)를 통과할 수 있고, 최종적으로 버퍼(103)를 통해 호스트(102)에 송신될 수 있다.
도 1C는 도 1A에 도시된 시스템에서의 판독 동작의 파형을 나타낸다. 도시된 바와 같이, 데이터는 시간 t0에서 t3까지 플래시 메모리 디바이스(D0)에서 그 내부 버퍼로 이동될 수 있고, t3에서 t4까지 내부 버퍼에서 호스트로 전송될 수 있다. 다시, 호스트(102)가 디바이스(D0)에서 내부 버퍼 사이의 트랜잭션에 관여하지 않기 때문에, 호스트(102)는 t0에서 t3, 또는 t4에서 t7 동안 아무것도 할 수 없다. 결과적으로, 상당한 호스트 시간이 낭비될 수 있다.
그러므로, 호스트 시간을 더욱 효율적으로 사용할 수 있는 솔리드 스테이트 메모리 제어기를 제공하는 것이 바람직할 것이다.
본 발명은 호스트 시간을 더욱 효율적으로 사용할 수 있는 솔리드 스테이트 메모리 제어기를 제공하는 것을 그 기술적 과제로 한다.
본 발명은 솔리드 스테이트 메모리 디바이스들에 액세스함에 있어서 펌웨어로부터의 간섭을 최소화하면서 최대의 병렬성을 허용할 수 있다. 호스트 시간의 낭비를 줄이기 위해, 다양한 플래시 메모리 디바이스들이 각각의 채널에 연결될 수 있다.
각 메모리 디바이스가 개별적으로 동작하게 하여 병렬성을 증가시키는 데 작업/디스크립터 아키텍쳐가 이용될 수 있다. 작업은 판독, 기록 및 소거 동작을 나타내는 데 이용될 수 있다. 펌웨어가 디바이스에 작업을 할당하고자 할 때, 디스크립터를 발행할 수 있는데, 상기 디스크립터는 타겟 채널, 타겟 디바이스, 동작의 타입 등에 관한 정보를 포함할 수 있다. 상기 펌웨어는 메모리 디바이스로부터의 응답을 기다리지 않고 디스크립터들을 제공할 수 있고, 작업 큐를 형성하기 위해 다수의 작업들이 지속적으로 발행될 수 있다. 상기 펌웨어가 디스크립터의 프로그래밍을 완료한 후에, 시퀀서는 남아 있는 작업을 처리할 수 있고, 이에 따라 상기 펌웨어는 다른 작업들에 집중할 수 있다.
상기 시퀀서는 가능한 한 많은 메모리 디바이스들을 병렬로 활용하는데 도움을 줄 수 있고 모든 이용가능한 대역폭을 효율적으로 활용할 수 있다. 상기 시퀀서는 상기 작업 큐의 최상위에 있는 디스크립터의 타겟 채널 및 타겟 디바이스의 이용 가능성을 체크하고, 상기 디스크립터의 상기 타겟 메모리 디바이스가 이용가능하게 되자마자 상기 디스크립터를 발행할 수 있다. 새로운 디스크립터를 발행하기 전에는 이전의 작업을 완료할 필요가 없기 때문에, 상기 타겟 디바이스들이 이용가능한한 다수의 디스크립터들이 병렬로 발행 및 수행될 수 있다. 디스크립터들을 적절하게 배열함으로써(ordering) 병렬성이 최대화될 수 있다.
상기 작업 큐 때문에, 상기 펌웨어는 각 디스크립터의 상태를 추적할 필요가 없다. 그 대신에, 상기 펌웨어는 T-비트의 디스크립터를 설정함으로써 단일 트랙에 다수의 디스크립터들을 삽입할 수 있다. 예를 들어, 상기 펌웨어가 하나의 단일 트랙에 16개의 디스크립터들을 삽입하고자 할 때, T-비트의 16번째 디스크립터가 설정될 수 있다. 상기 시퀀서는 트랙이 완료될 때 즉, 상기 트랙의 상기 디스크립터에서 정의된 모든 작업들이 완료될 때 상기 펌웨어로의 인터럽트 신호를 생성할 수 있다. 상기 펌웨어는 트랙 경계마다 디스크립터들을 프로그램할 수 있고, 또한 상기 트랙 경계에서 완료된 작업들의 상태를 체크할 수 있다. 대역폭을 증가시키기 위해, 타겟 디바이스들이 이용가능한 경우 다수의 트랙들이 병렬로 발행될 수 있다.
트랙 아키텍쳐를 지원하기 위해, 상기 시퀀서는 "트랙 상태 레지스터"에서 각 작업의 상태를 수집할 수 있다. 일단 트랙이 완료되고 인터럽트 신호가 생성되면, 상기 펌웨어는 트랙 내에 어떤 실패된 작업이 있는지 확인하기 위해 "트랙 상태 레지스터"를 체크할 수 있다. 더욱이, 상기 시퀀서는 어떤 디스크립터들이 발행되는지, 어떤 작업이 완료되는지, 어떤 작업이 계류중인지 등의 정보를 제공할 수 있고, 이에 따라 상기 펌웨어는 용이하게 진단할 수 있으며 오류들을 복구할 수 있다.
본 발명은 솔리드 스테이트 메모리 디바이스들에 액세스함에 있어서 펌웨어로부터 간섭을 최소화하면서 최대의 병렬성을 허용할 수 있다.
본 발명의 실시예들이 첨부하는 도면들을 참조하여 본 명세서에서 설명될 것이고, 유사한 참조 번호들은 기능적으로 유사한 요소들을 나타내는데 이용될 것이다.
도 1A는 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하기 위한 현재의 이용가능한 시스템을 나타낸다.
도 1B는 도 1A에 도시된 시스템에서의 기록 동작의 파형을 나타낸다.
도 1C는 도 1A에 도시된 시스템에서의 판독 동작의 파형을 나타낸다.
도 2A는 본 발명의 일 실시예에 따른 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 시스템을 나타낸다.
도 2B는 도 2A에 도시된 시스템에서의 기록 동작들의 파형을 나타낸다.
도 2C는 도 2A에 도시된 시스템에서의 판독 동작들의 파형을 나타낸다.
도 3은 본 발명의 일 실시예에 따른 플래시 제어기의 동작 경계들을 나타낸다.
도 4는 본 발명의 일 실시예에 따른 플래시 디바이스들의 동작들의 파형을 나타낸다.
도 5는 본 발명의 일 실시예에 따른 물리적 디스크립터 선입-선출 버퍼(FIFO)(2016)의 구조를 나타낸다.
도 6은 본 발명의 일 실시예에 따른 물리적 디스크립터 FIFO의 포인터를 나타낸다.
도 7A는 본 발명의 일 실시예에 따른 일반적인 상황에서의 물리적 디스크립터 FIFO 동작의 파형을 나타낸다.
도 7B는 본 발명의 일 실시예에 따른 오류 상황에서의 물리적 디스크립터 FIFO 동작의 파형을 나타낸다.
도 8은 본 발명의 일 실시예에 따른 AUX FIFO(2015)의 구조를 나타낸다.
도 9A, 9B, 9C 및 9D는 시퀀서(2014) 및 ECC(2011) 사이의 인터페이스를 통해 전송된 논리적 블록 어드레스(LBA)를 나타낸다.
도 10A는 시퀀서(2014) 및 플래시 인터페이스 제어기(2013) 사이의 인터페이스에서의 파형을 나타낸다.
도 10B는 본 발명의 일 실시예에 따른 플래시 인터페이스 제어기(2013)로부터의 상태 보고서의 타이밍도를 나타낸다.
도 10C는 본 발명의 일 실시예에 따른 플래시 인터페이스 제어기의 중지 요청의 타이밍도를 나타낸다.
도 11은 본 발명의 일 실시예에 따른 시퀀서 클록 도메인을 나타낸다.
도 12는 본 발명의 일 실시예에 따른 AUX FIFO의 아키텍쳐를 나타낸다.
도 13은 본 발명의 일 실시예에 따른 디스크립터 FIFO 포인터들을 나타낸다.
도 14는 본 발명의 일 실시예에 따른 SEQ_ENABLE 어써션/디어써션이 서브 모듈로의 리셋/중지/인에이블 신호들을 제어할 때의 파형을 나타낸다.
도 15는 SEQ_RESET 비트가 어써트될 때의 파형과 서브 모듈들로의 리셋/중지/인에이블 신호들이 어떻게 영향받는지 나타낸다.
도 16은 본 발명의 일 실시예에 따른 각 논리적 TX 상태 머신의 이행 조건과 동작을 포함하는 논리적 TX 상태 머신의 상세 블록도를 나타낸다.
도 17은 본 발명의 일 실시예에 따른 논리적 RX 상태 머신의 이행 조건을 수신하는 단계를 나타낸다.
도 18은 본 발명의 일 실시예에 따른 각 물리적 TX 상태 머신의 이행 조건과 동작을 포함하는 물리적 TX 상태 머신의 블록도를 나타낸다.
도 19는 본 발명의 일 실시예에 따른 물리적 트랙 추적기를 나타낸다.
도 20은 본 발명의 일 실시예에 따른 물리적 RX 상태 머신을 나타낸다.
도 21은 본 발명의 일 실시예에 따른 시퀀서를 프로그램하기 위한 프로세스를 나타낸다.
도 22는 본 발명의 일 실시예에 따른 시퀀서 중지 동작을 나타낸다.
도 23은 본 발명의 일 실시예에 따른 시퀀서 오류 동작을 나타낸다.
도 24는 본 발명의 일 실시예에 따른 시퀀서 리셋의 시퀀스를 나타낸다.
도 25는 본 발명의 일 실시예에 따른 기록 동작들의 흐름도를 나타낸다.
도 26은 본 발명의 일 실시예에 따른 판독 동작의 흐름도를 나타낸다.
도 27은 본 발명의 일 실시예에 따른 소거 동작의 흐름도를 나타낸다.
1. 솔리드 스테이트 메모리 디바이스들에 액세스하기 위한 시스템
도 2A는 본 발명의 일 실시예에 따른 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하기 위한 시스템을 나타낸다. 도시된 바와 같이, 많은 플래시 메모리 디바이스들이 각 채널에 연결될 수 있다. 일 실시예에서, 4개의 이와 같은 플래시 메모리 디바이스들(D00, D01, D02 및 D03)이 채널(CH0)에 연결된다. 플래시 제어기(201)는 시퀀서(2014), ECC부(2011), 포맷터(FM)(2012) 및 플래시 인터페이스 제어기(FC)(2013)를 포함할 수 있다. 시퀀서(2014)는 일 측에서 펌웨어(FW)(204)와 연결될 수 있고, 다른 측에서 ECC부(2011), 포맷터(2012) 및 플래시 인터페이스 제어기(2013)와 연결될 수 있다.
도 2B는 도 2A에 도시된 시스템에서의 기록 동작들의 파형을 나타낸다. 도시된 바와 같이, 호스트(102)는 t0에서 플래시 메모리 디바이스의 내부 버퍼에 데이터를 전송하기 시작할 수 있다. 데이터가 플래시 메모리 디바이스(D00)의 내부 버퍼로부터 플래시 메모리 디바이스(D00)에 이동되는 t1에서 t2까지, 호스트(102)는 플래시 메모리 디바이스(D01)의 내부 버퍼에 데이터를 전송하기 시작할 수 있다. D00 및 D01에 기록 동작들을 완료하기 전인 t2에서 t3까지, 호스트(102)는 데이터를 플래시 메모리 디바이스(D02)의 내부 버퍼에 전송하기 시작할 수 있다. D00, D01 및 D02에 기록 동작들을 완료하기 전인 t3에서 t4까지, 호스트(102)는 데이터를 플래시 메모리 디바이스(D03)의 내부 버퍼에 전송하기 시작할 수 있다. 그 시점에, 호스트(102)는 플래시 메모리 디바이스(D00)에 두 번째 기록 동작을 시작할 수 있다. 그러므로, t0에서 t4의 하나의 주기 동안에, 호스트(102)는 플래시 메모리 디바이스들(D01, D02 및 D03)로의 기록 동작들을 수행할 수 있고, 호스트 시간의 낭비가 최소화될 수 있다.
도 2C는 도 2A에 도시된 시스템에서의 판독 동작들의 파형을 나타낸다. 플래시 메모리 디바이스들(D00 내지 D04)은 호스트(102)로부터 판독 요청을 수신할 수 있고 t0에서 요청된 데이터를 그들의 내부 버퍼들로 각각 전송하기 시작할 수 있다. 플래시 메모리 디바이스(D00)에서, 요청된 데이터는 t3에서 t4까지 그 내부 버퍼로부터 호스트(102)에 전송될 수 있다. 플래시 메모리 디바이스(D01)에서, 요청된 데이터가 이미 그 내부 버퍼에 전송되었기 때문에, 플래시 메모리 디바이스(D00)의 내부 버퍼로부터 호스트(102)로의 데이터 전송이 완료된 후 즉시 그 내부 퍼버로부터 호스트(102)로의 데이터 전송이 시작될 수 있다. 이와 유사하게, 플래시 메모리 디바이스(D02)의 내부 버퍼로부터의 데이터 전송은 t5에서 시작될 수 있고, 플래시 메모리 디바이스(D03)의 내부 버퍼로부터의 데이터 전송은 t6에서 시작될 수 있다.
2. 플렉시블 시퀀서
도 2A에 도시된 바와 같이, 플렉시블 시퀀서(2014)는 펌웨어(204)와 ECC(RS/BCH)부(2011), 포맷터(2012) 및 플래시 인터페이스 제어기(2013) 사이에 놓이고, 설정 및 상태 레지스터들을 제외한 그들 사이의 모든 통신을 처리한다.
2.1 동작의 경계(operation boundary)
시퀀서는 도 3에 도시된 바와 같이 물리적 도메인과 논리적 도메인의 중간에 위치될 수 있다. 플래시 디바이스들(예를 들어 D00 내지 D03, ... D70 내지 D73)과 그들의 어드레싱 스키마는 물리적 도메인에 근거한다. 반면에 호스트(102)의 어드레싱 스키마는 논리적 도메인에 근거한다. 물리적 도메인과 논리적 도메인이 데이터 경계에 관하여 항상 부합되는(aligned) 것은 아니므로, 각 도메인은 논리적 도메인을 위한 고유의 동작 유닛(AU : Allocation Unit, 할당 유닛)과 물리적 도메인을 위한 물리적 페이지를 포함할 수 있다.
시퀀서(2014)의 주목적은 물리적 도메인과 논리적 도메인에 개별적인 제어를 제공하기 위한 것이며, 따라서 각 도메인은 독립적으로 작업할 수 있다. 일실시예에서, 시퀀서(2014)는 논리적 도메인에 위치된 순환(circular) FIFO(2015) 및 물리적 도메인에 위치된 순환 FIFO(2016)를 포함할 수 있다. 결과적으로, 물리적 도메인 및 논리적 도메인은 그들 고유의 개별적인 FIFO에 의해 독립적으로 제어될 수 있다.
펌웨어(204)는 2개의 FIFO들 모두를 프로그램함으로써 특정 동작을 수행하는 데 이용되는 모든 물리적 및 논리적 정보 또는 파라미터를 제공할 책임이 있을 수 있다. 펌웨어(204)가 두개의 논리적 FIFO(2015) 및 물리적 FIFO(2016)를 채우는 동안, 시퀀서(2014)는 두 FIFO들을 독립적으로 트리거할 수 있고, 그에 따라 논리적 블록들은 AU 경계에서 동작을 시작하고 물리적 블록들은 동시에 물리적 경계에서 동작을 시작할 수 있다.
2.1.1 물리적 경계
디스크립터(descriptor)는 플래시 디바이스(예를 들어 D00 내지 D03, ... D70 내지 D73)에서 하나의 물리적 페이지의 동작을 정의할 수 있다. 디스크립터는 타겟 채널 번호, 타겟 디바이스 번호, 데이터 어드레스, 동작 타입 등과 같은, 플래시 인터페이스 제어기(2013)가 플래시 디바이스에 액세스하기 위한 모든 정보를 포함할 수 있다.
다수의 플래시 디바이스들이 병렬로 이용될 수 있기 때문에, 몇몇 디스크립터들은 하나의 단일 트랙으로 조합될 수 있다. 트랙은 물리적 도메인의 병렬화를 위한 기본 단위이다. 단일 동작에서의 모든 디스크립터들은 동일한 타입의 동작, 예를 들어 PROG(프로그램), READ 및 ERASE에 속할 수 있다. 단일 트랙도 동일한 타입일 수 있다. PROG와 READ는 단일 트랙 내에서 조합될 수 없지만, PROG와 ERASE 또는 READ와 ERASE는 단일 트랙 내에서 조합될 수 있다. 도 2A에서, 8개의 채널들이 존재하고 각 채널이 4개의 디바이스들을 지원하므로, 병렬로 처리될 수 있는 플래시 디바이스들의 최대수는 32이다. 따라서, 하나의 단일 트랙은 최대 32개의 디스크립터들로 구성될 수 있다.
플래시 디바이스는 tR(판독 동작을 완료하는데 걸리는 시간) /tPROG(PROG 동작을 완료하는데 걸리는 시간)과 데이터 전송 시간 사이의 소정 비율을 가질 수 있는데, 이는 다수의 디바이스들이 긴(long) tR/tPROG를 보상하고 성능을 최대화하기 위해 초기화될 수 있음을 의미한다. 예를 들어, 도 4는 tPROG와 데이터 전송 시간의 비율이 대략 4:1인 것을 도시한다. 결과적으로, 데이터를 지연시키지 않고 이동하게 하기 위하여 4개의 플래시 디바이스들이 이용될 수 있다.
플래시 디바이스의 동작을 최적화하기 위하여, 다수의 액티브 트랙들이 지원될 수 있고 이에 따라 도 4에 도시된 바와 같이 이전 트랙의 몇몇 디스크립터들이 여전히 계류중인(pending) 동안 후속하는 트랙이 실행될 수 있다. 펌웨어(204)는 MAX_ACT_TRK(허용된 액티브 트랙들의 최대 수)를 프로그램함으로써 액티브 트랙들의 수를 변경할 수 있다.
2.1.2 논리적 경계
호스트(102)로부터의 사용자 데이터는 ECC 프로세싱에 대한 기본 단위인 AU 경계 상에서 처리될 수 있다. 호스트(102)는 LBA(논리 블록 어드레스)를 이용하여 논리적 도메인에서 데이터를 처리하기 때문에, 각각의 AU는 하나의 대응하는 LBA를 포함할 수 있다. AUX FIFO(2015)를 이용함으로써, 펌웨어(204)는 기록할 때 LBA 데이터를 AU 블록에 부가하거나, LBA 추출로 판독할 때(AUX_D_CMP가 클리어된다) LBA 데이터를 AU 블록으로부터 분리하거나, 또는 LBA 비교로 판독할 때(AUX_D_CMP 가 설정된다) AU 블록으로부터 분리된 것을 LBA와 비교할 수 있다. LBA 뿐만 아니라, 다른 보조(auxiliary) 데이터도 AUX FIFO(2015)를 이용하여 AU 블록과 협력할 수 있다.
펌웨어(204)가 데이터를 플래시 디바이스에 기록할 때, 펌웨어(204)는 ECC 지연을 방지하기 위하여 충분한 AUX 데이터를 AUX FIFO(2015)에 삽입해야 할 수 있다. ECC 프로세싱 동안, ECC(2011)는 AUX FIFO(2015)로부터 AUX 데이터 뿐만 아니라 LBA 데이터를 요청할 수 있고 대응하는 LBA 데이터가 AU 블록에 부가되고 플래시 디바이스에 저장될 수 있다.
펌웨어(204)가 플래시 디바이스로부터 데이터를 판독할 때, AUX FIFO(2015)의 동작은 AUX_D_CMP 레지스터 비트에 따라 상이할 수 있다. AUX_D_CMP가 클리어 상태이면(LBA 추출), AUX FIFO(2015)는 시퀀서(2014)에 의해 AU 블록으로부터 분리된 LBA/AUX 데이터로 채워질 수 있다. ECC(2011)가 AU 블록을 처리할 때마다, 대응하는 LBA 데이터가 시퀀서에 전송되고 AUX FIFO(2015)에 저장될 수 있다. 펌웨어(204)는 AUX FIFO(2015)로부터 LBA 데이터를 판독함으로써 어떤 영역에 AU 블록이 속하는지 결정할 수 있다. 한편, 레지스터 비트(AUX_D_CMP)가 설정될 때(LBA 추출) LBA/AUX 데이터는 AUX FIFO(2015)로부터 검색될(retrieved) 수 있고 ECC(2011)에 전달될 수 있다. 정확한 AU 블록이 처리되었는지를 결정하기 위하여 이 데이터가 AU 블록으로부터 분리된 LBA 정보와 비교될 수 있다.
물리적 도메인에서의 트랙 경계와 유사하게, 논리적 도메인에 블록 경계가 존재할 수 있다. 한 블록의 크기는 32 킬로 바이트(k-byte)이기 때문에, 하나의 완전한 블록은 4 킬로 바이트의 크기를 갖는 AU에 있어서 8개의 AU로 구성된다. 펌웨어(204)는 하나의 전체 블록을 판독하거나(전체 판독) 한 블록의 일부분을 판독할 수 있다(부분 판독).
컬럼 패리티 옵션이 설정되면, ECC(2011)는 블록 경계에서 컬럼 인코딩/디코딩을 수행할 수 있다.
2.2 시퀀서 FIFO의 동작
도 3에 도시된 바와 같이, 시퀀서(2014)는 펌웨어(204)와 ECC(RS/BCH) (2011), 포맷터(2012) 및 플래시 인터페이스 제어기(2013) 사이에 위치될 수 있다. 시퀀서(2014)는 그들 사이의 모든 통신을 처리할 수 있다. 즉, 펌웨어(204)는 디스크립터, AUX 데이터 및 인터럽트를 통해 시퀀서(2014)와만 상호작용을 한다. 플래시 인터페이스 제어기(2013)는 시퀀서 모드, 간접 모드 또는 직접 모드에 있을 수 있다.
플래시 인터페이스 제어기(2013)가 시퀀서 모드로 설정될 때, 시퀀서(2014)는 다음의 명령/동작들(ERASE, PROG 및 READ)을 지원할 수 있다. 간접 모드 및 직접 모드에서는 플래시 인터페이스 제어기(2013)에 의해 지원되는 다른 명령들이 존재한다. 간접 모드에서, 펌웨어는 시퀀서를 이용하지 않고 디바이스에 어떤 명령 바이트들을 발행할 수 있는데, 이는 메모리 디바이스들을 제어하는 데 더 많은 유연성을 제공한다. 직접 모드에서, 펌웨어(204)는 플래시 인터페이스 제어기(2013)에서 필요한 레지스터들(예를 들어, 설정, 트리거 및 상태 체크)을 프로그램해야할 수 있고, 시퀀서(2014)는 관여하지 않는다. 각각의 레지스터 비트가 각각의 플래시 메모리 디바이스 제어 신호에 대응하여, 직접 모드에서 최대의 유연성이 제공된다.
시퀀서 FIFO들은 다음의 기능/책임들을 가질 수 있다.
A. 펌웨어(204)에 물리적 디스크립터 FIFO 및 논리적 AUX FIFO의 제공(2.2.1 절의 "물리적 디스크립터 FIFO" 및 2.2.2 절의 "논리적 AUX FIFO" 참조).
B. 물리적 도메인 및 논리적 도메인 모두에서 FIFO들의 모니터 및 동작들을 트리거하고, 다양한 블록들로부터 상태의 수집 및 펌웨어가 하드웨어 블록들에서 상태 레지스터들을 체크해야할 동안 그에 따른 펌웨어(204)의 인터럽트(2.2.1 절의 "물리적 디스크립터 FIFO" 및 2.2.2 절의 "논리적 AUX FIFO" 참조).
C. 디스크립터들로부터 정보의 추출 및 대응하는 하드웨어 블록들에 전달(2.2.3 절의 "디스크립터 처리" 참조)
2.2.1 물리적 디스크립터 FIFO
물리적 디스크립터 FIFO(2016)는 물리적 도메인에서 주로 플래시 인터페이스 제어기(2013)에 대한 디스크립터 정보를 포함할 수 있다. 2개의 FIFO 포인터들(PHY_WR_PTR 및 PHY_RD_PTR)이 펌웨어(204)에 제공될 수 있고, 이에 따라 펌웨어(204)는 물리적 디스크립터 FIFO(2016)에/로부터 데이터를 기록 및 판독할 수 있다. 물리적 디스크립터 FIFO(2016)로부터 디스크립터들을 디스패치하고(dispatch) 디스크립터들을 플래시 인터페이스 제어기(2013)에 송신하기 위하여 시퀀서(2014)에 다른 포인터(PHY_EXE_PTR)가 제공될 수 있다. 포인터(PHY_LTRK_PTR)는 최종 완료된 트랙의 첫번째 디스크립터를 가리킬 수 있고 오류 처리에 이용될 수 있다.
도 5는 32개의 가용한 디스크립터들과 각 디스크립터에 대해 5개의 파라미터를 갖는 물리적 디스크립터 FIFO(2016)의 구조를 도시한다. 각각의 단일 트랙이 16개의 디스크립터들을 갖는다고 가정하면, 이 물리적 디스크립터 FIFO(2016)는 동시에 최대 2개의 액티브 트랙들을 지원할 수 있다. 단일 트랙의 크기가 16개의 디스크립터들보다 작다면, 물리적 디스크립터 FIFO(2016)에 존재할 수 있는 트랙들의 수가 증가할 수 있다.
펌웨어(204) 및 시퀀서(2014)는 모두 물리적 디스크립터 FIFO(2016)에 액세스할 수 있다. (시퀀서(204)가 동작할 동안에 펌웨어(204)가 새로운 디스크립터들을 프로그램하는) 온-더-플라이 디스크립터 프로그래밍을 지원하기 위하여, 2-포트 SRAM(SR2)이 이용될 수 있고, 하나의 포트는 펌웨어(204)에 의해 액세스 될 수 있으며, 다른 포트는 시퀀서(2014)에 의해 액세스될 수 있다.
물리적 디스크립터 FIFO들(2016)은 RAB(레지스터 액세스 버스) 공간에 맵핑될 수 있고, 판독 및 기록 동작들을 위해 물리적 디스크립터 FIFO(2016)에 액세스하기 위해 몇몇 레지스터들이 펌웨어(204)에 제공될 수 있다. 물리적 디스크립터 FIFO(2016)로부터 판독하기 위해, 펌웨어(204)는 PHY_RD_PTR을 프로그램할 수 있고 RHY_RD_DATA로부터 FIFO 데이터를 판독할 수 있다. 이와 유사하게, 펌웨어(2014)는 파라미터들을 PHY_WR_DATA에 기록할 수 있고, 이에 따라 물리적 디스크립터 FIFO(2016)에 디스크립터들을 기록할 수 있다. 도 6에 도시된 바와 같이, 모든 포인터는 증가하는 방식으로 이동할 수 있고, 순환 동작을 지원하기 위해 포인터가 물리적 디스크립터 FIFO(2016)의 맨 아래에 도달하면 위치 0으로 이동할 수 있다.
2.2.1.2 물리적 디스크립터 FIFO의 정의
하나의 디스크립터는 5개의 서브 파라미터들로 구성될 수 있기 때문에, 디스크립터는 모든 파라미터들이 물리적 디스크립터 FIFO(2016)에 기록될 때까지 사용불가능한(invalid) 것으로 추정될 수 있다. 펌웨어(204)와 시퀀서(2014) 사이의 잠금 메커니즘(locking mechanism)이 포인터들과 카운터들에 의해 제공될 수 있고, 포인터들 및 카운터들은 최종 파라미터가 기록될 때까지 증가되지 않을 수 있다. 아래의 표 1은 디스크립터 내의 부분 파라미터들과 그들의 정의를 열거한다. 펌웨어(204)는 다음의 순서로 PHY_WR_DATA에 기록함으로써 물리적 디스크립터 FIFO (2016)에 디스크립터들을 기록할 수 있다.
1. FC_XF_COUNT[15:0]
2. FC_START_COL_ADDR[15:0]
3. FC_START_ROW_ADDR[15:0]
4. {FC_CH_NUM[3:0], FC_DES_TYPE[3:0], FC_START_ROW_ADDR[23:16]}
5. {FC_DEV_NUM[7:0], 7'b0, TRACK}
파라미터 비트 설명 ERASE PROG READ
FC_XF_COUNT 16 플래시 제어기 전송 카운트

READ 모드: 판독될 바이트들(또는 NAND 플래시의 셀들)의 수

WRITE 모드: 기록될 바이트들(또는 NAND 플래시의 셀들)의 수

ERASE 모드: 소거될 블록들의 수
Y Y Y
FC_START_COL_ADDR 16 플래시 제어기 시작 컬럼 어드레스

물리적 시작 컬럼 어드레스를 지정.

로우 및 컬럼 어드레스가 지원되지 않는 경우에, {row_addr, column_addr}이 보통의(plain) 어드레스로 취급된다.
Y Y Y
FC_START_ROW_ADDR 16 플래시 제어기 시작 로우 어드레스
물리적 시작 로우 어드레스를 지정.
Y Y Y
FC_CH_NUM 4 플래시 제어기 채널 번호
액세스될 채널을 지정.
Y Y Y
FC_DES_TYPE 4 플래시 제어기 작업 타입
0000: READ
0001: PROG
0010: ERASE
다른 타입들: 예약됨
Y Y Y
FC_DEV_NUM 8 플래시 제어기 디바이스 번호
액세스될 디바이스를 지정
(채널마다 다양한 디바이스들임에 주목)
Y Y Y
TRACK 1 트랙 표시자
현재 트랙의 최종 디스크립터임을 표시
Y Y Y
표 1 물리적 디스크립터 포맷
카운터들(PHY_FIFO_CNT 및 PHY_DES_CNT)은 펌웨어(204)가 하나의 디스크립터의 기록을 완료하면 자동으로 1만큼 증가될 수 있다. 펌웨어(204)가 디스크립터의 하나의 파라미터를 기록하면, 포인터(PHY_WR_PTR)는 1만큼 증가되고 다음 엔트리를 위해 준비될 수 있고, 펌웨어(204)는 후속 파라미터들의 삽입을 계속하기 위하여 PHY_WR_DATA에 계속하여 기록할 수 있다. 포인터(PHY_WR_PTR)는 펌웨어(204)가 하나의 디스크립터의 기록을 완료하면 하나의 디스크립터가 5개의 파라미터들로 구성되기 때문에 5만큼 증가될 수 있다.
카운터(PHY_FIFO_CNT)는 완료된 디스크립터들과 계류중인 디스크립터들을 포함하여 디스크립터 FIFO(2016) 내에 얼마나 많은 디스크립터들이 존재하는지 표시할 수 있다. 디스크립터 FIFO(2016)는 펌웨어가 완료된 디스크립터들을 클리어하고 FIFO 공간들을 해제하지(release) 않으면 최종적으로 채워질 것이다. 디스크립터 FIFO(2016)가 가득 차면, 펌웨어(204)에 의해 기록되는 새로운 디스크립터는 무시되고 마스크 가능한(maskable) DES_FIFO_OVERFLOW 인터럽트가 생성될 수 있다. 펌웨어(204)는 디스크립터들을 소거하고 FIFO 공간들을 해제함으로써 디스크립터 FIFO(2016)를 유지할 수 있다. 하나의 트랙이 완료되고 인터럽트가 생성된 후, 펌웨어(204)는 최종 트랙에서 얼마나 많은 디스크립터들이 완료되었는지 확인하기 위하여 PHY_FIFO_CNT_CTRL을 판독하고, 그 후 FIFO 공간들을 해제하기 위하여 2의 보수 값을 PHY_FIFO_CNT_CTRL에 기록할 수 있다. 카운터(PHY_FIFO_CNT)는 동일한 수만큼 감소될 수 있다.
카운터(PHY_DES_CNT)는 실행될 디스크립터 FIFO(2016)에서 대기중인 디스크립터들의 수를 나타낸다. 카운터(PHY_DES_CNT)는 펌웨어(204)가 새로운 디스크립터를 기록할 때 증가될 수 있고(예를 들어 1만큼 증가됨), 시퀀서(2014)가 하나의 디스크립터를 실행할 때 감소될 수 있다(예를 들어 1만큼 감소됨). 시퀀서(2014)는 카운터(PHY_DES_CNT)가 0이 아니면 다음 디스크립터의 실행을 시작할 수 있고, 카운터(PHY_DES_CNT)가 0이면 지연시킬 수 있으며; 새로운 디스크립터들을 삽입함으로써 PHY_DES_CNT가 0이 아닌 수가 되면 동작을 재개할 수 있다.
시퀀서(2014)가 카운터(PHY_DES_CNT)를 모니터함으로써 디스크립터 FIFO(2016) 내에 디스크립터들이 존재한다는 것을 검출하면, 시퀀서(2014)는 모든 파라미터들이 플래시 인터페이스 제어기(2013)에 송신될 준비가 될 때까지 PHY_EXE_PTR 위치의 파라미터들을 하나씩 디스패치하기 시작할 수 있다. PHY_EXE_PTR은 시퀀서(2014)가 파라미터들을 디스패치하는 동안 1만큼 증가될 수 있다.
펌웨어(204)는 PHY_RD_PTR에 의해 지시되는 PHY_RD_DATA로부터 데이터를 판독함으로써 디스크립터 FIFO(2016)의 콘텐츠를 조사할 수 있다. PHY_RD_PTR은 펌웨어(204)가 디스크립터 FIFO(2016)로부터 하나의 파라미터를 판독하면 1만큼 증가될 수 있다.
2.2.1.3 디스크립터 FIFO의 동작
도 7A는 본 발명의 일 실시예에 따른 일반적인 상황에서의 디스크립터 FIFO 동작의 파형을 나타내고, 도 7B는 본 발명의 일 실시예에 따른 오류 상황에서의 디스크립터 FIFO 동작의 파형을 나타낸다.
일단 SEQ_ENABLE이 설정되면, 시퀀서(2014)는 디스크립터들이 프로그램되는 것과 동일한 순서로 디스크립터들을 실행할 수 있다(첫번째 디스크립터는 PHY_EXE_PTR에 의해 지시된다). 시퀀서(2014)는 FC_RDY가 설정되면 카운터(PHY_DES_CNT)가 0에 도달하거나 액티브 트랙의 수(또는 펌웨어(204)에 의해 MAX_ACT_TRK에서 설정된 수)가 2에 도달할 때까지 디스크립터들을 플래시 인터페이스 제어기(2013)에 계속하여 송신할 수 있다.
상태 보고를 위해, TRACK_DONE 및 TRACK_ERR은 인터럽트로서 설정된다. 일단 트랙이 플래시 인터페이스 제어기(2013)에서 완료되고, TRACK_DONE 인터럽트가 검출될 수 있으면, 시퀀서(2014)는 대응하는 상태 레지스터(TRK_STAT)로 인터럽트를 생성하고 PHY_LTRK_PTR은 완료된 트랙의 첫번째 디스크립터로 이동된다. TRK_STAT는 트랙내의 모든 디스크립터들이 디폴트(default)로 실패되는 것을 추정하는 'FFFF'로 초기화되고, FC_DES_DONE 신호에 의해 갱신될 수 있다.
필요하면, 펌웨어(204)는 PHY_RD_PTR을 PHY_LTRK_PTR의 위치에 설정하고 PHY_RD_DATA로부터 데이터를 판독함으로써 완료된 트랙에서 디스크립터들을 검색할(look up) 수 있다.
펌웨어(204)는 SEQ_ENABLE을 재설정함으로써 언제라도 시퀀서(2014)의 동작을 중단시킬 수 있다. ECC(2011) 및 펌웨어(204)는 사용할 수 없게 될 수 있고, 플래시 인터페이스 제어기(2013)에서 계류중인 어떤 작업도 중단시키기 위해 플래시 인터페이스 제어기(2013)에 신호가 송신될 수 있다.
2.2.2 논리적 AUX FIFO
더욱 유연성 있는 데이터 구조를 제공하기 위해, AU의 크기는 플래시 디바이스의 물리적 페이지의 크기와 다르게 정의될 수 있다. 즉, 논리적 도메인은 물리적 도메인에 꼭 부합되는 것은 아니며, LBA 와 물리적 블록 어드레스(PBA) 간의 맵핑은 1:1 대응이 아니다. 결과적으로, 논리적 AUX FIFO(2015)는 비-정렬(non-aligned) 데이터 전송을 수행하기 위해 AUX 데이터뿐만 아니라 LBA 데이터도 저장할 필요가 있을 수 있다.
2.2.2.1 AUX FIFO의 구조
도 8은 본 발명의 일 실시예에 따른 AUX FIFO(2015)의 구조를 나타낸다. AUX_D_MODE는 2 또는 3으로 설정될 수 있고 하나의 AUX 데이터는 2개의 FIFO 엔트리들로 구성될 수 있다. AUX_D_MODE가 1로 설정되면, 각 AUX 데이터는 하나의 FIFO 엔트리로 구성될 수 있다.
펌웨어(204) 및 시퀀서(2014)가 모두 AUX FIFO(2015)를 액세스할 수 있기 때문에, AUX FIFO(2015)는 디스크립터 FIFO(2016)에서와 같이 온-더-플라이 프로그래밍을 지원하기 위해 2-포트 SRAM(SR2)을 이용할 수 있다. 이에 따라 펌웨어(204)가 하나의 포트를 통해 액세스할 수 있고, 시퀀서(2014)가 다른 포트를 통해 동시에 액세스할 수 있다.
3개의 포인터들(펌웨어 판독/기록을 위한 CPU_PTR, ECC 판독/기록을 위한 ECC_PTR 및 디버깅을 위한 AUX_DBG_PTR)이 존재한다. 포인터들은 숨겨질 수 있고 펌웨어(204)는 포인터(AUX_DBG_PTR)를 제외하고 상기 포인터들에 액세스할 수 없다. 포인터들은 펌웨어가 각 포인터에 대응하는 데이터를 액세스할 때마다 1만큼 증가될 수 있고, 도 6에 도시된 바와 같이 순환 FIFO 스키마를 지원하기 위해 AUX FIFO(2015)의 맨 아래 도달하면 위치 0으로 이동될 수 있다.
AUX FIFO(2015)는 레지스터 액세스 버스(RAB) 공간에 맵핑될 수도 있는데, 이에 따라 펌웨어는 레지스터들을 프로그램하고 판독함으로써 FIFO 데이터를 기록 및 판독할 수 있다. 펌웨어(204)는 데이터를 AUX_WDATA에 기록함으로써 AUX 데이터를 AUX FIFO(2015)에 기록할 수 있고, AUX_RDATA를 판독함으로써 AUX 데이터를 판독할 수 있다. 디버깅을 위해, 펌웨어는 포인터(AUX_DBG_PTR)를 바람직한 위치에 이동시킬 수 있고 AUX_DBG_DATA를 판독함으로써 AUX 데이터를 AUX FIFO(2015)로부터 판독할 수 있다.
2.2.2.2 AUX FIFO의 정의
AUX 데이터의 단일 부분의 정의는 AUX_D_MODE 레지스터의 설정에 따라 달라질 수 있다. AUX_D_MODE 레지스터가 1로 설정되면, 하나의 AUX 데이터가 하나의 FIFO 엔트리에 대응할 수 있다. 한편, AUX_D_MODE 레지스터가 2 또는 3으로 설정되면, AUX 데이터의 일 부분이 2개의 FIFO 엔트리들로 구성될 수 있다. 따라서, AUX 데이터는 MSB(가장 중요한 비트)와 LSB(가장 중요하지 않은 비트)가 모두 FIFO에 기록될 때까지 사용불가능한 것으로 추정될 수 있다.
AUX 데이터의 일 부분이 AUX FIFO(2015)에 기록될 때 1만큼 증가될 수 있고 AUX 데이터가 AUX FIFO(2015)로부터 판독될 때 1만큼 감소될 수 있는 잠금 메커니즘을 제공하는 내부 카운터가 존재할 수 있다. 이와 유사하게, 내부 카운터는 AUX FIFO(2015)의 오버플로우 또는 언더플로우를 감지하고 펌웨어(204)에 대한 마스크 가능한 AUX_FIFO_OVERFLOW 및 AUX_FIFO_UNDERFLOW 인터럽트들을 생성할 수 있다. 펌웨어(204)는 오버플로우 또는 언더플로우가 발생하면 AUX FIFO(2015)를 클리어하고 FIFO 콘텐츠들을 복구할 수 있다.
레지스터들(AUX_WDATA 및 AUX_RDATA)은 AUX FIFO(2015)로의 액세스를 제공할 수 있다. 펌웨어가 AUX FIFO(2015)에 데이터를 기록할 때, AUX_WDATA 레지스터에 기록된 LBA 데이터는 포인터(CPU_PTR)에 의해 지시되는 AUX FIFO(2015)의 위치에 저장될 수 있다. 포인터(CPU_PTR)는 펌웨어(204)가 하나의 LBA 데이터를 기록하면 증가될 수 있고(예를 들어 1만큼 증가됨), 그러므로 AUX FIFO(2015)는 다음 LBA 데이터를 받아들일 준비가 되어 있을 수 있다. 시퀀서(2014)는 ECC 모듈에 전용으로 사용되는 포인터(ECC_PTR)를 이용하여 AUX FIFO(2015)로부터 LBA 데이터를 검색할 수 있다. 한편, 펌웨어(204)가 AUX FIFO(2015)로부터 데이터를 판독할 때, AU로부터 분리된 LBA 데이터는 AUX FIFO(2015) 내에 ECC_PTR에 의해 지시되는 위치에서 저장될 수 있다. 펌웨어(204)는 AUX_RDATA를 판독함으로써 LBA 데이터를 판독할 수 있다. 포인터(CPU_PTR)는 펌웨어가 AUX_RDATA로부터 데이터를 판독할 때 증가할 수 있다(예를 들어 1만큼 증가).
펌웨어는 포인터(AUX_DBG_PTR)를 설정하고 AUX_DBG_DATA로부터 데이터를 판독함으로써 AUX FIFO(2015)의 콘텐츠를 조사할 수 있다. 포인터(AUX_DBG_PTR)는 AUX_DBG_DATA가 판독될 때 증가될 수 있다(예를 들어 1만큼 증가됨).
2.2.2.3 AUX FIFO의 동작
AUX FIFO(2015)의 목적은 READ 또는 PROG 동작 동안에 ECC(2011)와 함께 LBA 데이터 및 AUX 데이터의 트랜잭션을 지원하는 것이다. PROG 동작 동안에 새로운 AU가 인코딩되면 ECC(2011)는 LBA 데이터(또는 AUX 데이터)를 요청할 수 있다. 시퀀서(2014)는 AUX FIFO(2015)로부터 LBA 데이터를 디스패치하고 ECC(2011)에 LBA 데이터를 송신함으로써 ECC 요청을 받아들일 수 있다. READ 동작 동안 데이터가 처리되면, ECC(2011)는 각 AU로부터 LBA 데이터를 분리하고, 데이터를 (LBA 추출 모드에서) 시퀀서(2014)에 송신하거나 LBA 데이터를 (LBA 비교 모드에서) 제공된 LBA 데이터와 비교할 수 있다. LBA 추출 모드에서, 시퀀서(2014)는 LBA 데이터를 AUX FIFO(2015) 내에 저장할 수 있고, 이에 따라 펌웨어(204)는 그 LBA 데이터를 검색하고 특정 AU가 어떤 LBA 영역에 속하는지 결정할 수 있다.
LBA 비교를 하는 READ 동작 동안에 AUX FIFO(2015)로부터의 LBA 데이터와 AU 데이터로부터 추출된 LBA 데이터 사이에 불일치(mismatch)가 감지되면, EC_FAIL 인터럽트가 시퀀서(2014)에 의해 생성될 수 있다. 펌웨어(204)는 어떤 오류가 발생했는지 결정하기 위해 ECC(2011)의 상태 레지스터를 검색할 수 있다.
도 9A, 9B, 9C 및 9D는 시퀀서(2014) 및 ECC(2011) 사이의 인터페이스를 통해 전송되는 LBA 데이터를 나타낸다.
펌웨어(204)는 AUX FIFO 데이터를 유지해야할 책임이 있다. LBA 비교를 하는 PROG 동작 또는 READ 동작에서, 펌웨어(204)는 소정 AUX FIFO 공간들을 초과하지 않도록 유의하면서, 요구되는 모든 LBA 데이터를 앞서 준비할 수도 있다. ECC(2011)는 대응하는 LBA 데이터가 AUX FIFO(2015)에서 준비되지 않는한 AU 인코딩을 진행하지 않을 수 있다.
이와 유사하게, LBA 추출을 하는 READ 동작에서, 펌웨어(204)는 AUX FIFO(2015)로부터 LBA 데이터를 동시에(in time) 판독할 수 있고, 그에 따라 포인터(CPU_PTR)는 포인터(ECC_PTR)를 계속하여 뒤따른다. 펌웨어가 LBA 데이터를 동시에 판독하는데 실패하면, AUX FIFO(2015)는 오버플로우될 수 있고 AUX_FIFO_OVERFLOW 인터럽트가 생성될 수 있다.
2.2.3 디스크립터의 처리
펌웨어(204), ECC(2011) 및 플래시 인터페이스 제어기(2013)가 상이한 기능들을 수행하기 때문에, 디스크립터들에 제공된 모든 정보들이 모든 블록들과 관련된 것은 아니다. 시퀀서(2014)는 관련된 정보를 추출하고 대응하는 블록들에 전달하게 될 수 있다. 표 2는 시퀀서로부터 다양한 블록들로의 파싱 정보를 나타낸다.
정보(Info) 펌웨어(FM) ECC 플래시 인터페이스 제어기(FC)
FC_XF_COUNT × ×
FC_START_C_COL_ADDR × ×
FC_START_ROW_ADDR × ×
FC_DES_TYPE × ×
FC_CH_NUM × ×
FC_DEV_NUM × ×
표 2
2.3 시퀀서 사이의 인터페이스/프로토콜
2.3.1 시퀀서와 펌웨어 사이의 인터페이스
시퀀서(2014)와 펌웨어(204) 사이의 인터페이스는 시퀀서 레지스터들에서 지정된 프로그램 가능한 설정 레지스터와 상태 레지스터의 세트에 의해 가장 잘 설명될 수 있다. 시퀀서 FIFO의 동작은 2.2절에서 기술되고 시퀀서(2014)와 펌웨어(204) 사이의 통신은 2.5.1절에서 기술될 것이다.
2.3.2 시퀀서와 펌웨어(FM) 사이의 인터페이스
시퀀서(2014)와 펌웨어(204) 사이의 인터페이스/프로토콜이 표3에 도시된다.
신호 방향
I:시퀀서로 입력
O:시퀀서로부터 출력
클록
도메인
설명
XQ_SEQ_SRESET_N O ecc_clk 펌웨어 소프트 리셋1
ecc_clk 도메인에서 펌웨어 로직에 대한 액티브-로우 리셋(펌웨어를 초기 상태로 돌리는데 이용됨).
이 소프트 리셋 신호는 ECC와 공유된다.
FM_FC_SRESET_N O fc_clk 펌웨어 소프트 리셋2
fc_clk 도메인에서 펌웨어 로직에 대한 액티브-로우 리셋(펌웨어를 초기 상태로 돌리는데 이용됨).
FM_ENABLE O ecc_clk 펌웨어 인에이블
이 신호가 설정되면, 펌웨어 로직을 가능하게 하는 것을 나타낸다(전력을 절약하기 위하여 펌웨어 블록에 대한 클록 게이팅으로써 이용됨).
표 3
주: I: 시퀀서로의 입력, O: 시퀀서로부터의 출력
2.3.3 시퀀서와 ECC 사이의 인터페이스
ECC는 AUX FIFO(2015)와 직접적으로 통신하지 않을 수 있고, 그 대신에 시퀀서(2014)는 표 4에 설명된 인터페이스를 통해 AUX FIFO(2015)로부터 판독하고 AUX 데이터를 ECC에 파싱할 수 있다.
신호 방향
I: 시퀀서로의 입력
O: 시퀀서로부터의 출력
설명
XO_SEQ_SRESET_N O ECC 소프트 리셋
리셋/중지 스키마에 도시된 바와 같이 ECC 로직(ECC를 초기상태로 돌리는데 이용됨)에 대한 액티브-로우 리셋. 이 소프트 리셋 신호는 펌웨어와 공유된다.
XO_EC_ENABLE O ECC 인에이블
이 신호가 설정되면 ECC 로직을 가능하게 하는 것을 나타낸다(전력을 절약하기 위해 ECC 블록에 대한 클록 게이팅으로써 이용됨).
XO_START_AU O ECC 블록 시작
1T 신호는 ECC 블록의 시작을 나타낸다(PROG 동작의 ECC 인터페이스 참조)
XO_LAST_AU O 마지막 AU
XO_START_AU가 현재 동작의 마지막 AU에 대한 것임을 나타낸다.
XO_DEC0_ENC1 O ECC 판독/기록 방향
0: READ
1: PROG
XO_EC_ENABLE이 설정되는 동안 값이 고정된다.
XI_AU_RCV_DONE I ECC AU 수신 완료
1T 신호는 AU가 기록할 때 호스트로부터 그리고 판독할 때 FC로부터 수신되는 것임을 나타낸다.
XI_AU_DONE I AU 수정 완료
1T 신호는 ECC 로우 디코딩(또는 필요하면, 컬럼 디코딩)을 완료한 후에 생성되는 AU 수정이 완료되는 것임을 나타낸다.
시퀀서는 오류가 없는 경우에 이 신호가 설정되면 AU_LOOP_CNT를 감소시킨다.
XI_DEC_FAIL I AU 수정 실패
1T 신호는 ECC 로우 디코딩(필요하면 컬럼 디코딩)을 완료한 후에 생성되는 AU 수정이 실패되고 수정할 수 없음을 나타낸다.
XI_EC_LBA_DATA[31:0] I ECC LBA 데이터
LBA 추출을 하는 판독 동작 동안에 ECC에 의해 AU로부터 인출되고 시퀀서에 전송되는 32-비트 LBA 데이터.
XO_SEQ_LBA_DATA[31:0] O 시퀀서 LBA 데이터
LBA 비교를 하는 기록 모드 또는 판독 모드 동안에 AUX_FIFO로부터 분리되고 ECC에 전송되는 32-비트 LBA 데이터
XO_AUX_D_CMP 0 보조 데이터 비교
판독 동작 동안에 LBA 비교와 LBA 추출 사이의 모드를 결정한다. 이 신호는 AUX_D_CMP에 의해 제어된다.
0: ECC는 추출된 AUX 데이터를 시퀀서의 AUX FIFO에 기록한다.
1: ECC는 AUX 데이터를 시퀀서의 AUX FIFO로부터 판독하고 상기 AUX 데이터를 디코딩된 AU로부터 추출된 AUX 데이터와 비교하고, 불일치가 검출되면 실패를 선언한다.
SO_AUX_D_MODE 0 보조 데이터 모드
데이터를 인코더에 송신하기 전에 얼마나 많은 보조 데이터를 AU의 끝에 부가할(pad) 것인지 선택한다. 이 신호는 AUX_D_MODE에 의해 제어된다.
0: 보조 데이터 없음
1: 2바이트의 보조 데이터
2: 3바이트의 보조 데이터
3: 4바이트의 보조 데이터
표 4
주: I: 시퀀서로의 입력, O: 시퀀서로부터의 출력
도 9A는 4개의 AU가 처리되고 플래시 디바이스들에 기록되는 PROG 동작의 타이밍도를 나타낸다. XO_DEC0_ENC1은 XO_EC_ENABLE을 설정하여 ECC(2011)가 가능하게 되기 전에 어써트(assert)될 수 있다. XO_SEQ_LBA_DATA[31:0] 및 XO_LAST_AU는 XO_START_AU가 어써트되면 사용가능해야 한다. AU들은 순차적으로 처리되기 때문, XO_START_AU는 이전 XO_START_AU의 XI_AU_RCV_DONE이 ECC(2011)로부터 수신될 때까지 생성되지 않을 수 있다.
도 9B는 LBA 비교를 하는 READ 동작의 파형을 나타낸다. LBA 데이터는 AU로부터 분리된 LBA 데이터와 비교되기 위하여 AUX FIFO(2015)로부터 인출되고 ECC(2011)에 송신되기 때문에 READ 동작의 파형은 PROG 동작의 파형과 유사하다. XO_DEC0_ENC1과 XO_AUX_D_CMP는 모두 XO_EC_ENABLE을 설정함으로써 ECC가 가능하게 되기 전에 어써트된다.
이와는 반대로, 도 9C에 도시된 LBA 추출을 하는 READ 동작은 위의 두 가지 경우와 다를 수 있다. 이 경우에, LBA(또는 AUX) 데이터는 ECC(2011)에 의해 AU로부터 추출될 수 있고, XI_AU_DONE을 따라 시퀀서(2014)에 전달될 수 있다. XI_AU_DONE이 설정될 때 XI_EC_LBA_DATA[31:0]가 사용가능해야 하며, 이에 따라 시퀀서(2014)는 데이터를 래치할 수 있다. LBA 비교를 하는 READ 동작에서와 같이, XO_DEC0_ENC1과 XO_AUX_D_CMP는 모두 ECC(2011)가 가능하게 되기 전에 어써트될 수 있다.
도 9D는 디코딩이 실패하고 ECC(2011)가 신호를 생성할 때의 파형을 나타낸다. XI_AU_DONE과 XI_DEC_FAIL이 상호 배타적이기 때문에, XI_DEC_FAIL이 발생하면 XI_AU_DONE은 생성되지 않는다. 펌웨어(204)가 EC_FAIL 인터럽트를 감지하자마자, SEQ_ENABLE은 시퀀서(2014), ECC(2011), 포맷터(2012) 및 플래시 인터페이스 제어기(2013)에서 어느 계류중인 동작도 중지/불가능하게 하기 위하여 어써트되지 않아야 한다. SEQ_ENABLE은 자동으로 턴오프되지 않을 수 있다. 펌웨어(204)는 2.5.3절에서 설명되는 오류 처리를 진행할 수 있다.
2.3.4 시퀀서와 플래시 인터페이스 제어기 사이의 인터페이스
플래시 인터페이스 제어기(2013)는 디스크립터 FIFO(2016)와 직접적으로 통신하지 않는다. 그 대신에, 시퀀서(2014)는 디스크립터 FIFO(2016)로부터 판독하고 표 5에서 설명되는 인터페이스를 통해 모든 필요한 정보를 플래시 인터페이스 제어기(2013)에 파싱한다.
신호 방향
I: 시퀀서로의 입력;
o: 시퀀서로부터의 출력.
설명
FC_SET_DES O 플래시 제어기가 디스크립터를 설정
5TFC 신호는 디스크립터가 실행할 수 있음을 나타낸다. 하나의 디스크립터는 5개의 서브-파라미터들로 분할되고 5 클록의 주기 동안 FC_PARAM[15:0]을 통해 FC에 송신된다.
FC_PARAM[15:0] O 플래시 제어기 디스크립터 파라미터
16-비트 디스크립터 파라미터들은 5 클록 주기 FC_SET_DES 신호 동안에 하나의 80-비트 길이의 디스크립터로부터 분할된다.
FC_SEND_STATUS O 플래시 제어기는 상태를 송신
이 신호가 설정되면, 시퀀서가 FC로부터 디스크립터의 상태를 수신할 준비가 될 때를 나타낸다.
FC_RDY I 플래시 제어기 준비
이 신호가 설정되면, FC가 시퀀서로부터 새로운 디스크립터를 받아들일 준비가 될 때를 나타낸다. 중지할 경우에, 이 신호는 중지 프로세스가 FC에서 실행되고 있는 것을 나타내고, 중지 프로세스가 완료될 때 설정된다.
FC_DES_DONE I 플래시 제어기 디스크립터 완료
디스크립터의 완료를 나타낸다(상태는 이것이 설정될 때 FC_DES_STATUS에서 사용 가능하다).
FC_DES_STATUS I 플래시 제어기 디스크립터 상태
디스크립터의 상태를 나타내고 FC_DES_DONE이 설정되면 사용가능하다
0: 통과;
1: 실패.
FC_DES_ABORT 0 플래시 제어기 중지 요청
FC에서 실행되고 계속중인 모든 디스크립터들의 중지를 요청한다.
주: I: 시퀀서로의 입력; O: 시퀀서로부터의 출력
더욱이, 시퀀서(2014)는 각 채널과 직접적으로 통신하지 않을 수 있다. 플래시 인터페이스 제어기(2013)는 FC_CH_NUM을 디스크립터로부터 추출하고 FC_CH_ UM을 적절한 채널로 안내한다.
하나의 디스크립터가 80비트의 길이인 반면, 시퀀서(2014)와 플래시 인터페이스 제어기(2013) 사이의 FC_PARAM[15:0]의 디스크립터 버스는 16비트의 길이기 때문에, 5개의 fc_clk 주기 동안 디스크립터는 5개의 서브-파라미터들로 분할되고 플래시 인터페이스 제어기(2013)에 송신될 수 있다. 파라미터 순서의 일 실시예가 아래에 도시된다.
A. 제 1 파라미터[15:0] = FC_XF_CNT[15:0]
B. 제 2 파라미터[15:0] = FC_START_COL_ADDR[15:0]
C. 제 3 파라미터[15:0] = FC_START_ROW_ADDR[15:0]
D. 제 4 파라미터[15:0] = {FC_CH_NUM[3:0], FC_DES_TYPE[3:0], FC_START_ROW_ADDR[23:16]}
E. 제 5 파라미터[15:0] = (FC_DEV_NUM[7:0], FC_DES_ID[7:0]}
모든 인터페이스 신호들은 fc_clk 도메인에 속할 수 있다. FC_DES_ID[7:0]는 펌웨어(204)에 의해 할당되지 않고, 시퀀서(2014)에 의해 PHY_EXE_PTR을 이용하여 할당될 수 있다. 상이한 디스크립터들 사이를 구별하기 위해 플래시 인터페이스 제어기에서 FC_DES_ID[7:0]가 이용될 수 있다.
도 10A는 시퀀서(2014)와 플래시 인터페이스 제어기(2013) 사이의 인터페이스에서의 파형을 나타낸다. 도시된 바와 같이, 디스크립 터는 5개의 서브 파라미터들로 분할되고 플래시 인터페이스 제어기(2013)에 전송될 수 있다. 도 10B는 플래시 인터페이스 제어기(2013)로부터의 상태 보고의 타이밍도를 나타낸다. 플래시 인터페이스 제어기(2013)는 디스크립터들이 수신되는 것과 동일한 방식으로 디스크립터 상태를 보고할 수 있는데, 이는 고장(out-of-order) 상태 보고가 허용되지 않는다는 것을 의미한다. FC_DES_ID[7:0] 신호는 완료된 디스크립터의 ID를 나타내기 위하여 플래시 인터페이스 제어기(2013)에 의해 FC_DES_DONE을 따라 어써트될 수 있지만, 시퀀서(2014)가 항상 상기 정보를 필요로 하는 것은 아닐 수 있다.
도 10C는 플래시 인터페이스 제어기 중지 요청의 타이밍도를 나타낸다.
2.4 시퀀서의 디자인 아키텍쳐
시퀀서(2014)는 디스크립터 FIFO(2016) 및 AUX FIFO(2015)를 위한 메모리들, 물리적 및 논리적 인터페이스를 제어하기 위한 상태 머신과, 다른 구성요소들 중에서 상이한 클록 도메인들 사이의 인터페이스를 위한 동기화 로직을 포함할 수 있다.
2.4.1 클록 스키마
플래시 인터페이스 제어기(2013), 포맷터(2012) 및 ECC(2011)를 위한 동기화된 핸드세이킹(handshaking) 인터페이스 신호를 제공하기 위해 시퀀서(2014)에는 4개의 상이한 클록 신호들(rab_clk, sqcr_clk, fc_clk 및 ecc_clk)이 공급될 수 있다. 도 11은 본 발명의 일 실시예에 따른 시퀀서 클록 도메인을 나타낸다.
2.4.1.1 sqcr_clk
클록(sqcr_clk)은 rab_clk에 동기화될 수 있고 sqcr_clk 도메인과 rab_clk 도메인 사이의 동기화 로직을 요구하지 않을 수 있다. 모든 시퀀서 레지스터들은 클록 신호(rab_clk 또는 sqcr_clk)에 의해 클록될(clocked) 수 있고 이에 따라 그들은 RAB 버스로 판독 또는 기록될 수 있다. sqcr_clk 클록 신호는 rab_clk 클록으로부터의 개별적인 클록-인에이블 로직을 가질 수 있는데, 이는 그들이 독립적으로 사용가능하게 되어야 하기 때문이다(클록(sqcr_clk)은 클록(rab_clk)이 사용불가능한 동안 실행되어야 하고 그 반대도 마찬가지여야 하기 때문이다).
2.4.1.2 fc_clk
fc_clk은 플래시 인터페이스 제어기(2013)에 대한 클록 신호이다. 이 클록 신호의 한가지 목적은 시퀀서(2014)와 플래시 인터페이스 제어기 사이의 주로 물리적 디스크립터 핸드세이킹 신호에 대한 동기화를 제공하는 것이다. 시퀀서(2014)가 새로운 디스크립터를 플래시 인터페이스 제어기(2013)에 발행(issues)할 때, FC_SET_DES 또는 FC_SEND_STATUS와 같은 인터페이스 신호는 sqcr_clk 도메인에서 생성될 수 있지만, fc_clk 도메인에 동기화될 수 있다. 이에 따라, 플래시 인터페이스 제어기(2013)는 플래시 인터페이스 제어기(2013)의 일측상에서 동기화하지 않고 시퀀서(2014)와 통신할 수 있다. 이와 유사하게, 시퀀서(2014)가 플래시 인터페이스 제어기(2013)로부터 디스크립터 상태를 수신하고 있을 때, 상태 및 다른 신호들은 fc_clk 도메인 내에서 전달되고 시퀀서(2014)는 동기화 문제를 처리할 수 있다.
FC_PARAM[15:0}과 같은 몇몇 신호들은 그들이 fc_clk 도메인에서 소모되더라도 sqcr_clk 도메인에 존재할 수 있지만, 상기 신호들이 플래시 인터페이스 제어기(2013)에 의해 소모될 때 안정적이라는 것이 시퀀서(2014)에 의해 보장될 수 있다.
FM_FC_SRESET_N을 제외한 모든 fc_clk 도메인 신호들은 플래시 인터페이스 제어기(2013)에 연결되는데, FM_FC_SRESET_N은 리셋 프로세스를 위해 포맷터(2012)에 연결된다.
2.4.1.3 ecc_clk
물리적 디스크립터-관련 신호들이 fc_clk 도메인에 동기화됨에 따라, 논리적 AUX 데이터 및 그의 제어 신호들은 ECC(2011)와 통신하기 위하여 클록(ecc_clk)에 의해 동기화될 수 있다. AUX 데이터 및 핸드세이킹 신호들은 sqcr_clk 도메인에서 생성될수 있지만 AUX 데이터가 ECC(2011)에 전송될 때 ECC(2011)에 전송되기 전에 ecc_clk 도메인에 동기화될 수 있다. 그리고 그 신호들은 ecc_clk 도메인에서 수신될 수 있고 AUX 데이터가 ECC(2011)로부터 수신될 때 sqcr_clk 도메인에 동기화될 수 있다.
XO_SEQ_LBA_DATA[31:0]와 같은 몇몇 신호들은 sqcr_clk 도메인 내에 존재할 수 있지만, 그 신호들이 ECC(2011)에 의해 소모될 때 안정적이라는 것이 시퀀서(2014)에 의해 보장될 수 있다.
ECC 인터페이스 신호들뿐만 아니라, 펌웨어(204)에 대한 FM_ENABLE 신호가 또한 클록(ecc_clk)과 동기화될 수 있다.
2.4.2 메모리 구조
2개의 2-포트 SRAM들이 시퀀서 동작에 제공될 수 있다(하나는 물리적 디스크립터 FIFO(2015)를 위한 것이고 다른 하나는 논리적 AUX FIFO(2016)를 위한 것이다). 펌웨어는 하나의 포트를 이용하여 FIFO로부터 데이터를 판독하거나 FIFO에 데이터를 기록할 수 있는 반면, 시퀀서(2014)는 다른 하나의 포트를 이용하여 데이터에 액세스할 수 있다. 디스크립터 FIFO(2016)가 플래시 인터페이스 제어기(2013)에 의해 이용될 수 있는 반면, AUX FIFO(2015)는 ECC(2011)에 의해 이용될 수 있다.
각각의 SRAM은 16-비트의 데이터 길이와 160개의 데이터 엔트리들을 포함해서, 320-바이트의 SRAM 메모리 크기를 갖는다. 순환 FIFO 스키마는 FIFO들에 이용될 수 있는데, 이에 따라 포인터가 맨 아래 도달하면 포인터를 맨 위로 되돌아가게 함으로써 순환 방식으로 데이터가 판독되거나 기록될 수 있다.
FIFO들은 FIFO 데이터의 입/출력 동작을 제어하기 위해 그들의 래퍼들(wrappers)과 협력할 수 있다. FIFO 래퍼는 FIFO에 위치된 데이터의 수를 나타내는 데이터 카운트뿐만 아니라 판독/기록 포인터를 유지할 수 있다. 그러나, FIFO 래퍼는 오버플로우 또는 언더플로우에 대한 보호를 제공하지 않고, 데이터를 손상하게 하는 동안 단순히 오버플로우/언더플로우 인터럽트를 펌웨어(204)에 AUX_FIFO_UNDERFLOW, AUX_FIFO_OVERFLOW 및 DES_FIFO_OVERFLOW로서 생성할 수 있다. 그러므로 펌웨어(204)는 어떠한 경우든 데이터 오버플로우/언더플로우를 방지하도록 주의할 수 있고, 그러한 인터럽트가 발생하면 클리어와 복구 프로세스를 수행할 수 있다.
2.4.2.1 AUX FIFO
도 12는 본 발명의 일 실시예에 따른 AUX FIFO의 아키텍쳐를 나타낸다. 도시된 바와 같이, AUX FIFO(2015)는 3개의 포인터들(cpu_ptr, ecc_ptr 및 dbg_ptr) 및 카운터(aux_fifo_cnt)를 가질 수 있다.
포인터(cpu_ptr)는 펌웨어(204)에 의해 AUX 데이터 판독/기록에 이용될 수 있다. 펌웨어(204)가 AUX 데이터를 AUX_RDATA로 판독하거나 AUX_WDATA로 기록할 때, 포인터(cpu_ptr)는 자동으로 증가될 수 있고(예를 들어 1만큼 증가) 다음 엔트리의 위치를 가리킨다. 이에 따라, 펌웨어(204)는 홀로(by itself) 포인터(cpu_ptr)를 제어할 필요가 없다.
한편, 포인터(ecc_ptr)는 시퀀서(2014)에 의해 AUX 데이터를 판독하고 ECC(2011)에 제공하거나 ECC(2011)로부터 전송된 AUX 데이터를 기록하는 데 이용될 수 있다. 포인터(ecc_ptr)는 시퀀서(2014)가 하나의 AUX 데이터를 판독하거나 기록할 때 증가(예를 들어 1만큼 증가)될 수도 있다.
디버깅을 목적으로 FIFO 데이터의 콘텐츠를 검색하기 위해 펌웨어에 의해 포인터(dbg_ptr)가 이용될 수 있다. 펌웨어는 AUX_DBG_PTR을 프로그램함으로써 포인터(dbg_ptr)를 임의로 이동시킬 수 있고, AUX_DBG_DATA로부터 포인터에 의해 지시된 데이터를 판독할 수 있으며, 자동으로 증가되는(예를 들어 1만큼 증가됨) dbg_ptr을 계속해서 판독할 수 있다. 포인터(dbg_ptr)가 펌웨어의 제어하에 있고 펌웨어의 요구에 따라 이동될 수 있는 반면, 포인터들(cpu_ptr 및 ecc_ptr)은 펌웨어에 숨겨질 수 있고 시퀀서 로직에 의해서만 제어될 수 있다.
카운터(aux_fifo_cnt)는 AUX FIFO(2015) 내의 AUX 데이터의 양을 나타낼 수 있다. AUX 데이터의 일 부분이 2개의 FIFO 데이터 엔트리들로 구성될 수 있기 때문에, aux_fifo_cnt 값은 2개의 FIFO 엔트리들(하나의 AUX 데이터)이 삽입되거나(pushed) 삭제(popped)될 때 변경될 수 있다. aux_fifo_cnt 값은 상이한 데이터 모드에 따라 증가되거나 감소될 수 있다(펌웨어(204)는 LBA 비교를 하는 기록 또는 판독 모드(AUX_D_CMP가 설정된다)에서 AUX 데이터를 AUX FIFO(2015)에 삽입할 수 있고, 시퀀서(2014)는 LBA 추출을 하는 판독 모드(AUX_D_CMP가 소거된다)에서 AUX 데이터를 AUX FIFO(2015)에 삽입할 수 있다.
모드는 펌웨어(204)가 AUX FIFO(2015)를 먼저 채우는지 시퀀서(2014)가 AUX FIFO(2015)를 먼저 채우는지의 초기 상태에 따라 결정된다. AUX FIFO(2015)가 비어있고(aux_fifo_cnt 는 0이다) 펌웨어가 데이터를 AUX FIFO(2015)에 채우기 시작하면, 모드는 '펌웨어 삽입 모드'로 고정된다. 그 후에 포인터(aux_fifo_cnt)는 펌웨어(204)가 데이터를 삽입할 때 증가되고(예를 들어 1만큼 증가) 시퀀서(2014)가 데이터를 삭제할 때 감소된다(예를 들어 1만큼 감소). '펌웨어 삽입 모드'에서 펌웨어(204)가 데이터를 삭제하거나 시퀀서(2014)가 데이터를 삽입하면, 시퀀서(2014)는 오작동할 수 있다.
이와 유사하게, AUX FIFO(2015)가 비어있고 시퀀서(2014)가 AUX FIFO(2015)에 데이터를 삽입할 때, 모드는 '펌웨어 삭제 모드'로 설정될 수 있다. 카운터(aux_fifo_cnt)는 시퀀서(2014)가 AUX 데이터를 삽입할 때 증가되고(예를 들어 1만큼 증가됨), 펌웨어(204)가 데이터를 삭제할 때 감소된다(예를 들어 1만큼 감소됨). 일단 카운터(aux_fifo_cnt)가 0이 되면 모드는 해제될 수 있고 어느 것이 데이터를 삽입하기 시작하는지에 따라 다음 모드로 설정될 수 있다.
2.4.2.2 디스크립터 FIFO
디스크립터 FIFO(2016)는 4개의 포인터들(wr_ptr, rd_ptr, exe_ptr 및 ltrk_ptr)과 2개의 카운터들(phy_fifo_cnt 및 phy_des_cnt)을 갖는다. 도 13은 본 발명의 일 실시예에 따른 디스크립터 FIFO 포인터들을 나타낸다.
펌웨어(204)는 포인터(wr_ptr)로 디스크립터들을 기록할 수 있고 포인터(rd_ptr)로 디스크립터들을 판독할 수 있다. 펌웨어(204)가 하나의 파라미터(하나의 디스크립터는 5개의 파라미터들로 구성됨)를 PHY_WR_DATA에 기록할 때마다, 포인터(wr_ptr)는 증가될 수 있고(예를 들어 1만큼 증가됨) 다음 파라미터를 삽입할 준비가 될 수 있다. 또한, 펌웨어(204)가 PHY_RD_DATA로부터 하나의 파라미터를 판독하면, 포인터(rd_ptr)는 증가될 수 있고(예를 들어 1만큼 증가됨) 판독될 다음 파라미터의 위치를 가리킬 수 있다. wr_ptr 및 rd_ptr은 모두 PHY_WR_PTR 및 PHY_RD_PTR로 펌웨어에 의해 판독될 수 있지만, rd_ptr만이 펌웨어에 의해 이동될 수 있다.
포인터(exe_ptr)는 디스크립터를 인출하고 플래시 인터페이스 제어기(2013)에 송신하기 위해 시퀀서(204)에 의해 이용될 수 있다. 디스크립터 전송 프로세스 동안에, 시퀀서(2014)는 디스크립터 FIFO(2016)로부터 5개의 디스크립터 파라미터들을 인출할 수 있고 임시 래치 또는 플립-플롭에서 완전한-길이(full-length)의 디스크립터를 구성할 수 있다. wr_ptr 및 rd_ptr과 같이, exe_ptr은 시퀀서가 FIFO로부터 하나의 파라미터를 인출했을 때 자동적으로 증가된다(예를 들어 1만큼 증가됨). 포인터(exe_ptr)는 또한 펌웨어에 PHY_EXE_PTR로 보일 수 있다.
포인터(ltrk_ptr)는 가장 최근에 완료된 트랙에 속하는 첫번째 디스크립터의 첫번째 파라미터를 가리킬 수 있다. 그러므로 이 포인터는 하나의 트랙이 완료될 때마다 다음 위치로 이동될 수 있다. 펌웨어(204)는 rd_ptr을 PHY_LTRK_PTR에서 판독될 수 있는 ltrk_ptr과 동일한 위치로 이동시킴으로써 디버깅할 때 이 포인터를 이용할 수 있다.
카운터(phy_des_cnt)는 디스크립터 FIFO(2016) 내에 '남아 있는' 디스크립터들의 수를 나타낼 수 있다. 하나의 디스크립터는 5개의 FIFO 데이터 엔트리들로 구성되기 때문에, phy_des_cnt 값은 5개의 파라미터들(하나의 디스크립터)이 삽입되거나 삭제될 때 변경될 수 있다. 카운터(phy_des_cnt)는 펌웨어(204)가 하나의 디스크립터를 기록할 때 증가될 수 있고(예를 들어 1만큼 증가됨), 시퀀서(2014)가 하나의 디스크립터를 플래시 인터페이스 제어기(2013)에 인출하고 송신할 때 감소될 수 있다(예를 들어 1만큼 감소됨). 펌웨어는 카운터(PHY_DES_CNT)로 phy_des_cnt 값을 판독할 수 있다.
카운터(phy_fifo_cnt)는 완료된 디스크립터들을 포함하여 디스크립터 FIFO(2016) 내의 모든 디스크립터들의 수를 나타낼 수 있다. 카운터(phy_fifo_cnt)는 펌웨어(204)가 하나의 디스크립터를 디스크립터 FIFO(2016)에 삽입할 때 자동으로 증가될 수 있지만(예를 들어 1만큼 증가됨), 펌웨어(204)가 수동으로 카운터를 감소시키지 않는 한 감소되지 않을 수도 있다. 일단 트랙이 플래시 인터페이스 제어기(2013)에서 완료되고 TRACK_DONE 인터럽트가 생성되면, 펌웨어는 완료된 트랙 내의 디스크립터들의 수만큼 카운터(PHY_FIFO_CNT)를 감소시킬 수 있다. 펌웨어는 카운터(PHY_FIFO_CNT_CTRL)를 판독함으로써 가장 최근에 완료된 트랙 내의 디스크립터들의 수를 확인하고, 동일한 수만큼 감소시키기 위하여 부정수(negated number)를 적용할 수 있다. 디스크립터 FIFO 오버플로우 인터럽트는 phy_des_cnt가 아닌 phy_fifo_cnt에 의해 호출될 수 있다.
2.4.3 리셋/중지 스키마
3가지의 상이한 상황에서, 시퀀서(2014)는 소프트-리셋을 수행하고 ECC(2011), 포맷터(2012) 또는 플래시 인터페이스 제어기(2013)를 리셋/사용불가능하게 한다. 리셋/중지 동작들 및 모듈들 사이의 프로토콜들은 실시간 환경에 의존할 수 있지만, 설정 레지스터 및 상태 레지스터 값들은 변하지 않아서 펌웨어가 새로운 동작을 위한 설정 레지스터 및 상태 레지스터 값들을 재프로그램할 필요가 없다. 리셋/중지 및 대응하는 동작에 대한 3가지의 상이한 상황들이 이하에서 도시된다.
2.4.3.1 SEQ_ENABLE 레지스터 비트가 턴온 될때
펌웨어가 시퀀서 동작을 시작하기 위해 SEQ_ENABLE 레지스터 비트에 1을 기록할 때, 시퀀서(2014)는 시퀀서(2014) 자체와 다른 서브 모듈들(ECC(2011), 포맷터(2012) 및 플래시 인터페이스 제어기(2013))을 클리어하기 위해 리셋할 수 있다. 시퀀서(2014)는 비록 잘못되거나 알려지지 않은 상태에 있었다 하더라도 새로운 동작을 시작할 때 모든 것을 리셋함으로써 클리어되고 알려진 상태에서 새로운 동작을 시작하도록 보장될 수 있다. SEQ_ENABLE이 어써트되자마자, 시퀀서(2014)는 그의 상태 머신들과 설정 레지스터들만을 제외한 FIFO들 또는 FIFO 래퍼들과 같은 모든 다른 로직을 리셋할 수 있다. ECC(2011)와 포맷터(2012)의 상태를 리셋하기 위하여 소프트 리셋 신호들(XO_SEQ_SRESET_N 및 FM_FC_SRESET_N)이 ECC(2011)와 포맷터(2012)에 어써트될 수 있고 리셋 프로세스 동안 높게 유지될 수 있다. 그리고 계류중인 어떤 작업들도 중지시키고 상태를 소거하기 위해 FC_DES_ABORT가 플래시 인터페이스 제어기에 송신될 수 있다.
SEQ_BUSY 레지스터 비트는 시퀀서(2014)가 리셋 동작을 수행할 수 있고 FC_RDY가 플래시 인터페이스 제어기(2013)로부터 설정될 때까지 높게 유지될 수 있다는 것을 나타내도록 설정될 수 있다. 리셋 프로세스는 플래시 인터페이스(2013)가 그 로직을 리셋하는데 가장 긴 시간을 소요할 수 있기 때문에 플래시 인터페이스 제어기(2013) 리셋이 완료될 때까지 계속되는 것으로 추정될 수 있다. FC_RDY가 플래시 인터페이스 제어기(2013)에 의해 설정되면, ECC(2011)와 포맷터(2012) 모두로의 소프트 리셋 신호가 어써트되지 않을 수 있고 SEQ_BUSY 레지스터 비트가 중단될(go off) 수 있다. 펌웨어(204)는 SEQ_BUSY가 설정되는 동안 디스크립터들 및/또는 AUX 데이터를 기록하지만 동작은 SEQ_BUSY 비트가 턴오프될 때까지 시작하지 않을 것이다.
2.4.3.2 SEQ_ENABLE 레지스터 비트가 턴오프될 때
펌웨어(204)는 (OP_DONE 인터럽트를 수신함으로써) 동작이 완료되거나 오류가 발생할 때 SEQ_ENABLE 레지스터 비트를 턴오프할 수 있다. 물리적 상태 머신 및 논리적 상태 머신이 모두 클린 상태에 있고 ECC(2011) 및 포맷터(2012)를 사용불가능하게 하기 위해 리셋될 수 있다. 그러나, FIFO 및 FIFO 랩퍼 상태는 리셋되지 않고 펌웨어(204)는 요청된 검사를 수행하기 위해 데이터와 포인터 정보를 검색할 수 있다. ECC(2011) 및 포맷터(2012)는 사용불가능하게 될 수 있지만 리셋되지 않고, 이에 따라 그들의 상태가 펌웨어를 위해 유지될 것이다. 이와는 반대로, 어떠한 계류중인 작업도 중지하고 상태를 클리어하기 위하여 FC_DES_ABORT가 플래시 인터페이스 제어기(2013)에 송신될 수 있다. 이는 플래시 인터페이스 제어기(2013)가 어떠한 상태 또는 정보도 유지하지 않을 것이라는 것을 의미한다.
SEQ_ENABLE 비트가 턴온될 때와 유사하게, SEQ_BUSY 비트는 FC_DES_ABORT 비트가 설정될 때 턴온되고 FC_RDY 비트가 다시 설정될 때 턴오프될 수 있다. 펌웨어(204)는 SEQ_BUSY 비트가 턴온될 때 시퀀서(2014)의 설정 레지스터를 제외한 어떠한 변화도 주지 않을 수 있다.
트랙 상태 레지스터는 SEQ_ENABLE 비트가 턴오프될 때 갱신될 수 있고, 펌웨어(204)는 TRK_STAT를 판독함으로써 시퀀서(2014)를 사용불가능하게 하는 현재의 트랙 상태를 가질 수 있다. 펌웨어(204)가 최종 완료된 트랙의 상태를 체크하고자 하면, SEQ_ENABLE이 턴오프되기 전에 TRK_STAT가 판독될 수 있다.
도 14는 SEQ_ENABLE 어써션(assertion) 또는 디어써션(deassertion)이 서브 모듈들로의 리셋/중지/인에이블 신호들을 제어할 때의 파형을 나타낸다.
2.4.3.3 SEQ_RESET 레지스터 비트가 설정될 때
펌웨어(204)가 SEQ_RESET 비트에 1을 기록할 때, 설정 레지스터를 제외한 모든 정보 및 상태가 시퀀서(2014), ECC(2011), 포맷터(2012) 및 플래시 인터페이스 제어기(2013) 상에서 소거될 수 있고, 그들은 초기 상태가 될 것이다. 시퀀서(2014)는 FIFO들, FIFO 랩퍼들 및 상태 머신들을 포함하는 모든 로직을 리셋하고 소프트 리셋 신호들(XO_SEQ_SRESET_N 및 FM_FC_SRESET_N)을 ECC(2011) 및 포맷터(2012)에 송신할 수 있다. ECC(2011) 및 포맷터(2012)에 대한 소프트 리셋 신호는 리셋 프로세스가 완료될 때까지 높게 유지될 수 있다. FC_DES_ABORT는 계류중인 작업들을 중지하기 위하여 플래시 인터페이스 제어기에 송신될 수도 있다. SEQ_BUST 레지스터 비트는 전체 리셋 프로세스 동안에 턴온되고 FC_RDY가 플래시 인터페이스 제어기(2013)에 의해 설정되면 턴오프될 수 있다. 펌웨어(204)는 어떤 동작도 재개하기 전에 SEQ_BUSY 비트가 턴오프될 때까지 대기할 수 있다.
SEQ_ENABLE 비트는 이전에 턴온 상태였다면 턴오프되고, SEQ_RESET 비트는 또한 다음 클록 주기에서 자동으로 턴오프될 수 있다.
도 15는 SEQ_RESET 비트가 어써트될 때의 파형을 나타내고 서브 모듈들로의 리셋/중지/인에이블 신호들이 어떻게 영향을 받는지를 보여준다. 본 예에서, 플래시 인터페이스 제어기(2013)는 대기 상태에 있으므로 FC_RDY가 하강하지 않고 시퀀서 리셋에는 SEQ_ENABLE이 어써트될 때보다 더 짧은 시간이 소요될 수 있다.
2.4.4 데이터 플로우
시퀀서(2014)는 호스트(102)와 플래시 디바이스들 사이의 사용자 데이터 플로우와 직접적으로 관련되지 않을 수 있지만, 시퀀서(2014)는 서브 모듈들(도 3에 도시된 바와 같이 특히 ECC(2011) 및 플래시 인터페이스 제어기(2013))을 제어하기 위한 고유의 데이터 플로우를 가질 수 있다. 2가지의 데이터 경로가 존재할 수 있다. 하나는 논리적 도메인에 존재하고 다른 하나는 물리적 도메인에 존재한다. 이 2가지의 데이터 경로들은 상호 독립적일 수 있고 ECC 인터페이스 신호(논리적 도메인) 또는 플래시 인터페이스 제어기 인터페이스 신호(물리적 도메인)에 의해 개별적으로 제어될 수 있다.
논리적 도메인에서, AUX 데이터는 논리적 어드레스 정보 또는 AU와 관련된 어떤 보조 데이터도 지원하기 위하여 ECC(2011)에/로부터 전송될 수 있다. 시퀀서(2014)는 LBA 비교를 하는(AUX_D_CMP가 설정된다) 기록 모드 또는 판독 모드에서 XO_START_AU를 따라 AUX FIFO(2015)로부터 AUX 데이터를 인출하고 ECC(2011)에 송신한다. 다음 AUX 데이터와 XO_START_AU 신호는 XI_AU_RCV_DONE이 ECC(2011)로부터 수신된 후에 ECC(2011)에 송신된다. 그러므로 XO_START_AU 및 XI_AU_RCV_DONE 신호들은 핸드세이킹 인터페이스를 구성한다. 시퀀서(2014)는 AU_LOOP_CNT 레지스터에서 프로그램된 모든 AUX 데이터가 ECC(2011)에 전송될 때까지 AUX 데이터를 계속하여 송신할 수 있다.
LBA 추출을 하는(AUX_D_CMP가 설정된다) 판독 모드에서, AU 블록으로부터 추출된 AUX 데이터는 XI_AU_DONE에 따라 수신된다. 시퀀서(2014)는 수신된 AUX 데이터를 AUX FIFO(2015)에 저장할 수 있고 펌웨어(204)는 AUX_RDATA 레지스터를 판독함으로써 정보를 얻을 수 있다.
이와 유사하게, 디스크립터들은 물리적 도메인에서 플래시 인터페이스 제어기에 전송될 수 있고 각 플래시 디바이스의 동작을 정의할 수 있다. 플래시 인터페이스 제어기 인터페이스는 디스크립터를 송신하고 상태를 수신하기 위한 핸드세이킹 인터페이스를 가질 수도 있다. 시퀀서(2014)는 플래시 인터페이스 제어기로부터의 FC_RDY 신호를 체크할 수 있고 FC_SET_DES 신호로 디스크립터를 송신할 수 있다. FC_RDY는 다음 디스크립터를 송신하기 위해 시퀀서(2014)에 대하여 다시 설정될 수 있다. 이와 동일한 방식으로, 시퀀서(2014)는 플래시 인터페이스 제어기(2013)가 FC_DES_DONE 및 FC_DES_STATUS 신호들을 송신하게 하기 위하여 FC_SEND_STATUS 신호를 설정할 수 있다.
2.4.5 상태 머신
시퀀서 상태 머신들은 2개의 카테고리로 나뉠 수 있다. AUX 상태 머신들은 논리적 도메인에서 데이터 플로우를 제어하기 위해 ECC 인터페이스 신호들을 처리할 수 있고, PHY 상태 머신들은 플래시 인터페이스 제어기(2013)로의 디스크립터의 전송을 제어하기 위하여 플래시 인터페이스 제어기 인터페이스 신호들을 처리할 수 있다. 데이터의 송신과 수신이 동시에 발생할 수 있고 개별적인 상태 머신들이 송신(TX)/수신(RX)를 제어할 필요가 있을 수 있기 때문에 각 도메인에 2개의 상태 머신들이 존재할 수 있다. 모든 인터페이스 신호들은 그들의 타겟 또는 소스 클록 도메인에 관계없이 sqcr_clk 도메인 내에서 생성되고 소모될 수 있으므로, 신호 생성 후(신호들이 서브 모듈들에 전송되면) 또는 신호 소모 전(신호들이 서브 모듈로부터 전송되면)에 동기화가 필요할 수도 있다.
각 상태 머신에 대한 상세한 정보는 이하에서 도시된다.
2.4.5.1 논리적 도메인 상태 머신들
논리적 도메인 인터페이스 신호들은 2개의 개별적인 AUX 상태 머신들에 의해 제어될 수 있다. TX 상태 머신은 XO_START_AU 및 XI_AU_RCV_DONE 신호들 뿐만 아니라 시퀀서(2014)로부터 ECC(2011)로의 AUX 데이터 전송을 제어할 수 있다. 한편, RX 상태 머신은 ECC(2011)로부터 시퀀서(2014)로의 AUX 데이터 전송 및 XI_AU_DONE 신호를 제어할 수 있다. 그들은 독립적인 상태 머신들에 의해 제어되기 때문에, XO_START_AU 및 XI_AU_DONE은 동시에 지원될 수 있다.
도 16은 본 발명의 일 실시예에 따른 각 상태 머신의 이행 조건 또는 동작을 포함하는 상태 머신의 상세 블록도를 나타낸다. 도시된 바와 같이, TX 이행 조건들은 다음을 포함할 수 있다.
·c1: 첫번재 디스크립터가 인출되고 디스크립터 타입이 READ 또는 PROG이고 AUX_D_MODE는 0이 아니고 (AUX 비교를 하는 기록 모드 또는 판독 모드)
·c2: 첫번째 디스크립터가 인출되고 디스크립터 타입이 READ 또는 PROG이고(AUX_D_MODE가 0이거나 AUX 추출을 하는 판독 모드이다)
·c3: AUX FIFO는 비어 있지 않다
·c4: 요청된 AUX 데이터가 FIFO로부터 인출된다
·c5: XI_AU_RCV_DONE이 수신되고 모든 AUX 데이터가 송신된다
·c6: XL_AU_RCV_DONE이 수신되고 AUX 데이터가 유지되고(AUX_D_MODE가 0이거나 AUX 추출을 하는 판독 모드이다)
·c7: XI_AU_RCV_DONE이 수신되고 AUX 데이터가 유지되고 AUX_D_MODE가 0이 아니고(AUX를 비교하는 기록 모드 또는 판독 모드)
·c8: 시퀀서 동작이 완료된다
·XI_DEC_FAIL: XI_DEC_FAIL이 현재 상태에 관계없이 수신될 때 상태 머신은 AT_FAIL 상태가 된다
TX 상태 동작들은 다음을 포함할 수 있다:
·AT_IDLE: c1 또는 c2가 충족되면, ECC를 가능하게 하고, XI_DEC0_ENC1을 설정하고 AU_LOOP_CNT를 TX 루프 카운트에 복사한다
·AT_CHK_FIFO는 AUX 데이터 인출의 카운터를 설정한다
·AT_SETUP_AU: AUX FIFO로부터 AUX 데이터를 인출하고 임시 레지스터에 저장한다
·AT_STA_AU: XO_START_AU를 송신한다
·AT_STA_AU: XO_START_AU가 송신되면 TX 루프 카운트를 감소시킨다
·AT_WAIT_DONE: AUX_LOOP_CN 가 0이면, ECC를 사용불가능하게 한다.
도 17에 도시된 바와 같이, RX 이행 조건들은 다음을 포함한다:
·c1: ECC가 사용가능하게 되고 XI_AU_DONE이 수신되고 AUX_LOOP_CNT가 0이 아니고(AUX_D_MODE는 0 또는(AUX 비교를 하는 기록 모드 또는 판독 모드))
·c2: ECC가 사용가능하게 되고 XI_AU_DONE이 수신되고 AUX_LOOP_CNT가 0이 아니고 AUX_D_MODE가 0이 아니고 AUX 추출을 하는 읽기 모드
·c3: 요청된 AUX 데이터가 FIFO에 삽입된다.
RX 상태 동작들은 다음을 포함할 수 있다:
·AR_RECV: AUX_LOOP_CNT를 1만큼 감소시킨다
·AR RUSH: AUX 데이터를 FIFO에 삽입하고 AUX_LOOP_CNT를 1만큼 감소시킨다.
물리적 도메인 인터페이스 신호들은 또한 2개의 개별적인 상태 머신들에 의해 제어될 수 있다. 추가적으로, 트랙 상태, 얼마나 많은 트랙들이 현재 활동중인지 및 언제 트랙이 시작되고 완료되는지를 추적하기 위하여 또 다른 모듈(트랙 추적기)이 존재할 수 있다. TX 상태 머신은 디스크립터 FIFO(2016)로부터 디스크립터들을 인출하고 플래시 인터페이스 제어기에 송신할 수 있다. 이와 동시에, 트랙 추적기는 하나의 디스크립터가 송신되면 디스크립터 내에서 TRACK 비트를 이용하여 트랙 정보를 계속하여 갱신할 수 있다. 디스크립터가 플래시 인터페이스 제어기에 의해 완료되면, RX 상태 머신은 FC_DES_DONE 신호를 수신하고 트랙 추적기는 현재 트랙이 완료되었는지를 결정할 수 있다. 트랙 상태는 하나의 트랙이 플래시 인터페이스 제어기에 의해 완료되면 갱신될 수 있고 펌웨어는 트랙 내의 각 디스크립터의 상태를 체크하기 위해 TRK_STAT 레지스터에 액세스할 수 있다.
도 18은 본 발명의 일 실시예에 따른 각 상태 머신의 이행 상태 및 동작들을 포함하는 상태 머신의 상세 블록도를 나타낸다. TX 이행 조건은 다음을 포함할 수 있다:
·c1: SEQ_ENABLE이 설정되고 디스크립터 FIFO가 비어있지 않고 액티브 트랙들의 수가 초과되지 않는다
·c2: 디스크립터 인출이 완료된다
·c3: FC_RDY가 설정된다
·c4: FC_SET_DES가 5번의 fc_clk 주기 동안 송신된다.
TX 상태 동작들은 다음을 포함할 수 있다:
·PT_FETCH: 모든 디스크립터 파라미터들이 인출될 때가지 디스크립터 파라미터들을 하나씩 인출하고 임시 레지스터에 저장한다
·PT_SET_DES: 5번의 fc_clk 주기 동안 하나의 디스크립터에 따른 FC_SET_PES를 송신하고 디스크립터가 트랙 경계를 향하는지 뿐만 아니라 상기 하나의 디스크립터가 송신되는 것을 트랙 추적기에 알린다.
도 19는 본 발명의 일 실시예에 따른 물리적 트랙 추적기를 나타낸다.
도 20은 본 발명의 일 실시예에 따른 물리적 RX 상태 머신을 나타낸다. RX 상태 동작은 다음을 포함할 수 있다:
·대기: FC_DES_DONE이 수신되면, 디스크립터 루프 카운트를 감소시키고 FC_SEND_STATUS를 어써트 시키지 않는다
·trk_chk: 트랙이 완료되면 FC_SEND_STATUS를 어써트하고 트랙 상태를 갱신한다
2.5 시퀀서 애플리케이션
2.5.1 일반적인 동작
일반적인 동작에서, 펌웨어(204)는 예를 들어 도 21에 도시된 단계들에 따라 시퀀서(2014)를 프로그램할 수 있다.
2.5.1.1 인에이블 시퀀서
시퀀서(2014)는 어떤 새로운 동작도 시작하기 전에 SEQ_ENABLE 레지스터 비트를 어써트함으로써 사용가능하게 될 필요가 있을 수 있다. 모든 서브-모듈들은 리셋되고 클리어될 수 있다. SEQ_BUSY 레지스터 비트가 클리어 프로세스 동안에 설정될 수 있지만 펌웨어(204)는 SEQ_BUSY가 클리어되기 전에도 동작 레지스터들 및 FIFO들을 프로그램할 수 있다.
2.5.1.2 동작 레지스터들의 프로그램
몇몇 레지스터들은 펌웨어가 디스크립터들을 디스크립터 FIFO(2016)에 삽입하기 전에 프로그램될 필요가 있을 수 있다. 그들은 DES_LOOP_CNT(새로운 동작의 전체 디스크립터의 수)와 AU_LOOP_CNT(새로운 동작의 전체 AUX 데이터의 수)이다. 펌웨어가 디스크립터들을 디스크립터 FIFO(2016)에 기록하기 전에 이 2개의 레지스터들을 프로그램하는데 실패하면, 시퀀서(2014)는 잘못 작동할 수 있다.
2.5.1.3 디스크립터 FIFO(그리고 필요하면 AUX FIFO)의 채움
펌웨어(204)는 각 플래시 디바이스의 동작들을 정의하기 위해 디스크립터들을 디스크립터 FIFO(2016)에 기록할 수 있다. TRACK 비트는 트랙의 마지막 디스크립터에 대해 설정될 수 있다. 액티브 트랙의 최대수(MAX_ACT_TRK)가 2로 설정된다고 가정하면, 2개의 트랙들은 플래시 디바이스의 이용을 극대화하기 위해 디스크립터 FIFO(2016)내에 존재할 수 있다.
LBA 비교를 하는(AUX_D_CMP 가 설정된다) 기록 또는 판독 모드에 있을 때, 펌웨어(204)는 또한 AUX FIFO(2015)를 LBA 데이터(또는 다른 어떤 AUX 데이터)로 채울 수 있다. 펌웨어(204)는 AUX FIFO(2015) 내에 충분한 수의 AUX 데이터를 유지할 수 있고, 이에 따라 디스크립터 FIFO(2016) 내의 모든 디스크립터들은 남지(hanging) 않고 소모될 수 있다. AUX FIFO(2015) 내에 충분한 AUX 데이터가 없다면, 시퀀서(2014)는 펌웨어(204)가 더 많은 AUX 데이터를 공급할 때까지 남을 수 있다.
어느 FIFO가 먼저 채워져야 하는지에 대한 제한은 없다. 따라서, 펌웨어(204)는 디스크립터 FIFO에 데이터를 먼저 기록하거나 AUX FIFO에 데이터를 먼저 기록할 수 있다.
2.5.1.4 동작이 완료될 때까지 FIFO들을 유지
일단 첫번째 디스크립터가 인출되고 플래시 인터페이스 제어기(2013)에 송신되면, 펌웨어(204)는 동작이 완료될 때까지 디스크립터 FIFO(2016)와 AUX FIFO(2015)를 유지할 수 있다. 보통 펌웨어(204)는 트랙이 완료되고 TRACK_DONE 인터럽트가 감지되면 FIFO들을 갱신하고 상태를 검색할 수 있다. 트랙이 완료되면, 펌웨어(204)는 다음을 수행할 수 있다.
·인터럽트를 클리어
·얼마나 많은 디스크립터들이 최종 트랙에서 완료되었는지 확인하기 위하여 PHY_FIFO_CNT_CTRL을 판독하고, PHY_FIFO_CNT를 감소시키고 디스크립터 FIFO(2016)의 오버플로우를 방지하기 위해 동일한 레지스터에 음수를 기록
·다음 트랙을 디스크립터 FIFO에 기록
·LBA 비교를 하는(AUX_D_CMP가 설정된다) 기록 또는 판독 모드에서, 대응하는 수의 AUX 데이터를 AUX FIFO(2015)에 기록하여 AUX FIFO가 비어있게 되지 않음
·LBA 추출을 하는(AUX_D_CMP가 클리어된다) 판독 모드에서, AUX FIFO가 오버플로우되지 않도록 AUX FIFO(2015)로부터 AUX 데이터를 판독. 논리적 도메인이 물리적 도메인에 부합하지(aligned with) 않기 때문에, TRACK_DONE 인터럽트가 감지되면 AUX FIFO(2015)에 남아있는 어떤 AUX 데이터라도 판독하는 것이 권장된다. 그렇게 함으로써, AUX FIFO(2015) 내에 존재하는 AUX 데이터의 수가 최소화되고 AUX FIFO의 오버플로우가 방지될 수 있다. 펌웨어(204)는 AU_LOOP_CNT를 판독하고 이전의 AU_LOOP_CNT 값(이전의 TRACK_DONE이 감지된 때의 값)과의 차이를 구하여 AUX FIFO(2015) 내에 얼마나 많은 AUX 데이터가 존재하는지 알 수 있다. 첫 번째 TRACK_DONE이 발생하면 (AUX 데이터를 판독할 필요가 없는 경우) AUX 데이터가 존재하지 않을 가능성이 있다. 펌웨어는 동작이 완료되고 OP_DONE 인터럽트가 발생할 때까지 이 단계를 반복할 수 있다.
TRACK_DONE 인터럽트와 OP_DONE 인터럽트 뿐만 아니라, TRACK_ERR 또는 EC_FAIL과 같은 다른 인터럽트들이 존재할 수 있다. 이와 같은 상황에서, 이하에서 설명될 바와 같이 오류 조건을 처리하기 위한 지시(directions)가 뒤따를 것이다.
2.5.1.5 디스에이블 시퀀서
동작이 완료되고 OP_DONE 인터럽트가 감지된 후에, 펌웨어(204)는 시퀀서(2014)를 사용불가능하게 하기 위하여 SEQ_ENABLE 레지스터 비트를 클리어할 수 있다. TRK_STAT는 시퀀서(2014)가 사용불가능하게 되면 갱신될 것이기 때문에, 펌웨어(204)는 시퀀서(2014)를 사용불가능하게 하기 전에 최종 트랙에 대한 TRK_STAT를 판독할 수 있다. 일단 SEQ_ENABLE 레지스터 비트가 턴오프되면, 펌웨어(204)는 시퀀서(2014)에 대한 어떤 추가적인 제어도 수행하기 전에 SEQ_BUSY 신호가 클리어될 때까지 대기할 수 있다.
이에 따라 ECC(2011), 포맷터(2012) 및 플래시 인터페이스 제어기(2013)도 사용불가능하게 되지만, 그들의 상태 레지스터들은 시퀀서(2014)가 다음 동작을 위해 다시 사용가능하게 될 때까지 액세스 가능하다.
2.5.2 중지 동작
시퀀서의 동작은 동작이 완료되거나 오류가 발생하기 전이라면 언제라도 중지될 수 있다. 펌웨어(204)는 시퀀서 동작을 중지하기 위해 SEQ_ENABLE 레지스터 비트를 어써트하지 않을 수 있다. 중지가 요청되면, ECC(2011)와 포맷터(2012)를 사용불가능하게 하기 위해 XO_EC_ENABLE 및 FM_ENABLE이 어써트되지 않을 수 있고, FC_DES_ABORT는 플래시 디바이스들에서의 어떠한 계류중인 작업들도 중지하기 위해 플래시 인터페이스 제어기에 송신될 수 있다. SEQ_BUSY 레지스터 비트는 중지하는 동안 시퀀서(2014)가 비지(busy) 상태임을 나타내도록 설정될 수 있다. 펌웨어(204)는 SEQ_BUSY가 다른 프로세싱 전에 클리어될 때까지 대기할 수 있다.
도 22는 본 발명의 일 실시예에 따른 시퀀서 중지 동작을 나타낸다. ECC(2011), 포맷터(2012) 및 플래시 인터페이스 제어기(2013)가 사용불가능하게 되거나 중지될 수 있는 동안, 시퀀서 상태 레지스터 및 설정 레지스터는 그들의 값을 유지하고 펌웨어(204)는 어떤 작업들이 완료되는지 그리고 어떤 것이 중지되는지를 결정하기 위해 레지스터들을 판독할 수 있다. 판독/기록 모드에 따라 상이한 레지스터들이 정보를 제공할 수 있다.
PROG 동작 또는 ERASE 동작이 중지되면, 펌웨어는 트랙 내의 어떤 디스크립터들이 성공적으로 완료되는지 확인하기 위하여 TRK_STAT 레지스터를 체크할 수 있다. TRK_STAT 레지스터는 시퀀서(2014)가 중지될 때 갱신될 수 있고, 각 비트는 중지된 트랙 내의 각 디스크립터의 상태를 나타낸다. 중지된 트랙 내의 디스크립터가 상태 0(통과)을 가지면, 성공적으로 완료되는 것으로 여겨진다. 그러나, 중지된 트랙 내의 디스크립터가 상태 1(실패)을 가지면, 실패로 완료되거나 완료되기전에 중지된 것일 수 있다. 이 2가지의 경우에, 중지된 트랙은 사용불가능한 것으로 간주되어야 한다.
이와 유사하게, 판독 동작 동안에, AU_LOOP_CNT 레지스터 값은 얼마나 많은 AU들이 버퍼 관리자(BM)에 성공적으로 전송되는지를 나타낼 수 있다. 몇몇 AU들은 시퀀서(2014)가 중지될 때 ECC 프로세싱 도중에 있을 수 있지만 완료되지 않고, 그들은 사용불가능한 것으로 간주되어야 한다.
2.5.3 오류 처리
도 23은 본 발명의 일 실시예에 따른 시퀀서 오류 동작을 나타낸다.
오류 패턴은 오류가 상이한 도메인(논리적 도메인 또는 물리적 도메인)으로부터 발생할 수 있기 때문에 동작이 READ 또는 PROG 동작인지에 따라 상이할 수 있다.
PROG 또는 ERASE 동작의 경우에, 플래시 디바이스들에서 실패가 존재할 때 물리적 도메인에서 오류가 발생할 수 있다. 플래시 인터페이스 제어기는 FC_DES_DONE 신호에 따른 FC_DES_STATUS에 의해 오류 상태를 보고할 수 있고, TRACK_ERR 인터럽트는 트랙 경계에서 시퀀서(2014)에 의해 생성될 수 있다. 펌웨어는 포인터(PHY_RD_PTR)를 포인터(PHY_LTRK_PTR)의 위치로 이동시킴으로써 실패된 트랙의 디스크립터들을 조사할 수 있고 PHY_RD_DATA를 판독할 수 있다.
READ 동작의 경우에, 오류는 ECC(2011)가 AU에 대하여 디코딩이 완료될 수 없다는 것을 확인할 때 논리적 도메인에서 발생할 수 있다. ECC(2011)는 XI_DEC_FAIL 신호로 시퀀서(2014)에 즉시 오류들을 보고할 수 있고, EC_FAIL 인터럽트가 시퀀서(2014)에 의해 생성될 수 있다.
두 경우에, 펌웨어는 모든 모듈들을 사용불가능하게 하고 계류중인 어떤 작업도 중지하기 위하여 SEQ_ENABLE 레지스터 비트를 즉시 클리어할 수 있다(그리고 SEQ_BUSY 신호가 클리어될 때까지 대기할 수 있다). 표 6은 상태 레지스터들 및 포인터 레지스터들의 리스트를 도시하는데, 이들에 의해 펌웨어(204)가 시퀀서(2014)가 사용불가능하게 된 이후의 오류들을 디버그할 수 있다.
레지스터 의미
TRK_STAT 현재 트랙의 상태가 0이 성공을 의미하고 1이 실패를 의미하는 이 레지스터에 저장된다. 펌웨어는 현재 트랙의 어떤 디스크립터가 실패했는지 확인한다.
PHY_FIFO_CNT_CTRL 현재 트랙의 디스크립터 수는 이 레지스터를 판독함으로써 검색될 수 있다.
PHY_RD_PTR
PHY_RD_DATA
펌웨어는 PHY_RD_PTR을 이동시키고 PHY_RD_DATA 레지스터로부터 FIFO 콘텐츠를 판독할 수 있다. 이 2개의 레지스터들로 디스크립터 FIFO의 콘텐츠들이 오류 검사를 위해 검색될 수 있다.
PHY_EXE_PTR 이 포인터는 FC로 송신되고 있는 디스크립터를 나타낸다.
PHY_LTRK_PTR 이 포인터는 최종 완료된 트랙의 첫번째 디스크립터를 가리키고 있다. 펌웨어는 최종 트랙의 디스크립터들을 판독하기 위해 PHY_RD_PTR을 PHY_LTRK_PTR과 동일한 위치로 이동시킨다.
PHY_DES_CNT 이 카운터는 얼마나 많은 디스크립터들이 FIFO 내에 존재하고 FC에 아직 송신되지 않았는지를 나타낸다.
DES_LOOP_CNT 이 카운터는 현재 동작의 얼마나 많은 디스크립터들이 완료되지 않았는지를 나타낸다.
AU_LOOP_CNT 이 카운터는 현재 동작의 얼마나 많은 AUX 데이터가 완료되지 않았는지를 나타낸다.
AUX_DBG_PTR
AUX_DBG_DATA
펌웨어는 AUX_DBG_PTR을 AUX FIFO의 임의의 위치로 이동시킬 수 있고 AUX_DBG_D ATA를 판독함으로써 FIFO의 콘텐츠를 검색할 수 있다.
2.5.4 소프트 리셋
도 24는 본 발명의 일 실시예에 따른 시퀀서 리셋의 시퀀스를 나타낸다.
오작동이 있거나 시퀀서(2014)가 알려지지 않은 상태에 있으면, 펌웨어(204)는 SEQ_RESET 레지스터 비트를 구동하여 시퀀서(2014)를 클린 상태에 진입하게 하기 위해 시퀀서(2014)를 리셋할 수 있다. ECC(2011) 및 포맷터(2012)는 또한 XO_SEQ_SRESET_N 및 FM_FC_SRESET_N에 의해 리셋될 수 있고, 플래시 인터페이스 제어기(2013)는 FC_DES_ABORT에 의해 리셋될 수 있다.
3. 동작들
도 25는 본 발명의 일 실시예에 따른 기록 동작의 흐름도를 나타낸다. 기록 동작은 도 2A에 도시된 시스템에서 이용될 수 있고, 2501에서 시작할 수 있다.
2502에서, 펌웨어(204)는 기록 동작들을 위한 다수의 요청들을 호스트(102)로부터 수신할 수 있고, 각 동작들을 나타내기 위해 작업을 이용할 수 있다.
2503에서, 펌웨어(204)는 각 작업들에 대한 디스크립터를 프로그램할 수 있고 디스크립터들을 디스크립터 FIFO(2016) 내에 기록할 수 있다. 각 디스크립터는 예를 들어 타겟 플래시 메모리 디바이스, 타겟 채널, 동작의 타입, 데이터의 LBA 등 기록 동작에 관한 정보를 포함할 수 있다. 펌웨어(204)는 메모리 디바이스로부터의 응답을 기다리지 않고 디스크립터들을 제공할 수 있고, 작업 큐를 형성하기 위해 다수의 작업들이 지속적으로 제공될 수 있다.
일 실시예에서, 펌웨어(204)는 T-비트의 디스크립터를 설정함으로써 다수의 디스크립터들을 신호 트랙에 삽입할 수 있다. 예를 들어, 펌웨어가 16개의 디스크립터들을 단일 트랙에 삽입하고자 할 때, T-비트의 16번째(16th) 디스크립터가 설정될 수 있다. 대역폭을 증가시키기 위해, 타겟 디바이스들이 사용가능하면 다수의 트랙들이 병렬로 발행될 수 있다.
펌웨어(204)가 디스크립터들의 프로그래밍을 완료한 후에, 시퀀서(2014)는 남아있는 작업을 처리할 수 있고, 이에 따라 펌웨어(204)는 다른 트랙들에 집중할 수 있다.
2504에서, 시퀀서(2014)는 작업 큐의 최상위에 있는 디스크립터의 타겟 채널과 타겟 디바이스의 사용가능성을 체크할 수 있고, 디스크립터의 타겟 메모리 디바이스가 사용가능하게 되자마자 디스크립터를 디스크립터 FIFO(2016)로부터 플래시 인터페이스 제어기(2013)에 발행할 수 있다. 타겟 디바이스들이 사용가능한 한 다수의 디스크립터들이 제공되고 병렬로 수행될 수 있다.
2505에서, 시퀀서(2014)는 ECC(2011), 포맷터(2012) 및 플래시 인터페이스 제어기(2013)에 기록 동작이 준비되었다는 것을 통지할 수 있다.
2506에서, 호스트(102)로부터의 데이터가 ECC(2011)에 송신될 수 있는데, ECC(2011)는 데이터에 오류 정정 코드를 삽입할 수 있다.
2507에서, 포맷터(2012)는 플래시 인터페이스 제어기(2013)의 데이터 경로에 부합하기 위하여 데이터를 포맷할 수 있다.
2508에서, 플래시 인터페이스 제어기(2013)는 작업 큐의 최상위에 있는 디스크립터에서 정의된 기록 동작을 수행할 수 있고, 이는 타겟 채널을 통해 데이터를 타겟 플래시 메모리 디바이스의 내부 버퍼에 전송함으로써 이루어진다.
2509에서, 시퀀서(2014)는 플래시 인터페이스 제어기(2013)로부터 타겟 플래시 메모리 디바이스의 내부 버퍼로의 데이터 전송이 완료되었는지를 결정할 수 있다.
2510에서, 시퀀서(2014)는 트랙 내에 다음 디스크립터가 존재하는지 결정할 수 있다. 존재하지 않는다면, 프로세스는 2520으로 진행할 수 있다.
존재한다면, 2504 내지 2510이 다음 디스크립터에 대해 수행될 수 있다. 트랙 내에 하나 이상의 디스크립터가 남아 있다면, 그 타겟 채널과 타겟 디바이스가 먼저 사용가능하게 된 디스크립터가 먼저 수행될 수 있다. 시퀀서(2014)는 타겟 플래시 메모리 디바이스의 내부 버퍼와 타겟 플래시 메모리 디바이스 사이의 트랜잭션이 완료되기를 기다릴 필요가 없다. 2504 내지 2510은 트랙 내에서 모든 기록 동작들이 완료될 때까지 반복될 수 있다.
2520에서, 플래시 인터페이스 제어기(2013)는 예를 들어 모든 기록 동작들이 완료되었는지, 어떤 동작이 성공적인지 그리고 어떤 동작이 실패했는지, 동작의 상태에 관해 시퀀서(2014)에 통지할 수 있다.
2521에서, 시퀀서(2014)는 상태 정보를 펌웨어(204)에 포워딩(forward)할 수 있다. 일 실시예에서, 디스크립터들이 트랙에 삽입되면, 시퀀서(2014)는 트랙이 완료될 때 즉, 트랙의 디스크립터들에서 정의된 모든 작업들이 완료될 때 펌웨어(204)로의 인터럽트 신호를 생성할 수 있다.
일 실시예에서, 시퀀서(2014)는 작업들의 상태를 포함하는 "트랙 상태 레지스터" 에서 각 작업의 상태를 수집할 수 있다. 일단 트랙이 완료되고 인터럽트 신호가 생성되면, 펌웨어(204)는 트랙 내에 실패된 어떤 작업이 있는지 확인하기 위하여 "트랙 상태 레지스터"를 체크할 수 있다. 더욱이, 시퀀서(2014)는 어떤 디스크립터들이 발행되는지, 어떤 작업이 완료되는지, 어떤 작업이 진행중인지와 같은 정보를 제공할 수 있는데, 이에 따라 펌웨어(204)는 용이하게 진단하고 오류로부터 회복될 수 있다.
도 26은 본 발명의 일 실시예에 따른 판독 동작의 흐름도를 나타낸다. 동작은 도 2A에 도시된 시스템에서 이용될 수 있고, 2601에서 시작될 수 있다.
2602에서, 펌웨어(204)는 호스트(102)로부터 판독 동작을 위한 다수의 요청들을 수신하고 각 동작들을 나타내기 위해 작업을 이용할 수 있다.
2603에서, 펌웨어(204)는 각 작업들에 대한 디스크립터를 프로그램하고, 디스크립터들을 디스크립터 FIFO(2016)에 기록할 수 있다. 각각의 디스크립터는 예를 들어 타겟 플래시 메모리 디바이스, 타겟 채널, 작업의 타입 등 작업 동작에 관한 정보를 포함할 수 있다. 작업 큐를 형성하기 위해 다수의 작업들이 지속적으로 제공될 수 있다.
일 실시예에서, 펌웨어(204)는 T-비트의 디스크립터를 설정함으로써 다수의 디스크립터들을 신호 트랙에 삽입할 수 있다. 예를 들어, 펌웨어가 16개의 디스크립터들을 단일 트랙에 삽입하고자 할 때, T-비트의 16번째(16th) 디스크립터가 설정될 수 있다. 대역폭을 증가시키기 위해, 타겟 디바이스들이 사용가능하면 다수의 트랙들이 병렬로 발행될 수 있다.
펌웨어(204)가 디스크립터들의 프로그래밍을 완료한 후에, 시퀀서(2014)는 남아있는 작업을 처리할 수 있고, 이에 따라 펌웨어(204)는 다른 트랙들에 집중할 수 있다.
2604에서, 펌웨어(204)는 LBA 비교 모드에 있다면 데이터의 LBA를 AUX FIFO(2015)에 기록할 수 있다.
2605에서, 시퀀서(2014)는 작업 큐의 최상위에 있는 디스크립터의 타겟 채널과 타겟 디바이스의 사용가능성을 체크할 수 있고, 디스크립터의 타겟 메모리 디바이스가 사용가능하게 되자마자 디스크립터를 디스크립터 FIFO(2016)로부터 플래시 인터페이스 제어기(2013)에 발행할 수 있다. 타겟 디바이스들이 사용가능한 한 다수의 디스크립터들이 제공되고 병렬로 수행될 수 있다.
2606에서, 시퀀서(2014)는 ECC(2011), 포맷터(2012) 및 플래시 인터페이스 제어기(2013)에 판독 동작이 준비되었다는 것을 통지할 수 있다.
2607에서, 플래시 인터페이스 제어기(2013)는 디스크립터들을 그들의 타겟 플래시 메모리 디바이스들에 송신할 수 있는데, 디스크립터들은 타겟 메모리 디바이스들이 데이터를 그들의 내부 버퍼에 전송하기 시작하도록 지시한다.
2608에서, 플래시 인터페이스 제어기(2013)는 작업 큐의 최상위에 있는 디스크립터에서 정의된 타겟 플래시 메모리 디바이스의 내부버퍼로부터 데이터를 수신할 수 있다.
2609에서, 시퀀서는 작업 큐의 최상위 디스크립터에 따른 데이터 전송이 완료되었는지를 결정할 수 있다.
완료되었다면, 2610에서, 시퀀서는 트랙 내에 다음 디스크립터가 존재하는지 결정할 수 있다. 완료되지 않았다면, 프로세스는 2620으로 진행할 수 있다.
트랙내에 다른 디스크립터가 존재한다면, 2604 내지 2610이 다음 디스크립터에 대해 수행될 수 있다. 트랙 내에 하나 이상의 디스크립터가 남아 있다면, 그 타겟 채널과 타겟 디바이스가 먼저 사용가능하게 된 디스크립터가 먼저 수행될 수 있다. 시퀀서(2014)는 타겟 플래시 메모리 디바이스의 내부 버퍼와 타겟 플래시 메모리 디바이스 사이의 트랜잭션이 완료되기를 기다릴 필요가 없다. 2604 내지 2610은 트랙 내에서 모든 판독 동작들이 완료될 때까지 반복될 수 있다.
2620에서, 시퀀서(2014)가 다음 디스크립터로부터 플래시 인터페이스 제어기(2013)로의 데이터 전송을 수행하는 동안, 포맷터(2012)는 플래시 인터페이스 제어기(2013)로부터의 데이터를 포맷할 수 있다.
2621에서, ECC(2011)는 타겟 디바이스로부터의 데이터를 디코딩하고, 오류 정정을 수행할 수 있다.
2622에서, LBA 비교 모드에서 ECC(2011)는 타겟 디바이스로부터의 데이터의 LBA와 AUX FIFO(2015)에 저장된 LBA를 비교할 수 있다. 그들이 상이하다면, 프로시져는 오류 발생을 펌웨어에 보고하기 위해 2625로 진행할 수 있다. LBA 추출 모드에서, ECC(2011)는 AU로부터 LBA 데이터를 추출하고 AUX FIFO에 저장되게 하기 위해 시퀀서로 되돌려 송신할 수 있다.
2623에서, 타겟 디바이스로부터의 데이터의 LBA와 AUX FIFO(2015)에 저장된 LBA가 동일하면, 데이터는 버퍼에 전송될 수 있다.
2624에서, 플래시 인터페이스 제어기(2013)는 시퀀서(2014)에 예를 들어 모든 판독 동작들이 완료되었는지, 어떤 동작이 성공적인지, 그리고 어떤 동작이 실패되었는지, 동작의 상태를 통지할 수 있다.
2625에서, 시퀀서(2014)는 상태 정보를 펌웨어(204)에 포워딩(forward)할 수 있다. 일 실시예에서, 디스크립터들이 트랙에 삽입되면, 시퀀서(2014)는 트랙이 완료될 때 즉, 트랙의 디스크립터들에서 정의된 모든 작업들이 완료될 때 펌웨어(204)로의 인터럽트 신호를 생성할 수 있다.
일 실시예에서, 시퀀서(2014)는 작업들의 상태를 포함하는 "트랙 상태 레지스터" 에서 각 작업의 상태를 수집할 수 있다. 일단 트랙이 완료되고 인터럽트 신호가 생성되면, 펌웨어(204)는 트랙 내에 실패된 어떤 작업이 있는지 확인하기 위하여 "트랙 상태 레지스터"를 체크할 수 있다. 더욱이, 시퀀서(2014)는 어떤 디스크립터들이 발행되는지, 어떤 작업이 완료되는지, 어떤 작업이 진행중인지와 같은 정보를 제공할 수 있는데, 이에 따라 펌웨어(204)는 용이하게 진단하고 오류로부터 복구될 수 있다.
도 27은 본 발명의 일 실시예에 따른 소거 동작에 대한 흐름도를 나타낸다. 동작은 도 2A에 도시된 시스템에서 이용될 수 있고, 2701에서 시작할 수 있다.
2702에서, 펌웨어(204)는 호스트(102)로부터 소거 동작을 위한 다수의 요청들을 수신할 수 있다.
2703에서, 펌웨어(204)는 소거 동작 요청들 각각에 대한 디스크립터를 프로그램할 수 있다.
2704에서, 시퀀서(2014)는 작업 큐의 최상위에 있는 디스크립터의 타겟 채널과 타겟 디바이스의 사용가능성을 체크할 수 있고, 디스크립터의 타겟 메모리 디바이스가 사용가능하게 되자마자 디스크립터를 디스크립터 FIFO(2016)로부터 플래시 인터페이스 제어기(2013)에 발행할 수 있다. 다수의 디스크립터들은 타겟 디바이스들이 사용가능한 한 제공되고 병렬로 수행될 수 있다.
2705에서, 플래시 인터페이스 제어기(2013)는 디스크립터들을 그들의 타겟 플래시 메모리 디바이스들로 포워딩할 수 있다.
2706에서, 플래시 메모리 디바이스들은 디스크립터에 따라 데이터를 소거할 수 있다.
2707에서, 플래시 메모리 디바이스들은 동작의 상태를 플래시 인터페이스 제어기(2013)에 보고할 수 있다. 상태 정보는 2708에서 시퀀서로 포워딩되고, 2709에서 펌웨어로 포워딩될 수 있다.
본 발명의 다양한 기술 사상 및 양태가 특정 실시예들에 관하여 예시의 방법으로써만, 그리고 제한적이지 않은 방법으로 상세하게 묘사되고 설명되었다. 상기 개시된 실시예들에 대한 변형 및 다양한 수정이 본 명세서의 범위 및 사상 내에 있다. 그러므로, 본 발명은 첨부된 특허청구범위들의 범위에 의해서만 제한되는 것으로 고려되어야 한다.
101: 플래시 제어기 1011: ECC
1012: 포맷터 1013: 플래시 인터페이스 제어기
1014: 시퀀서 102: 호스트
103: 버퍼 104: 펌웨어
201: 플래시 제어기 2011: ECC
2012: 포맷터 2013: 플래시 인터페이스 제어기
2014: 시퀀서 2015: AUX FIFO
2016: 디스크립터 FIFO 204: 펌웨어

Claims (31)

  1. 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 방법으로서, 상기 솔리드 스테이트 메모리 디바이스들은 제어기에 연결되고, 상기 제어기는 펌웨어에 의해 제어되며,
    호스트로부터 적어도 제 1 동작 요청(operation request) 및 제 2 동작 요청을 수신하는 단계;
    상기 제 1 동작 요청에 대한 제 1 디스크립터와 상기 제 2 동작 요청에 대한 제 2 디스크립터를 상기 펌웨어에 의해 프로그램하는 단계;
    제 1 및 제 2 디스크립터들을 시퀀싱(sequencing)하는 단계;
    상기 제 1 디스크립터에 따라 데이터를 전송하는 단계;
    상기 제 1 디스크립터에 따른 상기 데이터의 전송이 완료되었는지를 결정하는 단계; 및
    상기 제 1 디스크립터에 따른 상기 데이터의 전송이 완료되었으면 상기 제 2 디스크립터에 따라 데이터를 전송하기 시작하는 단계
    를 포함하는 것을 특징으로 하는 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 방법.
  2. 제1항에 있어서,
    상기 제 1 디스크립터는,
    타겟 디바이스, 타겟 채널 및 동작의 타입에 관한 정보를 포함하는 것을 특징으로 하는 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 방법.
  3. 제1항에 있어서,
    메모리 디바이스로부터의 응답을 기다리지 않고 상기 제 1 디스크립터를 제공하는 단계를 더 포함하는 것을 특징으로 하는 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 방법.
  4. 제1항에 있어서,
    상기 제 1 및 제 2 디스크립터는,
    작업 큐(job queue)를 형성하기 위해 지속적으로 제공되는 것을 특징으로 하는 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 방법.
  5. 제4항에 있어서,
    적어도 상기 제 1 및 제 2 디스크립터를 트랙에 삽입하는 단계를 더 포함하는 것을 특징으로 하는 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 방법.
  6. 제5항에 있어서,
    상기 트랙은,
    16개의 디스크립터들을 갖는 것을 특징으로 하는 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 방법.
  7. 제6항에 있어서,
    T-비트의 16번째 디스크립터가 설정되는 것을 특징으로 하는 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 방법.
  8. 제5항에 있어서,
    상기 트랙 내에서 수행될 다른 디스크립터가 존재하는지 결정하는 단계를 더 포함하는 것을 특징으로 하는 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 방법.
  9. 제1항에 있어서,
    상기 제 1 디스크립터를 발행하기 전에 타겟 디바이스의 사용가능성을 체크하는 단계를 더 포함하는 것을 특징으로 하는 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 방법.
  10. 제1항에 있어서,
    상기 제 1 및 제 2 동작 요청들의 상태를 상기 펌웨어에 보고하는 단계를 더 포함하는 것을 특징으로 하는 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 방법.
  11. 제5항에 있어서,
    트랙 내의 모든 디스크립터들이 완료되면 상기 펌웨어에게 인터럽트 신호를 생성하는 단계를 더 포함하는 것을 특징으로 하는 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 방법.
  12. 제1항에 있어서,
    상기 제 1 동작 요청은 기록 요청이고,
    상기 데이터는 상기 제어기로부터 타겟 디바이스의 내부 버퍼로 전송되는 것을 특징으로 하는 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 방법.
  13. 제12항에 있어서,
    상기 호스트로부터의 데이터 플로우에 대해 오류 정정 패리티 연산을 수행하는 단계를 더 포함하는 것을 특징으로 하는 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 방법.
  14. 제1항에 있어서,
    상기 제 1 동작 요청은 판독 요청이고,
    상기 데이터는 타겟 디바이스의 내부 버퍼로부터 상기 제어기에 전송되는 것을 특징으로 하는 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 방법.
  15. 제14항에 있어서,
    요청된 데이터의 LBA(Logical Block Address : 논리적 블록 어드레스)를 저장하는 단계를 더 포함하는 것을 특징으로 하는 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 방법.
  16. 제15항에 있어서,
    저장된 LBA와 상기 제 1 디스크립터에 따라 타겟 디바이스로부터 획득된 데이터의 LBA를 비교하는 단계를 더 포함하는 것을 특징으로 하는 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 방법.
  17. 제14항에 있어서,
    상기 호스트로부터의 데이터 플로우에 대해 오류 정정을 수행하는 단계를 더 포함하는 것을 특징으로 하는 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 방법.
  18. 제 14항에 있어서,
    상기 호스트의 요건(requirement)들에 부합하기 위하여 데이터 플로우를 포맷하는 단계를 더 포함하는 것을 특징으로 하는 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 방법.
  19. 호스트에 의한 다수의 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 장치로서,
    제 1 동작 요청에 대한 제 1 디스크립터와 제 2 동작 요청에 대한 제 2 디스크립터를 프로그램하기 위한 펌웨어;
    상기 제 1 및 제 2 디스크립터를 수신하기 위한 시퀀서; 및
    상기 시퀀서에 연결되어 상기 제 1 및 제 2 디스크립터 및 명령들을 수신하고, 그리고 상기 솔리드 스테이트 메모리 디바이스들에 연결되어 상기 제 1 디스크립터에 따라 데이터를 전송하는 인터페이스 제어 유닛
    을 포함하여 이루어지며,
    상기 인터페이스 제어 유닛은 상기 제 1 디스크립터에 따라 데이터 전송이 완료되면 상기 제 2 디스크립터에 따라 데이터를 전송하기 시작하는 것을 특징으로 하는 호스트에 의한 다수의 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 장치.
  20. 제19항에 있어서,
    상기 제 1 디스크립터는,
    타겟 메모리 디바이스, 타겟 채널 및 동작의 타입에 관한 정보를 포함하는 것을 특징으로 하는 호스트에 의한 다수의 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 장치.
  21. 제19항에 있어서,
    상기 시퀀서는,
    상기 펌웨어로부터 상기 제 1 및 제 2 디스크립터들을 수신하기 위한 디스크립터 FIFO를 더 포함하는 것을 특징으로 하는 호스트에 의한 다수의 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 장치.
  22. 제19항에 있어서,
    상기 시퀀서는,
    전송될 데이터에 관한 논리적 블록 어드레스(LBA) 정보를 상기 펌웨어로부터 수신하기 위한 AUX FIFO를 더 포함하는 것을 특징으로 하는 호스트에 의한 다수의 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 장치.
  23. 제19항에 있어서,
    데이터 플로우에 대해 오류 정정을 수행하기 위한 오류 정정 유닛을 더 포함하는 것을 특징으로 하는 호스트에 의한 다수의 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 장치.
  24. 제19항에 있어서,
    상기 인터페이스 제어 유닛의 요건들에 부합하기 위해 상기 호스트로부터의 데이터 플로우를 포맷하기 위한 포맷터를 더 포함하는 것을 특징으로 하는 호스트에 의한 다수의 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 장치.
  25. 제19항에 있어서,
    상기 펌웨어는, 메모리 디바이스로부터의 응답을 기다리지 않고 상기 제 1 디스크립터를 제공하는 것을 특징으로 하는 호스트에 의한 다수의 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 장치.
  26. 제19항에 있어서,
    상기 펌웨어는, 작업 큐를 형성하기 위하여 상기 제 1 및 제 2 디스크립터를 지속적으로 제공하는 것을 특징으로 하는 호스트에 의한 다수의 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 장치.
  27. 제19항에 있어서,
    상기 시퀀서는, 상기 제 1 디스크립터를 상기 인터페이스 제어 유닛에 발행하기 전에 타겟 디바이스의 사용가능성을 체크하는 것을 특징으로 하는 호스트에 의한 다수의 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 장치.
  28. 제27항에 있어서,
    상기 시퀀서는,
    상기 인터페이스 제어 유닛에 상기 동작의 타입에 대해 준비가 되었다는 것을 통지하는 것을 특징으로 하는 호스트에 의한 다수의 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 장치.
  29. 제19항에 있어서,
    상기 시퀀서는,
    동작들의 상태를 상기 펌웨어에 보고하는 것을 특징으로 하는 호스트에 의한 다수의 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 장치.
  30. 제19항에 있어서,
    상기 데이터 전송을 완료하는데 걸리는 시간은 상기 제 1 동작을 완료하는 데 걸리는 시간보다 작은 것을 특징으로 하는 호스트에 의한 다수의 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 장치.
  31. 제1항에 있어서,
    상기 데이터 전송을 완료하는데 걸리는 시간은 상기 제 1 동작을 완료하는 데 걸리는 시간보다 작은 것을 특징으로 하는 솔리드 스테이트 메모리 디바이스들로의 액세스를 제어하는 방법.
KR1020107008424A 2007-09-19 2008-09-17 솔리드 스테이트 메모리 제어기를 위한 플렉시블 시퀀서 디자인 아키텍쳐 KR101507975B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US97357907P 2007-09-19 2007-09-19
US60/973,579 2007-09-19
PCT/US2008/076741 WO2009039222A2 (en) 2007-09-19 2008-09-17 Flexible sequencer design architecture for solid state memory controller

Publications (2)

Publication Number Publication Date
KR20100072263A true KR20100072263A (ko) 2010-06-30
KR101507975B1 KR101507975B1 (ko) 2015-04-06

Family

ID=40193998

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020107008424A KR101507975B1 (ko) 2007-09-19 2008-09-17 솔리드 스테이트 메모리 제어기를 위한 플렉시블 시퀀서 디자인 아키텍쳐

Country Status (4)

Country Link
US (1) US8185713B2 (ko)
KR (1) KR101507975B1 (ko)
TW (1) TWI444832B (ko)
WO (1) WO2009039222A2 (ko)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020051520A1 (en) * 2018-09-06 2020-03-12 Micron Technology, Inc. Providing bandwidth expansion for a memory sub-system including a sequencer separate from a controller
US11080210B2 (en) 2018-09-06 2021-08-03 Micron Technology, Inc. Memory sub-system including an in package sequencer separate from a controller
KR20220085100A (ko) * 2020-12-14 2022-06-22 현대오토에버 주식회사 플래시 메모리 ecc 모듈의 진단 장치 및 방법

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8255615B1 (en) 2009-01-08 2012-08-28 Marvell International Ltd. Flexible sequence design architecture for solid state memory controller
US8271720B1 (en) * 2009-03-02 2012-09-18 Marvell International Ltd. Adaptive physical allocation in solid-state drives
KR20100100394A (ko) * 2009-03-06 2010-09-15 삼성전자주식회사 반도체 디스크 장치 그리고 그것의 데이터 기록 및 읽기 방법
US8988800B1 (en) 2009-09-15 2015-03-24 Marvell International Ltd. Error correction for storage devices
US8402217B2 (en) * 2009-09-15 2013-03-19 Marvell International Ltd. Implementing RAID in solid state memory
CN103403681B (zh) * 2010-12-20 2018-09-18 马维尔国际贸易有限公司 描述符调度器
US20130339583A1 (en) * 2012-06-19 2013-12-19 Marvell World Trade Ltd. Systems and methods for transferring data out of order in next generation solid state drive controllers
KR101932920B1 (ko) 2012-09-14 2019-03-18 삼성전자 주식회사 비휘발성 메모리 카드를 제어하는 호스트, 이를 포함하는 시스템 및 이의 동작 방법
US9122413B2 (en) 2013-08-15 2015-09-01 International Business Machines Corporation Implementing hardware auto device operations initiator
US9377968B2 (en) * 2013-11-13 2016-06-28 Sandisk Technologies Llc Method and system for using templates to communicate with non-volatile memory
US9431052B2 (en) 2014-06-26 2016-08-30 Marvell World Trade Ltd. Two dimensional magnetic recording systems, devices and methods
KR102317787B1 (ko) 2015-02-11 2021-10-26 삼성전자주식회사 메시지 전송 플로우 관리 방법 및 이를 적용하는 스토리지 디바이스
KR102339779B1 (ko) 2015-04-06 2021-12-15 삼성전자주식회사 데이터 저장 장치, 이를 포함하는 데이터 처리 시스템, 및 상기 시스템의 작동 방법
CN105912307B (zh) * 2016-04-27 2018-09-07 浪潮(北京)电子信息产业有限公司 一种Flash控制器数据处理方法及装置
KR102609473B1 (ko) * 2016-06-17 2023-12-04 에스케이하이닉스 주식회사 데이터 저장 장치 및 그것의 동작 방법
KR20180118329A (ko) 2017-04-21 2018-10-31 에스케이하이닉스 주식회사 메모리 시스템, 데이터 처리 시스템 및 그것의 동작 방법
TWI645288B (zh) * 2017-07-04 2018-12-21 慧榮科技股份有限公司 資料儲存裝置以及其操作方法
KR102381233B1 (ko) * 2017-08-28 2022-04-01 에스케이하이닉스 주식회사 데이터 저장 장치 및 그것의 동작 방법
US11095626B2 (en) 2018-09-26 2021-08-17 Marvell Asia Pte, Ltd. Secure in-line received network packet processing
US11038856B2 (en) * 2018-09-26 2021-06-15 Marvell Asia Pte, Ltd. Secure in-line network packet transmittal
CN116185891B (zh) * 2023-04-27 2023-07-21 珠海妙存科技有限公司 描述符管理方法

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5787484A (en) * 1996-08-08 1998-07-28 Micron Technology, Inc. System and method which compares data preread from memory cells to data to be written to the cells
US6134630A (en) * 1997-11-14 2000-10-17 3Ware High-performance bus architecture for disk array system
GB0123416D0 (en) 2001-09-28 2001-11-21 Memquest Ltd Non-volatile memory control
GB0123410D0 (en) * 2001-09-28 2001-11-21 Memquest Ltd Memory system for data storage and retrieval
US7020815B2 (en) 2002-08-29 2006-03-28 Micron Technology, Inc. Memory technology test apparatus
KR100725271B1 (ko) * 2005-05-20 2007-06-04 주식회사 엠피오 복수개의 dma 채널을 갖는 usb-sd 저장 장치 및 그저장 방법

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020051520A1 (en) * 2018-09-06 2020-03-12 Micron Technology, Inc. Providing bandwidth expansion for a memory sub-system including a sequencer separate from a controller
US11061751B2 (en) 2018-09-06 2021-07-13 Micron Technology, Inc. Providing bandwidth expansion for a memory sub-system including a sequencer separate from a controller
US11080210B2 (en) 2018-09-06 2021-08-03 Micron Technology, Inc. Memory sub-system including an in package sequencer separate from a controller
US11567817B2 (en) 2018-09-06 2023-01-31 Micron Technology, Inc. Providing bandwidth expansion for a memory sub-system including a sequencer separate from a controller
US11675714B2 (en) 2018-09-06 2023-06-13 Micron Technology, Inc. Memory sub-system including an in package sequencer separate from a controller
KR20220085100A (ko) * 2020-12-14 2022-06-22 현대오토에버 주식회사 플래시 메모리 ecc 모듈의 진단 장치 및 방법

Also Published As

Publication number Publication date
WO2009039222A2 (en) 2009-03-26
TW200928758A (en) 2009-07-01
KR101507975B1 (ko) 2015-04-06
TWI444832B (zh) 2014-07-11
WO2009039222A3 (en) 2009-06-04
US8185713B2 (en) 2012-05-22
US20090077305A1 (en) 2009-03-19

Similar Documents

Publication Publication Date Title
KR101507975B1 (ko) 솔리드 스테이트 메모리 제어기를 위한 플렉시블 시퀀서 디자인 아키텍쳐
US6401149B1 (en) Methods for context switching within a disk controller
US6330626B1 (en) Systems and methods for a disk controller memory architecture
US8504737B2 (en) Serial line protocol for embedded devices
US8296480B2 (en) Context execution in a media controller architecture
CN104520932B (zh) 闪存存储器控制器
KR100290943B1 (ko) 유니버설 시리얼 버스 제어 이전을 처리하는 장치 및 방법
JP5181141B2 (ja) 入出力処理システムにおいて間接データ・アドレッシングを提供するための装置、並びにその方法およびコンピュータ・プログラム
US5953352A (en) Method of checking data integrity for a raid 1 system
CN1320436C (zh) 储存虚拟化计算机系统及用于其中的外接式控制器
CN102567256B (zh) 处理器系统及其多通道内存拷贝dma加速器和方法
EP0907917B1 (en) Cache memory controller in a raid interface
JP2013025795A (ja) フラッシュデバイスのためのフラッシュコントローラハードウェアアーキテクチャ
JP2011512591A5 (ko)
US20110282963A1 (en) Storage device and method of controlling storage device
CN102890622A (zh) 一种基于协处理器的sata控制器
US8327043B2 (en) Buffer management device which manages buffer transfer, storage apparatus comprising the same device, and buffer management method
US20050050244A1 (en) Method for controlling data transfer unit, data transfer unit, channel control unit, and storage device control unit
CA2370596C (en) Systems and methods for a disk controller memory architecture
US20070073927A1 (en) Method and apparatus for high throughput mass storage device interface in a microprocessor for handheld systems

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
FPAY Annual fee payment

Payment date: 20180309

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20190314

Year of fee payment: 5