Skip to Main Content
Digital hardware designs are nearly always tested and validated prior to deployment using functional-level simulation. Each component of the design, such as a four-bit adder or an eight-to-one multiplexer, is described and modeled as a set of inputs and a set of outputs that change based on changes in the input. Using traditional discrete event simulation, each change in the input set for a component would result in future events being scheduled for each input connected to the component's output. These future events would represent the changed inputs and speed-of-light delays between an output and the corresponding input. Further, some components might respond to clock-tick events that allow for synchronous actions, such as the latching of a bit in a single flip-flop, which results in a changed output only during a specific clock event. We discuss a different approach to functional-level modeling that we call the Pull-Model. In this approach, components do not schedule events to notify other components of input data changes. Rather, each component queries other components asking for the current output value, and does so only when the value is actually needed to model the data flow at that time. We show that this approach significantly reduces the number of events, even when modeling a very simple CPU architecture with only a few components.