KR20200051199A - 복수의 프로토콜을 적응적으로 지원하는 스토리지 장치 - Google Patents

복수의 프로토콜을 적응적으로 지원하는 스토리지 장치 Download PDF

Info

Publication number
KR20200051199A
KR20200051199A KR1020180134232A KR20180134232A KR20200051199A KR 20200051199 A KR20200051199 A KR 20200051199A KR 1020180134232 A KR1020180134232 A KR 1020180134232A KR 20180134232 A KR20180134232 A KR 20180134232A KR 20200051199 A KR20200051199 A KR 20200051199A
Authority
KR
South Korea
Prior art keywords
protocol
programmable logic
request
storage device
logic device
Prior art date
Application number
KR1020180134232A
Other languages
English (en)
Other versions
KR102583255B1 (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 삼성전자주식회사
Priority to KR1020180134232A priority Critical patent/KR102583255B1/ko
Priority to DE102019111128.5A priority patent/DE102019111128A1/de
Priority to US16/510,050 priority patent/US11132309B2/en
Priority to CN201911070348.7A priority patent/CN111142783A/zh
Publication of KR20200051199A publication Critical patent/KR20200051199A/ko
Priority to US17/448,971 priority patent/US20220012192A1/en
Application granted granted Critical
Publication of KR102583255B1 publication Critical patent/KR102583255B1/ko

Links

Images

Classifications

    • 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/0626Reducing size or complexity of storage systems
    • 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/0658Controller construction arrangements
    • 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
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • 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/0629Configuration or reconfiguration of storage systems
    • 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/0629Configuration or reconfiguration of storage systems
    • G06F3/0634Configuration or reconfiguration of storage systems by changing the state or mode of one or more devices
    • 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/0656Data buffering arrangements
    • 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/0661Format or protocol conversion arrangements
    • 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]

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)
  • Communication Control (AREA)
  • Logic Circuits (AREA)
  • Programmable Controllers (AREA)

Abstract

스토리지 장치는 메모리 장치 및 컨트롤러를 포함한다. 컨트롤러는 스토리지 장치의 외부로부터 수신되는 요청들에 따라 복수의 프로토콜을 적응적으로 지원하기 위해 요청들에 기초하여 재구성되는 프로그래머블 로직 장치를 포함한다. 프로그래머블 로직 장치가 복수의 프로토콜 중 제 1 프로토콜과 관련하여 스토리지 장치의 외부로부터 수신되는 제 1 요청에 기초하여 제 1 프로토콜을 지원하도록 프로그램됨에 따라, 프로그래머블 로직 장치는 제 1 프로토콜에 따라 제 1 요청을 처리하고, 컨트롤러는 메모리 장치가 제 1 요청에 대응하는 데이터를 저장하거나 출력하도록 제 1 요청에 기초하여 메모리 장치와 통신한다.

Description

복수의 프로토콜을 적응적으로 지원하는 스토리지 장치 {STORAGE DEVICE ADAPTIVELY SUPPORTING PLURALITY OF PROTOCOLS}
본 개시는 전자 장치에 관한 것으로, 좀 더 구체적으로는 프로토콜에 따라 데이터를 저장하거나 출력하는 스토리지 장치의 구성들 및 동작들에 관한 것이다.
근래 다양한 유형의 전자 장치들이 이용되고 있다. 전자 장치는 그 전자 장치에 포함되는 다양한 전자 회로 및 장치의 동작들에 따라 고유의 기능들을 수행한다. 전자 장치는 단독으로 동작하면서 또는 다른 전자 장치와 통신하면서 사용자에게 서비스를 제공한다.
스토리지 장치는 전자 장치들의 한 예이다. 스토리지 장치는 그 스토리지 장치에 포함되는 메모리 장치에 데이터를 저장하거나 저장된 데이터를 출력하도록 구성되어, 사용자에게 스토리지 서비스를 제공한다. 이를 위해, 스토리지 장치는 그 스토리지 장치에 의해 채용되는 프로토콜에 따라 호스트와 데이터를 통신한다.
프로토콜은 신호 송신 순서, 신호 처리 방식, 데이터 포맷, 인증 방식, 오류 처리 방식 등을 정의하는 통신 규칙이다. 스토리지 장치를 포함하는 대부분의 전자 장치는 주어진 프로토콜에 따라 다른 전자 장치와 데이터를 송신 및 수신하면서 동작한다. 프로토콜들이 많은 양의 데이터를 빠르게 통신하고 데이터 오류를 줄이기 위해 진화함에 따라, 프로토콜들의 유형들 및 종류들이 다양해졌다.
실시 예들은 전자 장치(예컨대, 스토리지 장치)의 외부로부터 수신되는 요청들에 따라 복수의 프로토콜을 적응적(Adaptive)으로 지원하는 전자 장치를 제공할 수 있다. 전자 장치는 복수의 프로토콜을 적응적으로 지원하도록 재구성 가능한(Reconfigurable) 프로그래머블(Programmable) 로직 장치를 포함할 수 있다.
몇몇 실시 예에서, 스토리지 장치는 메모리 장치 및 컨트롤러를 포함할 수 있다. 컨트롤러는 스토리지 장치의 외부로부터 수신되는 요청들에 따라 복수의 프로토콜을 적응적으로 지원하기 위해 요청들에 기초하여 재구성 가능한 프로그래머블 로직 장치를 포함할 수 있다. 프로그래머블 로직 장치가 복수의 프로토콜 중 제 1 프로토콜과 관련하여 스토리지 장치의 외부로부터 수신되는 제 1 요청에 기초하여 제 1 프로토콜을 지원하도록 프로그램됨에 따라, 프로그래머블 로직 장치는 제 1 프로토콜에 따라 제 1 요청을 처리할 수 있고, 컨트롤러는 메모리 장치가 제 1 요청에 대응하는 데이터를 저장하거나 출력하도록 제 1 요청에 기초하여 메모리 장치와 통신할 수 있다.
실시 예들에 따르면, 전자 장치(예컨대, 스토리지 장치)는 프로토콜의 유형 또는 종류에 관계없이 적응적으로 프로토콜을 지원할 수 있고, 전자 장치의 활용성이 향상될 수 있다. 나아가, 복수의 프로토콜을 지원하는 데에 추가의 자원이 요구되지 않을 수 있고, 실시 예들은 비용 및 회로 면적의 관점에서 유익할 수 있다.
도 1은 몇몇 실시 예에 따른 전자 시스템의 예시적인 구성을 보여주는 블록도이다.
도 2는 몇몇 실시 예에 따른 네트워크 시스템의 예시적인 구성을 보여주는 블록도이다.
도 3은 도 1 또는 도 2의 스토리지 장치와 관련되는 예시적인 구성을 보여주는 블록도이다.
도 4는 도 3의 컨트롤러와 관련되는 예시적인 구성을 보여주는 블록도이다.
도 5 및 도 6은 도 4의 컨트롤러의 예시적인 동작을 설명하는 흐름도들이다.
도 7은 도 4의 프로토콜 관리기의 예시적인 동작을 설명하기 위한 개념도이다.
도 8 내지 도 12는 도 4의 컨트롤러를 포함하는 도 3의 스토리지 장치의 예시적인 동작을 설명하기 위한 개념도들이다.
도 13은 도 4의 프로토콜 관리기의 예시적인 동작을 설명하기 위한 표이다.
도 14는 도 3의 컨트롤러와 관련되는 예시적인 구성을 보여주는 블록도이다.
도 15는 도 14의 컨트롤러의 예시적인 동작을 설명하는 흐름도이다.
도 16a 내지 도 16c는 도 14의 컨트롤러의 예시적인 동작을 설명하기 위한 개념도들이다.
도 17은 도 3의 컨트롤러와 관련되는 예시적인 구성을 보여주는 블록도이다.
도 18 및 도 19는 도 1 또는 도 2의 스토리지 장치와 관련되는 예시적인 구성을 보여주는 블록도들이다.
도 20은 도 19의 컨트롤러와 관련되는 예시적인 구성을 보여주는 블록도이다.
도 21은 도 19의 컨트롤러의 예시적인 동작을 설명하는 흐름도이다.
도 22는 도 19의 컨트롤러와 관련되는 예시적인 구성을 보여주는 블록도이다.
도 23은 도 1 또는 도 2의 스토리지 장치와 관련되는 예시적인 구성을 보여주는 블록도이다.
도 24는 도 23의 컨트롤러와 관련되는 예시적인 구성을 보여주는 블록도이다.
도 25는 도 1 또는 도 2의 스토리지 장치와 관련되는 예시적인 구성을 보여주는 블록도이다.
도 26은 도 25의 컨트롤러와 관련되는 예시적인 구성을 보여주는 블록도이다.
도 27 및 도 28은 도 1 또는 도 2의 컨트롤러와 관련되는 예시적인 구성을 보여주는 블록도들이다.
아래에서, 본 개시가 속하는 기술 분야에서 통상의 지식을 가진 자들이 본 개시를 용이하게 실시할 수 있도록, 첨부되는 도면들을 참조하여 몇몇 실시 예가 명확하고 상세하게 설명될 것이다.
도 1은 몇몇 실시 예에 따른 전자 시스템(1000)의 예시적인 구성을 보여주는 블록도이다.
전자 시스템(1000)은 메인 프로세서(1101), 워킹 메모리(1200), 스토리지 장치(1300), 통신 블록(1400), 유저 인터페이스(1500), 및 버스(1900)를 포함할 수 있다. 예로서, 전자 시스템(1000)은 데스크톱 컴퓨터, 랩톱 컴퓨터, 태블릿 컴퓨터, 스마트 폰, 웨어러블(Wearable) 장치, 비디오 게임기(Video Game Console), 하나 이상의 서버, 전기 자동차, 가전기기, 의료기기 등과 같은 전자 장치들 중 하나일 수 있다.
메인 프로세서(1101)는 전자 시스템(1000)의 전반적인 동작들을 제어할 수 있다. 예로서, 메인 프로세서(1101)는 하나 이상의 프로세서 코어를 포함하는 범용 프로세서, 전용 프로세서, 또는 어플리케이션 프로세서로 구현될 수 있다.
워킹 메모리(1200)는 전자 시스템(1000)의 동작에 이용되는 데이터(예컨대, 메인 프로세서(1101)에 의해 처리된 또는 처리될 데이터)를 저장할 수 있다. 예로서, 워킹 메모리(1200)는 SRAM(Static Random Access Memory), DRAM(Dynamic RAM), SDRAM(Synchronous RAM) 등과 같은 휘발성 메모리, 및/또는 PRAM(Phase-change RAM), MRAM(Magneto-resistive RAM), ReRAM(Resistive RAM), FRAM(Ferro-electric RAM) 등과 같은 불휘발성 메모리를 포함할 수 있다.
스토리지 장치(1300)는 전력이 공급됨에 관계없이 데이터를 보존할 수 있다. 예로서, 스토리지 장치(1300)는 플래시 메모리, PRAM, MRAM, ReRAM, FRAM 등과 같은 불휘발성 메모리를 포함할 수 있고, SSD(Solid State Drive), 카드 스토리지, 임베디드(Embedded) 스토리지 등과 같은 스토리지 매체로 구현될 수 있다.
통신 블록(1400)은 전자 시스템(1000)의 외부와 통신할 수 있다. 유저 인터페이스(1500)는 사용자와 전자 시스템(1000) 사이의 통신을 중재할 수 있다.
버스(1900)는 전자 시스템(1000)의 구성 요소들 사이에서 통신 경로를 제공할 수 있다. 전자 시스템(1000)의 구성 요소들은 버스(1900)의 버스 포맷에 따라 데이터를 교환할 수 있다. 예로서, 버스 포맷은 USB(Universal Serial Bus), Firewire, SCSI(Small Computer System Interface), PCIe(Peripheral Component Interconnect Express), M-PCIe(Mobile PCIe), SATA(Serial Advanced Technology Attachment), SAS(Serial Attached SCSI), NVMe(Nonvolatile Memory Express), UFS(Universal Flash Storage), DDR(Double Data Rate), LPDDR(Low Power DDR) 등의 다양한 인터페이스 프로토콜 중 하나 이상을 포함할 수 있다.
스토리지 장치(1300)는 버스(1900)를 통해 호스트로부터 수신되는 커맨드 또는 요청에 응답하여, 호스트를 위해 스토리지 서비스를 제공할 수 있다. 본 개시에서, 스토리지 장치(1300)와 같은 전자 시스템(1000)의 구성 요소로 접근할 수 있는 객체는 "호스트"로 불릴 수 있다.
예로서, 메인 프로세서(1101)는 버스(1900)를 통해 스토리지 장치(1300)와 통신할 수 있고, 스토리지 장치(1300)는 메인 프로세서(1101)를 위해 스토리지 서비스를 제공할 수 있다. 메인 프로세서(1101)는 호스트로서 동작할 수 있는 객체들의 한 예일 수 있으나, 통신 블록(1400), 유저 인터페이스(1500), GPU(Graphic Processing Unit), 이미지 센서 등과 같은 다른 장치 역시 호스트로서 동작할 수 있다.
예로서, 호스트는 쓰기 요청을 포함하는 커맨드 및 쓰기 데이터를 포함하는 데이터를 스토리지 장치(1300)로 제공할 수 있다. 스토리지 장치(1300)는 쓰기 요청에 응답하여, 요청된 쓰기 데이터를 저장할 수 있다. 예로서, 호스트는 읽기 요청을 포함하는 커맨드를 스토리지 장치(1300)로 제공할 수 있다. 스토리지 장치(1300)는 읽기 요청에 응답하여, 요청된 읽기 데이터를 호스트로 출력할 수 있다.
스토리지 장치(1300)는 스토리지 서비스를 제공하기 위해 하나 이상의 메모리 장치(1310) 및 컨트롤러(1330)를 포함할 수 있다. 메모리 장치(1310)는 호스트에 의해 요청되는 데이터를 저장하거나 출력할 수 있다.
컨트롤러(1330)는 스토리지 장치(1300)의 전반적인 동작들을 제어할 수 있다. 컨트롤러(1330)는 메모리 장치(1310)가 데이터를 저장하거나 출력하도록 메모리 장치(1310)를 제어할 수 있다. 컨트롤러(1330)는 주어진 프로토콜에 따라 호스트와 통신되는 데이터(예컨대, 호스트로부터 수신되는 요청)를 적합하게 처리할 수 있다. 컨트롤러(1330)는 본 개시에서 설명되는 동작들을 수행하도록 구성되는 하나 이상의 하드웨어 구성 요소(예컨대, 아날로그 회로, 논리 회로 등)를 포함할 수 있다.
몇몇 실시 예에서, 컨트롤러(1330)는 하나 이상의 프로세서 코어를 포함할 수 있다. 본 개시에서 설명되는 컨트롤러(1330)의 동작들은 소프트웨어 및/또는 펌웨어의 프로그램 코드로 구현될 수 있고, 컨트롤러(1330)의 프로세서 코어는 프로그램 코드의 명령어 집합을 실행할 수 있다. 컨트롤러(1330)의 프로세서 코어는 명령어 집합을 실행하기 위해 다양한 산술/논리 연산을 처리할 수 있다.
도 2는 몇몇 실시 예에 따른 네트워크 시스템(2000)의 예시적인 구성을 보여주는 블록도이다.
네트워크 시스템(2000)은 호스트(2100) 및 스토리지 장치(2300)를 포함할 수 있다. 스토리지 장치(2300)는 네트워크(2005)를 통해 호스트(2100)로 연결될 수 있다. 본 개시는 도 2의 도시로 한정되지 않고, 하나 이상의 추가 구성 요소가 네트워크(2005)를 통해 호스트(2100) 및/또는 스토리지 장치(2300)로 연결될 수 있다.
호스트(2100)는 스토리지 장치(2300)와 같은 네트워크 시스템(2000)의 구성 요소로 접근할 수 있는 객체일 수 있다. 예로서, 호스트(2100)는 연산 처리 장치(예컨대, 도 1의 메인 프로세서(1101)와 같은 장치) 자체일 수 있고, 또는 연산 처리 장치를 포함하는 컴퓨팅 장치 또는 시스템일 수 있다. 스토리지 장치(2300)는 도 1의 스토리지 장치(1300)에 대응할 수 있고, 호스트(2100)를 위해 스토리지 서비스를 제공할 수 있다.
네트워크(2005)는 근거리 또는 원거리의 네트워크 시스템(2000)의 구성 요소들(예컨대, 호스트(2100) 및 스토리지 장치(2300)) 사이에서 다양한 유선 프로토콜(예컨대, 이더넷(Ethernet), USB, Firewire, PCIe, NVMe, SATA, SAS 등) 및/또는 다양한 무선 프로토콜(예컨대, LTE(Long Term Evolution), GSM(Global System for Mobile communications), WIMAX(Worldwide Interoperability for Microwave Acess), UWB(Ultra-wideband), Wi-Fi(Wireless Fidelity), NFC(Near Field Communication), Bluetooth 등) 중 적어도 하나에 따른 통신 경로를 제공할 수 있다.
예로서, 네트워크 시스템(2000)은 서버, 데이터 센터, 분산 컴퓨팅 시스템, 클라우드(Cloud) 스토리지 등과 같은 전자 시스템들 중 하나를 구성할 수 있다. 또는, 네트워크 시스템(2000)은 단일 전자 장치로 구현될 수 있다. 본 개시는 이 예들로 한정되지 않고, 네트워크 시스템(2000)은 네트워크(2005)를 통해 연결되는 구성 요소들을 포함하기 위해 다양하게 변경 또는 수정될 수 있다.
도 1 및 도 2를 참조하여 설명된 것처럼, 전자 시스템(1000) 및 네트워크 시스템(2000)의 구성 요소들 사이의 통신을 가능하게 하기 위한 다양한 프로토콜이 있을 수 있다. 각 구성 요소 또는 장치는 그 구성 요소 또는 장치에 의해 채용된 프로토콜에 따라 동작할 수 있고, 이를 위해, 그 프로토콜에 의해 정의되는 처리 절차들을 수행하도록 구성되는 하드웨어 자원들(예컨대, 물리 계층의 아날로그 회로들, 논리 계층의 논리 회로들, 응용 계층을 다루는 프로세서 등)을 포함할 수 있다.
그러나, 하드웨어 자원들에 대한 비용, 회로 면적 등과 같은 한계들에 기인하여, 하나의 전자 장치가 모든 종류들의 프로토콜을 지원하는 것은 어려울 수 있다. 이러한 이유에 기인하여, 몇몇 전자 장치는 채용된 프로토콜에 따라서만 동작할 수 있고, 채용되지 않은 프로토콜들을 지원하지 못할 수 있다. 프로토콜들의 유형들 및 종류들이 다양하게 개발되고 진화함에 따라, 다양한 프로토콜을 지원하지 못하는 전자 장치의 활용성이 저하될 수 있다.
본 개시의 실시 예들은 전자 장치의 외부로부터 수신되는 요청들에 따라 복수의 프로토콜을 적응적(Adaptive)으로 지원하는 전자 장치를 제공할 수 있다. 예로서, 실시 예들에 따른 스토리지 장치(1300 또는 2300)는 호스트와 통신되는 데이터를 처리하는 데에 적합한 프로토콜을 적응적으로 지원하도록 구성될 수 있다. 따라서, 스토리지 장치(1300 또는 2300)는 호스트에 의해 요구되는 프로토콜의 종류에 관계없이 호스트와 적합하게 통신할 수 있고, 활용성이 향상될 수 있다.
스토리지 장치(1300 또는 2300)와 관련되는 실시 예들이 도 3 내지 도 28을 참조하여 설명될 것이다. 그러나, 본 개시는 여기에 한정되지 않고 어떠한 유형의 장치에든 적용될 수 있다. 예로서, 실시 예들은 워킹 메모리(1200), 메인 프로세서(1101), 및 호스트(2100)를 위해서도 채용될 수 있다. 아래의 설명들은 더 나은 이해를 가능하게 하기 위해 제공되고, 본 개시를 한정하도록 의도되지 않는다.
도 3은 도 1 또는 도 2의 스토리지 장치(1300 또는 2300)와 관련되는 예시적인 구성을 보여주는 블록도이다. 몇몇 실시 예에서, 도 1 또는 도 2의 스토리지 장치(1300 또는 2300)는 도 3의 스토리지 장치(3000)를 포함할 수 있다.
스토리지 장치(3000)는 호스트(100)를 위해 스토리지 서비스를 제공할 수 있다. 호스트(100)는 스토리지 장치(3000)의 외부로부터 스토리지 장치(3000)로 접근할 수 있는 객체일 수 있다. 스토리지 장치(3000)는 하나 이상의 메모리 장치(3100) 및 컨트롤러(3300)를 포함할 수 있다. 컨트롤러(3300)는 호스트 인터페이스 회로(3310), 프로토콜 적응적 엔진(3320), 및 메모리 인터페이스 회로(3390)를 포함할 수 있다.
호스트 인터페이스 회로(3310)는 스토리지 장치(3000)의 외부와의 통신(예컨대, 호스트(100)와의 통신)을 가능하게 할 수 있다. 호스트 인터페이스 회로(3310)는 송신기/수신기, 이퀄라이저(Equalizer), CDR(Clock and Data Recovery) 회로, 변조기/복조기 등과 같은 아날로그 회로들을 포함하는 물리 계층에 대응할 수 있다. 메모리 인터페이스 회로(3390)는 메모리 장치(3100)에 저장될 데이터를 메모리 장치(3100)로 제공할 수 있고, 메모리 장치(3100)로부터 출력되는 데이터를 수신할 수 있다.
프로토콜 적응적 엔진(3320)은 호스트 인터페이스 회로(3310)와 메모리 인터페이스 회로(3390) 사이의 논리 계층에 대응할 수 있다. 프로토콜 적응적 엔진(3320)은 호스트 인터페이스 회로(3310)의 출력을 메모리 인터페이스 회로(3390)에 의해 요구되는 구성으로 변환하고 메모리 인터페이스 회로(3390)의 출력을 호스트 인터페이스 회로(3310)에 의해 요구되는 구성으로 변환하기 위해 논리 연산들을 수행할 수 있다.
프로토콜 적응적 엔진(3320)은 호스트(100)로부터 수신되는 요청들에 따라 복수의 프로토콜을 적응적으로 지원하기 위해 채용될 수 있다. 예로서, 제 1 요청이 제 1 프로토콜에 따라 호스트 인터페이스 회로(3310)에 의해 수신되는 경우, 프로토콜 적응적 엔진(3320)은 제 1 프로토콜과 관련되는 논리 연산들을 수행할 수 있다.
반면, 제 2 요청이 제 1 프로토콜과 상이한 제 2 프로토콜에 따라 호스트 인터페이스 회로(3310)에 의해 수신되는 경우, 프로토콜 적응적 엔진(3320)은 제 2 프로토콜과 관련되는 논리 연산들을 수행할 수 있다. 다시 말해, 프로토콜 적응적 엔진(3320)은 호스트(100)에 의해 요구되는 프로토콜의 유형 또는 종류에 응답하여 적응적으로 프로토콜을 지원할 수 있다.
새로운 프로토콜이 제안되거나 기존 프로토콜의 수정(Revision)이 요구되더라도, 프로토콜 적응적 엔진(3320)은 능동적으로 새로운 또는 수정된 프로토콜을 지원할 수 있다. 따라서, 스토리지 장치(3000)는 어떤 호스트와도 통신할 수 있고, 스토리지 장치(3000)의 활용성이 향상될 수 있다.
나아가, 복수의 프로토콜이 프로토콜 적응적 엔진(3320)만으로 지원될 수 있고, 다양한 프로토콜을 지원하는 데에 추가의 하드웨어 자원이 요구되지 않을 수 있다. 예로서, 컨트롤러(3300)는, 제 1 프로토콜과 관련되는 논리 연산들을 수행하는 논리 회로들 및 제 2 프로토콜과 관련되는 논리 연산들을 수행하는 별개의 논리 회로들을 포함하는 대신, 프로토콜 적응적 엔진(3320)만을 이용하여 제 1 프로토콜 및 제 2 프로토콜 모두를 지원할 수 있다. 따라서, 프로토콜 적응적 엔진(3320)을 채용하는 것은 비용 및 회로 면적의 관점에서 유익할 수 있다.
도 4는 도 3의 컨트롤러(3300)와 관련되는 예시적인 구성을 보여주는 블록도이다. 몇몇 실시 예에서, 도 3의 컨트롤러(3300)는 도 4의 컨트롤러(3300a)를 포함할 수 있다.
도 3의 프로토콜 적응적 엔진(3320)은 도 4의 프로토콜 적응적 엔진(3320a)을 포함할 수 있다. 몇몇 실시 예에서, 프로토콜 적응적 엔진(3320a)은 프로토콜 관리기(3321) 및 프로그래머블 로직 장치(Programmable Logic Device, PLD)(3322)를 포함할 수 있다.
호스트 인터페이스 회로(3310)는 호스트(100)로부터 신호(SIN)를 수신할 수 있다. 예로서, 호스트(100)는 호스트(100)에 의해 의도되는 요청, 응답, 및/또는 데이터를 스토리지 장치(3000)로 제공하기 위해 스토리지 장치(3000)로 신호(SIN)를 송신할 수 있다. 신호(SIN)는 호스트(100)에 의해 요구되는 프로토콜과 관련하여 수신될 수 있다.
호스트 인터페이스 회로(3310)는 신호(SIN)에 기초하여, 프로토콜 적응적 엔진(3320)에서 처리될 수 있는 패킷(DIN)을 출력할 수 있다. 패킷(DIN)은 신호(SIN)로부터 얻어질 수 있고, 따라서 호스트(100)에 의해 의도되는 요청, 응답, 및/또는 데이터를 포함할 수 있다. 패킷(DIN)은 프로토콜 관리기(3321) 및 프로그래머블 로직 장치(3322)로 제공될 수 있다.
여기서, "패킷"이라는 용어는 더 나은 이해를 가능하게 하기 위해 제공되고, 패킷(DIN)의 형태를 한정하도록 의도되지 않는다. 패킷(DIN)은 호스트(100)에 의해 의도되는 요청, 응답, 및/또는 데이터를 지시하기 위해 패킷, 데이터, 심볼, 전압 레벨, 비트 값 등의 형태를 갖도록 다양하게 변경 또는 수정될 수 있다.
프로토콜 관리기(3321)는 패킷(DIN)에 기초하여, 스토리지 장치(3000)의 외부로부터(예컨대, 호스트(100)로부터) 수신되는 요청(예컨대, 신호(SIN)에 대응하여 패킷(DIN)에 포함되는 요청)에 대응하는 프로토콜을 판별할 수 있다. 패킷(DIN)은 프로토콜을 판별하기 위해 참조될 수 있고, 이는 도 7을 참조하여 설명될 것이다.
프로그래머블 로직 장치(3322)는 복수의 프로토콜을 적응적으로 지원하기 위해 재구성 가능(Reconfigurable)할 수 있다. 예로서, 프로그래머블 로직 장치(3322)는 이미지 파일(Image File) 또는 외부 제어에 따라 유연하게 프로그램 가능한 장치(예컨대, CPLD(Complex Programmable Logic Device), FPGA(Field Programmable Gate Array), eFPGA(Embedded FPGA) 등)로 구현될 수 있다.
예로서, 프로그래머블 로직 장치(3322)는 제 1 구성 데이터(Configuration Data)(또는 제 1 이미지 파일)에 기초하여 제 1 상태로 프로그램될 수 있다. 제 1 상태에서, 프로그래머블 로직 장치(3322)는 제 1 프로토콜을 지원하기 위한 논리 연산들을 수행할 수 있다. 예로서, 프로그래머블 로직 장치(3322)가 FPGA로 구현되는 경우, 프로그래머블 로직 장치(3322)의 프로그램은 FPGA가 특정 입력에 기초하여 의도된 출력을 생성하도록 FPGA의 논리 게이트들 및 LUT(Lookup Table)들을 적합하게 배열 및 연결하는 것을 의미할 수 있다.
예로서, 프로그래머블 로직 장치(3322)는 제 2 구성 데이터(또는 제 2 이미지 파일)에 기초하여 제 2 상태로 프로그램될 수 있다. 제 2 상태에서, 프로그래머블 로직 장치(3322)는 제 1 프로토콜과 상이한 제 2 프로토콜을 지원하기 위한 논리 연산들을 수행할 수 있다.
프로그래머블 로직 장치(3322)는 제 1 상태로부터 제 2 상태로 또는 제 2 상태로부터 제 1 상태로 재구성될 수 있다. 따라서, 프로그래머블 로직 장치(3322)는 제 1 프로토콜 및 제 2 프로토콜 모두를 지원할 수 있다.
프로토콜 관리기(3321)는 프로그래머블 로직 장치(3322)가 프로토콜 관리기(3321)에 의해 판별된 프로토콜을 지원하기 위한 상태로 프로그램되도록 프로그래머블 로직 장치(3322)의 프로그램을 직접 또는 간접적으로 제어할 수 있다. 예로서, 제 1 프로토콜이 요구되는 것으로 판별된 경우, 프로토콜 관리기(3321)는 프로그래머블 로직 장치(3322)의 제 1 상태로의 프로그램을 제어할 수 있다.
따라서, 프로그래머블 로직 장치(3322)가 프로토콜 관리기(3321)의 제어에 따라 호스트(100)의 요청에 기초하여(예컨대, 신호(SIN) 또는 패킷(DIN)에 기초하여) 의도되는 프로토콜을 지원하도록 프로그램되거나 재구성되는 것으로 이해될 수 있다. 프로그래머블 로직 장치(3322)가 재구성 가능함에 따라, 프로그래머블 로직 장치(3322)는 스토리지 장치(3000)의 외부로부터 수신되는 요청들에 따라 복수의 프로토콜을 적응적으로 지원할 수 있다.
프로그래머블 로직 장치(3322)는 패킷(DIN)에 대해 논리 연산들을 수행할 수 있다. 논리 연산들은 프로그래머블 로직 장치(3322)의 프로그램된 상태에 의해 지원되는 프로토콜에 따라 수행될 수 있다. 따라서, 프로그래머블 로직 장치(3322)는 복수의 프로토콜 중 프로그램된 상태에 대응하는 프로토콜에 따라 호스트(100)의 요청들을 처리할 수 있다.
프로그래머블 로직 장치(3322)가 채용됨에 따라, 컨트롤러(3300a)는 호스트(100)의 요청에 기초하여 다양한 프로토콜에 따라 동작할 수 있다(예컨대, 호스트(100)의 요청을 처리할 수 있다). 컨트롤러(3300a)는, 메모리 장치(3100)가 호스트(100)의 요청에 대응하는 데이터를 저장하거나 출력하도록, 호스트(100)의 요청에 기초하여 메모리 인터페이스 회로(3390)를 통해 메모리 장치(3100)와 통신할 수 있다.
몇몇 실시 예에서, 프로토콜 관리기(3321)는 패킷(DIN)에 기초하여 적합한 프로토콜을 판별하고 프로그래머블 로직 장치(3322)의 프로그램을 제어하기 위해 논리 연산들을 수행할 수 있는 하드웨어 회로(예컨대, 논리 회로)로 구현될 수 있다.
몇몇 실시 예에서, 프로토콜 관리기(3321)의 논리 연산들의 일부 또는 전부는 소프트웨어 또는 펌웨어의 프로그램 코드로 구현될 수 있고, 컨트롤러(3300)에 포함되는 프로세서 코어에 의해 실행될 수 있다. 프로토콜 관리기(3321)의 하드웨어 회로 및 컨트롤러(3300)의 프로세서는 논리 연산들을 수행하도록 구성되는 연산 회로로서 이해될 수 있다.
도 5는 도 4의 컨트롤러(3300a)의 예시적인 동작을 설명하는 흐름도이다.
전력이 스토리지 장치(3000)로 공급되는 경우, 컨트롤러(3300a)는 전력에 기초하여 동작하기 시작할 수 있다(파워-온(Power-on))(S110). 또는, 컨트롤러(3300a)가 오류 또는 장애를 해소하거나 장치를 보호하기 위해 리셋되었던 경우(예컨대, 꺼진 뒤 다시 켜졌던 경우), 전력이 컨트롤러(3300a)로 계속 공급될 수 있다(파워-온).
프로그래머블 로직 장치(3322)로의 전력 공급이 중단되는 경우, 프로그래머블 로직 장치(3322)의 기존의 프로그램된 상태가 소실될 수 있다. 컨트롤러(3300a)의 파워-온에 응답하여, 연산 회로(예컨대, 프로토콜 관리기(3321))는 프로그래머블 로직 장치(3322)의 초기화를 트리거할 수 있다(S120). 트리거에 응답하여, 프로그래머블 로직 장치(3322)는 디폴트 상태로 프로그램되거나 초기 상태로 진입할 수 있다(S130).
예로서, 리셋 신호(예컨대, 전력 공급이 시작되거나 재개된 후의 POR(Power-on Reset) 신호, 오류 또는 장애가 발생한 후의 컨트롤러 리셋 신호 등)가 프로그래머블 로직 장치(3322)의 디폴트 상태 또는 초기 상태를 트리거하기 위해 이용될 수 있다. 프로토콜 관리기(3321)는 리셋 신호에 기초하여 프로그래머블 로직 장치(3322)의 초기화를 제어할 수 있다. 다만, 프로그래머블 로직 장치(3322)의 초기화는 다른 신호에 기초하여 트리거될 수 있고, 본 개시는 이 예로 한정되지 않는다.
도 6은 도 4의 컨트롤러(3300a)의 예시적인 동작을 설명하는 흐름도이다.
컨트롤러(3300a)는 호스트 인터페이스 회로(3310)를 통해 호스트(100)로부터 복수의 프로토콜 중 의도되는 프로토콜에 따라 요청(예컨대, 신호(SIN)에 대응하여 패킷(DIN)에 포함되는 요청)을 수신할 수 있다(S210). 프로토콜 관리기(3321)는 패킷(DIN)에 기초하여, 수신되는 요청에 대응하는 프로토콜을 판별할 수 있다(S220).
판별된 프로토콜이 지원되지 않는 경우(S230의 No), 컨트롤러(3300a)는 호스트(100)로 오류 보고를 출력할 수 있다(S235). 프로그래머블 로직 장치(3322)가 판별된 프로토콜을 지원할 수 있는 경우(S230의 Yes), 프로토콜 관리기(3321)는 프로그래머블 로직 장치(3322)의 현재 프로그램된 상태가 판별된 프로토콜에 대응하는지 또는 프로토콜의 변경이 요구되는지를 판별할 수 있다(S240).
프로토콜의 변경이 요구되지 않는 경우(S240의 No), 컨트롤러(3300a)는 프로그래머블 로직 장치(3322)의 현재 프로그램된 상태에 기초하여 호스트(100)와 통신을 계속할 수 있다(S245). 프로토콜의 변경이 요구되는 경우(S240의 Yes), 프로그래머블 로직 장치(3322)는 프로토콜 관리기(3321)의 제어에 따라 구성 데이터를 획득할 수 있다(S250).
프로그래머블 로직 장치(3322)는 구성 데이터에 기초하여, 현재 프로그램된 상태로부터 판별된 프로토콜에 대응하는 새로운 상태로 재구성될 수 있다(S260). 프로그래머블 로직 장치(3322)가 새로운 상태로 프로그램됨에 따라, 프로그래머블 로직 장치(3322)는 판별된 프로토콜을 지원할 수 있다.
예로서, 제 1 프로토콜과 관련하여 제 1 요청이 수신되는 경우, 프로그래머블 로직 장치(3322)는 제 1 요청에 기초하여 제 1 프로토콜을 지원하기 위한 제 1 상태로 프로그램될 수 있다. 프로그래머블 로직 장치(3322)가 제 1 상태로 프로그램된 후, 제 2 요청이 제 1 프로토콜과 상이한 제 2 프로토콜과 관련하여 호스트(100)로부터 수신될 수 있다. 프로토콜 관리기(3321)는 제 2 요청에 기초하여 프로그래머블 로직 장치(3322)가 제 2 프로토콜을 지원하기 위한 제 2 상태로 프로그램되도록 프로그래머블 로직 장치(3322)의 프로그램을 제어할 수 있다. 따라서, 프로그래머블 로직 장치(3322)가 제 1 상태로부터 제 2 상태로 재구성될 수 있다.
이처럼, 호스트(100)로부터 수신되는 요청에 대응하는 프로토콜이 변경되는 경우, 프로그래머블 로직 장치(3322)는 변경된 프로토콜을 지원하기 위해 재구성될 수 있다. 그러나, 실시 예들은 변경된 프로토콜을 지원하는 추가 하드웨어 자원을 요구하지 않을 수 있다. 구성 데이터를 획득하고 재구성을 수행하는 과정들은 도 8 내지 도 12를 참조하여 설명될 것이다.
몇몇 실시 예에서, 프로그래머블 로직 장치(3322)의 재구성은 프로그래머블 로직 장치(3322)의 설정들(예컨대, FPGA의 논리 게이트들 및 LUT들의 배열 및 연결) 중 일부에 대해 부분적으로 수행될 수 있다. 프로그래머블 로직 장치(3322)는 새롭게 프로그램될 것이 요구되는 몇몇 설정들에 대해서만 재구성을 수행할 수 있다. 이 실시 예들에서, 재구성에 소요되는 시간이 단축될 수 있다.
예로서, 제 2 상태에서의 프로그래머블 로직 장치(3322)의 설정들은 제 1 상태에서의 프로그래머블 로직 장치(3322)의 대응하는 설정들과 동일한 제 1 설정들 및 제 1 상태에서의 프로그래머블 로직 장치(3322)의 대응하는 설정들과 상이한 제 2 설정들을 포함할 수 있다. 재구성 이후의 제 1 설정들은 재구성 이전의 제 1 설정들과 동일할 수 있고, 재구성 이후의 제 2 설정들은 재구성 이전의 제 2 설정들과 상이할 수 있다. 이 경우, 재구성 동안, 제 1 설정들은 새롭게 프로그램되지 않아도 좋을 수 있고, 제 2 설정들은 새롭게 프로그램될 것이 요구될 수 있다. 예로서, 제 1 상태로부터 제 2 상태로의 재구성은 제 1 설정들의 변경 없이 제 2 설정들에 대해서만 수행될 수 있다(부분적 재구성).
프로그래머블 로직 장치(3322)가 새로운 상태로 프로그램되는 동안(재구성), 프로그래머블 로직 장치(3322)는 호스트(100)의 요청을 처리하지 못할 수 있다. 따라서, 몇몇 경우, 재구성이 완료된 후, 호스트(100)의 요청 또는 패킷(DIN)을 처리하는 데에 데이터 동기화가 요구될 수 있고(S270의 Yes), 호스트(100)의 요청 또는 패킷(DIN)을 적합한 타이밍에 처리하기 위해 데이터 동기화가 수행될 수 있다(S275).
데이터 동기화가 요구되지 않는 경우(S270의 No) 또는 데이터 동기화가 완료된 후, 컨트롤러(3300a)는 프로그래머블 로직 장치(3322)의 재구성된 새로운 상태에 기초하여 호스트(100)와 통신할 수 있다(S280). 컨트롤러(3300a)는 메모리 장치(3100)가 변경된 프로토콜과 관련하여 수신되는 요청에 대응하는 데이터를 저장하거나 출력하도록 메모리 장치(3100)를 제어할 수 있다.
도 7은 도 4의 프로토콜 관리기(3321)의 예시적인 동작을 설명하기 위한 개념도이다.
예로서, 패킷(DIN)은 헤더, 데이터, 및 테일을 포함하는 패킷의 형태를 가질 수 있다. 예로서, 패킷(DIN)의 헤더는 다양한 정보를 포함하는 필드들(FDs)을 포함할 수 있다. 그러나, 패킷(DIN)의 형태는 도 7의 예로 한정되지 않고 다양하게 변경 또는 수정될 수 있음이 잘 이해될 것이다.
필드들(FDs)의 구성, 배열, 정보 등의 속성들은 프로토콜들 각각마다 상이할 수 있다. 예컨대, 제 1 프로토콜과 관련되는 필드들(FDs)의 속성들은 제 2 프로토콜과 관련되는 필드들(FDs)의 속성들과 상이할 수 있다. 프로토콜 관리기(3321)는 필드들(FDs)의 속성들을 참조하여, 패킷(DIN)에 대응하는 프로토콜을 판별할 수 있다.
몇몇 예에서, 필드들(FDs)은 패킷(DIN)에 대응하는 프로토콜을 지시하는 프로토콜 정보 필드(PN)를 포함할 수 있다. 이 경우, 프로토콜 관리기(3321)는 프로토콜 정보 필드(PN)를 참조하여, 패킷(DIN)에 대응하는 프로토콜을 판별할 수 있다. 그러나, 프로토콜을 판별하는 것은 여기에 한정되지 않고, 패킷(DIN)에 대응하는 프로토콜을 적응적으로 지원하기 위해 다양하게 변경 또는 수정될 수 있다.
도 8은 도 4의 컨트롤러(3300a)를 포함하는 도 3의 스토리지 장치(3000)의 예시적인 동작을 설명하기 위한 개념도이다.
프로토콜 관리기(3321)는 호스트 인터페이스 회로(3310)로부터 패킷(DIN)을 수신할 수 있다(동작 [01]). 몇몇 실시 예에서, 프로토콜 관리기(3321)는 호스트(100)로부터 수신된 요청에 대응하는 프로토콜을 패킷(DIN)이 수신될 때마다 판별할 수 있다. 프로토콜 관리기(3321)는 프로그래머블 로직 장치(3322)가 판별된 프로토콜을 지원하기 위해 새로운 상태로 프로그램되어야 함을 판별할 수 있다.
몇몇 실시 예에서, 메모리 장치(3100)가 구성 데이터(CD1, CD2)를 저장할 수 있다. 프로토콜 관리기(3321)는 판별된 프로토콜을 지원하기 위한 상태로 프로그래머블 로직 장치(3322)를 프로그램하기 위한 구성 데이터가 메모리 장치(3100)로부터 출력되도록 제어 신호를 출력할 수 있다(동작 [02]).
출력된 구성 데이터는 프로토콜 관리기(3321)를 통해 프로그래머블 로직 장치(3322)로 로드되거나 프로그래머블 로직 장치(3322)로 직접 로드될 수 있다(동작 [03]). 따라서, 프로토콜 관리기(3321)는 프로그래머블 로직 장치(3322)의 프로그램 또는 재구성을 직접 또는 간접적으로 제어할 수 있다.
프로그래머블 로직 장치(3322)는 구성 데이터에 기초하여, 판별된 프로토콜을 지원하기 위한 상태로 재구성될 수 있다. 프로그래머블 로직 장치(3322)는 판별된 프로토콜에 대응하는 논리 연산들을 패킷(DIN)에 대해 수행할 수 있다(동작 [04]).
따라서, 컨트롤러(3300a)는 호스트(100)의 요청을 처리할 수 있고, 메모리 인터페이스(3390)를 통해 메모리 장치(3100)와 통신할 수 있다(동작 [05]). 메모리 장치(3100)는 호스트(100)의 요청에 대응하는 데이터를 저장하거나 출력할 수 있다.
이처럼, 컨트롤러(3300a)는 프로그래머블 로직 장치(3322)가 구성 데이터에 기초하여 프로그램되도록 메모리 장치(3100)로부터 구성 데이터를 수신할 수 있다. 예로서, 컨트롤러(3300a)가 제 1 프로토콜에 따라 동작하도록 구성된 동안 제 1 프로토콜과 상이한 제 2 프로토콜과 관련되는 요청이 수신되는 경우, 컨트롤러(3300a)와 메모리 장치(3100) 사이의 트랜잭션이 수신된 요청에 기초하여 수행될 수 있다. 이 트랜잭션은 메모리 장치(3100)로부터 구성 데이터를 읽기 위해 수행될 수 있다.
트랜잭션 후, 프로그래머블 로직 장치(3322)의 재구성이 수행될 수 있다. 따라서, 트랜잭션이 수행되고 재구성을 위한 시간이 지난 후, 컨트롤러(3300a)가 수신된 요청을 제 2 프로토콜에 따라 처리하기 시작할 수 있다. 컨트롤러(3300a)의 동작은 수신된 요청을 제 2 프로토콜에 따라 처리하기 위해 구성 데이터에 기초하여 변경될 수 있다.
도 9는 도 4의 컨트롤러(3300a)를 포함하는 도 3의 스토리지 장치(3000)의 예시적인 동작을 설명하기 위한 개념도이다.
프로그래머블 로직 장치(3322)는 패킷(DIN)을 수신할 수 있다(동작 [11]). 몇몇 경우, 프로그래머블 로직 장치(3322)의 현재 프로그램된 상태는 패킷(DIN)을 처리하지 못할 수 있다. 프로그래머블 로직 장치(3322)는 처리 실패를 프로토콜 관리기(3321)에게 알릴 수 있다(동작 [12]).
몇몇 실시 예에서, 프로토콜 관리기(3321)는 처리 실패의 알림에 응답하여, 패킷(DIN)에 기초하여 호스트(100)로부터 수신된 요청에 대응하는 프로토콜을 판별할 수 있다(동작 [13]). 프로토콜 관리기(3321)는 구성 데이터가 메모리 장치(3100)로부터 출력되도록 제어 신호를 출력할 수 있다(동작 [14]).
출력된 구성 데이터는 프로그래머블 로직 장치(3322)로 로드될 수 있다(동작 [15]). 프로그래머블 로직 장치(3322)는 구성 데이터에 기초하여, 판별된 프로토콜을 지원하기 위한 상태로 재구성될 수 있다. 따라서, 컨트롤러(3300a)는 호스트(100)의 요청을 처리할 수 있고 메모리 장치(3100)와 통신할 수 있다(동작 [16]).
도 10은 도 4의 컨트롤러(3300a)를 포함하는 도 3의 스토리지 장치(3000)의 예시적인 동작을 설명하기 위한 개념도이다. 몇몇 실시 예에서, 도 4의 컨트롤러(3300a)는 도 10의 컨트롤러(3300b)를 포함할 수 있다. 컨트롤러(3300b)는 프로세서(3330) 및 내부 메모리(3340)를 포함할 수 있다.
프로토콜 관리기(3321)는 패킷(DIN)을 수신할 수 있고(동작 [21]), 패킷(DIN)에 기초하여 호스트(100)로부터 수신된 요청에 대응하는 프로토콜을 판별할 수 있다. 프로토콜 관리기(3321)는 판별된 프로토콜의 정보를 포함하는 알림(NTF)을 프로세서(3330)로 제공할 수 있다(동작 [22]).
프로세서(3330)는 프로세서(3330)에 포함되는 하나 이상의 프로세서 코어 상에서 소프트웨어(SW) 및/또는 펌웨어(FW)를 실행하여 다양한 연산을 수행할 수 있다. 몇몇 실시 예에서, 내부 메모리(3340)가 구성 데이터(CD1, CD2)를 저장할 수 있다. 프로세서(3330)는 구성 데이터가 내부 메모리(3340)로부터 출력되도록 제어 신호를 출력할 수 있다(동작 [23]).
프로세서(3330)는 내부 메모리(3340)로부터 출력되는 구성 데이터를 얻을 수 있고(동작 [24]), 프로그래머블 로직 장치(3322)가 구성 데이터에 기초하여 판별된 프로토콜을 지원하기 위한 상태로 재구성되도록 프로그래머블 로직 장치(3322)를 제어할 수 있다(동작 [25]).
재구성이 완료된 후, 프로그래머블 로직 장치(3322)는 판별된 프로토콜에 대응하는 논리 연산들을 패킷(DIN)에 대해 수행할 수 있다(동작 [26]). 따라서, 컨트롤러(3300a)는 호스트(100)의 요청을 처리할 수 있고, 메모리 장치(3100)와 통신할 수 있다(동작 [27]).
도 10의 실시 예에서, 프로토콜 관리기(3321)는 프로토콜 판별에 특화될 수 있고, 프로세서(3330)가 프로그래머블 로직 장치(3322)의 재구성을 제어할 수 있다. 다른 실시 예들에서, 프로토콜 관리기(3321) 없이, 프로세서(3330)가 소프트웨어(SW) 및/또는 펌웨어(FW)를 실행하여 프로토콜 판별을 수행할 수 있다.
도 11은 도 4의 컨트롤러(3300a)를 포함하는 도 3의 스토리지 장치(3000)의 예시적인 동작을 설명하기 위한 개념도이다.
프로토콜 관리기(3321)는 패킷(DIN)을 수신할 수 있고(동작 [31]), 패킷(DIN)에 기초하여 호스트(100)로부터 수신된 요청에 대응하는 프로토콜을 판별할 수 있다. 몇몇 경우, 프로토콜 관리기(3321)는 판별된 프로토콜을 지원하기 위해 이용되는 구성 데이터(CD3)가 스토리지 장치(3000)에 저장되어 있지 않음을 판별할 수 있다.
몇몇 실시 예에서, 프로토콜 관리기(3321)는 프로그래머블 로직 장치(3322)의 재구성에 요구되는 구성 데이터를 제공해줄 것을 호스트(100)에게 능동적으로 요청할 수 있다(동작 [32]). 예로서, 프로토콜 관리기(3321)는 판별된 프로토콜을 지원하기 위한 상태로 프로그래머블 로직 장치(3322)를 프로그램하기 위한 구성 데이터가 호스트(100)로부터 수신되도록 제어 신호를 출력할 수 있다. 몇몇 실시 예에서, 오류 보고(도 6의 S235)가 제어 신호로서 이용될 수 있다.
컨트롤러(3300a)는 프로그래머블 로직 장치(3322)가 구성 데이터에 기초하여 프로그램되도록 호스트(100)로부터 구성 데이터를 수신할 수 있다(동작 [33]). 예로서, 컨트롤러(3300a)가 제 1 프로토콜에 따라 동작하도록 구성된 동안 제 1 프로토콜과 상이한 제 2 프로토콜과 관련되는 요청이 수신되는 경우, 컨트롤러(3300a)와 호스트(100) 사이의 트랜잭션이 수신된 요청에 기초하여 수행될 수 있다. 이 트랜잭션은 호스트(100)로부터 구성 데이터를 수신하기 위해 수행될 수 있다.
트랜잭션 후, 수신된 구성 데이터는 프로토콜 관리기(3321)를 통해 프로그래머블 로직 장치(3322)로 로드되거나 프로그래머블 로직 장치(3322)로 직접 로드될 수 있다. 프로그래머블 로직 장치(3322)는 구성 데이터에 기초하여, 판별된 프로토콜을 지원하기 위한 상태로 재구성될 수 있다(동작 [34]). 따라서, 컨트롤러(3300a)의 동작은 수신된 요청을 제 2 프로토콜에 따라 처리하기 위해 구성 데이터에 기초하여 변경될 수 있다.
트랜잭션이 수행되고 재구성을 위한 시간이 지난 후, 컨트롤러(3300a)가 수신된 요청을 제 2 프로토콜에 따라 처리하기 시작할 수 있다. 프로그래머블 로직 장치(3322)는 판별된 프로토콜에 대응하는 논리 연산들을 패킷(DIN)에 대해 수행할 수 있다(동작 [35]). 따라서, 컨트롤러(3300a)는 호스트(100)의 요청을 처리할 수 있고, 메모리 장치(3100)와 통신할 수 있다(동작 [36]).
몇몇 실시 예에서, 컨트롤러(3300a)는 구성 데이터를 메모리 장치(3100) 및 호스트(100) 모두로부터 수신할 수 있다. 컨트롤러(3300a)는 메모리 장치(3100)로부터 수신된 구성 데이터 및 호스트(100)로부터 수신된 구성 데이터 중 더 적합한 구성 데이터에 기초하여 프로그래머블 로직 장치(3322)의 재구성을 수행할 수 있다. 예로서, 프로그래머블 로직 장치(3322)는 메모리 장치(3100)로부터 수신된 구성 데이터 및 호스트(100)로부터 수신된 구성 데이터 중 판별된 프로토콜의 더 새로운 버전을 제공하는 구성 데이터에 기초하여 프로그램 또는 재구성될 수 있다.
몇몇 실시 예에서, 구성 데이터(CD3)가 호스트(100)로부터 수신되었고 메모리 장치(3100)에 저장되어 있지 않던 경우, 컨트롤러(3300a)는 구성 데이터(CD3)가 메모리 장치(3100)에 저장되도록 메모리 장치(3100)를 제어할 수 있다(동작 [39]). 이후, 구성 데이터(CD3)는 호스트(100)로부터 수신되는 대신 메모리 장치(3100)로부터 읽힐 수 있다.
도 12는 도 4의 컨트롤러(3300a)를 포함하는 도 3의 스토리지 장치(3000)의 예시적인 동작을 설명하기 위한 개념도이다.
프로토콜 관리기(3321)는 패킷(DIN)을 수신할 수 있다(동작 [41]). 몇몇 실시 예에서, 호스트(100)는 프로그래머블 로직 장치(3322)의 재구성을 위한 커맨드 및 재구성에 요구되는 구성 데이터를 스토리지 장치(3000)에게 능동적으로 제공할 수 있다(동작 [42] 및 [43]).
프로토콜 관리기(3321)는 커맨드 및 구성 데이터에 기초하여 프로그래머블 로직 장치(3322)의 재구성을 제어할 수 있다(동작 [44]). 재구성이 완료된 후, 프로그래머블 로직 장치(3322)는 판별된 프로토콜에 대응하는 논리 연산들을 패킷(DIN)에 대해 수행할 수 있다(동작 [45]). 따라서, 컨트롤러(3300a)는 호스트(100)의 요청을 처리할 수 있고, 메모리 장치(3100)와 통신할 수 있다(동작 [46]).
도 13은 도 4의 프로토콜 관리기(3321)의 예시적인 동작을 설명하기 위한 표이다.
몇몇 실시 예에서, 프로토콜 관리기(3321)는 프로토콜 정보(PL)를 관리할 수 있다. 프로토콜 관리기(3321)가 프로토콜 정보(PL)를 저장하기 위한 메모리를 포함할 수 있고, 또는 프로토콜 정보(PL)는 메모리 장치(3100) 또는 내부 메모리(3340)에 저장될 수 있다. 프로토콜 정보(PL)는 프로그래머블 로직 장치(3322)에 의해 지원되는 복수의 프로토콜의 목록을 포함할 수 있다.
프로토콜 정보(PL)는 프로토콜들과 관련되는 다양한 정보(예컨대, 각 프로토콜의 이름, 각 프로토콜이 프로그래머블 로직 장치(3322)에 의해 지원 가능한지, 각 프로토콜을 지원하기 위한 구성 데이터가 스토리지 장치(3000)에 저장되어 있는지, 어떤 프로토콜이 현재 지원되고 있는지 등) 를 포함할 수 있다.
도 6 내지 도 12를 참조하여 설명된 동작들이 수행됨에 따라, 프로토콜 관리기(3321)는 프로토콜 정보(PL)를 수정/변경/갱신할 수 있다. 몇몇 경우, 새로운 프로토콜과 관련되는 정보가 프로토콜 정보(PL)의 비어 있는 항목에 추가될 수 있다. 프로토콜 관리기(3321)는 프로토콜 정보(PL)에 기초하여 도 6 내지 도 12를 참조하여 설명된 다양한 판별 동작을 수행할 수 있다.
도 14는 도 3의 컨트롤러(3300)와 관련되는 예시적인 구성을 보여주는 블록도이다. 몇몇 실시 예에서, 도 3의 컨트롤러(3300)는 도 14의 컨트롤러(3300c)를 포함할 수 있고, 도 3의 프로토콜 적응적 엔진(3320)은 도 14의 프로토콜 적응적 엔진(3320c)을 포함할 수 있다.
프로토콜 적응적 엔진(3320c)은 버퍼(3323)를 포함할 수 있다. 프로그래머블 로직 장치(3322)가 새로운 상태로 프로그램되는 동안(재구성), 프로그래머블 로직 장치(3322)는 호스트(100)의 요청을 처리하지 못할 수 있다. 버퍼(3323)는 프로그래머블 로직 장치(3322)의 재구성이 수행되는 동안 프로그래머블 로직 장치(3322)로 제공될 데이터를 일시적으로 버퍼링할 수 있다.
예로서, 버퍼(3323)는 호스트 인터페이스 회로(3310)로부터 프로그래머블 로직 장치(3322)로 제공될 패킷(DIN) 및/또는 메모리 인터페이스 회로(3390)로부터 프로그래머블 로직 장치(3322)로 제공될 패킷(패킷의 형태를 갖는 것으로 한정되지 않음)을 버퍼링할 수 있다.
프로그래머블 로직 장치(3322)의 재구성이 수행되는 동안, 패킷이 소실되지 않고 버퍼(3323)에 보존될 수 있다. 스토리지 장치(3000)는 프로그래머블 로직 장치(3322)의 재구성이 수행되는 동안 호스트(100)의 요청을 거절하지 않고 버퍼(3323)에 패킷을 저장할 수 있고, 따라서 QoS(Quality of Service)가 향상될 수 있다.
도 15는 도 14의 컨트롤러(3300c)의 예시적인 동작을 설명하는 흐름도이다. 도 16a 내지 도 16c는 도 14의 컨트롤러(3300c)의 예시적인 동작을 설명하기 위한 개념도들이다.
도 15를 참조하면, 프로토콜 관리기(3321)는 호스트 인터페이스 회로(3310)로부터 패킷(DIN)을 수신할 수 있고(S310), 프로그래머블 로직 장치(3322)의 프로그램 또는 재구성을 제어할 수 있다. 재구성이 수행되는 동안(S320의 Yes), 버퍼(3323)는 패킷(DIN)을 출력 없이 버퍼링할 수 있다(S325).
예로서, 도 16a를 참조하면, 프로토콜 관리기(3321)는 재구성이 수행됨에 기초하여 버퍼(3323)가 패킷을 출력하지 않도록 버퍼(3323)를 제어할 수 있다. 따라서, 버퍼(3323)는 패킷들(DIN1, DIN2, DIN3)을 출력 없이 버퍼링할 수 있다.
도 15로 돌아오면, 몇몇 경우, 재구성이 완료되기 전, 판별된 프로토콜과 관련되는 추가의 요청이 수신될 수 있다(S310, S320의 Yes). 버퍼(3323)는 수신된 추가의 요청으로부터 얻어지는 패킷 역시 출력 없이 더 버퍼링할 수 있다(S325).
시간이 지난 후, 재구성이 완료될 수 있다(S320의 No). 버퍼(3323)에 버퍼링된 패킷이 있는 경우(S330의 Yes), 버퍼(3323)는 버퍼링된 패킷을 프로그래머블 로직 장치(3322)로 출력할 수 있다(S335).
예로서, 도 16b를 참조하면, 재구성이 완료됨에 응답하여(즉, 재구성이 수행되지 않는 동안), 버퍼(3323)는 버퍼링된 패킷들(DIN1, DIN2, DIN3)을 출력할 수 있다. 따라서, 프로그래머블 로직 장치(3322)는 판별된 프로토콜에 따라 호스트(100)의 요청(예컨대, 패킷들(DIN1, DIN2, DIN3))을 처리할 수 있다.
도 15로 돌아오면, 버퍼(3323)에 버퍼링된 패킷이 없는 경우(S330의 No) 또는 버퍼링된 패킷이 출력된 후, 버퍼(3323)는 패킷(DIN)을 버퍼링 없이 프로그래머블 로직 장치(3322)로 출력할 수 있다(S340). 다시 말해, 재구성이 완료된 후, 판별된 프로토콜과 관련되는 추가의 요청이 수신되는 경우, 패킷(DIN)은 버퍼(3322)를 바이패스(Bypass)할 수 있다. 예로서, 도 16c를 참조하면, 버퍼(3323)는 재구성이 완료된 후에 수신되는 패킷(DIN4)을 버퍼링 없이 출력할 수 있다.
예로서, 컨트롤러(3300c)는 버퍼(3323)에 버퍼링된 패킷을 처리하는 타이밍과 관련하여 데이터 동기화를 수행할 수 있다(도 6의 S275). 프로그래머블 로직 장치(3322)는 버퍼(3323)로부터 출력되는 버퍼링된 패킷을 동기화된 타이밍에 기초하여 처리할 수 있다.
도 17은 도 3의 컨트롤러(3300)와 관련되는 예시적인 구성을 보여주는 블록도이다. 몇몇 실시 예에서, 도 3의 컨트롤러(3300)는 도 17의 컨트롤러(3300d)를 포함할 수 있고, 도 3의 프로토콜 적응적 엔진(3320)은 도 17의 프로토콜 적응적 엔진(3320d)을 포함할 수 있다.
프로토콜 적응적 엔진(3320d)은 스위치 회로(3324)를 포함할 수 있다. 프로그래머블 로직 장치(3322)가 새로운 상태로 재구성되는 동안, 스위치 회로(3324)는 버퍼(3323)가 패킷(DIN)을 버퍼링할 수 있도록 호스트 인터페이스 회로(3310)와 버퍼(3323) 사이의 경로를 제공할 수 있다.
프로그래머블 로직 장치(3322)의 재구성이 수행되지 않는 동안, 스위치 회로(3324)는 프로그래머블 로직 장치(3322)가 패킷(DIN)을 처리할 수 있도록 호스트 인터페이스 회로(3310)와 프로그래머블 로직 장치(3322) 사이의 경로를 제공할 수 있다. 이 실시 예에서, 패킷(DIN)은 버퍼(3323)를 바이패스하는 대신 스위치 회로(3324)를 통해 프로그래머블 로직 장치(3322)로 전달될 수 있다.
도 18은 도 1 또는 도 2의 스토리지 장치(1300 또는 2300)와 관련되는 예시적인 구성을 보여주는 블록도이다. 몇몇 실시 예에서, 도 3의 컨트롤러(3300)는 도 18의 컨트롤러(3300e)를 포함할 수 있다.
컨트롤러(3300e)는 프로토콜 관리기(3321)를 포함할 수 있고, 프로그래머블 로직 장치(3322)를 포함하지 않을 수 있다. 대신, 프로그래머블 로직 장치(3500)가 컨트롤러(3300e)와 별개로 제공될 수 있다. 이 실시 예에서, 배선들이 컨트롤러(3300e)의 내부를 컨트롤러(3300e) 외부의 프로그래머블 로직 장치(3500)로 연결하도록 라우팅될 수 있다. 몇몇 실시 예에서, 프로토콜 관리기(3321) 역시 컨트롤러(3300e)와 별개로 제공될 수 있다.
프로그래머블 로직 장치(3500)는 프로그래머블 로직 장치(3322)와 실질적으로 동일하게 구성되고 동작할 수 있다. 도 4 내지 도 17을 참조하여 설명된 실시 예들이 도 18의 구성에도 적용될 수 있음이 잘 이해될 것이다.
도 19는 도 1 또는 도 2의 스토리지 장치(1300 또는 2300)와 관련되는 예시적인 구성을 보여주는 블록도이다. 몇몇 실시 예에서, 도 1 또는 도 2의 스토리지 장치(1300 또는 2300)는 도 19의 스토리지 장치(4000)를 포함할 수 있다.
스토리지 장치(4000)는 하나 이상의 메모리 장치(4100) 및 컨트롤러(4300)를 포함할 수 있다. 컨트롤러(4300)는 호스트 인터페이스 회로(4310), 스위치 회로(4313), 프로토콜 적응적 엔진(4320), 고정 프로토콜 회로(4350), 스위치 회로(4393), 및 메모리 인터페이스 회로(4390)를 포함할 수 있다. 호스트 인터페이스 회로(4310), 프로토콜 적응적 엔진(4320), 및 메모리 인터페이스 회로(4390)와 관련하여, 도 3 내지 도 18을 참조하여 설명된 실시 예들이 도 19의 구성에도 적용될 수 있다.
고정 프로토콜 회로(4350)는 하나 이상의 고정된(또는 선택된) 프로토콜을 지원하기 위한 논리 연산들을 수행하도록 구성되는 하드웨어 회로(예컨대, 논리 회로)를 포함할 수 있다. 고정 프로토콜 회로(4350)가 고정된 프로토콜을 지원함에 따라, 메모리 장치(4100)가 고정된 프로토콜과 관련하여 호스트(100)의 요청에 대응하는 데이터를 저장하거나 출력할 수 있다.
예로서, 고정 프로토콜 회로(4350)는 PCIe 프로토콜만 지원할 수 있고, 프로토콜 적응적 엔진(4320)은 PCIe 프로토콜과 상이한 복수의 프로토콜을 지원할 수 있다. 스위치들(4313, 4393)은 컨트롤러(4300)에서 지원될 프로토콜에 따라 프로토콜 적응적 엔진(4320)을 통하는 경로 또는 고정 프로토콜 회로(4350)를 통하는 경로를 선택적으로 제공할 수 있다.
도 20은 도 19의 컨트롤러(4300)와 관련되는 예시적인 구성을 보여주는 블록도이다. 몇몇 실시 예에서, 도 19의 컨트롤러(4300)는 도 20의 컨트롤러(4300a)를 포함할 수 있다.
예로서, 고정 프로토콜 회로(4350)는 이더넷 프로토콜을 지원하기 위해 네트워크 계층(4351), 전송 계층(4352), RDMA(Remote Direct Memory Access) 계층(4353), 및 NVMe-oF(Nonvolatile Memory Express over Fabric) 계층(4354)을 포함할 수 있다. 이더넷 프로토콜 및 그것의 계층들은 더 나은 이해를 가능하게 하기 위한 예일 뿐이고, 본 개시를 한정하도록 의도되지 않는다. 고정 프로토콜 회로(4350)에 의해 지원되는 프로토콜은 다양하게 변경 또는 수정될 수 있다.
예로서, 프로토콜 적응적 엔진(4320)은 복수의 프로토콜을 적응적으로 지원하기 위해 프로토콜 관리기(4321), 프로그래머블 로직 장치(4322), 및 버퍼(4323)를 포함할 수 있다. 프로토콜 관리기(4321)는 호스트 인터페이스 회로(4310)를 통해 수신되는 패킷에 기초하여 적합한 프로토콜을 판별할 수 있다.
프로토콜 관리기(4321)는 판별된 프로토콜에 기초하여 프로토콜 적응적 엔진(4320)을 통하는 경로 및 고정 프로토콜 회로(4350)를 통하는 경로 중 하나를 선택하기 위해 스위치들(4313, 4393)을 제어할 수 있다. 프로토콜 적응적 엔진(4320)을 통하는 경로가 선택되는 경우, 프로토콜 관리기(4321)는 도 3 내지 도 18을 참조하여 설명된 실시 예들과 유사하게 프로그래머블 로직 장치(4322) 및 버퍼(4323)를 제어할 수 있다.
도 21은 도 19의 컨트롤러(4300)의 예시적인 동작을 설명하는 흐름도이다.
프로토콜 관리기(4321)는 호스트 인터페이스 회로(4310)로부터 패킷을 수신할 수 있고(S410), 수신된 패킷에 기초하여 프로토콜을 판별할 수 있다(S420).
판별된 프로토콜이 고정 프로토콜 회로(4350)에 의해 지원되는 경우(S430의 Yes), 프로토콜 관리기(4321)는 고정 프로토콜 회로(4350)를 통하는 경로가 선택되도록 스위치들(4313, 4393)을 제어할 수 있다(S440). 따라서, 고정 프로토콜 회로(4350)가 호스트(100)의 요청을 선택된 프로토콜에 따라 처리할 수 있다(S450).
판별된 프로토콜이 고정 프로토콜 회로(4350)에 의해 지원되지 않음을 판별함에 응답하여(S430의 No), 프로토콜 관리기(4321)는 프로토콜 적응적 엔진(4320)을 통하는 경로가 제공되도록 스위치들(4313, 4393)을 제어할 수 있다(S460). 이후, 컨트롤러(4300)의 동작은 도 6의 S230 동작으로 이어질 수 있다. 따라서, 프로토콜 관리기(4321)는 프로그래머블 로직 장치(4322)가 판별된 프로토콜을 지원하기 위한 상태로 프로그램되도록 프로그래머블 로직 장치(4322)의 프로그램을 제어할 수 있다.
도 22는 도 19의 컨트롤러(4300)와 관련되는 예시적인 구성을 보여주는 블록도이다. 몇몇 실시 예에서, 도 19의 컨트롤러(4300)는 도 22의 컨트롤러(4300b)를 포함할 수 있다.
예로서, 컨트롤러(4300b)는 고정 프로토콜 회로(4360)를 포함할 수 있다. 고정 프로토콜 회로(4360)는 하나 이상의 고정된 프로토콜을 지원하기 위한 논리 연산들을 수행할 수 있다. 고정 프로토콜 회로(4360)에 의해 지원되는 프로토콜은 고정 프로토콜 회로(4350)에 의해 지원되는 프로토콜과 동일하거나 상이할 수 있다.
컨트롤러(4300b)에 포함되는 고정 프로토콜 회로들의 개수는 다양하게 변경 또는 수정될 수 있다. 프로토콜 적응적 엔진(4320)은 고정 프로토콜 회로들(4350, 4360)에 의해 지원되는 프로토콜(들)과 상이한 복수의 프로토콜을 지원할 수 있다.
컨트롤러(4300b)는 동시에 다양한 프로토콜에 따라 동작할 수 있고, 더 많은 고정된 프로토콜들을 지원할 수 있다. 몇몇 경우, 컨트롤러(4300b)는 스토리지 장치(4000)가 다중 포트(예컨대, 듀얼 포트)를 통해 통신하도록 구성되는 경우에 더 유익할 수 있다.
도 23은 도 1 또는 도 2의 스토리지 장치(1300 또는 2300)와 관련되는 예시적인 구성을 보여주는 블록도이다. 몇몇 실시 예에서, 도 1 또는 도 2의 스토리지 장치(1300 또는 2300)는 도 23의 스토리지 장치(5000)를 포함할 수 있다.
스토리지 장치(5000)는 하나 이상의 메모리 장치(5100) 및 컨트롤러(5300)를 포함할 수 있다. 컨트롤러(5300)는 호스트 인터페이스 회로(5310), 프로토콜 관리기(5321), 버퍼(5326), 프로그래머블 로직 장치(5327), 및 메모리 인터페이스 회로(5390)를 포함할 수 있고, 도 3 내지 도 22를 참조하여 설명된 실시 예들이 여기에도 적용될 수 있다.
컨트롤러(5300)는 복수의 계층의 연산에 따라 처리되는 프로토콜을 지원할 수 있다. 예로서, 컨트롤러(5300)는 이더넷 프로토콜을 지원하기 위해 네트워크 계층(5351), 전송 계층, RDMA 계층(5353), 및 NVMe-oF 계층(5354)을 포함할 수 있다. 이더넷 프로토콜 및 그것의 계층들은 더 나은 이해를 가능하게 하기 위한 예일 뿐이고, 본 개시를 한정하도록 의도되지 않는다. 컨트롤러(5300)에 의해 지원되는 프로토콜은 다양하게 변경 또는 수정될 수 있다.
네트워크 계층(5351), RDMA 계층(5353), 및 NVMe-oF 계층(5354)은 논리 연산들을 수행하도록 구성되는 하드웨어 회로(예컨대, 논리 회로)를 포함할 수 있다. 계층들(5351, 5353, 5354)은 이더넷 프로토콜의 각 계층들의 연산을 지원하기 위한 고정 프로토콜 회로들로서 이해될 수 있다.
한편, 전송 계층은 프로그래머블 로직 장치(5327)로 구현될 수 있다. 프로토콜 관리기(5321)는 호스트 인터페이스 회로(5310)의 출력(몇몇 경우, 네트워크 계층(5351)의 출력)에 기초하여 프로토콜을 판별할 수 있고, 판별된 프로토콜에 기초하여 버퍼(5326) 및 프로그래머블 로직 장치(5327)를 제어할 수 있다.
예로서, 프로그래머블 로직 장치(5327)는 TCP(Transmission Control Protocol), UDP(User Datagram Protocol) 등과 같은 전송 계층의 프로토콜들 중에서 판별된 프로토콜의 연산을 수행하기 위해 재구성 가능할 수 있다. 버퍼(5326)는 프로그래머블 로직 장치(5327)의 재구성이 수행되는 동안 패킷을 버퍼링할 수 있다.
도 24는 도 23의 컨트롤러(5300)와 관련되는 예시적인 구성을 보여주는 블록도이다. 몇몇 실시 예에서, 도 23의 컨트롤러(5300)는 도 24의 컨트롤러(5300a)를 포함할 수 있다.
컨트롤러(5300a)에서, 네트워크 계층이 버퍼(5323) 및 프로그래머블 로직 장치(5325)로 구현될 수 있고, RDMA 계층이 버퍼(5328) 및 프로그래머블 로직 장치(5329)로 구현될 수 있다. 프로토콜 관리기(5321)는 호스트(100)의 요청과 관련하여 판별되는 프로토콜에 기초하여 각 계층을 제어할 수 있다.
예로서, 프로그래머블 로직 장치(5325)는 IP(Internet Protocol), RIP(Routing Information Protocol) 등과 같은 네트워크 계층의 프로토콜들 중에서 판별된 프로토콜의 연산을 수행하기 위해 재구성 가능할 수 있다. 예로서, 프로그래머블 로직 장치(5329)는 RoCE(RDMA over Converged Ethernet), iWARP(Internet Wide-area RDMA Protocol) 등과 같은 RDMA 계층의 프로토콜들 중에서 판별된 프로토콜의 연산을 수행하기 위해 재구성 가능할 수 있다. 버퍼들(5323, 5328)은 프로그래머블 로직 장치들(5325, 5329)의 재구성이 수행되는 동안 패킷들을 버퍼링할 수 있다.
본 개시는 도 23 및 도 24의 예시적인 구성들로 한정되지 않는다. 프로그래머블 로직 장치(5325)로 구현되는 계층의 유형 및 프로그래머블 로직 장치(5325)로 구현되는 계층들의 개수는 다양하게 변경 또는 수정될 수 있다.
도 25는 도 1 또는 도 2의 스토리지 장치(1300 또는 2300)와 관련되는 예시적인 구성을 보여주는 블록도이다. 도 1 또는 도 2의 스토리지 장치(1300 또는 2300)는 도 25의 스토리지 장치(6000)를 포함할 수 있다.
스토리지 장치(6000)는 하나 이상의 메모리 장치(6100) 및 컨트롤러(6300)를 포함할 수 있다. 컨트롤러(6300)는 네트워크 계층(6351), 전송 계층(6352), RDMA 계층(6353), 및 NVMe-oF 계층(6354)을 포함할 수 있다.
계층들(6351, 6352, 6353, 6354)은 하나 이상의 고정된(또는 선택된) 프로토콜과 관련하여 호스트(100)의 요청이 수신되는 경우에 그 고정된 프로토콜(예컨대, 이더넷 프로토콜)을 지원하기 위한 고정 프로토콜 회로들로서 이해될 수 있다. 계층들(6351, 6352, 6353, 6354)은 이더넷 프로토콜의 각 계층들의 연산들을 수행하도록 구성되는 하드웨어 회로(예컨대, 논리 회로)를 포함할 수 있다.
컨트롤러(6300)는 호스트 인터페이스 회로(6310), 프로토콜 관리기(6321), 버퍼들(6323, 6326, 6328, 6371), 프로그래머블 로직 장치들(6325, 6327, 6329, 6372), 스위치 회로들(6313, 6314, 6315, 6316, 6393), 및 메모리 인터페이스 회로(6390)를 포함할 수 있고, 도 3 내지 도 24를 참조하여 설명된 실시 예들이 여기에도 적용될 수 있다.
프로그래머블 로직 장치들(6325, 6327, 6329, 6372)은 재구성 가능할 수 있고, 고정 프로토콜 회로들에 의해 지원되는 프로토콜과 상이한 하나 이상의 프로토콜과 관련하여 수신되는 호스트(100)의 요청에 따라 하나 이상의 프로토콜을 지원하기 위한 하나 이상의 상태 중 하나로 프로그램될 수 있다. 버퍼들(6323, 6326, 6328, 6371)은 프로그래머블 로직 장치들(6325, 6327, 6329, 6372)의 재구성이 수행되는 동안 패킷들을 버퍼링할 수 있다.
몇몇 실시 예에서, 프로그래머블 로직 장치들(6325, 6327, 6329, 6372)은 고정 프로토콜 회로들에 의해 지원되는 프로토콜의 각 계층들에 대응하여 제공될 수 있다. 예로서, 프로그래머블 로직 장치들(6325, 6327, 6329, 6372)은 각각 계층들(6351, 6352, 6353, 6354)에 대응하는 연산들을 수행하기 위해 재구성될 수 있다.
버퍼들(6323, 6326, 6328, 6371)은 프로그래머블 로직 장치들(6325, 6327, 6329, 6372)의 재구성이 수행되는 동안 패킷들을 버퍼링할 수 있다. 버퍼들(6323, 6326, 6328, 6371)은 계층들(6351, 6352, 6353, 6354)에 의해 처리되는 호스트(100)의 요청으로부터 얻어지는 패킷을 버퍼링하지 않을 수 있다.
스위치 회로들(6313, 6314, 6315, 6316, 6393)은 컨트롤러(6300)에서 지원될 프로토콜에 따라 프로그래머블 로직 장치들(6325, 6327, 6329, 6372)을 통하는 경로 또는 계층들(6351, 6352, 6353, 6354)의 고정 프로토콜 회로들을 통하는 경로를 선택적으로 제공할 수 있다. 예로서, 네트워크 계층과 관련하여 네트워크 계층(6351)의 고정 프로토콜 회로가 요구되고 전송 계층과 관련하여 프로그래머블 로직 장치(6327)가 요구되는 경우, 스위치들(6313, 6314)은 네트워크 계층(6351)의 고정 프로토콜 회로를 통하는 경로를 제공할 수 있고, 스위치들(6314, 6315)은 프로그래머블 로직 장치(6327)를 통하는 경로를 제공할 수 있다.
프로토콜 관리기(6321)는 호스트(100)의 요청에 기초하여 컨트롤러(6300)의 구성 요소들 및 스위치 회로들(6313, 6314, 6315, 6316, 6393)을 통한 경로들을 제어할 수 있다.
도 26은 도 25의 컨트롤러(6300)와 관련되는 예시적인 구성을 보여주는 블록도이다. 몇몇 실시 예에서, 도 25의 컨트롤러(6300)는 도 26의 컨트롤러(6300a)를 포함할 수 있다.
컨트롤러(6300a)에서, 전송 계층(6352) 및 NVMe-oF 계층(6354)은 프로그래머블 로직 장치 없이 고정 프로토콜 회로들로 구현될 수 있다. 본 개시는 도 25 및 도 26의 예시적인 구성들로 한정되지 않는다. 프로토콜의 각 계층은 프로그래머블 로직 장치 없이 고정 프로토콜 회로로 구현되거나 프로그래머블 로직 장치 및 고정 프로토콜 회로 모두를 이용하도록 다양하게 변경 또는 수정될 수 있다.
도 27 및 도 28은 도 1 또는 도 2의 컨트롤러(1330 또는 2330)와 관련되는 예시적인 구성을 보여주는 블록도들이다.
몇몇 실시 예가 이더넷 프로토콜과 관련하여 설명되었으나, 본 개시는 여기에 한정되지 않는다. 실시 예들은 이더넷 프로토콜 외의 다양한 프로토콜에도 적용될 수 있다.
예로서, 도 1 또는 도 2의 컨트롤러(1330 또는 2330)는 도 27의 컨트롤러(7300)를 포함할 수 있다. 도 27을 참조하면, 컨트롤러(7300)는 SAS 또는 PCIe 프로토콜을 지원하기 위해 링크 계층(7351), 트랜잭션 계층(7352), 및 응용 계층(7355)의 고정 프로토콜 회로들을 포함할 수 있다. 컨트롤러(7300)는 호스트 인터페이스 회로(7310), 프로토콜 관리기(7321), 버퍼들(7323, 7326), 프로그래머블 로직 장치들(7325, 7327), 스위치들(7313, 7314, 7393), 및 메모리 인터페이스 회로(7390)를 포함할 수 있고, 도 3 내지 도 26을 참조하여 설명된 실시 예들이 여기에도 적용될 수 있다.
예로서, 도 1 또는 도 2의 컨트롤러(1330 또는 2330)는 도 28의 컨트롤러(8300)를 포함할 수 있다. 도 28을 참조하면, 컨트롤러(8300)는 UFS 프로토콜을 지원하기 위해 PHY 어댑터 계층(8351), 데이터 링크 계층(8352), 트랜잭션 계층(8353), 및 응용 계층(8355)의 고정 프로토콜 회로들을 포함할 수 있다. 컨트롤러(8300)는 호스트 인터페이스 회로(8310), 프로토콜 관리기(8321), 프로그래머블 로직 장치(8322), 버퍼(8323), 스위치들(8313, 8393), 및 메모리 인터페이스 회로(8390)를 포함할 수 있고, 도 3 내지 도 26을 참조하여 설명된 실시 예들이 여기에도 적용될 수 있다.
그밖에, 다른 다양한 프로토콜이 실시 예들과 관련하여 지원될 수 있다. 나아가, 실시 예들은 스토리지 장치 외의 다양한 장치에도 적용될 수 있다. 예로서, 메인 프로세서(1101) 또는 워킹 메모리(1200)는 외부로부터 수신되는 요청을 유연하게 처리하기 위해 복수의 프로토콜을 적응적으로 지원할 수 있는 프로그래머블 로직 장치를 포함할 수 있다.
위 설명들은 본 개시를 구현하기 위한 예시적인 구성들 및 동작들을 제공하도록 의도된다. 본 개시는 위에서 설명된 실시 예들뿐만 아니라, 위 실시 예들을 단순하게 변경하거나 수정하여 얻어질 수 있는 구현들도 포함할 것이다. 또한, 본 개시는 위에서 설명된 실시 예들을 앞으로 용이하게 변경하거나 수정하여 달성될 수 있는 구현들도 포함할 것이다.
1000 : 전자 시스템 2000 : 네트워크 시스템

Claims (20)

  1. 스토리지 장치에 있어서,
    메모리 장치; 및
    상기 스토리지 장치의 외부로부터 수신되는 요청들에 따라 복수의 프로토콜을 적응적(Adaptive)으로 지원하기 위해 상기 요청들에 기초하여 재구성되는(Reconfigurable) 프로그래머블(Programmable) 로직 장치를 포함하는 컨트롤러를 포함하되,
    상기 프로그래머블 로직 장치가 상기 복수의 프로토콜 중 제 1 프로토콜과 관련하여 상기 스토리지 장치의 외부로부터 수신되는 제 1 요청에 기초하여 상기 제 1 프로토콜을 지원하도록 프로그램됨에 따라, 상기 프로그래머블 로직 장치는 상기 제 1 프로토콜에 따라 상기 제 1 요청을 처리하고 상기 컨트롤러는 상기 메모리 장치가 상기 처리된 제 1 요청에 대응하는 데이터를 저장하거나 출력하도록 상기 처리된 제 1 요청에 기초하여 상기 메모리 장치와 통신하는 스토리지 장치.
  2. 제 1 항에 있어서,
    상기 프로그래머블 로직 장치가 상기 제 1 프로토콜을 지원하기 위한 제 1 상태로 프로그램된 후, 제 2 요청이 상기 복수의 프로토콜 중 상기 제 1 프로토콜과 상이한 제 2 프로토콜과 관련하여 상기 스토리지 장치의 외부로부터 수신되는 경우, 상기 프로그래머블 로직 장치가 상기 제 2 프로토콜을 지원하기 위한 제 2 상태로 프로그램됨에 따라 상기 프로그래머블 로직 장치가 상기 제 1 상태로부터 상기 제 2 상태로 재구성되는 스토리지 장치.
  3. 제 1 항에 있어서,
    상기 스토리지 장치의 외부로부터 수신되는 요청에 대응하는 프로토콜이 변경되는 경우, 상기 변경된 프로토콜을 지원하는 추가 자원 없이, 상기 프로그래머블 로직 장치가 상기 변경된 프로토콜을 지원하기 위해 재구성되는 스토리지 장치.
  4. 제 1 항에 있어서,
    상기 컨트롤러는:
    상기 스토리지 장치의 외부로부터 수신되는 요청에 대응하는 프로토콜을 판별하고, 상기 프로그래머블 로직 장치가 상기 판별된 프로토콜을 지원하기 위한 상태로 프로그램되도록 상기 프로그래머블 로직 장치의 상기 상태로의 프로그램을 제어하기 위한 연산 회로를 더 포함하는 스토리지 장치.
  5. 제 4 항에 있어서,
    상기 컨트롤러의 파워-온(Power-on)에 응답하여, 상기 연산 회로는 상기 프로그래머블 로직 장치가 디폴트 상태로 프로그램되거나 초기 상태로 진입하도록 리셋 신호에 기초하여 상기 프로그래머블 로직 장치의 초기화를 트리거하는 스토리지 장치.
  6. 제 1 항에 있어서,
    상기 컨트롤러는 상기 프로그래머블 로직 장치가 구성 데이터에 기초하여 프로그램되도록 상기 메모리 장치 및 상기 스토리지 장치의 외부 중 적어도 하나로부터 상기 구성 데이터를 수신하기 위한 스토리지 장치.
  7. 제 6 항에 있어서,
    상기 수신된 구성 데이터가 상기 스토리지 장치의 외부로부터 수신되었고 상기 메모리 장치에 저장되어 있지 않던 경우, 상기 컨트롤러는 상기 수신된 구성 데이터가 상기 메모리 장치에 저장되도록 상기 메모리 장치를 제어하는 스토리지 장치.
  8. 제 1 항에 있어서,
    상기 컨트롤러는 상기 메모리 장치로부터 제 1 구성 데이터를 수신하고 상기 스토리지 장치의 외부로부터 제 2 구성 데이터를 수신하고,
    상기 프로그래머블 로직 장치는 상기 1 구성 데이터 및 상기 제 2 구성 데이터 중 상기 제 1 프로토콜의 더 새로운 버전을 제공하는 구성 데이터에 기초하여 프로그램되는 스토리지 장치.
  9. 제 1 프로토콜과 관련하여 제 1 요청이 수신되는 경우에 상기 제 1 프로토콜을 지원하기 위한 제 1 상태로 프로그램되는 프로그래머블(Programmable) 로직 장치; 및
    상기 제 1 요청에 기초하여 상기 프로그래머블 로직 장치의 상기 제 1 상태로의 프로그램을 제어하기 위한 연산 회로를 포함하되,
    상기 프로그래머블 로직 장치가 상기 제 1 상태로 프로그램된 후, 제 2 요청이 상기 제 1 프로토콜과 상이한 제 2 프로토콜과 관련하여 수신되는 경우, 상기 프로그래머블 로직 장치는 상기 제 1 상태로부터 상기 제 2 프로토콜을 지원하기 위한 제 2 상태로 재구성되고, 상기 연산 회로는 상기 제 2 요청에 기초하여 상기 프로그래머블 로직 장치의 상기 제 2 상태로의 프로그램을 제어하는 스토리지 장치.
  10. 제 9 항에 있어서,
    상기 제 1 상태로부터 상기 제 2 상태로의 재구성이 수행되는 동안, 상기 제 2 요청으로부터 얻어지는 패킷을 출력 없이 버퍼링하는 버퍼를 더 포함하는 스토리지 장치.
  11. 제 10 항에 있어서,
    상기 제 1 상태로부터 상기 제 2 상태로의 상기 재구성이 완료되기 전에 제 3 요청이 상기 제 2 프로토콜과 관련하여 수신되는 경우, 상기 버퍼는 상기 제 3 요청으로부터 얻어지는 패킷을 더 버퍼링하고,
    상기 제 1 상태로부터 상기 제 2 상태로의 상기 재구성이 완료됨에 응답하여, 상기 버퍼는 상기 프로그래머블 로직 장치가 상기 제 2 프로토콜에 따라 상기 제 2 요청을 처리하도록 상기 버퍼링된 패킷을 상기 프로그래머블 로직 장치로 출력하는 스토리지 장치.
  12. 제 10 항에 있어서,
    상기 제 1 상태로부터 상기 제 2 상태로의 상기 재구성이 완료된 후, 제 3 요청이 상기 제 2 프로토콜과 관련하여 수신되는 경우, 상기 버퍼는 상기 제 3 요청으로부터 얻어지는 패킷을 버퍼링 없이 상기 프로그래머블 로직 장치로 출력하는 스토리지 장치.
  13. 제 9 항에 있어서,
    상기 제 2 프로토콜은 제 1 계층의 연산 및 제 2 계층의 연산에 따라 처리되고,
    상기 프로그래머블 로직 장치는 상기 제 2 프로토콜의 상기 제 1 계층의 상기 연산을 수행하고,
    상기 스토리지 장치는:
    상기 제 2 프로토콜의 상기 제 2 계층의 상기 연산을 지원하기 위한 고정 프로토콜 회로를 더 포함하는 스토리지 장치.
  14. 스토리지 장치에 있어서,
    메모리 장치; 및
    제 1 프로토콜과 관련하여 상기 스토리지 장치의 외부로부터 수신되는 제 1 요청에 기초하여 상기 제 1 프로토콜에 따라 상기 제 1 요청을 처리하기 위한 컨트롤러를 포함하되,
    상기 컨트롤러가 상기 제 1 프로토콜에 따라 동작하도록 구성된 동안, 제 2 요청이 상기 제 1 프로토콜과 상이한 제 2 프로토콜과 관련하여 상기 스토리지 장치의 외부로부터 수신되는 경우, 상기 컨트롤러와 상기 메모리 장치 사이의 제 1 트랜잭션 및 상기 컨트롤러와 상기 스토리지 장치의 외부 사이의 제 2 트랜잭션 중 적어도 하나가 상기 제 2 요청에 기초하여 수행된 다음 상기 컨트롤러가 상기 제 2 프로토콜에 따라 상기 제 2 요청을 처리하는 스토리지 장치.
  15. 제 14 항에 있어서,
    상기 제 1 트랜잭션은 상기 메모리 장치로부터 제 1 구성 데이터를 읽기 위해 수행되고, 상기 제 2 트랜잭션은 상기 스토리지 장치의 외부로부터 제 2 구성 데이터를 수신하기 위해 수행되고,
    상기 컨트롤러의 동작은 상기 제 2 프로토콜에 따라 상기 제 2 요청을 처리하기 위해 상기 제 1 구성 데이터 및 상기 제 2 구성 데이터 중 적어도 하나에 기초하여 변경되는 스토리지 장치.
  16. 제 14 항에 있어서,
    상기 제 1 트랜잭션 및 상기 제 2 트랜잭션 중 상기 적어도 하나가 수행되고 시간이 지난 후, 상기 컨트롤러가 상기 제 2 요청을 처리하기 시작하는 스토리지 장치.
  17. 스토리지 장치에 있어서,
    메모리 장치; 및
    상기 메모리 장치가 제 1 프로토콜과 관련하여 상기 스토리지 장치의 외부로부터 수신되는 제 1 요청에 대응하는 데이터를 저장하거나 출력하도록 상기 제 1 프로토콜을 지원하기 위한 고정 프로토콜 회로, 및 상기 메모리 장치가 상기 제 1 프로토콜과 상이한 복수의 프로토콜과 관련하여 상기 스토리지 장치의 외부로부터 수신되는 요청들에 대응하는 데이터를 저장하거나 출력하도록 상기 요청들에 따라 상기 복수의 프로토콜을 적응적(Adaptive)으로 지원하기 위해 상기 요청들에 기초하여 재구성되는(Reconfigurable) 프로그래머블(Programmable) 로직 장치를 포함하는 컨트롤러를 포함하는 스토리지 장치.
  18. 제 17 항에 있어서,
    제 2 요청이 상기 제 1 프로토콜과 상이한 제 2 프로토콜과 관련하여 상기 스토리지 장치의 외부로부터 수신되는 경우, 상기 프로그래머블 로직 장치는 상기 메모리 장치가 상기 제 2 요청에 대응하는 데이터를 저장하거나 출력하도록 상기 제 2 프로토콜을 지원하기 위해 프로그램되고,
    상기 컨트롤러는:
    상기 제 2 프로토콜이 상기 고정 프로토콜 회로에 의해 지원되지 않음을 판별함에 응답하여 상기 프로그래머블 로직 장치가 상기 제 2 프로토콜을 지원하기 위한 상태로 프로그램되도록 상기 프로그래머블 로직 장치의 프로그램을 제어하기 위한 연산 회로를 더 포함하는 스토리지 장치.
  19. 제 1 프로토콜과 관련하여 제 1 요청이 수신되는 경우에 상기 제 1 프로토콜을 지원하는 제 1 고정 프로토콜 회로;
    상기 제 1 프로토콜과 상이한 하나 이상의 프로토콜과 관련하여 수신되는 하나 이상의 요청에 따라 상기 하나 이상의 프로토콜을 지원하기 위한 하나 이상의 상태 중 하나로 프로그램되는 제 1 프로그래머블(Programmable) 로직 장치; 및
    상기 제 1 요청 및 상기 하나 이상의 요청에 기초하여 상기 제 1 고정 프로토콜 회로를 통하는 제 1 경로 또는 상기 제 1 프로그래머블 로직 장치를 통하는 제 2 경로를 선택적으로 제공하기 위한 제 1 스위치 회로를 포함하되,
    제 2 요청이 상기 하나 이상의 프로토콜 중 제 2 프로토콜과 관련하여 수신되는 경우, 상기 제 1 스위치 회로는 상기 제 2 경로를 제공하고, 제 1 상태로 프로그램되었던 상기 제 1 프로그래머블 로직 장치가 상기 제 1 상태로부터 상기 제 2 프로토콜을 지원하기 위한 제 2 상태로 재구성되는 스토리지 장치.
  20. 제 19 항에 있어서,
    상기 제 1 프로토콜은 제 1 계층의 연산 및 제 2 계층의 연산에 따라 처리되고, 상기 제 2 프로토콜은 상기 제 1 계층에 대응하는 제 3 계층의 연산 및 상기 제 2 계층에 대응하는 제 4 계층의 연산에 따라 처리되고,
    상기 제 1 고정 프로토콜 회로는 상기 제 1 프로토콜의 상기 제 1 계층의 상기 연산을 수행하고, 상기 제 1 프로그래머블 로직 장치는 상기 제 2 프로토콜의 상기 제 3 계층의 상기 연산을 수행하기 위한 스토리지 장치.
KR1020180134232A 2018-11-05 2018-11-05 복수의 프로토콜을 적응적으로 지원하는 스토리지 장치 KR102583255B1 (ko)

Priority Applications (5)

Application Number Priority Date Filing Date Title
KR1020180134232A KR102583255B1 (ko) 2018-11-05 2018-11-05 복수의 프로토콜을 적응적으로 지원하는 스토리지 장치
DE102019111128.5A DE102019111128A1 (de) 2018-11-05 2019-04-30 Speichereinrichtung, welche eine Mehrzahl von Protokollen adaptiv unterstützt
US16/510,050 US11132309B2 (en) 2018-11-05 2019-07-12 Storage device adaptively supporting plurality of protocols
CN201911070348.7A CN111142783A (zh) 2018-11-05 2019-11-05 自适应支持多个协议的存储装置
US17/448,971 US20220012192A1 (en) 2018-11-05 2021-09-27 Storage device adaptively supporting plurality of protocols

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020180134232A KR102583255B1 (ko) 2018-11-05 2018-11-05 복수의 프로토콜을 적응적으로 지원하는 스토리지 장치

Publications (2)

Publication Number Publication Date
KR20200051199A true KR20200051199A (ko) 2020-05-13
KR102583255B1 KR102583255B1 (ko) 2023-09-26

Family

ID=70459593

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180134232A KR102583255B1 (ko) 2018-11-05 2018-11-05 복수의 프로토콜을 적응적으로 지원하는 스토리지 장치

Country Status (4)

Country Link
US (2) US11132309B2 (ko)
KR (1) KR102583255B1 (ko)
CN (1) CN111142783A (ko)
DE (1) DE102019111128A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022131397A1 (ko) * 2020-12-16 2022-06-23 주식회사 모빌린트 Cnn-rnn 아키텍처 전환형 연산 가속장치 설계 방법

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10833949B2 (en) * 2018-11-20 2020-11-10 Amazon Technologies, Inc Extension resource groups of provider network services
US11064017B2 (en) 2019-09-24 2021-07-13 Amazon Technologies, Inc. Peripheral device enabling virtualized computing service extensions
US11520530B2 (en) 2019-09-24 2022-12-06 Amazon Technologies, Inc. Peripheral device for configuring compute instances at client-selected servers
US11569997B1 (en) 2020-03-09 2023-01-31 Amazon Technologies, Inc. Security mechanisms for data plane extensions of provider network services
US12086518B2 (en) * 2020-06-01 2024-09-10 Intel Corporation Programmable integrated circuit underlay
US11907587B2 (en) * 2021-06-09 2024-02-20 Western Digital Technologies, Inc. Managing persistent memory regions across multiple protocols
US20230325338A1 (en) * 2022-04-06 2023-10-12 Western Digital Technologies, Inc. Protocol indicator for data transfer

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20160016753A (ko) * 2013-02-21 2016-02-15 주식회사 아도반테스토 Fpga 블록 내의 자동 패턴 생성을 위한 가속 및 메모리 상의 가속을 갖는 시험기
KR20180009851A (ko) * 2016-07-19 2018-01-30 삼성전자주식회사 직렬로 연결되는 스토리지 장치들 중 직접 연결되지 않은 스토리지 장치를 제어하도록 구성되는 전자 장치, 그것에 포함되는 스토리지 장치, 그것을 포함하는 컴퓨팅 시스템, 및 스토리지 장치의 컨트롤러의 동작 방법

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5870586A (en) * 1996-01-31 1999-02-09 Xilinx, Inc. Configuration emulation of a programmable logic device
US6049222A (en) * 1997-12-30 2000-04-11 Xilinx, Inc Configuring an FPGA using embedded memory
US7031267B2 (en) * 2000-12-21 2006-04-18 802 Systems Llc PLD-based packet filtering methods with PLD configuration data update of filtering rules
US7631107B2 (en) 2002-06-11 2009-12-08 Pandya Ashish A Runtime adaptable protocol processor
US20040008725A1 (en) * 2002-07-15 2004-01-15 Analog Devices, Inc. Method and an interface circuit configurable in two communication protocol modes
US6842034B1 (en) * 2003-07-01 2005-01-11 Altera Corporation Selectable dynamic reconfiguration of programmable embedded IP
US20050044297A1 (en) * 2003-08-18 2005-02-24 Eugene Feng Memory device operable with a plurality of protocols
US7281082B1 (en) * 2004-03-26 2007-10-09 Xilinx, Inc. Flexible scheme for configuring programmable semiconductor devices using or loading programs from SPI-based serial flash memories that support multiple SPI flash vendors and device families
US7444454B2 (en) * 2004-05-11 2008-10-28 L-3 Communications Integrated Systems L.P. Systems and methods for interconnection of multiple FPGA devices
US7019558B1 (en) * 2004-07-14 2006-03-28 Xilinx, Inc. Conversion of configuration data to match communication protocol
WO2007006146A1 (en) 2005-07-12 2007-01-18 Advancedio Systems Inc. System and method of offloading protocol functions
US7733907B2 (en) 2006-04-07 2010-06-08 Microsoft Corporation Combined header processing for network packets
US7925794B2 (en) 2007-08-17 2011-04-12 At&T Intellectual Property I, L.P. Systems and methods for localizing a network storage device
US20090079467A1 (en) * 2007-09-26 2009-03-26 Sandven Magne V Method and apparatus for upgrading fpga/cpld flash devices
US9286225B2 (en) 2013-03-15 2016-03-15 Saratoga Speed, Inc. Flash-based storage system including reconfigurable circuitry
US9940241B1 (en) 2014-07-03 2018-04-10 Sanmina Corporation Network system with cache offload service for flash storage
CN105302746A (zh) * 2014-07-04 2016-02-03 Lsi公司 多协议存储控制器
US9658782B2 (en) 2014-07-30 2017-05-23 Excelero Storage Ltd. Scalable data using RDMA and MMIO
US9755964B2 (en) * 2015-09-21 2017-09-05 Advanced Micro Devices, Inc. Multi-protocol header generation system
US10374885B2 (en) 2016-12-13 2019-08-06 Amazon Technologies, Inc. Reconfigurable server including a reconfigurable adapter device
KR101979916B1 (ko) 2017-06-08 2019-05-17 동덕여자대학교 산학협력단 밀 껍질 추출물을 포함하는 화장료 조성물

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20160016753A (ko) * 2013-02-21 2016-02-15 주식회사 아도반테스토 Fpga 블록 내의 자동 패턴 생성을 위한 가속 및 메모리 상의 가속을 갖는 시험기
KR20180009851A (ko) * 2016-07-19 2018-01-30 삼성전자주식회사 직렬로 연결되는 스토리지 장치들 중 직접 연결되지 않은 스토리지 장치를 제어하도록 구성되는 전자 장치, 그것에 포함되는 스토리지 장치, 그것을 포함하는 컴퓨팅 시스템, 및 스토리지 장치의 컨트롤러의 동작 방법

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022131397A1 (ko) * 2020-12-16 2022-06-23 주식회사 모빌린트 Cnn-rnn 아키텍처 전환형 연산 가속장치 설계 방법

Also Published As

Publication number Publication date
KR102583255B1 (ko) 2023-09-26
US20200142842A1 (en) 2020-05-07
DE102019111128A1 (de) 2020-05-07
US11132309B2 (en) 2021-09-28
CN111142783A (zh) 2020-05-12
US20220012192A1 (en) 2022-01-13

Similar Documents

Publication Publication Date Title
KR102583255B1 (ko) 복수의 프로토콜을 적응적으로 지원하는 스토리지 장치
US12001374B2 (en) System and method for providing in-storage acceleration (ISA) in data storage devices
US10754588B2 (en) Performing data operations in a storage area network
US11816055B2 (en) Storage device performing peer-to-peer communication with external device without intervention of host
US11777864B2 (en) Transparent packet splitting and recombining
US20230097722A1 (en) Single field for encoding multiple elements
US11403023B2 (en) Method of organizing a programmable atomic unit instruction memory
US11379402B2 (en) Secondary device detection using a synchronous interface
US11989556B2 (en) Detecting infinite loops in a programmable atomic transaction
US11436187B2 (en) Method of notifying a process or programmable atomic operation traps
US9723071B2 (en) High bandwidth peer-to-peer switched key-value caching
US20220263769A1 (en) Combined write enable mask and credit return field
KR102669219B1 (ko) 종단 장치로부터 제공되는 부트 업 명령어에 기초하여 부팅 동작을 수행하도록 구성되는 전자 장치
CN114385236A (zh) 传递可编程原子操作符到存储器控制器
US11698791B2 (en) On-demand programmable atomic kernel loading
US11722138B2 (en) Dynamic power and thermal loading in a chiplet-based system
CN116569128A (zh) 存储器热点识别

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
GRNT Written decision to grant