IP Library Granted Patent US 9,100,042
Granted Patent B2
US 9,100,042 · App. 13/922,964 · Granted Aug 4, 2015

High throughput decoding of variable length data symbols

View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 9,100,042
App. No.
13/922,964
Granted
Aug 4, 2015
Kind
B2
Abstract

A method of decoding data includes: receiving an encoded data stream transmitted as a plurality of variable length symbols; dividing the data stream into a sequence of blocks, each block having a sequence of adjacent bit positions starting a first bit position and ending with a last bit position; pre-processing each block prior to fully decoding each block, wherein pre-processing includes, for each block, selecting a bit position in a current block and determining a starting position of a first symbol in an adjacent block based on the selected bit position, wherein determining is initially performed for the last bit position in the current block, and is repeated sequentially for each preceding bit position through and including the first bit position; and fully decoding each block by decoding a first block starting at the first bit position and decoding each adjacent block starting at the starting position.

Claims (28)

1. An apparatus for decoding data, comprising:

processing circuitry including a pre-processing engine and a decoding pipeline, the processing circuitry configured to perform:

receiving a data stream, the data stream encoded by an encoding algorithm and transmitted as a plurality of variable length symbols;

dividing the data stream into a sequence of blocks, each block having a sequence of adjacent bit positions starting with a first bit position and ending with a last bit position;

pre-processing each block prior to fully decoding each block by the pre-processing engine, wherein pre-processing includes, for each block, selecting a bit position in a current block and determining a starting position of a first symbol in an adjacent block based on the selected bit position, wherein determining is initially performed for the last bit position in the current block, and is repeated sequentially for each preceding bit position through and including the first bit position; and

inputting the data stream into the pipeline and fully decoding each block by decoding a first block starting at the first bit position and decoding each adjacent block starting at the starting position.

2. The apparatus of claim 1 , wherein the encoding algorithm is a compression algorithm, and decoding includes expanding data represented by each symbol to recreate an original data stream.

3. The apparatus of claim 1 , wherein determining the starting position includes identifying a symbol and determining the starting position based on a length of the symbol.

4. The apparatus of claim 1 , wherein determining the starting position includes storing the starting position in a table indexed to the current block and the selected bit position.

5. The apparatus of claim 3 , wherein determining the starting position includes:

determining the length of the identified symbol that would begin at the selected bit position; and

calculating a position of a following symbol by adding the length of the identified symbol to the selected bit position.

6. The apparatus of claim 5 , wherein calculating the starting position includes:

responsive to the position of the following symbol being in the adjacent block, recording the position as the starting position in the table; and

responsive to the position of the following symbol being in the selected block, reading the starting position of the first symbol in the next block from an entry in the table corresponding to the position, and recording the starting position in the table.

7. The apparatus of claim 1 , wherein the pre-processing engine is configured to pre-process two or more of the blocks in parallel.

8. A computer program product for decoding data, the computer program product comprising:

a non-transitory tangible storage medium readable by a processing circuit and storing instructions for execution by the processing circuit for performing:

receiving a data stream, the data stream encoded by an encoding algorithm and transmitted as a plurality of variable length symbols;

dividing the data stream into a sequence of blocks, each block having a sequence of adjacent bit positions starting with a first bit position and ending with a last bit position;

pre-processing each block prior to fully decoding each block, wherein pre-processing includes, for each block, selecting a bit position in a current block and determining a starting position of a first symbol in an adjacent block based on the selected bit position, wherein determining is initially performed for the last bit position in the current block, and is repeated sequentially for each preceding bit position through and including the first bit position; and

fully decoding each block by decoding a first block starting at the first bit position and decoding each adjacent block starting at the starting position.

9. The computer program product of claim 8 , wherein determining the starting position includes identifying a symbol and determining the starting position based on a length of the symbol, and storing the starting position in a table indexed to the current block and the selected bit position.

10. The computer program product of claim 9 , wherein determining the starting position includes:

determining the length of the identified symbol that would begin at the selected bit position;

calculating a position of a following symbol by adding the length of the identified symbol to the selected bit position;

responsive to the position of the following symbol being in the adjacent block, recording the position as the starting position in the table; and

responsive to the position of the following symbol being in the selected block, reading the starting position of the first symbol in the next block from an entry in the table corresponding to the position, and recording the starting position in the table.

Assignments (8)
RELEASE OF SECURITY INTEREST Recorded May 12, 2021
From: WILMINGTON TRUST, NATIONAL ASSOCIATION
To: GLOBALFOUNDRIES U.S. INC.
Reel/Frame 056987/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 29, 2021
From: GLOBALFOUNDRIES US INC.
To: MEDIATEK INC.
Reel/Frame 055173/0781 →
RELEASE OF SECURITY INTEREST Recorded Nov 20, 2020
From: WILMINGTON TRUST, NATIONAL ASSOCIATION
To: GLOBALFOUNDRIES INC.
Reel/Frame 054636/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Nov 2, 2020
From: GLOBALFOUNDRIES INC.
To: GLOBALFOUNDRIES U.S. INC.
Reel/Frame 054633/0001 →
SECURITY AGREEMENT Recorded Nov 29, 2018
From: GLOBALFOUNDRIES INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION
Reel/Frame 049490/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Oct 5, 2015
From: GLOBALFOUNDRIES U.S. 2 LLC; GLOBALFOUNDRIES U.S. INC.
To: GLOBALFOUNDRIES INC.
Reel/Frame 036779/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Sep 3, 2015
From: INTERNATIONAL BUSINESS MACHINES CORPORATION
To: GLOBALFOUNDRIES U.S. 2 LLC
Reel/Frame 036550/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jun 20, 2013
From: MARTIN, ANDREW K.
To: INTERNATIONAL BUSINESS MACHINES CORPORATION
Reel/Frame 030654/0905 →