Patent Publication Number: US-7904643-B1

Title: Range code compression method and apparatus for ternary content addressable memory (CAM) devices

Description:
This application is a divisional of U.S. patent application Ser. No. 10/897,062 filed on Jul. 22, 2004. 
    
    
     TECHNICAL FIELD 
     The present invention relates generally to search engine systems that include ternary content addressable memory (CAM) devices, and more particularly to ternary CAM search engine systems that provide range matching capabilities. 
     COPYRIGHT AUTHORIZATION 
     A portion of the disclosure of this patent document contains material that is subject to copyright protection. The copyright owner has no objection to the facsimile reproduction by anyone of the patent document or the patent disclosure, as it appears in the Patent and Trademark Office patent file or records, but otherwise reserves all (copyright or mask work) rights whatsoever. 
     BACKGROUND OF THE INVENTION 
     The relatively rapid speed at which content addressable memories (CAMs) can compare multiple entries to an applied search key value, has resulted in CAMs enjoying widespread use in higher speed applications, such as network packet processing. 
     Conventional CAMs may include binary CAMs and ternary CAMs. Binary CAMs typically include entries that can each store a data value having a number of data bits. In most cases, a match indication can be generated when all bits of a search key match all the bits of an entry. Thus, in a typical binary CAM, bits of an entry may have a value of 0 or 1. A corresponding search key (i.e., comparand) value is said to match its corresponding entry when it is exactly the same. 
     CAMs may also include ternary CAMs. Ternary CAMs may typically include entries having data bits that can be masked from a compare operation. Thus, in a typical ternary CAM, bits of an entry can be conceptualized as having a value of 0, 1 or “X”. A corresponding search key bit value is said to match its corresponding entry bit when it is either the same, or when the entry bit has the X (“don&#39;t care” or masked) value. 
     Recently, various packet processing operations have given rise to the need for range matching operations. In a range matching operation, a portion (or all) of a search key value can be examined to determine if it falls within a range, as opposed to simply matching an entry value. One particular application that can employ range matching can be access control lists (ACL). An ACL may present a set of rules that can limit access (e.g., forwarding of packets) to only those packets having fields falling within a particular range. 
     Conventionally, CAMs have been utilized to express rules to provide range rule matching functions. A first conventional range rule matching arrangement is represented in  FIGS. 20A ,  20 B and  21 .  FIGS. 20A and 20B  illustrate how a range can be encoded according to common prefix values. 
       FIG. 20A  shows how three ranges R&lt;2, 2≦R≦3 and R&gt;3 are encoded into four entries over a space of 0-15 (0000-1111 binary). As shown, those values lower than the range 2-3 can be encoded by utilizing an entry value of 000X, which has a common prefix of “000”. The range itself, encodes into an entry value of 001X, which has a common prefix of “000”. The range 2≦R≦3 encodes into one entry “001X”. Finally, those values in the last range R&gt;3 encode into two entries, one having a common prefix of “01” the other having a common prefix of “1”. 
     In this way, a range can be “enumerated” by prefixes values that contain the range, or portions of the range. 
     One skilled in the art would recognize that such worst case result for a conventional prefix enumeration approach can be generalized as follows. For a range space defined by a W bits, the worst case number of rules (i.e., entries) to define a range ends up being 2W-2. 
     A drawback to the conventional arrangement is represented by  FIG. 20B . The conventional approach of enumerating prefix can provide relatively compact results (a small number of entries) only when a range falls on convenient boundaries. As shown by  FIG. 20B , a range of 7-10 in a space 0-15 encodes into 3 entries. Such a result represents a worst case result, as there is a prefix greater than one on each side of the range. 
       FIG. 21  shows a CAM device that may incorporate the range matching arrangement of  FIGS. 20A and 20B . As shown by  FIG. 21 , a CAM device  2100  can be a conventional ternary CAM device that applies a search key value that includes W bits to ternary CAM entries  2102 - 1  to  2102 - n . Each CAM entry ( 2102 - 1  to  2102 - n ) can include a corresponding W bits for storing a range rule. It is understood that all bits of a search key value can carry range bit values, or only a portion thereof (e.g., the search key has one or more groups of bits for comparison to one or more ranges). 
     While a conventional approach like that of  FIGS. 20A ,  20 B and  21  may result in an undesirably large number of entries when encoding certain range values, the approach does have a number of advantages. First, little (or no) additional hardware may be needed accommodate range matching. Second, updating the CAM device can be accomplished relatively quickly. If new range information is needed, provided empty entries are available, new values are written into the CAM (assuming no additional priority for such entries is required). 
     A second conventional range rule matching arrangement is represented in  FIGS. 22A and 22B  and  23 .  FIGS. 22A and 22B  illustrate how a range portion of a rule can be uniquely encoded utilizing range preclassification. In a conventional range preclassification approach, entire ranges are encoded into unique values. 
       FIGS. 22A and 22B  show how preclassification can encode the same range values as those shown in  FIGS. 20A and 20B . As shown by  FIGS. 22A and 22B , preclassification can encode any range into one value ENC regardless of where the range falls along bit boundaries. 
     In this way, a range rule can be mapped to a unique entry value. One skilled in the art would recognize that conventional preclassification can greatly reduce the number of rules (essentially one entry per range rule). 
     However, conventional preclassification approaches can have drawbacks. First, preclassification can require knowledge of an entire range mapping database, in order to ensure unique values are provided for each range. That is, before any new range is added, an entire existing database is checked to ensure that the encoded value will be unique to the range. 
       FIG. 23  shows a CAM device that may incorporate the range rule matching arrangement of  FIGS. 22A and 22B . As shown by  FIG. 23 , a CAM device  2300  can be a conventional ternary or binary CAM device that applies a search key value of W bits to CAM entries  2302 - 1  to  2302 - n , each of which includes a corresponding W bits for storing a range rule. 
     In the event preclassification is performed “on-board” the device, the CAM device  2300  will have to include preclassification hardware  2304 . This may undesirably increase the size and complexity of the device. If preclassification is performed outside of the CAM device  2300 , a processor or the like, along with accompanying routines would be necessary to preprocess range values prior to application to the CAM device  2300 . 
     Referring now to  FIG. 24 , one example of a range rule search key is shown to illustrate how a search key can require both standard bit matching (ternary matching) as well as range matching. The search key of  FIG. 24  includes five search fields (FIELD 1  to FIELD 5 ). Search fields FIELD 1 , FIELD 3  and FIELD 4  are ternary match fields. Thus, these fields can be compared on a bit wise basis to arrive at a match result. However, search fields FIELD 2  and FIELD 5  are range match fields. Thus, such fields are examined to determine if they fall within a given range in order to arrive at a match result. 
     The above example shows how range rule matching can require numerous entries when expressed within a CAM device. 
     In light of the above, it would be desirable to arrive at some way of providing range rule matching capabilities that can result in a smaller number of rules than conventional prefix enumeration approaches. 
     At the same time, it would also be desirable to arrive at some way of providing range rule matching capabilities that provides faster and/or easier updating of rules than conventional preclassification approaches. 
     SUMMARY OF THE INVENTION 
     The present invention can include a method for generating ternary content addressable memory entries to represent a search range. In the method range code values can be generated to represent the search range, where the range code values can include a plurality of bit values. The method includes compressing range code values that vary from one another by predetermined least significant bit values into one range code value, and adding an extra bit to the range code value to indicate how compressed range code value has been generated. 
     In such an arrangement, the number of range codes needed to express a range can be reduced at the cost of an overall increase in entry size. 
     According to one aspect of the embodiments, the step of compressing range code values can include determining:
         if the last two bit values of a first range code prefix are “01”,   a next higher prefix value matches all bits of higher significance than the last two bits of the first range code prefix, and   the two bits of the next higher prefix value corresponding to the last two bits of the lowest range code prefix value are “1X”.
 
In such a case, a compressed range code value can represent the two range code values, with the compressed range code value being the same as the first range code value, except for the last two bits of the prefix being changed to “XX”. Further, the step of adding an extra bit to the compressed range code value can include setting an extra lower bound bit to “1” that corresponds to the two bit values changed from 01 to XX.
       

     In this way, two prefix values representing portions of a range can be compressed into a single rule. 
     According to one aspect of the embodiments, the step of compressing range code values can include determining:
         if the last two bit values of a first range code prefix are “10”,   a next lower prefix value matches all bits of higher significance than the last two bits of the first range code prefix, and   the two bits of the next lower prefix value corresponding to the last two bits of the lowest range code prefix value are “0X”.
 
In such a case, a compressed range code value can represent the two range code values, with the compressed range code value being the same as the first range code value, except for the last two bits of the prefix being changed to “XX”. Further, the step of adding an extra bit to the range code value can include setting an extra high bound bit to “1” that corresponds to the two bit values changed from 10 to XX.
       

     In this way, two prefix values representing portions of a range can be compressed into a single rule. 
     According to another aspect of the embodiments, the step of adding an extra bit to the range code value includes adding extra E bits to each range code value, where E is an integer, each of the E bits corresponding to two bit locations of adjacent significance and representing a range code generates by compressing to range codes that vary at the two bit locations. 
     In this way, range codes can be compressed according to predetermined variations in two-bit sections of the range codes. 
     According to another aspect of the embodiments, the number of bits in the range code values is W, and the number of additional bits E can be equal to at least ½W, with each E bit representing non-overlapping two bit locations beginning with the least significant two bit locations. 
     In this way, range code compression can be accomplished according to predetermined variations in non-overlapping two-bit sections of the range codes. 
     According to another aspect of the embodiments, a number of extra bits E can be equal to W. Further, such extra E bits can include L bits representing a lower bound group of W/2 extra bits, each L bit indicating when bit values are compressed to represent a lower bound limitation in the range. Further, the extra E bits can also include an upper bound group of W/2 bits that indicates when bit values are compressed to represent an upper bound limitation in the range. 
     In this way, range code compression can be accomplished according to predetermined variations in non-overlapping two-bit sections of the range codes to merge upper bound and lower bound range code values. 
     According to another aspect of the embodiments, a number of bits in the range code values is W, where W is an integer. In addition, a number of extra bits E can be equal to at least W−1, each E bit representing overlapping two bit locations beginning with the least significant two bit locations. 
     In this way, range code compression can be accomplished according to predetermined variations in overlapping two-bit sections of the range codes. 
     According to another aspect of the embodiments, the number of extra bits E can be equal to 2(W−1). Further, such extra bits can include a lower bound group of L=W−1 bits that indicates when bit values are compressed to represent a lower bound limitation in the range, and an upper bound group of H=W−1 bits that indicates when bit values are compressed to represent an upper bound limitation in the range. 
     In this way, range code compression can be accomplished according to predetermined variations in overlapping two-bit sections of the range codes to merge upper bound and lower bound range code values. 
     The present invention can also include a method for generating search key values for a range search in a ternary content addressable memory (CAM). The method can include logically combining bit pairs of a search key value to generate encoded bits in addition to the search key bits, applying the bits of the search key to corresponding search bits of entries in the ternary CAM, and applying the encoded bits to corresponding additional bits of entries in the ternary CAM, the additional bits of each entry being different than the search bits of the entry. 
     In this way encoded bit values can be generated in a relatively fast and/or relatively easy fashion from a search key value. 
     According to another aspect of the embodiments, the step of logically combining adjacent bit pairs includes logically ORing each bit pair with circuits on the ternary CAM. 
     According to another aspect of the embodiments, the step of logically combining adjacent bit pairs includes logically NANDing each bit pair with circuits on the ternary CAM. 
     In this way encoded bit values can be generated “on-chip” for rapid results. Further, the type of encoding involves relatively little additional circuitry. 
     According to another aspect of the embodiments, the step of logically combining bit pairs includes logically combining adjacent bit pairs in a non-overlapping manner beginning with the least significant bit pair. 
     In this way encoded bit values can be generated that are compatible with DIRPE x2 Non-overlapping encoding, as will be described in more detail below. 
     According to another aspect of the embodiments, the number of bits in the search key is W, where W is an integer. Further, the step of logically combining bit pairs includes logically combining non-overlapping adjacent bit pairs beginning with the least significant bit pair. This can generate ½W encoded bits that are applied to additional bits of the entries that represent lower boundary compression, and ½W encoded bits that are applied to additional bits of the entries that represent higher boundary compression. 
     In this way encoded bit values can be generated that are compatible with DIRPE x2 Non-overlapping encoding for both high and low range bounds, as will be described in more detail below. 
     According to another aspect of the embodiments, the step of logically combining bit pairs can include logically combining adjacent bit pairs in an overlapping manner beginning with the least significant bit pair. 
     In this way encoded bit values can be generated that are compatible with DIRPE x2 Overlapping encoding, as will be described in more detail below. 
     According to another aspect of the embodiments, the number of bits in the search key can be W. Further, the step of logically combining bit pairs includes logically combining overlapping adjacent bit pairs beginning with the least significant bit pair to generate W−1 encoded bits that are applied to additional bits of the entries that represent lower boundary compression, and W−1 encoded bits that are applied to additional bits of the entries that represent higher boundary compression. 
     In this way encoded bit values can be generated that are compatible with DIRPE x2 Overlapping encoding for both high and low range bounds, as will be described in more detail below. 
     The present invention may also include a method for generating search key values for a range search in a ternary content addressable memory (CAM). The method includes
         dividing a search key of W bits into at least two portions having K1 bits and K2 bits,   encoding the portion having K1 bits into 2^K1 values, where only one of the 2^K1 is activated for each possible value of the K1 bits;   encoding the portion having K2 bits into 2^K2 values, where only one of the 2^K2 is activated for each possible value of the K2 bits; and   applying the 2^K1 values and 2^K2 values to corresponding bits of ternary CAM entries encoded with range code values.       

     In this way encoded bit values can be generated that are compatible with DIRPE xK encoding, as will be described in more detail below. 
     According to another aspect of the embodiments, the step of encoding the portion having K1 bits includes applying the K1 portion to a decoder formed on the CAM device. 
     According to another aspect of the embodiments, the step of encoding the portion having K2 bits includes applying the K2 portion to a decoder formed on the CAM device. 
     In this way, encoded bit values can be generated in a relatively fast and/or relatively easy fashion from a search key value. 
     According to another aspect of the embodiments, the method can further include applying the 2^K2 values and 2^K1 bit values to CAM entries essentially simultaneously. 
     According to another aspect of the embodiments, the method can further include applying the 2^K2 values along with at least one level value to CAM entries in one search operation, and applying the 2^K1 values along with at least another level value to the CAM entries in a different search operation. 
     In this way, a search operation can be divided into different portions, with separate sections of a search key value being encoded and applied to CAM entries in different search operations. 
     The present invention can also include a method for generating ternary content addressable memory (CAM) entries to represent a search range. The method can include dividing a range space represented by a W bits into at least a first portion including K1 bits and a second portion of K2 bits, where the K1 bits are more significant than the K2 bits. The method also includes representing the range space with 2^K1 bits, each of the 2^K1 bits representing a different equal sized division of the range space, and representing at least one of the divisions with 2^K2 bits, each of the each of the 2^K2 bits representing an equal sized subdivision of the at least one division. 
     In this way, a range space can be represented by CAM entries having multiple sections, each section representing a finer division of the range space. Such an arrangement can enable a range to be expressed by a smaller number of entries than conventional prefix enumeration approaches. 
     According to another aspect of the embodiments, each of the 2^K1 bits of a division that is fully excluded from the search range is represented by a binary “0” value. 
     According to another aspect of the embodiments, each of the 2^K1 bits of a that is fully included in the search range is represented by a don&#39;t care value (X), a don&#39;t care value matching either a binary “1” or binary “0” in a search operation. 
     In this way, divisions of a range space included within range limits can be represented by a sequence of “don&#39;t care” values. 
     According to another aspect of the embodiments, each of the 2^K1 bits of a division that is partially included in the search range is represented by binary 1 value. 
     In this way, divisions of a range space that include the start of a range or the end of a range, but are not fully within a range limits, can be represented by a bit value of 1. 
     According to another aspect of the embodiments, the method can also include storing the 2^K2 bits and 2^K1 bits in the same CAM entry. 
     According to another aspect of the embodiments, the method can also include storing the 2^K2 bits in one CAM entry along with a second level value, and storing the 2^K1 bits in a different CAM entry along with a first level value. 
     In this way, such range values can be stored in a larger number of CAM entries, but with smaller entry widths. 
     The present invention can also include a ternary content addressable memory (CAM) device having a compare data input that receives search key values that include W bits and at least a first encoder for logically combining bit pairs of the search key value to generate E additional bits. The CAM device can also include at least one ternary CAM array having entries of M-bit width coupled to receive the W bits of the search key in parallel with the E additional bits, with M being greater than or equal to W-FE. 
     In this way, a CAM device can include an encoder for rapidly encoding search key values (or range fields within search key values) for application to compressed range rule sets. 
     According to another aspect of the embodiments, at least the first encoder comprises a plurality of first logic gates that logically OR bit pairs of the search key value. 
     According to another aspect of the embodiments, at least the first encoder comprises a plurality of second gates that logically NAND bit pairs of the search key value. 
     According to another aspect of the embodiments, at least the first encoder logically combines bit pairs of adjacent significance in a non-overlapping manner to generate at least two additional bit values for each bit pair of the search key, such that E=W. 
     According to another aspect of the embodiments, at least the first encoder logically combines bit pairs of adjacent significance in an overlapping manner to generate two additional bit values for each bit pair of the search key, such that E=2(W−1). 
     The present invention can also include a ternary content addressable memory (CAM) device having a compare data input that receives search key values that include W bits, where W is an integer and at least a first encoder that encodes at least two different portions of the search key, including encoding K1 bits of a first portion into 2^K1 encoded bits and K2 bits of a second portion into 2^K2 encoded bits. The CAM device can also include at least one ternary CAM array having entries coupled to receive the 2^K1 encoded bits and 2^K2 encoded bits. 
     According to another aspect of the embodiments, the at least one ternary CAM array receives the 2^K1 encoded bits and 2^K2 encoded bits in parallel. 
     According to another aspect of the embodiments, the CAM device includes a level encoder that generates a level value bits and the at least one ternary CAM array receives the 2^K1 encoded bits and level value bits in parallel in one search operation, and receives the 2^K2 encoded bits and level value bits in parallel in another search operation. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         FIGS. 1A and 1B  are tables comparing prefix enumeration encoding of range values to range encoding according to a first embodiment. 
         FIGS. 2A and 2B  are additional tables comparing prefix enumeration encoding of range values to range encoding according to a first embodiment. 
         FIG. 3  is a table comparing range codes (CAM entries) according to a conventional prefix enumeration approach, and embodiments of the present invention. 
         FIGS. 4A and 4B  show an example of a function for categorizing prefix for compression according to various embodiments of the present invention. 
         FIGS. 5A and 5B  show an example of a function for simulating the number of rules (CAM entries) needed for a given range according to conventional methods and that according to embodiments of the present invention. 
         FIG. 6  is a table comparing results for range encoding according a conventional approach and those according to embodiments of the present invention. 
         FIG. 7  is another table comparing results for range encoding according a conventional approach and those according to embodiments of the present invention. 
         FIG. 8  is a block schematic diagram of a content addressable memory (CAM) device according to one embodiment. 
         FIGS. 9A to 9B  are schematic diagrams of encoding circuits that can be utilized in the embodiment of  FIG. 8 . 
         FIG. 10  is a diagram illustrating range rules (CAM entries) according to another embodiment of the present invention. 
         FIGS. 11A to 11C  are various examples of range rules (CAM entries) according to another embodiment of the present invention. 
         FIG. 12  is a table showing the types of range rule sets that can be generated according to embodiments of the present invention. 
         FIG. 13A  is a table showing one example of a range rule set for a larger search key value.  FIG. 13B  is a table showing how data and mask values provide range rules. 
         FIGS. 14A to 14C  are tables showing range codes according to another embodiment. 
         FIG. 15  is a diagram showing a method for generating range rules (CAM entries) according to one embodiment. 
         FIG. 16  is a table comparing range rule results for a conventional approach versus those of various embodiments of the present invention. 
         FIGS. 17A and 17B  are schematic diagrams of encoding circuits that can be utilized in the embodiment of  FIG. 8 . 
         FIGS. 18A to 18C  are tables illustrating single search and multiple searches according to embodiments of the present invention. 
         FIG. 19A  is a table comparing range rule results for a conventional approach versus those of various embodiments of the present invention.  FIG. 19B  is a block schematic diagram of a CAM device according to one embodiment. 
         FIGS. 20A and 20B  are tables showing conventional prefix enumeration encoding. 
         FIG. 21  is a block schematic diagram of a conventional CAM device. 
         FIGS. 22A and 22B  are tables showing conventional prefix encoding according by preclassification. 
         FIG. 23  is a block schematic diagram of a conventional CAM device having preclassification. 
         FIG. 24  is a diagram showing an example of a search key that includes both ternary and range matching fields. 
     
    
    
     DETAILED DESCRIPTION 
     Various embodiments of the present invention will now be described in detail with reference to a number of drawings. The embodiments include both methods and devices for implementing range matching with a ternary content addressable memory (CAM). Such an arrangements can allow for a more compact rule set (e.g., smaller number of CAM entries for defining range) and allow for rapid updating of CAM entries. Further, in the disclosed embodiments, the amount of additional circuitry needed can be minimal with respect to conventional range preclassification hardware. 
     According to one embodiment, ranges can be encoded into ternary CAM entries (or portions of ternary CAM entries) utilizing additional bit values that can represent aggregation of bit combinations. Such methods and resulting values will be referred to herein as database independent pre-encoder (DIRPE) methods and values. 
     Entries According to DIRPE (x2) Embodiments 
     Referring now to  FIGS. 1A to 3 , a first embodiment of the present invention will now be described.  FIGS. 1A and 1B  provide a comparison between low bound range encoding according to a conventional prefix enumeration approach and that of the first embodiment. As shown in  FIG. 1A , while only one rule is needed for three of the four ranges, for range &gt;=1, two rules are needed: X1 for covering 01 (and 11) as well as 1X for covering 10 and 11. 
     According to a first embodiment, with respect to a low bound range limit, a rule (e.g., entry) may include bits a 0  and a 1 , and an additional bit that represents the “aggregation” of prefix values. Thus, the encoding of  FIG. 1B  includes an additional low bound aggregation bit “L”. The low bound aggregation bit can capture the case &gt;=1. Looked at in another way, the aggregation bit covers a range portion in which a lower limit includes the values 01-1X. 
     It is noted that a low bound aggregation bit L, can be computed as follows L=a 0 |a 1  (where “|” represents a logic OR operation). 
     Just as a low range bound can include an aggregation bit, so may a high bound rule. Such an arrangement is shown in  FIGS. 2A and 2B . Like  FIG. 1A , in  FIG. 2A  two rules are needed for the case &lt;=2: 0X for covering 01 (and 00) as well as X0 for covering 00 and 10. 
     According to a first embodiment, a rule (e.g., an entry) may include bits a 0  and a 1  and an additional bit that represents a high bound aggregation of prefix values. Thus, the encoding of  FIG. 2B  includes an additional high bound aggregation bit “H”. The high bound aggregation bit can capture the case &lt;=2. Looked at in another way, the aggregation bit covers a range portion that includes the values 0X-10. 
     It is noted that a high bound aggregation bit H, can be computed as follows H=NOT(a 0 *a 1 ) (i.e., a logical NANDing of a 0  and a 1 ). 
     In this way, the ranges rules (entries) expressed by prefix enumeration can be examined two bits at a time (×2). If two low bound rules include a 01-1X transition for the two bits (but the rules are otherwise identical), the bits can be set to XX and the corresponding low bound bit can be set to 1. Similarly, if two high bound rules include a 0X-10 transition for the two bits (but the rules are otherwise identical), the bits can be set to XX and the corresponding high bound bit can be set to 1. 
     It is understood that two bits can be examined in a non-overlapping manner as well as in an overlapping manner. That is, in a non-overlapping case (DIRPE x2 Non-Overlap) bits pair would be examined in the following order a 0 /a 1  , a 2 /a 3 , a 4 /a 5 , etc. It follows that if a range space is defined by W bits (assuming W is an even integer greater than 0), a DIRPE x2 Non-Overlap arrangement would add E=W additional bits for each entry (total for entry=2W): L=½W bits define low bound aggregation cases and H=½W bits define a high bound aggregation cases. 
     In an overlapping case (DIRPE x2 Overlap) bits pair would be examined in the following order a 0 /a 1  , a 1 /a 2 , a 2 /a 3 , etc. It follows that in a range space defined by W bits, a DIRPE x2 Overlap arrangement would add E=2(W−1) bits for each entry (total bits for entry=3W−2): L=W−1 bits define low bound aggregation cases and H=W−1 bits define a high bound aggregation cases. 
     A comparison between conventional prefix enumeration and DIRPE approaches according to embodiments of the present invention will be described with reference to  FIG. 3 . 
       FIG. 3  shows resulting encoding rules (e.g., entry values) for five range examples. Rule set  300  represents a conventional prefix enumeration approach. Rule set  302  represents a DIRPE x2 Non-Overlap case. Rule set  304  represents a DIRPE x2 Overlap case. The five range examples exist on space 0000 to 1111 (bin). The four bits will be referred to herein as a 3 /a 2 /a 1 /a 0 , with a 0  being the least significant bit. Thus, the conventional case  300  includes entries that each includes four bits a 3 -a 0 . 
     The DIRPE x2 Non-Overlap case  302  also includes four bits a 3 -a 0 , but in addition, because the range space is four bits, two extra low bound bits L 1 /L 0  and two extra high bound bits H 1 /H 0  are included. It is understood that low bound bit L 1  represents any aggregation of bits a 3 /a 2  and low bound bit L 0  represents any aggregation of bits a 1 /a 0 . Similarly, high bound bit H 1  represents any aggregation of bits a 3 /a 2  and low bound bit H 0  represents any aggregation of bits a 1 /a 0 . 
     The DIRPE x2 Overlap case  304  includes four bits a 3 -a 0 , and in addition, because the range space is four bits, three extra low bound bits L 2 -L 0  and three extra high bound bits H 2 -H 0  are included. Low bound bits L 2 -L 0  represent any aggregation of bits a 3 /a 2 , a 2 /a 1 , a 1 /a 0 , respectively. Similarly, high bound bits H 2 -H 0  represent any aggregation of bits a 3 /a 2 , a 2 /a 1 , a 1 /a 0 , respectively. 
     A comparison between the cases  300  to  304  shows how aggregation of bit values according to a DIRPE approach can reduce the number of rules needed to define a range. More particularly, for a range 1-6, a conventional prefix enumeration (case  300 ) requires four rules (four CAM entries). In contrast, according to a DIRPE approach, only two CAM entries are needed. 
     Still further, while DIRPE entries according to the present invention may preferably include both low bound bits and high bound bits (H and L), alternate arrangements could include only low bound bits or only high bound bits. 
     Generation of DIRPE x2 Entries 
     From the above it can be seen that the DIRPE encoding can be viewed as “compressing” particular conventional rules into one rule. 
     More particularly, in a “low bound” case, a first rule defining a low range limit can have a prefix ending with the binary value “01”. That is, the “01” may be the last two bits of the rule, or may be followed by “X” values for all bit locations of less significance. Another rule may include “1X” in the place where the first rule includes “01”, but otherwise be the same as the first rule. In such a case, these two rules may be compressed into a single rule that is the same as the first rule, but with the bits “01” being changed to “XX” and a corresponding low bound bit for the pair being changed from X to 1. 
     In a “high bound” case, a first rule defining a high range limit can have a prefix ending with the binary value “10”. That is, the “10” may be the last two bits of the rule, or may be followed by “X” values for all bit locations of less significance. Another rule may include “0X” in the place where the first rule includes “10”, but otherwise be the same as the first rule. In such a case, these two rules may be compressed into a single rule that is the same as the first rule, but with the bits “10” being changed to “XX” and a corresponding high bound bit for the pair being changed from X to 1. 
     One very particular example of a method for categorizing a set of enumerated prefix values for subsequent compression utilizing the above DIRPE x2 approach is set forth in  FIGS. 4A and 4B .  FIGS. 4A and 4B  illustrate a function for identifying prefix values for compression. The function is represented by C-code and utilizes an array “stk” that includes a number of range entry values, given by a prefix value “stk{n}.prfx” and corresponding prefix length “stk{n}.mlen”. Thus, only the first mien bits of the value represents valid match bits, any remaining portions representing bits given a don&#39;t care value “X”. 
     Such prefixes are identified as belonging to various schemes, including a Scheme 1 (s1), which corresponds to a conventional prefix enumeration, a Scheme 2 (s2) which corresponds to a DIRPE x2 Non-Overlap approach, in which a smaller prefix of compressed pair has an odd number of bits, a Scheme 3 (s3) which corresponds to a DIRPE x2 Non-Overlap approach, in which a smaller prefix of compressed pair has an even number of bits, and a Scheme 4 (s4) which corresponds to a DIRPE x2 Overlap approach. 
     In addition, the function utilizes a variable NUMB, which corresponds to overall bit size of the entries. 
     The operation of the function would be well understood and easily implemented by those skilled in the art as machine readable instructions stored on a machine readable media for execution by a general or specialized processor. 
     Reference to  FIGS. 4A and 4B  shows a section  400  that sorts prefix values according to prefix size. A section  402  represents the identification of prefix pairs having the desired low bound transition 01-1X or high bound transition 0X-10, and hence a candidate for compression into a single rule. A section  404  shows a sorting prefix values into the various schemes identified above. 
     In this way, a method described above can receive enumerated prefix values, normally entered as range defining entries into a ternary CAM device, and provide a new set of values with indicators to identify those entries that may compressed. Such values can then be compressed into a smaller set of range entries for a ternary CAM device. 
     Simulation Results for DIRPE x2 
     The range code compression approach according the DIRPE x2 embodiments described above can result in substantial compression in the number of rules needed to describe a range. Further, the above embodiments do not necessarily require pre-existing knowledge of a database containing range mapping. Thus, the present invention can advantageously accommodate range values that can vary randomly, or are otherwise less predictable then “known” data base approaches. 
     Simulations were executed utilizing randomly generated range values over a 16-bit range space. The simulations were run with a method represented by  FIGS. 5A and 5B .  FIGS. 5A and 5B  show two functions represented with C-code. The function “FindChunk”  500  is called by the subsequently listed function “FindGenericExpand”. 
     The function “FindGenericExpand” receives a range start value “strt” and range end value “end”. These values are 16-bit values in the particular example shown. Bits of the “strt” and “end” values are examined in bit sections (sp_arr) to arrive at the number of resulting rules generated for a given range. 
     For a DIRPE x2 Non-Overlap case (assuming 16-bit values), range values are examined in two bit sections. That is, the variable “n_sp”=8, and sp_arr{0}=sp_arr{1}=sp_arr{2}=sp_arr{3}=sp_arr{4}=sp_arr{5}=sp_arr{6}=sp_arr{7}=2. 
     For a DIRPE x2 Overlap case (assuming 16-bit values), range values are examined in bit sections of 4/3/3/3/3. That is, the variable “n_sp”=5, and sp_arr{0}=4, sp_arr{1}=sp_arr{2}=sp_arr{3}=sp_arr{4}=3. 
     Results of such simulations are set forth in a table in  FIG. 6 . As shown in  FIG. 6 , in a conventional prefix enumeration case, randomly generated range values can result in an expansion factor of 14. That is, representing random ranges can require, on average, 14 entries. In contrast, according to DIRPE x2 Non-Overlap case, such random ranges require 10.67 entries. Thus, at the cost of 16 extra bits (e.g., CAM entry width), a DIRPE x2 Non-Overlapping case can reduce the number of entries by 31%. As also shown in  FIG. 6 , according to DIRPE x2 Overlapping case, such random ranges can require 9.55 entries. Thus, as the cost of 30 extra bits, a DIRPE x2 Overlapping case can reduce the number of entries by 47%. 
     In this way, a DIRPE x2 range compression approach can substantially reduce the number of rules needed to express a range, and hence the number of CAM entries needed to express a range. 
     Simulations were also executed that represent more particular application conditions. In some applications, while a range start value can be essentially random, a size of the range is expected to be constrained (e.g., maximum of 100). Such a simulation can model applications in which an access control list (ACL) can be used to select applications that use port numbers restricted to a narrow range (a few tens). Simulation results for such an application are shown in  FIG. 7 . As shown by  FIG. 7 , even under such range size restrictions, the DIRPE x2 range compression approaches can yield significant reductions in the number of CAM entries needed as compared to conventional prefix enumeration approaches. 
     In this way, the above embodiments can provide significant advantages over conventional prefix enumeration approaches. 
     Still further, all of the above advantages do not require any preexisting knowledge of expected range values, as best shown by the simulation results, which utilized random range values. 
     CAM Pre-Encoder According to DIRPE (x2) Embodiments 
     Referring now to  FIG. 8 , a CAM device according to one embodiment is set forth in block schematic diagram and designated by the general reference character  800 . A CAM device  800  can include a ternary CAM cell array  802  that receives compare data (i.e., search keys or comparands) by way of compare data lines  804 . All or a portion of the compare data lines  804  can carry W range bits. Such range bits can be received by a pre-encoder circuit  806 . A pre-encoder circuit  806  can generate high and low bound bits according to the range bits. 
     Referring still to  FIG. 8 , as noted above, in a DIRPE x2 case, appropriate search key bits corresponding to low bound bits (L) can be generated by the logical ORing of search key bit pairs. Similarly, search key bits corresponding to high bound bits (H) can be generated by the logical NANDing of search key bit pairs. In addition, in a DIRPE x2 case, W bits can be encoded into a larger number of bits 2W, and the number of low bound bits (L) would be W/2 and the number of high bound bits (H) would be W/2. In a DIRPE x2 Non-overlap case, W bits can be encoded into 3W-2 bits, and the number of low bound bits (L) would be W−1 and the number of high bound bits (H) would be W−1. 
     Referring now to  FIG. 9A , one particular example of a range pre-encoder according to one embodiment is set forth in a block schematic diagram and designated by the general reference character  900 . A range pre-encoder  900  can be used for a pre-encoder like that shown as  806  in  FIG. 8  to provide DIRPE x2 Non-overlap encoding. 
     A range pre-encoder  900  can include data lines  902 , a first set of logic gates  904  and a second set of logic gates  906 . Data lines  902  can allow the W range bits to essentially “flow-through” the circuit  900 . A first set of logic gates  904  can include W/2 OR gates that encode bit pairs, in a non-overlapping manner, to generate W/2 encoded bits corresponding to low bound (L) bits. A second set of logic gates  906  can include W/2 NAND gates that encode bit pairs, in a non-overlapping manner, to generate W/2 bits corresponding to high bound (H) bits. 
     It is noted that a pre-encoder  900  can result in a relatively small area increase for a ternary CAM device, needing only 8×W additional gates in a CMOS implementation. This is but a tiny fraction of the gate count needed for most conventional pre-classifiers such at that shown in  FIG. 23 . 
     Referring now to  FIG. 9B , a second particular example of a range pre-encoder according to an embodiment is set forth in a block schematic diagram and designated by the general reference character  950 . A range pre-encoder  950  can be used for a pre-encoder like that shown as  806  in  FIG. 8  to provide DIRPE x2 Overlap encoding. 
     A range pre-encoder  950  can include the same general components as that of  FIG. 9A , including data lines  952 , a first set of logic gates  954  and a second set of logic gates  956 . Like  FIG. 9A , data lines  952  can allow the W range bits to essentially “flow-through” the circuit  950 . A first set of logic gates  954  can include W−1 OR gates that encode bit pairs, in an overlapping manner, to generate W−1 encoded bits corresponding to low bound (L) bits. A second set of logic gates  956  can include W−1 NAND gates that encode bit pairs, in an overlapping manner, to generate W−1 bits corresponding to high bound (H) bits. 
     It is noted that a pre-encoder  950  also results in a relatively small area increase for a ternary CAM device, needing only 16(W−1) additional gates in a CMOS implementation. This too, can be but a tiny fraction of the gate count needed for most conventional pre-classifiers such at that shown in  FIG. 23 . 
     In this way, with relatively little additional circuitry, a CAM device can pre-encode key values to generate input values appropriate for bit aggregation entries, such as those generated according to the DIRPE x2 methods above, as but a few examples. 
     Entries According to DIRPE (xK) Embodiments 
     The above embodiments have illustrated cases in which two bits for range rules are examined for possible compression into a single rule. However, the present invention also encompasses approaches that examine more than two bits at a time. Such approaches will now be described as a DIRPE xK method. 
     In a DIRPE xK method, a range space may be represented by W bits. These W bits can then be divided into two or more portions in order of significance (e.g., K1, K2 . . . , with the significance of K1 being higher than K2). The K1 bits may then utilized to represent the range space with 2^K1 bits, with each of the 2^K1 bits representing a different, equal sized division of the range space. Remaining portions (e.g., K2) may represent a successive subdivision (2^K2) of the space represented by the next higher significance bits. 
     To better understand CAM entries according to a DIRPE xK approach, various examples will now be described. 
       FIG. 10  is a general representation showing a first example of rules (and hence CAM entries) according to a DIRPE xK approach. In  FIG. 10 , a range space can include W bits, where W is an integer. The W bits are split into a more significant portion K1 and a less significant portion K2. A total range space (e.g., 0 to 2^(W−1)) can be conceptualized as being divided into 2^K1 equal sized divisions. If a division falls entirely within a range limit, the bit corresponding to the space is set to a don&#39;t care “X” state. Conversely, if a division falls entirely outside a range limit, the bit corresponding to the space is set to a no-match “0” state. In this way, a first level rule (show as LVL1) can illustrate portions of the range space that fall entirely within the limits of a specified range. 
     As will be described at a later point herein, such a rule can be considered a “spanning” or “span” rule as it represents division of the range space fully spanned by range limits. 
     The granularity represented by a first level rule cannot always define a desired range limit. Thus, those divisions including the end of a range and the start of the range can be conceptualized as being further subdivided into 2^K2 equal sized subdivisions. As in the first level case, if a subdivision falls entirely within a range limit, the bit corresponding to the space is set to a don&#39;t care “X” state. Conversely, if a subdivision falls entirely outside a range limit, the bit corresponding to the space is set to a no-match “0” state. 
     In the particular example of  FIG. 10 , a division  1000  includes the start of a range. While division  1000  is represented by a “0” in a first level rule, in a second level rule  1004 , the division is further defined by 2^K2 bits. Similarly, a division  1002  includes the end of the range. While division  1002  is represented by a “0” in a first level rule, in a second level rule  1006 , the division is further defined by 2^K2 bits. 
     To better understand the generation of CAM entries according to a DIRPE xK approach, a number of particular examples will now be described. 
       FIGS. 11A to 11C  shows one example of CAM entries that can be generated for a range of 21-53 on a 6-bit range space. In the example shown, the 6-bits that define a range space have been divided into a first portion (K1), which includes the three most significant bits, and a second portion (K2), which includes the three less significant bits. Thus, the resulting rules will include a first portion of 2^K1 bits and a second portion of 2^K2 bits. That is, in  FIGS. 11A to 11C , W=6, and K1=K2=3. 
       FIG. 11A  shows the generation of a first level or “spanning” rule RULE 1  for the given range (21-53).  FIG. 11A  shows how the range space (0-63) can be conceptualized as being divided into 2^K1=8 equally sized divisions. The resulting RULE 1  thus includes 2^K1=8 bits, each corresponding to one of the divisions. For the range limit of 21-53, the first three divisions (0-7, 8-15 and 16-23) are not fully included within the range: 0-7 and 8-15 are entirely outside the range, while 16-23 is only partially included in the range. As a result, the corresponding three left-most bits of the 2^K1 bits are set to “0”. The next three divisions (24-31, 32-39 and 40-47) are fully included within the range. As a result, the next three bits (going from left to right) of the 2^K1 bits are set to “X” (don&#39;t care). The last two divisions (48-55 and 56-63) are not fully included within the range, thus the two right-most bits of the 2^K1 bits are set to “0”. 
     RULE 1  of  FIG. 11A  also includes 2^K2 bits. However, because it is a spanning rule, all such bits are set to “X” don&#39;t care. This can be conceptualized as indicating that all subdivisions of the indicated divisions (3 rd  to 5 th  bits) are included in the range. 
       FIG. 11B  shows the generation of a second level “start” rule RULE 2  for the given range. For the range limit of 21-53, the start of the range (21) is included in the division 16-23. As a result, the corresponding bit (third bit from the left) of the 2^K1 bits is set to “1”. 
     Because RULE 2  is a start rule, the remaining 2^K2 bits of the rule further define the start of the range. The 2^K2=8 bits represent the 8 values present in the division indicated by the first part of the rule (division 16-23). Because values 16-20 are outside the range, and values 21-23 are included in the range, the first five left-most bits (corresponding to 16-20) are set to “0”. The remaining bits (corresponding to 21-23) are within the range, and so are set to “X”. 
       FIG. 11C  shows the generation of a second level “end” rule RULE 3  for the given range. For the range limit of 21-53, the end of the range (53) is included in the division 48-55. As a result, the corresponding bit (seventh bit from the left) of the 2^K1 bits is set to “1”. 
     Because RULE 3  is an end rule, the remaining 2AK2 bits of the rule further define the end of the range. The 2^K2=8 bits represent the 8 values present in the division indicated by the first part of the rule (division 48-55). Because values 48-53 are included in the range, the first six bits (corresponding to 48-53) are set to “X”. The remaining bits (corresponding to 54-55) are outside the range, and so are set to “0”. 
     In this way, range values provided with 6-bit values can be represented by 16 bit CAM entries. 
     One skilled in the art would understand that a set of rules for a given range determined according to a DIRPE xK method could take a variety forms depending upon where range limits fall with respect to division/subdivision of a given range space. Examples of such various forms are illustrated in  FIG. 12 . 
       FIG. 12  shows various rules for ranges on a 5-bit range space. The rules have been generated according to a 3-bit/2-bit division of the 5-bit range space. The various rules show how, according to the particular range limit, rules may include various combinations of “span” rules, start rules and end rules. 
     Thus,  FIG. 12  provides a general representation of how entries for range matching can appear within a ternary CAM according to a DIRPE xK approach when a range space (W) is divided into two portions (K1 and K2). 
     While the above examples have illustrated cases in which the bits of a range space W are divided into 2 portions (K1 and K2), the present invention should not be construed as being limited to such a particular arrangement. It is understood that a range space of W bits can be divided into a larger number of portions.  FIG. 13A  shows one example of such an arrangement. 
       FIG. 13A  shows a 16-bit range space divided in a 4/4/4/4 manner. That is, the W bits are divided into K1, K2, K3 and K4 portions, each of which includes four bits. As a result, resulting rules include 64 bits=2^K1+2^K2+2^K3+2^K4. It is understood that the first 16 bits of any rule (beginning on the left) correspond to a 4k division of a 64k range space. The next 16 bits represent 256 bit subdivision of a 4k division indicated in the previous 16-bits. Similarly, the third set of 16 bits represents 16 bit divisions of a 256 bit subdivision indicated in the previous 16-bits. The last 16 bits represent the sixteen bit subdivision of the previous 16 bits. 
       FIG. 13B  illustrates data values that may be utilized to write CAM rules as CAM entries. Thus, a rule or entry may be formed by writing two different values to the CAM, including a data value and corresponding mask value. As is well understood, a predetermined mask bit value (in this example 1) will result in the corresponding CAM entry location having a don&#39;t care (X) state. Thus, in  FIG. 13B , bit locations of data values indicated by an X can be either a 0 or a 1, as they will be masked. 
     Referring now to  FIGS. 14A to 14C , another particular approach to a DIRPE xK case will be described. This approach, referred herein as DIRPE xK-MSB, can ignore a most significant bit MSB in rule generation. Thus, range rules can be based on the less significant bits, without having to consider the most significant bit. 
     In a DIRPE xK-MSB case, resulting rule sets can be divided into two types according to range spread. In particular, if a range is fully within either half of the range space (i.e., the MSBs of the range start value and range end value are both “0” or both “1”), a resulting range can be expressed by one set of rules according to the less significant bits. If the range “straddles” the MSB transition from 0-1 (i.e., the MSB of the range start is “0” and the MSB of the range end is “1”), the range can be expressed by two rule sets, one having an open ended range start, and the other having an open ended range end. 
     The very particular example of  FIGS. 14A to 14C  shows a DIRPE xK-MSB case illustrating a 1/3/3/3 division of a 10-bit range space. That is, K1=1 and K2=K3=K4=3.  FIG. 14A  is a representation of the 10 bit range space. On the right of  FIG. 14  are three range examples with arrows pointing to how such ranges can be represented in a DIRPE xK-MSB 1/3/3/3 fashion. 
       FIG. 14B  shows a resulting set of rules corresponding to the case where a range falls within an upper or lower half of the range space. In such a case, a rule set appears as if the MSB was ignored, with the 2^K2 bits representing a division of one half the range space (e.g., from 0000000 to 0111111 or from 1000000 to 1111111). 
     In contrast,  FIG. 14C  shows a set of rules for the case where the range spans the 0-1 transition of the MSB. In such a case, the resulting rule set can include a first “open ended” rule set  1400 , that provides a match indication for values starting with the range start value and ending at the top of the first half of the range space (in this example 0111111). The rule set also includes a second “open ended” rule set  1402 , that provides a match indication for values starting at the bottom of the second half of the range space (in this example 1000000) and ending at the range end value. 
     From the numerous examples above, one skilled in the art could arrive at various other divisions of the bits of a range space to arrive at other ways of generating rules according to DIRPE xK approaches. Accordingly, the above embodiments should not be construed as limiting to the metes and bounds of the invention. 
     Generation of DIRPE xK Entries 
     Approaches for generating rules (and corresponding CAM entries) according to a DIRPE xK will now be described. 
     It will first be assumed that a range start value (strt) and a range end value (end) are expressed by W bit values. The W bits of range values can be divided into chunks Ki (where i=1 to n). The bits of each such chunk are examined in order beginning with K1 in increasingly finer levels. For this discussion a value “v_si” will be considered the value of the Ki bits of a W bit range start value. Similarly, a value “v_ei” will be considered the value of the Ki bits of a W bit range end value. 
     It is understood that corresponding to first level (K1 bits), a range (&gt;=v_si) can be represented by 2^Ki bits in the form (0000XXXX), with the Xs starting at position v_si. Similarly, the range (v_s 1 , v_ei) can be represented by 2^Ki bits in the form (00XXXX00). 
     To represent a range (strt, end), such a range can be divided up according to the following general steps: 
     1. If (strt=end) go to step 4, as only a last level will express the range limits. Otherwise, the first level should be found at which the values strt and end differ (i.e., where v_si≠v_ei). Once this level is found, the method can proceed to step 2. 
     2. At this level, it is determined which (if any) of the 2^Ki space divisions are fully within the range limits: (strictly&gt;strt) and (strictly&lt;end). If any such divisions are fully within the range limits, the bit corresponding to the division is set to “X”, otherwise the bit is set to “0”.
 
3. Each lower level will have one entry corresponding to (&gt;start) (i.e., rule further defining a range start) and one entry corresponding to (&lt;end) (i.e., rule further defining a range end). In addition, with such entries, the bit positions in higher levels corresponding to the current level are set with the (=strt) bit  1 , or the (=end) bit set to 1, accordingly.
 
4. A very last level has bits set to Xs in a portion that is (&gt;=strt) or a portion that is (&lt;=end). If a last level is the first level at which “strt” and “end” vary (only chunk Kn varies), or strt=end, there can only be one entry with one or more Xs defining positions (&gt;=strt) and (&lt;=end). If a last level covers a range (&gt;=0), then all bits of this level will be Xs. As a result, the “start” bit position of the previously higher level corresponding to the current level is set to X. Similarly, if a last level covers a range (&lt;=end), then all bits of this level will be Xs, and the “end” bit position of the previously higher level corresponding to the current level is set to X.
 
     An example showing the formation of CAM entries according to the above method will now be described with reference to  FIG. 15 .  FIG. 15  shows the encoding of a six bit range value, which is divided into two chunks K1 and K2 of three bits each.  FIG. 15  represents the four steps described above as STEP  1 ) to STEP  4 ). 
     In STEP  1 ), the first level at which the range bits vary is the first level (chunk K1). 
     In STEP  2 ), the 2^K1=8 space divisions are examined to see if they fall completely within the range. Two space divisions meet the criteria (8-15 and 16-23), thus the corresponding bits (bits  2  and  3  from the left) are set to “X”. The remaining bits of the 2^K1 bits are set to “0”. In addition, all bit of the lower set of 2^K2 bits are set to X. 
     In STEP  3 ), lower entries are formed, one for (&gt;strt) and one for (&lt;end). Further, at the higher level of the start entry (&gt;strt) the bit is set to one to indicate the division that includes a start value (=strt). In addition, at the higher level of the end entry (&lt;end) the bit is set to one to indicate the division that includes an end value (=end). 
     In STEP  4 ) a last level of the &gt;strt entry has bits set to Xs for values that are &gt;=strt. In a last level of the &lt;end, bits that are &lt;=end are set to Xs. 
     One skilled in the art could employ the above method to arrive at entries for any division of range values. 
     Simulation Results for DIRPE xK 
     The range code compression approach according the DIRPE xK embodiments described above can result in substantial compression in the number of rules needed to describe a range. Further, as in the case of DIRPE x 2  approaches, the above DIRPE xK embodiments do not necessarily require pre-existing knowledge of a database containing range mapping, and thus can accommodate range values that can vary randomly, or are otherwise less predictable then “known” data base approaches. 
     Simulations were executed utilizing randomly generated range values over a 16-bit range space. 
     Results of such simulations are set forth in a table in  FIG. 16 .  FIG. 16  provides a comparison of simulation results for range values on a 16 bit range space.  FIG. 16  provides results for a conventional prefix enumeration approach (1 BIT at a time), a DIRPE x2 Non-Overlap approach, like that previously described (2 BITS at a time), and three possible DIRPE xK cases (4/3/3/3/3, 4/4/4/4 and 6/5/5). It is understood that the DIRPE xK cases describe how the 16 bits of a range space are portioned and encoded in a “one-hot” manner. The table of  FIG. 19A  includes shows the number of additional bits needed for each entry (as compared to a conventional case, which utilizes 16 bits). 
     As shown in  FIG. 16 , in a conventional prefix enumeration case, randomly generated range values can result in an expansion factor of 30. In contrast, the DIRPE xK cases result in expansion factors of 9, 7 and 5 for the 4/3/3/3/3, 4/4/4/4 and 6/5/5 cases, respectively. 
     In this way, a DIRPE xK range compression approach can substantially reduce the number of rules needed to express a range, and hence the number of CAM entries needed to express a range. 
     CAM Pre-Encoder According to DIRPE xK Embodiments 
     A CAM device according to an embodiment that provides encoding for DIRPE xK entries can have the same general construction as the CAM set forth in  FIG. 23 , but with the preclassifier  2304  being replaced by a pre-encoder. Range bits can be received by a pre-encoder circuit, however, such a pre-encoder circuit can provide xK encoding rather than ×2. Even more particular, in a DIRPE xK case, appropriate search key bits can be generated by encoding divided portions (e.g., K1, K2 . . . ) of the range bits W in a “one hot” fashion. 
     Referring now to  FIG. 17A , one particular example of a range pre-encoder according to a DIRPE xK approach is set forth in a block schematic diagram and designated by the general reference character  1700 . A range pre-encoder  1700  can be used for a pre-encoder like that noted above. 
     A range pre-encoder  1700  can receive compare data lines  1702  that carry a range value (or a range field portion of a search key). Such compare data lines  1702  can be divided into portions K1 to Ki, where i is an integer greater than 1. Each compare data line portion (K1 to Ki) can be applied to a decoder circuit that provides a “one-hot” output with respect to received input values. In the very particular example of  FIG. 17A , each compare data portion (K1 to Ki) is provided to a corresponding decoder  1704 - 1  to  1704 - i . Decoder  1704 - 1 , which receives K1 input values, can provide 2^K1 output values RDEC 1 , which are activated in a one-hot manner. That is, a different RDEC 1  value is activated for each different value of the K1 bits. The remaining decoder(s) (e.g.,  1704 - i ) can operate in the same fashion, providing one-hot output values. 
     It is understood that while the above examples have shown an arrangement in which a decoder circuit is provided for each portion of a range value, in other arrangements, a single decoder could be shared among multiple portions via a multiplexer or equivalent arrangement. 
     Referring now to  FIG. 17B , a particular example of a decoder is set forth in schematic diagram and designated by the reference character  1750 . A decoder  1750  can be included as a decoder such as that shown as  1704 - 0  and/or  1704 - i  in  FIG. 17A . The very particular decoder  1750  of  FIG. 17B  can decode three input bits (R 2  to R 0 ) into eight output bits (RDEC 1 - 0  to RDEC 1 - 7 ). One skilled in art could arrive at other decoding schemes for larger numbers of input bits. 
     It is noted that a pre-encoder  1700  can result in a relatively small area increase for a ternary CAM device. Still further, it is noted that a decoder in a DIRPE xK case, like that shown as  1704 - 1  to  1704 - i  and  1750  in the above examples, may utilize existing decoding circuitry already present in a CAM device, such as address pre-decoders utilized for accessing CAM entries for read/write operations. In such an arrangement, only additional multiplexer circuits, or the like may be needed. As but one example, an input multiplexer could switch between CAM address values (e.g., either input or predecoded) and portion of search key value. An output multiplexer could switch resulting outputs between further decoding sections (e.g., row drivers, further decoders) and compare data inputs to a CAM array. 
     In this way, with relatively little additional circuitry, a CAM device can pre-encode key values to generate “one-hot” input values for search key portions appropriate for entries such as those generated according to the DIRPE xK methods above. 
     DIRPE xK Multiple Search Embodiments 
     In cases where a CAM device can provide search rates at a higher speed than that needed by a particular application, DIRPE xK type rules can be divided into multiple sections (or levels), with each such section occupying an entry. In this way, relatively large bit sized DIRPE xK entries can be spread over multiple smaller bit sized entries. In such an arrangement, each section can include a number of bits that identify the level of the section. 
     To better understand CAM entries according to such a multiple search embodiments, specific examples will now be described. 
       FIGS. 18A to 18C  illustrate a case in which DIRPE xK rules can be sectioned into multiple entries.  FIG. 18A  shows nine rules generated according to a DIRPE xK case according to 4/3/3/3/3 encoding (i.e., K1=4, K2=K3=K4=K5=3). The nine rules can include 2^4+2^3+2^3+2^3+2^3=48 bits. Each rule includes a lowest defining section, which contains the lowest level containing significant information with respect to the range portion represented. The lowest defining section for each rule is circled in  FIG. 18A . 
       FIG. 18B  is a table showing a binary representation of each rule shown with respect to the range bits encoded in  FIG. 18A . “Fixed” portions of such rules are shown by darkened lines. Fixed portions are those bit values that do not change for the portion of the range represented by the rule.  FIG. 18C  shows how the rules of  FIG. 18A  can be represented by new entries of smaller bit width, where such entries are searched by a sequence of search operations. Each new entry rule can include a level value LVL, which corresponds to the lowest defining section of a rule. As would be understood with reference to  FIGS. 18A and 18B , each rule further includes its lowest defining section value (circled portion of  FIG. 18A ) as well as the fixed portions of the range bits for the rule (darkened line portion of  FIG. 18B ). Because, the sections 2^K2, 2^K3, 2^K4, and 2^K5 have fewer bits than section 2^K1 (i.e., 8 versus 16), entries for these sections can have “dummy” bits  1800  with “don&#39;t care” values. 
     It is understood that in a search operation for a rule set like that of  FIG. 18B , each search will include five consecutive searches, each with a corresponding level bit value and portions of the range bits (in this case portions K1-K4). It is also understood that some additional logic operations can be utilized to establish priority among matching results. 
     As but one example, such multiple search entries can be entered such that a highest priority rule has a lowest physical address. In such an event, among the generated multiple match results, that with the lowest address can be selected as the “winning” match. 
     In this way, DIRPE xK rules can be divided and stored in smaller width entries along with additional level ID bits. 
     Simulations were executed utilizing randomly generated range values over a 16-bit range space to compare various multiple search variations. 
     Results of such simulations are set forth in a table in  FIG. 19A .  FIG. 19A  provides a comparison of simulation results for range values on a 16 bit range space.  FIG. 19A  provides results for a conventional prefix enumeration approach (1 BIT at a time), and various DIRPE xK multiple search approaches: 4/3/3/3/3, 4/4/4/4, 6/5/5 and 1/5/5/5. 
     The table of  FIG. 19A  shows the number of searches needed to fully examine each rule group. The table also shows the number of extra bits per entry (assuming 4 level ID bits), as well as a resulting expansion factor. 
     As shown by comparing  FIG. 16  to  FIG. 19A , a multiple search case does not necessarily translate to either a better or worse case. In addition, it is also noted that the 1/5/5/5 case is understood to be a DIRPE xK-MSB type case. The three searches are executed on three sections of 2^5 bits (not including level ID bits), with a range being expressed by two “open ended” rule sets if it falls within a 0-1 transition of the MSB of the range space. 
     In this way, a DIRPE xK range compression approach can be utilized in smaller bit width CAM entries by placing different encoded sections of resulting rules into their own CAM entry along with level ID bits that indicate the section&#39;s position with respect to the other sections of the rules. 
     Referring now to  FIG. 19B , one particular example of a CAM device that can provide multiple search capabilities. A CAM device  1900  can include an input  1902  that receives a search key having W range bits. Such range bits can be stored in a register  1904 . Portions (K1 to Kn) of range bits W can be selectively output with a multiplexer  1906  according to a search number value SEARCH#. Portions (K1 to Kn) output from multiplexer  1906  (Ki) can be applied to a preencoder  1910 . A preencoder  1910  can provide “one-hot” encoding as described above. Further, in the event portions (K1 to Kn) do not have an equal number of bits, preencoder can insert “dummy” bits as either input values or output values, as noted in  FIG. 18C . 
     A CAM device  1900  can also include a level encoder  1912  that can generate level bits. In the very particular arrangement of  FIG. 19B , a level encoder  1912  can generate level bits according to a search number value SEARCH#. 
     A CAM device  1900  can include a CAM array  1914 . Such a CAM array  1914  can include entries having encoded bits ENC, level bits LVL BITS, and portions of range bits according to the arrangement illustrated in  FIG. 18C . It is noted that a devices and methods according to the disclosed embodiments may be particularly compatible with systems the provide packet processing, such as those utilizing access control lists (ACLS). In such an application, a CAM can accommodate random or pseudo-random varying range values rapidly, and with relatively little additional hardware. Further, such rapid range matching capabilities do not require pre-existing knowledge of an ACL database. 
     It is also understood that while it can be particularly advantageous to include encoding hardware described above on the same substrate as part of a CAM device, the present invention should not be limited to such an application. Alternate embodiments may include such circuits as on portion of a multi-chip package, or execute such operations with processor, or the like. 
     Further, while the embodiments have shown arrangements that can encode one range field, it is understood that the present invention also includes arrangements that encode multiple range fields, such as the example shown in  FIG. 24 . In such a case, multiple encoders may be employed to provide multiple range field encoding in parallel. Alternatively, provided compare operations are sufficient fast, multiple range fields can be multiplexed between one encoder. 
     It is understood that the embodiments of the invention may be practiced in the absence of an element and or step not specifically disclosed. That is, an inventive feature of the invention can be elimination of an element. 
     Still further, while the above embodiments have described generation of rules according to a standard binary sequence, the present invention could be utilized for other sequences, such as “grey” code, as but one example. In such an arrangement, range compression may occur along a different type of bit transition. 
     Along these same lines, while the above examples have expressed CAM entry (e.g., range rule sets) in which bits are arranged in a particular direction, such examples should not be construed as limiting the invention thereto. As but a few particular examples, in the case of DIRPE x2 encoding, within CAM entries, LO and/or HI bound bits could be interspersed with range value bits and/or each other, with the encoded key values being applied accordingly. Similarly, various sections of a DIRPE xK case are not limited to any particular arrangement within a CAM entry (or entries), needing only to correspond to the order at which search keys are applied. 
     Accordingly, while the various aspects of the particular embodiments set forth herein have been described in detail, the present invention could be subject to various changes, substitutions, and alterations without departing from the spirit and scope of the invention.