...inputs.
For the purpose of this example, it is assumed that prior to the simulation, both gates are generating indeterminate outputs. These indeterminate outputs are represented in the diagram by the horizontal dashed lines.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...UNIX
UNIX is a registered trademark of X/Open Company, Ltd.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...System
X Window System is a trademark of X Consortium, Inc.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...XFree86
XFree86 is a trademark of The XFree86 Project, Inc.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...Microsystems
Sun Microsystems is a trademark of Sun Microsystems, Inc.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...arrays.
Some purists argue that associative arrays are not true types in Tcl.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...points,
Wire points serve primarily as handles which make manipulation of the end points of wires easier for the end user.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...together.
Should the need arise to support tristate circuit elements, these soldering restrictions may be lifted by making minor modifications to the script.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...script.
Remember that Tcl is an interpreted language. Therefore any comments appearing inside loops, for example, have to be identified and ignored each time the loop is executed. By eliminating the comments, we eliminate this extra parsing.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...wire.
Moving a wire connected to a component is problematic since the implementation would have to consider the possibility of moving two separate components if the wire is connected to both components. This situation has yet to be implemented by the GUI.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...take.
This action usually takes the form of the component being required to process a change in an input signal or to make a change in its internal state.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...levels.
Due to the inherent discrete representation of time, simulation at the lowest circuit-level, which requires a continuous representation of time, is not immediately realizable by this simulator engine.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...together.
A component may also be connected to itself, therefore allowing feedback loops to be simulated.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...process()).
Actually, the Component class contains more than these data members and member functions. However, only the data members and methods which are of particular interest are usually displayed in a Booch diagram.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...class.
In our implementation, parameterized classes are implemented using the C++ template mechanism.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...class.
Note that even though objects may not be instantiated from an abstract base class, it is perfectly valid and indeed necessary in many circumstances, to create pointers to these base classes. The fact that a derived class pointer can be assigned to a pointer to its public base class without a cast forms the foundation upon which polymorphism is based.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...output.
A trivial modification to the simulator engine could detect null components during run-time and display a diagnostic error message when they are encountered during the simulation.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...sum.
This example may not be as contrived as one might think. Since Tcl scripts are interpreted, it is naturally going to execute more slowly than a compiled binary. As a result, if one is evaluating a convoluted expression that involves numerous iterations and time consuming control flow, then sending the raw data down a pipe to an executable for processing and then reading the result back may actually be faster than performing the entire evaluation in native Tcl.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...engines.
Note that if doing continuous simulation at the transistor level, the GUI will require changes to support the drawing of transistor symbols on the workarea canvas and the signal display would have to be adapted to support continuous waveforms.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...ports).
The input and output netlists are analogous as the primary inputs and primary outputs of the circuit.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...netlists.
More accurately, the component constructors accept references to Connector objects as parameters, which are then connected to the ports of the components.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...used.
Although later versions of Tcl/Tk have been ported to other non-UNIX operating systems, DigiTcl has not yet been tested on any of them.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

Donald Craig
Mon Jul 8 12:05:35 NDT 1996