System and method for performing scalable embedded parallel data compression
First Claim
1. A method for performing parallel compression of data, the method comprising:
- receiving uncompressed data, wherein the uncompressed data comprises a plurality of symbols;
maintaining a history table comprising entries, wherein each entry comprises at least one symbol;
comparing the plurality of symbols with entries in the history table in a parallel fashion, wherein said comparing produces compare results;
determining match information for each of said plurality of symbols based on the compare results; and
outputting compressed data in response to the match information, wherein said outputting compressed data includes outputting a count value and an entry pointer for a contiguous match, wherein the entry pointer points to the entry in the history table which produced the contiguous match, wherein the count value indicates a number of matching symbols in the contiguous match;
wherein said outputting the count value includes encoding a value representing the count value;
wherein more often occurring counts are encoded with fewer bits than less often occurring counts.
5 Assignments
0 Petitions
Accused Products
Abstract
A system and method for performing parallel data compression which processes stream data at more than a single byte or symbol (character) at one time. The parallel compression engine modifies a single stream dictionary based (or history table based) data compression method, such as that described by Lempel and Ziv, to provide a scalable, high bandwidth compression. The parallel compression method examines a plurality of symbols in parallel, thus providing greatly increased compression performance. The method first involves receiving uncompressed data, wherein the uncompressed data comprises a plurality of symbols. The method maintains a history table comprising entries, wherein each entry comprises at least one symbol. The method operates to compare a plurality of symbols with entries in the history table in a parallel fashion, wherein this comparison produces compare results. The method then determines match information for each of the plurality of symbols based on the compare results. The step of determining match information involves determining zero or more matches of the plurality of symbols with each entry in the history table. The method then outputs compressed data in response to the match information.
320 Citations
186 Claims
-
1. A method for performing parallel compression of data, the method comprising:
-
receiving uncompressed data, wherein the uncompressed data comprises a plurality of symbols;
maintaining a history table comprising entries, wherein each entry comprises at least one symbol;
comparing the plurality of symbols with entries in the history table in a parallel fashion, wherein said comparing produces compare results;
determining match information for each of said plurality of symbols based on the compare results; and
outputting compressed data in response to the match information, wherein said outputting compressed data includes outputting a count value and an entry pointer for a contiguous match, wherein the entry pointer points to the entry in the history table which produced the contiguous match, wherein the count value indicates a number of matching symbols in the contiguous match;
wherein said outputting the count value includes encoding a value representing the count value;
wherein more often occurring counts are encoded with fewer bits than less often occurring counts.- View Dependent Claims (2, 3, 4, 5, 6, 7, 8)
for non-matching symbols which do not match any entry in the history table, outputting the non-matching symbols.
-
-
3. The method of claim 1, further comprising:
-
repeating said steps of receiving, maintaining, comparing, and determining one or more times until no more data is available; and
when no more data is available, outputting compressed data for any remaining match in the history table.
-
-
4. The method of claim 1, wherein said determining match information includes determining matches of said plurality of symbols with entries in the history table.
-
5. The method of claim 1, further comprising:
-
maintaining count information including a count of prior matches which occurred when previous symbols were compared with entries in the history table;
wherein said determining match information operates to determine the match information for each of said plurality of symbols based on the count information and the compare results.
-
-
6. The method of claim 5, wherein the count information includes the count of prior matches and a count flag that is maintained for each entry in the history table.
-
7. The method of claim 5, wherein the count information includes a current count that is maintained for each entry in the history table.
-
8. The method of claim 1, further comprising:
-
maintaining a current count of prior matches which occurred when previous symbols were compared with entries in the history table, wherein a count flag is maintained for each entry in the history table;
wherein said determining match information operates to determine the match information for each of said plurality of symbols based on the current count, the count flags and the compare results.
-
-
9. A method for performing parallel compression of data, wherein the method maintains a history table comprising entries, wherein each entry comprises at least one symbol, the method comprising:
-
a) receiving uncompressed data, wherein the uncompressed data comprises a plurality of symbols, wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols;
b) comparing the plurality of symbols with each entry in the history table in a parallel fashion, wherein said comparing produces compare results;
wherein the method maintains a current count of prior matches which occurred when previous symbols were compared with entries in the history table;
c) determining match information for each of said plurality of symbols based on the current count and the compare results, wherein said determining match information includes;
if at least one contiguous match occurs with one or more respective contiguous middle symbols, and the one or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the respective contiguous middle symbols, then;
selecting the one or more largest non-overlapping contiguous matches involving the one or more middle symbols; and
d) outputting compressed data in response to the match information, wherein said outputting compressed data includes outputting compressed data for each of the selected matches involving the one or more middle symbols. - View Dependent Claims (10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24)
outputting a count value and an entry pointer for a contiguous match, wherein the entry pointer points to the entry in the history table which produced the contiguous match, wherein the count value indicates a number of matching symbols in the contiguous match.
-
-
11. The method of claim 10, wherein said outputting the count value includes encoding a value representing the count value;
- wherein more often occurring counts are encoded with fewer bits than less often occurring counts.
-
12. The method of claim 9, wherein said outputting compressed data further includes:
for non-matching symbols which do not match any entry in the history table, outputting the non-matching symbols.
-
13. The method of claim 9, further comprising:
-
e) repeating steps a)-d) one or more times until no more data is available; and
f) when no more data is available, if the current count is non-zero, outputting compressed data for the remaining match in the history table.
-
-
14. The method of claim 9, wherein said determining match information includes determining matches of said plurality of symbols with entries in the history table.
-
15. The method of claim 9, wherein the method further maintains a count flag for each entry in the history table;
wherein said determining determines match information for each of said plurality of symbols based on the current count, the count flags, and the compare results.
-
16. The method of claim 15, wherein said determining match information includes:
resetting the count and count flags if the compare results indicate a contiguous match did not match one of the plurality of symbols.
-
17. The method of claim 15, wherein the count and count flags for all entries are reset based on the number of the plurality of symbols that did not match in the contiguous match.
-
18. The method of claim 9, wherein said determining match information includes:
updating the current count according to the compare results.
-
19. The method of claim 9, wherein said determining match information includes:
-
determining a contiguous match based on the current count and the compare results;
determining if the contiguous match has stopped matching;
if the contiguous match has stopped matching, then;
updating the current count according to the compare results; and
wherein said outputting compressed data includes outputting compressed data corresponding to the contiguous match.
-
-
20. The method of claim 19, wherein said outputting compressed data corresponding to the contiguous match comprises outputting a count value and an entry pointer, wherein the entry pointer points to the entry in the history table which produced the contiguous match, wherein the count value indicates a number of matching symbols in the contiguous match.
-
21. The method of claim 9, wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols;
-
wherein said determining match information includes;
if at least one contiguous match occurs with two or more respective contiguous middle symbols, and the two or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the respective contiguous middle symbols, then;
selecting the one or more largest non-overlapping contiguous matches involving the middle symbols;
wherein said outputting compressed data includes outputting compressed data for each of the selected matches involving the middle symbols.
-
-
22. The method of claim 9,
wherein the method further maintains a count flag for each entry in the history table; -
wherein said determining determines match information for each of said plurality of symbols based on the current count, the count flags, and the compare results;
wherein said determining match information and said outputting compressed data in response to the match information comprises;
determining matches of said plurality of symbols with entries in the history table;
examining the compare results for each entry;
for non-matching symbols which do not match any entry in the history table, outputting the non-matching symbols;
if any entry stopped matching, examining the current count, the count flags, and the compare results for every entry;
determining the contiguous match based on the current count and the compare results;
determining if the contiguous match has stopped matching;
if the contiguous match has stopped matching, then;
outputting a count value and an entry pointer, wherein the entry pointer points to the entry in the history table which produced the contiguous match, wherein the count value indicates a number of matching symbols in the contiguous match; and
updating the current count according to the compare results;
the method further comprising;
e) repeating steps a)-d) one or more times until no more data is available; and
f) when no more data is available, if the current count is non-zero, outputting a count value and an entry pointer for the remaining match in the history table.
-
-
23. The method of claim 9, wherein the plurality of symbols comprise a power of 2 number of symbols.
-
24. The method of claim 9, wherein the plurality of symbols comprise at least 4 symbols.
-
25. A method for performing parallel compression of data, wherein the method maintains a history table comprising entries, wherein each entry comprises one symbol, the method comprising:
-
a) receiving uncompressed data, wherein the uncompressed data comprises a plurality of symbols, wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols;
b) comparing the plurality of symbols with each entry in a history table in a parallel fashion, wherein said comparing produces compare results;
wherein the method maintains a current count of prior matches which occurred when previous symbols were compared with entries in the history table, wherein a count flag is maintained for each entry in the history table;
c) determining matches of said plurality of symbols with entries in the history table;
d) for non-matching symbols which do not match any entry in the history table, then outputting the non-matching symbols;
e) if any entry stopped matching, then examining current count, count flags and the compare results for every entry;
f) determining the contiguous match based on the current count, count flags and the compare results;
g) determining if the contiguous match has stopped matching;
h) if the contiguous match has stopped matching, then;
outputting a count value and an entry pointer, wherein the entry pointer points to the entry in the history table which produced the contiguous match, wherein the count value indicates a number of matching symbols in the contiguous match;
if at least one contiguous match occurs with one or more respective contiguous middle symbols, but the one or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the respective contiguous middle symbols, then;
selecting the largest non-overlapping contiguous matches involving the middle symbols;
outputting a count value and an entry pointer for each of the selected matches involving the middle symbols;
i) updating the current count according to the compare results;
j) repeating steps a)-i) one or more times until no more data is available;
k) when no more data is available, if the current count is non-zero, outputting a count value and an entry pointer for the remaining match in the history table. - View Dependent Claims (26)
-
-
27. A system for performing parallel compression of data, the system comprising:
-
an input for receiving uncompressed data, wherein the uncompressed data comprises a plurality of symbols;
a history table comprising entries, wherein each entry comprises at least one symbol;
a plurality of comparators for comparing the plurality of symbols with entries in the history table in a parallel fashion, wherein the plurality of comparators produce compare results;
match information logic coupled to the plurality of comparators for determining match information for each of said plurality of symbols based on the compare results; and
an output coupled to the match information logic for outputting compressed data in response to the match information, wherein said compressed data includes a count value and an entry pointer for a contiguous match, wherein the entry pointer points to the entry in the history table which produced the contiguous match, wherein the count value indicates a number of matching symbols in the contiguous match, wherein the count value comprises an encoded value representing the count value;
wherein more often occurring counts are encoded with fewer bits than less often occurring counts.- View Dependent Claims (28, 29, 30, 31, 32, 33, 34)
wherein the system operates one or more times until no more data is available; and
wherein, when no more data is available, if the current count is non-zero, the output outputs compressed data for the remaining match in the history table.
-
-
30. The system of claim 27, wherein the match information logic is operable to determine matches of said plurality of symbols with entries in the history table.
-
31. The system of claim 27, further comprising:
a memory which maintains count information including a count of prior matches which occurred when previous symbols were compared with entries in the history table.
-
32. The system of claim 31, wherein the count information includes the count of prior matches and a count flag that is maintained for each entry in the history table.
-
33. The system of claim 31, wherein the count information includes a current count that is maintained for each entry in the history table.
-
34. The system of claim 27, further comprising:
a memory which maintains a current count of prior matches which occurred when previous symbols were compared with entries in the history table, wherein the memory also maintains a count flag for each entry in the history table.
-
35. A system for performing parallel compression of data, the system comprising:
-
an input for receiving uncompressed data, wherein the uncompressed data comprises a plurality of symbols, wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols;
a history table comprising entries, wherein each entry comprises at least one symbol;
a plurality of comparators for comparing the plurality of symbols with each entry in the history table in a parallel fashion, wherein said plurality of comparators produce compare results;
a memory which maintains a current count of prior matches which occurred when previous symbols were compared with entries in the history table;
match information logic coupled to the plurality of comparators and the memory for determining match information for each of said plurality of symbols based on the current count and the compare results;
wherein, if at least one contiguous match occurs with one or more respective contiguous middle symbols, and the one or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the respective contiguous middle symbols, then the match information logic is operable to select the one or more largest non-overlapping contiguous matches involving the middle symbols; and
an output coupled to the match information logic for outputting compressed data in response to the match information, wherein the output is operable to output compressed data for each of the selected matches involving the middle symbols. - View Dependent Claims (36, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49)
wherein the system operates one or more times until no more data is available; and
wherein, when no more data is available, if the current count is non-zero, the output outputs compressed data for the remaining match in the history table.
-
-
40. The system of claim 35, wherein the match information logic is operable to determine matches of said plurality of symbols with entries in the history table.
-
41. The system of claim 35, wherein the memory further maintains a count flag for each entry in the history table;
wherein the match information logic determines match information for each of said plurality of symbols based on the current count, the count flags, and the compare results.
-
42. The system of claim 41, wherein the match information logic is operable to reset the current count and the count flags for all entries if the compare results indicate a contiguous match did not match one of the plurality of symbols.
-
43. The system of claim 41, wherein the current count and the count flags for all entries are reset based on the number of the plurality of symbols that did not match in the contiguous match.
-
44. The system of claim 35, wherein the match information logic is operable to update the current count according to the compare results.
-
45. The system of claim 35, wherein the match information logic is operable to:
-
determine a contiguous match based on the current count and the compare results;
determine if the contiguous match has stopped matching;
if the contiguous match has stopped matching, then;
update the current count according to the compare results; and
wherein the output is operable to output compressed data corresponding to the contiguous match.
-
-
46. The system of claim 45, wherein, in outputting compressed data corresponding to the contiguous match, the output is operable to output a count value and an entry pointer, wherein the entry pointer points to the entry in the history table which produced the contiguous match, wherein the count value indicates a number of matching symbols in the contiguous match.
-
47. The system of claim 35, wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols;
-
wherein, if at least one contiguous match occurs with two or more respective contiguous middle symbols, and the two or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the respective contiguous middle symbols, then the match information logic is operable to select the one or more largest non-overlapping contiguous matches involving the middle symbols;
wherein the output is operable to output compressed data for each of the selected matches involving the middle symbols.
-
-
48. The system of claim 35,
wherein the memory further maintains a count flag for each entry in the history table; -
wherein the match information logic determines match information for each of said plurality of symbols based on the current count, the count flags, and the compare results wherein the match information logic and the output are operable to;
determine matches of said plurality of symbols with entries in the history table;
examine the compare results for each entry;
for non-matching symbols which do not match any entry in the history table, output the non-matching symbols;
if any entry stopped matching, examine the current count, the count flags and the compare results for every entry;
determine the contiguous match based on the current count and the compare results;
determine if the contiguous match has stopped matching;
if the contiguous match has stopped matching, then;
output a count value and an entry pointer, wherein the entry pointer points to the entry in the history table which produced the contiguous match, wherein the count value indicates a number of matching symbols in the contiguous match; and
update the current count according to the compare results;
wherein the system operates one or more times until no more data is available; and
when no more data is available, if the current count is non-zero, output a count value and an entry pointer for the remaining match in the history table.
-
-
49. The system of claim 35, wherein the plurality of symbols comprise a power of 2 number of symbols.
-
37. The system of claim wherein the count value comprises an encoded value representing the count value;
- wherein more often occurring counts are encoded with fewer bits than less often occurring counts.
-
50. A memory controller, comprising:
-
memory control logic for controlling a memory, a parallel compression engine for compressing data, wherein the parallel compression engine is operable to;
maintain a history table comprising entries, wherein each entry comprises at least one symbol;
receive uncompressed data, wherein the uncompressed data comprises a plurality of symbols;
compare the plurality of symbols with entries in the history table in a parallel fashion, wherein said comparing produces compare results;
determine match information for each of the plurality of symbols based on the compare results; and
output compressed data in response to the match information. - View Dependent Claims (51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65)
wherein the parallel compression engine is operable to determine the match information for each of said plurality of symbols based on the count information and the compare results.
-
-
54. The memory controller of claim 50,
wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols; wherein, in determining match information, the parallel compression engine is operable to determine if a contiguous match occurs for one or more of the one or more middle symbols.
-
55. The memory controller of claim 50,
wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols; wherein, in determining match information, the parallel compression engine is operable to determine if a contiguous match occurs for one or more of the one or more middle symbols that does not involve a match with either the first symbol or the last symbol.
-
56. The memory controller of claim 55,
wherein, in determining match information, the parallel compression engine is further operable to determine if a contiguous match occurs involving one or more of the middle symbols and at least one of the first symbol or the last symbol. -
57. The memory controller of claim 50,
wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols; wherein, in determining match information, the parallel compression engine determines at least one contiguous match for one or more contiguous middle symbols that does not include either the first symbol or the last symbol.
-
58. The memory controller of claim 50,
wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols; wherein, in determining match information, the parallel compression engine is operable to determine if a contiguous match occurs for one or more respective contiguous middle symbols, wherein the one or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the one or more respective contiguous middle symbols.
-
59. The memory controller of claim 50,
wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols; wherein, in determining match information, the parallel compression engine is operable to determine if a contiguous match occurs for one or more of the plurality of middle symbols that does not involve a match with either the first symbol or the last symbol.
-
60. The memory controller of claim 59,
wherein, in determining match information, the parallel compression engine is further operable to determine if a contiguous match occurs involving one or more of the middle symbols and at least one of the first symbol or the last symbol. -
61. The memory controller of claim 50,
wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols; wherein, in determining match information, the parallel compression engine is operable to determine if a contiguous match occurs for two or more contiguous middle symbols of the plurality of middle symbols, wherein the contiguous match of the two or more contiguous middle symbols does not include either the first symbol or the last symbol.
-
62. The memory controller of claim 50,
wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols; wherein, in determining match information, the parallel compression engine is operable to determine if a plurality of different contiguous middle symbol matches occur among the plurality of middle symbols, wherein each of the plurality of different contiguous middle symbol matches does not include either the first symbol or the last symbol.
-
63. The memory controller of claim 50, wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols;
-
wherein, in determining match information, the parallel compression engine is operable to;
if at least one contiguous match occurs with one or more respective contiguous middle symbols , and the one or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the respective contiguous middle symbols, then;
select the one or more largest non-overlapping contiguous matches involving the one or more respective contiguous middle symbols;
wherein the parallel compression engine is operable to output compressed data for each of the selected matches involving the one or more respective contiguous middle symbols.
-
-
64. The memory controller of claim 50, wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols;
-
wherein, in determining match information, the parallel compression engine is operable to;
if at least one contiguous match occurs with one or more respective contiguous middle symbols of the plurality of middle symbols, and the one or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the respective contiguous middle symbols, then;
select the one or more largest non-overlapping contiguous matches involving the one or more respective contiguous middle symbols;
wherein the parallel compression engine is operable to output compressed data for each of the selected matches involving the one or more respective contiguous middle symbols.
-
-
65. The memory controller of claim 50, wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols;
-
wherein, in determining match information, the parallel compression engine is operable to;
if at least one contiguous match occurs with two or more respective contiguous middle symbols of the plurality of middle symbols, and the two or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the respective contiguous middle symbols, then;
select the one or more largest non-overlapping contiguous matches involving the two or more respective contiguous middle symbols;
wherein the parallel compression engine is operable to output compressed data for each of the selected matches involving the two or more respective contiguous middle symbols.
-
-
66. A memory controller, comprising:
-
memory control logic for controlling a memory;
a parallel compression engine for compressing data, wherein the parallel compression engine comprises;
an input for receiving uncompressed data, wherein the uncompressed data comprises a plurality of symbols;
a history table comprising entries, wherein each entry comprises at least one symbol;
a plurality of comparators for comparing the plurality of symbols with entries in the history table in a parallel fashion, wherein the plurality of comparators produce compare results;
match information logic coupled to the plurality of comparators for determining match information for each of said plurality of symbols based on the compare results; and
an output coupled to the match information logic for outputting compressed data in response to the match information. - View Dependent Claims (67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81)
a memory which maintains count information including a count of prior matches which occurred when previous symbols were compared with entries in the history table.
-
-
70. The memory controller of claim 66,
wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols; wherein the match information logic is operable to determine if a contiguous match occurs for one or more of the one or more middle symbols.
-
71. The memory controller of claim 66,
wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols; wherein the match information logic is operable to determine if a contiguous match occurs for one or more of the one or more middle symbols that does not involve a match with either the first symbol or the last symbol.
-
72. The memory controller of claim 71,
wherein the match information logic is further operable to determine if a contiguous match occurs involving one or more of the middle symbols and at least one of the first symbol or the last symbol. -
73. The memory controller of claim 66,
wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols; wherein the match information logic determines at least one contiguous match for one or more contiguous middle symbols that does not include either the first symbol or the last symbol.
-
74. The memory controller of claim 66,
wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols; wherein the match information logic is operable to determine if a contiguous match occurs for one or more respective contiguous middle symbols, wherein the one or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the one or more respective contiguous middle symbols.
-
75. The memory controller of claim 66,
wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols; wherein the match information logic is operable to determine if a contiguous match occurs for one or more of the plurality of middle symbols that does not involve a match with either the first symbol or the last symbol.
-
76. The memory controller of claim 75,
wherein the match information logic is further operable to determine if a contiguous match occurs involving one or more of the middle symbols and at least one of the fist symbol or the last symbol. -
77. The memory controller of claim 66,
wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols; wherein the match information logic is operable to determine if a contiguous match occurs for two or more contiguous middle symbols of the plurality of middle symbols, wherein the contiguous match of the two or more contiguous middle symbols does not include either the first symbol or the last symbol.
-
78. The memory controller of claim 66,
wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols; wherein the match information logic is operable to determine if a plurality of different contiguous middle symbol matches occur among the plurality of middle symbols, wherein each of the plurality of different contiguous middle symbol matches does not include either the first symbol or the last symbol.
-
79. The memory controller of claim 66, wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols;
-
wherein the match information logic is operable to;
if at least one contiguous match occurs with one or more respective contiguous middle symbols, and the one or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the respective contiguous middle symbols, then;
select the one or more largest non-overlapping contiguous matches involving the one or more respective contiguous middle symbols;
wherein the output is operable to output compressed data for each of the selected matches involving the one or more respective contiguous middle symbols.
-
-
80. The memory controller of claim 66, wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols;
-
wherein the match information logic is operable to;
if at least one contiguous match occurs with one or more respective contiguous middle symbols of the plurality of middle symbols, and the one or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the respective contiguous middle symbols, then;
select the one or more largest non-overlapping contiguous matches involving the one or more respective contiguous middle symbols;
wherein the output is operable to output compressed data for each of the selected matches involving the one or more respective contiguous middle symbols.
-
-
81. The memory controller of claim 66, wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols;
-
wherein the match information logic is operable to;
if at least one contiguous match occurs with two or more respective contiguous middle symbols of the plurality of middle symbols, and the two or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the respective contiguous middle symbols, then;
select the one or more largest non-overlapping contiguous matches involving the two or more respective contiguous middle symbols;
wherein the output is operable to output compressed data for each of the selected matches involving the two or more respective contiguous middle symbols.
-
-
82. A memory module, comprising:
-
one or more memory devices for storing data;
a parallel compression engine for compressing data, wherein the parallel compression engine is operable to;
maintain a history table comprising entries, wherein each entry comprises at least one symbol;
receive uncompressed data, wherein the uncompressed data comprises a plurality of symbols;
compare the plurality of symbols with entries in the history table in a parallel fashion, wherein said comparing produces compare results;
determine match information for each of the plurality of symbols based on the compare results; and
output compressed data in response to the match information. - View Dependent Claims (83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97)
wherein the parallel compression engine is operable to determine the match information for each of said plurality of symbols based on the count information and the compare results.
-
-
86. The memory module of claim 83,
wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols; wherein, in determining match information, the parallel compression engine is operable to determine if a contiguous match occurs for one or more of the one or more middle symbols.
-
87. The memory module of claim 83,
wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols; wherein, in determining match information, the parallel compression engine is operable to determine if a contiguous match occurs for one or more of the one or more middle symbols that does not involve a match with either the first symbol or the last symbol.
-
88. The memory module of claim 87,
wherein, in determining match information, the parallel compression engine is further operable to determine if a contiguous match occurs involving one or more of the middle symbols and at least one of the first symbol or the last symbol. -
89. The memory module of claim 83,
wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols; wherein, in determining match information, the parallel compression engine determines at least one contiguous match for one or more contiguous middle symbols that does not include either the first symbol or the last symbol.
-
90. The memory module of claim 83,
wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols; wherein, in determining match information, the parallel compression engine is operable to determine if a contiguous match occurs for one or more respective contiguous middle symbols, wherein the one or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the one or more respective contiguous middle symbols.
-
91. The memory module of claim 83,
wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols; wherein, in determining match information, the parallel compression engine is operable to determine if a contiguous match occurs for one or more of the plurality of middle symbols that does not involve a match with either the first symbol or the last symbol.
-
92. The memory module of claim 91,
wherein, in determining match information, the parallel compression engine is further operable to determine if a contiguous match occurs involving one or more of the middle symbols and at least one of the first symbol or the last symbol. -
93. The memory module of claim 83,
wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols; wherein, in determining match information, the parallel compression engine is operable to determine if a contiguous match occurs for two or more contiguous middle symbols of the plurality of middle symbols, wherein the contiguous match of the two or more contiguous middle symbols does not include either the first symbol or the last symbol.
-
94. The memory controller of claim 83,
wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols; wherein, in determining match information, the parallel compression engine is operable to determine if a plurality of different contiguous middle symbol matches occur among the plurality of middle symbols, wherein each of the plurality of different contiguous middle symbol matches does not include either the first symbol or the last symbol.
-
95. The memory module of claim 83, wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols;
-
wherein, in determining match information, the parallel compression engine is operable to;
if at least one contiguous match occurs with one or more respective contiguous middle symbols, and the one or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the respective contiguous middle symbols, then;
select the one or more largest non-overlapping contiguous matches involving the one or more respective contiguous middle symbols;
wherein the parallel compression engine is operable to output compressed data for each of the selected matches involving the one or more respective contiguous middle symbols.
-
-
96. The memory controller of claim 83, wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols;
-
wherein, in determining match information, the parallel compression engine is operable to;
if at least one contiguous match occurs with one or more respective contiguous middle symbols of the plurality of middle symbols, and the one or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the respective contiguous middle symbols, then;
select the one or more largest non-overlapping contiguous matches involving the one or more respective contiguous middle symbols;
wherein the parallel compression engine is operable to output compressed data for each of the selected matches involving the one or more respective contiguous middle symbols.
-
-
97. The memory controller of claim 83, wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols;
-
wherein, in determining match information, the parallel compression engine is operable to;
if at least one contiguous match occurs with two or more respective contiguous middle symbols of the plurality of middle symbols, and the two or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the respective contiguous middle symbols, then;
select the one or more largest non-overlapping contiguous matches involving the two or more respective contiguous middle symbols;
wherein the parallel compression engine is operable to output compressed data for each of the selected matches involving the two or more respective contiguous middle symbols.
-
-
98. A memory module, comprising:
-
one or more memory devices for storing data;
a parallel compression engine for compressing data, wherein the parallel compression engine comprises;
an input for receiving uncompressed data, wherein the uncompressed data comprises a plurality of symbols;
a history table comprising entries, wherein each entry comprises at least one symbol;
a plurality of comparators for comparing the plurality of symbols with entries in the history table in a parallel fashion, wherein the plurality of comparators produce compare results;
match information logic coupled to the plurality of comparators for determining match information for each of said plurality of symbols based on the compare results; and
an output coupled to the match information logic for outputting compressed data in response to the match information. - View Dependent Claims (99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 170, 171, 181, 184, 185)
a memory which maintains count information including a count of prior matches which occurred when previous symbols were compared with entries in the history table.
-
-
102. The memory module of claim 98,
wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols; wherein the match information logic is operable to determine if a contiguous match occurs for one or more of the one or more middle symbols.
-
103. The memory module of claim 98,
wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols; wherein the match information logic is operable to determine if a contiguous match occurs for one or more of the one or more middle symbols that does not involve a match with either the first symbol or the last symbol.
-
104. The memory module of claim 103,
wherein the match information logic is further operable to determine if a contiguous match occurs involving one or more of the middle symbols and at least one of the first symbol or the last symbol. -
105. The memory module of claim 98,
wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols; wherein the match information logic determines at least one contiguous match for one or more contiguous middle symbols that does not include either the first symbol or the last symbol.
-
106. The memory module of claim 98,
wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols; wherein the match information logic is operable to determine if a contiguous match occurs for one or more respective contiguous middle symbols, wherein the one or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the one or more respective contiguous middle symbols.
-
107. The memory module of claim 98,
wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols; wherein the match information logic is operable to determine if a contiguous match occurs for one or more of the plurality of middle symbols that does not involve a match with either the first symbol or the last symbol.
-
108. The memory module of claim 107,
wherein the match information logic is further operable to determine if a contiguous match occurs involving one or more of the middle symbols and at least one of the first symbol or the last symbol. -
109. The memory module of claim 98,
wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols; wherein the match information logic is operable to determine if a contiguous match occurs for two or more contiguous middle symbols of the plurality of middle symbols, wherein the contiguous match of the two or more contiguous middle symbols does not include either the first symbol or the last symbol.
-
110. The memory module of claim 98,
wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols; wherein the match information logic is operable to determine if a plurality of different contiguous middle symbol matches occur among the plurality of middle symbols, wherein each of the plurality of different contiguous middle symbol matches does not include either the first symbol or the last symbol.
-
111. The memory module of claim 98, wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols;
-
wherein the match information logic is operable to;
if at least one contiguous match occurs with one or more respective contiguous middle symbols, and the one or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the respective contiguous middle symbols, then;
select the one or more largest non-overlapping contiguous matches involving the one or more respective contiguous middle symbols;
wherein the output is operable to output compressed data for each of the selected matches involving the one or more respective contiguous middle symbols.
-
-
112. The memory module of claim 98, wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols;
-
wherein the match information logic is operable to;
if at least one contiguous match occurs with one or more respective contiguous middle symbols of the plurality of middle symbols, and the one or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the respective contiguous middle symbols, then;
select the one or more largest non-overlapping contiguous matches involving the one or more respective contiguous middle symbols;
wherein the output is operable to output compressed data for each of the selected matches involving the one or more respective contiguous middle symbols.
-
-
113. The memory module of claim 98, wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols;
-
wherein the match information logic is operable to;
if at least one contiguous match occurs with two or more respective contiguous middle symbols of the plurality of middle symbols, and the two or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the respective contiguous middle symbols, then;
select the one or more largest non-overlapping contiguous matches involving the two or more respective contiguous middle symbols;
wherein the output is operable to output compressed data for each of the selected matches involving the two or more respective contiguous middle symbols.
-
-
170. The system of claim 109,
wherein the match information logic is also operable to determine if a contiguous match occurs involving one or more of the middle symbols and at least one of the first symbol or the last symbol. -
171. The system of claim 109,
wherein the match information logic is operable to determine that a match occurs with one or more contiguous middle symbols that does not include either the first symbol or the last symbol; - and
wherein the output is operable to output compressed data for the match involving the one or more contiguous middle symbols.
- and
-
181. The system of claim 109, wherein the one or more middle symbols comprises a plurality of middle symbols;
-
wherein the match information logic is operable to;
if at least one contiguous match occurs with two or more respective contiguous middle symbols of the plurality of middle symbols, and the two or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the respective contiguous middle symbols, then;
select the one or more largest non-overlapping contiguous matches involving the two or more respective contiguous middle symbols;
wherein the output is operable to output compressed data for each of the selected matches involving the two or more respective contiguous middle symbols.
-
-
184. The system of claim 109,
wherein, for non-matching symbols which do not match any entry in the history table, the output is operable to output the non-matching symbols. -
185. The system of claim 109,
wherein the system operates one or more times until no more data is available; - and
wherein, when no more data is available, the system outputs compressed data for any remaining match in the history table.
- and
-
114. A computer system including a memory controller having an embedded parallel compression engine, the computer system comprising:
-
a CPU;
system memory which stores data used by said CPU for executing one or more applications;
a memory controller coupled to the system memory and the CPU, wherein the memory controller performs memory control functions for the system memory, wherein the memory controller includes the parallel compression engine for compressing data transferred to or from the system memory;
wherein the parallel compression engine is operable to;
maintain a history table comprising entries, wherein each entry comprises at least one symbol;
receive uncompressed data, wherein the uncompressed data comprises a plurality of symbols;
compare the plurality of symbols with entries in the history table in a parallel fashion, wherein said comparing produces compare results;
determine match information for each of the plurality of symbols based on the compare results; and
output compressed data in response to the match information. - View Dependent Claims (115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126)
wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols; wherein, in determining match information, the parallel compression engine is operable to determine if a contiguous match occurs for one or more of the one or more middle symbols.
-
-
116. The computer system of claim 114,
wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols; wherein, in determining match information, the parallel compression engine is operable to determine if a contiguous match occurs for one or more of the one or more middle symbols that does not involve a match with either the first symbol or the last symbol.
-
117. The computer system of claim 116,
wherein, in determining match information, the parallel compression engine is further operable to determine if a contiguous match occurs involving one or more of the middle symbols and at least one of the first symbol or the last symbol. -
118. The computer system of claim 114,
wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols; wherein, in determining match information, the parallel compression engine determines at least one contiguous match for one or more contiguous middle symbols that does not include either the first symbol or the last symbol.
-
119. The computer system of claim 114,
wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols; wherein, in determining match information, the parallel compression engine is operable to determine if a contiguous match occurs for one or more respective contiguous middle symbols, wherein the one or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the one or more respective contiguous middle symbols.
-
120. The computer system of claim 114,
wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols; wherein, in determining match information, the parallel compression engine is operable to determine if a contiguous match occurs for one or more of the plurality of middle symbols that does not involve a match with either the first symbol or the last symbol.
-
121. The computer system of claim 120,
wherein, in determining match information, the parallel compression engine is further operable to determine if a contiguous match occurs involving one or more of the middle symbols and at least one of the first symbol or the last symbol. -
122. The computer system of claim 114,
wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols; wherein, in determining match information, the parallel compression engine is operable to determine if a contiguous match occurs for two or more contiguous middle symbols of the plurality of middle symbols, wherein the contiguous match of the two or more contiguous middle symbols does not include either the first symbol or the last symbol.
-
123. The computer system of claim 114,
wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols; wherein, in determining match information, the parallel compression engine is operable to determine if a plurality of different contiguous middle symbol matches occur among the plurality of middle symbols, wherein each of the plurality of different contiguous middle symbol matches does not include either the first symbol or the last symbol.
-
124. The computer system of claim 114, wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols;
-
wherein, in determining match information, the parallel compression engine is operable to;
if at least one contiguous match occurs with one or more respective contiguous middle symbols, and the one or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the respective contiguous middle symbols, then;
select the one or more largest non-overlapping contiguous matches involving the one or more respective contiguous middle symbols;
wherein the parallel compression engine is operable to output compressed data for each of the selected matches involving the one or more respective contiguous middle symbols.
-
-
125. The computer system of claim 114, wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols;
-
wherein, in determining match information, the parallel compression engine is operable to;
if at least one contiguous match occurs with one or more respective contiguous middle symbols of the plurality of middle symbols, and the one or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the respective contiguous middle symbols, then;
select the one or more largest non-overlapping contiguous matches involving the one or more respective contiguous middle symbols;
wherein the parallel compression engine is operable to output compressed data for each of the selected matches involving the one or more respective contiguous middle symbols.
-
-
126. The computer system of claim 114, wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols;
-
wherein, in determining match information, the parallel compression engine is operable to;
if at least one contiguous match occurs with two or more respective contiguous middle symbols of the plurality of middle symbols, and the two or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the respective contiguous middle symbols, then;
select the one or more largest non-overlapping contiguous matches involving the two or more respective contiguous middle symbols;
wherein the parallel compression engine is operable to output compressed data for each of the selected matches involving the two or more respective contiguous middle symbols.
-
-
127. A computer system including a memory controller having an embedded parallel compression engine, the computer system comprising:
-
a CPU;
system memory which stores data used by said CPU for executing one or more applications;
a memory controller coupled to the system memory and the CPU, wherein the memory controller performs memory control functions for the system memory, wherein the memory controller includes the parallel compression engine for compressing data transferred to or from the system memory;
wherein the parallel compression engine comprises;
an input for receiving uncompressed data, wherein the uncompressed data comprises a plurality of symbols;
a history table comprising entries, wherein each entry comprises at least one symbol;
a plurality of comparators for comparing the plurality of symbols with entries in the history table in a parallel fashion, wherein the plurality of comparators produce compare results;
match information logic coupled to the plurality of comparators for determining match information for each of said plurality of symbols based on the compare results; and
an output coupled to the match information logic for outputting compressed data in response to the match information. - View Dependent Claims (128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139)
wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols; wherein the match information logic is operable to determine if a contiguous match occurs for one or more of the one or more middle symbols.
-
-
129. The computer system of claim 127,
wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols; wherein the match information logic is operable to determine if a contiguous match occurs for one or more of the one or more middle symbols that does not involve a match with either the first symbol or the last symbol.
-
130. The computer system of claim 129,
wherein the match information logic is further operable to determine if a contiguous match occurs involving one or more of the middle symbols and at least one of the first symbol or the last symbol. -
131. The computer system of claim 127,
wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols; wherein the match information logic determines at least one contiguous match for one or more contiguous middle symbols that does not include either the first symbol or the last symbol.
-
132. The computer system of claim 127,
wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols; wherein the match information logic is operable to determine if a contiguous match occurs for one or more respective contiguous middle symbols, wherein the one or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the one or more respective contiguous middle symbols.
-
133. The computer system of claim 127,
wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols; wherein the match information logic is operable to determine if a contiguous match occurs for one or more of the plurality of middle symbols that does not involve a match with either the first symbol or the last symbol.
-
134. The computer system of claim 133,
wherein the match information logic is further operable to determine if a contiguous match occurs involving one or more of the middle symbols and at least one of the first symbol or the last symbol. -
135. The computer system of claim 127,
wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols; wherein the match information logic is operable to determine if a contiguous match occurs for two or more contiguous middle symbols of the plurality of middle symbols, wherein the contiguous match of the two or more contiguous middle symbols does not include either the first symbol or the last symbol.
-
136. The computer system of claim 127,
wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols; wherein the match information logic is operable to determine if a plurality of different contiguous middle symbol matches occur among the plurality of middle symbols, wherein each of the plurality of different contiguous middle symbol matches does not include either the first symbol or the last symbol.
-
137. The computer system of claim 127, wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols;
-
wherein the match information logic is operable to;
if at least one contiguous match occurs with one or more respective contiguous middle symbols, and the one or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the respective contiguous middle symbols, then;
select the one or more largest non-overlapping contiguous matches involving the one or more respective contiguous middle symbols;
wherein the output is operable to output compressed data for each of the selected matches involving the one or more respective contiguous middle symbols.
-
-
138. The computer system of claim 127, wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols;
-
wherein the match information logic is operable to;
if at least one contiguous match occurs with one or more respective contiguous middle symbols of the plurality of middle symbols, and the one or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the respective contiguous middle symbols, then;
select the one or more largest non-overlapping contiguous matches involving the one or more respective contiguous middle symbols;
wherein the output is operable to output compressed data for each of the selected matches involving the one or more respective contiguous middle symbols.
-
-
139. The computer system of claim 127, wherein the plurality of symbols includes a first symbol, a last symbol, and a plurality of middle symbols;
-
wherein the match information logic is operable to;
if at least one contiguous match occurs with two or more respective contiguous middle symbols of the plurality of middle symbols, and the two or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the respective contiguous middle symbols, then;
select the one or more largest non-overlapping contiguous matches involving the two or more respective contiguous middle symbols;
wherein the output is operable to output compressed data for each of the selected matches involving the two or more respective contiguous middle symbols.
-
-
140. A method for performing parallel compression of data, the method comprising:
-
receiving uncompressed data, wherein the uncompressed data comprises a plurality of symbols, wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols;
maintaining a history table comprising entries, wherein each entry comprises at least one symbol;
comparing the plurality of symbols with entries in the history table in a parallel fashion, wherein said comparing produces compare results;
determining match information for each of the plurality of symbols based on the compare results, wherein said determining match information includes determining if a contiguous match occurs for one or more of the one or more middle symbols that does not involve a match with either the first symbol or the last symbol; and
outputting compressed data in response to the match information. - View Dependent Claims (141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168)
wherein said determining match information also includes determining if a contiguous match occurs involving one or more of the middle symbols and at least one of the first symbol or the last symbol. -
142. The method of claim 140,
wherein said determining match information includes determining that a match occurs with one or more contiguous middle symbols that does not include either the first symbol or the last symbol; - and
wherein said outputting compressed data includes outputting compressed data for the match involving the one or more contiguous middle symbols.
- and
-
143. The method of claim 140,
wherein said determining match information includes determining if a contiguous match occurs for one or more respective contiguous middle symbols, wherein the one or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the one or more respective contiguous middle symbols. -
144. The method of claim 140,
wherein the one or more middle symbols comprises a plurality of middle symbols; wherein said determining if a contiguous match occurs comprises determining if a contiguous match occurs for one or more of the plurality of middle symbols that does not involve a match with either the first symbol or the last symbol.
-
145. The method of claim 144,
wherein said determining match information also includes determining if a contiguous match occurs involving one or more of the middle symbols and at least one of the first symbol or the last symbol. -
146. The method of claim 140,
wherein the one or more middle symbols comprises a plurality of middle symbols; wherein said determining if a contiguous match occurs comprises determining if a contiguous match occurs for two or more contiguous middle symbols of the plurality of middle symbols, wherein the contiguous match of the two or more contiguous middle symbols does not include either the first symbol or the last symbol.
-
147. The method of claim 140,
wherein the one or more middle symbols comprises a plurality of middle symbols; -
wherein said determining match information includes determining that a match occurs with two or more contiguous middle symbols, wherein the contiguous match of the two or more contiguous middle symbols does not include either the first symbol or the last symbol;
wherein said outputting compressed data includes outputting compressed data for the match involving the two or more contiguous middle symbols.
-
-
148. The method of claim 140,
wherein the one or more middle symbols comprises a plurality of middle symbols; wherein said determining match information includes determining if a plurality of different contiguous middle symbol matches occur among the plurality of middle symbols, wherein each of the plurality of different contiguous middle symbol matches does not include either the first symbol or the last symbol.
-
149. The method of claim 140,
wherein the one or more middle symbols comprises a plurality of middle symbols; -
wherein said determining match information includes determining that a plurality of different contiguous middle symbol matches occur among the plurality of middle symbols, wherein each of the plurality of different contiguous middle symbol matches does not include either the first symbol or the last symbol; and
wherein said outputting compressed data includes outputting compressed data for each of the plurality of different contiguous middle symbol matches.
-
-
150. The method of claim 140, wherein said determining match information includes:
-
if at least one contiguous match occurs with one or more respective contiguous middle symbols, and the one or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the respective contiguous middle symbols, then;
selecting the one or more largest non-overlapping contiguous matches involving the one or more respective contiguous middle symbols;
wherein said outputting compressed data includes outputting compressed data for each of the selected matches involving the one or more respective contiguous middle symbols.
-
-
151. The method of claim 140, wherein the one or more middle symbols comprises a plurality of middle symbols;
-
wherein said determining match information includes;
if at least one contiguous match occurs with one or more respective contiguous middle symbols of the plurality of middle symbols, and the one or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the respective contiguous middle symbols, then;
selecting the one or more largest non-overlapping contiguous matches involving the one or more respective contiguous middle symbols;
wherein said outputting compressed data includes outputting compressed data for each of the selected matches involving the one or more respective contiguous middle symbols.
-
-
152. The method of claim 140, wherein the one or more middle symbols comprises a plurality of middle symbols;
-
wherein said determining match information includes;
if at least one contiguous match occurs with two or more respective contiguous middle symbols of the plurality of middle symbols, and the two or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the respective contiguous middle symbols, then;
selecting the one or more largest non-overlapping contiguous matches involving the two or more respective contiguous middle symbols;
wherein said outputting compressed data includes outputting compressed data for each of the selected matches involving the two or more respective contiguous middle symbols.
-
-
153. The method of claim 140, wherein said outputting compressed data includes:
outputting a count value and an entry pointer for a contiguous match, wherein the entry pointer points to the entry in the history table which produced the contiguous match, wherein the count value indicates a number of matching symbols in the contiguous match.
-
154. The method of claim 153, wherein said outputting the count value includes encoding a value representing the count value;
- wherein more often occurring counts are encoded with fewer bits than less often occurring counts.
-
155. The method of claim 140, wherein said outputting compressed data further includes:
for non-matching symbols which do not match any entry in the history table, outputting the non-matching symbols.
-
156. The method of claim 140, further comprising:
-
repeating said steps of receiving, maintaining, comparing, and determining one or more times until no more data is available; and
when no more data is available, outputting compressed data for any remaining match in the history table.
-
-
157. The method of claim 140, wherein said determining match information includes determining matches of said plurality of symbols with entries in the history table.
-
158. The method of claim 140, further comprising:
-
maintaining count information including a count of prior matches which occurred when previous symbols were compared with entries in the history table;
wherein said determining match information operates to determine the match information for each of said plurality of symbols based on the count information and the compare results.
-
-
159. The method of claim 158, wherein the count information includes a current count of prior matches that is maintained for each entry in the history table.
-
160. The method of claim 159, wherein the method further maintains a count flag for each entry in the history table;
wherein said determining determines match information for each of said plurality of symbols based on the current count, the count flags, and the compare results.
-
161. The method of claim 160, wherein said determining match information includes:
resetting the count and count flags if the compare results indicate a contiguous match did not match one of the plurality of symbols.
-
162. The method of claim 160, wherein the count and count flags for all entries are reset based on the number of the plurality of symbols that did not match in the contiguous match.
-
163. The method of claim 159, wherein said determining match information includes:
updating the current count according to the compare results.
-
164. The method of claim 159, wherein said determining match information includes:
-
determining a contiguous match based on the current count and the compare results;
determining if the contiguous match has stopped matching;
if the contiguous match has stopped matching, then;
updating the current count according to the compare results; and
wherein said outputting compressed data includes outputting compressed data corresponding to the contiguous match.
-
-
165. The method of claim 164, wherein said outputting compressed data corresponding to the contiguous match comprises outputting a count value and an entry pointer, wherein the entry pointer points to the entry in the history table which produced the contiguous match, wherein the count value indicates a number of matching symbols in the contiguous match.
-
166. The method of claim 140, wherein the plurality of symbols comprises at least 4 symbols.
-
167. The method of claim 140, wherein the plurality of symbols comprises a power of 2 number of symbols.
-
168. The method of claim 140,
wherein the method further maintains a count flag for each entry in the history table; -
wherein said determining determines match information for each of said plurality of symbols based on the current count, the count flags, and the compare results;
wherein said determining match information and said outputting compressed data in response to the match information comprises;
determining zero or more matches of said plurality of symbols with each entry in the history table;
examining the compare results for each entry;
for non-matching symbols which do not match any entry in the history table, outputting the non-matching symbols;
if any entry stopped matching, examining the current count, the count flags, and the compare results for every entry;
determining the contiguous match based on the current count and the compare results;
determining if the contiguous match has stopped matching;
if the contiguous match has stopped matching, then;
outputting a count value and an entry pointer, wherein the entry pointer points to the entry in the history table which produced the contiguous match, wherein the count value indicates a number of matching symbols in the contiguous match; and
updating the current count according to the compare results;
the method further comprising;
repeating said steps of receiving, maintaining, comparing, and determining one or more times until no more data is available; and
when no more data is available, if the current count is non-zero, outputting a count value and an entry pointer for the remaining match in the history table.
-
-
-
169. A system for performing parallel compression of data, the system comprising:
-
an input for receiving uncompressed data, wherein the uncompressed data comprises a plurality of symbols, wherein the plurality of symbols includes a first symbol, a last symbol, and one or more middle symbols;
a history table comprising entries, wherein each entry comprises at least one symbol;
a plurality of comparators for comparing the plurality of symbols with entries in the history table in a parallel fashion, wherein the plurality of comparators produce compare results;
match information logic coupled to the plurality of comparators for determining match information for each of the plurality of symbols based on the compare results, wherein the match information logic is operable to determine if a contiguous match occurs for one or more of the one or more middle symbols that does not involve a match with either the first symbol or the last symbol; and
an output coupled to the match information logic for outputting compressed data in response to the match information. - View Dependent Claims (172, 173, 174, 175, 176, 177, 178, 179, 180, 182, 183, 186)
wherein the match information logic is operable to determine if a contiguous match occurs for one or more respective contiguous middle symbols, wherein the one or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the one or more respective contiguous middle symbols. -
173. The system of claim 169,
wherein the one or more middle symbols comprises a plurality of middle symbols; wherein the match information logic is operable to determine if a contiguous match occurs for one or more of the plurality of middle symbols that does not involve a match with either the first symbol or the last symbol.
-
174. The system of claim 173,
wherein the match information logic is also operable to determine if a contiguous match occurs involving one or more of the middle symbols and at least one of the first symbol or the last symbol. -
175. The system of claim 169,
wherein the one or more middle symbols comprises a plurality of middle symbols; wherein the match information logic is operable to determine if a contiguous match occurs for two or more contiguous middle symbols of the plurality of middle symbols, wherein the contiguous match of the two or more contiguous middle symbols does not include either the first symbol or the last symbol.
-
176. The system of claim 169,
wherein the one or more middle symbols comprises a plurality of middle symbols; -
wherein the match information logic is operable to determine that a match occurs with two or more contiguous middle symbols, wherein the contiguous match of the two or more contiguous middle symbols does not include either the first symbol or the last symbol;
wherein the output is operable to output compressed data for the match involving the two or more contiguous middle symbols.
-
-
177. The system of claim 169,
wherein the one or more middle symbols comprises a plurality of middle symbols; wherein the match information logic is operable to determine if a plurality of different contiguous middle symbol matches occur among the plurality of middle symbols, wherein each of the plurality of different contiguous middle symbol matches does not include either the first symbol or the last symbol.
-
178. The system of claim 169,
wherein the one or more middle symbols comprises a plurality of middle symbols; -
wherein the match information logic is operable to determine that a plurality of different contiguous middle symbol matches occur among the plurality of middle symbols, wherein each of the plurality of different contiguous middle symbol matches does not include either the first symbol or the last symbol;
wherein the output is operable to output compressed data for each of the plurality of different contiguous middle symbol matches.
-
-
179. The system of claim 169,
wherein the match information logic is operable to: -
if at least one contiguous match occurs with one or more respective contiguous middle symbols, and the one or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the respective contiguous middle symbols, then;
select the one or more largest non-overlapping contiguous matches involving the one or more respective contiguous middle symbols;
wherein the output is operable to output compressed data for each of the selected matches involving the one or more respective contiguous middle symbols.
-
-
180. The system of claim 169, wherein the one or more middle symbols comprises a plurality of middle symbols;
-
wherein the match information logic is operable to;
if at least one contiguous match occurs with one or more respective contiguous middle symbols of the plurality of middle symbols, and the one or more respective contiguous middle symbols are not involved in a match with either the symbol before or after the respective contiguous middle symbols, then;
select the one or more largest non-overlapping contiguous matches involving the one or more respective contiguous middle symbols;
wherein the output is operable to output compressed data for each of the selected matches involving the one or more respective contiguous middle symbols.
-
-
182. The system of claim 169,
wherein the output is operable to output a count value and an entry pointer for a contiguous match, wherein the entry pointer points to the entry in the history table which produced the contiguous match, wherein the count value indicates a number of matching symbols in the contiguous match. -
183. The system of claim 182,
wherein the output outputs an encoded value representing the count value; - wherein more often occurring counts are encoded with fewer bits than less often occurring counts.
-
186. The system of claim 169, wherein the plurality of symbols comprises at least 4 symbols.
-
Specification