IP Library › Granted Patent US 11,152,952
Granted Patent B2
US 11,152,952 · App. 16/847,645 · Granted Oct 19, 2021

Channel-parallel compression with random memory access

Inventor: Ilia Ovsiannikov (Porter Ranch, CA)
H03M7/3066G06F9/30018G06F9/30036G06F9/30145G06F9/3818G06F9/3851H03M7/40H03M7/6005H03M7/6011H03M7/6023H04L5/023
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 11,152,952
App. No.
16/847,645
Granted
Oct 19, 2021
Kind
B2
Abstract

A data compressor includes a zero-value remover, a zero bit mask generator, a plurality of multiplexers, and a row-pointer generator. The zero-value remover receives 2 N bit streams of values and outputs 2 N non-zero-value bit streams having zero values removed. The zero bit mask generator generates a zero bit mask for a predetermined number of values of each bit stream that indicates a location of a zero value in the predetermined number of values corresponding to the zero bit mask. Each input of a multiplexer in a first column of the multiplexers receives a respective bit stream of the 2 N bit streams of non-zero values. The multiplexers in a last column outputting 2 N bit streams of values as packed non-zero values in which each output bit stream has a same bit-stream length. The row-pointer generator generates a row-pointer for each respective non-zero-value bit stream in a group of packed non-zero values.

Claims (51)

1. A data compressor, comprising:

a zero-value remover that receives 2 N bit streams of values in which N is an integer greater than 1 and outputs 2 N non-zero-value bit streams having zero values removed from each respective bit stream;

a zero bit mask generator that receives the 2 N bit streams of values and generates a zero bit mask for a predetermined number of values of each bit stream, each zero bit mask indicating a location of a zero value in the predetermined number of values corresponding to the zero bit mask;

a plurality of multiplexers that receives the 2 N non-zero-value bit streams output from the zero-value remover, the plurality of multiplexers being arranged in 2 N rows and N columns, each input of a multiplexer in a first column receiving a respective bit stream of the 2 N bit streams of non-zero values, each respective non-zero-value bit stream comprising a bit-stream length based on data in the non-zero-value bit stream, and the multiplexers in a last column outputting 2 N bit streams of values as a group of packed non-zero values, each output bit stream having a same bit-stream length; and

a row-pointer generator that generates a row-pointer for each respective non-zero-value bit stream in the group of packed non-zero values.

2. The data compressor of claim 1 , further comprising a memory-write arbiter that receives the group of packed non-zero values, zero bit masks corresponding to the 2 N bit streams formed into the group of packed non-zero values, and the row-pointers for the group of packed non-zero values, the memory-write arbiter sending for storage the group of packed non-zero values, the zero bit masks corresponding to the group of packed non-zero values or the row-pointers for the group of packed non-zero values.

3. The data compressor of claim 2 , wherein the memory-write arbiter sends for storage the group of packed non-zero values, the zero bit masks corresponding to the group of packed non-zero values or the row-pointers for the group of packed non-zero values based on a respective accumulated length of the group of packed non-zero values, the zero bit masks corresponding to the group of packed non-zero values or the row-pointers for the group of packed non-zero values.

4. The data compressor of claim 2 , further comprising a memory comprising a variable-sized non-zero value storage area that stores the group of packed non-zero values, and a metadata storage area that stores the zero bit masks corresponding to the group of packed non-zero values and the row-pointers for the group of packed non-zero values.

5. The data compressor of claim 2 , further comprising a controller that controls the plurality of multiplexers so that the multiplexers in column N output the 2 N bit streams as the group of packed non-zero values.

6. The data compressor of claim 2 , further comprising a data decompressor, the data decompressor comprising:

a memory-read arbiter that receives the row-pointers for the group of packed non-zero values, the zero bit masks corresponding to the group of packed non-zero values, and the group of packed non-zero values based on the row-pointers for the group of packed non-zero values;

a non-zero values unpacker that receives the group of packed non-zero values received and forms 2 N bit streams of packed non-zero values;

a zero-value mask unpacker that receives the zero bit masks corresponding to the group of packed non-zero values; and

a zero-value inserter that inserts zero values into each bit stream of packed non-zero values based on the zero bit masks corresponding to the bit stream of packed non-zero values.

7. The data compressor of claim 6 , wherein the non-zero values unpacker comprises:

a plurality of multiplexers arranged in 2 N rows and N columns, each input of a multiplexer in a first column receiving a respective bit stream of the 2 N bit-streams of packed non-zero values, each respective bit stream of packed non-zero values comprising a same bit-stream length, the multiplexers in a last column outputting 2 N bits streams each having a bit stream length corresponding to unpacked data of the bit stream; and

a controller that controls the multiplexers so that the multiplexers in column N output the 2 N bit streams of unpacked bit streams.

8. A data compressor, comprising:

a zero-value remover that receives 8 bit streams of values and outputs 8 non-zero-value bit streams having zero values removed from each respective bit stream;

a zero bit mask generator that receives the 8 bit streams of values and generates a zero bit mask for 16 values of each bit stream, each zero bit mask indicating a location of a zero value in the 16 values corresponding to the zero bit mask;

a plurality of multiplexers that receives the 8 non-zero-value bit streams output from the zero-value remover, the plurality of multiplexers being arranged in 8 rows and 3 columns, each input of a multiplexer in a first column receiving a respective bit stream of the 8 bit streams of non-zero values, each respective non-zero-value bit stream comprising a bit-stream length based on data in the non-zero-value bit stream, and the multiplexers in a last column outputting 8 bit streams of values as a group of packed non-zero values, each output bit stream having a same bit-stream length; and

a row-pointer generator that generates a row-pointer for each respective non-zero-value bit stream in the group of packed non-zero values.

9. The data compressor of claim 8 , further comprising a memory-write arbiter that receives the group of packed non-zero values, zero bit masks corresponding to the 8 bit streams formed into the group of packed non-zero values, and the row-pointers for the group of packed non-zero values, the memory-write arbiter sending the group of packed non-zero values, the zero bit masks corresponding to the group of packed non-zero values or the row-pointers for the group of packed non-zero values for storage.

10. The data compressor of claim 9 , wherein the memory-write arbiter sends the group of packed non-zero values, the zero bit masks corresponding to the group of packed non-zero values or the row-pointers for the group of packed non-zero values for storage based on a respective accumulated length of the group of packed non-zero values, the zero bit masks corresponding to the group of packed non-zero values or the row-pointers for the group of packed non-zero values.

11. The data compressor of claim 9 , further comprising a memory comprising a variable-sized non-zero value storage area that stores the group of packed non-zero values, and a metadata storage area that stores the zero bit masks corresponding to the group of packed non-zero values and the row-pointers for the group of packed non-zero values.

12. The data compressor of claim 9 , wherein the non-zero values packer comprises a controller that controls the plurality of multiplexers so that the multiplexers in column 3 output the 8 bit streams as the group of packed non-zero values.

13. The data compressor of claim 9 , further comprising a data decompressor, the data decompressor comprising:

a memory-read arbiter that receives the row-pointers for the group of packed non-zero values, the zero bit masks corresponding to the group of packed non-zero values, and the group of packed non-zero values based on the row-pointers for the group of packed non-zero values;

a non-zero values unpacker that receives the group of packed non-zero values and forms 8 bit streams of packed non-zero values;

a zero-value mask unpacker that receives the zero bit masks corresponding to the group of packed non-zero values; and

a zero-value inserter that inserts zero values into each bit stream of packed non-zero values based on the zero bit masks corresponding to the bit stream of packed non-zero values.

14. The data compressor of claim 13 , wherein the non-zero values unpacker comprises:

a plurality of multiplexers arranged in 2 N rows and N columns, each input of a multiplexer in a first column receiving a respective bit stream of the 2 N bit-streams of packed non-zero values, each respective bit stream of packed non-zero values comprising a same bit-stream length, the multiplexers in a last column outputting 2 N bits streams each having a bit stream length corresponding to unpacked data of the bit stream; and

a controller that controls the multiplexers so that the multiplexers in column N output the 2 N bit streams of unpacked bit streams.

15. A data decompressor, comprising:

a memory-read arbiter that receives row-pointers for a group of packed non-zero values, zero bit masks corresponding to the group of packed non-zero values, and the group of packed non-zero values based on the row-pointers for the group of packed non-zero values;

a plurality of multiplexers that receives the group of packed non-zero-values from the memory-read arbiter, the plurality of multiplexers being arranged in an 2 N rows and N columns in which N is an integer greater than 1, each input of a multiplexer in a first column receiving a respective bit stream of the 2 N bit-streams of packed non-zero values, each respective bit stream of packed non-zero values comprising a same bit-stream length, the multiplexers in a last column outputting 2 N bits streams each having a bit stream length corresponding to unpacked data of the bit stream;

a zero-value mask unpacker that receives the zero bit masks corresponding to the group of packed non-zero values; and

a zero-value inserter that inserts zero values into each bit stream of packed non-zero values based on the zero bit masks corresponding to the bit stream of packed non-zero values.

16. The data decompressor of claim 15 , further comprising a controller that controls the multiplexers so that the multiplexers in column N output the 2 N bit streams of unpacked bit streams.

17. The data decompressor of claim 15 , further comprising a data compressor, the data decompressor comprising:

a zero-value remover that receives 2 N bit streams of values and outputs 2 N non-zero-value bit streams having zero values removed from each respective bit stream;

a zero bit mask generator that receives the 2 N bit streams of values and generates a zero bit mask for a predetermined number of values of each bit stream, each zero bit mask indicating a location of a zero value in the predetermined number of values corresponding to the zero bit mask;

a non-zero values packer that receives the 2 N non-zero-value bit streams and forms a group of packed non-zero values that are arranged based on a bit stream identifier;

a row-pointer generator that generates a row-pointer for each respective non-zero-value bit stream in the group of packed non-zero values; and

a memory-write arbiter that receives the group of packed non-zero values, zero bit masks corresponding to the 2 N bit streams formed into the group of packed non-zero values, and the row-pointers for the group of packed non-zero values, the memory-write arbiter sending the group of packed non-zero values, the zero bit masks corresponding to the group of packed non-zero values or the row-pointers for the group of packed non-zero values for storage.

18. The data decompressor of claim 17 , wherein the memory-write arbiter sends the group of packed non-zero values, the zero bit masks corresponding to the group of packed non-zero values or the row-pointers for the group of packed non-zero values for storage based on a respective accumulated length of the group of packed non-zero values, the zero bit masks corresponding to the group of packed non-zero values or the row-pointers for the group of packed non-zero values.

19. The data decompressor of claim 17 , further comprising a memory comprising a variable-sized non-zero value storage area that stores the group of packed non-zero values, and a metadata storage area that stores the zero bit masks corresponding to the group of packed non-zero values and the row-pointers for the group of packed non-zero values.

20. The data decompressor of claim 17 , wherein the non-zero values packer comprises:

a plurality of multiplexers that receive the group of packed non-zero values from the memory-read arbiter, the plurality of multiplexers being arranged in 2 N rows and N columns, each input of a multiplexer in a first column receiving a respective bit stream of the 2 N bit streams of non-zero values, each respective non-zero-value bit stream comprising a bit-stream length based on data in the non-zero-value bit stream, and the multiplexers in a last column outputting 2 N bit streams of values as the group of packed non-zero values, each output bit stream having a same bit-stream length; and

a controller that controls the non-zero values packer so that the multiplexers in column N output the 2 N bit streams as the group of packed non-zero values.

Continuity (4)
Continuation 16842662 · Apr 7, 2020
Provisional Application 62841819 · May 1, 2019
Provisional Application 62835496 · Apr 17, 2019
Related Publication 20200336154A1 · Oct 22, 2020