仿真和仿真有什么区别?
可能重复:
模拟器还是模拟器? 有什么不同?
用简单的可以理解的术语来说,这两个术语有什么区别?
[我已经看过这个 , 这个和这个 ]
(以第一个链接为例)
你想复制一个旧的惠普计算器的行为,有两个select:
-
你写一个新的程序来绘制计算器的显示和按键,当用户点击按键时,程序将执行旧计算器的function。 这是一个模拟器
-
你得到了计算器固件的转储,然后编写一个加载固件的程序,并像计算器中的微处理器那样解释它。 这是一个模拟器
模拟器尝试复制设备的行为 。
仿真器试图复制设备的内部工作 。
这是一个很难回答的问题,因为条款经常被误用或混淆。
仿真器通常是完全重新实现特定的设备或平台。 仿真器的function与真实设备完全相同。 例如,一个NES仿真器可以实现CPU,声音芯片,video输出,控制器信号等等。来自NES castridge的未经修改的代码可以被转储,然后由此产生的图像被加载到我们的模拟器中并被播放。
模拟器是设备/平台的部分实现,它只是为了自己的目的。 例如,iPhone Simulator运行一个专门编译为x86和Cocoa API的“iPhone应用程序”,而不是真正的设备的ARM CPU和Cocoa Touch API。 但是,我们在模拟器中运行的二进制文件不适用于真实的设备。
一般来说,我将这个更大的问题分为三部分:模拟,刺激,仿真和build模。
仿真是利用build模来为复杂系统创build可控,有代表性的立场。 根据定义,模拟总是不完整的。
刺激是使用人造环境input到明确定义的界面来驱动,检查和testing真实世界设备的行为。
仿真是为了允许来自仿真真实世界设备的受控响应而在定义良好的接口处用模型replace真实世界设备。 如果所有接口都存在,则仿真是“完整的”,并且观察到的行为与真实世界设备的行为相匹配。
build模是利用math技术,专门的硬件和工程判断来为真实的世界环境,设备,系统或行为创造代表性的立场。
用“简单的术语”来说,这意味着模拟器是一个横跨定义良好的界面,与现实世界中的等价物(速度除外)无法区分的东西。 仿真可以是完整的或不完整的。
在“简单的术语”中,模拟是指可以控制和检查与现实世界系统类似或类似的一系列行为的任何系统。 根据定义,模拟决不会完成。
两者都是一个对象的模型,你有一些控制input和观察输出的手段。 使用模拟器,您希望输出与您正在模拟的对象所产生的完全一致。 使用模拟器,您希望输出的某些属性与对象的生成类似。
让我举个例子 – 假设你想做一些系统testing,看看如何在系统中添加一个新的传感器(如温度计)会影响系统。 你知道温度计每秒钟发送一个包含其测量的信息。
模拟 – 如果你还没有温度计,但是你想testing这个消息速率不会使你的系统超载,你可以通过附加一个发送一个随机数的单元来模拟传感器,每秒8次。 您可以运行任何不依赖于传感器发送的实际值的testing。
仿真 – 假设你有一个非常昂贵的温度计,测量到0.001℃,你想看看是否可以通过一个更便宜的温度计,只测量到最接近的0.5℃。你可以使用昂贵的温度计模拟更便宜的温度计将读数四舍五入到最接近的0.5℃并运行依赖于温度值的testing。
我不知道这是否是一般性的意见,但是我总是把它们用来区分两者。 如果您真的想使用仿真机器的输出,则使用仿真器。 另一方面,模拟器则用于研究模拟机器或testing其行为。
例如,如果要在应用程序(在通用CPU上运行)中编写一些状态机逻辑,则可以编写一个小型状态机模拟器。 如果你想研究一个特定问题的状态机的效率或可行性,你写一个模拟器。
基于软件和系统工程经验,我将总结出以下差异:
模拟:对我来说,这一直是软件 – 实际系统的每一个方面都只是由一些代码和/或math模型。 模拟试图准确地重现真实系统的行为(或预测它),但只是近似于它。
仿真:与仿真相反,它并不逼近真实系统的行为,它仿效真实系统的行为。 模拟器可能涉及硬件。 但也可能完全是软件。 例如,您可以获得像世嘉创世纪这样的老游戏机的软件仿真器。 这是一个模拟器,因为它复制真正的起源function,以便您可以在模拟器中运行原始的Genesis代码。 一个起源模拟器将不能运行原始代码,它只会逼近它的行为,产生类似的结果,这取决于原始系统的模型有多好。
一个系统组件的模拟器可以包含在一个更大的系统中,完全替代它正在模拟的组件 – 一个模拟器不能,因为它不是一个足够精确的原始组件行为的表示。
一个“模拟器”是一个基于软件的硬件模拟器的术语,但通常这两个是同义词。
来自硬件开发世界。 。 。
模拟testingfunction。 2 + 2 = 4等
仿真testing特定环境(64位,16位,手指和脚趾)上的function。
这是一个食物的例子:
你有两块面包,一把刀子,花生酱和果冻,将他们给一个幼儿园。 你写如何做一个三明治的指示。
在模拟中,你会演示过程,假装你打开jar子,假装涂抹花生酱等。
如果在说明书的最后只剩下果冻而不是花生酱,那么你的模拟失败了,你需要修复你的指示。 另一方面,如果你有一个完整的“三明治”,那么说明书应该是有效的
在仿真中,您可以使用实际零件(同样的面包,花生酱等)的近似表示。 如果你给你的幼儿园一个便宜的塑料刀,真的很厚的花生酱会怎么样? 刀会中断仿真,说明需要澄清或修复,以适应这个问题。 在这种情况下,你可能会build议在微波炉里加热花生酱。
在实践中:考虑一个你正在编程的64位系统和一个实际上正在运行代码的32位系统。 你添加两个非常大的数字并打印结果。 在模拟中一切正常(你设法让代码正确地添加两个数字)然而在仿真中,你发现你得到了错误的答案。 发生了什么? 32位系统的仿真无法处理大量数据。 这是一个正确的function(即模拟)的例子,但没有适当的支持你的运行环境(仿真)
如果我错了,请原谅我。 我必须承认,我没有对这两个方面做过任何研究。 无论如何…
仿真是为了模拟具有详细已知结果的事情,无论内部行为是实际的。 我们只是想把事情做完,不关心内部的事情。
另一方面,模拟是用一些已知的行为来模仿某些东西来研究一些不为人知的事情。
我的2cents
下面是一个例子 – 我们最近开发了一个仿真模型来测量一个尚未开发的系统的远程传输响应时间。 仿真分析不能及时给出我们的答案来升级带宽容量,所以仿真是我们的方法。 因为我们最关心的是确定带宽需求,所以我们主要关心的是交易规模和交易量,而不是系统的处理。 仿真模型是一个独立的软件,用来模拟离散事件过程。 总结回答你的问题,仿真是一种模拟。 但是,在这种情况下,仿真不是一个仿真,因为它没有完全代表新的系统,只是交易的规模和数量。
我在两个过程之间感到困惑。 我发现了关于仿真器和模拟器之间差异的简单解释
-
模拟器:
假设你已经在一个文件中编写了汇编程序,并且相应的exe文件已经准备就绪。 模拟器是PC软件,它从EXE读取指令并“处理”处理器的操作。 -
仿真器:
仿真器是(PC软件+处理器)。 处理器可以插入目标板,当你想要testing开发的软件实时检查运行时错误。 不用时可以拔下电源插头。 处理器将有一个并行或JTAG接口与PC下载exe文件执行。
因此,虽然模拟器执行速度慢,但仿真器将能够对开发的代码进行实时validation。 一般来说,你会先在模拟器上testing你开发的代码,然后去检查模拟器。
来源: http : //www.dsprelated.com/groups/c6x/show/148.php