KR20220054651A - 다중 심볼 디코더 - Google Patents

다중 심볼 디코더 Download PDF

Info

Publication number
KR20220054651A
KR20220054651A KR1020227010462A KR20227010462A KR20220054651A KR 20220054651 A KR20220054651 A KR 20220054651A KR 1020227010462 A KR1020227010462 A KR 1020227010462A KR 20227010462 A KR20227010462 A KR 20227010462A KR 20220054651 A KR20220054651 A KR 20220054651A
Authority
KR
South Korea
Prior art keywords
symbol
compressed data
decoder
resolver
decoding
Prior art date
Application number
KR1020227010462A
Other languages
English (en)
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 KR20220054651A publication Critical patent/KR20220054651A/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/4093Variable length to variable length coding
    • 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
    • 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/4087Encoding of a tuple of symbols
    • 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/6005Decoder 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
    • H03M7/6023Parallelization

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

압축된 데이터를 압축 해제하기 위한 전자 디바이스는 심볼 디코더, 및 다수의 로컬 심볼 디코더들 및 심볼 선택기를 갖는 제2 심볼 리졸버를 갖는 디코딩 서브시스템을 포함한다. 심볼 디코더는 압축된 데이터의 블록에서 심볼이 이용 가능한 제1 코드로부터 제1 심볼을 디코딩하고, 코드의 길이를 제2 심볼 리졸버로 전달한다. 각 로컬 심볼 디코더는, 심볼 디코더에서 제1 심볼의 디코딩과 실질적으로 병렬로, 압축된 데이터의 블록의 각 서브블록에서 심볼이 이용 가능한 제1 코드로부터 각 심볼을 디코딩한다. 제2 심볼 리졸버는, 심볼 디코더로부터 수신되는 길이에 기초하여, 로컬 심볼 디코더들로부터의 각 심볼들 중 하나를 제2 심볼로서 선택한다. 그 후, 디코딩 서브시스템은 제1 및 제2 심볼들을 제공한다.

Description

다중 심볼 디코더
일부 전자 디바이스들은 데이터, 이를테면 사용자 또는 시스템 파일들 , 데이터의 흐름들 또는 시퀀스들 등을 압축하기 위한 동작들을 수행한다. 전자 디바이스들은 데이터를 압축하여 데이터의 크기를 줄여 보다 효율적으로 데이터를 메모리들에 저장하거나, 데이터를 네트워크를 통해 전자 디바이스들 사이에서 전송할 수 있다. 예를 들어, 전자 디바이스들은 원본 데이터로부터 압축된 데이터를 생성할 때 데이터를 인코딩하기 위해 프리픽스 코딩 표준(예를 들어, 허프만(Huffman) 코딩, 샤논-파노(Shannon-Fano) 코딩 등)과 같은 코딩 표준을 사용할 수 있다.
데이터를 압축하는 것은 데이터를 저장하고 핸들링하는 효율을 증가시킬 수 있지만, 압축된 데이터는 많은 동작들에 사용되기 전에 압축 해제되어야 한다. 이는, 이러한 동작들이 수행될 수 있기 전에, 전자 디바이스가 압축 동들의 효과들을 역전시키기 - 그리고 이에 따라 원본 데이터를 복원 또는 재현하기 - 위한 동작들을 수행해야 한다는 것을 의미한다. 많은 전자 디바이스들에서, 압축된 데이터를 압축 해제하기 위해 소프트웨어(즉, 소프트웨어 루틴, 애플리케이션 프로그램 등)가 사용된다. 압축된 데이터를 압축 해제하기 위해 소프트웨어를 사용하는 것은 통상적으로 다수의 압축 해제 동작들 및 관련 메모리 액세스들을 수행하는 데 중앙 처리 장치(CPU)와 같은 범용 프로세서를 필요로 한다. 다수의 압축 해제 동작들 및 메모리 액세스들로 인해, 압축 해제를 위한 소프트웨어를 사용하는 것은 비효율적이다.
도 1은 일부 실시예들에 따른 압축된 데이터를 도시한 블록도를 나타낸다.
도 2는 일부 실시예들에 따른 전자 디바이스를 도시한 블록도를 나타낸다.
도 3은 일부 실시예들에 따른 디코딩 서브시스템을 도시한 블록도를 나타낸다.
도 4는 일부 실시예들에 따른 디코딩 서브시스템에서의 추가적인 심볼 리졸버를 도시한 블록도를 나타낸다.
도 5는 일부 실시예들에 따른 압축된 입력 데이터를 디코딩하기 위한 프로세스를 도시한 흐름도를 나타낸다.
도면들 및 설명 전체에 걸쳐, 동일한 참조 부호들은 동일한 도면 요소들을 나타낸다.
이하의 설명은 당업자가 설명된 실시예들을 제작하고 사용할 수 있게 하기 위해 제시되며, 특정 적용예 및 이의 요건들의 맥락에서 제공된다. 설명되는 실시예들에 대한 다양한 변형안들이 당업자들에게 용이하게 명백할 것이고, 본원에서 정의되는 일반적인 원리들은 다른 실시예들 및 적용예들에 적용될 수 있다. 따라서, 설명되는 실시예들은 제시되는 실시예들에 제한되지 않고, 본원에서 개시되는 원리들 및 특징들에 부합하는 최광의 범위가 부여되어야 한다.
용어
하기의 설명에서, 실시예들을 설명하기 위해 다양한 용어들이 사용된다. 하기는 이러한 용어들 중 하나에 대한 간략화되고 일반적인 설명이다. 이러한 용어는 명확성 및 간결성을 위해 본원에서 언급되지 않은 상당한 추가적인 양태들을 가질 수 있고, 이에 따라 본 설명은 그 용어를 제한하는 것으로 의도되지 않는다는 것을 유의한다.
기능 블록: 기능 블록은 집적 회로 소자들, 이산 회로 소자들 등과 같은 하나 이상의 상호 관련된 회로 소자들의 그룹, 집합, 및/또는 세트를 지칭한다. 회로 소자들은 회로 소자들이 적어도 하나의 속성을 공유한다는 점에서 "상호 관련"된다. 예를 들어, 상호 관련된 회로 소자들은 특정 집적 회로 칩 또는 이의 부분에 포함되거나 그 위에 제조되거나 또는 다른 방식으로 커플링될 수 있고, 소정의 기능들(계산 또는 처리 기능들, 메모리 기능들 등)의 수행에 관련될 수 있으며, 공통 제어 소자 및/또는 공통 클록 등에 의해 제어될 수 있다.. 기능 블록은 단일 회로 소자(예를 들어, 단일 집적 회로 논리 게이트)에서 수백만 또는 수십억 개의 회로 소자들(예를 들어, 집적 회로 메모리)에 이르기까지 임의의 수의 회로 소자를 포함할 수 있다.
압축된 데이터
설명되는 실시예들에서, 동작들은 압축된 데이터에 대해 그리고 압축된 데이터를 사용하여 수행된다. 일반적으로, 압축된 데이터는 원본 데이터에 대한 하나 이상의 압축, 인코딩, 및/또는 다른 동작들 - 이들은 원본 데이터의 적어도 일부가 원본 데이터를 재현하는 데 사용될 수 있는 데이터에 의해 그리고/또는 다른 값들에 의해 대체되게 함 - 의 출력이다. 설명되는 실시예들에서, 사용자 또는 시스템 파일들(예를 들어, 오디오 및/또는 비디오 파일들, 문서 파일들, 실행 가능한 파일들, 운영 체제 파일들 등), 데이터의 흐름들 또는 시퀀스들(예를 들어, 네트워크 인터페이스를 통해 수신되는 오디오 및/또는 비디오 데이터 흐름들, 데이터의 시퀀스들 등), 센서들(예를 들어, 카메라들 및/혹은 마이크로폰들, 온도계들, 진동 센서들 등)로부터 캡처되는 데이터 등을 포함하는 다양한 유형들의 데이터가 압축될 수 있다. 설명되는 실시예들에서, 데이터를 압축하는 데, 허프만 코딩, 샤논-파노 코딩 등과 같은 프리픽스 코딩 표준들을 포함하는 다수의 코딩 표준들, 알고리즘들, 또는 포맷들, 또는 이의 조합들이 사용될 수 있다.
본원에서 사용되는 용어들 "압축된 데이터" 및 "압축"은 원본 데이터의 적어도 일부가 원본 데이터를 재현하는 데 사용될 수 있는 다른 데이터에 의해 대체되게 하는 원본 데이터에 대한 동작들에 광범위하게 적용된다. 상술한 바와 같이, 이러한 동작들은 다양한 코딩 표준들, 알고리즘들, 또는 포맷들, 또는 이의 조합들을 포함한다. 따라서, 이러한 용어들은 딕셔너리 코딩 압축과 같은 동작들 및/또는 때때로 "압축" 동작들로서 간주될 수 있는 다른 동작들로만 제한되는 것으로 해석되지 않아야 한다.
도 1은 일부 실시예들에 따른 압축된 데이터를 도시한 블록도를 나타낸다. 도 1에서 알 수 있는 바와 같이, 파일, 데이터의 흐름 또는 시퀀스 등일 수 있거나 이를 포함할 수 있는 압축된 데이터(100)는 데이터(102), 헤더(104), 및 메타데이터(106)를 포함한다. 데이터(102)는 원본 데이터로부터의 비트들, 또는 "심볼들"의 시퀀스를 나타내고 대체하는 가변 길이 코드들의 시퀀스를 포함한다. 예를 들어, 01000001과 같은 원본 비트 시퀀스를 가질 수 있는 원본 데이터에서의 문자 A에 대한 심볼은 데이터(102)에서의 0과 같은 코드에 의해 표현되고 대체될 수 있다. 다시 말해서, 심볼 A가 원본 데이터에 나타난 곳에서, 심볼이 제거되고 압축된 데이터(100)에서 코드 0을 대체한다. B, C, 및 D와 같은 다른 심볼들은 각각 100, 101, 및 1100과 같은 코드들에 의해 대체될 수 있다. 일부 실시예들에서, 압축된 데이터(100)에서의 코드들은 "1600 펜실바니아 애비뉴" 또는 "토론토 랩터스"와 같은 다중 비트 심볼들(예를 들어, 다중 문자, 다중 워드 등)을 포함하는 보다 긴 길이의 심볼들을 나타내고 대체할 수 있다. 또한, 일부 실시예들에서, 코드들은, 코드들 중 어느 것도, 예를 들어, 심볼 A에 대한 코드 0이 또 다른 코드의 초기 디지트들과 매칭되지 않는다는 점에서 "프리픽스 프리(prefix free)"이다.
헤더(104)는 압축된 데이터(100)에 대한 정보, 이를테면 콘텐츠, 포맷팅, 소스 전자 디바이스, 네트워크 라우팅 값들, 및/또는 압축된 데이터의 길이 등을 설명하는 정보를 포함한다. 메타데이터(106)는 압축된 데이터(100)를 디코딩하기 위한 디코딩 레퍼런스를 생성 또는 식별하기 위한 정보(예를 들어, 허프만 테이블 등과 같은 코드 테이블), 압축된 데이터를 디코딩하기 위해 수행될 동작들의 유형들 및 배열들에 대한 정보 등과 같은 정보를 포함한다. 일부 실시예들에서, 디코딩 레퍼런스는 가변 길이 코드들로부터, 압축 해제 동작 동안 데이터(102)를 디코딩하기 위해 사용되는 원본 데이터로부터의 심볼들로 맵핑들을 포함한다.
일부 실시예들에서, 압축 동작 동안, 전자 디바이스는 원본 데이터를 판독하고, 원본 데이터에 존재하는 심볼들(즉, 비트 시퀀스들)을 결정하며, 원본 데이터에서의 심볼들의 빈도 카운트들을 기록함으로써, 원본 데이터로부터 압축된 데이터(예를 들어, 데이터(102))를 생성한다. 그 후, 전자 디바이스는 심볼들을 사용하여 코드 테이블, 트리, 리스트, 또는 다른 데이터 구조를 생성한다. 이러한 동작을 위해, 전자 디바이스는 코드 테이블, 트리, 리스트, 또는 다른 데이터 구조에서의 심볼들의 사용 및/또는 배치를 결정 - 그리고 통상적으로 최적화 - 하여, 원본 데이터에서 더 빈번하게 발생하는 심볼들에는 덜 빈번하게 발생하는 심볼보다 더 짧은 코드들(즉, 더 적은 비트들을 갖는 코드들)이 할당되도록 한다. 그 후, 전자 디바이스는 코드 테이블, 트리, 리스트, 또는 다른 데이터 구조를 사용하여 원본 데이터를 압축한다, 즉, 코드 테이블, 트리, 리스트, 또는 다른 데이터 구조를 사용하여 원본 데이터에서의 대응하는 심볼들을 대체한다. 일부 경우들에서, 코드 테이블, 트리, 또는 리스트는 개별적으로 - 그리고 아마도 상이한 데이터를 사용하여 그리고 상이한/원격 전자 디바이스에 의해 - 생성되고, 전자 디바이스에 의해 단순히 획득되고 원본 데이터를 압축하기 위해 사용된다는 점을 유의한다.
일부 실시예들에서, 압축된 데이터를 압축 해제하기 위한 압축 해제 동작 동안, 먼저 디코딩 레퍼런스(즉, 테이블, 트리, 리스트, 또는 다른 데이터 구조)가 생성되거나 획득된다. 예를 들어, 그리고 상술한 바와 같이, 디코딩 레퍼런스는 압축된 데이터에서의 메타데이터에서의 정보에 기초하여 또는 이로부터 생성될 수 있다. 또 다른 예로서, 디코딩 레퍼런스(예를 들어, 압축된 데이터에 대해 사전에 준비되는 총칭적인 디코딩 레퍼런스 등)는 메모리, 네트워크 인터페이스, 또는 또 다른 엔티티로부터 획득될 수 있다. 그 후, 디코딩 레퍼런스는 코드들이 원본 데이터를 재현하기 위해 심볼들로 대체될 수 있도록, 압축된 데이터에서의 코드들을 심볼들과 매칭시키는 데 사용된다. 코드들을 매칭할 때, 압축된 데이터에서의 다음 코드(즉, 디코딩 레퍼런스로부터의 코드와 매칭되는 압축된 데이터에서의 비트들의 다음 시퀀스)는 관련 심볼로 대체된다. 다시 말해서, 매칭이 존재하는지를 알기 위해 압축된 데이터에서의 제1 비트 단독과 디코딩 레퍼런스로부터의 1 비트 코드 간의 비교가 이루어진다. 매칭이 존재하는 경우, 제1 비트는 대응하는 심볼로 대체된다. 그렇지 않고, 제1 비트 단독에 대한 매칭이 존재하지 않는 경우, 매칭이 존재하는지를 알아보기 위해 제1 비트와 제2 비트의 조합이 디코딩 레퍼런스로부터의 두 개의 비트 코드들과 비교된다. 매칭이 존재하는 경우, 제1 비트와 제2 비트는 대응하는 심볼로 대체된다. 그렇지 않고, 매칭이 존재하지 않는 경우, 제1, 제2, 및 제3 비트의 조합이 디코딩 레퍼런스에서의 세 개의 비트 코드들과 비교되는 기타 등등이다. 일부 실시예들에서, 비교들은 병렬로(예를 들어, 매치 유닛 세트의 각각에서) 수행되고, 매칭 코드들 중에서 최단 매칭 코드들과 연관된 심볼들이 선택된다.
개요
설명되는 실시예들에서, 전자 디바이스는 압축된 데이터를 압축 해제하기 위한 동작들을 수행하는 디코딩 서브시스템 기능 블록을 포함한다. 디코딩 서브시스템은 압축된 데이터의 블록들(예를 들어, N 비트 블록들)로부터, 한 번에(예를 들어, 클록 사이클마다, 시간의 범위 등) 최대 두 개의 심볼들을 디코딩하기 위한 동작들을 수행하는 심볼 디코더 기능 블록 및 제2 심볼 리졸버 기능 블록을 포함한다. 설명된 실시예들에서, 압축된 데이터의 소정의 블록에 대해, 심볼 디코더는 압축된 데이터의 소정의 블록으로부터 제1 심볼을 디코딩한다. 제2 심볼 리졸버는 심볼 디코더에서의 디코딩과 병렬로, 압축된 데이터의 소정의 블록의 다수의 상이한 서브블록들에 대한 각 심볼들을 디코딩한다. 그 후, 제2 심볼 리졸버는 제1 심볼에 대한 코드의 길이에 기초하여 각 심볼들 중 하나를 제2 심볼로서 선택한다. 이러한 방식으로, 제2 심볼 리졸버는 제1 심볼에 뒤따를 수 있는 압축된 데이터의 소정의 블록으로부터 다수의 심볼들을 추론적으로 디코딩한 후, 제1 심볼에 대한 코드의 길이가 알려지면 추론적으로 디코딩된 심볼들 중 하나를 제2 심볼들로서 선택한다. 그 후, 디코딩 서브시스템은 제1 심볼 및 제2 심볼을 출력한다, 예를 들어, 제1 심볼 및 제2 심볼을 메모리에 저장하고, 제1 심볼 및 제2 심볼을 소비 엔티티(예를 들어, 프로세싱 서브시스템 등)에 제공하는 기타 등등이다.
동작 동안, 심볼 디코더는 상기 압축된 데이터의 블록에서 심볼이 이용 가능한 제1 코드로부터 제1 심볼을 디코딩한다. 다시 말해서, 심볼 디코더는 압축된 데이터의 블록에서의 최저 비트로부터, 비트(들)의 값들을 디코딩 레퍼런스(예를 들어, 코드 테이블, 리스트, 또는 다른 데이터 구조)로부터의 코드들과 비교하여, 코드들과 비트(들) 간에 매칭이 존재하는지를 결정한다 - 그리고 매칭이 발견될 때 코드와 연관된 심볼을 반환한다. 비교를 위해, 심볼 디코더는 매치 유닛 세트 - 이의 각각은 특정 길이(예를 들어, 1 비트, 2 비트 등)의 코드들을 압축된 데이터의 블록에서의 비트들과 매칭하고, 매칭이 발견될 때 심볼을 반환하는 기능 블록임 - 를 포함한다.
또한, 동작 동안, 제2 심볼 리졸버는 심볼 디코더에서 상기 제1 심볼을 디코딩하는 것과 실질적으로 병렬로, 로컬 심볼 디코더들 각각에서, 상기 압축된 데이터의 상기 블록의 각 서브블록에서 심볼이 이용 가능한 제1 코드로부터 각 심볼을 디코딩한다. 이러한 동작을 위해, 각 로컬 심볼 디코더에는 압축된 데이터의 블록의 상이한 비트 세트(즉, 압축된 데이터의 블록에서의 다수의 비트들 중의 상이한 이웃하는 비트 시퀀스)가 제공되고, 이로부터 각 심볼을 디코딩한다. 예를 들어, 일부 실시예들에서, 1 비트 코드들, 2 비트 코드들 및 3 비트 코드들 등이 있다고 가정하면, 로컬 심볼 디코더들 중 하나에 대한 서브블록은 압축된 데이터의 블록의 처음 비트 이외의 비트들을 포함하고, 서브블록들 중 또 다른 하나는 압축된 데이터의 블록의 처음 두 개의 비트들 이외의 비트들을 포함하는 등이다. 이러한 방식으로, 제2 심볼 리졸버는 심볼 디코더에서 디코딩되는 제1 심볼에 대한 코드에 따를 수 있는 코드 세트 각각에 대한 개별 심볼을 추론적으로 디코딩한다. 제1 심볼을 디코딩할 때, 심볼 디코더는 제1 심볼이 디코딩되었던 코드의 길이를 제2 심볼 리졸버에 전달한다. 그 후, 제2 심볼 리졸버에서의 심볼 선택기는 상기 심볼 디코더로부터 수신되는 상기 길이에 기초하여, 상기 로컬 심볼 디코더들로부터의 상기 각 심볼들 중 하나를 제2 심볼로서 선택한다. 다음으로, 제2 심볼 리졸버는 디코딩 서브시스템으로부터 출력될 제2 심볼을 제공한다.
일부 실시예들에서, 수신기 기능 블록은 압축된 데이터를 수신하고, 압축된 데이터의 블록 및 압축된 데이터의 서브블록들을 각각 심볼 디코더 및 제2 심볼 리졸버에 제공한다. 예를 들어, 수신기는 파일로부터, 데이터의 스트림으로부터(네트워크 인터페이스, 입력-출력(IO) 디바이스 등을 통해), 카메라 또는 마이크로폰 등과 같은 센서 등으로부터 압축된 데이터를 수신할 수 있다. 압축된 데이터의 제1 위치, 주소 등에서 시작하는 압축된 데이터의 처음/제1 블록 이후에, 수신기는 심볼 디코더 및 제2 심볼 리졸버에서 디코딩된 코드들의 길이에 기초하여, 압축된 데이터의 다음 블록과 압축된 데이터의 서브블록들을 길이에 따라 결정한다. 예를 들어, 심볼 디코더 및 제2 심볼 리졸버가 각각 제어 클록의 사이클마다 심볼을 디코딩하고, 압축된 데이터의 블록들의 길이가 21 비트라고 가정하면, 제1 클록 사이클에서 심볼 디코더가 3 비트 코드를 디코딩하고 제2 심볼 리졸버가 압축된 데이터의 제1 블록으로부터의 5 비트 코드를 디코딩하는 경우, 수신기는 압축된 데이터로부터 8개의 새로운 비트들을 시프트 인하여 압축된 데이터의 제1 블록으로부터의 나머지 13 비트들에 부가하고, 제2 클록 사이클에서 압축된 데이터의 결과적인 제2 블록 및 이의 서브블록들을 심볼 디코더 및 제2 심볼 리졸버에 제공한다.
일부 실시예들에서, 심볼 디코더 및 제2 심볼 리졸버 중 하나 또는 둘 모두는 각각의 최대 코드 길이를 사용한다. 예를 들어, 일부 실시예들에서, 심볼 디코더는 데이터를 압축하는 데 사용되는 코딩 표준의 최대 코드 길이(예를 들어, 15 비트, 12 비트 등)를 사용하고, 제2 심볼 리졸버는 시스템 설계자 또는 또 다른 엔티티에 의해 선택되는 최대 코드 길이(예를 들어, 6 비트, 8 비트 등)를 사용한다. 예를 들어, 제2 심볼 리졸버에 대한 최대 코드 길이는 디코딩 서브시스템의 성능(예를 들어, 심볼 디코딩의 평균 레이트)과 제2 심볼 리졸버의 물리적 크기(예를 들어, 반도체 레이아웃 영역), 전력 소비, 발열 등의 균형을 고려하여 선택될 수 있다. 이러한 실시예들에서, 제2 심볼들이 제2 심볼 리졸버에 대한 최대 코드 길이보다 더 긴 코드들과 연관되는 경우, 제2 심볼은 모든 클록 사이클에서 심볼을 디코딩하지 않을 수 있다 - 그리고 이에 따라 특정 값(예를 들면, 널)을 출력하거나 아무것도 출력하지 않을 것이다. 이러한 경우들에서, 코드는 제2 심볼 리졸버가 디코딩하기에 너무 길지만, 심볼 디코더는 후속 클록 사이클(또는 다른 시구간)에서(즉, 수신기가 새로운 압축된 데이터를 시프트 인하여 클록 사이클에 대한 압축된 데이터의 블록을 생성함에 따라) 원래는 제2 심볼 리졸버에 대해 너무 길었던 코드를 디코딩한다.
일부 실시예들에서, 디코딩 서브시스템은 심볼 디코더 및 제2 심볼 리졸버에 의해 디코딩된 제1 및 제2 심볼들에 추가하여 추가 심볼 - 예를 들어, 제3 심볼 등 - 을 디코딩하기 위한 동작들을 수행하는 적어도 하나의 추가 심볼 리졸버 기능 블록을 포함한다. 이러한 실시예들에서, 각 추가 심볼 리졸버는 심볼 디코더 및 제2 심볼 리졸버의 상술된 동작들과 실질적으로 병렬로, 압축된 데이터의 블록의 추가 서브블록들로부터 심볼들을 디코딩한다. 심볼 디코더 및 제2 심볼 리졸버는 추가 심볼 리졸버가 적절한 심볼을 제공할 수 있도록, 내부에서 디코딩된 코드들에 대한 길이 정보를 추가 심볼 리졸버에 포워딩한다. 예를 들어, 그리고 압축된 데이터의 21 비트 블록의 예를 계속하면, 심볼 디코더가 8 비트의 코드로부터 심볼을 디코딩하고, 제2 심볼 리졸버가 7 비트의 코드로부터 심볼을 디코딩하는 경우, 추가 심볼 디코더는 압축된 데이터의 블록의 제15 비트에 뒤따르는 추가 심볼 디코더에 의해 사용되는 최대 코드 길이(예를 들어, 6 비트, 5 비트 등)까지의 코드로부터 심볼을 출력한다. 이러한 실시예들에서, 디코딩 서브시스템은 사이클마다 세 개 이상의 심볼들을 제공할 수 있다.
압축된 데이터를 압축 해제하기 위한 심볼 디코더 기능 블록 및 제2 심볼 리졸버 기능 블록(그리고 가능하게는 추가 심볼 리졸버 기능 블록들)을 갖는 하드웨어 디코딩 서브시스템을 사용함으로써, 설명되는 실시예들은 기존 디바이스들이 소프트웨어를 사용하여 수행한 동작들을 하드웨어에서 수행한다. 디코딩 서브시스템은 동일한 동작들을 수행하는 데 소프트웨어 엔티티를 사용하는 것보다 더 빠르고 더 효율적이다(예를 들어, 메모리 액세스를 덜 필요로 하고, 전력을 덜 사용하는 등). 또한, 디코딩 서브시스템을 사용하는 것은 다른 동작들을 수행하기 위해 전자 디바이스 내의 다른 기능 블록들(예를 들어, 처리 서브시스템들 등)을 해제한다. 이에 따라, 디코딩 서브시스템은 전자 디바이스의 전체 성능을 향상시키며, 이는 결과적으로 사용자 만족을 향상시킨다.
전자 디바이스
도 2는 일부 실시예들에 따른 전자 디바이스(200)를 도시한 블록도를 나타낸다. 도 2에 도시된 바와 같이, 전자 디바이스(200)는 프로세서(202) 및 메모리(204)를 포함한다. 프로세서(202)는 전자 디바이스(200)에서 계산, 압축 해제, 및 다른 동작들을 수행하는 기능 블록이다. 프로세서(202)는 처리 서브시스템(206) 및 디코딩 서브시스템(208)을 포함한다. 처리 서브시스템(206)은 범용 계산, 압축 해제, 및 다른 동작들을 수행하는 중앙 처리 장치(CPU) 코어들, 그래픽 처리 유닛(GPU) 코어들, 임베디드 프로세서들, 및/또는 주문형 집적 회로(ASIC)들과 같은 하나 이상의 기능 블록을 포함한다.
디코딩 서브시스템(208)은 압축된 입력 데이터를 압축 해제하기 위한 동작들을 수행하는 기능 블록이다. 일반적으로, 디코딩 서브시스템(208)은 원본 데이터에 기초하여 생성되었던 압축된 입력 데이터를 입력으로서 취하고, 원본 데이터를 재현하기 위한 심볼들을 출력으로서 반환한다. 디코딩 서브시스템(208)은 디코딩 서브시스템 내의 내부 요소들의 배열(예를 들어, 디코딩 서브시스템(208) 내의 개별 심볼 리졸버들의 수)에 기초하여, 압축된 데이터의 블록들로부터, 시구간마다 특정 수 까지의 심볼들(예를 들어, 클록 사이클마다 두 개의 심볼들, 매 333 ps마다 세 개의 심볼들 등)을 생성한다. 디코딩 서브시스템(208)은 아래에서 더 상세히 설명된다.
메모리(204)는 전자 디바이스(200)에서 메모리(예를 들어, 메인 메모리)의 동작들을 수행하는 기능 블록이다. 메모리(204)는 전자 디바이스(200) 내의 기능 블록들에 의해 사용하기 위한 데이터 및 커맨드들을 저장하기 위한 메모리 회로들(즉, 저장 소자들, 액세스 소자들 등), 뿐만 아니라 메모리 회로들 내의 데이터 및 명령어들의 액세스(예를 들어, 판독, 기입, 검사, 삭제, 무효화 등)를 핸들링하기 위한 제어 회로들을 포함한다. 메모리(204)에서의 메모리 회로들은 4세대 더블 데이터 레이트 동기식 동적 랜덤 액세스 메모리(DDR4 SDRAM), 정적 랜덤 액세스 메모리(SRAM), 또는 이들의 조합과 같은 컴퓨터 판독 가능 메모리 회로들을 포함한다.
전자 디바이스(200)는 특정 수 및 배열들의 소자들(예를 들어, 프로세서(202), 메모리(204) 등과 같은 기능 블록들 및 디바이스들)을 사용하는 것으로 제시된다. 그러나, 전자 디바이스(200)는 예시를 위해 단순화된다. 일부 실시예들에서, 전자 디바이스(200)에 상이한 수 또는 배열의 소자들이 존재한다. 예를 들어, 전자 디바이스(200)는 파워 서브시스템들, 디스플레이들 등을 포함할 수 있다. 일반적으로 전자 디바이스(200)는 본원에서 설명되는 동작들을 수행하기에 충분한 요소들을 포함한다.
도 2에서 디코딩 서브시스템(208)은 프로세서(202)에 포함되는 것으로서 도시되어 있지만, 일부 실시예들에서, 디코딩 서브시스템(208)은 개별 및/또는 독립형 기능 블록이다. 예를 들어, 디코딩 서브시스템(208)은 (그 자체로 또는 지원 회로 소자들 및 기능 블록들과 함께) 독립형 집적 회로 칩 등 상에 구현될 수 있다. 일반적으로, 설명되는 실시예들에서, 디코딩 서브시스템(208)은 본원에서 설명되는 동작들을 수행하는 것을 가능하게 하기에 적절하게 전자 디바이스(200)에 위치된다.
전자 디바이스(200)는 데이터 압축 해제 또는 다른 동작들을 수행하는 임의의 전자 디바이스일 수 있거나, 또는 이에 포함될 수 있다. 예를 들어, 전자 디바이스(200)는 데스크탑 컴퓨터들, 랩탑 컴퓨터들, 웨어러블 전자 디바이스들, 태블릿 컴퓨터들, 스마트 폰들, 서버들, 인공 지능 장치들, 가상 또는 증강 현실 장비, 네트워크 기기들, 토이들, 청각-시각 장비, 가전 기기들, 제어기들, 차량들 등, 및/또는 이들의 조합들과 같은 전자 디바이스들일 수 있거나, 또는 이들에 포함될 수 있다.
디코딩 서브시스템
설명되는 실시예들에서, 전자 디바이스 내의 디코딩 서브시스템은 압축된 입력 데이터를 압축 해제하기 위한 동작들을 수행한다. 도 3은 일부 실시예들에 따른 디코딩 서브시스템(208)을 도시한 블록도를 나타낸다. 도 3에서 알 수 있는 바와 같이, 디코딩 서브시스템(208)은 수신기(REC)(300), 심볼 디코더(302), 및 제2 심볼 리졸버(304)를 포함하며, 이들 각각은 압축된 데이터로부터 심볼들을 디코딩하는 것과 연관된 동작들을 수행한다.
도 3에서의 예에 대해, 심볼 디코더(302)는 최대 길이가 15 비트인 코드들로부터 심볼들을 디코딩하는 것으로 가정되고, 제2 심볼 리졸버(304)는 최대 길이가 6 비트인 코드들로부터 심볼들을 디코딩하는 것으로 가정된다. 심볼 디코더(302)에 대한 15 비트 최대 길이는 코딩 표준에서 허용되는 가장 긴 코드의 예이다. 다시 말해서, 디코딩 서브시스템(208)에 의해 압축 해제될 압축된 데이터를 생성하는 데 사용되는 코딩 표준에 대한 규칙 또는 제한은 코드들에 대한 허용 가능한 가장 긴 길이가 15 비트라고 가정한다. 제2 심볼 리졸버(304)에 대한 6 비트 최대 길이는 코드 길이에 대한 구성된(즉, 선택되거나 선발된) 상한의 예이다. 코드 길이가 길수록 디코딩에 더 크고 더 복잡한 회로들을 필요로 하기 때문에, 디코딩 서브시스템(208)의 전체 심볼 디코딩 레이트에 대해 제2 심볼 리졸버(304)에 요구되는 회로 면적과 디코딩 노력(예를 들어, 전력 소비, 발열 등)의 균형을 맞추는 것을 돕기 위해, 예를 들어, 설계자 또는 다른 엔티티에 의해, 코드 길이에 대한 상한이 선택된다. 그러나, 도 3에서의 심볼 디코더(302) 및 제2 심볼 리졸버(304)에 대한 예시적인 최대 코드 길이는 요구되지 않는다; 일부 실시예들에서, 최대 코드 길이는 상이하다(즉, 더 길고/거나 더 짧다). 일반적으로, 설명되는 실시예들은 본원에서 설명되는 동작들이 수행될 수 있는 임의의 코드 길이로 동작 가능하다. 또한, 도 3에서의 예에 대해, 압축된 데이터의 N 비트 블록들의 길이는 21 비트이다. 심볼 디코더(302)는 최대 15비트 길이의 코드를 디코딩할 수 있고, 제2 심볼 리졸버(304)는 클록 사이클(또는 다른 시간 주기) 당 21비트의 최대 결합된 코드 길이에 대해 최대 6비트 길이의 코드들을 디코딩할 수 있기 때문에, 21비트 길이가 사용된다.
디코딩 서브시스템(208)에서의 수신기(300)는 또 다른 엔티티(예를 들어, 처리 서브시스템(206), 메모리(204) 등)로부터 압축된 데이터를 수신하고, 압축된 데이터의 부분들을 심볼 디코더(302) 및 제2 심볼 리졸버(304)로 포워딩하거나 보내기 위한 동작들을 수행하는 기능 블록이다. 예를 들어, 일부 실시예들에서, 클록(336) 기능 블록(또는 다른 시구간)에 의해 디코딩 서브시스템(208)에 제공되는 제어 클록의 각 사이클에 대해, 수신기(300)는 압축된 데이터의 스트림 또는 시퀀스로부터 다음 21 비트 블록을 획득하고, 압축된 데이터의 블록의 대응하는 부분들을 심볼 디코더(302) 및 제2 심볼 리졸버(304)에 제공한다.
일부 실시예들에서, 압축된 데이터의 처음 블록에 대해, 수신기(300)는 압축된 데이터의 처음 21 비트를 단순히 획득한다. 초기 블록 이후의 압축된 데이터의 블록들에 대해, 수신기(300)는 압축된 데이터의 현재 블록에서 심볼 디코더(302) 및 제2 심볼 리졸버(304) 각각에 의해 디코딩된 코드들의 길이에 기초하여 압축된 데이터의 각 다음 블록을 생성한다. 압축된 데이터의 다음 블록을 생성하기 위해, 수신기(300)는 심볼 디코더(302) 및 제2 심볼 리졸버(304) 중 하나 또는 둘 모두로부터, 압축된 데이터의 현재 블록에서 심볼들이 디코딩되었던 코드들의 길이에 대한 정보를 수신한다. 그 후, 수신기(300)는 코드들의 길이에 대한 정보를 사용하여, 압축된 데이터의 다음 블록을 생성하기 위해 압축된 입력 데이터로부터 얼마나 많은 새로운 비트가 획득되어야 하는지를 결정한다. 일부 경우들에서, 디코딩된 코드들의 조합된 길이는 압축된 데이터의 현재 블록보다 짧다 - 그리고 이에 따라, 압축된 데이터의 현재 블록에서 모든 비트들이 디코딩되지는 않았다. 이에 따라, 수신기(300)는 압축된 데이터의 다음 21 비트 블록을 생성하기 위해 압축된 데이터의 현재 블록으로부터의 나머지 비트들(즉, 디코딩되지 않은)에 추가하기 위한 압축된 입력 데이터로부터의 비트들을 획득한다. 예를 들어, 심볼 디코더(302)가 2 비트 코드로부터 심볼을 디코딩하였고, 제2 심볼 리졸버(304)가 압축된 데이터의 현재 블록에서의 5 비트 코드로부터 심볼을 디코딩하였으며, 이에 따라 압축된 데이터의 21 비트 현재 블록의 7 비트가 디코딩되었다면, 수신기(300)는 압축된 데이터의 다음 21 비트 블록을 생성하기 위해 압축된 입력 데이터로부터의 새로운 데이터의 7 비트를 압축된 데이터의 현재 21 비트 블록의 나머지 14 비트에 추가하거나, 또는 시프트 인한다. 그 후, 수신기(300)는 압축된 데이터의 다음 21 비트 블록의 대응하는 부분들을 디코딩될 심볼 디코더(302) 및 제2 심볼 리졸버(304)에 제공한다.
수신기(300)에 의해 심볼 디코더(302) 및 제2 심볼 리졸버(304) 각각으로 보내지는 압축된 입력 데이터의 블록들의 "부분들"은 심볼 디코더(302) 및 제2 심볼 리졸버(304) 내의 기능 블록들에서 디코딩될 압축된 데이터의 블록들로부터의 비트 그룹들 또는 세트들이다. 예를 계속하면, 일부 실시예들에서, 수신기(300)는 15 비트 부분들(즉, 압축된 입력 데이터의 블록들의 비트들 0-14)을 심볼 디코더(302)에 보내고, 20 비트 부분들(즉, 압축된 입력 데이터의 블록들의 비트들 1-20)을 제2 심볼 리졸버(304)에 보낸다. 일부 실시예들에서, 압축된 입력 데이터의 블록들의 부분들을 보내는 것은 수신기(300)가 예를 들어, 전용 직렬 또는 병렬 신호 라인들 또는 라우트들을 통해, 특정 비트들을 심볼 디코더(302) 및/또는 제2 심볼 리졸버(304)에 전달하는 것을 수반한다. 본 예를 계속하면, 이는 수신기(300)가 심볼 디코더(302)에 단지 비트들 0-14만을 전달하고, 제2 심볼 리졸버(304)에 단지 비트들 1-20만을 전달한다는 것을 의미한다. 그러나, 일부 실시예들에서, 부분들을 보내는 것은 압축된 데이터의 전체 21 비트 블록들을 직렬 또는 병렬 통신 버스, 신호 라인들, 또는 다른 통신 루트를 통해, 심볼 디코더(302) 및 제2 심볼 리졸버(304)에 전달하는 것을 수반하며, 여기서 적절한 부분들이 심볼 디코더(302) 및 제2 심볼 리졸버(304) 각각에 의해 판독된다.
디코딩 서브시스템(208) 내의 심볼 디코더(302)는 압축된 입력 데이터의 블록들로부터 각 심볼들을 디코딩하기 위한 동작들을 수행하는 기능 블록이다. 심볼 디코더(302)는 매치 유닛 세트, 즉 매치 유닛들 (306-312), 및 길이 검출기(314)를 포함한다. 매치 유닛들(306-312)의 각 매치 유닛은 각 길이의 코드들을 압축된 데이터의 블록의 비트들과 비교하고, 매치가 발견될 때 대응하는 심볼들(예를 들어, 매치 유닛(306)으로부터의 심볼(316) 등)을 반환하기 위한 동작들을 수행하는 기능 블록이다. 예를 들어, 매치 유닛(312)은 단일 비트 코드를 압축된 데이터의 블록의 제1 비트(도 3에서 D[0]으로서 도시됨)와 비교하기 위한 회로 요소들(예를 들어, 논리 게이트들, 비교 회로들, 멀티플렉서들, 메모리 요소들 등)을 포함한다. 이러한 방식으로, 매치 유닛(312)은 압축된 데이터의 블록의 제1 비트에 하나의 비트 코드와의 매치가 존재하는지를 결정한다. 매치 유닛(312)이 매치를 발견할 때, 매치 유닛(312)은 매칭 코드와 연관된 심볼을 길이 검출기(314)에 출력한다. 예를 들어, 매치 유닛(312)은 심볼을 저장하는 메모리 요소들, 및 매치가 발견될 때 심볼을 출력하는 출력 회로 요소들을 포함할 수 있다. 다른 매치 유닛들(306-310)은 다른 길이의 코드들에도 불구하고, 유사한 동작들을 수행한다. 보다 구체적으로, 매치 유닛(306)은 압축된 데이터의 블록들의 처음 15 비트와 15 비트의 코드들 간에서 매치를 찾고, 매치 유닛(308)은 압축된 데이터의 처음 3 비트와 3 비트의 코드들 간에서 매치를 찾으며, 매치 유닛(310)은 압축된 데이터의 블록들의 처음 2 비트와 2 비트의 코드들 간에서 매치를 찾으며, 이는 도 3에서, 각각 D[14:0], D[2:0], 및 D[1:0]로서 도시되어 있다. 일부 실시예들에서, 1-15로부터의 모든 코드 길이는 (타원들을 통해 도시된 바와 같이) 별개 매치 유닛에서 처리되지만, 명료성을 위해 매치 유닛들 중 단지 몇 개만이 도 3에 도시되어 있다.
일부 실시예들에서, 압축된 데이터를 압축하는 데 사용되는 코딩 표준(예를 들어, 프리픽스 코딩 표준)의 규칙들 및 제한들로 인해, 모든 가능한 비트 길이의 코드들은 압축된 데이터에 동시에 존재하지 않을 수 있다. 이러한 실시예들에서, 압축된 데이터로부터의 비트들과 코드들을 비교하는 데 필요한 매치 유닛들만이 심볼 디코더(302)에 포함될 수 있다. 이러한 실시예들에서, 매치 유닛들은 심볼 디코더(302)에서 모든 코드 길이에 대해 발견되지 않을 수 있다.
일부 실시예들에서, 매치 유닛들(306-312)은 압축된 데이터의 블록들에서의 각 비트들과 코드들 간의 매치를 수행하고, 발견된 매치에 기초하여 심볼들을 리턴하도록 구성, 프로그래밍, 또는 다른 방식으로 설정된다. 이러한 실시예들 중 일부에서, 각 매치 유닛(또는 매치 유닛을 구성, 프로그래밍 등을 하는 또 다른 엔티티)은 디코딩 레퍼런스(예를 들어, 테이블, 리스트, 또는 코드 대 심볼 맵핑 정보를 포함하는 다른 데이터 구조)로부터 코드들 및 매칭 심볼 정보를 획득하고/거나, 그 외 비교 회로들(예를 들어, 논리 게이트들, 멀티플렉서들 등)을 구성하는 데 디코딩 레퍼런스를 사용하여 압축된 데이터의 블록들의 비트들과 대응하는 길이의 코드들 간에 매치가 발견되었는지 여부를 표시하는 신호들을 리턴하도록 한다. 또한, 심볼 출력 회로 요소들 및 메모리 요소들은 디코딩 레퍼런스를 사용하여 관련 코드들에 대한 심볼들을 출력하도록 구성되거나 프로그래밍된다.
심볼 디코더(302) 내의 길이 검출기(314)는 각 매치 유닛(306-312)으로부터 반환되는 심볼을 디코딩하는 데 사용되는 코드의 길이를 결정하고, 코드의 길이를 제2 심볼 리졸버(304) 내의 심볼 선택기(330)에 전달하기 위한 동작들을 수행하는 기능 블록이다. 이러한 동작에 대해, 매치 유닛으로부터 심볼이 수신될 때, 길이 검출기(314)는 심볼이 디코딩되었던 코드의 길이를 결정하고(예를 들어, 논리 회로들, 룩업 회로들 및 메모리 요소들 등을 사용하여), 코드 길이(318)를 심볼 선택기(330)에 제공한다. 예를 들어, 1 비트 코드를 압축된 데이터의 블록들에서의 제1 비트 위치와 비교하는 매치 유닛(312)이 심볼을 반환하는 경우, 길이 검출기(314)는 1 비트 코드가 디코딩되었다고 결정하고, 코드 길이(318)로서 1 의 값(또는 또 다른 대표 값)을 반환한다. 일부 실시예들에서, 그 안에서 어떠한 매치도 발견되지 않았기 때문에, 매치 유닛들(306-310)은 매치가 발견되지 않았음을 표시하는 신호, 예를 들어, 널 신호, 제로 값 등을 제공한다. 코드 길이(318)를 출력하는 것에 더하여, 길이 검출기(314)는 디코딩 서브시스템(208)으로부터 심볼(320)로서 출력될 수신된 심볼을 포워딩하거나 그 외 전달한다.
디코딩 서브시스템(208) 내의 제2 심볼 리졸버(304)는 압축된 데이터의 블록의 각 서브블록들로부터 다수의 심볼들을 추론적으로 디코딩하고, 심볼 디코더(302)에서 심볼을 디코딩하기 위해 사용되는 코드의 길이에 기초하여 디코딩 서브시스템(208)으로부터 출력될 심볼들 중 하나를 제공하는 기능 블록이다. 다시 말해서, 제2 심볼 리졸버(304)는 심볼 디코더(302)에서의 심볼의 디코딩과 실질적으로 병렬로, 심볼 디코더(302)에서 디코딩되는 압축된 데이터의 블록의 각 비트 세트에 뒤따르는 압축된 데이터의 블록의 비트들로부터 심볼 세트를 디코딩한다. 심볼 세트로부터, 심볼은 심볼 디코더(302)에서 제1 심볼이 디코딩되었던 코드의 길이에 기초하여 디코딩 서브시스템(208)으로부터의 제2 심볼로서 출력으로서 선택된다. 예를 들어, 매치 유닛(312)은 압축된 데이터의 블록의 제1 비트, 즉, 압축된 데이터 블록의 비트 0을 디코딩하고, 이에 따라 제2 심볼 리졸버(304)는 매치 유닛(312)이 매치를 발견하고 제1 심볼을 출력하는 경우에 그 심볼을 제2 심볼로서 출력할 준비를 하기 위해 압축된 데이터의 블록의 비트들 1-6으로부터 심볼을 디코딩한다.
제2 심볼 리졸버(304)는 개별 심볼 디코더 세트, 즉 심볼 디코더들(322-328), 및 심볼 선택기(330)를 포함한다. 심볼 디코더들(322-328) 각각은 심볼 디코더(302)의 동작들과 유사한 동작들, 즉, 각 길이의 코드들을 압축된 데이터의 블록의 비트들과 비교하고, 매치가 발견될 때 대응하는 심볼들(예를 들어, 심볼 인코더(322)로부터의 심볼(332))을 반환하기 위한 동작들을 수행하는 개별 기능 블록이다. 일부 실시예들에서, 각 심볼 디코더(322-328)의 내부 요소들은 압축된 데이터의 블록의 각 서브블록에서의 비트 수에 대해 조정되지만, 심볼 인코더(302)에 도시되고 위에서 설명된 것과 유사하다(그리고 명확성 및 간결성을 위해 다시 설명되지 않는다). 심볼 디코더들(322-328)의 각 심볼 디코더에서 디코딩된 각 서브블록은 압축된 데이터의 블록에서의 다수의 비트들 중의 상이한 이웃하는 비트 시퀀스를 포함한다. 도 3에서의 예에서, 심볼 디코더들(322-328)에서 디코딩된 서브블록은 비트들(15-20, 8-3, 7-2, 및 6-1)을 포함하며, 이들은 도 3에서 각각 D[20:15], D[8:3], D[7:2], 및 D[6:1]로서 도시되어 있다. 상술한 바와 같이, 압축된 데이터의 블록의 각 서브블록의 길이는 심볼 디코더(302)에 의해 디코딩된 심볼에 뒤따를 수 있는 심볼을 디코딩하기 위해 선택된다.
심볼 선택기(330)는 심볼 디코더들(322-328) 각각에 의해 출력되는 심볼들 중에서, 디코딩 서브시스템(208)으로부터의 제2 심볼로서, 즉, 심볼(334)로서 출력될 심볼을 선택하기 위한 동작들을 수행하는 기능 블록이다. 심볼 선택기(330)는 길이 검출기(314)로부터 코드 길이(318)를 수신하는 회로 요소들(예를 들어, 논리 회로들, 디멀티플렉서들 등)을 포함하고, 코드 길이(318)의 값에 기초하여, 심볼 디코더들(322-328)에 의해 출력되는 심볼들 중에서 심볼(334)로서 출력될 심볼을 선택한다. 예를 들어, 매치 유닛(306)이 압축된 데이터의 블록의 비트들 0-14로부터 심볼을 디코딩하고, 이에 따라 코드 길이(318)가 15 비트라면, 심볼 선택기(330)는 심볼 디코더(322) - 이는 압축된 데이터의 블록의 비트들 15-20을 디코딩함 - 로부터 심볼(334)로서 출력될 심볼(332)을 선택한다.
일부 실시예들에서, 제2 심볼 리졸버(304)가 6 비트 서브블록들을 디코딩하는 것으로 제한되기 때문에, 심볼 디코더들(322-328) 중 일부 또는 전부가 심볼을 디코딩할 수 없는 것, 즉, 심볼을 디코딩하기에 충분한 비트들이 없는 것이 가능하다는 점에 유의한다. 심볼이 제2 심볼 리졸버(304)에서의 소정의 심볼 디코더에서 디코딩될 수 없을 때, 소정의 심볼 디코더는 널, 제로, 또는 또 다른 값과 같은 디폴트 값을 출력한다(또는 아무것도 출력하지 않는다). 이러한 이유로 심볼 디코더(302)에서 디코딩된 심볼(320)에 뒤따르는 심볼이 이용 가능하지 않은 경우(즉, 코드의 길이로 인해 디코딩될 수 없는 경우), 심볼 선택기(330)는 심볼(334)을 출력하지 않는다 - 그리고 디코딩 서브시스템(208)은 그 클록 사이클(또는 다른 시구간) 동안 하나의 심볼만을 디코딩한다.
다양한 내부 요소들이 도 3에서의 디코딩 서브시스템(208), 심볼 디코더(302), 및 제2 심볼 리졸버(304)에 도시되어 있지만, 설명되는 실시예들은 내부 요소들의 도시된 배열 또는 수에 제한되지 않는다. 일반적으로, 디코딩 서브시스템(208)은 본원에서 설명되는 동작들을 수행하기에 충분한 요소들을 포함한다.
추가적인 심볼 리졸버들
도 3은 디코딩 서브시스템(208) 내의 단일 제2 심볼 리졸버(즉, 제2 심볼 리졸버(304))만을 도시하고 있지만, 일부 실시예들에서, 디코딩 서브시스템(208)은 두 개 이상의 심볼 리졸버들을 포함한다. 도 4는 일부 실시예들에 따른 디코딩 서브시스템(208)에서의 추가적인 심볼 리졸버를 도시한 블록도를 나타낸다. 도 4에서 알 수 있는 바와 같이, 디코딩 서브시스템(208)은 심볼 디코더(302) 및 제2 심볼 리졸버(304)를 포함하며, 이들은 각각 심볼(320) 및 심볼(334)을 출력하고, 이는 위에서 설명되었다. 또한, 디코딩 서브시스템(208)은 추가 심볼 리졸버(400)를 포함하며, 이는 디코딩 서브시스템(208)으로부터 심볼(404), 즉, 제3 심볼을 출력한다.
추가 심볼 리졸버(400)는 압축된 데이터의 블록의 상이한 서브블록들에 대해서도, 제2 심볼 리졸버(304)에 대한 동작들과 유사한 동작들을 수행한다. 일반적으로, 추가 심볼 리졸버(400)는 압축된 데이터의 블록의 각 서브블록들로부터 다수의 심볼들을 추론적으로 디코딩하고, 심볼 디코더(302) 및 제2 심볼 리졸버(304) 둘 모두에서 심볼들을 디코딩하기 위해 사용되는 코드들의 조합된 길이에 기초하여 디코딩 서브시스템(208)으로부터 출력될 심볼들 중 하나를 제공하는 기능 블록이다. 다시 말해서, 추가 심볼 리졸버(400)는 심볼 디코더(302)에서의 심볼의 디코딩과 실질적으로 병렬로, 제2 심볼 리졸버(304)에서 디코딩되는 압축된 데이터의 블록의 각 비트 세트에 뒤따르는 압축된 데이터의 블록의 비트들로부터 심볼 세트를 디코딩한다. 심볼 세트로부터, 심볼은 심볼 디코더(302) 및 제2 심볼 리졸버(304)에서 디코딩된 코드들의 조합된 길이에 기초하여 디코딩 서브시스템(208)으로부터 제3 심볼로서 출력으로서 선택되며, 이는 조합된 코드 길이(406)로서 추가 심볼 리졸버(400)에 전달된다. 예를 들어, 심볼 디코더(302)가 2 비트의 코드(즉, 압축된 데이터의 블록의 비트들 1-0)로부터 심볼을 디코딩하고, 제2 심볼 리졸버(304)가 5 비트(예를 들어, 압축된 데이터의 블록의 비트들 6-2)로부터 심볼을 디코딩하는 경우, 추가 심볼 리졸버(400)는 (추가 심볼 리졸버(400)에서의 최대 코드 길이 등에 따라) 압축된 데이터 블록의 비트 6 이상의 비트들로부터 디코딩되는 코드를 출력할 수 있다. 제2 심볼 리졸버(304)와 같이, 코드가 추가 심볼 리졸버(400)에 대한 최대 코드 길이보다 더 길기 때문에 추가 심볼 리졸버(400)에 의해 심볼이 디코딩되지 않는 경우들에서, 추가 심볼 리졸버(400)는 심볼을 출력하지 않는다.
압축된 입력 데이터를 디코딩하기 위한 프로세스들
설명된 실시예들에서, 심볼 디코더 및 제2 심볼 리졸버(예를 들어, 심볼 디코더(302) 및 제2 심볼 리졸버(304))를 포함하는 디코딩 서브시스템(예를 들어, 디코딩 서브 시스템(208))은 압축된 입력 데이터(예를 들어, 압축된 데이터(100))를 디코딩하기 위한 동작들을 수행한다. 도 5는 일부 실시예들에 따른 압축된 입력 데이터를 디코딩하기 위한 프로세스를 도시한 흐름도를 나타낸다. 도 5에 도시된 동작들은 일부 실시예들에 의해 수행되는 동작들의 일반적인 예로서 제시된다는 점에 유의한다. 다른 실시예들에 의해 수행되는 동작들은 상이한 동작들, 상이한 순서로 수행되는 동작들, 및/또는 상이한 엔티티들 또는 기능 블록들에 의해 수행되는 동작들을 포함한다.
도 5에 도시된 프로세스에 대해, 디코딩 서브시스템이 파일, 데이터의 스트림 등과 같은 소스로부터 압축된 입력 데이터를 수신하고 있다고 가정한다. 다시 말해서, 압축된 입력 데이터의 각 비트들이 디코딩 서브시스템에 의해 수신되고 있고, 이에 따라 디코딩 서브시스템 내의 수신기(예를 들어, 수신기(300))에 의해 동작되는 데 이용 가능하다. 일부 실시예들에서, 디코딩 서브시스템은 또 다른 엔티티(예를 들어, 프로세싱 서브시스템(206))에 의해 디코딩 서브시스템에 제공되는 압축된 입력 데이터를 단순히(그리고 가능하게는 단지) 디코딩하여, 압축된 입력 데이터가 생성되었던 원본 데이터를 재현하기 위한 심볼들을 생성한다. 그러나, 일부 실시예들에서, 디코딩 서브시스템은 메모리 및/또는 다른 위치들 또는 엔티티들(예를 들어, 처리 서브시스템, 네트워크 인터페이스들, IO 디바이스들 등)로부터 데이터를 검색하고/거나 원본 데이터에 대한 심볼들을 메모리에 저장하고/하거나 심볼들을 다른 엔티티들에 제공하기 위한 기능 블록들을 포함한다. 이들 실시예들 중 일부에서, 디코딩 서브시스템은 대응하는 기능 블록에서, 디코딩 서브시스템으로 하여금 입력 데이터를 획득 및 처리하기 시작하게 하는 커맨드 또는 또 다른 신호를 수신하고 처리한다.
도 5에서 알 수 있는 바와 같이, 프로세스는 디코딩 서브시스템 내의 수신기가 압축된 입력 데이터의 블록 및 서브블록들을 각각 디코딩 서브시스템 내의 심볼 디코더 및 제2 심볼 리졸버에 송신할 때 시작된다(단계 500). 압축된 입력 데이터의 블록은 압축된 입력 데이터의 N 비트 블록(즉, 들어오는 압축된 입력 데이터로부터 검색되는 다음 N개의 이용 가능한 비트들의 세트/시퀀스)이다. 상술한 바와 같이, N 비트 블록에서의 특정 비트 수는 심볼 디코더 및 제2 심볼 리졸버에서 사용되는 최대 코드 길이에 따른다. 도 5에서의 예에서, 압축된 입력 데이터의 32 비트 블록은 심볼 디코더에 대한 가정된 20 비트 최대 코드 길이(이는 코딩 표준에 대해 가정된 최대 코드 길이와 동일함) 및 제2 심볼 리졸버에 대한 추정되는 12 비트 최대 코드 길이에 기초하여 가정된다. 제2 심볼 리졸버에서 더 짧은 최대 코드 길이를 사용하는 것은 더 크고 더 복잡한 제2 심볼 리졸버에 대한 필요성을 회피하고, 이와 연관된 전력, 열 에너지 등의 추가 소비를 회피한다 - 제2 심볼 리졸버에서 특정 코드 길이를 사용할 필요는 없지만 - 는 것을 상기한다.
그 후, 디코딩 서브시스템은 압축된 입력 데이터의 블록에서의 코드들에 기초하여 심볼들을 디코딩하기 위한 다수의 동작들을 수행한다. 도 5에서 알 수 있는 바와 같이, 단계들 502-506은 제2 심볼 리졸버에서의 단계들 508-512와 실질적으로 병렬로 심볼 디코더에서 수행된다. 본원에서 사용될 때, "실질적으로 병렬로"는 동작들 중 일부 또는 전부, 즉, 단계들 502-506의 그룹 및 단계들 508-512의 그룹이 거의 동시에 수행되는 것을 나타낸다. 예를 들어, 일부 실시예들에서, 이러한 동작들은 심볼 디코더 및 제2 심볼 리졸버 내의 조합 로직 및 다른 회로 요소들을 통해 제어 클록(예를 들어, 클록(336))의 하나 이상의 클록 사이클 내에서 수행된다.
심볼들을 디코딩하기 위한 동작들에 대해, 심볼 디코더는 압축된 데이터의 블록에서 심볼이 이용 가능한 제1 코드로부터 제1 심볼을 디코딩한다(단계 502). 이러한 동작에 대해, 심볼 디코더 내의 매치 유닛 세트의 각 매치 유닛(예를 들어, 매치 유닛들(306-312))은 각 특정 길이(예를 들어, 1 비트, 2 비트, ...19 비트, 및 20 비트)의 코드들을 압축된 데이터의 블록의 20 비트 부분으로부터의 비트 세트와 비교한다. 예를 들어, 제1 매치 유닛은 압축된 데이터의 블록의 비트 0(즉, 제1 또는 최저 비트)를 1 비트 코드와 비교할 수 있고, 제2 매치 유닛은 압축된 데이터의 블록의 비트들 0-1을 2 비트 코드와 비교할 수 있으며, 제3 매치 유닛은 압축된 데이터의 블록의 비트들 0-2를 3 비트 코드와 비교할 수 있는 기타 등등이다. 소정의 매치 유닛은 압축된 입력 데이터의 블록의 각 비트들 간의 매치를 찾고, 코드는 대응하는 심볼을 심볼 디코더 내의 길이 검출기(예를 들어, 길이 검출기(314))에 반환한다. 예를 들어, 그리고 도 1에 도시된 예를 계속하면, 코드(100)가 압축된 데이터의 블록의 처음 3 비트 위치들에서 나타나는 경우, 3 비트 코드들을 비교하는 매치 유닛은 심볼 B를 길이 검출기로 반환한다. 그 후, 심볼 디코더에서의 길이 검출기는 제1 심볼이 디코딩되었던 코드의 길이를 제2 심볼 리졸버로 전달하고(단계 504), 디코딩 서브시스템으로부터 출력될 제1 심볼을 제공한다(단계 506).
심볼들을 디코딩하기 위한 동작들에 대해, 제2 심볼 리졸버 내의 로컬 심볼 디코더 세트(예를 들어, 심볼 디코더들(322-328))의 각 로컬 심볼 디코더는 심볼이 압축된 데이터의 블록의 각 서브블록에서 이용 가능한 제1 코드로부터 각 심볼을 디코딩한다(단계 508). 이러한 동작에 대해, 제2 심볼 리졸버에서의 별개 로컬 심볼 디코더는 심볼 디코더에 의해 발견되는 제1 심볼에 대한 코드에 따를 수 있는 각 서브블록에 대한 심볼을 디코딩 한다. 예를 들어, 코드들이 1 비트, 2 비트, 3 비트 등일 수 있는 경우, 제1 로컬 심볼 디코더는 압축된 데이터의 블록의 제2 비트로부터 시작하여 12 비트(제2 심볼 리졸버 내의 심볼 디코더들에 대한 가정된 최대 코드 길이)의 서브블록, 즉 압축된 데이터의 블록의 비트들 1-12를 디코딩하고, 제2 로컬 심볼 디코더는 압축된 데이터의 블록의 제3 비트로부터 시작하여 12 비트, 즉, 압축된 데이터의 블록의 비트들 2-13을 디코딩하는 기타 등등이다. 이러한 방식으로, 제2 심볼 리졸버는 제1 심볼을 디코딩할 때 심볼 디코더에서 발견될 수 있는 각 코드 길이에 대해 제2 심볼로서 사용될 심볼을 디코딩한다. 그 후, 제2 심볼 리졸버 내의 심볼 선택기(예를 들어, 심볼 선택기(330))는 심볼 디코더로부터 수신되는 코드의 길이에 기초하여, 로컬 심볼 디코더로부터의 각 심볼들 중 하나를 제2 심볼로서 선택한다(단계 510). 예를 들어, 이러한 동작에 대해, 심볼 디코더에서 2 비트 코드가 디코딩되었을 때, 제2 심볼 리졸버 내의 제2 로컬 심볼 디코더로부터 출력되는 심볼은 심볼 선택기에 의해 선택되어 제2 심볼들로서 출력되도록 선택된다. 그 후, 심볼 선택기는 디코딩 서브시스템으로부터 출력될 제2 심볼을 제공한다(단계 512).
그 후, 디코딩 서브시스템은 제1 심볼 및 제2 심볼을 출력한다(단계 514). 상술한 바와 같이, 이 동작에 대해, 디코딩 서브시스템은 심볼들이 디코딩되었던 클록 사이클(또는 다른 시구간)의 마지막에 디코딩 서브시스템의 출력들에서 제1 심볼 및 제2 심볼을 단순히 출력할 수 있다. 전자 디바이스 내의 또 다른 엔티티는 다른 동작들(예를 들어, 재현된 원본 데이터를 메모리에 기입하는 것, 원본 데이터의 스트림들의 생성 등)에서 사용하기 위해 출력 심볼들을 판독하거나 또는 다른 방식으로 획득할 수 있다.
일부 실시예들에서, 제2 심볼 리졸버에서 디코딩되는 서브블록들은 코딩 표준에 대한 코드의 최대 길이보다 짧다. 도 5에서의 예에서, 서브블록들은 12 비트, 즉 제2 심볼 리졸버에 대한 코드들에 대한 구성된(선택된, 선발된 등) 최대 길이인 반면, 코딩 표준에 대한 최대 코드 길이는 20 비트이다. 따라서, 소정의 서브블록에서의 비트들은 완전한 코드를 포함하지 않을 것이고(예를 들어, 13, 14, 15 등의 비트 코드의 12 비트들을 포함할 것임), 이에 따라 심볼로 디코딩될 수 없을 것이다. 이 경우, 제2 심볼 리졸버는 심볼을 출력하지 않거나 널 값 등과 같은 특정 값을 출력한다. 이에 따라, 제2 심볼은 디코딩 서브시스템으로부터 출력되지 않는다. 또한, 일부 실시예들에서, 모든 코드 길이가 원본 데이터를 인코딩하는 데 허용되고/거나 사용되는 것은 아니고, 이에 따라 이러한 코드 길이들은 디코딩되지 않는다. 예를 들어, 이러한 실시예들에서, 매치 유닛들은 이러한 코드 길이들에 대해 제공되지 않고/거나 매치 유닛들은 디코딩 서브시스템에 존재하지만, 디스에이블되거나, 파워 다운되거나, 그 외 사용되지 않는다.
일부 실시예들에서, 적어도 하나의 전자 디바이스(예를 들어, 전자 디바이스(200))는 비일시적 컴퓨터 판독 가능 저장 매체 상에 저장된 코드 및/또는 데이터를 사용하여 본원에서 설명되는 동작들 중 일부 또는 전부를 수행한다. 보다 구체적으로, 적어도 하나의 전자 디바이스는 설명된 동작들을 수행할 때 컴퓨터 판독 가능 저장 매체로부터 코드 및/또는 데이터를 판독하고 코드를 실행하고/거나 데이터를 사용한다. 컴퓨터 판독 가능 저장 매체는 전자 디바이스에 의한 사용을 위한 코드 및/또는 데이터를 저장하는 임의의 디바이스, 매체, 또는 이들의 조합일 수 있다. 예를 들어, 컴퓨터 판독 가능 저장 매체는 플래시 메모리, 랜덤 액세스 메모리(예를 들어, eDRAM, RAM, SRAM, DRAM, DDR4 SDRAM 등), 비휘발성 RAM(예를 들어, 상 변화 메모리), 강유전성 랜덤 액세스 메모리, 스핀 전달 토크 랜덤 액세스 메모리, 자기저항성 랜덤 액세스 메모리 등), 판독 전용 메모리(ROM), 및/또는 자기 또는 광학 저장 매체들(예를 들어, 디스크 드라이브들, 자기 테이프, CD, DVD들 등)을 포함하여, 휘발성 메모리 및/또는 비휘발성 메모리를 포함할 수 있지만, 이에 제한되지는 않는다.
일부 실시예들에서, 하나 이상의 하드웨어 모듈이 본원에서 설명된 동작들을 수행한다. 예를 들어, 하드웨어 모듈들은 하나 이상의 프로세서/코어/중앙 처리 장치(CPU), 주문형 집적 회로(ASIC) 칩, 신경망 프로세서 또는 가속기, 필드 프로그래머블 게이트 어레이(FPGA), 디코딩 엔진, 컴퓨터 유닛, 임베디드 프로세서, 그래픽 프로세서(GPU)/그래픽 코어, 파이프라인, 가속 처리 장치(APU), 기능 블록, 제어기, 가속기, 및/또는 다른 프로그래머블 로직 디바이스를 포함할 수 있지만, 이에 제한되지는 않는다. 이러한 하드웨어 모듈들이 활성화될 때, 하드웨어 모듈들은 동작들의 일부 또는 전부를 수행한다. 일부 실시예들에서, 하드웨어 모듈들은 동작들을 수행하기 위한 명령어들(프로그램 코드, 펌웨어 등)을 실행함으로써 구성되는 하나 이상의 범용 회로를 포함한다.
일부 실시예들에서, 본원에서 설명된 구조들 및 메커니즘들의 일부 또는 전부(예를 들어, 전자 디바이스(200) 또는 이의 일부 부분)를 나타내는 데이터 구조는 전자 디바이스에 의해 판독되고 구조들 및 메커니즘들을 포함하는 하드웨어를 제조하기 위해 직접 또는 간접적으로 사용될 수 있는 데이터베이스 또는 다른 데이터 구조를 포함하는 컴퓨터 판독 가능 비일시적 저장 매체 상에 저장된다. 예를 들어, 데이터 구조는 Verilog 또는 VHDL과 같은 상위 수준 설계 언어(HDL)의 하드웨어 기능에 대한 거동 수준 설명 또는 레지스터 전송 수준(RTL) 설명일 수 있다. 그 설명은 상술한 구조들 및 메커니즘들을 포함하는 하드웨어의 기능을 나타내는 합성 라이브러리로부터 게이트들/회로 소자들의 리스트를 포함하는 네트리스트를 생성하기 위해 설명을 합성할 수 있는 합성 툴에 의해 판독될 수 있다. 이어서, 네트리스트는 마스크들에 적용될 기하학적 형상들을 설명하는 데이터 세트를 생성하기 위해 배치되고 라우팅될수 있다. 이어서, 마스크들은 상술한 구조들 및 메커니즘들에 대응하는 반도체 회로 또는 회로들(예를 들어, 집적 회로들)을 생산하기 위해 다양한 반도체 제조 단계들에서 사용될 수 있다. 대안적으로, 컴퓨터 액세스 가능 저장 매체 상의 데이터베이스는 네트리스트(합성 라이브러리가 있거나 없는) 또는 요구되는 바에 따라, 데이터 세트, 또는 그래픽 데이터 시스템(GDS) II 데이터일 수 있다.
본 설명에서, 변수들 또는 특정되지 않은 값들(즉, 값들의 특정 인스턴스들이 없는 값들에 대한 일반적인 설명)은 N, M, 및 X와 같은 문자들로 표현된다. 본원에서 사용될 때, 본 설명에서의 상이한 위치들에서 가능하게는 유사한 문자들을 사용함에도 불구하고, 각 경우에서의 변수들 및 특정되지 않은 값들은 반드시 동일한 것이 아니다, 즉, 일반적인 변수들 및 특정되지 않은 값들의 일부 또는 전부에 대해 상이한 가변 량들 및 값들이 의도될 수 있다. 다시 말해서, 본 설명에서 변수들 및 지정되지 않은 값들을 나타내기 위해 사용되는 N 및 임의의 다른 문자들은 반드시 서로 관련이 있는 것은 아니다.
표현 "기타 등등" 또는 "등"은 본원에서 사용될 때 사례, 즉 "등"이 연관되는 리스트의 요소들 "중 적어도 하나"의 균등물을 제시하는 것으로 의도된다. 예를 들어, "전자 디바이스가 첫 번째 동작, 두 번째 동작 등을 수행한다"라는 문구에서, 전자 디바이스는 첫 번째 동작, 두 번째 동작, 및 다른 동작들 중 적어도 하나를 수행한다. 또한, "등"과 연관된 리스트의 요소들은 단지 예들의 세트 중의 예들일 뿐이다 - 그리고 예들 중 적어도 일부는 일부 실시예들에서 나타나지 않을 수 있다.
실시예들에 대한 앞에서의 설명은 단지 예시 및 설명을 위해 제시되었다. 그것들은 철저하거나 본 실시예들을 개시된 형태들로 제한하는 것으로 의도되지 않는다. 따라서, 많은 변경안들 및 변형안들이 당업자들에게 명백할 것이다. 또한, 상기한 개시 내용은 실시예들을 제한하는 것으로 의도되지 않는다. 실시예들의 범위는 첨부된 청구항들에 의해 정의된다.

Claims (20)

  1. 압축된 데이터를 압축 해제하기 위한 전자 디바이스로서,
    디코딩 서브시스템을 포함하며, 상기 디코딩 서브시스템은:
    심볼 디코더; 및
    다수의 로컬 심볼 디코더들 및 심볼 선택기를 갖는 제2 심볼 리졸버(resolver)를 포함하며;
    상기 심볼 디코더는:
    상기 압축된 데이터의 블록에서 심볼이 이용 가능한 제1 코드로부터 제1 심볼을 디코딩하도록;
    상기 제1 코드의 길이를 상기 제2 심볼 리졸버 내의 상기 심볼 선택기로 전달하도록; 그리고
    상기 디코딩 서브시스템으로부터 출력될 상기 제1 심볼을 제공하도록 구성되고,
    상기 제2 심볼 리졸버는:
    상기 심볼 디코더에서 상기 제1 심볼을 디코딩하는 것과 실질적으로 병렬로, 각 로컬 심볼 디코더에서, 상기 압축된 데이터의 상기 블록의 각 서브블록에서 심볼이 이용 가능한 제1 코드로부터 각 심볼을 디코딩하도록;
    상기 심볼 선택기에서, 상기 심볼 디코더로부터 수신되는 상기 길이에 기초하여, 상기 로컬 심볼 디코더들로부터의 상기 각 심볼들 중 하나를 제2 심볼로서 선택하도록; 그리고
    상기 심볼 선택기에 의해, 상기 디코딩 서브시스템으로부터 출력될 상기 제2 심볼을 제공하도록 구성되는 것인, 전자 디바이스.
  2. 제1항에 있어서,
    상기 압축된 데이터의 상기 블록은 다수의 비트들을 포함하고;
    각 로컬 심볼 디코더에 대한 상기 압축된 데이터의 상기 블록의 상기 각 서브블록은 상기 압축된 데이터의 상기 블록 내의 상기 다수의 비트들 중의 상이한 이웃하는 비트 시퀀스를 포함하며, 상기 이웃하는 비트 시퀀스들 각각은 특정 비트 수를 포함하는 것인, 전자 디바이스.
  3. 제2항에 있어서, 상기 특정 비트 수는 상기 로컬 심볼 디코더들에 대한 최대 코드 길이에 기초하여 설정되는 것인, 전자 디바이스.
  4. 제1항에 있어서,
    상기 압축된 데이터의 상기 블록의 상기 각 서브블록에서 심볼이 이용 가능한 코드가 없을 때, 각 로컬 심볼 디코더는 각 심볼을 디코딩하지 않고;
    모든 상기 로컬 심볼 디코더들이 각 심볼을 디코딩하지 않을 때, 상기 심볼 선택기는 상기 디코딩 서브시스템으로부터 출력될 제2 심볼을 제공하지 않는 것인, 전자 디바이스.
  5. 제1항에 있어서, 상기 심볼 디코더 중의 각 심볼 디코더 및 상기 로컬 심볼 디코더들은:
    하나 이상의 매치 유닛을 포함하며, 각 매치 유닛은 대응하는 특정 길이의 코드들을 상기 대응하는 특정 길이의 압축된 데이터의 부분들과 비교하고, 매칭이 발견될 때, 상기 특정 길이의 코드들과 연관된 심볼들을 제공하되, 해당 심볼 디코더는 하나의 비트로부터 해당 심볼 디코더에 대한 최대 코드 길이와 동일한 수의 비트들까지의 각 대응하는 특정 길이에 대한 개별 매치 유닛을 포함하는 것인, 전자 디바이스.
  6. 제5항에 있어서, 상기 대응하는 특정 길이의 상기 압축된 데이터의 부분들은 상기 압축된 데이터에서의 하위 비트 위치들을 포함하는 것인, 전자 디바이스.
  7. 제5항에 있어서, 상기 디코딩 서브시스템은 또한:
    상기 압축된 데이터를 수신하고, 상기 심볼 디코더 및 상기 제2 심볼 리졸버에, 그 내부에서의 디코딩을 위해, 상기 압축된 데이터의 블록들 및 서브블록들을 각각 제공하는 수신기를 더 포함하며;
    상기 수신기는 상기 압축된 데이터의 블록에서 상기 심볼 디코더 및 상기 제2 심볼 리졸버에 의해 발견된 코드들의 길이들에 기초하여 상기 압축된 데이터의 다음 블록 및 다음 서브블록들을 선택하는 것인, 전자 디바이스.
  8. 제1항에 있어서, 상기 전자 디바이스는:
    상기 제1 심볼 및 상기 각 심볼들의 상기 디코딩의 타이밍을 제어하기 위해 사용되는 클록 신호를 상기 심볼 디코더 및 상기 제2 심볼 리졸버에 제공하는 클록 소스를 더 포함하며, 상기 제1 심볼 및 상기 각 심볼들의 상기 디코딩은 동일한 하나 이상의 클록 사이클에서 일어나는 것인, 전자 디바이스.
  9. 제1항에 있어서,
    다수의 추가 로컬 심볼 디코더들 및 추가 심볼 선택기를 갖는 적어도 하나의 추가 심볼 리졸버를 더 포함하며, 상기 적어도 하나의 추가적인 심볼 리졸버는:
    상기 심볼 디코더에서 상기 제1 심볼을 디코딩하는 것과 실질적으로 병렬로, 각 추가 로컬 심볼 디코더에서, 상기 압축된 데이터의 상기 블록의 각 추가 서브블록에서 심볼이 이용 가능한 제1 코드로부터 각 심볼을 디코딩하도록;
    상기 추가 심볼 선택기에서, 상기 심볼 디코더 및 상기 심볼 리졸버에서의 상기 코드들의 조합된 길이에 기초하여, 상기 추가 로컬 심볼 디코더들로부터의 상기 각 심볼들 중 하나를 추가 심볼로서 선택하도록; 그리고
    상기 추가 심볼 선택기에 의해, 상기 디코딩 서브시스템으로부터 출력될 상기 추가 심볼을 제공하도록 구성되는 것인, 전자 디바이스.
  10. 제1항에 있어서,
    상기 디코딩 서브시스템으로부터 출력되는 상기 제1 심볼 및/또는 제2 심볼을 수신하고, 상기 제1 심볼 및/또는 제2 심볼을 하나 이상의 후속 동작에 사용하는 엔티티를 더 포함하는, 전자 디바이스.
  11. 심볼 디코더, 및 다수의 로컬 심볼 디코더들 및 심볼 선택기를 갖는 제2 심볼 리졸버를 포함하는 디코딩 서브시스템을 포함하는 전자 디바이스에서 압축된 데이터를 압축 해제하기 위한 방법으로서,
    상기 심볼 디코더에 의해, 상기 압축된 데이터의 블록에서 심볼이 이용 가능한 제1 코드로부터 제1 심볼을 디코딩하는 단계;
    상기 심볼 디코더에 의해, 상기 제1 코드의 길이를 상기 제2 심볼 리졸버 내의 상기 심볼 선택기로 전달하는 단계;
    상기 심볼 디코더에 의해, 상기 디코딩 서브시스템으로부터 출력될 상기 제1 심볼을 제공하는 단계;
    상기 심볼 디코더에서 상기 제1 심볼을 디코딩하는 것과 실질적으로 병렬로, 상기 제2 심볼 리졸버 내의 각 로컬 심볼 디코더에 의해, 상기 압축된 데이터의 상기 블록의 각 서브블록에서 심볼이 이용 가능한 제1 코드로부터 각 심볼을 디코딩하는 단계;
    상기 제2 심볼 리졸버 내의 상기 심볼 선택기에 의해, 상기 심볼 디코더로부터 수신되는 상기 길이에 기초하여, 상기 로컬 심볼 디코더들로부터의 상기 각 심볼들 중 하나를 제2 심볼로서 선택하는 단계; 및
    상기 제2 심볼 리졸버 내의 상기 심볼 선택기에 의해, 상기 디코딩 서브시스템으로부터 출력될 상기 제2 심볼을 제공하는 단계를 포함하는, 방법.
  12. 제11항에 있어서,
    상기 압축된 데이터의 상기 블록은 다수의 비트들을 포함하고;
    각 로컬 심볼 디코더에 대한 상기 압축된 데이터의 상기 블록의 상기 각 서브블록은 상기 압축된 데이터의 상기 블록 내의 상기 다수의 비트들 중의 상이한 이웃하는 비트 시퀀스를 포함하며, 상기 이웃하는 비트 시퀀스들 각각은 특정 비트 수를 포함하는 것인, 방법.
  13. 제12항에 있어서, 상기 특정 비트 수는 상기 로컬 심볼 디코더들에 대한 최대 코드 길이에 기초하여 설정되는 것인, 방법.
  14. 제11항에 있어서,
    상기 제2 심볼 리졸버 내의 각 로컬 심볼 디코더에 의해, 상기 압축된 데이터의 상기 블록의 상기 각 서브블록에서 심볼이 이용 가능한 코드가 없을 때 어떠한 각 심볼도 디코딩하지 않는 단계; 및
    모든 상기 로컬 심볼 디코더들이 각 심볼을 디코딩하지 않을 때, 상기 제2 심볼 리졸버 내의 상기 심볼 선택기에 의해, 상기 디코딩 서브시스템으로부터 출력될 어떠한 상기 제2 심볼도 제공하지 않는 단계를 더 포함하는, 방법.
  15. 제11항에 있어서,
    상기 심볼 디코더 중의 각 심볼 디코더 및 상기 로컬 심볼 디코더들은 하나 이상의 매치 유닛을 포함하며, 해당 심볼 디코더는 하나의 비트로부터 해당 심볼 디코더에 대한 최대 코드 길이와 동일한 비트 수까지의 각 대응하는 특정 길이에 대한 개별 매치 유닛을 포함하고;
    상기 방법은:
    해당 심볼 디코더 내의 각 매치 유닛에 의해, 상기 대응하는 특정 길이의 압축된 데이터의 부분들과 비교하는 단계, 및 매칭이 발견될 때, 상기 특정 길이의 코드들과 연관된 심볼들을 제공하는 단계를 더 포함하는, 방법.
  16. 제15항에 있어서, 상기 대응하는 특정 길이의 상기 압축된 데이터의 부분들은 상기 압축된 데이터에서의 하위 비트 위치들을 포함하는 것인, 방법.
  17. 제15항에 있어서, 상기 디코딩 서브시스템은 수신기를 포함하고, 상기 방법은 또한:
    상기 수신기에 의해, 상기 압축된 데이터를 수신하고, 상기 심볼 디코더 및 상기 제2 심볼 리졸버에, 그 내부에서의 디코딩을 위해, 상기 압축된 데이터의 블록들 및 서브블록들을 각각 제공하는 단계; 및
    상기 수신기에 의해, 상기 압축된 데이터의 블록에서 상기 심볼 디코더 및 상기 제2 심볼 리졸버에 의해 발견된 코드들의 길이들에 기초하여 상기 압축된 데이터의 다음 블록 및 다음 서브블록들을 선택하는 단계를 더 포함하는, 방법.
  18. 제11항에 있어서,
    상기 전자 디바이스는 상기 제1 심볼 및 상기 각 심볼들의 상기 디코딩의 타이밍을 제어하기 위해 사용되는 클록 신호를 상기 심볼 디코더 및 상기 제2 심볼 리졸버에 제공하는 클록 소스를 포함하고;
    상기 방법은:
    상기 제1 심볼 및 상기 각 심볼들을 동일한 하나 이상의 클록 사이클에서 디코딩하는 단계를 더 포함하는, 방법.
  19. 제11항에 있어서,
    상기 전자 디바이스는 다수의 추가 로컬 심볼 디코더들 및 추가 심볼 선택기를 갖는 적어도 하나의 추가 심볼 리졸버를 포함하고;
    상기 방법은:
    상기 심볼 디코더에서 상기 제1 심볼을 디코딩하는 것과 실질적으로 병렬로, 상기 추가 심볼 리졸버 내의 각 추가 로컬 심볼 디코더에서, 상기 압축된 데이터의 상기 블록의 각 추가 서브블록에서 심볼이 이용 가능한 제1 코드로부터 각 심볼을 디코딩하는 단계;
    상기 추가 심볼 리졸버 내의 상기 추가 심볼 선택기에서, 상기 심볼 디코더 및 상기 심볼 리졸버에서의 상기 코드들의 조합된 길이에 기초하여, 상기 추가 로컬 심볼 디코더들로부터의 상기 각 심볼들 중 하나를 추가 심볼로서 선택하는 단계; 및
    상기 추가 심볼 리졸버 내의 상기 추가 심볼 선택기에 의해, 상기 디코딩 서브시스템으로부터 출력될 상기 추가 심볼을 제공하는 단계를 더 포함하는, 방법.
  20. 제11항에 있어서,
    상기 전자 디바이스 내의 엔티티에 의해, 상기 디코딩 서브시스템으로부터 출력되는 상기 제1 심볼 및/또는 제2 심볼을 수신하는 단계; 및
    상기 전자 디바이스 내의 상기 엔티티에 의해, 상기 제1 심볼 및/또는 제2 심볼을 하나 이상의 후속 동작에 사용하는 단계를 더 포함하는, 방법.
KR1020227010462A 2019-09-02 2020-09-01 다중 심볼 디코더 KR20220054651A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/558,274 US10917110B1 (en) 2019-09-02 2019-09-02 Multiple symbol decoder
US16/558,274 2019-09-02
PCT/US2020/048938 WO2021046051A1 (en) 2019-09-02 2020-09-01 Multiple symbol decoder

Publications (1)

Publication Number Publication Date
KR20220054651A true KR20220054651A (ko) 2022-05-03

Family

ID=74537369

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227010462A KR20220054651A (ko) 2019-09-02 2020-09-01 다중 심볼 디코더

Country Status (5)

Country Link
US (2) US10917110B1 (ko)
EP (1) EP4026248A4 (ko)
KR (1) KR20220054651A (ko)
CN (1) CN114342264A (ko)
WO (1) WO2021046051A1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10917110B1 (en) * 2019-09-02 2021-02-09 Ati Technologies Ulc Multiple symbol decoder
CN116539070B (zh) * 2023-07-04 2023-09-15 深圳砺驰半导体科技有限公司 旋转变压器的数字解码方法、芯片、系统、车机及介质

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5686916A (en) * 1995-12-28 1997-11-11 Philips Electronics North America Corp. Multi-code-book variable length decoder
US5808570A (en) * 1996-06-28 1998-09-15 Philips Electronics North America Corp. Device and method for pair-match Huffman transcoding and high-performance variable length decoder with two-word bit stream segmentation which utilizes the same
US6043765A (en) * 1997-09-26 2000-03-28 Silicon Engineering, Inc. Method and apparatus for performing a parallel speculative Huffman decoding using both partial and full decoders
US6653955B1 (en) * 2002-05-09 2003-11-25 Lsi Logic Corporation Multi-symbol variable length code decoder
US8627165B2 (en) * 2008-03-24 2014-01-07 Micron Technology, Inc. Bitwise operations and apparatus in a multi-level system
US9241163B2 (en) * 2013-03-15 2016-01-19 Intersil Americas LLC VC-2 decoding using parallel decoding paths
US9513919B2 (en) * 2015-04-28 2016-12-06 Intel Corporation Method and apparatus for speculative decompression
US9966991B2 (en) * 2015-07-28 2018-05-08 John David Terry Method and apparatus for secure network access and group membership in a digital chaos cooperative network
US9484954B1 (en) * 2015-09-10 2016-11-01 Intel Corporation Methods and apparatus to parallelize data decompression
US10334334B2 (en) * 2016-07-22 2019-06-25 Intel Corporation Storage sled and techniques for a data center
US9819359B1 (en) * 2016-12-11 2017-11-14 Microsoft Technology Licensing, Llc Multi-symbol, multi-format, parallel symbol decoder for hardware decompression engines
US9906239B1 (en) * 2017-06-28 2018-02-27 Ati Technologies Ulc GPU parallel huffman decoding
US10917110B1 (en) * 2019-09-02 2021-02-09 Ati Technologies Ulc Multiple symbol decoder

Also Published As

Publication number Publication date
EP4026248A4 (en) 2023-10-04
EP4026248A1 (en) 2022-07-13
US10917110B1 (en) 2021-02-09
US20210159913A1 (en) 2021-05-27
CN114342264A (zh) 2022-04-12
US20210067171A1 (en) 2021-03-04
WO2021046051A1 (en) 2021-03-11
US11424761B2 (en) 2022-08-23

Similar Documents

Publication Publication Date Title
US8988257B2 (en) Data compression utilizing variable and limited length codes
CN103326732B (zh) 压缩数据的方法、解压数据的方法、编码器和解码器
EP2104236B1 (en) Table device, variable-length encoding device, variable-length decoding device, and variable-length encoding/decoding device
JP3778087B2 (ja) データ符号化装置及びデータ復号装置
US9094039B2 (en) Efficient deflate decompression
JPH07283739A (ja) 短ブロックのデータを圧縮、伸長するための方法、及び装置
KR20150037937A (ko) 상태 기계 엔진에 의해 수신된 데이터를 핸들링하기 위한 방법들 및 시스템들
US7375660B1 (en) Huffman decoding method
US11424761B2 (en) Multiple symbol decoder
US20230153111A1 (en) Decompression Engine for Decompressing Compressed Input Data that Includes Multiple Streams of Data
JP2017073615A (ja) 符号化プログラム、符号化方法、符号化装置、復号化プログラム、復号化方法および復号化装置
JPH03503707A (ja) 統計的にコード化されたデジタル・データを復号するシステム
US9787323B1 (en) Huffman tree decompression
JP2016052046A (ja) 圧縮装置、伸長装置およびストレージ装置
US11593311B2 (en) Compression system with longest match processing for generating compressed data
Akil et al. FPGA-based architecture for hardware compression/decompression of wide format images
US20240106459A1 (en) Compression device and compression method
KR100686354B1 (ko) 가변 트리를 이용한 허프만 복호화 방법 및 장치
JP7305609B2 (ja) 受信したデータを処理する装置
US20230237278A1 (en) Large-scale text data encoding and compression
JP2023132713A (ja) データ伸張装置、メモリシステム、およびデータ伸張方法
KR20220046796A (ko) 전자 장치 및 그 제어 방법
JP2005175926A (ja) 復号装置及び方法
JP2010258927A (ja) 符号データ処理装置、方法及びプログラム
JPH03179520A (ja) データデコーダ