KR102417692B1 - 메모리 셀의 결함을 제거하기 위한 메모리 시스템 및 그의 동작 방법 - Google Patents

메모리 셀의 결함을 제거하기 위한 메모리 시스템 및 그의 동작 방법 Download PDF

Info

Publication number
KR102417692B1
KR102417692B1 KR1020170161957A KR20170161957A KR102417692B1 KR 102417692 B1 KR102417692 B1 KR 102417692B1 KR 1020170161957 A KR1020170161957 A KR 1020170161957A KR 20170161957 A KR20170161957 A KR 20170161957A KR 102417692 B1 KR102417692 B1 KR 102417692B1
Authority
KR
South Korea
Prior art keywords
ranks
ecc
command set
program
memory
Prior art date
Application number
KR1020170161957A
Other languages
English (en)
Other versions
KR20190063111A (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 KR1020170161957A priority Critical patent/KR102417692B1/ko
Priority to US16/038,732 priority patent/US11138039B2/en
Publication of KR20190063111A publication Critical patent/KR20190063111A/ko
Application granted granted Critical
Publication of KR102417692B1 publication Critical patent/KR102417692B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • 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
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/0614Improving the reliability of storage systems
    • G06F3/0616Improving the reliability of storage systems in relation to life time, e.g. increasing Mean Time Between Failures [MTBF]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C29/08Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
    • G11C29/12Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
    • G11C29/14Implementation of control logic, e.g. test mode decoders
    • G11C29/16Implementation of control logic, e.g. test mode decoders using microprogrammed units, e.g. state machines
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C29/08Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
    • G11C29/12Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
    • G11C29/38Response verification devices
    • G11C29/42Response verification devices using error correcting codes [ECC] or parity check
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/52Protection of memory contents; Detection of errors in memory contents
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • G11C7/1006Data managing, e.g. manipulating data before writing or reading out, data bus switches or control circuits therefor
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • G11C7/1051Data output circuits, e.g. read-out amplifiers, data output buffers, data output registers, data output level conversion circuits
    • G11C7/1057Data output buffers, e.g. comprising level conversion circuits, circuits for adapting load
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C2029/0409Online test
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C2029/0411Online error correction

Landscapes

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

Abstract

메모리 셀에서 발생할 수 있는 결함을 최소화하기 위한 메모리 시스템 및 그의 동작 방법이 제공된다. 일 실시 예에 따르면, 메모리 시스템은, 다수의 랭크들을 포함하는 메모리 디바이스; 및 상기 메모리 디바이스와 동작적으로 결합되며, 상기 메모리 디바이스에 대하여 수행되는 적어도 하나의 프로그램과 상기 랭크들의 조합들 각각에 대응하여 다수의 커맨드 셋들 중에서 어느 하나의 커맨드 셋을 선택하기 위한 선택 신호들을 결정하고, 상기 메모리 디바이스에 대하여 상기 어느 하나의 커맨드 셋을 포함하는 프로그램을 수행하는 메모리 컨트롤러를 포함할 수 있다.

Description

메모리 셀의 결함을 제거하기 위한 메모리 시스템 및 그의 동작 방법{MEMORY SYSTEM FOR REMOVING MEMORY CELL FAULT AND METHOD THEREOF}
본 발명은 메모리 시스템 및 그의 동작 방법에 관한 것이다.
일반적으로 메모리는 제조 단계에서 충분한 테스트를 거쳐 제품으로 출하된다. 그러나 실제 사용 환경에서 메모리에는 추가적으로 결함(fault)이 발생할 수 있다. 추가적으로 발생할 수 있는 결함은 메모리 셀의 동작 또는 환경에 따라 간헐적으로 발생되는 간헐적 결함(intermittent fault)과, 메모리 셀의 물리적인 오류에 기인하여 정상 상태로 복원이 불가능한 영구적 결함(aging fault)로 구분될 수 있다.
본 발명의 실시 예들은 메모리 셀에서 발생할 수 있는 결함을 제거하기 위한 메모리 시스템 및 그의 동작 방법을 제공하기 위한 것이다.
본 발명의 실시 예들은 메모리 셀에서 발생할 수 있는 간헐적 결함을 최소화할 수 있도록 최적의 커맨드 셋을 스케줄링하는 메모리 시스템 및 그의 동작 방법을 제공하기 위한 것이다.
본 발명의 일 실시 예에 따르면, 메모리 시스템은, 다수의 랭크들을 포함하는 메모리 디바이스; 및 상기 메모리 디바이스와 동작적으로 결합되며, 상기 메모리 디바이스에 대하여 수행되는 적어도 하나의 프로그램과 상기 랭크들의 조합들 각각에 대응하여 다수의 커맨드 셋들 중에서 어느 하나의 커맨드 셋을 선택하기 위한 선택 신호들을 결정하고, 상기 메모리 디바이스에 대하여 상기 어느 하나의 커맨드 셋을 포함하는 프로그램을 수행하는 메모리 컨트롤러를 포함할 수 있다.
본 발명의 일 실시 예에 따르면, 다수의 랭크들을 포함하는 메모리 디바이스의 동작을 제어하기 위한 메모리 컨트롤러의 동작 방법은: 상기 메모리 디바이스에 대하여 수행되는 적어도 하나의 프로그램과 상기 랭크들의 조합들 각각에 대응하여 다수의 커맨드 셋들 중에서 어느 하나의 커맨드 셋을 선택하기 위한 선택 신호들을 결정하는 과정; 및 상기 메모리 디바이스에 대하여 상기 어느 하나의 커맨드 셋을 포함하는 프로그램을 수행하는 과정을 포함할 수 있다.
본 발명의 실시 예들에 따른 메모리 스케줄링 방안은 메모리 디바이스의 실제 사용 환경에서 추가로 발생할 수 있는 ECC 정정불가능 에러 레이트를 최소화하는 동시에 DRAM 랭크의 균일한 사용을 통하여 시스템 수명 및 성능을 극대화할 수 있다.
또한, 본 발명의 실시 예들에 따른 메모리 스케줄링 방안은 ECC 정정 정보를 내부 연산 유닛에 계속 누적하여 그 경향성을 학습하여, 해당 결함이 영구적 결함인지 간헐적 결함인지 구분을 하고, ECC 정정 수의 상승이 영구적 결함일 경우 커맨드 셋 변경을 하지 않음으로써 성능 저하(performance penalty)를 최소화할 수 있다.
또한, 본 발명의 실시 예들에 따른 메모리 스케줄링 방안은 m개의 랭크별, n개의 프로그램 별 총 (m x n)개의 연산 유닛들을 병렬로 설계하고, 각각의 유닛들이 해당 메모리 스케줄링 동작을 예측하게 함으로써, 병렬 처리를 통하여 최소의 연산시간을 이끌 수 있다.
또한, 본 발명의 실시 예들에 따른 메모리 스케줄링 방안은 과거 데이터를 각각의 연산 유닛들에 의해 누적하여, 미래의 데이터를 예측하는 인공지능 병렬처리 방식을 응용한 것으로, 해당 과거 데이터 학습을 통한 미래의 데이터 예측은 상당히 높은 예측 데이터의 정확도 산출을 이끌 수 있다.
도 1a 및 도 1b는 데이터 처리 시스템을 도시하는 도면들이다.
도 2는 본 발명의 실시 예에 따른 메모리 시스템을 도시하는 도면이다.
도 3은 본 발명의 실시 예에 따른 연산 네트워크에 구현될 수 있는 뉴럴 네트워크 구조를 도시하는 도면이다.
도 4는 본 발명의 실시 예에 따른 메모리 컨트롤러를 도시하는 도면이다.
도 5는 본 발명의 실시 예에 따른 연산 네트워크를 도시하는 도면이다.
도 6은 본 발명의 실시 예에 따른 연산 유닛들을 도시하는 도면이다.
도 7은 본 발명의 실시 예에 따른 제2 컨트롤 유닛을 도시하는 도면이다.
도 8은 본 발명의 실시 예에 따른 제1 컨트롤 유닛을 도시하는 도면이다.
도 9는 본 발명의 실시 예에 따른 단위 연산 유닛을 도시하는 도면이다.
도 10은 본 발명의 실시 예에 따른 성능 진단 유닛을 도시하는 도면이다.
도 11은 본 발명의 실시 예에 따른 ECC 진단 유닛을 도시하는 도면이다.
도 12는 본 발명의 실시 예에 따른 조정 컨트롤러를 도시하는 도면이다.
도 13은 본 발명의 실시 예에 따른 컨트롤 로직을 도시하는 도면이다.
도 14는 본 발명의 실시 예에 따른 임베디드 메모리 컨트롤러를 도시하는 도면이다.
도 15는 본 발명의 실시 예에 따른 에이징 분석기를 도시하는 도면이다.
도 16은 본 발명의 실시 예에 따른 메모리 디바이스에 대한 프로그램 수행 동작의 처리 흐름을 도시하는 도면이다.
도 17a 내지 도 17d는 본 발명의 실시 예에 따른 메모리 컨트롤러에 의해 수행되는 메모리 디바이스에 대한 프로그램 수행을 위한 커맨드 셋을 선택하는 동작의 흐름을 도시하는 도면이다.
이하, 본 발명에 따른 바람직한 실시 예를 첨부한 도면을 참조하여 상세히 설명한다. 하기의 설명에서는 본 발명에 따른 동작을 이해하는데 필요한 부분만이 설명되며 그 이외 부분의 설명은 본 발명의 요지를 흩뜨리지 않도록 생략될 것이라는 것을 유의하여야 한다.
도 1a 및 도 1b는 데이터 처리 시스템을 도시한 도면들이다.
도 1a를 참조하면, 데이터 처리 시스템 10은 호스트 20과 주변 장치 30을 포함할 수 있다. 주변 장치 30은 호스트 20로부터 커맨드 CMD(또는 요청)를 수신하며, 수신된 커맨드에 따른 데이터 DATA를 주고 받는다. 예를 들어, 호스트 20은 컴퓨터, 서버, 스마트폰 등이 될 수 있으며, 주변 장치 30은 모바일 또는 저장 장치 제품(mobile or storage product)이 될 수 있다.
도 1b를 참조하면, 도 1a에 도시된 주변 장치 30은 메모리 시스템 35에 의해 구현될 수 있다. 즉, 데이터 처리 시스템 10은 호스트 20 및 메모리 시스템 35를 포함할 수 있다. 호스트 20은 휴대폰, MP3 플레이어, 랩탑 컴퓨터 등과 같은 휴대용 전자 장치들, 또는 데스크탑 컴퓨터, 게임기, TV, 프로젝터 등과 같은 전자 장치들을 포함할 수 있다.
메모리 시스템 35는 호스트 20로부터의 커맨드에 응답하여 액세스될 수 있다. 다시 말해, 메모리 시스템 35는 호스트 20의 주 기억 장치 또는 보조 기억 장치로 사용될 수 있다.
메모리 시스템 35는 메모리 컨트롤러 100과 메모리 디바이스 200을 포함할 수 있다. 메모리 컨트롤러 100은 호스트 20으로부터의 커맨드에 응답하여 해당하는 메모리 디바이스 200에 대한 액세스 동작을 수행한다. 예를 들어, 메모리 컨트롤러 100은 호스트 20으로부터의 라이트 커맨드에 응답하여 호스트 20으로부터의 라이트 데이터를 메모리 디바이스 200에 저장한다. 다른 예로, 메모리 컨트롤러 100은 호스트 20으로부터의 리드 커맨드에 응답하여 메모리 디바이스 200에 저장된 데이터를 리드하고, 그 리드 데이터를 호스트 20으로 전달한다. 다양한 실시 예들에서, 메모리 디바이스 200은 DRAM(Dynamic Random Access Memory), SRAM(Static RAM) 등과 같은 휘발성 메모리 디바이스가 될 수 있다. 다른 실시 예들에서, 메모리 디바이스 200은 ROM(Read Only Memory), MROM(Mask ROM), PROM(Programmable ROM), EPROM(Erasable ROM), EEPROM(Electrically Erasable ROM), FRAM(Ferromagnetic ROM), PRAM(Phase change RAM), MRAM(Magnetic RAM), RRAM(Resistive RAM), 플래시 메모리 등과 같은 비휘발성 메모리 디바이스가 될 수 있다.
한편 DRAM(Dynamic Random Access Memory)와 같은 메모리 디바이스는 제조 단계에서 충분한 테스트를 거쳐 제품으로 출하된다. 그러나 실제 사용 환경에서 메모리 디바이스에는 추가적으로 결함(fault)이 발생할 수 있다. 추가적으로 발생할 수 있는 결함(이하 "추가 결함"이라 칭함)은 간헐적 결함(intermittent fault)과 영구적 결함(aging fault)로 구분될 수 있다. BTI(Bias Temperature Instability), 게이트-옥사이드 파괴(gate-oxide breakdown) 등과 같은 영구적 결함은 시간이 지나면서 영구적으로 회복이 어려운 디펙이다. 반면에, 간헐적 결함은 온도, 환경, 프로세스의 변이(variation) 및 테스트 벤치(test bench) 특성 등에 따라 발생하는 디펙(defect)이다. 간헐적 결함이 발생하는 경우에도 메모리 셀은 다시 정상적으로 동작할 수도 있다.
이러한 추가 결함을 해결하기 위하여 소위 ECC(Error Correction Code)를 이용한 에러 정정 기술이 사용될 수 있다. 그러나 메모리의 캐패시터(capacity)가 증가하고, 사물인터넷(Internet of Things, IoT)/자동화(automotive)와 같은 다양한 환경에서 메모리를 사용하는 경우, 해당 추가 결함은 더 증가하게 되고, 그 결과 ECC를 이용하여 결함을 정정하지 하지 못하는 ECC 정정 불가능(uncorrectable) 상황이 많이 발생할 수 있다.
도 2는 본 발명의 실시 예에 따른 메모리 시스템을 도시하는 도면이다.
도 2를 참조하면, 메모리 시스템은 메모리 컨트롤러 100과 메모리 디바이스 200을 포함할 수 있다. 메모리 컨트롤러 100은 외부, 예를 들어 도 1a 및 도 1b의 호스트 20으로부터 수신되는 액세스 요청에 응답하여 메모리 디바이스 200을 제어할 수 있다. 상기 수신되는 요청은 메모리 디바이스 200에 대한 리드(read) 커맨드 또는 라이트(write) 커맨드와 같은 단일의 커맨드를 포함할 수 있다. 이와 달리, 상기 수신되는 요청은 특정 기능을 수행하기 위한 함수로서의 다수의 메모리 커맨드들의 조합, 즉 커맨드 셋을 포함할 수 있다. 이하에서 용어 “프로그램(program)”은 다수의 메모리 커맨드들의 조합인 커맨드 셋을 의미하는 것으로 정의될 수 있다.
예를 들어, 프로그램은 도 1a 및 도1b에 도시된 바와 같은 메모리 시스템 35을 사용하는 데이터 처리 시스템에서 수행될 수 있는 인터넷(internet), 게임(game) 등과 같이 넓은 범위의 기능 또는 어플리케이션(application)을 의미할 수 있다. 다른 예로, 프로그램은 데이터 처리 시스템에서 수행될 수 있는 배경화면, 시계 등과 같이 범위의 기능 또는 어플리케이션을 의미할 수 있다. 또 다른 예로, 프로그램은 데이터 처리 시스템에서 수행될 수 있는 좁은 범위의 기능 또는 어플리케이션을 위한 랜덤 함수(random function) 또는 순차적 함수(incremental function)을 의미할 수 있다.
또한, 메모리 디바이스 200이 DRAM인 경우, 프로그램은 액티브 커맨드 ACT, 리드 커맨드 RD, 라이트 커맨드 WR의 조합으로 표현될 수도 있다. 예를 들어, 프로그램은 ACT --> RD --> WR --> ACT --> RD --> WR와 같은 순서의 커맨드 셋일 수 있다. 다른 예로, 프로그램은 ACT --> RD --> ACT --> WR --> ACT --> RD --> ACT --> WR와 같은 순서의 커맨드 셋일 수 있다. 또 다른 예로, 프로그램은 ACT --> RD --> WR --> RD --> WR와 같은 커맨드 셋일 수 있다.
메모리 디바이스 200은 메모리 컨트롤러 100으로부터 액세스 요청에 응답하여 동작한다. 예를 들어, 메모리 디바이스 200은 메모리 컨트롤러 100으로부터의 라이트 커맨드에 응답하여 메모리 컨트롤러 100으로부터 제공되는 데이터를 자신의 해당하는 저장 영역에 저장한다. 다른 예로, 메모리 디바이스 200은 메모리 컨트롤러 100으로부터의 리드 커맨드에 응답하여 해당하는 저장 영역에 저장되어 있는 데이터를 리드하여 메모리 컨트롤러 100으로 전달한다.
다양한 실시 예에서, 메모리 디바이스 200은 DRAM(dynamic random access memory)일 수 있다. 이러한 경우 메모리 디바이스 200은 메모리 저장 영역으로서 다수의 메모리 뱅크(bank)들 210을 포함할 수 있다. 다수의 메모리 뱅크들 각각은 워드 라인과 비트 라인 사이에 연결된 다수의 메모리 셀들을 포함하는 메모리 셀 어레이로 구성될 수 있다. 하나의 메모리 뱅크는 다수의 메모리 셀들을 포함하는 하나의 메모리 칩을 포함할 수 있으며, 하나의 메모리 랭크(rank)는 다수의 메모리 뱅크들 또는 다수의 메모리 칩들을 포함할 수 있다. 예를 들어, 8bit wide DRAM들의 rank는 8개의 메모리 칩들을 포함할 수 있으며, 4bit wide DRAM들의 rank는 16개의 메모리 칩들을 포함할 수 있다.
또한, 메모리 디바이스 200은 메모리 컨트롤러 100의 액세스 요청에 응답하는 동작 수행 중에 에러가 발생할 시 에러를 정정하는 동작을 수행할 수 있다. 이를 위하여, 메모리 디바이스 200은 ECC(error correction code) 회로 220을 포함할 수 있다. 예를 들어, ECC 회로 220은 다수의 메모리 뱅크들 210의 특정 셀에 라이트되는 데이터 또는 다수의 메모리 뱅크(bank)들 210의 특정 셀로부터 리드되는 데이터에 대하여 에러 정정 동작을 수행할 수 있다.
메모리 컨트롤러 100은 컨트롤 유닛 100A와 연산 네트워크 300을 포함할 수 있다. 컨트롤 유닛 100A는 외부(예; 도 1a와 도 1b의 호스트 20)로부터 액세스 요청에 대응하는 동작을 수행할 수 있다. 예를 들어, 컨트롤 유닛 100A는 호스트 20으로부터 제공되는 커맨드 CMD와 어드레스 ADDR을 수신하고, 수신된 커맨드 및 어드레스에 대응하는 라이트 데이터 DATA를 메모리 디바이스 200으로 제공하거나, 수신된 커맨드 및 어드레스에 대응하는 리드 데이터 DATA를 메모리 디바이스 200으로부터 수신한다. 이러한 컨트롤 유닛 100A는 제1 컨트롤 유닛 400과 제2 컨트롤 유닛 500을 포함할 수 있다. 여기서는 편의상 컨트롤 유닛 100A가 2개로 구분되는 경우를 설명하고 있지만 이에 제한되는 것은 아님에 유의하여야 한다. 제1 컨트롤 유닛 400과 제2 컨트롤 유닛 500 각각의 구성과 동작에 대한 설명은 후술될 것이다.
메모리 컨트롤러 100은 연산 네트워크(computation network) 300을 포함할 수 있다. 연산 네트워크 300은 뉴럴 네트워크(neural network) 구조를 이용하여 구현될 수 있다. 뉴럴 네트워크 구조는 인공지능, 기계학습(machine learning), 뉴로모픽 프로세서(neuromorphic processor) 등에 사용될 수 있는 구조로, 방대한 양의 데이터를 병렬적으로 처리 가능하게 한다. 또한, 연산 네트워크 300은 기존의 데이터를 계속하여 누적하여 활용하는 병렬 처리 기법을 사용하여, 메모리 디바이스 200에 대한 프로그램 수행에 따른 최적의 커맨드 셋을 예측할 수 있다. 이러한 구조를 통하여 구현될 수 있는 메모리 컨트롤러 100은 성능 저하(CPU performance penalty)를 최소화하는 최적의 커맨드 셋을 예측함으로써 시스템 신뢰도(system reliability)와 시스템 성능(system performance)를 최적화할 수 있다.
전술한 바와 같은 메모리 디바이스 200의 실제 사용 환경에서 발생하는 ECC 정정 불가능 에러는 메모리 디바이스 200에 대하여 수행되는 프로그램을 위한 커맨드 셋(set)의 순서와 조합에 따라 다르게 발생할 수 있다. 그러므로 메모리 디바이스에 대한 스케줄링(scheduling), 예를 들어, 메모리 디바이스 200이 DRAM인 경우 단위 메모리 랭크가 처리하는 커맨드 셋의 조합을 어떻게 하느냐에 따라 ECC 실패 레이트(failure rate)가 달라질 수 있다. 특히 로우 해머(row hammer) 현상은 커맨드 셋의 순서와 조합에 많이 좌우될 수 있다. 여기서 로우 해머는 메모리 디바이스 200에 포함되는 임의의 메모리 셀의 전하량이 해당 메모리 셀이 연결된 워드 라인에 인접한 워드 라인의 액티브-프리차지에 의해 영향을 받음에 따라, 임의의 메모리 셀의 데이터가 리프레쉬(refresh) 간격보다 짧은 시간에 열화되는 현상을 의미한다.
ECC 실패 레이트를 낮추기 위하여 메모리 스케줄링을 변화시키는 경우, 메모리 시스템 전체의 성능(performance)이 저하되거나, 특정 메모리 디바이스의 영역(예; DRAM 랭크)의 사용량이 감소될 수 있다. 예를 들어, DRAM으로 구현될 수 있는 메모리 디바이스 200에 대하여 수행되는 프로그램을 위한 커맨드 셋의 순서와 조합을 변경시키는 경우, 모든 DRAM 랭크가 단위 시간 내에 처리할 수 있는 커맨드 셋의 총 처리량이 감소될 수 있다. 또한 DRAM 랭크의 사용량이 균일하지 못함에 따라 특정 랭크의 사용량은 감소되고 다른 랭크는 많이 사용되는 경우, 에이징 이슈(aging issue)로 인한 시스템 수명(system lifetime)이 줄어들 수 있다. 다시 말하면, ECC 정정 불가능 에러의 최소화를 위하여 메모리 스케줄링을 바꾸는 경우, 시스템 성능 저하와 시스템 수명 감소가 야기될 수 있다. 따라서 본 발명의 실시 예들은 시스템의 성능 저하와 수명 감소를 최소화하면서도 동시에 ECC 정정 불가능 에러를 최소화할 수 있도록 하는 메모리 스케줄링 방안을 제안한다.
한편, 메모리 에이징 현상에 의해서 시간에 따라 ECC 정정 레이트(correction rate)가 증가될 수 있지만, 메모리 에이징 이슈는 커맨드 셋의 조합과 순서와 큰 관계가 없다. 그러므로 에이징 이슈에 따라 ECC 정정 레이트가 증가하는 경우에는 커맨드 셋을 변경시킬 필요가 없다. 따라서, 본 발명의 실시 예들은 ECC 정정 정보에 대한 경향성을 분석하여 해당 메모리 랭크에서 에이징의 정도를 판단하고, 판단 결과 간헐적 결함보다 영구적 결함이 우세한 경우에는 커맨드 셋을 변경시키지 않음으로써 커맨드 셋의 변경에 따른 시스템의 성능 저하를 피할 수 있도록 한다.
후술되는 본 발명의 실시 예들은 메모리 디바이스가 DRAM에 의해 구현된 경우로 국한하여 설명될 것이지만, 이에 제한되는 것은 아니다. DRAM과 같은 메모리 디바이스의 실제 사용 환경에서 추가로 발생하는 ECC 정정불가능한 결함 레이트(uncorrectable fault rate)는 DRAM의 프로세스 변이(process variation)와, 해당 ECC 정정불가능 결함이 영구적 결함인지 간헐적 결함인지의 진단 결과, 커맨드 셋(또는 프로그램)의 종류에 의존할 수 있다. 본 발명의 실시 예들은 DRAM on-die ECC정보를 활용하여 ECC 정정 불가능 발생 레이트를 최소화하는 동시에 시스템 성능과 시스템 수명을 극대화하는 메모리 컨트롤러의 병렬 연산 메모리 스케줄링 기법을 제안한다. 본 발명의 실시 예들에 따른 메모리 컨트롤러, 예를 들어 도 2에 도시된 메모리 컨트롤러 100은 다음과 같은 특징을 갖는다.
첫째, 간헐적 결함은 프로세스 변이, 환경/온도, 프로그램(또는 커맨드 셋)에 따라 변할 수 있으므로, 메모리 컨트롤러 100은 각 프로세스 변이가 비슷한 단위인 랭크 별 그리고 프로그램 별로 해당 정보(예를 들어, ECC 정정 정보/실패 경향 정보)를 저장하고 학습하여 간헐적 결함을 최소화하는 메모리 스케줄링 동작을 수행한다.
둘째, 메모리 컨트롤러 100은 DRAM의 간헐적 결함 레이트를 최소화하는 동시에 내부 레지스터에 누적해 놓은 랭크 별 및 전체 시스템의 성능 관련 정보를 학습하여 DRAM 랭크의 사용 빈도를 최대한 균일하게 함으로써 시스템 수명을 최대화 하고 전체 시스템 성능, 즉 단위 시간당 커맨드 셋 처리량을 극대화하는 메모리 스케줄링 동작을 수행한다.
셋째, 메모리 컨트롤러 100은 ECC 정정 관련 정보에 대한 경향 학습을 통하여 DRAM 결함이 영구적 결함인지 간헐적 결함인지를 구분하고, 최소의 메모리 성능 저하(memory performance penalty)를 동반한 간헐적 결함을 제어하는 메모리 스케줄링 동작을 수행한다.
넷째, 메모리 컨트롤러 100은 기계 학습(machine learning)에서 자주 사용하는 병렬 연산 처리 방식을 활용화여 연산 처리 시간의 최소화 및 예측 데이터의 정확성을 극대화시킨다.
도 3은 본 발명의 실시 예에 따른 도 2에 도시된 연산 네트워크 300에 구현될 수 있는 뉴럴 네트워크 구조를 도시하는 도면이다. 뉴럴 네트워크 구조는 소위 recurrent Neural Network (RNN) 구조일 수 있다.
RNN 구조는 입력 레이어들(input layers) 32와, 은닉 레이어들(hidden layers) 34와, 출력 레이어들(output layers) 36을 포함할 수 있다. 각각의 레이어에는 메모리와 연산기가 포함될 수 있다. 입력 레이어들 32와 은닉 레이어들 34는 데이터들을 수집하여 연산하고, 출력 레이어들 36은 원하는 파라미터(parameter) 값을 연산한다. 이러한 RNN 구조는 방대한 양의 데이터를 병렬 처리하면서도, 동시에 방대한 양의 연산에 저전력이 소모된다는 장점과, 출력 레이어들이 이전에 은닉 레이어들에 저장된 데이터들을 가지고 학습하여 최적의 데이터를 예측할 수 있다는 장점이 있다.
RNN 구조를 가지도록 구현되는 도 2의 메모리 컨트롤러 100은 랭크 별 프로세스 변이를 표현하기 위하여, 다수의 랭크들 및 다수의 프로그램들의 조합들 각각에 대응하는 연산 유닛들을 포함한다(도 6 참조). 각 연산 유닛들은 관련 누적된 데이터를 학습함으로써 최적의 메모리 스케줄링 동작이 수행되도록 한다. 예를 들어, 하나의 메모리 시스템이 8개의 DRAM 랭크들과 10가지의 프로그램들을 지원한다면, 총 80개의 연산 유닛들 각각이 개별 연산을 동시에 병렬적으로 처리하기 때문에 메모리 스케줄링 동작이 빠르게 수행될 수 있다.
도 3에서, y축(또는 세로축)의 레이어들 각각은 독립된 메모리 랭크의 정보를 연산하기 위한 레이어이다. 예를 들어, y축 1번째 상단 레이어는 DRAM 랭크 1에 대한 정보를 연산하고, y축 2번째 상단 레이어는 DRAM 랭크 1에 대한 정보를 연산하고, y축 3번째 상단 레이어는 DRAM 랭크 3에 대한 정보를 연산하고, y축 4번째 상단 레이어는 DRAM 랭크 4에 대한 정보를 연산한다. 즉, 이러한 구조는 서로 다른 메모리 랭크의 프로세스 변이를 표현한다.
x축(또는 가로축)에서 은닉 레이어들 34 각각은 서로 다른 프로그램의 종류 (또는 커맨드 셋의 종류, 구동 시간 단위), 온도/환경을 표현한다. 즉 하나의 세로축 레이어 단위는 서로 다른 프로그램 셋의 종류를 나타낸다. 즉, 은닉 레이어들 34의 개수는 정보를 수집하고 싶은 프로그램 종류의 수에 대응한다.
입력 레이어들 32와 출력 레이어들 36은 후술되는 도 7에 도시된 컨트롤 블록 500에 해당하는 구성요소들일 수 있고, 은닉 레이어들 34는 도 6에 도시된 단위 연산 유닛들 300A에 해당하는 구성요소들일 수 있다.
도 4는 본 발명의 실시 예에 따른 메모리 컨트롤러 100을 도시하는 도면이다.
도 4를 참조하면, 메모리 컨트롤러 100은 연산 네트워크 300, 제1 컨트롤 유닛 400, 및 제2 컨트롤 유닛 500을 포함할 수 있다. 제1 컨트롤 유닛 400은 커맨드 CMD, 프로그램 정보 Program[0:j], 어드레스 정보 ADDR, 에러정정 정보 ECC info.를 제2 컨트롤 유닛 500으로 송신할 수 있다. 예를 들어, 제1 컨트롤 유닛 400은 커맨드 CMD와 프로그램 정보 Program[0:j]와 어드레스 정보 ADDR을 도 1b에 도시된 호스트 20으로부터 수신하여 제2 컨트롤 유닛 500으로 전달할 수 있으며, 에러정정 정보 ECC info.를 도 2에 도시된 메모리 디바이스 200으로부터 수신하여 제2 컨트롤 유닛 500으로 전달할 수 있다.
제2 컨트롤 유닛 500은 제1 컨트롤 유닛 400으로부터 수신된 정보들에 응답하여 각종 정보들(또는 신호들, 값들) ECC_1 - ECC_m, CC_1 - CC_m, EN1 - ENm, CC1_AVG - CCm_AVG, CC_AVG를 생성하고, 생성된 정보들을 연산 네트워크 300으로 제공한다.
연산 네트워크 300은 메모리 랭크들과 프로그램들의 조합들 각각에 대하여 최적의 커맨드 셋을 선택하기 위한 연산을 수행할 수 있다. 이러한 연산을 위하여, 연산 네트워크 300은 제2 컨트롤 유닛 500으로부터 각종 정보들 ECC_1 - ECC_m, CC_1 - CC_m, EN1 - ENm, CC1_AVG - CCm_AVG, CC_AVG를 수신한다. 또한, 연산 네트워크 300은 연산 수행 결과에 따른 정보들 W1_p1, W2_p2, ... Wm_p1, ...... W1_pn, W2_pn, ... Wm_pn을 제2 컨트롤 유닛 500으로 출력한다.
제2 컨트롤 유닛 500은 연산 네트워크 300으로부터 정보들 W1_p1, W2_p2, ... Wm_p1, ...... W1_pn, W2_pn, ... Wm_pn을 수신하고, 이에 응답하는 정보들 Code_p1, Code_p2, ... Code_pn을 생성하여 제1 컨트롤 유닛 400으로 출력한다.
제1 컨트롤 유닛 400은 제2 컨트롤 유닛 500으로부터 제공되는 정보들 Code_p1, Code_p2, ... Code_pn을 수신한다. 제1 컨트롤 유닛 400은 수신된 정보들에 응답하여 각 프로그램별 최적의 커맨드 셋을 선택하고, 메모리 디바이스 200에 대한 선택된 커맨드 셋에 대응하는 프로그램 동작이 수행되도록 제어한다. 상기 Code_p1은 제1 프로그램 p1에 대한 커맨드 셋들 중에서 최적의 커맨드 셋을 선택하기 위한 신호이며, Code_p2는 제2 프로그램 p2에 대한 커맨드 셋들 중에서 최적의 커맨드 셋을 선택하기 위한 신호이며, Code_pn은 제n 프로그램 pn에 대한 커맨드 셋들 중에서 최적의 커맨드 셋을 선택하기 위한 신호이다.
제1 컨트롤 유닛 400은 일반적인 메모리 컨트롤러의 내부에 포함되는 컨트롤 유닛일 수 있으며, 제2 컨트롤 유닛 500은 본 발명의 실시 예들에 따른 연산 네트워크 300과의 연계 동작을 위한 컨트롤 유닛일 수 있다. 이와 달리, 제1 컨트롤 유닛 400과 제2 컨트롤 유닛 500은 단일의 컨트롤 유닛을 포함하는 형태로 구성될 수도 있다.
하기에서 본 발명의 다양한 실시 예들을 설명함에 있어서 사용되는 주요한 용어들은 다음의 <표 1>과 같이 정의될 수 있다.

ADDR : 어드레스
CC_1, CC_2, ... CC_m : m개의 랭크별 수행한 총 커맨드 수
CC_AVG :
m개 랭크가 n개 프로그램을 수행하는 동안 처리한 모든 커맨드 셋의 수의 평균
CC1_AVG, CC2_AVG, ... CCm_AVG :
각 랭크가 n개 프로그램을 처리할 때의 평균 커맨드 셋의 수
Code_p1, Code_p2, ... Code_pn : 각 프로그램별 커맨드 셋 선택 코드
CMD : 커맨드
ECC info. : ECC 정보 또는 정정 정보
ECC_1, ECC_2, ... ECC_m : m개의 랭크별 ECC 정정된 메모리 셀의 수
ECC_ref1 : 특정 프로그램 내에서 랭크 1에 최대 허용되는 ECC 카운트 수
EN1, EN2, ... ENn : n개의 프로그램들을 선택하기 위한 인에이블 신호
Program[0:j] : 프로그램 정보
Ref_N1, Ref_N2 : 기준 값
W1_p1, ... Wm_pn :
m개의 랭크별 n개의 프로그램별 커맨드 셋 선택을 위한 신호 또는 코드
도 5는 본 발명의 실시 예에 따른 연산 네트워크 300을 도시하는 도면이다.
도 5를 참조하면, 연산 네트워크 300은 다수의 연산 유닛들 300A를 포함할 수 있다. 다수의 연산 유닛들 300A 각각은 m개의 메모리 뱅크들과 p개의 프로그램들의 조합에 따른 (m x p)개의 연산 유닛들을 포함할 수 있다.
도 6은 본 발명의 실시 예에 따른 연산 유닛들 300A을 도시하는 도면이다.
도 6을 참조하면, 연산 유닛들 300A는 m개의 메모리 랭크들과 n개의 프로그램들의 조합에 해당하는 (m x n)개의 연산 유닛들을 포함할 수 있다. 연산 유닛들 300A는 도 5에 도시된 제2 컨트롤 유닛 500으로부터 ECC_1 - ECC_m, CC_1 - CC_m, EN1 - ENm, CC1_AVG - CCm_AVG, CC_AVG의 값들을 수신하고, 해당 연산 동작을 수행한다. 또한, 연산 유닛들 300A는 연산 수행 결과에 따른 W1_p1, W2_p1, ... Wm_p1, ... W1_pn, W2_pn, ... Wm_pn의 값들을 제2 컨트롤 유닛 500으로 출력한다.
연산 유닛들 311 내지 319는 제1 DRAM 랭크 310에 대한 연산 유닛들이고, 연산 유닛들 321 내지 329는 제2 DRAM 랭크 320에 대한 연산 유닛들이고, 연산 유닛들 331 내지 339는 제m DRAM 랭크 330에 대한 연산 유닛들이다. 연산 유닛들 311, 321, 331은 제1 프로그램 Program 1에 대한 연산 유닛들이다. 연산 유닛들 312, 322, 332는 제2 프로그램 Program 2에 대한 연산 유닛들이다. 연산 유닛들 319, 329, 339는 제n 프로그램 Program n에 대한 연산 유닛들이다.
연산 유닛 311은 EN1, ECC_1, CC_1, CC1_AVG, CC_AVG의 값들을 수신하고, 이에 응답하여 연산 동작을 수행하고 W1_p1을 출력한다. 제1 DRAM 랭크 310에 대한 다른 연산 유닛들 312, 319는 마찬가지의 연산 동작을 수행한다. 연산 유닛 211은 EN1, ECC_2, CC_2, CC2_AVG, CC_AVG의 값들을 수신하고, 이에 응답하여 연산 동작을 수행하고 W2_p1을 출력한다. 제2 DRAM 랭크 320에 대한 다른 연산 유닛들 322, 329는 마찬가지의 연산 동작을 수행한다. 연산 유닛 331은 EN1, ECC_m, CC_m, CCm_AVG, CC_AVG의 값들을 수신하고, 이에 응답하여 연산 동작을 수행하고 Wm_p1을 출력한다. 제m DRAM 랭크 330에 대한 다른 연산 유닛들 332, 339는 마찬가지의 연산 동작을 수행한다.
다시 도 2, 도 4, 도 5 및 도 6을 참조하면, 연산 네트워크 300은 단위 연산을 하는 연산 유닛들 300A로 구성된다. 각각의 연산 유닛들 300A의 가로축에는 DRAM 랭크 1 (Comp_R1_p1 ~ Comp_R1_pn)부터 랭크 m (Comp_Rm_p1 ~ Comp_Rm_pn)까지의 레이어들이 존재한다. 각각의 연산 유닛들 300A의 세로축은 프로그램들의 종류 별로 구분된다. 프로그램들의 수는 사용자에 의해 자유롭게 설정될 수 있다. 1번째 세로축의 연산 유닛들의 그룹 (Comp_R1_p1, Comp_R2_p1, ... Comp_Rm_p1)은 단위 프로그램 1에서 수행되는 랭크들을 포함한다. 이러한 연산 유닛들의 그룹은 n개 존재하며, 이들은 n개의 프로그램들에 해당하는 정보를 저장할 수 있다.
연산 네트워크 300 내에 포함되는 총 m x n개의 연산 유닛들 300A는 각각의 데이터를 누적 저장하여 학습하여 커맨드 선택 코드 신호 또는 코드 (W1_p1~Wm_pn)을 예측한다. 이와 같이 연산 유닛들을 여러 개로 나눈 이유는 다음과 같다.
1) DRAM의 간헐적 결함의 레이트는 커맨드 셋의 조합에 의존한 함수이므로 커맨드 셋의 조합으로 이루어지는 n개 프로그램 각각에 대한 실패 레이트의 경향성을 따로 연산할 필요가 있다. 그러므로 연산 네트워크 300은 프로그램 별로 독립적인 연산 유닛을 포함하도록 설계된다.
2) DRAM의 간헐적 결함은 각각 DRAM 다이(die)의 프로세스 변이에 영향을 받을 수 있다. 각 랭크 별로 비슷한 프로세스 변이를 가지고, 특정 랭크는 다른 랭크와 서로 다른 프로세스 변이를 나타낸다. 그러므로, 프로세스 변이를 표현하기 위하여 연산 네트워크 300은 m개 랭크 별로 다른 연산 유닛을 포함하도록 설계된다.
이와 같이 m x n개의 연산 유닛들을 설계함으로써 DRAM의 간헐적 결함의 레이트의 프로세스 변이 의존성 및 커맨드 셋 조합의 의존성을 모두 표현 가능하다.
3) 연산 네트워크 300에 포함되는 각 연산 유닛들 300A는 각각 서로 다른 케이스의 데이터를 저장하고, 그것을 학습하고, 그리고 최종 커맨드 셋을 예측하는 해당 일련의 과정을 개별적으로 동시에 처리하는 병렬 구조를 갖는다. 그러므로 연산 네트워크 300은 최소 연산 시간을 달성할 수 있다. 즉, 메모리 컨트롤러 100은 연산 시간을 축소할 수 있다.
도 7은 본 발명의 실시 예에 따른 제2 컨트롤 유닛 500을 도시하는 도면이다.
도 7을 참조하면, 컨트롤 블록 500은 커맨드 카운터(CMD counter) 510, 레지스터들 520, 레지스터들 530, 어드레스-랭크 변환기(address-to-rank converter) 540, ECC 카운터 및 정렬 로직(ECC counter/sorting logic) 550을 포함할 수 있다.
커맨드 카운터 510은 커맨드 CMD와 랭크 신호 Rank를 입력하여 카운트 동작을 수행하고, 랭크별 수행된 커맨드 수에 대한 정보 CC_1, CC_2, ... CC_m을 출력한다. 레지스터들 520은 커맨드 카운터 510에 의한 카운트 결과값을 저장하기 위한 레지스터들을 포함한다. 예를 들어, 레지스터들 520은 랭크 1에 대하여 수행된 커맨드 수 CC_1을 저장하는 레지스터와, 랭크 2에 대하여 수행된 커맨드 수 CC_2를 저장하는 레지스터와, 랭크 m에 대하여 수행된 커맨드 수 CC_m을 저장하는 레지스터를 포함한다.
어드레스-랭크 변환기 540은 수신 어드레스 Addr을 대응하는 랭크 신호 Rank로 변환하여 출력한다. 예를 들어, 어드레스-랭크 변환기 540은 메모리 디바이스 200의 어드레스 Addr가 수신되면, 대응하는 메모리 디바이스 200의 랭크를 확인하고, 이 확인된 랭크를 지시하는 값을 출력한다. ECC 카운터 및 정렬 로직 550은 에러 정정 정보 ECC info.와 랭크 신호 Rank를 입력하여 카운트 동작 및 정렬 동작을 수행하고, 랭크별 ECC 정정 수에 대한 정보 ECC_1, ECC_2, ... ECC_m을 출력한다. 레지스터들 530은 ECC 카운터 540에 의한 카운트 결과값을 저장하기 위한 레지스터들을 포함한다. 예를 들어, 레지스터들 530은 랭크 1에 대한 ECC 정정 수 ECC_1을 저장하는 레지스터와, 랭크 2에 대한 ECC 정정 수 ECC_2를 저장하는 레지스터와, 랭크 m에 대한 ECC 정정 수 ECC_m을 저장하는 레지스터를 포함한다.
또한, 컨트롤 블록 500은 코드 생성기(code generator) 560, 디코더(decoder) 570 및 평균화(averaging) 로직 및 레지스터들(registers) 580을 포함할 수 있다. 디코더 570은 Program[0:j]를 수신하여 디코딩하고, 특정 프로그램을 인에이블시키기 위한 신호 EN1, EN2, ... ENn을 출력한다. 평균화 로직 및 레지스터들 580은 랭크별 수행된 커맨드 수에 대한 정보 CC_1, CC_2, ... CC_m을 수신하여 이들에 대한 평균값을 취하고, 평균값 CC_AVG를 출력한다. 이때 평균화 로직 및 레지스터들 580에 포함되는 내부 레지스터들은 랭크별 수행된 커맨드 수에 대한 정보 CC_1, CC_2, ... CC_m과, 평균값 CC_AVG를 저장한다.
코드 생성기 560은 연산 유닛들 300A에 의한 연산 수행 결과 값들 W1_p1, W2_p1, ... Wm_p1, ...... W1_pn, W2_pn, ... Wm_pn을 수신하고, 이에 응답하는 정보들 Code_p1, Code_p2, ... Code_pn을 생성 및 출력한다.
도 8은 본 발명의 실시 예에 따른 제1 컨트롤 유닛 400을 도시하는 도면이다.
도 8을 참조하면, 제1 컨트롤 유닛 400은 버퍼(buffer) 410, 컨트롤 블록(control block) 420, 요청 큐(request queue) 430, 스테이트 머신(state machine) 440 및 레지스터들 450을 포함할 수 있다. 버퍼 410은 외부(예; 호스트 20)로부터 수신되는 메모리 디바이스 200에 저장될 데이터 또는 메모리 디바이스 200으로부터 수신되는 데이터를 저장할 수 있다. 버퍼 410에 저장된 데이터는 외부(예; 호스트 20)로도 전달될 수 있다. 요청 큐 430은 메모리 디바이스 200으로부터 ECC info.를 수신하여 저장할 수 있다. 또한, 요청 큐 430은 외부(예; 호스트 20)로부터 수신되는 CMD, Addr을 수신하여 저장할 수 있다.
컨트롤 블록 420은 제2 컨트롤 유닛 500으로부터 각 프로그램별 최적의 커맨드 셋을 선택하기 위한 정보 Code_p1, Code_p2, ... Code_pn을 수신하고, 이 수신된 정보들을 레지스터들 450에 저장할 수 있다. 레지스터들 450은 프로그램 1에 대한 최적의 커맨드 셋을 선택하기 위한 정보 Code_p1을 저장하는 레지스터와, 프로그램 2에 대한 최적의 커맨드 셋을 선택하기 위한 정보 Code_p2를 저장하는 레지스터와, 프로그램 3에 대한 최적의 커맨드 셋을 선택하기 위한 정보 Code_p3을 저장하는 레지스터와, 프로그램 m에 대한 최적의 커맨드 셋을 선택하기 위한 정보 Code_pm을 저장하는 레지스터를 포함할 수 있다.
컨트롤 블록 420은 메모리 디바이스 200에 대한 특정 프로그램을 수행할 시 레지스터들 450에 저장된 상기 특정 프로그램에 대한 커맨드 셋들 중에서 최적의 커맨드 셋을 확인하고, 해당하는 커맨드 셋을 통한 프로그램 동작이 수행되도록 제어할 수 있다. 스테이트 머신 440은 컨트롤 블록 420의 제어하에 메모리 디바이스 200에 대하여 수행되는 특정 프로그램의 스테이트를 제어할 수 있다.
다시 도 4, 도 5, 도 7 및 도 8을 참조하면, 제2 컨트롤 유닛 500은 제1 컨트롤 유닛 400으로부터 커맨드 CMD, 프로그램(또는 n개의 커맨드 셋의 조합), ECC info (또는 ECC 정정 정보), 어드레스 Addr를 수신할 수 있다. 제1 컨트롤 유닛 400에 포함되는 레지스터들 450은 n개의 프로그램 별로 레지스터 셋을 포함할 수 있다. 각각의 프로그램 별 레지스터에는 가능한 모든 랭크별 커맨드 셋의 조합이 저장되어 있을 수 있다. 연산 네트워크 300에 의해 연산이 한번 끝나면, 제2 컨트롤 유닛 500에 의해 커맨드 셋 선택 코드들 Code_p1 - Code_pn가 생성되고, 상기 생성된 커맨드 셋 선택 코드들 Code_p1 - Code_pn이 제1 컨트롤 유닛 400으로 입력될 수 있다. 각 코드는 해당하는 레지스터 셋으로 입력이 되어 각각의 프로그램 별로 최적의 커맨드 셋이 선택될 수 있다. 즉, 연산 네트워크 300의 각 연산 유닛들 300A는 실제로 DRAM 200이 수행한 커맨드 정보와 DRAM 랭크에서 발생한 ECC 정정 정보를 계속하여 누적하고, 학습함으로써 최적의 커맨드 셋을 선택하기 위한 코드들 Code_p1 - Code_pn을 주기적으로 출력할 수 있다.
먼저 프로그램이 실행이 되면, 제2 컨트롤 유닛 500 내의 커맨드 카운터 510은 랭크 별로 수행한 커맨드의 총 수 CC_1 ~ CC_m을 카운트하여 레지스터들 520에 저장할 수 있다. 또한, 제2 컨트롤 유닛 500 내의 ECC 카운터 550은 매 랭크에서 발생한 랭크 별 ECC 정정의 수 ECC_1 ~ ECC_m을 레지스터들 530에 저장할 수 있다. 평균화 로직 580은 전체 m개의 랭크가 n개의 프로그램을 수행할 동안 처리한 모든 커맨드 셋 수의 평균 {CC_AVG = (m개의 랭크가 n개의 프로그램을 수행하는 동안 처리한 커맨드 셋의 수/ (m x n)}과, 각 랭크가 n개의 프로그램을 수행할 때 처리한 평균 커맨드 수 (CC1_AVG ~ CCm_AVG)를 연산하여 내부의 레지스터들에 저장될 수 있다. CC1_AVG 경우 랭크 1이 n개의 프로그램을 처리하면서 수행한 모든 커맨드 셋의 합을 n으로 나눈 값이다. 연산 네트워크 300의 각 연산 유닛들 300A로 전달되는 CC_AVG와 (CC1_AVG ~ CCm_AVG)는 바로 전 사이클(또는 시간 구간)에서 n개의 프로그램을 수행하면서 레지스터들에 저장된 값으로, 이렇게 저장된 값은 다음 사이클에서 프로그램이 수행될 때 전달될 수 있다. 디코더 570은 Program [0:i]를 수신하고 특정 프로그램이 선택될 때 인에이블 신호 EN1 ~ ENn 신호를 생성하여 연산 네트워크 300의 각 연산 유닛들 300A로 전달할 수 있다. 매번 프로그램마다 수행한 각 랭크 별 커맨드 수의 총 합 (CC_1 ~ CC_m)과, 각 프로그램 수행 시마다 카운트한 ECC 정정의 총 수 (ECC_1 ~ ECC_m)가 연산 네트워크 300의 각 연산 유닛들 300A로 또한 전달될 수 있다.
연산 네트워크 300은 제2 컨트롤 유닛 500으로부터 전달된 정보들을 수신하고, (m x n)개의 연산 유닛들 300A에 의해 연산 동작을 수행할 수 있다. 또한, 연산 네트워크 300은 연산 수행 결과에 따른 커맨드 셋 선택 신호들 (W1_p1 ~ Wm_pn)를 생성하여 제2 컨트롤 유닛 500으로 출력할 수 있다. 해당 커맨드 셋 선택 신호들 (W1_p1 ~ Wm_pn)은 제2 컨트롤 유닛 500을 거쳐 최적의 커맨드 셋을 만들기 위한 코드들 Code_p1 - Code_pn으로서 제1 컨트롤 유닛 400으로 전달될 수 있다. 그러면 제1 컨트롤 유닛 400은 수신된 코드들 Code_p1 - Code_pn에 대응하는 최적의 커맨드 셋을 선택할 수 있고, 그 결과 선택된 커맨드 셋을 포함한 프로그램 동작이 수행되도록 할 수 있다.
도 9는 본 발명의 실시 예에 따른 단위 연산 유닛 312를 도시하는 도면이다. 예시적으로, 도 9는 연산 네트워크 300에 포함되는 다수의 단위 연산 유닛들 중에서 랭크 1, 프로그램 2에 대한 단위 연산 유닛 Comp_R1_p2 312의 구성을 도시하고 있지만, 다른 나머지의 단위 연산 유닛들도 유사하게 구성되고 동작할 수 있음에 유의하여야 한다.
도 9를 참조하면, 단위 연산 유닛 312는 성능 진단 유닛(performance diagnosis unit) 910, ECC 진단 유닛(diagnosis unit) 920 및 조정 컨트롤러(adjust controller) 930을 포함할 수 있다. 성능 진단 유닛 910은 성능 저하(performance degradation)를 분석할 수 있다. ECC 진단 유닛 920은 ECC 정정 레벨을 측정하여 ECC 정정불가능 에러(uncorrectable error)의 위험성을 판별할 수 있다. 조정 컨트롤러 930은 해당 성능 저하 정도와 현재 ECC 정정 수를 기반으로 과거 저장 데이터를 학습하여 최적의 성능, 시스템 수명, 시스템 신뢰도를 보장할 수 있는 커맨드 셋 선택 신호 또는 코드 W1_p2를 출력할 수 있다. 이를 위하여, 단위 연산 유닛 312는 제2 컨트롤 유닛 500으로부터 EN2, CC_1, CC_AVG, CC1_AVG, ECC_1을 수신하고, 제2 컨트롤 유닛 500으로 W1_p2를 전달할 수 있다.
도 10은 본 발명의 실시 예에 따른 성능 진단 유닛 910을 도시하는 도면이다.
도 10을 참조하면, 성능 진단 유닛 910은 감산기(subtractor)들 912, 916, 비교기(comparator)들 914, 918을 포함할 수 있다. 감산기들 912, 916, 비교기들 914, 918은 EN2에 응답하여 인에이블된다. 감산기 912는 CC_Critical, CC_AVG를 수신하고, 수신된 신호들에 대한 감산 동작을 수행하고, 감산 결과를 비교기 914로 출력한다. 비교기 914는 감산기 912로부터의 감산 결과와 Ref_N1을 비교하고, 비교 결과 E1을 출력한다. 감산기 916은 CC1_AVG, CC_AVG를 수신하고, 수신된 신호들에 대한 감산 동작을 수행하고, 감산 결과를 비교기 918로 출력한다. 비교기 918은 감산기 916으로부터의 감산 결과와 Ref_N2을 비교하고, 비교 결과 E2를 출력한다.
이러한 성능 진단 유닛 910은 2가지 가능을 수행하고 수행 결과에 따른 신호들 E1, E2를 생성 출력할 수 있다. 첫째, 성능 진단 유닛 910은 전체 모든 랭크들이 n개의 프로그램을 처리하는 총 처리량을 나타내는 CC_AVG과 미리 저장해 놓은 값 CC_Critical의 차이 (CC_Critical-CC_AVG)가 기준 값 Ref_N1보다 클 경우, 전체 성능 저하(performance drop)라 판단을 하여 'H' 레벨의 E1신호를 생성한다. 둘째, 성능 진단 유닛 920은 해당 랭크의 커맨드 셋의 처리량을 나타내는 평균 변수 CC1_AVG와 전체 랭크의 커맨드 셋의 처리량을 나타내는 평균 변수 CC_AVG의 차이 (CC_AVG-CC1_AVG)가 기준 값 Ref_N2보다 클 경우, 시스템 수명 저하를 우려하여 'H' 레벨의 E2신호를 생성한다.
도 11은 본 발명의 실시 예에 따른 ECC 진단 유닛 920을 도시하는 도면이다.
도 11을 참조하면, ECC 진단 유닛 920은 감산기(subtractor) 922, 비교기(comparator) 924를 포함할 수 있다. 감산기 922, 비교기 924는 EN2에 응답하여 인에이블된다. 감산기 922는 ECC_1, ECC_ref를 수신하고, 수신된 신호들에 대한 감산 동작을 수행하고, 감산 결과를 비교기 924로 출력한다. 비교기 924는 감산기 922로부터의 감산 결과와 Ref_ECC1을 비교하고, 비교 결과 E3을 출력한다.
이러한 ECC 진단 유닛 920은 랭크 1에서 발생한 ECC 정정 수의 누적 카운트 수 ECC_1와 기준값 ECC_ref의 차이 (ECC_ref-ECC_1)가 기준 값 Ref_ECC1보다 작을 겨우, 랭크 1의 실시간 메모리 셀 실패 수가 많이 증가하였다고 판단하고 'H' 레벨의 E3신호를 생성한다.
도 12는 본 발명의 실시 예에 따른 조정 컨트롤러 930을 도시하는 도면이다.
도 12를 참조하면, 조정 컨트롤러 930은 컨트롤 로직(control logic) 932, 임베디드 메모리 컨트롤러(embedded memory controller) 934, 에이징 분석기(aging analyzer) 936 및 레지스터들 938을 포함할 수 있다. 조정 컨트롤러 930의 컨트롤 로직 932, 즉 조정 컨트롤러 930은 'H'레벨의 E1, E2, E3 신호에 의해 실행될 수 있다. 레지스터들 938은 랭크 1에 대한 이전 정보, 예를 들어 과거에 랭크 1의 커맨드 처리 수 CC_1, 해당 커맨드 셋 선택 코드 W1_p2, ECC 정정 수 ECC_1과 같은 정보들을 룩업 테이블(look-up table)을 누적해오는 기능을 수행할 수 있다. 레지스터들 938은 정적 램(static random access memory, SRAM) 또는 플립플롭(flip-flop) 등으로 구성될 수 있다.
도 13은 본 발명의 실시 예에 따른 컨트롤 로직 932를 도시하는 도면이다.
도 13을 참조하면, 컨트롤 로직 932는 해당 랭크(예; 랭크 1)의 해당 프로그램(예; 프로그램 3) 수행을 위한 최종 커맨드 셋 선택 신호 또는 코드 값 W1_p2를 예측하는 기능을 수행할 수 있다. 컨트롤 로직 932는 'H'레벨의 E1, E2, E3 신호에 의해 실행될 수 있으며, 임베디드 메모리 컨트롤러 934를 통하여 레지스터들 938의 룩업 테이블로부터 읽어들인 일련의 정보들 CC_1/W1_p2/ECC_1을 탐색하고 분석함으로써 최적의 커맨드 셋 선택 신호 또는 코드 값 W1_p2를 선택할 수 있다. 이러한 동작을 위하여 컨트롤 로직 932는 컨트롤 블록 1310과, 가산기들(adders), 곱셈기들(multipiers), 비교기들(comparators) 및 카운터(counter)/기준값 생성기(reference generator)를 포함할 수 있다.
또한, 컨트롤 블록 1310은 최적의 커맨드 셋 선택 코드 값 W1_p2를 초기화하거나 조정하는 기능을 수행할 수 있다. 이러한 동작을 위하여 컨트롤 블록 1310은 코드 초기화 블록(W initialization block) 1312, 조정기(W adjuster) 1314 및 스테이트 머신 1316을 포함할 수 있다. 컨트롤 블록 1310은 에이징 분석기 936으로부터 제공되는 신호 W_aging에 따라 커맨드 셋 선택 코드 값을 변경하는 동작을 수행하지 않을 수 있다. 예를 들어, 컨트롤 블록 1310은 에이징 분석기 936으로부터 제공되는 신호 W_aging이 간헐적 결함 보다는 영구적 결함일 확률이 높음을 나타내는 경우, 커맨드 셋 선택 코드 값을 초기화 또는 조정하는 동작을 수행하지 않을 수 있다.
도 14는 본 발명의 실시 예에 따른 임베디드 메모리 컨트롤러(embedded memory controller) 934를 도시하는 도면이다.
도 14를 참조하면, 임베디드 메모리 컨트롤러 934는 레지스터들 938에 해당 랭크 및 해당 프로그램에 대한 현재의 정보를 라이트하고, 레지스터들 938에 라이트되어 있는 해당 랭크 및 해당 프로그램에 대한 과거의 정보를 리드하는 기능을 수행할 수 있다. 이러한 동작을 위한 메모리 컨트롤러 934는 컨트롤 블록(control block) 1410, 어드레스 생성기(address generator) 1420, 리드 버퍼(read buffer) 1430 및 라이트 버퍼(write buffer) 1440을 포함할 수 있다. 어드레스 생성기 1420은 컨트롤 블록 1410에 의해 생성된 신호 CNT에 응답하여 어드레스 Addr을 생성한다. 리드 버퍼 1430은 컨트롤 블록 1410에 의해 생성된 신호 CNT에 응답하여 어드레스 Addr에 대응하는 레지스터들 938의 특정 영역에 라이트되어 있는 해당 랭크 및 해당 프로그램에 대한 정보 ECC_1C, CC_1C, W1_p2C를 리드하여 버퍼링할 수 있다. 라이트 버퍼 1440은 컨트롤 블록 1410에 의해 생성된 신호 CNT에 응답하여 어드레스 Addr에 대응하는 레지스터들 938의 특정 영역에 라이트하기 위한 해당 랭크 및 해당 프로그램에 대한 정보 ECC_1, CC_1, W1_p2를 버퍼링할 수 있다. 라이트 버퍼 1440에 버퍼링될 정보는 컨트롤 로직 932로부터 수신될 수 있으며, 리드 버퍼 1430에 버퍼링된 정보는 컨트롤 로직 932 또는 에이징 분석기 936으로 전달될 수 있다.
도 15는 본 발명의 실시 예에 따른 에이징 분석기(aging analyzer) 936을 도시하는 도면이다.
도 15를 참조하면, 에이징 분석기 936은 레지스터들 938로부터 읽어온 과거 ECC 정정 정보 ECC_1_C의 주기별(또는 시간 구간별) 증가량의 추세를 분석하여 해당 랭크에서 에이징의 발생 정도가 어느 정도인지 결정할 수 있다. 만약 해당 랭크에서의 에이징의 발생 정도의 환산 오프셋(offset) 값이 기준 값 Ref_Aging보다 크다면, 에이징 분석기 936은 ECC 진단 유닛 920에 의해 판단된 ECC 정정의 초과 증가량의 원인이 간헐적 결함 보다는 영구적 결함일 확률이 높다고 판단하고, 컨트롤 로직 932가 커맨드 셋의 종류를 변경하지 않도록 할 수 있다.
이를 위하여 에이징 분석기 936은 레지스터들(registers) 1510, 감산기들(subtractors) 1520 및 비교기/컨트롤 블록(comparator/control block) 1530을 포함할 수 있다. 레지스터들 1510은 레지스터들 938로부터 읽어온 과거 ECC 정정 정보 ECC_1_C을 저장할 수 있다. 감산기들 1520은 주기별 과거 ECC 정정 정보 ECC_1_C에 대한 감산 동작을 수행함으로써 ECC 정정 정보 ECC_1_C의 주기별 증가량에 따른 값을 출력할 수 있다. 비교기/컨트롤 블록 1530은 ECC 정정 정보 ECC_1_C의 주기별 증가량에 따른 값과 미리 결정된 기준 값 Ref_Aging을 비교하고, 비교 결과에 따라 W_aging 신호를 생성할 수 있다. 예를 들어, ECC 정정 정보 ECC_1_C의 주기별 증가량에 따른 값이 기준 값 Ref_Aging보다 크다면, 에이징 분석기 936은 ECC 진단 유닛 920에 의해 판단된 ECC 정정의 초과 증가량의 원인이 간헐적 결함 보다는 영구적 결함일 확률이 높다고 판단하고, 컨트롤 로직 932가 커맨드 셋의 종류를 변경하지 않도록 하기 위한 W_aging 신호를 생성할 수 있다.
도 16은 본 발명의 실시 예에 따른 메모리 디바이스를 위한 리프레쉬 주기를 조정하는 처리 흐름 1600을 도시하는 도면이다. 도 16에 도시된 흐름은 도 2 내지 도 15에 도시된 바와 같이 컨트롤 유닛 100A와 연산 네트워크 300을 포함하여 구성되는 메모리 컨트롤러 100가 다수의 랭크들을 포함하는 메모리 디바이스 200을 제어함에 의해 수행될 수 있다.
도 16을 참조하면, 우선 메모리 컨트롤러 100은 상기 메모리 디바이스 200에 대하여 수행되는 적어도 하나의 프로그램과 상기 랭크들의 조합들 각각에 대응하여 다수의 커맨드 셋들 중에서 어느 하나의 커맨드 셋을 선택하기 위한 선택 신호들을 결정하는 동작 1610을 수행할 수 있다.
다음에 메모리 컨트롤러 100은 상기 메모리 디바이스 200에 대하여 상기 어느 하나의 커맨드 셋을 포함하는 프로그램을 수행하는 동작 1620을 수행할 수 있다.
일 실시 예에서, 상기 동작 1610은 상기 랭크들 각각에 대응하는 다수의 연산 유닛들 각각에 의해, 상기 프로그램의 수행 시 상기 랭크들 각각에서의 성능을 진단하고, 진단 결과에 기초하여 상기 선택 신호들을 결정하는 과정을 포함할 수 있다.
일 실시 예에서, 상기 동작 1620은 컨트롤 유닛에 의해, 상기 선택 신호들에 응답하여 상기 랭크들에 대한 상기 프로그램이 수행되도록 제어하는 과정을 포함할 수 있다.
일 실시 예에서, 상기 제어하는 과정은, 상기 프로그램과 관련하여 상기 메모리 디바이스에서 수행되는 커맨드들과 ECC 에러 정정의 수를 누적하고, 누적 결과를 상기 다수의 연산 유닛들 각각으로 제공하는 과정을 포함할 수 있다.
일 실시 예에서, 상기 동작 1610은 상기 다수의 연산 유닛들 각각에 의해, 상기 누적 결과에 기초하여, 상기 랭크들 중 해당 랭크에서 상기 프로그램의 수행에 따른 성능 저하를 진단하는 과정을 포함할 수 있다.
일 실시 예에서, 상기 동작 1610은 상기 다수의 연산 유닛들 각각에 의해, 상기 누적 결과에 기초하여, 상기 해당 랭크에서 상기 프로그램의 수행에 따른 ECC 에러 레이트를 진단하는 과정을 포함할 수 있다.
일 실시 예에서, 상기 동작 1610은 상기 랭크들에서 상기 프로그램의 수행에 따른 성능 저하가 진단되는 경우, 상기 해당 랭크에서 수행되는 커맨드의 수를 증가시키는 커맨드 셋을 선택하기 위한 선택 신호를 결정하는 과정을 포함할 수 있다.
일 실시 예에서, 상기 동작 1610은 상기 해당 랭크에서 상기 프로그램의 수행에 따른 성능 저하가 진단되는 경우, 상기 해당 랭크에서 수행되는 커맨드의 수를 증가시키는 커맨드 셋을 선택하기 위한 선택 신호를 결정하는 과정을 포함할 수 있다.
일 실시 예에서, 상기 동작 1610은 상기 ECC 에러 레이트가 미리 결정된 범위를 초과하는 것으로 진단되는 경우, 상기 ECC 에러 레이트를 감소시키는 커맨드 셋을 선택하기 위한 선택 신호를 결정하는 과정을 포함할 수 있다.
일 실시 예에서, 상기 동작 1610은 주기별 ECC 에러 레이트의 증가량을 분석하는 과정을 더 포함하고, 상기 ECC 에러 레이트의 증가량이 미리 설정된 기준값보다 큰 것으로 분석된 경우, 새로운 커맨드 셋을 선택하기 위한 선택 신호를 결정하는 동작을 수행하지 않는 과정을 포함할 수 있다.
일 실시 예에서, 상기 동작 1610은 상기 ECC 에러 레이트의 증가량이 상기 기준값보다 작은 것으로 분석된 경우, 상기 ECC 에러 레이트를 감소시키면서도, 상기 해당 랭크에서 수행되는 커맨드의 수가 많이 감소되지 않도록 하는 커맨드 셋을 선택하기 위한 선택 신호를 결정하는 과정을 포함할 수 있다.
도 17a 내지 도 17d는 본 발명의 실시 예에 따른 메모리 컨트롤러에 의해 수행되는 메모리 디바이스에 대한 프로그램 수행을 위한 커맨드 셋을 선택하는 동작의 흐름 1710, 1720, 1730 및 1740을 도시하는 도면이다. 도 17a 내지 도 17d에 도시된 흐름은 도 2 내지 도 15에 도시된 바와 같이 컨트롤 유닛 100A와 연산 네트워크 300을 포함하여 구성되는 메모리 컨트롤러 100가 다수의 랭크들을 포함하는 메모리 디바이스 200을 제어함에 의해 수행될 수 있다.
도 17a를 참조하면, 흐름 1710은 제1 컨트롤 유닛 400 및 제2 컨트롤 유닛 500에 의해 수행될 수 있는 동작들 1711, 1713, 1715, 1717 및 1719를 포함할 수 있다. 제1 컨트롤 유닛 400은 각각이 하나의 커맨드 셋인 프로그램들을 실행할 수 있다(1711). n개의 프로그램들이 모두 다 실행이 되었다고 판단되는 하나의 주기가 끝나면, 제2 컨트롤 유닛 500은 실행중인 어드레스 정보를 대응하는 랭크 정보로 변환할 수 있고(1713), 카운터들 510과 550 각각에 의해 랭크별 커맨드 수 (CC_1, CC_2, ... , CC_m)과, ECC 정정 수 (ECC_1, ECC_2, ... , ECC_m)를 카운트하고, 카운트 결과를 각각 레지스터들 520 및 530에 저장할 수 있다(1715, 1717).
또한, 제2 컨트롤 유닛 500은 위와 같은 정보들에 대한 추가적인 연산을 통하여 각종 제어 신호들 (EN1, EN2, ... , ENm), CC_AVG, (CC1_AVG, CC2_AVG, ... , CCm_AVG)을 생성하고 저장할 수 있다(1719). 만약 랭크 1, 프로그램 2의 경우, 제2 컨트롤 유닛 500은 관련 제어신호 EN2, CC_AVG, CC1_AVG를 저장할 수 있다. 그리고 다음 사이클이 반복되면, 제2 컨트롤 유닛 500은 기존 사이클에서 저장해 두었던 값들 CC_AVG, CC1_AVG을 연산 네트워크 300에 전송할 수 있다.
도 17b를 참조하면, 흐름 1720은 연산 네트워크 300에 포함되는 연산 유닛 312의 성능 진단 유닛 910에 의해 수행될 수 있는 1722, 1724, 1726 및 1728을 포함할 수 있다. 여기서는 연산 유닛 312에 의해 수행되는 동작의 일 예가 설명될 것이지만, 다른 나머지 연산 유닛들도 동일하거나 유사한 동작을 수행할 수 있음에 유의하여야 한다. 즉, 각각의 프로그램이 실행될 때마다, m x n개의 연산 유닛들 300A 각각은 누적 데이터를 학습하고 최적의 커맨드 선택 코드를 출력할 수 있다.
성능 진단 유닛 910은 (CC_Critical-CC_AVG)>Ref_N1인 것으로 판단되는 경우(1722), 전체 성능이 감소하였다고 판단하고, E1 신호의 로직 레벨을 'H'로 변경한다(1724). 또한, 성능 진단 유닛 910은 (CC_AVG-CC1_AVG)인 것으로 판단되는 경우(1726), 해당 랭크의 사용 빈도 수가 다른 랭크에 비해 떨어졌다고 판단하고, E2 신호의 로직 레벨을 'H'로 변경한다(1728).
도 17c를 참조하면, 흐름 1730은 연산 네트워크 300에 포함되는 연산 유닛 312의 ECC 진단 유닛 920에 의해 수행될 수 있는 1732 및 1734를 포함할 수 있다. 여기서는 연산 유닛 312에 의해 수행되는 동작의 일 예가 설명될 것이지만, 다른 나머지 연산 유닛들도 동일하거나 유사한 동작을 수행할 수 있음에 유의하여야 한다. 즉, 각각의 프로그램이 실행될 때마다, m x n개의 연산 유닛들 300A 각각은 누적 데이터를 학습하고 최적의 커맨드 선택 코드를 출력할 수 있다.
ECC 진단 유닛 920은 (ECC_ref-ECC_1)<Ref_ECC1인 것으로 판단되는 경우(1732), 해당 랭크에 실패 레이트가 초과 발생하여 CMD 셋의 변경이 필요한 경우라고 판단하고, E3 신호의 로직 레벨을 'H'로 변경한다(1734).
도 17d를 참조하면, 흐름 1740은 연산 네트워크 300에 포함되는 연산 유닛 312의 조정 컨트롤러 930에 의해 수행될 수 있는 1741, 1742, 1743, 1744, 1745, 1746, 1747 및 1748을 포함할 수 있다. 여기서는 연산 유닛 312에 의해 수행되는 동작의 일 예가 설명될 것이지만, 다른 나머지 연산 유닛들도 동일하거나 유사한 동작을 수행할 수 있음에 유의하여야 한다. 즉, 각각의 프로그램이 실행될 때마다, m x n개의 연산 유닛들 300A 각각은 누적 데이터를 학습하고 최적의 커맨드 선택 코드를 출력할 수 있다.
조정 컨트롤러 930은 이전 사이클에서 내부 레지스터들 938의 룩업 테이블에 저장된 CC_1, W1_p2, ECC_1의 값들을 불러온다(1741). E1 신호 또는 E2 신호가 'H' 또는 '1'레벨인 것으로 판단되는 경우(1742, 1744), 조정 컨트롤러 930은 해당 랭크 및 해당 프로그램에 대한 CC_1, 즉 단위 프로그램을 랭크 1이 처리하는 커맨드 셋 수의 총 합을 상향 조정할 수 있다(1743, 1745). 즉, 조정 컨트롤러 930은 해당 변경 커맨드 셋 선택 코드 W1_p2를 예측함에 있어서 과거 룩업 테이블 중에서 ECC_1을 많이 증가시키지 않는 범위 내에 CC_1을 상향시키는 W1_p2 code가 어떤 값인지 탐색하고, 이 값을 최적의 코드 값 W1_p2로 설정할 수 있다.
만약, E3 신호가 'H' 또는 '1'레벨인 것으로 판단되는 경우, 조정 컨트롤러 930은 현재 ECC 정정 누적 수 ECC_1이 너무 높아서 커맨드 셋을 변경할 가능성이 있는 경우로 판단할 수 있다. 이러한 경우 조정 컨트롤러 930은 먼저 에이징 분석을 할 수 있다(1746).
조정 컨트롤러 930은 주기 별 ECC_1 정보를 내부 레지스터들 938에서 로딩해와서 주기별 ECC_1 누적 카운트 수의 증가량을 분석할 수 있다. 시간에 따라 그 증가분의 속도가 계속하여 증가할 경우, 조정 컨트롤러 930은 해당 랭크 내에 영구적 결함이 있는 경우라고 판단하고, 그 증가량을 환산하여 Aging_offset 값으로 설정할 수 있다(1746). 만약에 Aging_offset의 정도가 너무 크게 판단되어 미리 설정한 기준값 Ref_aging보다 큰 것으로 판단되는 경우, 조정 컨트롤러 930은 해당 ECC 정정 결함이 간헐적 결함보다 영구적 결함이 더 우세하다고 판단하여 커맨드 셋 변경을 하지 않을 수 있다.
만약에 E3 신호가 'H' 또는 '1'레벨이고, Aging_offset 값이 기준값 Ref_aging보다 작은 것으로 판단되는 경우, 조정 컨트롤러 930은 해당 결함의 증가분이 간헐적 결함에 의해서 발생하였다고 판단하고, 커맨드 셋을 변경할 수 있다. 즉, 조정 컨트롤러 930은 과거 룩업 테이블 분석을 통하여 ECC_1을 줄이면서 동시에 CC_1을 많이 하강시키지 않는 코드 값 W1_p2을 탐색하여 설정할 수 있다.
위에서 언급한 바와 같은 도 17a 내지 도 17d 과정을 모든 랭크와 모든 프로그램에 해당하는 m x n개의 연산 유닛들에 의한 연산을 여러 주기 동안 반복 수행하면, 성능, 시스템 수명, ECC 정정불가능 에러 수의 관점에서 최적의 커맨드 셋 선택 코드를 찾아갈 수 있게 된다.
전술한 바와 같이 본 발명의 실시 예들에 따른 메모리 스케줄링 방안은 메모리 디바이스의 실제 사용 환경에서 추가로 발생할 수 있는 ECC 정정불가능 에러 레이트를 최소화하는 동시에 DRAM 랭크의 균일한 사용을 통하여 시스템 수명 및 성능을 극대화할 수 있다.
본 발명의 실시 예들에 따른 메모리 스케줄링 방안은 ECC 정정 정보를 내부 연산 유닛에 계속 누적하여 그 경향성을 학습하여, 해당 결함이 영구적 결함인지 간헐적 결함인지 구분을 하고, ECC 정정 수의 상승이 영구적 결함일 경우 커맨드 셋 변경을 하지 않음으로써 성능 저하(performance penalty)를 최소화할 수 있다.
본 발명의 실시 예들에 따른 메모리 스케줄링 방안은 m개의 랭크별, n개의 프로그램 별 총 (m x n)개의 연산 유닛들을 병렬로 설계하고, 각각의 유닛들이 해당 메모리 스케줄링 동작을 예측하게 함으로써, 병렬 처리를 통하여 최소의 연산시간을 이끌 수 있다.
본 발명의 실시 예들에 따른 메모리 스케줄링 방안은 과거 데이터를 각각의 연산 유닛들에 의해 누적하여, 미래의 데이터를 예측하는 인공지능 병렬처리 방식을 응용한 것으로, 해당 과거 데이터 학습을 통한 미래의 데이터 예측은 상당히 높은 예측 데이터의 정확도 산출을 이끌 수 있다.
한편, 본 발명의 상세한 설명에서는 구체적인 실시 예에 관해 설명하였으나, 본 발명의 범위에서 벗어나지 않는 한도 내에서 여러 가지 변형이 가능함은 물론이다. 그러므로, 본 발명의 범위는 설명된 실시 예에 국한되어 정해져서는 안되며 후술하는 특허청구의 범위뿐만 아니라 이 특허청구의 범위와 균등한 것들에 의해 정해져야 한다.

Claims (20)

  1. m 개(m은 0 보다 큰 정수)의 랭크들을 포함하는 메모리 디바이스; 및
    상기 메모리 디바이스와 동작적으로 결합되며,
    상기 메모리 디바이스에 대하여 수행되는 n 개(n은 0 보다 큰 정수)의 로그램들과 상기 m 개의 랭크들의 조합들에 따라 다수의 커맨드 셋들 중에서 어느 하나의 커맨드 셋을 선택하기 위한 선택 신호들을 결정하고,
    상기 메모리 디바이스에 대하여 상기 선택된 커맨드 셋을 포함하는 프로그램을 수행하는 메모리 컨트롤러를 포함하고,
    상기 메모리 컨트롤러는,
    상기 n 개의 프로그램들과 상기 m 개의 랭크들의 조합들에 대응되고, 상기 n 개의 프로그램들 각각이 수행될 때 상기 m 개의 랭크들 각각의 성능을 진단하고, 진단 결과에 기초하여 상기 선택 신호들을 결정 및 출력하는 m*n 개의 연산 유닛들; 및
    상기 m*n 개의 연산 유닛들과 상기 메모리 디바이스의 사이에 결합되며, 상기 선택 신호들에 응답하여 상기 m 개의 랭크들에 대한 상기 n 개의 프로그램들이 수행되도록 제어하는 컨트롤 유닛을 포함하는 메모리 시스템.
  2. ◈청구항 2은(는) 설정등록료 납부시 포기되었습니다.◈
    청구항 1에 있어서,
    상기 m*n 개의 연산 유닛들은,
    상기 n 개의 프로그램들 별로 독립적인 연산 유닛을 포함하고,
    상기 m 개의 랭크들 별로 다른 연산 유닛들을 포함하는 메모리 시스템.
  3. ◈청구항 3은(는) 설정등록료 납부시 포기되었습니다.◈
    청구항 1에 있어서, 상기 컨트롤 유닛은,
    상기 n 개의 프로그램들과 관련하여 상기 메모리 디바이스에서 수행되는 커맨드들과 ECC 에러 정정의 수를 누적하고, 누적 결과를 상기 m*n 개의 연산 유닛들 각각으로 제공하는 메모리 시스템.
  4. ◈청구항 4은(는) 설정등록료 납부시 포기되었습니다.◈
    청구항 3에 있어서, 상기 m*n 개의 연산 유닛들 각각은,
    상기 컨트롤 유닛으로부터 제공되는 누적 결과에 기초하여, 상기 m 개의 랭크들 중 해당 랭크에서 상기 프로그램의 수행에 따른 성능 저하를 진단하는 성능 진단 유닛을 포함하는 메모리 시스템.
  5. ◈청구항 5은(는) 설정등록료 납부시 포기되었습니다.◈
    청구항 4에 있어서, 상기 m*n 개의 연산 유닛들 각각은,
    상기 성능 진단 유닛에 의해 상기 m 개의 랭크들에서 상기 프로그램의 수행에 따른 성능 저하가 진단되는 경우, 상기 해당 랭크에서 수행되는 커맨드의 수를 증가시키는 커맨드 셋을 선택하기 위한 선택 신호를 결정하는 메모리 시스템.
  6. ◈청구항 6은(는) 설정등록료 납부시 포기되었습니다.◈
    청구항 4에 있어서, 상기 m*n 개의 연산 유닛들 각각은,
    상기 성능 진단 유닛에 의해 상기 해당 랭크에서 상기 프로그램의 수행에 따른 성능 저하가 진단되는 경우, 상기 해당 랭크에서 수행되는 커맨드의 수를 증가시키는 커맨드 셋을 선택하기 위한 선택 신호를 결정하는 메모리 시스템.
  7. ◈청구항 7은(는) 설정등록료 납부시 포기되었습니다.◈
    청구항 3에 있어서, 상기 m*n 개의 연산 유닛들 각각은,
    상기 컨트롤 유닛으로부터 제공되는 누적 결과에 기초하여, 상기 m 개의 랭크들 중 해당 랭크에서 상기 프로그램의 수행에 따른 ECC 에러 레이트를 진단하는 ECC 진단 유닛을 포함하는 메모리 시스템.
  8. ◈청구항 8은(는) 설정등록료 납부시 포기되었습니다.◈
    청구항 7에 있어서, 상기 m*n 개의 연산 유닛들 각각은,
    상기 ECC 진단 유닛에 의해 상기 ECC 에러 레이트가 미리 결정된 범위를 초과하는 것으로 진단되는 경우, 상기 ECC 에러 레이트를 감소시키는 커맨드 셋을 선택하기 위한 선택 신호를 결정하는 메모리 시스템.
  9. ◈청구항 9은(는) 설정등록료 납부시 포기되었습니다.◈
    청구항 7에 있어서, 상기 m*n 개의 연산 유닛들 각각은,
    상기 ECC 에러 레이트의 증가량이 미리 설정된 기준값보다 큰 것으로 분석된 경우, 새로운 커맨드 셋을 선택하기 위한 선택 신호를 결정하는 동작을 수행하지 않는 메모리 시스템.
  10. ◈청구항 10은(는) 설정등록료 납부시 포기되었습니다.◈
    청구항 7에 있어서, 상기 m*n 개의 연산 유닛들 각각은,
    상기 ECC 에러 레이트의 증가량이 미리 설정된 기준값보다 작은 것으로 분석된 경우, 상기 ECC 에러 레이트를 감소시키면서도, 상기 해당 랭크에서 수행되는 커맨드의 수가 많이 감소되지 않도록 하는 커맨드 셋을 선택하기 위한 선택 신호를 결정하는 메모리 시스템.
  11. m 개(m은 0 보다 큰 정수)의 랭크들을 포함하는 메모리 디바이스의 동작을 제어하기 위한 메모리 컨트롤러의 동작 방법에 있어서:
    상기 메모리 디바이스에 대하여 수행되는 n 개(n은 0 보다 큰 정수)의 프로그램들과 상기 m 개의 랭크들의 조합들에 따라 다수의 커맨드 셋들 중에서 어느 하나의 커맨드 셋을 선택하기 위한 선택 신호들을 결정하는 과정; 및
    상기 메모리 디바이스에 대하여 상기 선택된 커맨드 셋을 포함하는 프로그램을 수행하는 과정을 포함하고,
    상기 선택 신호들을 결정하는 과정은,
    상기 n 개의 프로그램들과 상기 m 개의 랭크들의 조합들에 대응되는 m*n 개의 연산 유닛들에서, 상기 n 개의 프로그램들 각각이 수행될 때 상기 m 개의 랭크들 각각의 성능을 진단하고, 진단 결과에 기초하여 상기 선택 신호들을 결정 및 출력하는 과정을 포함하고,
    상기 프로그램을 수행하는 과정은,
    컨트롤 유닛에서, 상기 선택 신호들에 응답하여 상기 m 개의 랭크들에 대한 상기 n 개의 프로그램들이 수행되도록 제어하는 과정을 포함하는 방법.
  12. ◈청구항 12은(는) 설정등록료 납부시 포기되었습니다.◈
    청구항 11에 있어서,
    상기 m*n 개의 연산 유닛들은,
    상기 n 개의 프로그램들 별로 독립적인 연산 유닛을 포함하고,
    상기 m 개의 랭크들 별로 다른 연산 유닛들을 포함하는 방법.
  13. ◈청구항 13은(는) 설정등록료 납부시 포기되었습니다.◈
    청구항 11에 있어서, 상기 제어하는 과정은,
    상기 n 개의 프로그램들과 관련하여 상기 메모리 디바이스에서 수행되는 커맨드들과 ECC 에러 정정의 수를 누적하고, 누적 결과를 상기 m*n 개의 연산 유닛들 각각으로 제공하는 과정을 포함하는 방법.
  14. ◈청구항 14은(는) 설정등록료 납부시 포기되었습니다.◈
    청구항 13에 있어서, 상기 선택 신호들을 결정하는 과정은,
    상기 m*n 개의 연산 유닛들 각각에 의해, 상기 누적 결과에 기초하여, 상기 m 개의 랭크들 중 해당 랭크에서 상기 프로그램의 수행에 따른 성능 저하를 진단하는 과정을 포함하는 방법.
  15. ◈청구항 15은(는) 설정등록료 납부시 포기되었습니다.◈
    청구항 14에 있어서, 상기 선택 신호들을 결정하는 과정은,
    상기 m 개의 랭크들에서 상기 프로그램의 수행에 따른 성능 저하가 진단되는 경우, 상기 해당 랭크에서 수행되는 커맨드의 수를 증가시키는 커맨드 셋을 선택하기 위한 선택 신호를 결정하는 과정을 더 포함하는 방법.
  16. ◈청구항 16은(는) 설정등록료 납부시 포기되었습니다.◈
    청구항 14에 있어서, 상기 선택 신호들을 결정하는 과정은,
    상기 해당 랭크에서 상기 프로그램의 수행에 따른 성능 저하가 진단되는 경우, 상기 해당 랭크에서 수행되는 커맨드의 수를 증가시키는 커맨드 셋을 선택하기 위한 선택 신호를 결정하는 과정을 더 포함하는 방법.
  17. ◈청구항 17은(는) 설정등록료 납부시 포기되었습니다.◈
    청구항 13에 있어서, 상기 선택 신호들을 결정하는 과정은,
    상기 m*n 개의 연산 유닛들 각각에 의해, 상기 누적 결과에 기초하여, 상기 m 개의 랭크들 중 해당 랭크에서 상기 프로그램의 수행에 따른 ECC 에러 레이트를 진단하는 과정을 포함하는 방법.
  18. ◈청구항 18은(는) 설정등록료 납부시 포기되었습니다.◈
    청구항 17에 있어서, 상기 선택 신호들을 결정하는 과정은,
    상기 ECC 에러 레이트가 미리 결정된 범위를 초과하는 것으로 진단되는 경우, 상기 ECC 에러 레이트를 감소시키는 커맨드 셋을 선택하기 위한 선택 신호를 결정하는 과정을 더 포함하는 방법.
  19. ◈청구항 19은(는) 설정등록료 납부시 포기되었습니다.◈
    청구항 17에 있어서, 상기 선택 신호들을 결정하는 과정은,
    상기 ECC 에러 레이트의 증가량이 미리 설정된 기준값보다 큰 것으로 분석된 경우, 새로운 커맨드 셋을 선택하기 위한 선택 신호를 결정하는 동작을 수행하지 않는 과정을 더 포함하는 방법.
  20. ◈청구항 20은(는) 설정등록료 납부시 포기되었습니다.◈
    청구항 19에 있어서, 상기 선택 신호들을 결정하는 과정은,
    상기 ECC 에러 레이트의 증가량이 상기 기준값보다 작은 것으로 분석된 경우, 상기 ECC 에러 레이트를 감소시키면서도, 상기 해당 랭크에서 수행되는 커맨드의 수가 많이 감소되지 않도록 하는 커맨드 셋을 선택하기 위한 선택 신호를 결정하는 과정을 더 포함하는 방법.
KR1020170161957A 2017-11-29 2017-11-29 메모리 셀의 결함을 제거하기 위한 메모리 시스템 및 그의 동작 방법 KR102417692B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020170161957A KR102417692B1 (ko) 2017-11-29 2017-11-29 메모리 셀의 결함을 제거하기 위한 메모리 시스템 및 그의 동작 방법
US16/038,732 US11138039B2 (en) 2017-11-29 2018-07-18 Memory system for removing memory cell fault and method thereof

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020170161957A KR102417692B1 (ko) 2017-11-29 2017-11-29 메모리 셀의 결함을 제거하기 위한 메모리 시스템 및 그의 동작 방법

Publications (2)

Publication Number Publication Date
KR20190063111A KR20190063111A (ko) 2019-06-07
KR102417692B1 true KR102417692B1 (ko) 2022-07-07

Family

ID=66634459

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170161957A KR102417692B1 (ko) 2017-11-29 2017-11-29 메모리 셀의 결함을 제거하기 위한 메모리 시스템 및 그의 동작 방법

Country Status (2)

Country Link
US (1) US11138039B2 (ko)
KR (1) KR102417692B1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11237903B2 (en) * 2019-06-25 2022-02-01 Intel Corporation Technologies for providing ECC pre-provisioning and handling for cross-point memory and compute operations
US11270756B2 (en) * 2019-08-28 2022-03-08 Micron Technology, Inc. Row hammer mitigation
KR20230036730A (ko) * 2021-09-08 2023-03-15 삼성전자주식회사 메모리 컨트롤러 및 이를 포함하는 메모리 시스템

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020004921A1 (en) * 2000-07-10 2002-01-10 Hitachi, Ltd. Method of deciding error rate and semiconductor integrated circuit device
US20110107161A1 (en) * 2009-10-29 2011-05-05 Freescale Semiconductor, Inc. Threshold voltage techniques for detecting an imminent read failure in a memory array
US20160034206A1 (en) * 2014-08-04 2016-02-04 Conor Maurice Ryan Adaptive Flash Tuning

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8046559B2 (en) 2008-03-27 2011-10-25 Intel Corporation Memory rank burst scheduling
US8463987B2 (en) 2008-09-23 2013-06-11 Intel Corporation Scalable schedulers for memory controllers
US9710329B2 (en) * 2015-09-30 2017-07-18 Sandisk Technologies Llc Error correction based on historical bit error data
KR102643916B1 (ko) * 2016-10-18 2024-03-08 삼성전자주식회사 스토리지 장치, 메모리 시스템, 및 그것의 읽기 전압 결정 방법
US10877827B2 (en) * 2017-09-15 2020-12-29 Pure Storage, Inc. Read voltage optimization
US20190095299A1 (en) * 2017-09-28 2019-03-28 Cnex Labs, Inc. Storage system with machine learning mechanism and method of operation thereof

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020004921A1 (en) * 2000-07-10 2002-01-10 Hitachi, Ltd. Method of deciding error rate and semiconductor integrated circuit device
US20110107161A1 (en) * 2009-10-29 2011-05-05 Freescale Semiconductor, Inc. Threshold voltage techniques for detecting an imminent read failure in a memory array
US20160034206A1 (en) * 2014-08-04 2016-02-04 Conor Maurice Ryan Adaptive Flash Tuning

Also Published As

Publication number Publication date
US11138039B2 (en) 2021-10-05
US20190163532A1 (en) 2019-05-30
KR20190063111A (ko) 2019-06-07

Similar Documents

Publication Publication Date Title
KR102415867B1 (ko) 메모리 셀의 결함을 제거하기 위한 메모리 시스템 및 그의 동작 방법
US20190114078A1 (en) Storage device, computing system including storage device and operating method of storage device
KR102417692B1 (ko) 메모리 셀의 결함을 제거하기 위한 메모리 시스템 및 그의 동작 방법
JP5523562B2 (ja) ストレージデバイス内のエラーデータを追跡するシステムおよび方法
CN109840312B (zh) 一种锅炉负荷率-能效曲线的异常值检测方法和装置
US11016679B2 (en) Balanced die set execution in a data storage system
EP3262508B1 (en) Patrol scrub periods based on power status
US11514992B2 (en) Method and apparatus for reading a flash memory device
US10108471B2 (en) System and method for utilizing history information in a memory device
CN107134295B (zh) 存储器诊断系统
US8503259B2 (en) Memory test method and memory test device
CN115168087A (zh) 一种确定内存故障的修复资源粒度的方法及装置
CN112817523B (zh) 存储介质可靠性等级判断方法及系统、存储介质、设备
US20210318821A1 (en) Adjusting trim settings to improve memory performance or reliability
US7533303B2 (en) Method and system for performing system-level correction of memory errors
CN116909378A (zh) 一种基于深度强化学习的gpu动态能源效率优化运行时方法及系统
US8873327B2 (en) Semiconductor device and operating method thereof
Yan et al. On designing efficient and reliable nonvolatile memory-based computing-in-memory accelerators
CN112463523A (zh) 一种内存条健康状态监控方法、装置、设备及存储介质
US11416581B2 (en) Multiplication of a matrix with an input vector
US10539419B2 (en) Method and apparatus for reducing sensor power dissipation
CN117743040A (zh) 内存故障预测方法、装置、计算机设备和存储介质
CN115756911A (zh) 内存故障处理方法、设备及存储介质
WO2022182374A1 (en) Method and apparatus for reading a flash memory device
KR102274894B1 (ko) 스토리지 노드들의 증거 기반 대체

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