Chapter 1 presented an overview of simulation with special emphasis on the simulation of computer hardware. Numerous techniques for the description and simulation of hardware have been devised and implemented. Quite often, the technique adopted depends largely upon the desired level of abstraction at which the simulator engine is to operate. Some simulators accept low-level hardware descriptions and produce output which is based upon well known mathematical principles that govern the behaviour of circuit elements such as transistors and capacitors. At the other end of the spectrum, high-level simulators process hardware descriptions represented by functional or behavioural abstractions and generate simulation results which represent the behaviour of the system at this higher level. Typically, due to the often radical differences that exist between different levels of hardware abstraction, many simulator engines operate at only one level of abstraction. Other simulator engines are more flexible and attempt to accommodate descriptions at a few adjacent abstraction levels.
This chapter will focus upon describing and simulating hardware at the digital or gate-level using a discrete representation of time. What separates this simulator engine from other conventional digital simulators is the concept of local time. Each hardware component resides in its own temporal domain and is affected only by adjacent components. As will be shown, this concept makes it possible to both describe and simulate hardware hierarchically. A comparison of this approach with traditional digital simulator designs will be discussed. Another important theme emphasized by this chapter is the adoption of the object-oriented programming paradigm to design and implement the simulator engine. Adherence to the principles of this paradigm significantly facilitated the design of the simulator engine and resulted in an implementation which is easy to maintain and extend.