Simulatoren sind auf allen Entwurfsebenen sehr wichtige EDA-Werkzeuge. Je nach Ebene sind die verwendeten Verfahren und Algorithmen jedoch sehr unterschiedlich. Auf der elektrischen Ebene löst ein Schaltungssimulator (historisch auch Netzwerkanalyseprogramm genannt) das eine elektrische Schaltung beschreibende System von nichtlinearen Differentialgleichungen. Dies ist für Analogschaltungen die sinnvolle Simulationsebene, auf der das Wert- und Zeitverhalten detailliert analysiert werden kann. Für größere - insbesondere digitale - Schaltungen sind Schaltungssimulatoren wegen ihrer hohen Rechenzeitanforderungen ungeeignet. Es muss daher unter Verzicht auf Genauigkeit eine höhere Abstraktionsebene gewählt werden.
In den 50er und 60er Jahren hat sich die digitale Simulation primär mit der Korrektheit der Funktion und kaum mit dem Zeitverhalten befasst. Die früheste Methode zur Logiksimulation ist die "Compiled-Code"-Methode, die später erläutert wird und heute vorwiegend für höhere Ebenen verwendet wird. Eine digitale Schaltung wird durch boolesche Gleichungen beschrieben und diese werden in jedem Taktschritt ausgewertet. Dieses Vorgehen ist sehr rechenzeitintensiv und nur für synchrone Schaltungen geeignet. Zudem wird das Zeitverhalten der Strukturelemente nicht berücksichtigt.
Mitte der 60er-Jahre wurde ein neues Verfahren, die ereignisgesteuerte Logiksimulation, vorgestellt, die sich schnell durchsetzte, da sie wesentlich schneller ist und die Simulation asynchroner Schaltungen sowie die Berücksichtigung von individuellen Verzögerungszeiten erlaubt. Sie vermeidet die Untersuchung solcher Schaltungsteile, die zu bestimmten Zeiten inaktiv sind. Digitale Schaltungen sind bis zu 90 % inaktiv.
Wegen der großen Komplexität der Schaltungen wird heute auf der Gatterebene wieder zwischen Funktion und Zeitverhalten getrennt. Es wird eine rein funktionelle Simulation durchgeführt und das Zeitverhalten mithilfe der statischen Timinganalyse analysiert. Diese Trennung von Funktion und Zeitverhalten hat sich auch auf den höheren Entwurfsebenen bewährt. Simulatoren auf diesen Ebenen sind weniger genau als Gatterebenensimulatoren, ihre Handhabung ist jedoch einfacher und sie sind erheblich schneller. Ihre Geschwindigkeit erreichen sie durch die Abstraktion des Zeitverhaltens, indem beispielsweise die Funktion nur zum Zeitpunkt einer Taktflanke analysiert wird (zyklenbasierte Simulation), sowie durch das Arbeiten mit Mehrbit- statt Einzelbitvariablen.
Zyklenbasierte Simulatoren sind der Register-Transfer-Ebene zuzuordnen. In der Ebene darüber nimmt die Abstraktion auch bei der Simulation weiter zu. So werden auf der algoritmischen Ebene nicht mehr die Werte einzelner Variablen betrachtet, sondern das Verhalten mehrerer Variablen in Form von sogenannten Transaktionen, wie z.B. das Einschreiben eines Datenwortes in einen Speicher, oder der Zugriff auf einen Bus mit dem zugehörigen Datentransfer.
Auf der Systemebene existieren schließlich noch sogenannte Instruction Set-Simulatoren, die den Instruktionssatz eines entworfenen Prozessors per Simulation nachbilden und damit in der Lage sind, grundsätzlich auf diesem "virtuellen" Prozessor auch Software ablaufen zu lassen. Dies ist aus Komplexitätsgründen aber nur für relativ kurze Programmteile möglich.
Da die Simulationszeit stets problematisch ist, entstanden für solche Fälle, in denen auf die Genauigkeit der Gatterebene nicht verzichtet werden konnte, so genannte Hardwarebeschleuniger und Logikemulatoren, bei denen der Simulationsalgorithmus in Hardware abgebildet wird. Es handelt sich also um spezielle Rechner, die mit großer Geschwindigkeit einen festverdrahteten bzw. anwenderprogrammierbaren Ablauf ausführen.
Simulation ist ein umfangreiches Gebiet und kann hier nicht vollständig behandelt werden. Die folgenden Betrachtungen werden sich deshalb auf die Gatterebene beschränken. Wegen ihrer grundlegenden Bedeutung soll dabei insbesondere die verzögerungszeitberücksichtigende Logiksimulation betrachtet werden. Alle weiter abstrahierende Simulatoren können ohne weiteres auf die hier beschriebenen zurückgeführt werden.