仿真和模拟之间有什么区别?

时间:2010-02-01 04:22:00

标签: emulation simulation

  

可能重复:
  Simulator or Emulator? What is the difference?

用简单易懂的术语来说,这两个术语有什么区别?

[我已查看过thisthisthis]

10 个答案:

答案 0 :(得分:306)

(以第一个链接为例)

您想要复制旧HP计算器的行为,有两种选择:

  1. 您编写的新程序可以绘制计算器的显示和按键,当用户点击按键时,您的程序会执行旧计算器的操作。这是模拟器

  2. 您获得计算器固件的转储,然后编写一个加载固件的程序,并以与计算器中的微处理器相同的方式对其进行解释。这是模拟器

  3. Simulator 尝试复制设备的行为
    模拟器尝试复制设备的内部工作

答案 1 :(得分:13)

这是一个难以回答的难题,因为这些条款经常被滥用或混淆。

通常,模拟器是特定设备或平台的完全重新实现。模拟器的行为与真实设备完全相同。例如,NES仿真器实现CPU,声音芯片,视频输出,控制器信号等。可以转储来自NES castridge的未修改代码,然后将生成的图像加载到我们的仿真器中并播放。

模拟器是设备/平台的部分实现,它只是为了自己的目的。例如,iPhone模拟器运行一个“iPhone应用程序”,专门编译为针对x86和Cocoa API,而不是真实设备的ARM CPU和Cocoa Touch API。但是,我们在模拟器中运行的二进制文件无法在真实设备上运行。

答案 2 :(得分:6)

两者都是物体的模型,你有一些控制输入和观察输出的方法。使用模拟器,您希望输出与您模拟的对象完全相同。使用模拟器,您希望输出的某些属性与对象生成的属性类似。

让我举个例子 - 假设您想进行一些系统测试,看看如何向系统添加新传感器(如温度计)会影响系统。你知道温度计每秒发送一次包含其测量值的信息8次。

模拟 - 如果您还没有温度计,但是您想测试此消息速率不会使系统过载,您可以通过附加一个每秒发送8次随机数的单元来模拟传感器。您可以运行任何不依赖于传感器发送的实际值的测试。

仿真 - 假设你有一个非常昂贵的温度计,测量到0.001摄氏度,你想看看你是否可以使用更便宜的温度计,只测量到最接近的0.5摄氏度。你可以模拟更便宜的温度计使用一个昂贵的温度计通过将读数四舍五入到最接近的0.5 C并运行依赖于温度值的测试。

答案 3 :(得分:4)

我不知道这是否是一般意见,但我总是通过它们的用途来区分这两者。如果您确实希望使用模拟机器进行输出,则使用模拟器。另一方面,模拟器用于研究模拟机器或测试其行为。

例如,如果要在应用程序中编写一些状态机逻辑(在通用CPU上运行),则编写一个小型状态机仿真器。如果你想研究特定问题的状态机的效率或可行性,你可以编写一个模拟器。

答案 4 :(得分:3)

根据软件和系统工程经验,我总结了以下差异:

模拟:对我来说,这总是在软件中 - 真实系统的每个方面都只是由某些代码和/或数学建模。模拟试图准确地再现真实系统的行为(或预测它),但只是近似它。

仿真:与模拟相反,它不会逼近真实系统的行为,它会复制真实系统的行为。仿真器可能涉及硬件。但它也可能完全是在软件中。例如。你可以获得Sega Genesis等旧游戏机的这些软件EMULATORS。这是一个模拟器,因为它复制了真正的创世纪功能,以便您可以在模拟器中运行原始的Genesis代码。创世纪模拟器将无法运行原始代码,它只会接近其行为,产生类似的结果,具体取决于原始系统的模型有多好。

系统组件的模拟器可以包含在一个更大的系统中,完全取代它正在模拟的组件 - 模拟器不能,因为它不能准确表示原始组件的行为。

答案 5 :(得分:2)

“模拟器”是基于软件的硬件模拟器的术语,但通常这两个是同义词。

答案 6 :(得分:1)

来自硬件开发世界。 。

模拟测试功能。 2 + 2 = 4等

仿真测试特定环境(64位,16位,手指和脚趾)的功能。

这是一个食物示例:

你有两片面包,一把刀,花生酱和果冻,并将送给幼儿园。 你写了如何制作三明治的说明。

在模拟中,你会表现出这个过程,假装你打开罐子,假装撒上花生酱等。

如果在说明书的最后只剩下果冻而不是花生酱,那么你就无法进行模拟,你需要修改说明。另一方面,如果你有一个完整的“三明治”,那么说明应该是有效的

在仿真中,您将使用实际部分的近似表示(相同的面包,刀花生酱等)。如果你给幼儿园的一把便宜的塑料刀和真的很厚的花生酱怎么办?刀会在仿真中破坏,需要澄清或修复说明以适应这个问题。在这种情况下,您可能会建议在微波炉中加热花生酱。

在实践中:考虑一个正在编程的64位系统和一个实际运行代码的32位系统。您添加两个非常大的数字并打印结果。在模拟中一切正常(你设法使代码正确添加两个数字)在仿真中,你发现你得到了错误的答案。发生了什么? 32位系统的仿真无法处理大量数据。这是正确功能(即模拟)的示例,但不适用于您的运行时环境(仿真)

答案 7 :(得分:0)

如果我错了,请原谅我。而且我必须事先承认我没有对这两个术语进行过任何研究。总之...

仿真就是模仿具有详细已知结果的东西,无论内部行为是什么。我们只是试图完成任务,而不关心内部发生的事情。

另一方面,模拟是模仿某些已知行为的东西来研究尚未知晓的东西。

我的2cents

答案 8 :(得分:0)

这是一个例子 - 我们最近开发了一个模拟模型来测量尚未开发的系统的远程传输响应时间。仿真分析不会及时为我们提供升级带宽容量的答案,因此仿真就是我们的方法。因为我们最感兴趣的是确定带宽需求,所以我们主要关注事务大小和数量,而不是系统的处理。仿真模型是一个独立的软件,旨在模拟离散事件过程。为了总结回答您的问题,仿真是一种模拟。但是,在这种情况下,模拟不是仿真,因为它不能完全代表新系统,只能代表事务的大小和数量。

答案 9 :(得分:0)

我对这两个过程感到困惑。我发现了关于仿真器和模拟器之间差异的简单解释

  1. 模拟器:
    假设您已在文件和相应的exe中编写了汇编程序 文件准备好了。模拟器是读取指令的pc软件 从exe和'minmics'处理器的操作。

  2. 仿真器:
    仿真器是一个(PC软件+处理器)。处理器可以插入 当你想要实时测试开发的软件时,TARGET BOARD 检查运行时错误。不使用时可以拔掉电源插头。处理器 将具有与PC的并行或JTAG接口以下载exe 文件供执行。

  3. 因此,虽然模拟器的执行速度很慢,但模拟器将能够执行 实时验证已开发的代码。 通常,您将首先在模拟器上测试您开发的代码然后再去 用于检查模拟器。

    来源:http://www.dsprelated.com/groups/c6x/show/148.php