KR20040104676A - 데이터 압축용 회로 및 방법 - Google Patents

데이터 압축용 회로 및 방법 Download PDF

Info

Publication number
KR20040104676A
KR20040104676A KR10-2004-7017466A KR20047017466A KR20040104676A KR 20040104676 A KR20040104676 A KR 20040104676A KR 20047017466 A KR20047017466 A KR 20047017466A KR 20040104676 A KR20040104676 A KR 20040104676A
Authority
KR
South Korea
Prior art keywords
logic gate
coupled
circuit
carry
carry value
Prior art date
Application number
KR10-2004-7017466A
Other languages
English (en)
Other versions
KR100702453B1 (ko
Inventor
콕번고든
호스에이드리언존
Original Assignee
인터내셔널 비지네스 머신즈 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인터내셔널 비지네스 머신즈 코포레이션 filed Critical 인터내셔널 비지네스 머신즈 코포레이션
Publication of KR20040104676A publication Critical patent/KR20040104676A/ko
Application granted granted Critical
Publication of KR100702453B1 publication Critical patent/KR100702453B1/ko

Links

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
    • 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/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • H03M7/3086Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing a sliding window, e.g. LZ77

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

본 발명은 입력 버퍼(140)에 유지된 바이트를 히스토리 버퍼(110, 120)에 유지된 바이트와 비교함으로써 데이터 문자열을 LZ1 압축하기 위한 비교 매트릭스(170)의 비교 유닛(400)에 이용되는 회로(640) 및 방법에 관한 것으로서, 상기 방법은 직렬로 결합된 복수의 로직 게이트 단(720, 730, 740, 750)을 제공하는 단계를 포함하며, 상기 각 로직 게이트 단은 상기 유닛의 출력 및 다른 로직 게이트 단 중 하나에 전달되는 캐리값을 생성하고, 상기 복수의 로직 게이트 단의 단수와 상기 각 로직 게이트 단에 있는 로직 게이트수를 곱한 값은 단일 로직 회로 단을 갖는 등가 회로에 필요한 로직 게이트수보다 적다. 상기 캐리값은 일련의 로직 게이트 단에 의해 검출된 연속 일치수를 나타낸다. 복수의 로직 게이트 단을 이용함에 따른 지연은 캐리 룩-어헤드 값(770)을 이용하여 단축할 수 있다. 상기 유닛의 출력에서 생성된 캐리값을 이전에 생성된 캐리 룩-어헤드 값과 비교하여 상기 캐리값의 갱신 가능 여부를 판정함으로써 압축 효율성을 개선할 수 있다.

Description

데이터 압축용 회로 및 방법{CIRCUIT AND METHOD FOR USE IN DATA COMPRESSION}
데이터 압축 분야에 있어서 LZ(Lempel-Ziv) 알고리즘은 잘 알려져 있다. 특히, LZ1로 알려진 "히스토리 버퍼" 버전은 코딩된 데이터의 무손실 압축이 요구되는 하드웨어 구현예에 있어서 특히 인기가 있는데, 그 이유는 비교적 많지 않은 버퍼 요건과 예측 가능한 성능으로도 대부분의 기술에 꽤 적합한 것으로 만들기 때문이다.
LZ1 알고리즘은 입력 문자열을 검사하여 파악한 문자의 레코드를 유지한다. 최근의 히스토리에서 이전에 발생한 문자열이 나타나면, 그 문자열을 출력 문자열에서 "토큰"(여태까지 그 문자열이 발생한 위치와 기간을 나타내는 코드)으로 대체한다. 압축기와 압축 해제기 모두 규정 길이의 "히스토리 버퍼"를 이용하는데, 그렇지 않은 경우에는 더 이상의 필요한 정보가 그것들 사이를 통과할 수 없다.
상당한 문자열에서 이전에 파악하지 못한 문자는 "리터럴(literal)"로서 코딩된다. 이것은 필요한 비트수의 확장에 해당하나, 대부분의 타입의 데이터에 있어서는 토큰 대체(및 그에 따른 압축) 기회가 압축할 수 없는 데이터를 능가하기 때문에, 전체적인 압축이 달성된다. 통상의 압축비는 2:1에서 약 10:1의 범위 내에 있다.
수년에 걸쳐 기본 LZ1 알고리즘을 변형한 것들이 나와, 점차 개선되고 있다.
LZ1 알고리즘은 바이트 단위로 동작하기 때문에, 통상의 하드웨어 구현예에서는 입력 스트림을 압축할 때 한번에 1 바이트만을 고려한다. 각 바이트가 입력될 때, 모든 발생한 바이트에 대해서 (예컨대 콘텐트 어드레서블 메모리(Content-Addressable-Memory : CAM)를 이용하여) "히스토리 버퍼"를 탐색한다. 문자열 대체에 있어서 단일 바이트는 효율적인 후보로서 간주되지 않기 때문에, 발견된 일치들을 토큰 대체가 일어나기 전에 연속적인 일치로 증보해야만 한다.
입력되는 각 후속 바이트도 히스토리 버퍼에서 탐색되는데, 기존의 일치의 다음에 오는 일치만이 보고된다. 최종적으로, (기지의 일치에 인접하는 일치가 더 이상 발견되지 않을 때) 문자열 일치가 종결될 수 있으며, 생존한 "문자열 일치"가 코딩되어 대체된다. 일치가 길면 길수록 비트수가 더 많이 줄어든다.
1 클록 사이클 당 1 바이트를 처리하는 간단한 LZ1 알고리즘의 구현예는 현재의 주문형 반도체(application specific integrated circuit : ASIC) 기술에 있어서 통상의 클록 속도에서 약 100-200 MB/s로 제한된다. 그러나, 이것은 단일 데이터 스트림에 고대역폭을 요구하는 일부 용례(예컨대, 메모리 압축, 광 네트워크, RAID 디스크 어레이)에 있어서는 불충분한 것이다. 성능, 즉 1 초 당 압축될 수 있는 바이트수를 증가시키기 위해서는, "사이클 시간"(바이트를 입력하고 모든 일치를 발견하는 데에 걸리는 시간)을 줄이거나, 한번에 1 이상의 바이트를 탐색할 수 있도록 CAM을 변경해야 한다. 다중 입력 CAM 설계의 어려움 때문에, 일반적으로는 CAM의 액세스 시간 및 사이클 시간을 줄이는 것에 성능 개선의 초점을 두고 있다. 물론 두가지 개선책이 서로 배타적인 것은 아니며, 사이클 시간을 줄이는 것에 더하여 다중 바이트 CAM을 사용하여 성능 개선을 얻을 수 있다.
본 출원인이 본 출원과 동시에 제출하고, 출원인의 참조 번호가 GB9-2001-0056인 "METHOD AND ARRANGEMENT FOR DATA COMPRESSION"이란 명칭의 GB 특허 출원(그 내용을 본 발명에서 인용함)에는 데이터 문자열을 LZ1 압축하는 방법 및 장치가 개시되어 있는데, 이 방법 및 장치는 상기 데이터 문자열의 제1 바이트 시퀀스를 입력 버퍼에 유지하는 단계; 상기 데이터 문자열의 제2 바이트 시퀀스를 히스토리 버퍼에 유지하는 단계; 상기 입력 버퍼와 상기 히스토리 버퍼에 결합되고, 복수의 비교 유닛의 로우 및 컬럼을 구비하는 매트릭스 비교 수단에서 상기 입력 버퍼에 유지된 바이트를 상기 히스토리 버퍼에 유지된 바이트와 비교하는 단계로서, 상기 히스토리 버퍼의 바이트는 상기 매트릭스 비교 수단 내의 대각선 방향으로 배치된 비교 유닛에 결합되는 것인 비교 단계; 각 로우마다 그 로우의 비교 유닛 및 동일한 컬럼의 이전 비교 유닛에서 최대수의 연속 바이트 일치가 일어난 컬럼을 검출하는 단계; 상기 검출 단계에서 검출된 일치 바이트 시퀀스를 토큰으로서 인코딩하는 단계를 포함한다.
그러나, 이 기술은 1 사이클 당 임의수의 바이트로 확장될 수는 있으나, 이 구현예에 필요한 로직 게이트수는 바이트수의 자승으로 증가하므로, 1 사이클 당약 4 바이트를 넘는 디자인은 비용이 많이 들게 된다.
따라서, 전술한 문제점을 해결한 데이터 압축 방법 및 장치가 요구된다.
본 발명은 데이터 압축에 관한 것으로서, 특히 "LZ1" 데이터 압축에 관한 것이다.
도 1은 본 발명을 이용한 압축 장치에 이용되는 압축 매트릭스의 개략적인 블록도이다.
도 2는 도 1의 압축 장치의 압축 유닛을 상세하게 나타낸 개략적인 블록도이다.
도 3은 도 1의 압축 장치의 압축 동작을 나타낸 개략도이다.
도 4는 도 1의 압축 장치에 이용되는 압축 유닛 매트릭스의 특정 구현예를 상세하게 나타낸 개략적인 블록도이다.
도 5는 본 발명에 이용하여 달성되는 게이트 총수 감축을 나타낸 개략적인블록도이다.
도 6은 본 발명에 이용 가능한 4식 분할의 일례를 나타낸 개략적인 블록도이다.
도 7은 본 발명에 이용 가능한 지연 단축을 나타낸 개략적인 블록도이다.
도 8은 본 발명에 이용 가능한 룩-어헤드 캐리의 생성을 나타낸 개략적인 블록도이다.
도 9는 본 발명에서 발생 가능한 "캐리 룩-어헤드 비관론"의 일례를 나타낸 개략적인 블록도이다.
도 10은 본 발명에서 달성 가능한 압축 효율성의 회복을 나타낸 신호 타이밍도이다.
본 발명의 제1 형태에 따라, 청구항 1에서 청구하는 바와 같은 데이터 문자열을 LZ1 압축하기 위한 비교 매트릭스에 이용되는 회로가 제공된다.
본 발명의 제2 형태에 따라, 청구항 7에 청구하는 바와 같은 데이터 문자열 LZ1 압축 장치가 제공된다.
본 발명의 제3 형태에 따라, 청구항 8에서 청구하는 바와 같은 데이터 문자열을 LZ1 압축하기 위한 비교 매트릭스에 이용되는 방법이 제공된다.
본 발명의 제4 형태에 따라, 청구항 14에 청구하는 바와 같은 데이터 문자열 LZ1 압축 방법이 제공된다.
이제, 첨부한 도면을 참조하여, 단지 예로서, 본 발명을 구체화한 데이터 압축 방법 및 장치에 대해서 설명한다.
다음의 바람직한 실시예는 IBM의 것으로서 "IBMLZ1"로 알려진 변형 LZ1의 환경 하에서 설명하겠지만, 이 기술은 모든 버전의 LZ1 알고리즘에 적용 가능하다는 것을 알아야 한다. 이 기술은 1 사이클 당 임의수의 바이트로 확장 가능하거나 어떠한 길이의 히스토리 버퍼로도 확장 가능하나, 512 바이트의 히스토리 버퍼를 갖는 1 사이클 당 12 바이트 디자인을 이용하여 설명할 것이다.
이제 도 1을 참조해 보면, 압축 장치(100)는 두 그룹(L1, L2)의 512 바이트 래치(110, 120), 한 그룹의 512 캐리(carry) 래치(130), 12 바이트 입력 버퍼(140), MAX 기능/우선 순위 인코더(MFPE)(150), 토큰 인코더(160), 그리고 비교 유닛(200)의 512X12 매트릭스 어레이(170)를 포함한다(상세한 설명은 후술).
L2 래치(120)는 매트릭스(170)의 제1 로우에 있는 512개의 비교 유닛과, 매트릭스의 하위 로우마다 우측으로 한 유닛만큼 연속적으로 대각선 방향으로 배치된 비교 유닛에 각각 결합된다(상세한 설명은 후술). L1 래치(110) 및 관련 캐리 래치(130)는 매트릭스(170)의 최하위 로우에 있는 512개의 비교 유닛에 각각 결합된다. 12 바이트의 입력 버퍼(140)는 매트릭스(170)의 가장 좌측 컬럼에 있는 12개의 로우의 비교 유닛에 각각 결합된다. MAX 기능/우선 순위 인코더(150) 및 토큰 인코더(160)는 매트릭스(170)에 있는 12개의 로우의 비교 유닛에 결합된다.
12 입력 바이트를 전체 히스토리 버퍼와 비교하여 일치하는 것이 있는지를 탐색해야 한다. 그러나, 일부 입력 바이트는 그 자체로 "히스토리"의 일부를 구성한다. 12 바이트 입력 버퍼는 모든 바이트가 1 사이클에 입력되어도 각 바이트가 연대순으로 되어 있는 것으로 가정해야 한다. 그러므로, 마치 "가장 오래된" 바이트가 먼저 처리되는 것처럼, 입력 버퍼의 일단은 "가장 최근"의 것으로, 그 타단은 "가장 오래된" 것으로 간주된다. 각 바이트는 입력 버퍼에서 "더 오래된" 것들을 히스토리의 일부로 간주하고 이에 따라서 비교해야 한다.
입력 바이트를 히스토리 버퍼에 있는 바이트 및 입력 버퍼에 있는 더 오래된 바이트와 비교하는 방법이 도 1에 나타나 있다. 동도면의 좌측에 있는 입력 버퍼(140)를 고려해 볼 때, 종래의 방법(한번에 1 바이트씩)으로 처리한다면, 상위 바이트가 먼저 입력되고 하위 바이트가 나중에 입력된다. 그러나, 본 구현예에 있어서는 모든 바이트가 동시에 입력된다. 알 수 있는 바와 같이, 입력 버퍼의 출력(모두 12 입력 바이트)은 매트릭스(170)의 각 로우에 있는 모든 비교 유닛(200)의 입력에 접속된다. 각 클록 사이클마다 히스토리 버퍼의 내용(모두 512 바이트)이 아래로 제공되어 입력 버퍼의 제1(가장 오래된) 바이트와 비교된 후, 대각선 방향으로 아래로 가로질러 제공되어 입력 버퍼의 가장 최근의 바이트와 비교된다.
히스토리 버퍼의 모든 바이트를 한번에 이용할 수 있어야 하므로, 종래의 RAM을 히스토리 버퍼로 이용할 수 없다. 본 구현예에 있어서 히스토리 버퍼는 레벨 센서티브 스캔 디자인(level sensitive scan design : LSSD) L1-L2 쌍과 같이 구성된 레지스터로 구성된다. 각 클록 사이클의 끝에서, 12 입력 바이트는 히스토리 버퍼로 이동되고, 히스토리 버퍼의 이전의 내용은 12 바이트씩 (도 1에 도시한 바와 같이 우측으로) 이동되며, 가장 오래된 12 바이트는 폐기된다.
도 1에 자른 사각형으로 표시한 비교 유닛(200)은 이 디자인의 기본 요소이다. 비교 유닛에 대한 확대도를 도 2에 도시하였다. 각 블록의 기능은 두 입력 바이트의 값을 비교하여, 일치하는 바이트의 카운트를 계수하여, 얻은 일치를 제어 로직에 보고하는 것이다.
매트릭스(170)에 있는 비교 유닛(200)은 그 로우에서의 입력 버퍼 바이트 위치로부터의 바이트값과, 좌측과 상측의 대각선 방향의 유닛으로부터 전달된 히스토리 버퍼 바이트값을 받아 비교하도록 구성된 바이트 비교기(210)를 포함한다. 인크리멘터(220)는 매트릭스의 동일한 컬럼에서의 바로 상측의 유닛으로부터 "카운트 인" 값을 받아 "1"씩 증분시키도록 구성된다. 셀렉터(230)는 증분된 카운트값과"0" 값을 받고 비교기(210)의 출력에 따라 어느 하나를 선택하도록 구성된다. 비교기(210)가 일치를 지시하면, 셀렉터(230)는 증분된 카운트값을 출력하고, 그렇지 않은 경우에는 "0" 값을 출력한다. 셀렉터의 출력은 "카운트 아웃" 값으로 매트릭스의 동일한 컬럼에서의 바로 하측의 유닛에 전달되고, 또한 매트릭스의 동일한 로우의 MFPE에도 전달된다. 짙은 파선으로 표시한 바와 같이, 셀렉터(210)에 입력된 바이트값은 동일한 로우에서의 바로 우측의 유닛과, 하측과 우측의 대각선 방향의 유닛에 전달된다.
도 2는 비교 유닛(200)이 비교하는 바이트 외에도, 상측의 유닛으로부터 지금까지 본 문자열의 길이를 나타내는 "카운트"와, 입력 버퍼(140)의 동일한 로우의 바이트를 입력으로 받는다. 두 입력 바이트가 일치하면, 비교 유닛은 그 카운트를 증분시켜 새로운 카운트를 그 하측의 유닛에 전달한다. 두 입력 바이트가 일치하지 않으면, 입력 카운트값에 상관없이 출력 카운트는 0으로 설정된다.
이 카운트값은 또한 각 비교 유닛의 우측으로부터 출력되어, 그 로우의 끝에 있는 MAX 기능/우선 순위 인코더(MFPE) 로직(150)에 제공된다. 압축 장치(100)의 12개의 로우마다 이들 MFPE 유닛 중 하나가 있다. MFPE의 기능은 그 로우에서 512개의 비교 유닛(200) 중에서 어떤 비교 유닛이 가장 긴 문자열(즉, 가장 큰 카운트 - MAX 기능)을 보고하였는지를 판정하고 그 로우 내에서의 위치를 인코딩하는 것이다. 가장 큰 카운트가 1 이상의 컬럼에서 나온 경우에는, MFPE는 (임의로) 가장 좌측의 값을 인코딩한다(우선 순위 인코딩 기능). 그러나, 여기서, MFPE가 생성한 값은 반드시 인코딩될 문자열인 것은 아닌데, 그 이유는 그 문자열이 그 로우의 범위를 넘어 계속될 수 있기 때문이다.
로우 12(매트릭스(170)의 최하위 로우)에 아직도 생존하는 문자열 일치는 다음 사이클까지 계속될 수 있다. 도 1의 하측에 위치한 캐리 래치(130)는 이 로우로부터 생존하는 문자열의 위치를 저장한다(도시하진 않았지만, 그 문자열의 길이 - "카운트" - 가 별도의 단일 레지스터에 저장된다). 캐리는 다음 사이클에서 제1 로우의 비교 유닛에 대한 "입력 카운트"에 제공된다. 여기서, LZ1 알고리즘이 인코딩하여 토큰에 비트수로 부가할 수 있는 문자열의 길이는 한정되어 있다(IBMLZ1의 경우, 271 문자). 최대수에 도달하면 토큰이 방출되고, 문자열을 0부터 시작해야 한다. 토큰 인코더(160)는 종래 기술에서 알려진 바와 같이 동작하므로, 그 구조와 기능에 대해서는 더 이상 상세하게 설명할 필요는 없을 것이다.
(MFPE(150)가 보고한) 각 로우마다 가장 큰 문자열 값과 그 인코딩된 위치는 토큰 인코더(TE)(160)에 제공된다. TE는 각 로우마다 보고된 길이를 검사하여, 이 12 입력 바이트에 있어서 어디의 문자열을 인코딩할 수 있는지를 판정한다. 문자열을 인코딩해야 하는 경우, TE는 토큰의 일부로서 MFPE가 보고한 위치를 문자열의 길이와 함께 이용한다. 여기서, 문자열의 길이는 긴 문자열이 1 이상의 사이클까지 걸쳐 있는 경우에는 12 이상으로 길어질 수도 있다. 이러한 경우에는, 그 카운트를 TE에 저장하여, 그 문자열이 끝날 때 코딩할 준비를 한다.
문자열이 발견되지 않거나(여기서, 단 하나의 바이트의 일치는 인코딩할 가치가 없음), 12 바이트의 일부가 일치하지 않는 경우에는, TE는 리터럴을 출력해야 한다. 이러한 경우에, TE는 입력 버퍼(140)로부터 직접 데이터를 취한다.
도 3은 압축 동작(300)의 속사(snapshot)이다. 이전 문장이 입력으로 사용하고, 편의상 5 입력 바이트 및 27 히스토리 버퍼 바이트만을 도시하였다. (컬럼 310, 320, 330, 340, 350에 있는) 검은 원은 일치 검출 위치를 나타낸다. 현재의 입력 바이트 "ion"에서 유용한 문자열 일치는 컬럼 320에서 볼 수 있다. 로우에서의 컬럼 320의 위치가 인코딩을 위해 전송할 위치이다.
가능한 비교 유닛의 구현예(400)를 도 4에 도시하였다. 비교 유닛(400)(도시한 바와 같이 매트릭스(170)의 로우 3의 한 유닛)은 전술한 바와 같이 비교할 두 바이트값을 받는 비교기(410)를 포함한다. 3개의 AND 게이트(422, 424, 426)의 각각은 그 2개의 입력 중 하나가 비교기(410)의 출력을 수신하도록 접속되고, 다른 하나의 입력은 동일한 컬럼에서의 바로 상측의 비교 유닛으로부터의 3개의 비트선(3 비트 "입력 카운트" 값을 전달) 중 하나에 접속된다. AND 게이트(422, 424, 426)의 출력은 비교기(410)의 출력과 함께(4 비트 "출력 카운트" 값을 전달), 동일한 컬럼에서의 바로 하측의 비교 유닛에 접속된다. 가장 좌측 3개의 "출력 카운트" 비트선은 3개의 AND 게이트(432, 434, 436)의 입력에 각각 접속된다. AND 게이트(432, 434, 436)의 출력은 AND 게이트(426)의 출력과 함께 4 입력 OR 게이트(440)의 입력에 접속된다.
OR 게이트(440)의 출력은 (매트릭스(170)의 로우 3에 있는 다른 비교 유닛(400)의 출력과 함께) MFPE(500) 내의 512 입력 우선 순위 인코더(510)의 입력에 접속된다. 또한, AND 게이트(422, 424, 426)의 출력은 (매트릭스(170)의 로우 3에 있는 다른 비교 유닛(400)의 AND 게이트의 출력과 함께) MFPE(500) 내의 512 입력OR 게이트(522, 524, 526)의 입력에 각각 접속된다. OR 게이트(522, 524, 526)의 출력은 매트릭스(170)의 로우 3에 있는 각 비교 유닛(400)의 AND 게이트(432, 434, 436)의 입력에 반전 접속된다.
비교기(410)는 전술한 비교 유닛(200) 내의 비교기(210)와 동일하나, 비교 유닛(400)에서는 N 비트 벡터에 의해 "카운트"가 유지된다. 이 벡터의 비트들은 1에서 N까지 번호가 매겨지고, 카운트 "n"은 비트 1에서 n까지가 "1"인 것을 나타낸다. 벡터의 다른 비트들은 모두 "0"이다. 따라서, 카운트 0은 모든 비트가 0인 것을 나타낸다. 이것은 이 디자인에서 유용한 카운팅 방법인데, 그 이유는 다음과 같다.
1. 필요한 비트수 N은 단지 로우 번호 만큼만 필요하다(로우 1은 단지 1 비트만, 로우 12는 12 비트만 필요로 한다).
2. 단지 "1"을 채워 우측으로 이동시킴으로써, "카운트"를 쉽게 증분시킬 수 있다.
3. 모든 벡터의 각 비트를 함께 OR 연산함으로써 MAX 기능을 쉽게 구현할 수 있다.
비교 유닛 내의 적은 수의 여분의 로직(AND 게이트(432, 434, 436) 및 OR 게이트(440)의 형태)로, 우선 순위 인코더도 쉽게 만들 수 있다.
도 4의 비교 유닛(400)의 동작은 다음과 같다. 입력 카운트는 4개의 값을 표현할 수 있는 3 비트 벡터로 나타내어진다.
벡터 지시값 지시 일치
000 0
100 1 이 컬럼의 로우 2에서 일치
110 2 이 컬럼의 로우 1, 2에서 일치
111 2 이상 이 컬럼의 로우 1, 2 및 캐리에서 일치
비교기(410)가 이 컬럼의 이 로우(로우 3)에서의 일치를 검출하면, 카운트를 증분시켜, 이 유닛의 하부로부터 4 비트 벡터 "출력 카운트"를 생성한다. 상기 카운트 증분은 효과적으로 입력 벡터를 우측으로 1 비트 이동시키고, 좌측에 "1"을 부가함으로써 달성된다. 일치가 없는 경우에는, AND 게이트(422, 424, 426)가 모두 턴오프되어 "출력 카운트"가 0으로 되어 버린다.
또한 도 4에 도시한 바와 같이, 수정된 버전의 4 비트 카운트는 그 로우의 끝에 있는 MFPE(500) 내의 로직 회로(510, 522, 524, 526)에 출력된다. 이 3개의 512 입력 OR 게이트(522, 524, 526)는 이 로우에서의 최대 카운트를 판정한다(총 1 바이트만을 나타내므로 하위 비트는 이용되지 않음). 이 최대값은 이 최대 카운트에 기여하지 않은 컬럼의 비교 유닛(400) 내의 AND 게이트(432, 434, 436)에 의해서 얻은 카운트보다 작은 모든 카운트를 실격시키는 데에 이용된다. 이 최대 카운트를 보여주는 비교 유닛들은 인코더 입력에의 입후보를 선언하고, 우선 순위 인코더는 그것들의 가장 좌측의 위치를 코딩한다. 최하위 로우의 비교 유닛 내의 OR 게이트(440)의 "win" 출력은 다음 사이클에서 저장될 512 "캐리" 비트를 포함한다.
이제까지 단일 사이클에서 일어나는 모든 동작을 설명하였지만, 이 디자인은 어떤 파이프라이닝 요소를 배제하지 않는다. 중요한 것은 각 로우의 캐리를 1 사이클에서 성공적으로 저장하여 다음 사이클의 계산에 포함시킬 준비를 해야 한다는 점이다.
임계 타이밍 경로(다음 사이클에서 유효한 캐리를 생성)는 이 경우에 12 AND 게이트(12 일치 열로부터), 512 입력 OR 게이트(몇몇 게이트는 직렬), 캐리를 위한 2 이상의 AND 게이트로 구성된다.
따라서, 총 20 게이트 지연이 이 디자인의 최대 동작 주파수를 결정한다. 12 AND 게이트 지연은 이것이 게이트 총수에 부가되더라도 룩-어헤드(look-ahead) 기술을 이용하여 줄일 수 있다.
매트릭스(170)의 하위 로우에 있는 비교 유닛(400)이 비례해서 더 많은 게이트를 갖게 되고, 게이트의 총수는 1 사이클 당 처리되는 바이트수의 자승으로 증가한다는 것을 알 수 있다.
게이트 총수 감축
게이트의 총수는 1 사이클 당 처리되는 바이트수(N)의 자승으로 증가하므로(공식 N(N+1)/2에 따름), 게이트 총수는 1 사이클 당 다수(예컨대 5 이상)의 바이트를 처리하는 경우에는 실현 불가능할 수도 있다. 이러한 실현 불가능성을 줄이기 위해서, 게이트 총수를 줄이는 또 다른 기술도 이용 가능하다.
이제, 도 5a를 참조해 보면, 비교 매트릭스(170)의 각 컬럼은 상부로 갈수록 수가 적어지는 게이트들의 "삼각형"(600)으로 간주될 수 있다. 삼각형의 하부에서의 출력은 가장 오래 생존한 문자열을 나타내는 "캐리"이며, 이 캐리는 다음 사이클에 저장된다. 삼각형의 면적은 사용되는 게이트수에 비례한다.
이제, 도 5b를 참조해 보면, 각 삼각형을 더 작은 삼각형(610, 620, 630)으로 분할함으로써 효율성을 더 높일 수 있는데, 그에 따라 장치(640)의 총면적이 작아진다. 도 5a의 단일 삼각형을 도 5b의 3개의 삼각형(610, 620, 630)으로 분할한 결과, 게이트수가 78에서 30으로 줄어든다.
각각의 더 작은 삼각형은 아래의 다음 삼각형에 입력되는 자신의 "캐리"를 생성해야 한다. 이 캐리는 가장 긴 현재의 문자열을 나타내는 모든 컬럼에 대해 유효하며, 따라서 MAX 기능/우선 순위 인코더(MF/PE 로직)로부터 피드백을 요구한다. 그러므로, 각 캐리 생성은 특별한 지연을 일으키고, 이들을 합한 총지연이 상기 디자인을 분할하여 절감할 수 있는 삼각형수를 제한한다.
더 상세한 일례를 도 6에 도시하였다. 최초 디자인(도 5a에 도시한 삼각형 게이트 장치에 대응)은 도 6a의 좌측과 하측에 도시한 바와 같이, 문자열 누적 로직용으로 12*(12+1)/2 또는 78개의 게이트를 이용하여 1 사이클 당 12 바이트를 처리하는 것으로 하였다. 캐리가 통과하여 출력되는 통과 시간은 대략 (12+3)=13 게이트 지연이다. 감축 디자인(이것의 4분과 1이 도 6b의 우측 상단에 파선 박스에 도시되어 있음)은 4*3*(3+1)/2 또는 24개의 게이트를 이용하여 통과 시간이 4*(3+3)=24 게이트 지연인 1 사이클 당 3 바이트 비교기 4개로 분할된다(도 5b의 장치의 경우는 3개).
지연 단축
도 6b의 장치에서 게이트 총수가 상당히 줄어들었지만, 그에 따라 증가된 지연은 필요한 클록 시간에 대해서 너무 길 수도 있다. 이것을 중화시키기 위해서, 어떤 파이프라이닝도 채용 가능하다.
도 7a에는 도 6b를 간략화한 형태로서, 래치(710)와 4개의 게이트 단 또는삼각형(720, 730, 740, 750)이 도시되어 있다. 도 7b는 도 6b의 디자인을 1 사이클 당 지연을 단축시켜 개선하는 방법을 도시하고 있다. 도 7b의 장치에 있어서, 도 7a의 캐리 체인이 둘로 나누어져, 단(730)으로부터 전반부 캐리(B)의 결과는 (래치(760)에서) 래치되어 제2 사이클(D)을 대비한다. 제2 사이클에서, 래치된 캐리는 캐리 체인의 하반부 아래에 전달되고, 전반부 캐리는 다음 사이클에 처리된다. 따라서, 필요한 사이클 시간이 반으로 단축된다.
그러나, 캐리 체인의 전반부가 이전 사이클에서 완전한 캐리를 입력(A)으로서 요구한다는 점에서 복잡한 면이 있다. 그것은 도 7a의 장치로부터 생성되는 것과 동일한 값을 요구한다. 그러나 이전 사이클에서는 전체 캐리를 생성하기에는 너무 짧기 때문에 단지 캐리 체인의 전반부로부터 캐리를 생성한다.
이를 해결하기 위해서는, 캐리 체인의 전반부는 전체 체인에 대한 캐리를 생성하는 캐리 룩-어헤드(C)를 생성해야 한다. 주의할 점은 컬럼 데이터를 모두 처리할 필요가 없다(래치(760)의 우측에 있는 로직에 의해서 제2 사이클에 달성된다)는 점이다. 단지 캐리(최대 생존 문자열을 갖는 컬럼 또는 컬럼들)를 제공하기만 하면 된다. 이 캐리는 제2 게이트 세트가 제공하는 전체 처리보다 적은 게이트에서 생성 가능하다. 이 캐리 룩-어헤드(C)는 단(770)에서 생성된다.
캐리 룩-어헤드
도 8은 이 룩-어헤드 캐리 생성 방법을 도시하고 있다. 6개의 하위 비교기의 출력(단 740, 750에서 각각 3개씩)은 상위 블록으로부터 출력된 캐리(도 7b의 신호 'B')와 함께 이용된다. 도 6a의 하측에 있는 캐리 비교기와 유사한 로직(810)은 제12 로우에서 최대 생존 문자열을 판정한다. 이것이 다음 사이클에 이용하기에 적합한 캐리이다.
캐리 룩-어헤드 비관론
그러나, 도 8의 캐리 룩-어헤드 로직에 의해 생성된 캐리는 유효한 것이지만, 그것이 최적의 압축을 제공하지 않을 수도 있다. 그것은 (시간 제약에 따라 필요한) 로우 12에만 집중되어 있기 때문에, 어떤 다른 문자열 후보를 간과할 수도 있다.
도 9는 이러한 발생 가능한 문제의 일례를 도시하고 있다. 이 도면은 6개의 하위 로우에서 일어나는 3개의 문자열(910, 920, 930)을 도시하고 있다. 길이가 4인 가장 좌측의 문자열(910)은 길이가 3인 가장 우측의 문자열(930)보다 길기 때문에 룩-어헤드 경쟁에서 이겼다. 그러나, (룩-어헤드로 볼 수 없는) 길이 3인 중간의 문자열(920)은 3개의 상위 블록으로부터 캐리를 생성하게 되고, 이 때 가장 좌측의 문자열(910)을 가리게 된다. 상위 블록으로부터의 캐리가 없다면, 가장 좌측의 문자열(910)은 다음 라인에서 시작하게 되고, 그 길이는 3으로 단축된다. 최종 라인 상에 생존한 양쪽의 문자열(910, 930)은 캐리를 생성하게 되고, 가장 우측의 문자열(930)은 결국 더 긴 일치를 쉽게 제공할 수 있다.
(가장 우측의 문자열(930)이 최종 승자가 아닐 수도 있다는 가정 하에) 이 '비관론'의 결론은 더 적은 수의 캐리가 저장된다는 것이고, 이것은 다음 사이클에서 효율적인 길이로 될 수 있는 문자열을 발견하지 못한다는 것을 의미한다. 이것은 에러를 일으키지는 않고, 인코더의 압축 효율성을 약간 저하시킬 수 있다.
그러나, 성능의 일부를 희생하면 압축 효율성을 회복할 수 있다. 룩-어헤드 캐리 생성기는 항상 전체 디코드와 동일한 수 또는 보다 적은 수의 캐리를 생성할 것이다. 이 전체 디코드의 결과는 제2 사이클에 알려지는데, 정상적으로는 전속력의 동작에 대해서 너무 느리다. 룩-어헤드 캐리의 래치된 값을 제2 사이클에서 출력된 전체 캐리와 비교함으로써, 제1 사이클의 캐리가 비효율적이었는지의 여부를 판정할 수 있다. 그것이 비효율적이었다면, 사이클을 반복하여 새로운 캐리를 설정한다.
도 10은 이러한 동작 방법의 일례를 도시하고 있다. 이 도면은 도 7b의 5개의 지점(A, B, C, D, E)에서의 신호를 여러 단에서 생성된 캐리로서 도시하고 있다. 신호 상의 번호는 특정 캐리가 생성된 입력 사이클을 나타낸다. 물음표는 생성된 캐리가 정확하지 않을 수 있다, 즉 너무 비관적일 수 있다는 것을 나타낸다.
제1 사이클에서, 래치된 룩-어헤드는 입력 번호 1 동안에 생성되었다. 이 사이클 동안에, 상위 블록은 캐리(B상의 2)를 생성하고 나중에 룩-어헤드 캐리(C상의 2?)가 생성된다. 이 시점에서는 룩-어헤드의 품질이 불확실하므로, '?'이다. 한편, (D)는 입력 번호 1로부터 래치된 캐리를 갖고, (E)에서 데이터의 하반부에 대한 캐리를 생성한다.
제2 사이클에서, (A)는 래치된 불확실한 룩-어헤드 캐리를 갖는다. (B)와 (C)에서 생성된 캐리는 모두 (A), (D), (E)에 의존하므로 불확실할 것이다(3?로 표시). 그러나, 1 사이클이 지연되었지만 전체 체인으로부터 유도되었기 때문에 양호한 캐리를 보여준다.
제2 사이클의 끝(1000'으로 표시)에서, (A)에서의 래치된 룩-어헤드 캐리는 (E)로부터의 확실한 캐리와 비교된다. 이 예에서와 같이, 양자가 동일하여, 래치된 룩-어헤드 캐리(A상의 2)가 양호하고, 따라서 그것으로부터 유도된 캐리(B상의 3)도 양호한 것으로 보여진다. 주의할 점은 이 사이클에서 생성된 룩-어헤드(C상의 3?)는 아직 확실한 것으로 믿을 수 없기 때문에(캐리값이 갱신될 가능성이 있음), 다음 사이클에서 그 래치된 버전(A)이 여전히 '?'로 표시된다는 점이다.
제3 사이클에서는 이 사이클의 끝(1000''으로 표시)에서 (A)와 (E)를 비교할 수 없다는 것을 제외하고는 모두 전술한 바와 같다. 래치된 룩-어헤드 캐리(3?)는 너무 비관적이었다. 그래서 그것으로부터 유도된 결과(2개의 4?)를 폐기하고, (C)보다는 (E)로부터 (A)가 래치된다. 이 사이클을 반복하여(기지의 양호한 캐리를 가지고) 새로운 캐리를 생성한다.
룩-어헤드 캐리가 너무 비관적인 드문 경우(예컨대 도 9의 경우)에 추가되는 특별한 사이클은 전체 효율성을 회복시킨다는 것을 알 수 있다. 이러한 체크가 없는 압축 동작도 여전히 정확하지만(정확하게 압축 해제되지만), 압축비를 크게 할 수 없다는 것을 알아야 한다. 따라서, 속도와 고압축비 중 원하는 것에 따라서 상기 기술의 적용 여부를 선택해야 한다.
요약
요약하자면, 본 발명은 이전 LZ1 다중 바이트 압축 엔진을 개선하여, 1 사이클 당 소정수의 바이트를 처리하는 데에 필요한 게이트의 수를 대폭 줄일 수 있다는 것이다. 특별한 지연에 대한 보상을 위해서 파이프라이닝을 채용할 수 있는데,이것은 룩-어헤드 캐리 생성기를 필요로 한다. 룩-어헤드 캐리의 결점은 성능의 일부를 희생하여 개선할 수 있다.
또한, 전술한 장치 및 방법은 통상적으로 하드웨어, 예컨대 ASIC과 같은 집적 회로(도시 생략)의 형태로 구현된다는 것을 알아야 한다.
전술한 데이터 압축 기술은 저장 및 통신 용례 등 폭넓은 분야에 이용될 수 있다는 것을 알아야 한다.

Claims (16)

  1. 입력 버퍼(140)에 유지된 바이트를 히스토리 버퍼(110, 120)에 유지된 바이트와 비교함으로써 데이터 문자열을 LZ1 압축하기 위한 비교 매트릭스(170)에 이용되는 회로(640)에 있어서,
    직렬로 결합된 복수의 로직 게이트 단(720, 730, 740, 750)을 포함하며, 상기 각 로직 게이트 단은 상기 유닛의 출력 및 다른 로직 게이트 단 중 하나에 전달되는 캐리값을 생성하도록 구성되고, 상기 복수의 로직 게이트 단의 단수와 상기 각 로직 게이트 단에 있는 로직 게이트수를 곱한 값은 단일 로직 회로 단을 갖는 등가 회로에 필요한 로직 게이트수보다 적은 것인 회로.
  2. 제1항에 있어서, 상기 회로의 입력에 결합되어 다른 캐리값 생성 회로로부터 캐리값을 받는 입력 래치(710)를 더 포함하는 회로.
  3. 제1항 또는 제2항에 있어서, 상기 복수의 로직 게이트 단 중 소정수의 로직 게이트 단에 결합되어 룩-어헤드 캐리값을 생성하는 수단(770)을 더 포함하는 회로.
  4. 제3항에 있어서, 룩-어헤드 캐리값을 생성하는 상기 수단(770)에 결합된 로직 게이트 단으로부터 상기 캐리값을 받도록 결합된 중간 래치(760)를 더 포함하는회로.
  5. 제3항 또는 제4항에 있어서, 룩-어헤드 캐리값을 생성하는 상기 수단(770)은 로직 게이트(800)를 통해 비교기의 출력에 결합된 로직 수단(810)을 포함하는 것인 회로.
  6. 제3항 내지 제5항 중 어느 한 항에 있어서, 상기 회로의 출력에서 생성된 캐리값을 이전에 생성된 캐리 룩-어헤드 값과 비교하여 상기 캐리값의 갱신 가능 여부를 판정하는 비교 수단을 더 포함하는 회로.
  7. 데이터 문자열을 LZ1 압축하는 장치(100)에 있어서,
    상기 데이터 문자열의 제1 바이트 시퀀스를 유지하는 입력 버퍼(140)와;
    상기 데이터 문자열의 제2 바이트 시퀀스를 유지하는 히스토리 버퍼(110, 120)와;
    상기 입력 버퍼와 상기 히스토리 버퍼에 결합되고, 복수의 비교 유닛(400)의 로우 및 컬럼을 구비하여, 상기 입력 버퍼에 유지된 바이트를 상기 히스토리 버퍼에 유지된 바이트와 비교하는 비교 매트릭스(170)로서, 상기 히스토리 버퍼의 바이트는 상기 비교 매트릭스 내의 대각선 방향으로 배치된 비교 유닛에 결합되는 것인 비교 매트릭스와;
    각 로우마다 그 로우의 비교 유닛 및 동일한 컬럼의 이전 비교 유닛에서 최대수의 연속 바이트 일치가 일어난 컬럼을 검출하는 검출 수단(150)과;
    상기 검출 수단이 검출한 일치 바이트 시퀀스를 토큰으로서 인코딩하는 수단(160)
    을 포함하며,
    상기 비교 유닛은 청구항 제1항 내지 제6항 중 어느 한 항에 따른 회로(640)를 포함하는 것인 데이터 문자열 LZ1 압축 장치.
  8. 입력 버퍼(140)에 유지된 바이트를 히스토리 버퍼(110, 120)에 유지된 바이트와 비교함으로써 데이터 문자열을 LZ1 압축하기 위한 비교 매트릭스(170)에 이용되는 방법에 있어서,
    직렬로 결합된 복수의 로직 게이트 단(720, 730, 740, 750)을 제공하는 단계를 포함하며, 상기 각 로직 게이트 단은 상기 유닛의 출력 및 다른 로직 게이트 단 중 하나에 전달되는 캐리값을 생성하고, 상기 복수의 로직 게이트 단의 단수와 상기 각 로직 게이트 단에 있는 로직 게이트수를 곱한 값은 단일 로직 회로 단을 갖는 등가 회로에 필요한 로직 게이트수보다 적은 것인 방법.
  9. 제8항에 있어서, 상기 유닛의 입력에 결합되어 다른 캐리값 생성 유닛으로부터 캐리값을 받는 입력 래치(710)를 제공하는 단계를 더 포함하는 방법.
  10. 제8항 또는 제9항에 있어서, 상기 복수의 로직 게이트 단 중 소정수의 로직게이트 단에 결합되어 룩-어헤드 캐리값을 생성하는 수단(770)을 제공하는 단계를 더 포함하는 방법.
  11. 제10항에 있어서, 룩-어헤드 캐리값을 생성하는 상기 수단(770)에 결합된 로직 게이트 단으로부터 상기 캐리값을 받도록 결합된 중간 래치(760)를 제공하는 단계를 더 포함하는 방법.
  12. 제10항 또는 제11항에 있어서, 룩-어헤드 캐리값을 생성하는 수단(770)을 제공하는 단계는 상기 복수의 로직 게이트 단 중 상기 소정수의 로직 게이트 단의 비교기의 출력에 결합되고 상기 비교 매트릭스의 다른 컬럼의 비교 유닛에 결합된 로직 수단(810)을 제공하는 단계를 포함하는 것인 방법.
  13. 제10항 내지 제12항 중 어느 한 항에 있어서, 상기 유닛의 출력에서 생성된 캐리값을 이전에 생성된 캐리 룩-어헤드 값과 비교하여 상기 캐리값의 갱신 가능 여부를 판정하는 단계를 더 포함하는 방법.
  14. 데이터 문자열을 LZ1 압축하는 방법(300)에 있어서,
    상기 데이터 문자열의 제1 바이트 시퀀스를 입력 버퍼에 유지하는 단계(140)와;
    상기 데이터 문자열의 제2 바이트 시퀀스를 히스토리 버퍼에 유지하는 단계(110, 120)와;
    상기 입력 버퍼와 상기 히스토리 버퍼에 결합되고, 복수의 비교 유닛(400)의 로우 및 컬럼을 구비하는 비교 매트릭스에서 상기 입력 버퍼에 유지된 바이트를 상기 히스토리 버퍼에 유지된 바이트와 비교하는 단계(170)로서, 상기 히스토리 버퍼의 바이트는 상기 비교 매트릭스 내의 대각선 방향으로 배치된 비교 유닛에 결합되는 것인 비교 단계와;
    각 로우마다 그 로우의 비교 유닛 및 동일한 컬럼의 이전 비교 유닛에서 최대수의 연속 바이트 일치가 일어난 컬럼을 검출하는 단계(150)와;
    상기 검출 단계(150)에서 검출된 일치 바이트 시퀀스를 토큰으로서 인코딩하는 단계(160)
    를 포함하며,
    상기 비교 단계(170)는 청구항 제8항 내지 제13항 중 어느 한 항에 따른 방법을 수행하는 단계를 포함하는 것인 데이터 문자열 LZ1 압축 방법.
  15. 청구항 제1항 내지 제6항 중 어느 한 항에 기재한 회로 또는 청구항 제7항에 기재한 장치를 포함하는 집적 회로.
  16. 제15항에 있어서, 상기 집적 회로는 주문형 반도체(ASIC)인 것인 집적 회로.
KR1020047017466A 2002-05-09 2003-01-30 데이터 압축용 회로 및 방법 KR100702453B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB0210602.9 2002-05-09
GBGB0210602.9A GB0210602D0 (en) 2002-05-09 2002-05-09 Circuit and method for use in data compression
PCT/GB2003/000388 WO2003096544A1 (en) 2002-05-09 2003-01-30 Circuit and method for use in data compression

Publications (2)

Publication Number Publication Date
KR20040104676A true KR20040104676A (ko) 2004-12-10
KR100702453B1 KR100702453B1 (ko) 2007-04-04

Family

ID=9936340

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020047017466A KR100702453B1 (ko) 2002-05-09 2003-01-30 데이터 압축용 회로 및 방법

Country Status (8)

Country Link
US (1) US7030787B2 (ko)
EP (1) EP1508200B1 (ko)
JP (1) JP3922386B2 (ko)
KR (1) KR100702453B1 (ko)
CN (1) CN1726645B (ko)
AU (1) AU2003215713A1 (ko)
GB (1) GB0210602D0 (ko)
WO (1) WO2003096544A1 (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB0210604D0 (en) 2002-05-09 2002-06-19 Ibm Method and arrangement for data compression
GB0315152D0 (en) 2003-06-28 2003-08-06 Ibm Data parsing and tokenizing apparatus,method and program
JP5251799B2 (ja) 2009-09-15 2013-07-31 株式会社リコー データ処理装置およびデータ処理方法
JP6003059B2 (ja) 2012-01-05 2016-10-05 株式会社リコー 画像処理装置および画像処理方法、ならびに、画像形成装置
US9275735B2 (en) 2014-01-06 2016-03-01 International Business Machines Corporation Array organization and architecture to perform range-match operations with content addressable memory (CAM) circuits

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4325085A (en) * 1980-06-09 1982-04-13 Digital Communications Corporation Method and apparatus for adaptive facsimile compression using a two dimensional maximum likelihood predictor
US4816814A (en) * 1987-02-12 1989-03-28 International Business Machines Corporation Vector generator with direction independent drawing speed for all-point-addressable raster displays
US5440753A (en) * 1992-11-13 1995-08-08 Motorola, Inc. Variable length string matcher
GB2324917B (en) * 1997-05-01 2001-03-14 Plessey Semiconductors Ltd Frequency synthesiser
US6407736B1 (en) * 1999-06-18 2002-06-18 Interval Research Corporation Deferred scanline conversion architecture

Also Published As

Publication number Publication date
CN1726645B (zh) 2011-05-04
GB0210602D0 (en) 2002-06-19
US20050162287A1 (en) 2005-07-28
EP1508200B1 (en) 2012-07-04
EP1508200A1 (en) 2005-02-23
JP2006515121A (ja) 2006-05-18
US7030787B2 (en) 2006-04-18
JP3922386B2 (ja) 2007-05-30
KR100702453B1 (ko) 2007-04-04
AU2003215713A1 (en) 2003-11-11
WO2003096544A1 (en) 2003-11-20
CN1726645A (zh) 2006-01-25

Similar Documents

Publication Publication Date Title
KR100702428B1 (ko) 데이터 압축 방법 및 회로
US7403136B2 (en) Block data compression system, comprising a compression device and a decompression device and method for rapid block data compression with multi-byte search
US7095343B2 (en) code compression algorithms and architectures for embedded systems
US20010051941A1 (en) Searching method of block sorting lossless compressed data, and encoding method suitable for searching data in block sorting lossless compressed data
US7872598B2 (en) Accelerated decompression
WO1993003548A1 (en) Method and apparatus for the compression and decompression of data using lempel-ziv based techniques
US7109895B1 (en) High performance Lempel Ziv compression architecture
KR100702453B1 (ko) 데이터 압축용 회로 및 방법
US7500103B2 (en) Data parsing and tokenizing apparatus, method and program
US9344113B1 (en) Lempel Ziv compression architecture
Yokoo Data compression using a sort-based context similarity measure
Nunez‐Yanez et al. Gigabyte per second streaming lossless data compression hardware based on a configurable variable-geometry CAM dictionary
US11374593B2 (en) Hardware complexity reduction technique for successive cancellation list decoders
Nadarajan et al. Analysis of string matching compression algorithms
Pasumarthi et al. EHTC: An Enhanced Huffman Tree Coding Algorithm and its FPGA Implementation
Kalamani et al. Test Data Compression Using a Hybrid of Bitmask Dictionary and 2 n Pattern Run-length Coding Methods
Choudhari et al. Hardware Based Data Compression using Lempel-Ziv-Welch Algorithm
Lee et al. A novel PE-based architecture for lossless LZ compression
Núñez et al. Gigabyte per Second Streaming Lossless Data Compression Hardware Based on a Configurable Variable-Geometry CAM Dictionary
Miller et al. Variations on a theme by Ziv and Lempel (data compression)
Chen et al. A novel VLSI design for Ziv-Lempel data compression
Salomon et al. Robust VL Codes
Mohey et al. Design and Implementation of Lempel-Ziv Data Compression using FPGA
JPH05236284A (ja) 画像データ圧縮復元方式
Klein et al. Practical Fixed Length Lempel Ziv Coding.

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
FPAY Annual fee payment

Payment date: 20130304

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20140217

Year of fee payment: 8

LAPS Lapse due to unpaid annual fee