Circuit representation presents many challenges for the designers of simulator software; the potential complexity of circuits only serves to compound this challenge. This section provides the necessary infrastructure and insight upon which our subsequent circuit class design will be based.
One of the major goals of our circuit representation is to enable the expression of the hierarchical nature of circuits so as to help offset the inherent complexity associated with circuit design. By allowing components to be represented as a composite of subcomponents, it becomes easier to construct higher level components by connecting together rudimentary components whose behaviours are more easily understood. These high level components may then become subcomponents of even larger, more powerful circuits. Hierarchical representations also present the possibility for distributing the circuit and its subsequent simulation over several machines. A second goal of our representation is to model real world circuits as closely as possible by limiting the number of artifacts introduced into the representation. By modelling circuits as closely as possible to their real world counterparts, we must also consider incorporating support for simulation into our representation. As will be discussed later, the distributed queues facilitate this objective.
The process of ``discovering the classes and objects that form the vocabulary of the problem domain'' constitutes the analysis phase of the object-oriented paradigm . Several similar classification schemes have been adopted by many object-oriented approaches with respect to circuit representation. Generally speaking, object-oriented implementations classify circuits in accordance with real world circuit entities such as components, ports and netlists. This classification strategy effectively creates a mapping of software classes onto analogous elements in the domain of real world circuits, thereby leading to a better understanding of the resulting implementation by others.
With respect to circuit representation, the concept of creating a base component from which all other functioning components can be derived seems to be a common classification strategy throughout the literature. Aspects shared by all components are factored out and placed into a base class. All subsequent components and other functioning units are then derived from this base class, thereby inheriting the commonality. Most implementations also provide support for nesting components within one another, thereby permitting hierarchical decomposition of circuit representations. A base class representing ports is also popular; from this class, an input and output port class may then be derived. Because this approach to classification is relatively natural and, indeed, almost intuitive, the simulator engine that forms the focus of this report adheres to a similar classification approach with respect to circuit representation.
Figure 4.4: Representation of a Simple Composite Circuit
The representation of a circuit will be discussed in the context of a specific example. Figure 4.4 presents an elementary circuit which has three input ports and one output port. This circuit is composed of two nested components, each of which have two inputs and one output; and a wire which connects these two subcomponents together. The primary classes emerging from this example are components, ports and wires. The intended roles of these classes are as follows:
In order to more vividly convey the hierarchical potential of this representation, consider the three-dimensional hierarchy presented in Figure 4.5. This circuit is identical to the one presented in Figure 4.4, except that it is tilted slightly so as to make the distinction between hierarchical levels more obvious. Of particular interest is the mechanism by which components lower in the hierarchy communicate with entities higher in the hierarchy. In the figure, for instance, note that the ports of the lower level components do not communicate directly with the wires at the top level. Instead, the ports of the subcomponents interface with the ports of the top level component, which, in turn, communicate with the wires at the top level. This mechanism helps to preserve the encapsulative nature of the top level component and all its subcomponents.
Figure 4.5: Three-dimensional Hierarchical Circuit Representation