Unidirectional relabeling for subcircuit recognition

A method for indentifying instances of a smaller circuit in a larger circuit is disclosed. Both the smaller circuit and the larger circuit have a plurality of vertices. A vertex is one of a device or a net. The device, such a transistor, includes a Gate, a Drain, and a Source. The net is a wired connection between devices. In this method, one initial unique label is assigned to each of the plurality of vertices, each of a plurality of connection-types, power connection, and ground connection. A zero label is assigned to each of an input/output ports and a same initial unique label is assigned to same types of circuit components. Then each net is relabeled using labels of neighboring vertices. The neighboring vertices of a vertex are vertices that are directly connected to the vertex. Then, each device in the plurality of vertices is relabeled using labels of neighboring vertices excluding a label of a vertex that is connected to the Gate of the each device. The new labels of each vertex are stored in a data store and these labels are used in the calculation of the new labels of the vertices in a next iteration of relabeling.

BACKGROUND

The present invention generally relates to electronic circuit design. More particularly, the present invention is directed to efficiently and accurately finding predetermined patterns in a main circuit design.

Recognizing or finding subcircuit instances in a larger circuit is widely used in the simulation, verification, and testing of integrated circuits using computer-aided design programs. Currently, the process of finding is performed using ad hoc techniques that rely on the circuit technology and implementation details. Such techniques, however, do not generalize to different subcircuit structures and do not transfer to other technologies. A publication entitled “SubGemini: Identifying SubCircuits using a Fast subgraph Isomorphism Algorithm,” by Ohlrich, et. al. (hereinafter “SubGemini”) describes a technology independent algorithm for solving this problem based on a solution to the subgraph isomorphism problem. This publication is incorporated herein by reference. SubGemini describes a use of a recursive relabeling approach to identify circuit patterns in a larger circuit. However, the SubGemini method of finding patterns in a larger circuit has flaws that, under certain circumstances, prevent the labels from having enough information to ensure an accurate identification of the instances of the subcircuits in larger circuits.

Thus, there is a need for method and system that enable a more accurate and efficient identification of patterns (i.e., subcircuits) in a larger circuit.

SUMMARY OF THE INVENTION

An accurate and efficient method and system of detecting all instances of a subcircuit in a larger circuit are disclosed. Embodiments of the present invention disclose unidirectional relabeling of vertices of the subcircuit and the larger circuit to enable much deeper recursion of the relabeling method so that the labels include enough information related to the circuit topology around them.

In one embodiment, a method for indentifying instances of a smaller circuit in a larger circuit is disclosed. Both the smaller circuit and the larger circuit have a plurality of vertices. A vertex is one of a device or a net. The device, such a transistor, includes a Gate, a Drain, and a Source. The net is a wired connection between devices. In this method, one initial unique label is assigned to each of the plurality of vertices, each of a plurality of connection-types, power connection, and ground connection. A zero label is assigned to each of an input/output port and a same initial unique label is assigned to the same types of circuit components. Then each net is relabeled using labels of neighboring vertices. The neighboring vertices of a vertex are vertices that are directly connected to the vertex. Then, each device in the plurality of vertices is relabeled using labels of neighboring vertices excluding a label of a vertex that is connected to the Gate of the each device. The new labels of each vertex are stored in a data store and these labels are used in the calculation of the new labels of the vertices in a next iteration of relabeling.

In another embodiment, a system for indentifying instances of a smaller circuit in a larger circuit is disclosed. The smaller circuit and the larger circuit have a plurality of vertices. Each of the plurality of vertices is one of a device or a net. The device has a Gate, a Drain, and a Source. A processor to execute programming instructions is included in the system. The system also includes a memory to provide programming instructions execution support to the processor and a netlist data store for storing a data representation of the larger circuit and the smaller circuit. A unidirectional relabeling module is included to retrieve the data representation of the larger circuit and the smaller circuit and to perform unidirectional relabeling operations on the data representation of the larger circuit and the smaller circuit. The unidirectional relabeling operations included calculating new labels for each of the plurality of vertices in the data representation of the larger circuit and the smaller circuit wherein circuit components connected to the Gate are omitted in calculation of the new labels for each device in the plurality of vertices.

In yet another embodiment, a computer readable medium for storing programming instructions for indentifying instances of a smaller circuit in a larger circuit is disclosed. The computer readable medium includes programming instructions for (a) assigning one initial unique label to each of the plurality of vertices, each of a plurality of connection-types, power connection, and ground connection in the smaller circuit and the larger circuit. A zero label being assigned to each of an input/output ports and a same initial unique label is assigned to same types of circuit components. The computer readable medium also includes programming instructions for (b) relabeling each net in the plurality of vertices using labels of neighboring vertices. The neighboring vertices of a vertex are vertices that are directly connected to the vertex. Programming instructions for (c) relabeling each device in the plurality of vertices using labels of neighboring vertices are also included. During relabeling a device, a label of a vertex that is connected to the Gate of the device is not considered in calculating a new label for the device. Programming instructions for (d) storing new labels of each net and each device in a data store are also included. Further, the computer readable medium includes programming instructions for repeating operations (b) to (d). The new labels of operation (d) being used in subsequent iterations of method operations (b) and (c).

The advantages of the embodiments of the present invention are numerous. Most notably, the systems and methods described herein provide a more accurate identification of the instances of a subcircuit in a larger circuit. The improvement in accuracy is achieved by providing a method of unidirectional relabeling of the vertices of circuits.

The figures are provided in order to provide a thorough understanding of the present invention. The figures should not be construed as limiting the breath of the invention in any manner.

DETAILED DESCRIPTION OF THE INVENTION

A method of accurately identifying instances of a pattern (i.e., a smaller circuit or a subcircuit) in a larger circuit (i.e., a main netlist) is disclosed. In one embodiment, the circuit components of the pattern and the main netlist are unidirectionally relabeled recursively until no more relabeling is possible under given rules of relabeling. The highest label in the pattern is then used to identify the instances of the pattern in the main netlist. While the present invention has been particularly shown and described with reference to the foregoing preferred embodiments, those skilled in the art will understand that many variations may be made therein without departing from the spirit and scope of the invention as defined in the following claims. The scope of the invention should therefore, not be limited to the description of the invention; rather, the scope of the invention should be defined by the claims including the full scope of equivalents thereof.

The pattern, as used herein, is a circuit whose various properties and behavior are already known. For example, a NOR gate could be a pattern. The pattern has one or more devices such as transistors connected together through nets (for example, wires connecting the transistors in a logic gate). The nets may include resistors, capacitors, etc. However, for the purpose of the identification of the instances of the pattern in a larger circuit, i.e., main netlist, the nets are considered simple wire connections (i.e., circuit components such as resistors, capacitors, etc. are omitted and replaced by wire connections). One of the uses for finding the instances of a particular pattern in a main netlist is to identify a related collection of interconnected primitive devices in a circuit as a single high-level component. For example, converting a transistor netlist into a logic gate netlist involves finding the subcircuits representing gates and replacing them with the corresponding logic gates. Similarly, replacing larger known subcircuits such as flip-flops in a main netlist by “black boxes” would reduce simulation and analyzing time because the properties and characteristics of the flip-flop, for instance, are already known and do not need to be analyzed for every instance of this subcircuit in the main netlist.

In one embodiment, the process of identifying the instances of a pattern in the main netlist is performed in two phases. In the first phase, each net and device in the pattern and the main netlist is given an initial unique label. In this embodiment, the initial unique labels are prime numbers to minimize the possibility of number collision during recursive relabeling. Then, the nets and devices are relabeled recursively using a predefined formula (discussed in detail later in this document) for relabeling. The netlist is treated as a “graph,” where both nets and devices are treated as the vertices, and the connections among the nets and devices are called “edges”. This graph happens to be bipartite with the nets and devices as the two sets, i.e., all immediate neighbors of a net are devices, and all immediate neighbors of a device are nets.

In general, this process of relabeling transmits topology information laterally across the graph. The topology information is encoded in the vertex labels. That is, the information about a given vertex emanates outward by one step for each relabeling round. Conversely, with each relabeling round or iteration, the label of a given vertex encompasses topology information of a wider and wider area surrounding it. This transmission of information thus becomes an excellent way to encode a great deal of information about the pattern into a single vertex label. With labels that are the products of many relabeling iterations, it becomes very likely that the same labels appearing in the pattern and main netlist correspond to the same topologies in the surrounding area represented by that label. With this overview in mind, the following figures will illustrate example structure and functionality of sampling based runtime optimizer for efficient debugging of applications.

FIG. 1illustrates a transistor level representation of an exemplary circuit that will be used as a pattern50. The pattern includes transistors T1, T2, T3, and T4connected together through nets or wires. The pattern50contains a ground connection56, a Vdd connection54, and three I/O connections52.FIG. 2illustrates an exemplary main netlist60that includes one instance of the pattern50.

By way of example,FIG. 3Aillustrates the pattern50showing exemplary initial labels for various components in the pattern50. In one embodiment, only prime numbers are used for initial labeling to avoid collision of label numbers during recursive relabeling. In another embodiment, the numbers may be chosen arbitrarily. However, choosing a distinct number for each of the component such as net, device, connection type, Vdd, GND, etc. would provide better results because during relabeling, the label will include more distinct and granular information about the topology of the circuit. In one embodiment, initial labels are applied uniformly throughout the pattern and the main netlist. Same labels are used for particular components both in the pattern50and the main netlist60. For example, if an N-Transistor is given an initial label of 5, all N-Transistors in the pattern50and the main netlist60must be given the same initial label. Similarly, if a GND port is given an initial label of 17, the same number must be used throughout in the pattern as well as in the main netlist.

In one embodiment, the same label number is provided to both “Drain-to-net” and “Source-to-net” connection-types (for example, see label19inFIG. 3A). In other embodiment, different connection-type labels may be assigned to “Drain-to-net” and “Source-to-net” connection-types. In one embodiment, the “Gate-to-net” connection-type (for example, see label23inFIG. 3A) is assigned a label number that is different from the “Drain-to-net” and “Source-to-net” connection-type labels. In one embodiment, a net is a set of wires that connects two or more devices (such as transistors). The net also connects other nets or devices to the input or output ports. For example,FIG. 3Aillustrates few exemplary nets such as N1, N2, N3, N4, N5, and N6and devices T1, T2, T3, and T4. In one embodiment, the Gate-to-net connection-type label is kept different to indicate whether a net is connected to the Source/Drain terminals of a transistor or to the Gate terminal. In another embodiment, three separate connection-type labels can be assigned to the Gate, the Drain, and the Source. During the relabeling, in one embodiment, only nets and devices are relabeled. As mentioned before nets and devices are also called vertices. Note that one key requirement to making the embodiments described herein to work is to perform exactly the same initial labeling and relabeling procedures in both the pattern and the main netlist.

Still referring toFIG. 3A, a fundamental limitation of this technique is the effect of nets that are ports on the pattern. These nets will almost certainly have fewer connections in the pattern than their corresponding nets will in a valid match in the main netlist. This is due to the fact that an instance of the pattern in the main netlist must communicate with the rest of the main netlist in order to be useful. This means that even the initial labels of these nets (i.e., the nets connected to the ports) usually won't match between the pattern and the main netlist. Worse still, this mismatch of labels propagates during relabeling, along with the rest of the information that the labels hold. Thus, with each round of relabeling, successively larger areas around each port net bear invalid labels (i.e., NULL labels). In one embodiment, this problem can be solved by considering that each port net has a “kill” flag that propagates along with the relabeling. This flag can be represented simply by the use of a “null” label. Meaning, input and output ports are given initial label0(zero) because the topologies connected to the input and/or output are unknown (i.e., nets that are ports are given initial label0(zero)). Then use the following relabeling rule—“If any neighbor of a vertex has a null label, this vertex cannot be relabeled. Instead, this vertex's label becomes null as well.”

FIG. 3Billustrates a flow diagram of a process of relabeling of the vertices in the pattern. Note that the same process is also performed on the main netlist. The process of relabeling starts at operation82in which initial labels are assigned to devices, nets, terminals, and connection types in the pattern. The process of assigning initial labels has been described in detail in the description ofFIG. 3Aabove. Then in operation84, the first vertex (i.e., a device or a net) is selected. In one embodiment, any vertex can be selected from the list of all vertices because eventually all vertices will be relabeled through a recursive relabeling loop. In operation86a determination is made as to whether the selected vertex is a device or a net. If the selected vertex is a net, the control moves to operation88in which, first a determination is made whether any of the neighboring vertices connected the net is NULL. If yes, then the selected net is given a NULL label too. Otherwise, a new label of the net is calculated using the following formula:

Formula (1)For each vertex neighboring the selected netDo{New label of the net = Current label of thenet + (neighbor's label after previousiteration of relabeling * connection-typelabel)}

Formula (1) calculates a new label for a net by multiplying the value of the label of a neighboring vertex after a previous relabeling iteration by the connection-type label (i.e., the value of the label of the connection-type that connects the net to the neighboring vertex in question) and adding to the multiplication result to the current label of the net. This process is repeated for all neighboring vertices of the selected net.

In one embodiment, a separate list of labels of each vertex after each round or iteration of the relabeling is maintained. Hence, one list is maintained for all initial labels. Another containing labels of each vertex after first round of relabeling of all vertices, yet another containing labels of each vertex after second round of relabeling, and so on. Therefore, in Formula (1), the neighbor's label after previous iteration of relabeling means that if a third round of relabeling is in progress, the labels of neighbors after second round of relabeling are used in the calculations. By extension, in round one of relabeling, initial labels of the vertices are used.

Still referring toFIG. 3B, in operation86, if the vertex is determined to be of type device (i.e., not net), the control moves to operation90in which, first a determination is made whether any of the neighboring vertices connected to the Drain or the Source of the device is NULL. If yes, then the selected device is given a NULL label too. Otherwise, a new label for the selected device, in one embodiment, is calculated using the following formula:

In Formula (2), the meaning of term “after previous round of relabeling” is same as described in the description of the Formula (1).

Formula (2) calculates a new label for a selected device by calculating a first multiplication result by multiplying the value of the label of the Source-connected vertex after a previous relabeling iteration by the Source connection-type label (i.e., the value of the label of the connection-type that connects the Source of the device to the neighboring vertex in question), calculating a second multiplication result multiplying the value of the label of the Drain-connected vertex after a previous relabeling iteration by the connection-type label (i.e., the value of the label of the connection-type that connects the Drain of the device to the neighboring vertex in question), adding the first multiplication resultant to the second multiplication resultant and to the current label of the selected device. This process is repeated for all neighboring vertices of the selected device.

The control is then moved to operation92in which a determination is made whether more vertices are remaining to be relabeled in this round of relabeling. If no vertex is left to be relabeled in this round of relabeling, the process ends. However, if more vertices are remaining to be relabeled in this round of relabeling, the control moves to operation94in which the next vertex is selected and then the control moves to operation86again. When the process ends, one round of relabeling is finished. The new labels are stored in a separate list for use in the next round of relabeling. These lists are stored in a non-volatile data store. In one embodiment, each list includes a number representing a depth of relabeling, an identification of each vertex in the circuit and the label of the vertex after that particular depth of relabeling. An appropriate indexing of the tabular data may be employed to facilitate easy data management and access. The lists may be stored in a relational database or a similar data store or in a file in the file system.

As explained earlier, the ‘kill” signal propagates from the ports to the vertices in the pattern (or, in main netlist). In one embodiment, after one ore more round of relabeling depending upon the size and topography of the pattern (or, main netlist), the relabeling process ends when no more devices can be relabeled. In other embodiments, the relabeling can be stopped earlier if a determination is made that the remaining non-zero labels contain enough topology information to facilitate the pattern identification in the main netlist.

It should be noted that the formula for calculating a new label for a device (i.e., Formula (2)) does not include the net connected to the Gate of the device. In other embodiments, Formula (2) can be modified to include Gate connected nets and exclude either the Drain connected net or the Source connected net or both. In other words, the asymmetry in the graph is being advantageously utilized. This determination can be made based on the topology of the pattern. If there are more ports (i.e., input/output, in one embodiment) connected to the Gate, the Gate connected net is not included in the formula. One reason behind not selecting one of the terminals is to delay the propagation of the “kill” signal. This solves a big issue that is present in SubGemini. SubGemini method is useless in many cases such as in a pattern in which all or most Gates are connected to the ports (for example, a NAND gate). By SubGemini method of recalculating the labels (in a NAND gate for example), no round of relabeling is possible because every device is touching a “kill” signal (i.e., a port with the label “0”). Hence, in this case, according to SubGemini, only initial labels can be used for the identification of the pattern in the main netlist. However, Formula (2), in various embodiments, solves this issue by delaying the propagation of the “kill” signal. Therefore, several iterations of relabeling is possible even in the cases such as a NAND gate pattern. Furthermore, to achieve an optimal depth of iterations, Formula (2) can be readily adjusted to include the Gate connected nets and to exclude either the Drain connected net or the Source connected net depending on a particular type of pattern.

In another embodiment, formula (1) and formula (2) can be modified to use existing labels of the neighboring vertices. That is, only one label is stored per vertex. The labels of each vertex are simply replaced by a new label during relabeling. In other embodiments, the current label and one or more previous labels of each vertex can be stored. Further, the process described inFIG. 3Bcan also be used in both unidirectional relabeling as well as bidirectional relabeling.

As mentioned earlier, the main netlist is also subjected to the same process of relabeling as illustrated inFIG. 3B. The same initial labels as used in the pattern for different types of vertices and connection types are also used for the main netlist. Further, exactly the same Formula (1) and Formula (2), as used for the pattern during the execution of operations as illustrated inFIG. 3B, are also used for the main netlist. Because the main netlist includes a larger circuit, the ports are generally far away from various vertices in the main netlist, comparatively more relabeling iterations are possible in the main netlist (due to comparatively delayed “kill” signal propagation to the inner devices in the main netlist). However, because the pattern identification is performed by comparing the labels at a same depth of relabeling, the main netlist relabeling iterations are performed only until the depth of relabeling equivalent to the final depth of relabeling in the pattern is reached.

Moving now toFIGS. 4A-4Fwhich exemplarily illustrate a “shrinking” number of vertices and increasing label numbers after each iteration of relabeling. As mentioned in the description ofFIG. 3B, the “shrinking” occurs due to propagation of the “kill” signal inward. As apparent, the number of remaining vertices shrinks with each round of relabeling and finally, in one embodiment, no additional non-zero labels can be recorded in the pattern. Alternatively, the process of performing the relabeling iterations may be ended when a desired depth or relabeling is reached and a determination is made that the labels at that depth contain enough topology information to enable the identification of the instances of the pattern in the main netlist. Term “depth” as used herein refers to number of rounds or iterations of relabeling. In one embodiment, the initial labels are considered at depth 0 (zero).

FIG. 5Aexemplarily illustrates the process of identification of the instances of the pattern in the main netlist. The identification is performed by comparing label numbers at a same depth both in the pattern and the main netlist. For example, if at depth=4, a particular label in the pattern has the label “23878”, there is a strong possibility that all labels in the main netlist with label “23878” at depth=4 represent the same topology that is present in the pattern and is represented by the label “23878”. In other embodiments, labels at a lower depth (such as depth=3 in the example illustrated inFIGS. 4A-4F) may be used for comparison, if for some reason, a comparison of the labels at the maximum possible depth is not suitable. However, there is still a small possibility that even though the labels match, the actual topologies represented by these labels are different. Therefore, the embodiments of the invention also provide to check if the actual topologies also match before finalizing the identification process.

By way of example,FIG. 5Billustrates a “Phase-2” of the process of identification of the instances of a pattern in the main netlist, the process of relabeling, as illustrated inFIG. 3B, being “Phase-1”. In Phase-2, a seed vertex is identified. In one embodiment, the seed vertex is a vertex that is represented by the label used for the comparison of labels in “Phase-1”, as illustrated inFIG. 5A.FIG. 5C, by way of example, provides a clearer view of a seed node at the circuit level.

FIGS. 6A-6Cexemplarily illustrates further steps of Phase-2after a selection of a seed vertex. Starting from the seed node and working in parallel on both the pattern and the main netlist, the topology around the seed is checked for similarities. For example, suppose T2(inFIG. 5C) is a seed node or vertex. The “Phase-2” process includes the following operations. First check if the seed vertices in the pattern and the main netlist correspond to same type of vertex (i.e., transistor T2in the current example). Check is then made to see how many vertices are connected to the transistor T2. If only one vertex is connected to T2in both the pattern and the main netlist (FIG. 6A“p” and “m”), check to see if “p” and “m” are same type of vertices. If yes, move to “p” in the pattern and “m” in the main netlist and repeat the previous operation (i.e., check to see how many vertices are connected to “p” and “m” and so on). If there are two vertices connected to “p” and “m”, check if “p1” is same as “m1” and “p2” is same as “m2”. If fails, check if “p1” is same as “m2” and “p2” is same as “m1” (seeFIG. 6B). If any of these checks pass, move forward to either “p1” or “p2” and keep repeating the previous operation until a mismatch is found.

Referring toFIG. 6C, if there are multiple vertices connected to the seed vertex in the checking path, a nested loop is used to cover all “p#” and “m#” pairs in one embodiment. In one embodiment, a net-to-device pair comparison is made. Note that the seed or a vertex in checking path in the pattern may be connected to different numbers of other vertices compared to the seed or similar vertex in the main netlist. Therefore, as illustrated inFIG. 6C, the number “N” (as used in term “pN” inFIG. 6C) may be different from the number “M” (as used in term “mM” inFIG. 6C). Typically, N will be less than or equal to M if the vp (FIG. 6C) is a connected to a I/O port. Otherwise, M should be equal to N. Further, if unique pairs are found, these pairs are iterated first before moving further in the checking path. If any ambiguous pair is found, try (p1,m1), then if fails try (p1,m2), then (p1,m3), etc. In one embodiment, the pattern neighbor list is reordered and checking is performed again. If case of a failure, this reordering is attempted again and again until no more unique reordering is possible.

Term “working in parallel” as used herein means that exactly same steps are taking in parallel on both the pattern and the main netlist. For example, if the process is implemented in software, two “threads” or two “processes” executing in simultaneously can be used. However, “working in parallel” does not imply that any two similar steps are being performed exactly at the same time. These steps could be performed at a delay so long as one operation step being performed on the pattern can be repeated in the main netlist.

If in “Phase-2” a mismatch if found during the vertices retracing, the instance of the pattern in which the mismatch was found could have been falsely identified during “Phase-1” identification. If “Phase-2” retracing is successful, the identification process is successfully performed and the pattern matching of “Phase-1” is confirmed. In one embodiment, “Phase-2” may be omitted if the process performing entity determines that the “Phase-1” results are accurate within an acceptable margin or errors.

FIG. 7illustrates an exemplary computer system100for performing the process of relabeling of vertex in order to identify the instances of the pattern in the main netlist. Note that many components of the computer system100that are well known to be a part of a computer system are omitted for clarity. The computer system100includes a processor106, a memory108, a bus104, and a Unidirectional Relabeling Module102. The computer system100also includes a Pattern Identification Module114. The Unidirectional Relabeling Module102, in one embodiment, is in communication with an external Netlist data store112to receive the patterns and netlists to be processed. A computer readable media110is also included in one embodiment to provide storage of data and programming instructions. The Unidirectional Relabeling Module102and the Pattern Identification Module114can be implemented in hardware or software. The Unidirectional Relabeling Module102performs initial and recursive unidirectional relabeling of the vertices in the pattern and the main netlist. The Pattern Identification Module114performs the task of retracing of the pattern in the main netlist based on the results of the relabeling operations.

The programming modules, page modules, and, subsystems described in this document can be implemented using a programming language such as Flash, Ruby, JAVA, C++, C, C#, Visual Basic, JAVA Script, PHP, XML, HTML etc., or a combination of programming languages. Commonly available application programming interface (API) such as HTTP API, XML API and parsers etc. are used in the implementation of the programming modules. As would be known to those skilled in the art that the components and functionality described above and elsewhere in this document may be implemented on any desktop operating system which provides a support for a display screen, such as different versions of Microsoft Windows, Apple Mac, Unix/X-Windows, Linux etc. using any programming language suitable for desktop software development.

The programming modules and ancillary software components, including configuration file or files, along with setup files required for performing the process of relabeling of the vertices and related functionality as described in this document, are stored on a computer readable medium. Any computer medium such as a flash drive, a CD-ROM disk, an optical disk, a floppy disk, a hard drive, a shared drive, and an storage suitable for providing downloads from connected computers, could be used for storing the programming modules and ancillary software components. It would be known to a person skilled in the art that any storage medium could be used for storing these software components so long as the storage medium can be read by a computer system.

The invention can also be embodied as computer readable code on a computer readable storage medium. The computer readable storage medium is any data storage device that can store data, which can thereafter be read by a computer system. Examples of the computer readable storage medium include hard drives, network attached storage (NAS), read-only memory, random-access memory, CD-ROMs, CD-Rs, CD-RWs, DVDs, Flash, magnetic tapes, and other optical and non-optical data storage devices. A computer readable medium can also be distributed over a network coupled computer systems so that the computer readable code is stored and executed in a distributed fashion.

While this invention has been described in terms of several preferable embodiments, it will be appreciated that those skilled in the art upon reading the specifications and studying the drawings will realize various alternation, additions, permutations and equivalents thereof. It is therefore intended that the present invention includes all such alterations, additions, permutations, and equivalents as fall within the true spirit and scope of the invention.