Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I frequently see Simulation and Emulation in computer science. These two terms seem synonymous. Is there any difference between Simulation and Emulation?

share|improve this question
add comment

9 Answers 9

up vote 61 down vote accepted

Yes, the concepts are very different.

A simulation is a system that behaves similar to something else, but is implemented in an entirely different way. It provides the basic behavior of a system but may not necessarily abide by all of the rules of the system being simulated. It is there to give you an idea about how something works.

Think of a flight simulator as an example. It looks and feels like you are flying an airplane, but you are completely disconnected from the reality of flying the plane, and you can bend or break those rules as you see fit. E.g.; Fly an Airbus A380 upside down between London and Sydney without breaking it.

An emulation is a system that behaves exactly like something else, and abides by all of the rules of the system being emulated. It is effectively a complete replication of another system, right down to being binary compatible with the emulated system's inputs and outputs, but operating in a different environment to the environment of the original emulated system. The rules are fixed, and cannot be changed or the system fails.

The M.A.M.E. system is built around this very premise. All those old arcade systems that have been long forgotten, that were implemented almost entirely in hardware, or in the firmware of their hardware systems can be emulated right down to the original bugs and crashes that would occur when you reached the highest possible score.

share|improve this answer
6  
"behave exacly like ..." may be not necessary. The important thing is that it "reproduce the same exact external behavior" in respect to what uses it. –  Emilio Garavaglia Feb 13 '12 at 20:39
add comment

A simulation is a model constructed of something else which reproduces some of that thing's features and leaves others out - obviously you want to preserve the features relevant to your query, and leave out the irrelevant ones.

For instance, a simulation of early-morning commuter traffic leaves out the commuter's names, and maybe even their identities (using a counter variable rather than an actual set of Commuter objects), but it cannot disregard their rate of arrival.

Emulation is the running of a software X created for platform A on platform B, without changing the software itself. This requires building a model of A that runs on B, and obviously it has to model everything about A that involves code execution. (In theory you could omit support for opcodes that you know this particular software won't ever use, but that is rare - doing an emulator is hard work, and it's much more worthwhile to do a thorough job and have something reusable than a kludge that works only for S.)

share|improve this answer
add comment

Both means something doing the job of something else.

The difference is that "Simulation" happens at a conscious level (with respect to the user) and is finalized typically to anticipate the result of a reality without touching the reality itself.

"Emulation" happens at an unconscious level, and has the purpose to replace an underlying component with another different one that -in respect to the user- works as the old one.

In other words, simulation happen in a "parallel world", while emulation happens in a "replaced world".

share|improve this answer
2  
How does this answer the OP's question in terms of computer science? There is nothing either conscious or unconscious about them. A simulation is real, as is an emulation. Their respective purposes however are conceptually very different. –  S.Robins Feb 13 '12 at 12:01
    
@S.Robins: conscious/unconscious != real/unreal. conscious = something you explicitly decided, unconscious something you did not decide yourself explicitly. An app running on an "emulated" system doesn't know about that emulation. An app running on a "simulated" system must know about it, since it will not necessarily have a the same behavior. –  Emilio Garavaglia Feb 13 '12 at 15:12
    
It has nothing to do with which apps are running where, and nothing to do with making conscious or unconscious decisions. The difference fundamentally is about whether a system is being modeled generally, or replicated entirely. –  S.Robins Feb 13 '12 at 20:26
    
@S.Robins: I agree with the concept you mean, but there is something subtle it doesn't catch: an "emulator" is typically conceived to run something on top, replacing something under the scope of the application. A "simulator" is typically conceived to be run for itself instead of the real application. They are not at the same abstraction level. –  Emilio Garavaglia Feb 13 '12 at 20:34
add comment

Technically, they both do the same: do something in an environment that acts as if it were the real thing.

Conceptually, however, there is an important difference. A simulation is supposed to be detached from the real world to a certain degree; the output of a simulation is not directly connected to the thing it simulates. For example, an aircraft simulator does not actually fly, and the pilot is not actually communicating with a real air traffic controller. An emulation, by contrast, has the goal of taking the place of the real thing: for example, if you emulate a simple microcontroller using a more sophisticated programmable CPU, that CPU can be used in place of the original microcontroller; it will be physically connected to some machine, and it will actually control that machine just like the microcontroller would.

A simulation usually has the goal of testing or predicting some real-life process in a safe environment; because the simulation is disconnected from the real world, nothing really bad can happen (a crashed aircraft simulator never kills real people). The goal of an emulation, OTOH, is to replace hardware or software components with functional equivalents when the original modules aren't available (or have become too expensive, if only to maintain); emulation can also serve the goal of using hardware more flexibly - the same programmable microcontroller can double for several simpler controllers, switching emulation mode as needed.

share|improve this answer
1  
"technically", they are entirely different. The conceptual difference you describe is fundamental to this difference. –  S.Robins Feb 13 '12 at 11:55
    
@S.Robins: by 'technically', I mean that technical implementations are often similar or equivalent; the difference is mainly in what you use them for. –  tdammers Feb 13 '12 at 19:32
    
It has nothing to do with use cases. It is the fundamental difference of purposes which defines two very separate concepts. The emulation seeks to replace a complex system of functionality exactly so that it is indistinguishable from the original, while the simulation is a big simplification of a system and represents functionality in a very general sense via a model. Thus, the technical implementations are necessarily vastly different. –  S.Robins Feb 13 '12 at 20:19
    
@S.Robins - I disagree. Whether you simulate or emulate a given microprocessor doesn't make much of a difference for the implementation, but what you do with it does. –  tdammers Feb 13 '12 at 20:47
    
@tdammers: Generally, the primary design goal of an emulator is to serve as a "real-time" replacement for the thing being emulated, while a major design goal of a simulators is to allow not-necessarily-real-time analysis of, and possibly interaction with, the underlying process. Some simulators may be fast, and some emulators may provide substantial abilities to analyze and/or interact with the underlying process, but the engineering priorities are different. –  supercat Jan 28 at 18:02
show 1 more comment

While the etymology isn't strictly accurate, think about the difference between sympathy, "I can imagine what that must feel like" and empathy, "I know what that feels like." A simulation might include visual representation of a problem, but it might not. For example it might just print out columns of numbers representing how many people are lined up for something or total revenue or average speed. It has some characteristics that match reality, and some that don't.

Emulation, which is often used in the context of one platform pretending to be another platform, is far more complete. So Windows Phone developers can run or debug their phone apps on a Windows machine in an emulator, which looks like a phone and behaves like one too. You can run your old Commodore 64 games in an emulator, too.

The words aren't precise. Most flight simulators are more like emulators in my opinion, but the name has stuck from a time when they were not so immersive. Some people reserve the word emulator for the cross-platform case and reject it for anything else. You'll probably never be thought wrong if you do the same when speaking, but understand that some people may place the boundary between the two words a little differently, and make allowances when someone says "this is an emulation" for a really accurate and complete simulation.

share|improve this answer
    
It seems a common misconception that emulation and simulation are effectively the same. This may be because the word emulate can mean to mirror the behavior of others (e.g.: a child emulates his father). This is technically inaccurate when spoken of in terms of computer science. A flight simulator isn't an emulation, because all input/output is manged through a purpose built program - the simulator - which doesn't exactly replicate the behavior of the aircraft it's modeled on, as it doesn't implement the exact same computer programs the aircraft does. If it did, then it would be an emulator. –  S.Robins Feb 13 '12 at 14:31
add comment

Both terms are very much similar in concept - mimicking.

Simulation or Simulators make use of software to produce a replicated system that is very much similar to target model in respect to its underlying core functionality(especially its basic methodology).

Emulators, on the other hand, focus more on exterior similarity when compared to target system. It has minimum concern for "how" the functions are mimicked. Emulators are, in general, used when working in a completely different environment(For example a different Operating system) as compared to the original system.

share|improve this answer
add comment

A simulator is a software that duplicates some processor in almost all the possible ways.

An emulator is a hardware which duplicates the features and functions of a real system, so that it can behave like the actual system.

Usually the emulators and simulators are used for the testing of new architectures and also to give training in some complex systems.

A most famous example for a simulator is the flight simulator that simulates the functionalists of an aircraft.

Basically a simulator tests the program on the development processor (the processor on which we are working), while an emulator is used on the target processor (the processor for which the program is being written).

share|improve this answer
    
You're not very clear on the difference between the two. –  deadly Oct 9 '12 at 10:53
    
post it, if you have more specification about the difference. –  Himanshu Oct 10 '12 at 10:38
add comment

From Wikipedia:

It has recently become common to use the word "emulate" in the context of software. However, before 1980, "emulation" referred only to emulation with a hardware or microcode assist, while "simulation" referred to pure software emulation

share|improve this answer
add comment

Simulation versus Emulation TEST One can build an emulator to function as a simulator but I cannot build a simulator to function as an emulator[platform independent] Example A physical SHO L/C oscillator oscillates at a frequency determined by SquareRoot ofL/C Mathematically the physical SHO can be described exactly by a differential equation analog computer or difference equation digital computer

share|improve this answer
    
this post is rather hard to read (wall of text). Would you mind editing it into a better shape? –  gnat Feb 7 at 3:49
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.