Method and apparatus to process data based upon estimated compressibility of the data

A method includes, in a data storage device, determining an estimated compression ratio. The estimated compression ratio is based on hash values of a subset of a data set. The method includes selectively processing the data set based on the estimated compression ratio prior to storage of data associated with the data set in a memory of the data storage device.

FIELD OF THE DISCLOSURE

The present disclosure is generally related to compressibility of data and processing the data based upon an estimate of the compressibility of the data.

BACKGROUND

Non-volatile data storage devices, such as universal serial bus (USB) flash memory devices or removable storage cards, have allowed for increased portability of data and software applications. In order to efficiently utilize the memory capacity of a non-volatile data storage device, data may be compressed prior to storage.

One technique to compress data is to create a data representation from which redundant portions have been removed. For example, a data set may include a plurality of data elements in a string, and a portion of one or more of the data elements may be identical. A data representation of the data set may be formed by eliminating redundant (identical) data portions of the data set. The representation of the data set can be stored and upon request, such as a read request, the data set can be reconstituted to its original form by replacing the redundant portions that were removed in order to form the representation of the data set.

Compression of a large data set can be a time-intensive process that can consume significant computational bandwidth. In some cases, compression may not be warranted, such as instances in which the data set has only a small amount of redundancy. In such cases, compression would not significantly reduce an overall size that the representation of the data set would occupy in storage, as compared with the uncompressed data set. It would be helpful to be able to predict, in a time efficient and computationally efficient manner prior to performing the compression, whether compression of a data set would significantly reduce the memory space needed for storage.

SUMMARY

An estimated compression ratio of a data set may be determined from a subset of the data set. The subset of the data set may include data elements that are uniformly distributed across an entirety of the data set. The estimated compression ratio may be calculated based on hash values for each of the data elements of the subset of the data set. The estimated compression ratio may be determined from a count of collisions among the hash values of the subset of the data set.

The data set may be processed prior to storage in a memory of a data storage device based on the estimated compression ratio. Processing may include compression of the data set, error encoding of the data set, other processing, or a combination thereof. A decision of whether to compress the data set prior to storage may be based on a comparison of the estimated compression ratio to a threshold value. In addition or in the alternative, a type of processing to apply to the data, such as a type of compression, may be determined based on the estimated compression ratio.

DETAILED DESCRIPTION

Referring toFIG. 1, a particular embodiment of a system100includes a data storage device106coupled to a host device104. The data storage device106includes a memory108coupled to a controller110. The controller110includes processing hardware that is configured to estimate a compression ratio:
compression ratio=compressed data size/uncompressed data size  (1)

The estimated compression ratio is determined based on hash values of a subset142of a data set102. The compression ratio is a ratio of compressed data size to uncompressed data size. The processing hardware is further configured to process the data set102based on the estimated compression ratio.

The host device104may include a mobile telephone, a music player or video player, a gaming console, an electronic book reader, a personal digital assistant (PDA), a computer, such as a laptop computer, a notebook computer, or a tablet, any other electronic device, or any combination thereof.

The memory108may be a non-volatile memory, such as a NAND flash memory. The data storage device106may be a memory card, such as a Secure Digital SD® card, a microSD® card, a miniSD™ card (trademarks of SD-3C LLC, Wilmington, Del.), a MultiMediaCard™ (MMC™) card (trademark of JEDEC Solid State Technology Association, Arlington, Va.), or a CompactFlash® (CF) card (trademark of SanDisk Corporation, Milpitas, Calif.). As another example, the data storage device106may be configured to be coupled to the host device104as embedded memory, such as eMMC® (trademark of JEDEC Solid State Technology Association, Arlington, Va.) and eSD, as illustrative examples.

The controller110may be configured to receive data and instructions from, and send data to, the host device104while the data storage device106is operatively coupled to the host device104. For example, the controller110may receive the data set102from the host device104. The controller110may be further configured to send data and commands to the memory108and to receive data120from the memory108. For example, the controller110is configured to send data and a write command to instruct the memory108to store the data to a specified address. As another example, the controller110is configured to send a read command to read the data120from a specified address of the memory108.

The controller110may include a compression ratio estimator140. The compression ratio estimator140may be configured to determine an estimated compression ratio144associated with a data set, such as the data set102, based on hash values of the subset142of the data set102, as described in further detail with respect toFIG. 2. The estimated compression ratio144may be determined from the subset142of the data set102, and the estimated compression ratio144may be output from the compression ratio estimator140to a compressor114.

The compressor114may be configured to compress a data set, such as the data set102, according to a selected compression method or according to a combination of compression methods. The compression method, if any, to be applied to the data set102may be selected based upon the estimated compression ratio144. By compressing the data set102to form a representation130of the data set102and storing the representation130of the data set102, less space may be occupied in the memory108than if the (uncompressed) data set102had been stored. In response to a read request, the representation130of the data set102may be retrieved from the memory108and uncompressed, e.g., by the compressor114or by a decompressor (not shown) within the controller110, to yield the original data set102. Although the compressor114is illustrated as included in the controller110, in other implementations the compressor114may be external to the controller110.

Optionally, the controller110may include an error correction coding (ECC) encoder112. The ECC encoder112may be configured to encode data using an ECC encoding scheme, such as a Reed Solomon encoder, a Bose-Chaudhuri-Hocquenghem (BCH) encoder, a low-density parity check (LDPC) encoder, a Turbo Code encoder, an encoder configured to encode according to one or more other ECC encoding schemes, or any combination thereof. The ECC encoder112may be configurable to apply different ECC encoding schemes based on a size of the data. For example, the ECC encoder112may be configurable to apply a first encoding scheme to uncompressed data, or to apply a second, more powerful encoding scheme using more parity bits, to compressed data.

In operation, the data storage device106may receive the data set102from the host104. The data set102may be input to the compression ratio estimator140. A subset142of the data set102may be formed from the data set102. The subset142of the data set102may include fewer data elements than the total number of data elements in the data set102. The subset142of the data set102may be formed by selecting data elements uniformly over an entirety of the data set102. For example, when the data set102includes 4096 data elements, the subset142of the data set102may include every fourth data element of the data set102, for a total of 1024 data elements in the subset142of the data set102.

The estimated compression ratio144may be determined based upon the subset142. Processing of the data set102prior to storage of the data set102in the memory108of storage device106may be determined based on the estimated compression ratio144. Processing may include compression of the data set102and/or error correction encoding of the data set102. For example, the compression ratio estimator140may determine whether to compress the data set102based on the estimated compression ratio144. Also, the ECC encoder112may determine a type of error encoding to apply to a representation130of the data set102based on the estimated compression ratio144.

As described in further detail with respect toFIG. 2, the estimated compression ratio144may be compared to a threshold value in order to determine whether to compress the data set102prior to storage at the memory108. In an example, in response to the estimated compression ratio satisfying the threshold value, i.e., is equal to or greater than the threshold value, compression of the data set102is not executed, because the (compressed) representation of the data set102does not result in a significant reduction in memory space needed for storage of the representation of the data set102as compared with storage of the data set102. In another example, when the estimated compression ratio144is less than the threshold value, compression of the data set is executed to form the representation130of the data set102. The representation130of the data set102may occupy a smaller portion of the memory108than the portion of the memory108that would be occupied by storing the data set102.

The compression ratio estimator140may send the estimated compression ratio144to the compressor114and the compressor114may determine a type of compression to apply to the data set102based upon the estimated compression ratio144. Compression techniques that may be applied include lossless compression (e.g., Lempel-Ziv compression), lossy compression (e.g., MPEG-2), one or more other compression techniques, or a combination thereof.

Processing may also include applying error correction to the representation130of the data set102prior to storage in the memory108. The representation130of the data set102may be input to the ECC encoder112and the representation130of the data set102may be encoded with a selected error correction code encoding scheme by the ECC encoder112. The ECC encoder112may receive the estimated compression ratio144from the compression ratio estimator140and the ECC encoder112may select a type of error correction code encoding based upon the estimated compression ratio144. The ECC encoder112may output an encoded representation132of the representation130of the data set102for storage at the memory108. Both the representation130and the encoded representation132comprise data associated with the data set102.

When the comparison of the estimated compression ratio144to the threshold value indicates that compression is not to be initiated, the data set102may be directly input to the ECC encoder112for processing. The ECC encoder112may apply error encoding to each data element of the data set102. The ECC encoder112may receive the estimated compression ratio144from the compression ratio estimator140, and the ECC encoder112or the controller110may determine the type of error correction code encoding to be applied to the data set102based on the estimated compression ratio144. The output of the ECC encoder112may be the encoded representation132of the data set102, which may be stored in the memory108.

Thus, the estimated compression ratio144determined based on evaluating hash values of a subset of the data set102can serve as a basis for a determination as to whether or not to compress the data set102to a representation130of the data set102. The estimated compression ratio144can also serve as a basis for determining the type of error correction code encoding to apply to the data set102, or to the representation130of the data set102. Because the estimated compression ratio144is determined from a subset142of the data set102that has fewer elements than the data set102, calculation of the estimated compression ratio may be faster than calculation of a compression ratio based upon all data elements of the data set102. Further, because the compressor114may include circuitry to generate hash values (that can be used to determine an estimated compression ratio, a type of compression to apply to the data set102, and/or a type of ECC encoding to apply), the compression ratio estimator140may be implemented using existing processing hardware for reduced cost of manufacturing and die area savings, as described in further detail with respect toFIG. 2.

Referring toFIG. 2, a particular embodiment of the controller110is illustrated. The controller110includes the compression ratio estimator140, a comparator and switch220, the compressor114, and the ECC encoder112. The compression ratio estimator140includes a hash value generator216, one or more hash value collision counters232, and an estimated compression ratio calculator218.

The controller110may receive the data set102, e.g., from a host device such as the host device104ofFIG. 1. The data set102may be input to the hash value generator216. The hash value generator216may generate a plurality of hash values based on the data set102. For example, the hash value generator216may be configurable to generate a hash value corresponding to each data element of a subset of the data set, such as the subset142of the data set102ofFIG. 1. The hash value generator216may also be configurable to generate additional hash values associated with the data set102, such as hash values of each data element of the data set102. The hash values may be generated based on a selected hash function, such as described with respect toFIG. 3.

The hash value generator216may output hash values230of the subset142of the data set102. The hash values230of the subset142of the data set102may be input to hash value collision counter(s)232. The hash value collision counter(s)232may tally all instances of collisions among the hash values230of the subset142of the data set102. A collision refers to the presence of two identical hash values. Each of the hash value collision counters232may determine a count of collisions associated with a distinct hash value.

For example, when the data set102includes 100 data elements, a subset142of the data set102may be selected that includes 20 elements. Hash values of each of the subset142of the data set102may be calculated to produce the hash values230(e.g., 20 hash values) of the subset142of the data set102. The hash value collision counters232may determine that among the 20 hash values230of the subset142of the data set102, there are 8 distinct hash values, h(1)-h(8), of which h(1), h(2), h(3), and h(4) appear three times within the hash values230of the subset142of the data set102. Each of h(5), h(6), h(7), and h(8) appear twice within the hash values230of the subset142of the data set102. The hash value collision counters232may count the number of instances of identical hash values (collisions) for each distinct hash value. The hash value collision counters232may output a tally of collisions and the tally is input to the estimated compression ratio calculator218.

The presence of identical hash values within the hash values230of the subset142of the data set102may indicate that at least a portion of each of the corresponding data elements are identical, and that the data set102can be compressed by removing the redundant portions without sacrificing information content. The estimated compression ratio calculator218may determine an estimated compression ratio based on the tally of hash value collisions received from the hash value collision counters232. For example, the higher the number of collisions counted, the greater the estimated compression ratio. The counts of the collisions of the hash values230of the subset142of the data set102may be used to calculate the estimated compression ratio144ofFIG. 1. For example, the estimated compression ratio may be calculated by comparing the number of collisions to an expected number of collisions in a uniform distribution of data values.

Alternatively, the estimated compression ratio may be determined by comparing a count of distinct hash values among the hash values230to an expected count of distinct hash values. For example, the expected number of distinct hash values (HVs) obtained in n independent draws from a total of M hash values is:
Expected no. of distinct HVs=M(1−(M−1)/M))n)  (2)

The estimated compression ratio (CR) may be determined as a function ƒ of a ratio of the actual number of distinct HVs to the expected number of distinct HVs:
Estimated CR=ƒ(actual no. of distinct HVs/expected no. of distinct HVs)  (3)

The estimated compression ratio calculator218may determine the estimated compression ratio via a lookup table212. For example, the tally of collisions provided by the hash value collision counters232may correspond to a particular estimated compression ratio in the lookup table212. Alternatively, the ratio of the number of distinct HVs to the expected number of distinct HVs has a corresponding value of an estimated compression ratio in the lookup table212.

The estimated compression ratio144determined by the estimated compression ratio calculator218may be output to the comparator and switch220. The comparator and switch220may compare the estimated compression ratio to a threshold value222(e.g., a threshold value corresponding to a 95% compression ratio) to determine whether compression is to be initiated. For example, when the estimated compression ratio144does not satisfy (i.e., is less than) the threshold value222, the comparator and switch220may determine to initiate compression of the data set102. When the comparator and switch220determines to initiate compression, the comparator and switch220may direct the data set102to the compressor114to compress the data set102.

When the comparator and switch220determines to initiate compression of the data set102, the compressor214may also receive the hash values224of the data set102(including hash values associated with each of the data elements of the data set102) from the hash value generator216for use in compressing the data set102. The compressor114may output a representation of the data set102, such as the representation130of the data set102, including compressed values of the data set102, to the ECC encoder112. The ECC encoder112may apply error encoding to the representation130of the data set102. The estimated compression ratio144may be used by the ECC encoder112to determine a particular ECC encoding scheme to apply to the data set102to generate encoded compressed data as an output232.

If the comparator and switch220determines that the estimated compression ratio144satisfies (i.e., is greater than or equal to) the threshold value222, the comparator and switch220may determine to refrain from initiating the compression operation of the data set102. The comparator and switch220may direct the data set102to be input to the ECC encoder112, bypassing the compressor114. The ECC encoder112encodes the data set102, and the output232is an ECC encoded, uncompressed data set. The estimated compression ratio144may also be sent to the ECC encoder112and the estimated compression ratio144may be used to determine the type of error correction encoding to apply to the data set102.

By initializing the ECC encoder112based on the estimated compression ratio144rather than waiting for a result of the compressor114before selecting an ECC scheme, an encoding latency may be reduced.

FIG. 3illustrates a portion of a data set302, such as a portion of the data set102ofFIG. 1andFIG. 2. The data set302may be a data word including a plurality of data elements. A subset of the data elements of the data set302may be selected to determine an estimated compression ratio. For example, the subset of the data set302may be selected to include data elements Cm, Cn, and Cp. In an embodiment, the data elements selected to be included in the subset of the data set302may be uniformly selected from all data elements of the data set302. That is, the data elements selected may be equally spaced within the data set302. In an embodiment, the data elements may be adjacent, i.e., n=m+1.

A sample304of the data set302includes data elements Cm, Cm+1, and Cm+2. The sample304may be utilized by a hash value generator, such as the hash value generator216ofFIG. 2, to calculate a hash value hm306that may be associated with data element Cm. A sample308may used to calculate a hash value hn310associated with the data element Cm, and a sample312may used to calculate a hash value hp314that may be associated with the data element Cp. In an embodiment, the samples308,310, and312may include overlapping data elements, e.g., Cm=Cn+2. As illustrated inFIG. 3, each sample304,308, and312includes not more than three data elements. Restricting each sample to include only three data elements can result in less computing time and computing resources to determine hash values, as compared with selecting samples having a larger number of data elements per sample. In other embodiments, however, samples may be formed having a different number of data elements, and the samples may be used to calculate hash values. For example, in an embodiment, each sample may include at least two elements.

A hash value generator, such as the hash value generator216ofFIG. 2, may generate hash values based on a selected hash function. In an embodiment, each hash value may be determined based on a corresponding sample. For example, the hash function selected for a data set that includes 4096 data elements may be:
hn=[(((Cn<<4)XORCn+1)<<4)XOR(Cn+2)] && 0xfff  (4)
where << indicates a shift left operation, XOR indicates an exclusive OR operation, and && indicates a logical AND operation. By including && 0xfff in the calculation of hn, the calculated value of hnincludes only the 12 least significant bits.

Using the hash function (4), each hash value may be determined based on the corresponding sample, e.g., sample304,308, or312. The hash function (4) may correspond to a same hash function as is commonly used in LZ-77 compression and may be implemented using processing hardware that is used in common with the compressor. In other embodiments, other hash functions may be selected and hash values may be determined based on the selected hash function.

A subset of the data set302may be formed by including data elements selected uniformly along the entirety of the data set302. In other examples, the subset of the data set302may be selected non-uniformly within the data set302, or may be selected from only a portion of the data set302such as an initial portion of the data set302, or may be selected using a combination of selection methods.

The hash values associated with the subset of the data set302may be used to determine an estimated compression ratio316associated with the data set302. For example, a count of hash value collisions may be determined, e.g., by hash value collision counter(s)232ofFIG. 2. The counts of hash value collisions may be input to an estimated compression ratio calculator, such as the estimated compression ratio calculator218ofFIG. 2, to determine the estimated compression ratio316.

The estimated compression ratio316may be determined based on a comparison of the count of collisions to an expected number of collisions that is based on a uniform distribution of data values. Alternatively, the estimated compression ratio316can be determined as a function of a ratio of a count of distinct hash values to an expected count of distinct hash values in a total of M hash values. Using the hash values to calculate the estimated compression ratio316may be faster, and may require less computation, than calculating the estimated compression ratio316by another method, such as calculating the estimated compression ratio316directly from the subset of the data set302. The techniques of determining an estimated compression ratio described with regard to the data set302may be applied to the data set102ofFIG. 1.

FIG. 4shows an illustrative embodiment of a bar graph400comparing error ratios associated with estimated compression ratio that is calculated by various methods. An error ratio is determined by dividing an estimated compression ratio by a compression ratio calculated from an entire data set, such as the data set102ofFIG. 1andFIG. 2. That is,

The bar graph400presents a comparison of the error ratio for each of three different methods of calculating the estimated compression ratio. The bar graph400also shows the error ratio versus a count of data elements in the subset of the data set, such as the subset142of the data set102ofFIG. 1. In the bar graph400depicted inFIG. 4, the data set has a count of 4,096 data elements. The subset of the data set may include fewer data elements than the count of data elements in the data set. For example, as depicted in the bar graph400, the subset of the data set may include 256 data elements, 512 elements, 1,024 elements, or 2048 elements. Alternatively, the entire data set, including all of the 4,096 data elements of the data set, may be used to determine the error ratio. The bar graph400shows an error ratio for n0=256, 512, 1024, 2048, and 4096.

A first method (A) selects the subset of the data elements from an initial portion of the data set, the initial portion including a count of n0data elements. The estimated compression ratio is determined by applying a compression algorithm (e.g., DEFLATE) to theses n0data elements. There is error in the estimated compression ratio as compared with the (actual) compression ratio determined using an entirety of the 4,096 data elements.

A second method (B) calculates the estimated compression ratio based on a count of collisions within no hash values derived from the initial no data elements of the data set. The n0hash values are determined by a hash value generator, such as the hash value generator216ofFIG. 2, and may be determined from a hash generating function such as the hash generating function (4) above by using samples of the data set selected from the initial data elements no. The estimated compression ratio may be calculated based on a count of collisions within the no hash values.

A third method (C) forms the subset of the data set by selecting n0data elements that are uniformly spaced along an entirety of the data set, as inFIG. 3. Based on the n0data elements selected, a total of n0hash values are calculated, each of the hash values associated with a corresponding data element. The estimated compression ratio is calculated based on a count of collisions within the n0hash values.

The bar graph400illustrates that method C results in smaller errors in the estimated compression ratio than either of methods A or B for a subset size of 256, 512, 1024, or 2048 data elements. That is, method C selects data elements of the subset of the data set uniformly across the entirety of the data set, resulting in a smaller error in the estimated compression ratio than by forming the subset of the data set only from the initial n0data elements of the data set (methods A and B). Further, the bar graph400shows that the larger the sample size of the subset, the smaller the error in the estimated compression ratio in comparison to the compression ratio calculated from all the data elements of the data set. Thus, selecting data elements of the subset uniformly across the data set results in smaller error in the estimated compression ratio than selecting the data elements of the subset from only an initial portion of the data set.

For the case in which all 4096 data elements of the data set are included in the subset, method A produces no error between the estimated compression ratio and the actual compression ratio for the entirety of the data set, since the subset of the data set is the same as the data set. For this subset, methods B and C result in some error because the estimated compression ratio is based on hash values of the data elements rather than based directly upon the data elements of the subset.

FIG. 5depicts a flow diagram of a method500of processing a data set prior to storage in a memory of a data storage device. An estimated compression ratio is determined that is associated with applying compression to the data set, at502. The estimated compression ratio is based on hash values of a subset of the data set. For example, the subset may include fewer data elements than a count of data elements in the data set. The data set may be processed prior to storage in a memory of a data storage device and the processing is determined based on the estimated compression ratio, at504. For example, processing may be determined to include data compression prior to error encoding, or processing may include performing error correction code encoding prior to storage in the data storage device without compressing the data set prior to performing the error correction code encoding. The method ends at506.

The method500may optionally include determining whether to initiate a compression operation of the data set at a compressor of the data storage device based on comparing the estimated compression ratio to a threshold value. For example, the determination of whether to initiate the compression operation may be performed at the comparator and switch220ofFIG. 2. A determination to initiate the compression operation may be made in response to the estimated compression ratio being less than the threshold value. A determination to refrain from initiating the compression operation may be made in response to the compression ratio satisfying the threshold value. The method500may also include selecting, based on the estimated compression ratio, a type of error correction code encoding to apply to a representation of the data set.

The estimated compression ratio may be determined based on a count of collisions of hash values associated with each data element included in the subset of the data set. For example, the estimated compression ratio may be based on a comparison of the count of collisions of hash values, determined by the hash value collision counters232ofFIG. 2, to an expected number of collisions of hash values based on a uniform distribution of data values within the data set.

The hash values may be generated by hash circuitry. For example, the hash values may be generated by the hash value generator216ofFIG. 2. In a particular embodiment, each hash value is determined from a corresponding sample of the data set, each sample including not more than three data elements. For example, each sample may include three consecutive data elements of the data set, as inFIG. 3.

Initiating the compression operation may include generating additional hash values of the data set at the hash circuitry. For example, the additional hash values may correspond to data elements of the data set that are not included in the subset of the data set. In an example, the additional hash values may be generated by the hash value generator216ofFIG. 2.

Determining the estimated compression ratio based upon calculated hash values of a portion of a data set can be more time efficient, and less computation intensive, than determining the estimated compression ratio directly from the data set or a portion thereof, and can reduce the time expended to determine whether to apply compression to the data set prior to storage of a representation of the data set in a memory. Basing the estimated compression ratio on hash values of a subset of the data set, instead of the entire data set, may further reduce computing time and computing resources needed to make the determination as to whether or not to compress the data. Forming the portion of the data set from data selected uniformly across the data set may result in a more accurate estimated compression ratio than calculating the estimated compression ratio based upon an initial portion of the data set.

Although various components depicted herein are illustrated as block components and described in general terms, such components may include one or more microprocessors, state machines, or other circuits configured to enable the controller110ofFIG. 1andFIG. 2to perform the particular functions attributed to such components, or any combination thereof. For example, the compression ratio estimator140may represent one or more physical components, such as hardware controllers, state machines, logic circuits, or other structures, to enable the controller110ofFIG. 2to generate hash values, count collisions of the hash values, and/or calculate an estimated compression ratio.

For example, the compression ratio estimator140may be implemented using a microprocessor or microcontroller programmed to determine the hash values associated with the data elements of the subset142of the data set102. In a particular embodiment, the hash value generator216includes executable instructions that are executed by a processor and the instructions are stored at the memory108ofFIG. 1. Alternatively, or in addition, executable instructions that are executed by processing hardware included in the compression ratio estimator140may be stored at a separate memory location that is not part of the memory108, such as at a read-only memory (ROM) (not shown).

In a particular embodiment, the data storage device106may be implemented in a portable device configured to be selectively coupled to one or more external devices. However, in other embodiments, the data storage device106may be attached to or embedded within one or more host devices, such as within a housing of a host communication device. For example, the data storage device106may be within a packaged apparatus such as a wireless telephone, a personal digital assistant (PDA), a gaming device or console, a portable navigation device, or other device that uses internal non-volatile memory. In a particular embodiment, the data storage device106may be coupled to a non-volatile memory, such as a three-dimensional (3D) memory, a flash memory (e.g., NAND, NOR, Multi-Level Cell (MLC), a Divided bit-line NOR (DINOR) memory, an AND memory, a high capacitive coupling ratio (HiCR), asymmetrical contactless transistor (ACT), or other flash memories), an erasable programmable read-only memory (EPROM), an electrically-erasable programmable read-only memory (EEPROM), a read-only memory (ROM), a one-time programmable memory (OTP), or any other type of memory.

The illustrations of the embodiments described herein are intended to provide a general understanding of the various embodiments. Other embodiments may be utilized and derived from the disclosure, such that structural and logical substitutions and changes may be made without departing from the scope of the disclosure. This disclosure is intended to cover any and all subsequent adaptations or variations of various embodiments.