This section will describe a new approach to hardware simulation which challenges the commonly used technique described above. Basically, the approach is to encapsulate one or more queues within the components themselves, thereby eliminating all the inherent problems of maintaining a global structure. The queues are distributed throughout the component and can exist at virtually any level of the description. Each queue keeps a history of the signals which have been sent to it during the course of the simulation and maintains a list of all the components which expect the signal. Therefore, the distributed queue serves as a connector between two components and also serves as the means by which signals may be propagated in parallel using a sequential programming language.
With respect to hardware, the distributed event queues represent wires; signals travel along wires and wires connect components together. Since the queues and wires essentially perform the same function and are so closely related, the concept of a distributed queue seems much more attractive and intuitive than a cumbersome global event queue.
As will be discussed later, in order for the distributed queues to be useful, each component must maintain its own concept of local time. Then, when the time comes for the component to simulate, it first queries all its input wires to determine if they have a signal which occurred at the local time of the component. If all the input wires do have signals waiting, then the component moves forward in time and then starts to simulate. It is through this mechanism that the concept of parallelism is mimicked. This algorithm is discussed in more detail later.
Since the queues are encapsulated within the circuit components, an asynchronous signal would only affect those components which receive it and would not force the entire circuit back in time. Only those elements who use the asynchronous signal directly or indirectly will actually be moved backwards. The other components would continue to move forward in time where they left off.
How these distributed queues are used by the simulation algorithm is described later in this chapter. However, before the algorithm and implementation of the circuit simulator are presented, the Signal class will be examined in detail. Particular attention will be paid to how signals are stored and how they are transferred from one component to another via the Wire class and Port class.