July 20, 2011, 9:38 a.m.
posted by nfrank
Simulator Architectures and Operations
Once a design is free of statically detectable errors, it is ready to be verified by simulation. To use a simulator effectively, it is imperative first to understand its architecture. Following this philosophy, this chapter is organized in two parts: The first part is devoted to architectures of simulators, and the second discusses simulator operations. In studying simulator architecture, we will examine in depth two typical simulators on the extremes of the simulator spectrum. We then discuss how simulator types in the middle portion of the spectrum can be constructed, followed by a comparative study of the various types. In the second part of the chapter, common and advanced features of simulators are presented along with their applications.
Generally, a simulator consists of three major components: a front end, a back end, and a simulation engine/control, as shown in Figure. The front end is very much standard for most simulators and is a function only of the input language. The back end performs analysis, optimization, and generation of code to simulate the input circuit, and is the main contributor to a simulator's speed. The front end and the back end form the compiler portion of a simulation system. The simulation engine takes in the generated code and computes the behavior accordingly. In this stage, the generated code has no direct knowledge of the circuit and can be in any language. If the generated code is C/C++, it first needs to be compiled using a C/C++ compiler before it is run. If the generated code is the native code of the target machine, it can be run immediately. Simulation control allows the user to interact with the operation of the simulator. An example of user control is to run a simulation in interactive mode, as in debugging a design, in which the user can set break points to pause a simulation after a number of time steps, examine variable values, and continue simulation.
1. Major components of a simulator