In this tutorial, we’ll study the similarities and differences between simulation and emulation. First, although simulation and emulation are frequently employed as synonyms, they are not the same. Of course, when we talk about simulating or emulating some system or process, we refer to mimicking them. However, this mimicking process occurs differently for emulation and simulation.
In the modern world, we have many motivations for doing simulations and emulations. However, the most relevant ones are the execution of legacy, and sometimes deprecated, systems in modern computers, as well as testing the processes/results of innovative software or hardware before releasing them.
To understand it all, we’ll first explore why simulating systems and processes and see some application scenarios. So, we’ll investigate some theoretical and technical details about both simulation and emulation. Finally, we’ll compare them in a systematic summary.
2. The Motivations for Simulating or Emulating
We can ask ourselves: why simulate or emulate something? Why do not immediately execute systems and processes in a real environment?
Actually, there are multiple answers to the previously stated questions. A potential one refers to getting insights regarding a given software or hardware behavior still in its early stage of development. Thus, before starting a project, the development team can check some aspects of the system’s viability.
An example of this first scenario is creating simulation prototypes of UX/UI designs, thus submitting them for the evaluation of focus groups to check if they are intuitive enough.
Another answer consists of using simulation or emulation to test a new system in an environment as closest as possible to the one that will be executed by the final user.
An example is employing an Android emulator or Apple simulator to test new mobile applications developed in traditional computer setups.
Finally, the developed hardware or software can be the simulator or emulator. In such a case, the developed system aims to provide a clear and detailed description and operations of a real-life process.
In this last scenario, common examples are training systems, such as flight simulators.
First, simulating a system or process consists of building a model that represents it. This model, in turn, should work with the same variables and configurations of the target system. Thus, we can similarly prepare the simulation to how we set up implementations of these systems.
Furthermore, simulators should be able to mimic state changes and process results of a system, given the occurrence of a particular event or command. Then, although we can not be sure about the consequences of these events in the hardware that will actually run the system being simulated, we’ll have a good notion about its software results.
It is relevant to highlight that simulators may take some simplifications and adaptations to work well, considering their underlying system. The most important at this point is having the same logical results as real implementations of the simulated system or process, not necessarily having the same performance or execution time.
For instance, we can simulate millions of years of life evolution on Earth in a few minutes or hours. During a simulation like this, due to the high number of variables, we can ignore not relevant details and focus only on the crucial parameters to obtain the most accurate results possible.
In a few words, simulation means executing a model. So, we can get insights into how some system or process will behave in the real world. To validate the simulation, we are required to implement the simulated system, execute it and compare the results. Alternatively, we can compare results with previously available parameters. If the results are not satisfactory, we can then improve the model and update the simulation, as depicted in the following image:
The described refinement process is called the model validation cycle.
An emulator actually executes the processes or systems being emulated. In such a way, emulation does not work only with real-world models but replicates the states, behaviors, and results of process and system implementations.
Due to the characteristics cited above, emulators commonly work in software and hardware contexts. An emulator can, for example, provide the execution of an old and deprecated device in a modern computing machine. Furthermore, the opposite is also true. We can emulate complex modern machines (or parts of them) in simpler and older equipment.
Sometimes emulation systems can even be more optimized than the original implementation of a system. For example, in this scenario, we can cite the emulators of old video games. Modern computers, with much more processing power, can emulate both hardware and software of old video games while improving their video and audio quality.
Other times, emulators may present a worse performance when compared with the real system. Let’s consider emulating an entire networked system in a single typical PC. In this case, although the network system will work with the proper technical settings, its performance probably will be poor due to computational resource limitations.
In summary, emulation means executing a system through another system. Thus, besides mimicking processes and getting the same results as original systems, an emulation also requires the process’s execution to be equal (or pretty much similar, at least) to them.
The following image depicts the process of creating an emulation of a system:
As depicted in the image, we usually employ an emulation framework for creating an emulator. At first, we need to describe all the software/hardware components of the original system as digital objects. These objects are submitted and processed by an emulation framework, which provides the respective emulator software. Finally, we can execute the emulator and get the desired system rendered and running.
5. Systematic Summary
As we saw in previous sections, simulation and emulators have several similarities. However, they are not the same. A simulator focuses on a system model, aiming to mimic some conditions and operations that lead to a final result. An emulator provides a recreated environment to observe these conditions and execute these operations as in the original system. So, we can explore systems’ processing routines and operational behaviors besides only their results.
A typical simulation that we have is weather forecasting. In such a case, weather forecasting models are tuned with observable parameters. So, based on previous knowledge, these models try to make predictions about the weather shortly.
In the context of emulators, we can cite virtual machines as a good example. In this case, virtual machines provide, in software, the hardware and software environment of a complete computer. Thus, we can operate virtual machines as in real computers, getting very accurate results and observing all the collateral effects of such operations.
The following table compares some relevant characteristics of simulation and emulation:
In this tutorial, we studied simulation and emulation. First, we saw some motivations for using simulation and emulation in the real world. Next, we specifically explored the particular characteristics of simulation and emulation processes. Finally, we compared and analyzed such characteristics in a systematic summary.
We can conclude that simulators and emulators brought several benefits to our lives. Simulators enable us to develop multiple training systems (driving, piloting, etc.) and make accurate predictions based on already available knowledge. Emulators, in turn, enabled us to test several processes in heterogeneous environments safely and securely. So, we can say that they represent relevant resources in modern computing.