KR102355585B1 - 플래시 메모리 산술 인코딩과 디코딩을 위한 방법과 장치 - Google Patents
플래시 메모리 산술 인코딩과 디코딩을 위한 방법과 장치 Download PDFInfo
- Publication number
- KR102355585B1 KR102355585B1 KR1020150031192A KR20150031192A KR102355585B1 KR 102355585 B1 KR102355585 B1 KR 102355585B1 KR 1020150031192 A KR1020150031192 A KR 1020150031192A KR 20150031192 A KR20150031192 A KR 20150031192A KR 102355585 B1 KR102355585 B1 KR 102355585B1
- Authority
- KR
- South Korea
- Prior art keywords
- parameter
- symbol
- rescaling
- flash memory
- irange
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4006—Conversion to or from arithmetic code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F5/00—Methods or arrangements for data conversion without changing the order or content of the data handled
- G06F5/01—Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
- G06F5/015—Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising having at least two separately controlled shifting levels, e.g. using shifting matrices
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C16/00—Erasable programmable read-only memories
- G11C16/02—Erasable programmable read-only memories electrically programmable
- G11C16/06—Auxiliary circuits, e.g. for writing into memory
- G11C16/22—Safety or protection circuits preventing unauthorised or accidental access to memory cells
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C16/00—Erasable programmable read-only memories
- G11C16/02—Erasable programmable read-only memories electrically programmable
- G11C16/06—Auxiliary circuits, e.g. for writing into memory
- G11C16/34—Determination of programming status, e.g. threshold voltage, overprogramming or underprogramming, retention
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C8/00—Arrangements for selecting an address in a digital store
- G11C8/10—Decoders
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
산술 인코딩과 산술 디코딩의 단일 반복에 필요한 시간의 양을 감소시키기 위한 방법이 제공된다. 리스케일링과 범위는 병렬로 계산된다. 상기 범위는 심벌-구간의 하이 파라미터(H) 경계 - 상기 심벌-구간의 로우 파라미터(L) 경계 + 1이다. 주어진 또는 디코드된 새로운 하이 파라미터(iH)와 새로운 로우 파라미터(iL)는 i번째 심벌에 대한 누적 도수에 따라 발견된다. iH 파라미터와 iL 파라미터 각각의 리스케일링은 iH와 iL 각각의 값에 따라 iH와 iL의 MSB들을 쉬프팅함에 따라 수행된다. iRANGE는 iRANGE를 표현하기 위해 필요한 자릿수와 상기 iRANGE에 대해 유보된 비트들의 총 개수에 따라 왼쪽으로 쉬프트된다. H와 L에 대한 리스케일링의 결과를 기다리는 동안 스프트된 iRANGE는 CF[N]으로 나누어지고, Step_tmp에 저장된다.
Description
본 발명의 개념에 따른 실시 예는 플래시 메모리 인코딩과 디코딩에 관한 것으로, 특히 산술 인코딩과 산술 디코딩의 단일 반복 시간을 줄일 수 있는 플래시 메모리 산술 인코딩과 디코딩을 위한 방법과 장치에 관한 것이다.
최근 메모리 카드, USB 포트 등과 같은 메모리 장치들의 크기는 더욱 작아지고 있고, 생산 단가 또한 저렴해지고 있다. NAND 플래시 기술은 휴대용 메모리 장치들이 효율적으로 작동할 수 있도록 해준다. NAND 플래시 기술은 NAND 게이트와 유사한 방식으로 접속되는 플로팅 게이트 트랜지스터(floating-gate transistor)들을 사용한다.
이러한 NAND 플래시 메모리들은 산술 코딩 기법과, 상기 산술 코딩 기법을 구현하기 위한 상응하는 인코더들(입력 시퀀스를 압축하는 알고리즘들)과 디코더들(인코드된 출력 시퀀스를 압축 해제하는 알고리즘들)을 이용할 수 있다. 이러한 인코더들/디코더들의 속도를 향상시키려는 필요성과, 단일 반복을 위해 필요한 시간의 양을 감소시키려는 필요성이 존재하며, 이는 특히 모든 NAND 플래시 메모리 장치들에 유용하다.
본 발명이 이루고자 하는 기술적인 과제는 산술 인코딩과 산술 디코딩의 단일 반복 시간을 줄일 수 있는 플래시 메모리 산술 인코딩과 디코딩을 위한 방법과 장치를 제공하는 것이다.
본 발명의 실시 예에 따른 산술 인코딩과 산술 디코딩의 단일 반복(single iteration)에 필요한 시간의 양을 감소시키기 위한 방법은 i-번째 심벌에 대한 누적 도수(CF[i])에 따라 디코드된 심벌에 대한 새로운 하이 파라미터(iH)와 새로운 로우 파라미터(iL)를 찾는 단계와, 상기 iH의 값과 상기 iL의 값에 따라 상기 iH와 상기 iL의 최상위 비트들(most significant bits(MSBs)을 시프트하여 상기 iH와 상기 iL에 대한 리스케일링을 수행하는 단계와, 상기 i번째 심벌의 범위(iRANGE)를 표현하기 위해 필요한 자릿수와 상기 iRANGE에 대해 유보된 비트들의 총 개수에 따라, iRANGE를 LeftShift=BitReserved -1-No0fDig(iRANGE)와 같이 쉬프트하는 단계를 수행함에 따라 리스케일링과 범위를 병렬로 계산하는 단계; 및 Step_tmp에 대해 필요한 조정을 결정하기 위해 하이-파라미터(H)와 로우-파라미터(L)의 리스케일링의 결과를 기다리는 동안, 쉬프트된 iRANGE를 CF[N]로 나누고, Step_tmp를 저장하는 단계를 포함하고, 상기 범위는 심벌-구간의 하이 파라미터(H) 경계 - 상기 심벌-구간의 로우 파라미터(L) 경계 + 1이고, iH=L+CF[i]*Step-1, iL=L+CF[i-1]*Step, 및 Step=Range/CF[N]이고, N은 알파벳 크기이고, 상기 iH와 iL의 MSB가 같은 비트의 개수를 Eq라 하고 iH[k]=0과 iL[k]=1을 유지하는 후속 비트들을 Op라 하면, Step=Step_tmp <<= (Eq + Op - LeftShift)이다.
상기 산술 인코딩은 NAND 플래시 메모리에 적용되는 입력 시퀀스를 위한 것이고, 상기 산술 디코딩은 상기 NAND 플래시 메모리로부터 출력되는 인코드된 출력 시퀀스를 위한 것이다.
상기 NAND 플래시 메모리는 x4 NAND 플래시 메모리이다.
인코딩과 산술 디코딩의 단일 반복에 필요한 시간의 양을 감소시키기 위한 방법은 컴퓨터 프로그램 코드로 작성되어 컴퓨터로 읽을 수 있는 기록 매체에 저장될 수 있다.
본 발명의 실시 예에 따른 산술 인코딩과 산술 디코딩을 하는 동안 리스케일링을 위해 필요한 시간의 양을 감소시키는 방법은 하이 파라미터로부터 로우 파라미터까지 코딩 구간을 제공하는 단계와, 각 심볼의 출현 빈도를 포함하는 누적도수 벡터(cumulative frequency vector)에 따라, 상기 코딩 구간의 각 반복을 하위-구간들로 분리하는 단계와, 새로운 하이 파라미터(NewHigh)와 새로운 로우 파라미터(NewLow)를 제공하기 위해, 인코드 또는 디코드 된 심벌에 따라 하위-구간을 선택하는 단계와, 상기 NewHigh의 최상위 비트들과 상기 NewLow의 최상위 비트들이 같은 개수를 판단하고, 상기 개수를 N으로 표시하는 단계와, i를 반복 번호라고 할 때, NewHigh[i]=0이고 NewLow[i]=1인 순차적인 MSB들을 찾고, 상기 순차적인 MSB들의 개수를 M으로 표시하는 단계와, 상기 NewHigh와 상기 NewLow를 (N+M) 비트만큼 쉬프트하고, 쉬프트된 NewHigh를 하이 파라미터로 표시하고, 쉬프트된 NewLow를 로우 파라미터로 표시하는 단계와, 상기 하이 파라미터의 MSB를 설정하고, 상기 로우 파라미터의 MSB를 삭제하는 단계와, 상기 하이 파라미터의 (N+M) 최하위 비트들(least significant bit; LSBs)을 설정하고, 상기 로우 파라미터의 (N+M) LSB들을 삭제하는 단계와, 상기 산술 인코딩을 위해 상기 하이 파라미터의 MSB를 출력하는 단계와, UnderCount=! (상기 하이 파라미터의 MSB)를 출력하는 단계와, 상기 하이 파라미터의 (N+1) MSB들을 출력하는 단계를 포함하고, N>0 이면, UnderCount= 0이고, N≤0이면, UnderCount= UnderCount + M이고,
상기 산술 디코딩을 위해, bit = code[N+1]을 저장하는 단계와, 상기 code를 (N+M)만큼 쉬프트하고, NewCode 파라미터의 MSB를 상기 bit으로 설정하는 단계를 포함하고, 상기 NewCode 파라미터의 (N+M) LSB들은 압축된 스트림으로부터 나온 (N+M )비트들이다.
본 발명의 실시 예에 따른 플래시 메모리 산술 인코딩과 산술 디코딩 방법은 리스케일링과 심벌 구간의 범위를 동시에 계산할 수 있으므로, 산술 인코딩과 산술 디코딩을 빠르게 수행할 수 있는 효과가 있다.
본 발명의 상세한 설명에서 인용되는 도면을 보다 충분히 이해하기 위하여 각 도면의 상세한 설명이 제공된다.
도 1은 종래의 산술 코딩 동작들을 도시된 블록 도이다.
도 2는 본 발명의 실시 예에 따른 산술 코딩 작동들을 도시한 블록 도이다.
도 3은 본 발명의 실시 예에 따라 파라미터들 N과 M이 계산되는 리스케일링 과정을 도시한 블록 도이다.
도 4는 본 발명의 실시 예에 따라 출력 비트들이 계산되는 리스케일링 과정을 도시한 개략적인 블록 도이다.
도 5는 본 발명의 실시 예를 구현된 시스템을 도시한 블록도이다.
도 1은 종래의 산술 코딩 동작들을 도시된 블록 도이다.
도 2는 본 발명의 실시 예에 따른 산술 코딩 작동들을 도시한 블록 도이다.
도 3은 본 발명의 실시 예에 따라 파라미터들 N과 M이 계산되는 리스케일링 과정을 도시한 블록 도이다.
도 4는 본 발명의 실시 예에 따라 출력 비트들이 계산되는 리스케일링 과정을 도시한 개략적인 블록 도이다.
도 5는 본 발명의 실시 예를 구현된 시스템을 도시한 블록도이다.
본 명세서에 개시되어 있는 본 발명의 개념에 따른 실시 예들에 대해서 특정한 구조적 또는 기능적 설명은 단지 본 발명의 개념에 따른 실시 예들을 설명하기 위한 목적으로 예시된 것으로서, 본 발명의 개념에 따른 실시 예들은 다양한 형태들로 실시될 수 있으며 본 명세서에 설명된 실시 예들에 한정되지 않는다.
본 발명의 개념에 따른 실시 예들은 다양한 변경들을 가할 수 있고 여러 가지 형태들을 가질 수 있으므로 실시 예들을 도면에 예시하고 본 명세서에서 상세하게 설명하고자 한다. 그러나, 이는 본 발명의 개념에 따른 실시 예들을 특정한 개시 형태들에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물, 또는 대체물을 포함한다.
제1 또는 제2 등의 용어는 다양한 구성 요소들을 설명하는데 사용될 수 있지만, 상기 구성 요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성 요소를 다른 구성 요소로부터 구별하는 목적으로만, 예컨대 본 발명의 개념에 따른 권리 범위로부터 벗어나지 않은 채, 제1구성 요소는 제2구성 요소로 명명될 수 있고 유사하게 제2구성 요소는 제1구성 요소로도 명명될 수 있다.
어떤 구성 요소가 다른 구성 요소에 "연결되어" 있다거나 "접속되어" 있다고 언급된 때에는, 그 다른 구성 요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성 요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성 요소가 다른 구성 요소에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는 중간에 다른 구성 요소가 존재하지 않는 것으로 이해되어야 할 것이다. 구성 요소들 간의 관계를 설명하는 다른 표현들, 즉 "~사이에"와 "바로 ~사이에" 또는 "~에 이웃하는"과 "~에 직접 이웃하는" 등도 마찬가지로 해석되어야 한다.
본 명세서에서 사용한 용어는 단지 특정한 실시 예를 설명하기 위해 사용된 것으로서, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 명세서에서, "포함하다" 또는 "가지다" 등의 용어는 본 명세서에 기재된 특징, 숫자, 단계, 동작, 구성 요소, 부분품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성 요소, 부분품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 나타낸다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미를 갖는 것으로 해석되어야 하며, 본 명세서에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
본 명세서에 개시된 "프로세서"는 예컨대 CPU(central processing unit) 및/또는 다른 처리 회로(DSP(digital signal processor), 마이크로프로세서 등)를 포함하는 임의의 처리 장치를 포함하도록 의도된 것으로 이해되어야 한다.
또한, "프로세서"는 하나 이상의 처리 장치를 참조하고, 처리 장치와 연관된 다양한 요소들은 다른 처리 장치들에 의해 공유될 수 있다. 본 명세서에 개시된 "메모리"는 메모리와, 프로세서 또는 CPU와 연관되는 다른 컴퓨터 판독가능 매체들, 예컨대 RAM(random access memory), ROM(read only memory), 고정된 저장 매체들(예컨대, 하드 드라이브), 분리형 저장 매체들(예컨대, 디스켓), 플래시 메모리 등을 포함하도록 의도된 것이다. 이에 더하여, 본 명세서에 개시된 "I/O 회로"는 예컨대, 상기 프로세서로 데이터를 입력하기 위한 하나 이상의 입력 장치들(키보드, 마우스 등), 및/또는 상기 프로세서와 연관된 결과들을 표시하기 위한 하나 이상의 출력 장치들(프린터, 모니터 등)을 포함하도록 의도된 것이다.
이하, 본 명세서에 첨부된 도면들을 참조하여 본 발명의 실시 예들을 상세히 설명한다.
도 1은 종래의 산술 코딩 동작을 도시한 블록도이다.
컴퓨터 과학과 정보 이론에서, 데이터 압축은 원래 표현보다 더 적은 비트들을 이용하여 정보를 인코딩하는 것을 포함한다. 무손실 압축(Lossless compression)은 통계적 중복성(statistical redundancy)을 식별하고 제거하여 비트들을 줄인다.
산술 코딩(arithmetic coding)은 무손실 데이터 압축에 사용되는 인코딩의 종류이다. 일반적으로, 문자열(string of characters)은 ASCII 코드와 같이 문자당 고정된 비트 수를 이용하여 표현된다. 그러나, 문자열이 산술 인코딩으로 변환될 때, 자주 사용되는 문자들은 더 적은 비트들로 저장되고, 자주 사용되지 않는 문자들은 더 많은 비트들로 저장되어 전체로서 사용되는 비트들은 더 적어지는 결과를 낳는다. 산술 코딩은 입력을 구성 심볼들로 분리하고 상기 구성 심복들 각각을 코드로 대체하는 허프만(Huffman) 코딩과 같은 인코딩의 형태들과는 다르다. 산술 코딩은 전체 메시지를 하나의 숫자, 분수(fraction) n으로 인코드한다. 여기서, n은 0.0≤n≤1.0이다.
산술 코더(arithmetic coder)는 크기 N을 갖는 알파벳 중에서 심볼들의 출현 (appearance)의 비율에 기초하여, 정수들의 "코드 구간"을 분리하는 것에 기초한다. 각 심볼-구간의 경계들(bounds)은 하이(High; H)와 로우(Low; L)로 표시되는 이전 경계들을 이용하여 계산된다. 경계들의 차이(RANGE)는 다음과 같다.
RANGE = High - Low + 1
CF[i]가 i번째 심볼에 대한 누적도수(cumulative frequency)를 의미하면,
iLow = Low + CF[i-1] * Step
iHigh = Low + CF[i] * Step - 1이다.
여기서, iLow는 i-번째 심벌의 로우이고, iHigh는 i-번째 심벌의 하이이고, Step = RANGE / CF[N]이다.
상기 연산들 후에, iHigh와 iLow를 왼쪽으로 쉬프트하고, 다음 심볼 반복에 대한 새로운 경계들인 High와 Low를 제공함으로써 iHigh와 iLow에 대한 리스케일링 (rescaling)이 이루어진다. 기존 방식들(schemes)에서, Step의 계산은 리스케일링이 끝난 후에만 이루어진다.
도 1을 참조하면, 위에서 설명된 종래의 동작들이 블록도 형태로 도시되어 있다. H,L calc는 주어진 또는 디코드된 심볼에 대한 iHigh(iH)와 iLow(iL)를 찾을 수 있고, H,L rescaling은 iHigh(iH)와 iLow(iL)의 값들에 따라 최상위 비트들의 일정 양을 쉬프트할 수 있다.
도 2는 본 발명의 실시 예에 따른 산술 코딩 작동들을 설명하는 블록도이다. 도 2를 참조하면, Step에 대한 계산은 H,L calc의 작동이 착수된 직후에 시작될 수 있다.
CF[N]에 의해 나눌 수 없을 정도로 iHigh(iH)와 iLow(iL)이 너무 가까우므로, i-번째 심벌에 대한 차이(iRANGE)는 왼쪽으로 시프트되어야 한다. 왼쪽으로 쉬프트되는 양(LeftShift)은 iRANGE를 나타내기 위해 요구되는 디지트들(digits)의 개수(NumOfDig(iRANGE))와 iRANGE를 위해 보류된(reserved) 비트들의 총 개수 (BitReserved)에 의존적이다.
왼쪽으로 쉬프트되는 양(LeftShift)은 다음과 같이 계산될 수 있다.
LeftShift= BitReserved -1 - NumOfDig(iRANGE)
예컨대, 보류된 비트들의 총 개수(BitReserved)가 5이고, iRANGE를 나타내기 위해 요구되는 디지트들의 개수(NumOfDig(iRANGE))가 3이면, 왼쪽으로 쉬프트되는 양(LeftShift)은 1일 것이다.
iRANGE를 쉬프트한 후, iRANGE는 CF[N]으로 나누어지고, Step_tmp을 저장하고, Step_tmp에 대해 필요한 조절을 결정하기 위해 H, L rescaling의 결과를 기다린다.
Eq는 동일한 iHigh와 iLow에서 MSB들의 개수라 하고, Op는 iHigh[k]=0, iLow[k]=1을 유지하는 다음 비트들의 개수라 한다. Step의 값은 다음과 같다.
Step = Step_tmp <<= (Eq + Op - LeftShift)
Step의 결과는 종래 방식과 같은 것이다.
도 2에 도시된 바와 같이, Left Shift()는 Left Shift()의 값에 따라 iRANGE를 쉬프트하고, Step rescaling()은 H, L rescaling()에 따라 Step_tmp를 조정한다.
리스케일링과 차이 계산들은 병렬적으로 수행되고, 산술 코딩은 큰 알파벳들에 대해 수행될 수 있다. 또한, 상기 산술 코딩은 상기 산술 코딩이 빠르게 수행될 수 있도록 적응적(adaptive)일 수 있다.
심볼 코딩 반복에서 빠른 리스케일링이 수행될 수 있다.
상술한 바와 같이, 전형적인 산술 코더(arithmetic coder)는 코딩 구간을 형성하는 2개의 파라미터들, 즉 high(H)와 Low(L)을 포함할 수 있다. 코딩 구간은 각 심볼의 출현 빈도를 포함하는 누적 도수 벡터에 따라 각 반복에서 하위-구간들 (sub-intervals)로 분리될 수 있다. 인코드 또는 디코드된 심볼에 따라 적합한 하위-구간을 선택한 후, 두 개의 새로운 파라미터들(NewHigh와 NewLow)이 제공될 수 있다.
종래의 경우, 초기 구간의 High<0.5, 초기 구간의 Low >=0.5, 또는 초기 구간의 0.25<Low<0.5<High<0.75 동안, NewHigh와 NewLow는 반복적으로 쉬프트 된다.
다른 방법들은 Low, High, 및 Range 대신에 파라미터들(Low와 Range)을 포함하고, Range가 초기 구간의 1/4보다 클 때까지 파라미터들(Low와 Range)을 쉬프트한다. 이 과정에서, 코드 비트들은 인코더로 전송되고, 디코더에 의해 사용된다.
본 발명의 실시 예에 따른 알고리즘은 빠르고 쉬운 방식으로 수행될 수 있다.
본 발명의 실시 예에 따라 NewHigh와 NewLow를 리스케일링하는 빠른 알고리즘이 제공된다.
상기 알고리즘은 3단계들(three phases)로 수행될 수 있다.
1. 결정은 얼마나 많은 NewHigh와 NewLow의 MSB들이 같은지와 N에 의해 표시되는지에 따라 결정된다. NewHigh와 NewLow는 달라야 하고 NewHigh>NewLow이므로, N+1 비트는 NewHigh와 NewLow에서 분명하다. 여기서, NewHigh[N+1]=1이고 NewLow[N+1]=0이다.
2. NewHigh[i]=0과 NewLow[i]=1이고, i>(N+1)이고, M에 의해 표시되므로, 순차적 MSB들은 찾아질 수 있다.
3. NewHigh와 NewLow는 (N+M) 비트들에 의해 쉬프트되고, High와 Low에 의해 표시된다. High의 MSB는 설정되고(set), Low의 MSB는 소거된다(erased). High의 (N+M) LSB들(least significant bits)은 설정되고, Low의 (N+M) LSB들은 소거된다.
인코더의 경우, High의 MSB는 출력된다. 그러면, UnderCount=!(high의 MSB)는 출력되고, High의 나머지 (N-1) MSB들은 출력된다. N>0이면, UnderCount의 새로운 값은 M이고, 그외의 경우 UnderCount의 새로운 값은 UnderCount + M이다.
디코더의 경우, Bit=Code[N+1]이 저장된다. Code는 (N+M)만큼 쉬프트되고 NewCode의 MSB는 Bit로 설정된다. NewCode의 (N+M) LSB들은 압축된 스트림으로부터 나온 순차적인 (N+M) 비트들일 수 있다.
도 3과 도 4는 앞에서 설명된 인코더 알고리즘을 도시한 것이고, 각각이 인코더의 개략적인 설명을 제공한다. 디코더 알고리즘은 인코더 알고리즘과 거의 동일하다.
본 발명의 실시 예에 따른 방법은 종래의 방법과 같은 결과를 얻어질 수 있으나, 본 발명의 실시 예에 따른 방법은 종래의 방법보다 즉각적으로 얻어질 수 있다.
예컨대, NewHigh=11100100011101이라 하고 NewLow=11100011101010이라 한다. N=5이고 M=3이므로, High=11110111111111이고 Low=00101000000000이 된다.
인코더의 경우, 파라미터 UnderCount(=UndCnt)=2이면, 출력 비트들은 1,00,1100이고, 새로운 UnderCount(=UndCnt)=3이 된다.
디코더의 경우, 코드워드는 NewHigh와 NewLow 사이에 있어야만 한다. 만약 Code=11100100001101이면, NewCode=101101********이 되고, '*'는 압축된 스트림으로부터 나온 비트이다.
본 발명의 실시 예에 따라, 구간 경계들(NewHigh와 NewLow)의 빠른 리스케일링을 수행하는 방법이 제공될 수 있다. 이 방법은 리스케일링을 한 클락 싸이클 (clock cycle) 이내에 완료되도록 할 수 있다. 루프들은 요구되지 않는다. 출력 비트들은 즉각적으로 제공되고 입력 비트들은 즉각적으로 주어질 수 있다. 산술 코더는 Low와 Range 발표와 함께 이루어진다. 리스케일링의 출력 비트들 및/또는 입력 비트들의 수는 반복(iteration)마다 고정된 수로 제한된다.
본 발명의 실시 예에 따른 방법들은 다양한 전자 기기들 또는 시스템들에서 사용하기에 적합하다.
도 5에 도시된 바와 같이, 본 발명의 실시 예들은 소프트웨어와, 일반적으로 "프로세서", "회로", "모듈", 또는 "시스템"으로 불리는 하드웨어를 조합한 형태를 취할 수 있다. 또한, 본 발명의 실시 예들은 하드웨어 기능들을 실행하고, 컴퓨터로 읽을 수 있는 프로그램 코드를 저장하는 하나 또는 그 이상의 컴퓨터로 읽을 수 있는 기록 매체(들)에 구현되는 컴퓨터 프로그램 제품들(computer program products)의 형태를 취할 수 있다.
하나 또는 그 이상의 컴퓨터로 사용가능하거나 컴퓨터로 읽을 수 있는 매체(들)의 어떠한 조합도 이용될 수 있다. 컴퓨터로 사용가능하거나 컴퓨터로 읽을 수 있는 매체(medium)는 컴퓨터로 읽을 수 있는 저장 매체(storage medium)일 수 있다. 컴퓨터로 읽을 수 있는 저장 매체는 전자적, 자기적, 광학적, 전자기적, 적외선, 반도체 시스템, 장치(apparatus), 디바이스(device), 또는 이들의 어떠한 적합한 조합일 수 있으나, 본 발명의 기술적 사상이 이에 한정되는 것은 아니다.
컴퓨터로 읽을 수 있는 저장 매체의 좀더 구체적인 예들(비-전면 목록(non-exhaustive list))은 휴대용 컴퓨터 디스켓, 하드 디스크, RAM(random access memory), ROM(read only memory), EPROM(erasable programmable read-only memory), 또는 NAND 플래시 메모리, 특히 x4 NAND 플래시 메모리와 같은 플래시 메모리, CD-ROM, 광 저장 장치, 자기 저장 장치, 또는 이들의 어떠한 적합한 조합을 포함할 수 있다.
이러한 맥락에서, 컴퓨터로 읽을 수 있는 저장 매체는 명령 실행 시스템, 장치, 또는 디바이스에 의해 또는 이들과 관련하여 사용되는 비-일시적인 프로그램(non-transitory program)을 포함하거나 저장할 수 있는 임의의 유형(tangible)의 매체일 수 있다.
본 발명의 실시 예들의 작동들을 수행하기 위한 컴퓨터 프로그램 코드는, Java, Smalltalk, C++ 과 같은 객체 지향 프로그래밍 언어와, "C" 프로그래밍 언어 또는 이와 유사한 프로그래밍 언어들과 같이 기존의 절차적 프로그래밍 언어를 포함하는 하나 또는 그 이상의 프로그램 언어들의 임의의 조합으로 작성될 수 있다.
상기 프로그램 코드는 사용자의 컴퓨터에서 전적으로 실행되거나 독립형 (stand-alone) 소프트웨어 패키지로서 부분적으로 실행되거나, 원격 컴퓨터에서 부분적으로 또는 전적으로, 또는 서버에서 실행될 수 있다. 후자의 시나리오에서, 원격 컴퓨터는 LAN(local area network) 또는 WAN(wide area network)을 포함하는 임의 종류의 네트워크를 통해 사용자의 컴퓨터와 접속되거나, 상기 접속은 외부 컴퓨터(예컨대, 인터넷을 통해)를 접속될 수 있다.
본 발명의 실시 예들은 신호 화살표들 및/또는 블록도들을 참조하여 설명될 수 있다. 블록도들의 각 블록과 상기 블록도들 내에서 블록도들의 조합들은 컴퓨터 프로그램 명령들(inctructions)을 수반하는 하드웨어에 의해 구현될 수 있음을 이해해야 한다.
컴퓨터 프로그램 명령들은 컴퓨터, 다른 프로그램가능한 데이터 처리 장치, 또는 상기 컴퓨터 판독가능 매체에 저장되는 상기 명령들이 플로우차트 및/또는 블록도의 회로에서 특정된 기능/행동을 구현하는 명령들을 포함하는 제조품을 생산하는 특정한 방식으로 기능 하는 다른 기기들을 지시할 수 있는 컴퓨터 판독가능 매체에 저장될 수 있다.
예컨대, 도 5는 상술한 장치들과 방법론을 활용할 수 있는 컴퓨터 시스템의 예를 도시한 블록도이다. 컴퓨터 시스템(201)은 프로세서(또는 CPU; 202), (예컨대, 버스(204) 또는 다른 접속 수단들을 통해) 프로세서에 접속되는 메모리(203), 프로세서(202)와 인터페이스하기 위한 출력 회로(205)와 입력 회로(206)를 포함할 수 있다.
프로세서(202)는 본 명세서에 개시된 하나 또는 그 이상의 방법들, 도면들에 도시되고 설명되는 실시 예들을 수행할 수 있다. 본 명세서에 개시된 실시 예들은 메모리(203)에 저장된 루틴(207)으로서 구현될 수 있고, 신호 소스(208)로부터 신호를 처리하기 위해 프로세서(202)에 의해 실행될 수 있다. 이를테면, 컴퓨터 시스템(201)은 본 발명의 루틴(207)을 실행할 때 특수 목적(specific purpose) 컴퓨터 시스템이 될 수 있는 범용(general-purpose) 컴퓨터 시스템일 수 있다.
본 발명은 도면에 도시된 실시 예를 참고로 설명되었으나 이는 예시적인 것에 불과하며, 본 기술 분야의 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 타 실시 예가 가능하다는 점을 이해할 것이다. 따라서, 본 발명의 진정한 기술적 보호 범위는 첨부된 등록청구범위의 기술적 사상에 의해 정해져야 할 것이다.
10 : 종래의 산술 코딩 블록도
14 : H,L 계산 블록
16 : H,L 리스케일링 블록
100 : 본 발명의 산술 코딩 블록도
110 : H,L 계산 블록
120 : 쉬프트 블록
140 : H,L 리스케일링 블록
150 : 스텝 리스케일링 블록
201 : 컴퓨터 시스템
14 : H,L 계산 블록
16 : H,L 리스케일링 블록
100 : 본 발명의 산술 코딩 블록도
110 : H,L 계산 블록
120 : 쉬프트 블록
140 : H,L 리스케일링 블록
150 : 스텝 리스케일링 블록
201 : 컴퓨터 시스템
Claims (9)
- 산술 인코딩과 산술 디코딩의 단일 반복(single iteration)에 필요한 시간의 양을 감소시키기 위한 방법에 있어서,
i-번째 심벌에 대한 누적 도수(CF[i])에 따라 디코드된 심벌에 대한 새로운 하이 파라미터(iH)와 새로운 로우 파라미터(iL)를 찾는 단계와, 상기 iH의 값과 상기 iL의 값에 따라 상기 iH와 상기 iL의 최상위 비트들(most significant bits, MSBs)을 쉬프트하여 상기 iH와 상기 iL에 대한 리스케일링을 수행하는 단계와, 상기 i-번째 심벌의 범위(iRANGE)를 표현하기 위해 필요한 자릿수와 상기 iRANGE에 대해 보류된 비트들의 총 개수에 따라, iRANGE를 LeftShift=BitReserved -1-No0fDig(iRANGE)와 같이 쉬프트하는 단계와, Step_tmp에 대해 필요한 조정을 결정하기 위해 하이 파라미터(H)와 로우 파라미터(L)의 리스케일링의 결과를 기다리는 동안, 쉬프트된 iRANGE를 CF[N]로 나누고, Step_tmp를 저장하는 단계를 수행함에 따라 리스케일링과 범위를 병렬로 계산하는 단계를 포함하고,
상기 범위는 심벌-구간의 하이 파라미터(H) 경계 - 상기 심벌-구간의 로우 파라미터(L) 경계 + 1이고,
iH=L+CF[i]*Step-1, iL=L+CF[i-1]*Step, 및 Step=Range/CF[N]이고, N은 알파벳 크기이고,
상기 iH와 iL의 MSB가 동일한 비트의 개수를 Eq라 하고 iH[k]=0과 iL[k]=1을 유지하는 후속 비트들을 Op라 하면, Step=Step_tmp <<= (Eq + Op - LeftShift)인 산술 인코딩과 산술 디코딩의 단일 반복에 필요한 시간의 양을 감소시키기 위한 방법. - 제1항에 있어서,
상기 산술 인코딩은 NAND 플래시 메모리에 적용되는 입력 시퀀스를 위한 것이고, 상기 산술 디코딩은 상기 NAND 플래시 메모리로부터 출력되는 인코드된 출력 시퀀스를 위한 것인 산술 인코딩과 산술 디코딩의 단일 반복에 필요한 시간의 양을 감소시키기 위한 방법. - 제2항에 있어서,
상기 NAND 플래시 메모리는 x4 NAND 플래시 메모리인 산술 인코딩과 산술 디코딩의 단일 반복에 필요한 시간의 양을 감소시키기 위한 방법. - NAND 플래시 메모리에 적용되는 입력 시퀀스에 대한 산술 인코딩 및 NAND 플래시 메모리로부터 출력되는 인코드된 출력 시퀀스에 대한 산술 디코딩을 위한 컴퓨터 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체로서,
상기 컴퓨터 프로그램은 리스케일링과 범위를 병렬적으로 계산하도록 구성되고,
상기 범위는 심벌-구간의 하이 파라미터(H) 경계 - 상기 심벌-구간의 로우 파라미터(L) 경계 + 1이고, 상기 컴퓨터 프로그램의 계산 방법은:
i-번째 심벌에 대한 누적 도수 CF[i0]에 따라 디코드된 심벌에 대한 새로운 하이 파라미터(iH) 및 새로운 로우 파라미터(iL)을 찾되, iH=L+CF[i]*Step-1, iL=L+CF[i-1]*Step, 및 Step=Range/CF[N]이고, N은 알파벳 크기인 단계;
상기 iH의 값과 상기 iL의 값에 따라 상기 iH와 상기 iL의 최상위 비트들(most significant bits, MSBs)을 쉬프트하여 상기 iH와 상기 iL에 대한 리스케일링을 수행하는 단계;
상기 i-번째 심벌의 범위(iRANGE)를 표현하기 위해 필요한 자릿수와 상기 iRANGE에 대해 보류된 비트들의 총 개수에 따라, iRANGE를 LeftShift=BitReserved -1-No0fDig(iRANGE)와 같이 쉬프트하는 단계; 및
Step_tmp에 대해 필요한 조정을 결정하기 위해 하이 파라미터(H)와 로우 파라미터(L)의 리스케일링의 결과를 기다리는 동안, 쉬프트된 iRANGE를 CF[N]로 나누고, Step_tmp를 저장하는 단계를 포함하되,
상기 iH와 iL의 MSB가 동일한 비트의 개수를 Eq라 하고 iH[k]=0과 iL[k]=1을 유지하는 후속 비트들을 Op라 하면, Step=Step_tmp <<= (Eq + Op - LeftShift)인, 컴퓨터 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체. - 제4항에 있어서,
상기 NAND 플래시 메모리는 x4 NAND 플래시 메모리인 컴퓨터로 읽을 수 있는 기록 매체. - 산술 인코딩과 산술 디코딩을 하는 동안 리스케일링을 위해 필요한 시간의 양을 감소시키는 방법에 있어서,
하이 파라미터로부터 로우 파라미터까지 코딩 구간을 제공하는 단계;
각 심볼의 출현 빈도를 포함하는 누적도수 벡터(cumulative frequency vector)에 따라, 상기 코딩 구간의 각 반복을 하위-구간들로 분리하는 단계;
새로운 하이 파라미터(NewHigh)와 새로운 로우 파라미터(NewLow)를 제공하기 위해, 인코드 또는 디코드 된 심벌에 따라 하위-구간을 선택하는 단계;
상기 NewHigh의 최상위 비트들과 상기 NewLow의 최상위 비트들이 동일한 개수를 판단하고, 상기 개수를 N으로 표시하는 단계;
i를 반복 번호라고 할 때, NewHigh[i]=0이고 NewLow[i]=1인 순차적인 MSB들을 찾고, 상기 순차적인 MSB들의 개수를 M으로 표시하는 단계;
상기 NewHigh와 상기 NewLow를 (N+M) 비트만큼 쉬프트하고, 쉬프트된 NewHigh를 하이 파라미터로 표시하고, 쉬프트된 NewLow를 로우 파라미터로 표시하는 단계;
상기 하이 파라미터의 MSB를 설정하고, 상기 로우 파라미터의 MSB를 삭제하는 단계;
상기 하이 파라미터의 (N+M) 최하위 비트들(least significant bit; LSBs)을 설정하고, 상기 로우 파라미터의 (N+M) LSB들을 삭제하는 단계; 및
상기 산술 인코딩을 위해,
상기 하이 파라미터의 MSB를 출력하는 단계;
UnderCount=! (상기 하이 파라미터의 MSB)를 출력하는 단계; 및
상기 하이 파라미터의 (N+1) MSB들을 출력하는 단계를 포함하고,
N>0 이면, UnderCount= 0이고, N≤0이면, UnderCount= UnderCount + M이고,
상기 산술 디코딩을 위해,
bit = code[N+1]을 저장하는 단계; 및
상기 code를 (N+M)만큼 쉬프트하고, NewCode 파라미터의 MSB를 상기 bit으로 설정하는 단계를 포함하고,
상기 NewCode 파라미터의 (N+M) LSB들은 압축된 스트림으로부터 나온 (N+M )비트들인 산술 인코딩과 산술 디코딩을 하는 동안 리스케일링을 위해 필요한 시간의 양을 감소시키는 방법. - 제6항에 있어서,
상기 산술 인코딩은 NAND 플래시 메모리에 적용되는 입력 시퀀스를 위한 것이고, 상기 산술 디코딩은 상기 NAND 플래시 메모리로부터 출력되는 인코드된 출력 시퀀스를 위한 것인 산술 인코딩과 산술 디코딩을 하는 동안 리스케일링을 위해 필요한 시간의 양을 감소시키는 방법. - 제7항에 있어서,
상기 NAND 플래시 메모리는 x4 NAND 플래시 메모리인 산술 인코딩과 산술 디코딩을 하는 동안 리스케일링을 위해 필요한 시간의 양을 감소시키는 방법. - 삭제
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/245,677 | 2014-04-04 | ||
US14/245,677 US9558109B2 (en) | 2014-04-04 | 2014-04-04 | Method and apparatus for flash memory arithmetic encoding and decoding |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20150115629A KR20150115629A (ko) | 2015-10-14 |
KR102355585B1 true KR102355585B1 (ko) | 2022-01-26 |
Family
ID=54209816
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020150031192A KR102355585B1 (ko) | 2014-04-04 | 2015-03-05 | 플래시 메모리 산술 인코딩과 디코딩을 위한 방법과 장치 |
Country Status (2)
Country | Link |
---|---|
US (1) | US9558109B2 (ko) |
KR (1) | KR102355585B1 (ko) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130027230A1 (en) | 2010-04-13 | 2013-01-31 | Detlev Marpe | Entropy coding |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5546080A (en) | 1994-01-03 | 1996-08-13 | International Business Machines Corporation | Order-preserving, fast-decoding arithmetic coding arithmetic coding and compression method and apparatus |
US6081213A (en) | 1997-03-26 | 2000-06-27 | Sony Corporation | Method and apparatus for arithmetic coding, method and apparatus for arithmetic decoding, and storage medium |
JP3391251B2 (ja) | 1998-03-25 | 2003-03-31 | 三菱電機株式会社 | 適応確率推定方法及び適応符号化方法並びに適応復号方法 |
CN1249473A (zh) | 1998-09-30 | 2000-04-05 | 朗迅科技公司 | 无乘法的算术编码 |
CN1364341A (zh) | 2000-03-07 | 2002-08-14 | 皇家菲利浦电子有限公司 | 算术编码信息信号的算术译码 |
JP3801501B2 (ja) | 2001-12-18 | 2006-07-26 | 三菱電機株式会社 | 符号化装置及び復号装置及び符号化・復号装置及び符号化方法及び復号方法及び符号化・復号方法及びプログラム |
JP3620506B2 (ja) | 2002-02-28 | 2005-02-16 | ソニー株式会社 | Mq−coder方式の算術符号化/復号装置及び再正規化方法 |
ES2552696T3 (es) | 2002-04-23 | 2015-12-01 | Ntt Docomo, Inc. | Sistema y método para codificación y decodificación aritmética |
JP2004128619A (ja) | 2002-09-30 | 2004-04-22 | Kyoshin Technosonic Co Ltd | 符号化方法 |
JP2005184232A (ja) | 2003-12-17 | 2005-07-07 | Sony Corp | 符号化装置、プログラム、およびデータ処理方法 |
US7265691B2 (en) * | 2005-06-23 | 2007-09-04 | 1Stworks Corporation | Modeling for enumerative encoding |
JP2007030444A (ja) | 2005-07-29 | 2007-02-08 | Oki Data Corp | 電子装置 |
WO2007065352A1 (en) | 2005-12-05 | 2007-06-14 | Huawei Technologies Co., Ltd. | Method and apparatus for realizing arithmetic coding/ decoding |
US7522076B1 (en) | 2007-10-16 | 2009-04-21 | Mediatek Inc. | Parallel context adaptive binary arithmetic coding |
US7982641B1 (en) * | 2008-11-06 | 2011-07-19 | Marvell International Ltd. | Context-based adaptive binary arithmetic coding engine |
-
2014
- 2014-04-04 US US14/245,677 patent/US9558109B2/en active Active
-
2015
- 2015-03-05 KR KR1020150031192A patent/KR102355585B1/ko active IP Right Grant
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130027230A1 (en) | 2010-04-13 | 2013-01-31 | Detlev Marpe | Entropy coding |
Also Published As
Publication number | Publication date |
---|---|
KR20150115629A (ko) | 2015-10-14 |
US20150286466A1 (en) | 2015-10-08 |
US9558109B2 (en) | 2017-01-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4792257B2 (ja) | 適応算術復号化方法及び適応算術復号化装置 | |
US7623047B2 (en) | Data sequence compression | |
RU2015147886A (ru) | Кодирование и декодирование значащих коэффициентов в зависимости от параметра указанных значащих коэффициентов | |
US9998144B2 (en) | Generating a code alphabet of symbols to generate codewords for words used with a program | |
JP2013508867A5 (ko) | ||
US20130019029A1 (en) | Lossless compression of a predictive data stream having mixed data types | |
CN110021369B (zh) | 基因测序数据压缩解压方法、系统及计算机可读介质 | |
JP2019124947A (ja) | スペクトルピーク位置の符号化及び復号化 | |
US20220114454A1 (en) | Electronic apparatus for decompressing a compressed artificial intelligence model and control method therefor | |
US10230392B2 (en) | Techniques for parallel data decompression | |
US11115049B1 (en) | Hardware friendly data decompression | |
US9100042B2 (en) | High throughput decoding of variable length data symbols | |
KR101617965B1 (ko) | 체계적인 극 부호 부호화기 | |
KR20150131541A (ko) | 부호화 장치 및 그의 부호화 방법 | |
CN110021368B (zh) | 比对型基因测序数据压缩方法、系统及计算机可读介质 | |
US11309909B2 (en) | Compression device, decompression device, and method | |
KR20100025710A (ko) | 무손실 부호화/복호화 장치 및 방법 | |
CN106484753B (zh) | 数据处理方法 | |
US8018359B2 (en) | Conversion of bit lengths into codes | |
KR102355585B1 (ko) | 플래시 메모리 산술 인코딩과 디코딩을 위한 방법과 장치 | |
US9787323B1 (en) | Huffman tree decompression | |
CN111970007B (zh) | 一种解码方法、解码器、设备及介质 | |
TWI498891B (zh) | 解壓縮電路與相關的壓縮方法與解壓縮方法 | |
JP2004120623A (ja) | 符号化装置、符号化方法、復号装置及び復号方法 | |
JP2007336056A (ja) | 符号化装置、符号化方法及びプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right |