记得我刚上研究生的时候,在阅读外文资料时总是分不清楚“Simulation”和“Emulation”的区别。于是我就去问导师,导师解释的也很简单:“Simulation就是模拟,Emulation就是仿真嘛!”其实很多人一开始研究模拟器时也会遇到同样的问题,面对文献中大量的“Simulation”和“Emulation”不知所措,结果就越看越糊涂。当时上网又不方便,不像现在“Google”一下就搞定了,自己对这个问题的理解基本上是无师自通的,所幸的是理解并没有错,后来论文落到某位专家的手中也没有对这个问题对我提出异议。

做模拟器首先就要搞清楚“Simulation”、“Emulation”、模拟和仿真这四者的区别和关系,下面我谈谈我个人的理解。

Simulation,是指用软件去模拟某个系统的功能,并不要求实现该系统的内部细节,只要在同样的输入下,软件的输出和所模拟系统的输出一致就可以了。比如你在PC机上用一个软件去simulate红白机的游戏“超级玛莉”,你只要让你的软件运行出来的效果和红白机上“超级玛莉”游戏一样就可以,至于这个软件你是怎么实现则无关紧要。

Emulation,是指用软件去模拟出某个系统中各个部件的组成,真实地模拟出系统的运行机制。这就要求软件的作者需要非常了解所模拟系统的内部结构,能够利用各种数据结构实现出各个部件的模型。同样去emulate红白机的游戏“超级玛莉”,首先就要用软件模拟出红白机中的各种硬件,如CPU、内存、图形处理芯片、声音处理芯片以及游戏手柄等,再通过将加载游戏的ROM来运行该游戏。现在各种游戏模拟器,如MAME、VirtualNes都是采用emulation的手段去实现游戏的模拟,所以它们又叫做emulator。

模拟就是指用在某个平台上用纯软件的方法去模拟另一个平台上程序的运行,模拟包含“Simulation”和“Emulation”,通过上面对这两者的分析大家可以知道,“Simulation”是一种高层次上的模拟,类似于“黑盒”,而“Emulation”更注重于对底层的模拟,类似于“白盒”。

仿真的解释就比较多了,有的说仿真是指用机器底层的微指令来解释执行另一个平台的指令,有的说仿真是软件结合硬件来模拟另一种平台程序的运行,即“硬件仿真+软件模拟”。其实这两者是针对不同仿真对象和宿主平台而言的:前者具体的是讲系统仿真,是以大型机CPU(现在也可以指PC机)为仿真对象的,通常在研制CPU的过程中,用宿主机的CPU去仿真其软件的运行,这样可以使硬件和软件的研发过程同步,加快整体系统的研发进度;后者一般指嵌入式仿真,做过嵌入式开发的朋友都知道,开发过程中经常要用仿真器去调试程序,我们可以在PC机上调试嵌入式系统中的某个程序,通过仿真器向嵌入式微控制器发送调试信号(如JTAG),使微控制器执行某条指令,而PC机上会相应地显示出该条指令执行的结果,看上去似乎是PC在“执行”这条指令一样,这样来达到仿真的目的。但不管怎样,仿真总是与硬件相关的,这一点与模拟是有区别的。

现在还出现了“虚拟机”一词,在我看来,虚拟机更多地采用了模拟技术,而不是仿真,但是虚拟机相对于一个模拟器而言要复杂很多,像Bochs这样的虚拟机实质上应该是一个emulator,而像VirtualPC、VMWare和VirtualBox这样的虚拟机,则采用了更为复杂的技术,既有simulation,也有emulation,甚至还有系统仿真,所以不能单纯地将它认为是一个模拟器。

以上观点纯属个人看法,如有错误,欢迎大家多多指正。

Simulation?Emulation?模拟?仿真?相关推荐

  1. Simulation Emulation(转载)

    原文地址:http://blog.chinaunix.net/u1/45052/showart_472785.html simulation.emulation.模拟.仿真.这四个名词很容易混淆,刚弄 ...

  2. 【技巧】Vivado 仿真器simulation显示模拟波形图(非数字波形)

    [技巧]Vivado 仿真器simulation显示模拟波形图(非数字波形) 设置步骤 其他 设置步骤 ①打开Vivado的任意一个可以运行的工程 ②点击Simulation -> Run Be ...

  3. 生物细胞繁衍生存模拟仿真实验

    生物细胞繁衍生存模拟仿真实验 原定题目给的以5为界,我们为方便算法实现依据的是简单生命游戏,对于其周围数目以3为界 约束条件 (1)如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡: (2 ...

  4. 程序模拟抽奖流程图_一道与联欢会相关的概率统计题目的模拟仿真

    继续昨天的问题,回顾一下相应的规则. 1. 同学按座位号依次进行抽签: 2. 抽签过程中抽到的同学不能为之前已经抽到的同学: 3. 按照昨天的规则,为了计算简便,可以抽到自己. 那么根据昨天的分析,我 ...

  5. 【基于MATLAB的火灾疏散模拟仿真】——安全隐患提前发现,疏散方案优化

    [基于MATLAB的火灾疏散模拟仿真]--安全隐患提前发现,疏散方案优化 随着城市化进程的不断加速,人口密度越来越大,特别是在高层建筑中.万一发生火灾,往往会对人的生命和财产造成严重损失.因此,火灾疏 ...

  6. 【数学建模】基于matlab GUI平行停车模拟仿真【含Matlab源码 1877期】

    一.平行停车模拟仿真简介 近年来, 随着我国经济的快速发展, 机动车保有量也迅速增长.截至2012年底, 全国机动车保有量已达2.4亿辆, 城市"停车难"的问题日趋严重.统计结果表 ...

  7. Ardupilot固件之Flightgear模拟仿真

    Ardupilot固件之Flightgear模拟仿真 一直想做gazebo的无人机仿真,截至目前,ardupilot的gazebo总是跑不出来,偶然看到了Flightgear,装了下感觉还可以. 首先 ...

  8. comsol 超声声场模拟_基于COMSOL的声悬浮声场模拟仿真

    龙源期刊网 http://www.qikan.com.cn 基于 COMSOL 的声悬浮声场模拟仿真 作者:黄健宇 来源:<中国科技纵横> 2019 年第 03 期 摘 要:本文大致介绍了 ...

  9. 网络作战训练模拟仿真管理系统软件

    网络作战训练模拟仿真管理系统软件 战术对抗训练系统主要由"想定编辑分系统"."辅助决策分系统"."方案推演分系统"."自主对抗分系 ...

  10. 【Python与数学建模】蒙特卡洛模拟仿真(附完整详细代码)

    [Python与数学建模]蒙特卡洛模拟&仿真 零.前言 引例:投针实验 试验描述: 试验分析: 代码实现 蒙特卡洛模拟&仿真的基本介绍 应用实例 实例一.三门问题 问题描述 问题分析与 ...

最新文章

  1. 大一java实训报告1500字_从800字小作文,到3000字小论文你用了多久? | 校媒FM
  2. 设置vim的默认工作路径同时与自动设当前编辑的文件所在目录为当前工作路径不冲突...
  3. 九、表达式求值(1)
  4. 【MM 模块】 Optimized Purchasing 优化采购 3
  5. 解决Mysql读写分离数据延迟
  6. 投资学习网课笔记(part8)--基金第八课
  7. oracle unpivot 索引_oracle 11g 行列转换之unpivot、pivot
  8. DevOps vs. Agile:它们有什么共同点?
  9. word如何设置上标形式_如何在word中设置特殊页码
  10. pyspark 修改python版本_python – Pyspark从日期到字符串更改列的类型
  11. quartz获取开始结束时间_Springboot集成quartz
  12. URL重写步骤 【有用】
  13. java 网络实验_java网络聊天室实验
  14. HTTP的缺点与HTTPS
  15. 一套代码小程序WebNative运行的探索03——处理模板及属性
  16. css定位position,absolute relative两种情况下,top,left,right,bottom的区别
  17. matlab直流电机pid调速仿真,直流电机双闭环PID调速系统仿真设计
  18. Android 7 soter,开通微信人脸支付 OPPO Find X 成首发安卓手机
  19. 基于区块链的数字藏品管控方案
  20. C#-----集合ListT的常用方法

热门文章

  1. fastjson转换大全
  2. 云计算大数据时代IT管理的机遇和挑战
  3. Android开发,登录注册界面中如何添加视频背景,亲测可用
  4. 怎么正确有效学习计算机专业
  5. 怎么开启windows hypervisor platform,解决hypervisor platform消失无法安装的问题
  6. uniapp实现点击播放mp3音频文件
  7. QQ空间迁移_【SRX550_HA_以及端口绑定高可靠性尝试】
  8. 神州控股、神州信息、神州数码集团与腾讯云签署战略合作
  9. NBD Network Block Device
  10. vue3 ref 和 reactive 区别