KR20190094496A - 고속으로 데이터를 인코딩하는 장치 및 데이터 인코딩 방법 - Google Patents

고속으로 데이터를 인코딩하는 장치 및 데이터 인코딩 방법 Download PDF

Info

Publication number
KR20190094496A
KR20190094496A KR1020180013719A KR20180013719A KR20190094496A KR 20190094496 A KR20190094496 A KR 20190094496A KR 1020180013719 A KR1020180013719 A KR 1020180013719A KR 20180013719 A KR20180013719 A KR 20180013719A KR 20190094496 A KR20190094496 A KR 20190094496A
Authority
KR
South Korea
Prior art keywords
data
symbols
codeword
metadata
symbol
Prior art date
Application number
KR1020180013719A
Other languages
English (en)
Other versions
KR102488129B1 (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 KR1020180013719A priority Critical patent/KR102488129B1/ko
Priority to US16/181,774 priority patent/US10498358B2/en
Publication of KR20190094496A publication Critical patent/KR20190094496A/ko
Application granted granted Critical
Publication of KR102488129B1 publication Critical patent/KR102488129B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/4031Fixed length to variable length coding
    • H03M7/4037Prefix coding
    • H03M7/4043Adaptive prefix coding
    • H03M7/4062Coding table adaptation
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/60General implementation details not specific to a particular type of compression
    • H03M7/6064Selection of Compressor
    • H03M7/607Selection between different types of compressors
    • 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/0608Saving storage space on 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/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/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
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/42Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code using table look-up for the coding or decoding process, e.g. using read-only memory
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/60General implementation details not specific to a particular type of compression
    • H03M7/6011Encoder aspects
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/60General implementation details not specific to a particular type of compression
    • H03M7/6017Methods or arrangements to increase the throughput
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/60General implementation details not specific to a particular type of compression
    • H03M7/6064Selection of Compressor
    • H03M7/6082Selection strategies
    • H03M7/6088Selection strategies according to the data type

Abstract

본 기술에 의한 데이터 인코딩 장치는 데이터 스트림으로부터 다수의 서브 데이터 블록으로 분할하는 전처리부; 각각 대응하는 서브 데이터 블록에서 메타 데이터를 생성하는 다수의 메타 데이터 생성부; 각각 대응하는 메타 데이터를 이용하여 대응하는 서브 데이터 블록을 압축하는 다수의 데이터 압축부; 및 다수의 데이터 압축부에서 출력된 다수의 압축된 데이터와 다수의 메타 데이터 생성부에서 출력되는 다수의 메타 데이터를 포함하는 압축 데이터 스트림을 출력하는 압축 데이터 출력부를 포함한다.

Description

고속으로 데이터를 인코딩하는 장치 및 데이터 인코딩 방법{HIGH SPEED DATA ENCODER AND DATA ENCODING METHOD}
본 발명은 고속으로 데이터를 인코딩하는 장치와 데이터 인코딩 방법에 관한 것으로서 보다 구체적으로는 허프만 알고리즘을 사용하는 고속의 데이터 인코딩 장치와 데이터 인코딩 방법에 관한 것이다.
무손실 압축에는 Lempel-Ziv (LZ) 계열의 딕셔너리 기반의 방식과 허프만 코딩같은 통계적 방식이 있다.
LZ 계열의 딕셔너리 기반 방식은 반복되는 패턴이 있는 데이터에서 매우 높은 압축률을 보이나 그렇지 않은 경우 압축률이 저하되는 문제가 있다.
허프만 코딩은 데이터의 심볼 출현 빈도에 따라 트리 구조를 형성하고 트리 구조에 따라 심볼에 코드워드를 할당하여 압축하는 무손실 인코딩 기술의 하나이다.
전체 데이터에 대한 트리 구조를 생성하기 어려운 연속 데이터의 경우에는 이를 일정한 크기의 블록으로 나누고 블록 단위로 허프만 코딩을 적용하는 블록 허프만 코딩 기술도 제안되고 있다.
허프만 코딩의 경우 압축률은 데이터의 엔트로피와 관련되는데 데이터가 특정한 값에 편향될수록 엔트로피 값이 낮아지며 압축률은 높아지는 경향이 있다.
반대로 데이터가 임의의 패턴을 가지는 경우 엔트로피 값은 높아지고 압축률은 떨어지게 된다.
이에 따라 고속으로 데이터를 인코딩하되 압축률이 향상된 인코딩 장치가 요구되고 있다.
예를 들어 디램과 같은 메모리에 보내는 명령어를 트레이싱하는 경우 데이터의 크기가 매우 크고 패턴도 불규칙적이어서 압축률이 높은 고속의 인코딩 장치가 요구되고 있다.
KR 10-0667293 B1 KR 10-1770477 B1
본 기술은 압축률이 높은 고속의 데이터 인코딩 장치와 데이터 인코딩 방법을 제공한다.
본 기술에 의한 데이터 인코딩 장치는 데이터 스트림으로부터 다수의 서브 데이터 블록으로 분할하는 전처리부; 각각 대응하는 서브 데이터 블록에서 메타 데이터를 생성하는 다수의 메타 데이터 생성부; 각각 대응하는 메타 데이터를 이용하여 대응하는 서브 데이터 블록을 압축하는 다수의 데이터 압축부; 및 다수의 데이터 압축부에서 출력된 다수의 압축된 데이터와 다수의 메타 데이터 생성부에서 출력되는 다수의 메타 데이터를 포함하는 압축 데이터 스트림을 출력하는 압축 데이터 출력부를 포함한다.
본 기술에 의한 데이터 인코딩 방법은 다수의 심볼을 빈도수에 따라 정렬하여 빈도 테이블을 생성하는 단계; 빈도 테이블에서 빈도수가 작은 두 심볼을 선택하는 단계; 두 심볼을 합성한 합성 심볼과 두 심볼의 빈도수의 합을 이용하여 빈도 테이블을 갱신하는 단계; 두 심볼의 정보를 포함하는 합성 심볼에 관한 정보를 비트맵에 저장하는 단계; 두 심볼 중 하나를 좌측 노드로 설정하고 다른 하나를 우측 노드로 설정하는 단계; 및 비트맵을 참조하여 좌측 노드에 포함된 심볼을 찾아 코드워드를 갱신하고 우측 노드에 포함된 심볼을 찾아 코드워드를 갱신하는 단계를 포함한다.
본 기술에 의한 데이터 인코딩 장치는 고속으로 데이터 인코딩을 수행할 수 있다.
본 기술에 의한 데이터 인코딩 장치는 데이터를 특성에 따라 다수의 서브 블록으로 나누어 서브 블록 별로 인코딩을 수행하고 메타 데이터와 인코딩 결과물을 합성하여 출력함으로써 고속으로 데이터 인코딩을 수행하는 동시에 압축률을 높일 수 있다.
도 1은 본 발명의 일 실시예에 의한 데이터 인코딩 장치의 블록도.
도 2 및 도 3은 도 1의 전처리부의 일 예를 나타낸 블록도.
도 4는 도 1의 메타 데이터 생성부의 상세 블록도.
도 5는 도 1의 메타 데이터 생성부의 동작을 설명하는 설명도.
도 6은 도 1의 데이터 압축부의 상세 블록도.
도 7 내지 도 11은 도 1의 데이터 압축부의 동작을 설명하는 설명도.
도 12는 도 1의 압축 데이터 출력부의 상세 블록도.
도 13 및 도 14는 본 발명의 효과를 나타낸 그래프.
이하에서는 도면을 참조하여 본 발명의 실시예를 개시한다.
도 1은 본 발명의 일 실시예에 의한 데이터 인코딩 장치의 블록도이다.
본 발명의 일 실시예에 의한 데이터 인코딩 장치는 데이터 스트림을 압축하여 압축 데이터 스트림을 출력한다.
본 발명의 일 실시예에 의한 데이터 인코딩 장치는 전처리부(100), 메타 데이터 생성부(200-1 ~ 200-4), 데이터 압축부(300-1 ~ 300-4), 메타 데이터 처리부(400-1 ~ 400-4), 압축 데이터 합성부(500), 메타 데이터 합성부(600), 압축 데이터 출력부(700)를 포함한다.
전처리부(100)는 데이터 스트림을 일정한 크기의 다수의 서브 데이터 블록으로 분할하고 서브 데이터 블록을 대응하는 메타 데이터 생성부(200-1 ~ 200-4)에 제공한다.
이때 데이터 스트림은 데이터 전체이거나 일정한 크기의 블록 단위일 수 있다.
전처리부(100)는 특성이 유사한 데이터들끼리 모아 다수의 서브 데이터 블록을 형성하고 이를 대응하는 메타 데이터 생성부(200-1 ~ 200-4)에 제공할 수 있다.
이를 통해 서브 데이터 블록 내에서 엔트로피를 줄일 수 있다.
이를 위한 전처리부(100)의 구체적인 구성은 데이터의 종류에 따라 달라질 수 있다.
이하에서는 DDR4 명령과 LPDDR4 명령을 예로 들어 전처리부(100)의 상세 구성을 개시한다.
도 2는 DDR4 명령이 데이터 스트림으로 입력되는 실시예에서 전처리부(100)의 상세 블록도이다.
DDR4 명령의 경우 데이터의 엔트로피가 예를 들어 0.8348와 같이 높은 값을 가지므로 종래의 방식으로 압축하는 경우 높은 압축률을 얻기 어렵다.
도 2의 실시예에서 전처리부(100)는 비트 재정의부(110), 비트 정렬부(120)를 포함한다.
비트 재정의부(110)는 돈케어(Don't care) 비트들을 하이 또는 로우 레벨로 재정의 한다.
DDR4 명령은 32비트로 표현되며 주소와 제어 신호를 포함한다.
DDR4 명령에는 다양한 명령이 존재하나 액티브, 읽기, 쓰기, 프리차지, 장치 비선택이 대부분을 차지한다.
이중 장치 비선택 명령은 상대적으로 많은 비중을 차지하는데 32비트 중 CKE0, CKE1, CS0, CS1, CS2 및 CS3가 모두 "하이" 레벨을 가지고 나머지 비트들은 어떤 레벨인지 관계없는 돈케어 비트들에 해당한다.
돈케어 비트를 하이 또는 로우 레벨로 지정함으로써 특정 심볼의 출현 빈도를 조절할 수 있으며 이에 따라 서브 데이터 블록의 엔트로피를 조절할 수 있다.
장치 비선택 명령의 돈케어 비트들을 하이 또는 로우 레벨로 지정하기 위하여 출현 빈도가 높은 다른 명령들인 액티브, 읽기, 쓰기, 프리차지 명령의 비트 정보를 이용할 수 있다.
표 1은 명령어와 돈케어 비트의 관계를 나타낸다.
명령 /ACT /RAS /CAS /WE 기타
액티브 L 로우 주소 V
읽기 H H L H V
쓰기 H H L L V
프리차지 H L H L V
장치 비선택 H H L L L
표 1과 같이 /ACT 신호와 /RAS 신호의 경우 다른 명령들에서 하이 레벨의 빈도가 높기 때문에 장치 비선택 명령의 경우 이를 하이 레벨로 지정하고, /CAS와 /WE 신호의 경우 다른 명령들에서 로우 레벨의 빈도가 높기 때문에 장치 비선택 명령의 경우 이를 로우 레벨로 지정한다.
기타 비트들의 경우 임의의 패턴을 가지는 주소 부분으로서 본 실시예에서는 로우 레벨로 지정한다.
비트 정렬부(120)는 분할된 서브 데이터 블록이 낮은 엔트로피를 가지도록 DDR4 명령의 비트 순서를 재정렬하고 재정렬된 비트들을 4 개의 그룹으로 분할한다.
본 실시예에서 32비트 명령어를 4개의 그룹으로 분할하는데 이때 하나의 심볼의 크기는 8비트이다.
이를 위하여 비트 정렬부(120)는 비트 사이의 상관 관계(correlation)를 이용한다.
두 랜덤 데이터 X, Y를 묶었을 때 절약할 수 있는 데이터의 크기 정도를 상호 정보 I(X,Y)로 표현하면 I(X,Y) = H(X)+H(Y)-H(X,Y)의 관계를 갖는다.
이때 H(X)는 랜덤 데이터 X에 대한 엔트로피, H(Y)는 랜덤 데이터 Y에 대한 엔트로피, H(X,Y)는 조인트 엔트로피에 해당한다.
본 실시예에서는 이러한 방식을 적용하여 각 비트들을 묶었을 때의 상관 관계를 측정하였다.
구체적으로 본 실시예에서는 2비트씩 묶어 상호 정보를 계산한 후 8개의 비트씩 4개의 그룹으로 분할하였다.
4개의 그룹으로 분할하기 위하여 종래의 클러스터링 알고리즘인 K-medoids를 사용하였다.
표 2는 32비트 명령 데이터를 4개의 그룹 즉 4개의 서브 데이터 블록으로 분할한 예를 나타낸다.
그룹 명령 비트
0 A0 A1 A2 A10 A11 A12 A13 /CS3
1 A3 A4 A5 A6 A7 A8 A9 A14
2 A15 A16 A17 CKE0 CKE1 C2 /CS2 /ACT
3 /CS0 /CS1 ODT0 ODT1 BA0 BA1 BG0 BG1
도 3은 LPDDR4 명령이 데이터 스트림으로 입력되는 실시예에서 전처리부(100')의 상세 블록도이다.
전처리부(100')는 서브 데이터 블록의 엔트로피가 낮아지도록 명령 데이터를 분할한다.
도 3의 실시예에서 전처리부(100')는 비트 위치 변경부(110')와 델타 코딩부(120')를 포함한다.
LPDDR4 명령이 하나의 행을 구성하도록 다수의 LPDDR4 명령을 매트릭스 형태로 배치하면 수직 방향으로 데이터의 유사성이 있는 것으로 알려져 있다.
비트 위치 변경부(110')는 수직 방향과 수평 방향을 교대하는 전치 연산(transpose)을 수행한다. 본 실시예에서 비트 위치 변경부(110')에 입력되는 데이터 스트림은 32 x 32 비트의 크기를 갖는다.
본 실시예에서 델타 코딩부(120')는 전치 연산된 데이터에 대해서 델타 코딩을 수행한다.
델타 코딩은 이전 심볼과 현재 심볼의 차이를 이용하여 데이터를 표현하는 방식으로서 이를 통해 엔트로피를 더 낮출 수 있다.
이후 델타 코딩부(120')는 델타 코딩된 데이터를 4 개의 그룹으로 분할하여 출력한다.
도 1로 돌아가 메타 데이터 생성부(200-1 ~ 200-4)는 각 서브 데이터 블록에 대한 데이터 정렬 동작을 수행하여 메타 데이터를 생성한다.
이때 데이터 정렬 동작은 서브 데이터 블록에서 각 심볼들의 종류, 각 심볼들의 빈도수를 파악하고 심볼들을 빈도수를 기준으로 정렬하는 동작을 의미한다.
도 4는 도 1의 메타 데이터 생성부(200-1)의 상세 블록도이다.
메타 데이터 생성부(200-1)는 빈도 계산부(210-1)와 정렬부(220-1)를 포함한다.
빈도 계산부(210-1)는 심볼의 종류, 심볼별 빈도수를 파악하고, 정렬부(220-1)는 심볼들을 빈도수를 기준으로 정렬한다.
본 실시예에서는 8비트 데이터를 하나의 심볼로 표현하며 하나의 서브 데이터 블록은 16K개의 심볼을 포함할 수 있다.
도 5는 도 1의 메타 데이터 생성부(200-1)의 동작을 설명하는 설명도이다.
좌측의 빈도 테이블은 심볼에 따른 빈도수를 나타낸 것이고 우측의 빈도 테이블은 심볼들을 빈도수에 따라 정렬한 것이다.
본 실시예에서 심볼의 가짓수와 빈도 테이블은 메타 데이터에 포함된다.
메타 데이터는 압축 데이터 스트림에 포함되어 출력되어 추후 디코딩에 사용된다.
이때 메타 데이터에 포함되는 빈도 테이블은 정렬된 빈도 테이블인 것이 바람직하다.
메타 데이터 생성부(200-2 ~ 200-4)의 세부 구성은 메타 데이터 생성부(200-1)의 세부 구성과 실질적으로 동일하므로 설명을 생략한다.
도 1로 돌아가 메타 데이터 처리부(400-1 ~ 400-4)는 각각 대응하는 메타 데이터 생성부(200-1 ~ 200-4)에서 제공되는 심볼의 가짓수 정보와 빈도 테이블 정보 등의 메타 데이터를 결합하여 출력한다.
메타 데이터 합성부(600)는 메타 데이터 처리부(400-1 ~ 400-4)에서 출력된 서브 데이터 블록들에 대한 메타 데이터를 순서대로 연결하여 하나의 메타 데이터를 생성한다.
데이터 압축부(300-1)는 메타 데이터 생성부(200-1)에서 출력된 빈도 테이블을 이용하여 각 심볼에 대응하는 코드 워드를 생성하고, 생성된 코드워드를 이용하여 데이터를 압축한다.
도 6은 도 1의 데이터 압축부(300-1)의 상세 블록도이다.
데이터 압축부(300-1)는 트리 생성부(310-1), 코드워드 결정부(320-1), 코드워드 출력부(330-1)를 포함한다.
트리 생성부(310-1)는 빈도 테이블을 이용하여 트리 구조를 형성한다. 이를 위하여 트리 생성부(310-1)는 비트맵 데이터를 이용할 수 있다.
비트맵 데이터는 도 7에 도시된 바와 같이 심볼에 대응하는 코드로서 트리 구조 생성 과정에서 어느 심볼과 어느 심볼의 하나의 노드에 연결되는지를 용이하게 식별하게 해준다. 이에 대해서는 아래에서 구체적으로 설명한다.
코드워드 결정부(320-1)는 생성된 트리 구조를 이용하여 각 심볼에 대응하는 코드워드를 결정한다.
트리 생성부(310-1)와 코드워드 결정부(320-1)는 병렬로 동작하여 트리 구조가 완성됨과 함께 코드워드가 결정될 수 있다.
코드워드 출력부(330-1)는 심볼에 할당된 코드워드를 이용하여 서브 데이터 블록의 심볼들을 코드워드로 변환하여 출력한다.
예를 들어 서브 데이터 블록에 많은 수(예를 들어 16K)의 심볼이 포함된 경우 쓰루풋을 높이기 위하여 코드워드 출력부(330-1)를 파이프라인 구조로 형성할 수 있다.
예를 들어 각 서브 데이터 블록 별로 한 번에 8개의 심볼을 코드워드로 변환하고 이러한 동작을 2K번 수행함으로써 전체 서브 데이터 블록을 코드워드로 변환할 수 있다.
도 7 내지 도 11은 도 1의 데이터 압축부의 동작을 설명하는 설명도이다.
도 7은 초기 상태의 빈도 테이블, 비트맵, 코드 테이블을 나타낸다.
비트맵은 세로 축에는 빈도에 따라 심볼들이 정렬되어 위치하고, 가로축에는 심볼들이 순서대로 정렬되어 위치한다.
비트맵에서 동일한 심볼이 교차하는 위치에는 1이 지정되고 나머지 위치에는 0이 지정된다.
빈도 테이블, 비트맵, 코드 테이블은 트리 구조가 완성되면서 갱신될 수 있다.
먼저 하위 빈도의 심볼 두 개를 선택한다.
도 7에서는 b, e가 선택된다.
선택된 두 심볼은 노드가 공통된 트리의 좌측 노드와 우측 노드가 된다.
이에 따라 도 8과 같이 빈도 테이블, 비트맵, 코드 테이블이 갱신된다.
두 심볼의 합성된 심볼을 (b,e)라고 하면 그 빈도는 심볼 b의 빈도와 심볼 e의 빈도를 합한 5가 된다.
비트맵을 통해 심볼 b와 심볼 e가 하나의 노드에 묶인 것임을 용이하게 알 수 있다.
빈도 테이블의 위에 있는 심볼이 좌측 노드에 할당되고 빈도 테이블의 아래에 있는 심볼이 우측 노드에 할당된다.
좌측 노드에 해당하는 심볼 b에는 코드 0, 우측 노드에 해당하는 심볼 e에는 코드 1이 지정된다.
도 8의 우측 상단 그래프는 현재의 트리 구조를 도시한 그래프이다.
다음으로 빈도 테이블에서 빈도 수가 작은 2 개의 심볼을 선택한다.
도 8에서는 d, c가 선택된다.
선택된 두 심볼은 노드가 공통된 트리의 좌측 노드와 우측 노드가 된다.
이에 따라 도 9와 같이 빈도 테이블, 비트맵, 코드 테이블이 갱신된다.
두 심볼이 합성된 심볼을 (d,c)라고 표현하면 그 빈도는 심볼 d의 빈도와 심볼 c의 빈도를 합한 6이 된다.
비트맵은 심볼 d와 심볼 c가 하나의 노드에 묶인 것임을 표시한다.
빈도 테이블의 위에 있던 심볼이 좌측 노드에 할당되고 빈도 테이블의 아래에 있던 심볼이 우측 노드에 할당된다.
좌측 노드에 해당하는 심볼 d에는 코드 0, 우측 노드에 해당하는 심볼 c에는 코드 1이 추가된다.
다음으로 빈도 테이블에서 빈도 수가 작은 2 개의 심볼을 선택한다.
도 9에서는 (b,e), (d,c)가 선택된다.
선택된 두 심볼은 노드가 공통된 트리의 좌측 노드와 우측 노드가 된다.
이에 따라 도 10과 같이 빈도 테이블, 비트맵, 코드 테이블이 갱신된다.
두 심볼의 합성된 심볼을 {(b,e),(d,c)}라고 하면 그 빈도는 심볼 (b,e)의 빈도와 심볼 (d,c)의 빈도를 합한 11이 된다.
비트맵은 심볼 (b,e)와 심볼 (d,c)가 하나의 노드에 묶인 것임을 표시한다.
빈도 테이블의 위에 있는 심볼이 좌측 노드에 할당되고 빈도 테이블의 아래에 있는 심볼이 우측 노드에 할당된다.
좌측 노드에 해당하는 심볼 (b,e)에는 코드 0, 우측 노드에 해당하는 심볼 (d,c)에는 코드 1이 추가된다.
즉 심볼 (b,e)에 포함된 심볼 b, 심볼 e에는 상위 비트로 0이 추가되고, 심볼 (d,c)에 포함된 심볼 d, 심볼 c에는 상위 비트로 1이 추가된다.
다음으로 빈도 테이블에서 빈도 수가 작은 2개의 심볼을 선택한다.
도 10에서는 a, {(b,e), (d,c)}가 선택된다.
선택된 두 심볼은 노드가 공통된 트리의 좌측 노드와 우측 노드가 된다.
이에 따라 도 11과 같이 빈도 테이블, 비트맵, 코드 테이블이 갱신된다.
두 심볼이 합성된 심볼을 [a,{(b,e),(d,c)}]라고 하면 그 빈도는 심볼 a의 빈도와 심볼 {(b,e),(d,c)}의 빈도를 합한 21이 된다.
비트맵은 심볼 a와 심볼 {(b,e),(d,c)}가 하나의 노드에 묶인 것임을 표시한다.
빈도 테이블의 위에 있는 심볼이 좌측 노드에 할당되고 빈도 테이블의 아래에 있는 심볼이 우측 노드에 할당된다.
좌측 노드에 해당하는 심볼 a에는 코드 0, 우측 노드에 해당하는 심볼 {(b,e),(d,c)}에는 코드 1이 추가된다.
즉 심볼 {(b,e),(d,c)}에 포함된 심볼 b, e, d, c의 상위 비트로 1이 추가된다.
빈도 테이블에 하나의 심볼 즉 두개 미만의 심볼이 남아 있으므로 트리 생성이 완료된 것으로 본다.
도 11의 트리 그래프 및 코드 테이블과 같이 트리 구조가 완성되면 각 심볼에 대한 코드워드가 결정될 수 있다.
도 6에서 코드워드 출력부(330-1)는 심볼마다 결정된 코드워드를 이용하여 서브 데이터 블록에 포함된 심볼들을 코드워드로 변환하여 출력한다.
압축 데이터 합성부(500)는 각 서브 데이터 블록에 대한 코드워드들을 하나로 합하여 출력한다.
일 실시예에서 코드워드 출력부(330-1)는 서브 데이터 블록 전체를 한 번에 코드워드로 변환할 수 있다.
이에 따라 데이터 압축부(300-1 ~ 300-4)에서 출력되는 코드워드 데이터를 C1, C2, C3, C4라 하면 압축 데이터 합성부(500)는 이들을 순서대로 연결하여 출력할 수 있다.
다른 실시예에서 코드워드 출력부(330-1)는 파이프라인 방식으로 동작할 수 있다.
예를 들어 코드워드 출력부(330-1)는 각각 8개씩의 심볼을 코드워드로 변환하는 동작을 N(=2K)번 수행하여 서브 데이터 블록을 압축할 수 있다.
이에 따라 압축 데이터 합성부(500)는 C11, C21, C31, C41, ....., C1N, C2N, C3N, C4N와 같은 순서로 데이터를 출력할 수 있다.
이때 C1x, C2x, C3x, C4x(x = 1, 2, ..., N)는 대응하는 데이터 압축부(300-1 ~ 300-4)에서 출력하는 8개의 코드워드를 나타낸다.
압축 데이터 출력부(700)는 메타 데이터 합성부(600)에서 출력되는 메타 데이터 다음에 압축 데이터 합성부(500)에서 출력되는 압축 데이터를 연결하여 출력한다.
도 12는 도 1의 압축 데이터 출력부(700)의 상세 블록도이다.
압축 데이터 스트림 생성부(710)는 메타 데이터(M1, M2, M3, M4)와 압축 데이터(C11 ~ C4N)를 연결하여 압축 데이터 스트림을 생성한다.
압축 데이터 스트림 출력부(720)는 압축 데이터 스트림을 출력 비트 수 맞게 패킹하여 출력한다.
도 13 및 도 14는 본 발명의 효과를 나타낸 그래프이다.
도 13은 DDR4 명령 데이터에 대한 압축률을 비교하여 나타낸 것이다.
이때 압축률은 압축 후의 데이터 크기를 압축 전의 데이터 크기로 나눈 값을 퍼센트로 표시한 것이다.
DDR4 데이터의 경우 랜덤한 패턴을 가지는 특징이 있다. 이에 따라 도 12에서 LZ77은 평균 72.59%, LZW는 평균 72.97%의 압축률을 보여주고, 허프만 코딩은 82.93%, 블록 허프만 코딩은 83.29%의 평균 압축률을 보여 전반적으로 압축 성능이 좋지 않다.
이에 비하여 본 발명에 의한 인코딩 장치를 사용한 경우 평균 40.13%의 압축률을 보인다.
도 14는 LPDDR4 명령 데이터에 대한 압축 성능을 비교하여 나타낸 것이다.
LPDDR4 데이터의 경우 반복되는 패턴이 많으므로 딕셔너리 기반의 압축 기술인 LZ77, LZW의 성능이 좋다.
도 14에서 LZ77은 평균 24.45%, LZW는 평균 22.34%의 압축률을 보여준다.
반면에 허프만 코딩은 56.09%, 블록 허프만 코딩은 52.31%의 평균 압축률을 보이며 LZ77, LZW에 비하여 성능이 좋지 않다.
이에 비하여 본 발명에 의한 압축 방식은 평균 26.4%의 높은 압축률을 보인다.
DDR4 데이터와 같이 랜덤한 패턴을 가지는 경우에는 LZ77, LZW의 압축 성능이 저하되나 본 발명의 경우 여전히 높은 압축률을 나타내는 특징이 있다.
이와 같이 본 발명의 경우에는 반복되는 패턴의 데이터 및 랜덤한 패턴의 데이터 모두에서 압축 성능이 우수한 장점이 있다.
이상의 개시는 본 발명의 실시예를 설명하기 위한 것으로서 본 발명의 권리범위가 이상에 개시된 내용으로 한정되는 것은 아니다. 본 발명의 권리범위는 이하의 특허청구범위에 문언적으로 기재된 범위와 그 균등범위에 의해 해석되어야 한다.
100: 전처리부
110: 비트 재정의부
120: 비트 정렬부
110': 데이터 위치 변경부
120': 델타 코딩부
200-1, 200-2, 200-3, 200-4: 메타 데이터 생성부
210-1: 빈도 계산부
220-1: 정렬부
300-1, 300-2, 300-3, 300-4: 데이터 압축부
310-1: 트리 생성부
320-1: 코드워드 결정부
330-1: 코드워드 출력부
400: 메타 데이터 처리부
500: 압축 데이터 합성부
600: 메타 데이터 합성부
700: 압축 데이터 출력부
710-1: 압축 데이터 스트림 생성부
720-2: 압축 데이터 스트림 출력부

Claims (22)

  1. 데이터 스트림으로부터 다수의 서브 데이터 블록으로 분할하는 전처리부;
    각각 대응하는 서브 데이터 블록에서 메타 데이터를 생성하는 다수의 메타 데이터 생성부;
    각각 대응하는 메타 데이터를 이용하여 대응하는 서브 데이터 블록을 압축하는 다수의 데이터 압축부; 및
    상기 다수의 데이터 압축부에서 출력된 다수의 압축된 데이터와 상기 다수의 메타 데이터 생성부에서 출력되는 다수의 메타 데이터를 포함하는 압축 데이터 스트림을 출력하는 압축 데이터 출력부
    를 포함하는 데이터 인코딩 장치.
  2. 청구항 1에 있어서, 상기 전처리부는 상기 데이터 스트림에 포함된 데이터의 전체 또는 일부를 상기 다수의 서브 데이터 블록의 엔트로피를 고려하여 상기 다수의 서브 데이터 블록으로 분할하는 데이터 인코딩 장치.
  3. 청구항 2에 있어서, 상기 데이터 스트림은 메모리 명령어를 포함하고, 상기 전처리부는 상기 메모리 명령의 돈케어 비트를 하이 또는 로우 레벨로 재지정하고 상기 메모리 명령의 비트를 재정렬한 후 상기 다수의 서브 데이터 블록으로 분할하는 데이터 인코딩 장치.
  4. 청구항 2에 있어서, 상기 데이터 스트림은 각각 매트릭스의 행방향으로 배치된 다수의 메모리 명령어를 포함하고, 상기 전처리부는 상기 매트릭스의 행렬을 교환하는 전치 연산을 수행한 후 이를 행 단위로 분할하여 상기 다수의 서브 데이터 블록을 생성하는 데이터 인코딩 장치.
  5. 청구항 4에 있어서, 상기 전처리부는 상기 전치 연산을 수행한 후 델타 코딩을 더 수행하는 데이터 인코딩 장치.
  6. 청구항 1에 있어서, 메타 데이터 생성부는 입력된 서브 데이터 블록에 포함된 심볼의 종류와 심볼의 빈도수를 포함하는 빈도 테이블을 생성하여 상기 입력된 서브 데이터 블록에 대응하는 메타 데이터를 생성하는 데이터 인코딩 장치.
  7. 청구항 6에 있어서, 상기 메타 데이터는 심볼의 가짓수와 심볼을 빈도수에 따라 정렬한 빈도 테이블을 포함하는 데이터 인코딩 장치.
  8. 청구항 6에 있어서, 상기 데이터 압축부는 상기 빈도 테이블로부터 상기 빈도 테이블에 포함된 심볼을 노드로 포함하는 트리 구조를 생성하는 트리 생성부;
    상기 트리 구조에서 상기 심볼에 대응하는 코드워드를 결정하는 코드워드 결정부; 및
    상기 결정된 코드워드를 이용하여 상기 서브 데이터 블록을 압축하여 출력하는 코드워드 출력부
    를 포함하는 데이터 인코딩 장치.
  9. 청구항 8에 있어서, 상기 트리 생성부는 상기 빈도 테이블에서 빈도수가 가장 작은 두 심볼을 추출하고 상기 두 심볼의 빈도수를 합한 값을 상기 두 심볼의 합성 심볼에 대한 빈도수로 지정하여 상기 빈도 테이블에 추가하는 데이터 인코딩 장치.
  10. 청구항 9에 있어서, 상기 코드워드 결정부는 상기 두 심볼 중 하나를 좌측 노드 다른 하나를 우측 노드로 지정하고 상기 좌측 노드에 포함된 심볼의 코드워드와 상기 우측 노드에 포함된 심볼의 코드워드를 갱신하는 데이터 인코딩 장치.
  11. 청구항 10에 있어서, 상기 코드워드 결정부는 상기 좌측 노드에 포함된 심볼의 코드워드를 갱신하기 위하여 하이 레벨 비트를 추가하고 상기 우측 노드에 포함된 심볼의 코드워드를 갱신하기 위하여 로우 레벨 비트를 추가하는 데이터 인코딩 장치.
  12. 청구항 9에 있어서, 상기 트리 생성부는 상기 두 심볼이 선택되었는지 여부를 표시하는 비트맵 테이블을 생성하고, 상기 코드워드 결정부는 상기 비트맵 테이블을 참조하여 상기 두 심볼을 식별하는 데이터 인코딩 장치.
  13. 청구항 9에 있어서, 상기 트리 생성부는 상기 빈도 테이블에 둘 이상의 심볼이 존재하는 동안 동작을 반복하는 데이터 인코딩 장치.
  14. 청구항 8에 있어서, 상기 코드워드 출력부는 다수의 파이프라인 단계를 포함하는 데이터 인코딩 장치.
  15. 청구항 1에 있어서, 상기 압축 데이터 출력부는 상기 다수의 서브 데이터 블록에 대응하는 다수의 메타 데이터를 순차적으로 이어지고 그 이후에 상기 다수의 서브 데이터 블록에 대응하는 압축 데이터가 순차적으로 이어지는 압축 데이터 스트림을 생성하는 압축 데이터 스트림 생성부를 포함하는 데이터 인코딩 장치.
  16. 청구항 15에 있어서, 상기 압축 데이터 출력부는 상기 압축 데이터 스트림을 일정한 데이터 폭으로 패킹하여 출력하는 압축 데이터 스트림 출력부를 더 포함하는 데이터 인코딩 장치.
  17. 청구항 1에 있어서, 상기 다수의 데이터 압축부에서 출력되는 다수의 압축 데이터를 서브 데이터 블록 순서로 결합하여 상기 압축 데이터 출력부에 제공하는 압축 데이터 합성부를 더 포함하는 데이터 인코딩 장치.
  18. 청구항 1에 있어서, 상기 다수의 메타 데이터 생성부에서 출력되는 다수의 메타 데이터를 서브 데이터 블록 순서로 결합하여 상기 압축 데이터 출력부에 제공하는 메타 데이터 합성부를 더 포함하는 데이터 인코딩 장치.
  19. 청구항 18에 있어서, 각각 대응하는 메타 데이터 생성부에서 출력되는 메타 데이터를 결합하여 상기 메타 데이터 합성부에 제공하는 다수의 메타 데이터 처리부를 더 포함하는 데이터 인코딩 장치.
  20. 다수의 심볼을 빈도수에 따라 정렬하여 빈도 테이블을 생성하는 단계;
    상기 빈도 테이블에서 빈도수가 적은 두 심볼을 선택하는 단계;
    상기 두 심볼을 합성한 합성 심볼과 상기 두 심볼의 빈도수의 합을 이용하여 상기 빈도 테이블을 갱신하는 단계;
    상기 두 심볼의 정보를 포함하는 상기 합성 심볼에 관한 정보를 비트맵에 저장하는 단계;
    상기 두 심볼 중 하나를 좌측 노드로 설정하고 다른 하나를 우측 노드로 설정하는 단계; 및
    상기 비트맵을 참조하여 상기 좌측 노드에 포함된 심볼을 찾아 코드워드를 갱신하고 상기 우측 노드에 포함된 심볼을 찾아 코드워드를 갱신하는 단계
    를 포함하는 데이터 인코딩 방법.
  21. 청구항 20에 있어서, 상기 코드워드를 갱신하는 단계는 상기 좌측 노드에 포함된 심볼에 하이 레벨의 비트를 추가하는 단계와 상기 우측 노드에 포함된 심볼에 로우 레벨의 비트를 추가하는 단계를 포함하는 데이터 인코딩 방법.
  22. 청구항 20에 있어서, 상기 두 심볼을 선택하는 단계 내지 코드워드를 갱신하는 단계는 상기 빈도 테이블에 둘 이상의 심볼이 존재하는 동안 반복하여 수행하는 데이터 인코딩 방법.
KR1020180013719A 2018-02-05 2018-02-05 고속으로 데이터를 인코딩하는 장치 KR102488129B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020180013719A KR102488129B1 (ko) 2018-02-05 2018-02-05 고속으로 데이터를 인코딩하는 장치
US16/181,774 US10498358B2 (en) 2018-02-05 2018-11-06 Data encoder and data encoding method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020180013719A KR102488129B1 (ko) 2018-02-05 2018-02-05 고속으로 데이터를 인코딩하는 장치

Publications (2)

Publication Number Publication Date
KR20190094496A true KR20190094496A (ko) 2019-08-14
KR102488129B1 KR102488129B1 (ko) 2023-01-12

Family

ID=67476158

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180013719A KR102488129B1 (ko) 2018-02-05 2018-02-05 고속으로 데이터를 인코딩하는 장치

Country Status (2)

Country Link
US (1) US10498358B2 (ko)
KR (1) KR102488129B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021060758A1 (ko) * 2019-09-24 2021-04-01 심인보 데이터 무손실 압축 장치 및 그 방법

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100667293B1 (ko) 2000-10-31 2007-01-10 인텔 코오퍼레이션 허프만 코드 길이 정보를 생성하는 방법
KR101612281B1 (ko) * 2015-03-19 2016-04-14 김정훈 이진 데이터의 압축 및 복원 방법과 장치
KR101770477B1 (ko) 2015-05-11 2017-08-22 비아 얼라이언스 세미컨덕터 씨오., 엘티디. 입력 블럭의 스캔과 동시에 정렬된 심볼 리스트를 유지하는 하드웨어 데이터 압축기

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9509336B1 (en) * 2015-05-11 2016-11-29 Via Alliance Semiconductor Co., Ltd. Hardware data compressor that pre-huffman encodes to decide whether to huffman encode a matched string or a back pointer thereto

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100667293B1 (ko) 2000-10-31 2007-01-10 인텔 코오퍼레이션 허프만 코드 길이 정보를 생성하는 방법
KR101612281B1 (ko) * 2015-03-19 2016-04-14 김정훈 이진 데이터의 압축 및 복원 방법과 장치
KR101770477B1 (ko) 2015-05-11 2017-08-22 비아 얼라이언스 세미컨덕터 씨오., 엘티디. 입력 블럭의 스캔과 동시에 정렬된 심볼 리스트를 유지하는 하드웨어 데이터 압축기

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021060758A1 (ko) * 2019-09-24 2021-04-01 심인보 데이터 무손실 압축 장치 및 그 방법

Also Published As

Publication number Publication date
KR102488129B1 (ko) 2023-01-12
US10498358B2 (en) 2019-12-03
US20190245554A1 (en) 2019-08-08

Similar Documents

Publication Publication Date Title
US6484142B1 (en) Encoder using Huffman codes
EP1514355B1 (en) Method and system for multi-rate lattice vector quantization of a signal
US5870036A (en) Adaptive multiple dictionary data compression
KR100289589B1 (ko) 디지탈 신호의 부호화 방법,부호화용 테이블 생성 방법,부호화 장치 및 부호화 방법
CN101095284B (zh) 用于有选择地压缩和解压缩数据的设备与方法
KR100349447B1 (ko) 인코더/디코더시스템용콤팩트소오스코딩테이블
RU2007141934A (ru) Адаптивная группировка параметров для улучшенной эффективности кодирования
KR100954182B1 (ko) 간결한 코드북을 갖는 엔트로피 코딩
US20120130965A1 (en) Data compression method
US9106254B2 (en) Generating a code alphabet of symbols to generate codewords for words used with a program
JP2010191460A (ja) 信号分割情報のデコーディング方法
US5594435A (en) Permutation-based data compression
WO2021012278A1 (zh) 一种数据的处理方法、系统、编码器及解码器
CN104125475A (zh) 一种多维量子数据压缩、解压缩方法及装置
KR102488129B1 (ko) 고속으로 데이터를 인코딩하는 장치
Belodedov et al. Development of an algorithm for optimal encoding of WAV files using genetic algorithms
KR20160100496A (ko) 바이너리 클러스터를 이용한 허프만 부호화 효율화 방법 및 그 장치
KR20150077194A (ko) 이진 데이터의 압축 및 복원 방법과 장치
CN113452376A (zh) 激活数据的压缩和/或解压缩
JP2001211082A (ja) Pcm信号符号化方法及び復号化方法
US10263638B2 (en) Lossless compression method for graph traversal
Rani et al. A survey on lossless text data compression techniques
CN110865299B (zh) 一种基于前向相容的折叠集分层压缩方法及装置
KR20140145437A (ko) 이진 데이터의 압축 및 압축해제 방법과 장치
JP2002330076A (ja) ハフマン復号装置及び復号方法

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