small5的个人空间 https://blog.eetop.cn/nick [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

分不清simulation和emulation?快来围观此文

已有 9682 次阅读| 2016-11-8 20:15 |系统分类:芯片设计

神马是simulation,神马又是emulation,这是一篇纠正三观的文章,值得一读。

  • Emulation:When one system performs in exactly the same way as another, though perhaps not at the same speed. A typical example would be emulation of one computer by ( a program running on) another. You migh use emulation as a replacement for a system whereas you would use a simulation if you just wanted to analyse it and make predictions about it.

  • Simulation:Attempting to predict aspects of the behaviour of some system by creating an approximate (mathematical) model of it. This can be done by physical modelling, by writing a special-purpose computer program or using a more general simulation package, probably still aimed at a particular kind of simulation (e.g. structural engineering, fluid flow). Typical examples are aricraft flight simulators or electronic circuit simulators. A great many simulation languages exist.{ e.g. Simula}




Simulation?Emulation?模拟?仿真?

记得我刚上研究生的时候,在阅读外文资料时总是分不清楚“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、模拟、仿真。这四个名词很容易混淆,刚弄明白,赶紧记下来。


首先,不谈模拟和仿真,先对simulation和emulation进行区分,这是因为这里两个英文单词的界线比两个中文名词的界线要清晰得多。


wiki中关于emulation的解释中提到:

An emulator duplicates (provides an emulation of) the functions of one system using a different system, so that the second system behaves like (and appears to be) the first system. This focus on exact reproduction of external behavior. is in contrast to some other forms of computer simulation, which can concern an abstract model of the system being simulated


wiki中关于simulation的解释中提到:

A simulator may imitate only a few of the operations and functions of the unit it simulates. Contrast with: emulate


1965年的Communications of ACM中有一篇论文叫"Emulation of Large Systems",是一个叫Tucker的IBM工程师写的,他们用IBM360来emulate之前的IBM70xx系列机型,里面提到:

A new technique called emulation are discussed ... An emulator is a package that includes both special hardware and a complementary set of software. The package runs in the manner of an interpretive routine simulator program but is about 5 or even 10 times as fast as a purely software simulator


从上面的资料可以看到,simulation和emulation的区别还是比较明显的。根据我的理解,simulation和emulation都是在制造一个“假象”,但是emulation比simulation要“假”得更完全。    


  • simulation是模拟出原系统的一个抽象模型,而不需要真的去做真实系统要做的事情。因此它其实不具备真实系统的功能,只是当某一功能执行时,通常不必输出功能执行的结果,只是在simulator中记录下由此引发的状态变化。因此它通常用于设计初期的模型验证.

  • emulation则更进一步,要真正地去做所有真实系统能做的事情,只不过做的“过程”不同,它一般用于处理兼容性问题和在资源有限的条件下完成系统原型的实现。


如果把真实系统比作一个人的话,simulator就是这个人的一幅肖像画,而emulator则是这个人的一个克隆人。

举个例子,我们要实现一个p2p文件分发系统

- 最开始的时候我们可以实现一个simulator:它用一个函数来模拟节点间的通信,这个函数的输入是网络性能(带宽,跳数...),输出是通信时延————注意,并没有真正的数据在传输和拷贝,甚至都没有真正的节点,我们只是模拟了通信时延这个“特征(feature)”。
- 接下来,我们把这个分发系统实现了,编译成一个exe文件,但这时我们发现我们没有足够多的计算机来组成一个真实的、具有足够规模的网络来进一步测试(通常p2p网络的节点数成百上千),这时,我们可以写一个emulator:它可以区分同一个计算机上的不同进程,因此我们可以在一台计算机上开100个进程,这样可以用100台计算机模拟出10000台计算机的网络————注意,此时数据真的是通过Socket在传输,只不过有的数据走的是loopback口,并没有真的进网卡。



有一种流行的说法是,simulation是用软件实现,emulation要涉及到硬件实现的部分。这个区分很简单明了,在很多情况下也是适用的(包括上面举的p2p分发系统的例子)。但是这种说法只是对于大多数情况的一种归纳性解释,因此在某些情况下就无法区分二者了。比如,这种解释无法区分Operating System Emulator和Operating System Simulator————这个时候二者都不涉及硬件,这是因为真实系统(Operating System)本身就不涉及硬件。


再说说“模拟”与“仿真”。即使在正式场合下(如论文标题),{模拟,仿真}和{simulation,emulation}这两个集合并不是一一映射的。你可以看到"模拟-simulation"的组合,也可以看到"仿真-simulation"的组合。显然,这个不一致现象是由于同时存在两种一一映射造成的。这个问题不是说理能解决的,还得随着使用次数越来越大,看大多数人的习惯。个人感觉,simulation翻译成“模拟”,而emulation翻译成“仿真”的情况多一些。
    

最后,提一下“虚拟”这个概念。这个概念最近火的不行,英文名叫virtualization。我还没有仔细调查它和前两个概念的细微差别,但是可以肯定的是,virtualization和emulation比较相似,和simulation不是一回事。其他的,以后查到再补进来吧。




维基百科上对仿真器(emulator)和模拟器(simulator)的解释如下:

仿真器(Emulator),又称仿真程序,在软件工程中指可以使计算机或者其他多媒体平台(掌上电脑,手机)能够运行其他平台上的程序,常被错误的称为模拟器。仿真器多用于电视游戏和街机,也有一些用于掌上电脑。仿真器一般需要ROM才能执行,ROM的最初来源是一些原平台的ROM芯片,通过一些手段将原程序拷贝下来(这个过程一般称之为“dump”)然后利用仿真器加载这些ROM来实现仿真过程


模拟器(simulator),又称模拟程序,在计算机科学技术的软件工程中,是指完全基于主机程序并模拟了目标处理器的功能和指令系统的程序。而仿真器(emulator)具有更强大的硬件模仿功能。


Simulator纯粹以软件来模拟源平台的功能和运行结果;Emulator以软件和硬件来模拟源平台的内部设计、行为和运行结果。

举例来说:

  1. 有使用硬件来模拟的,都是Emulator。比如基于单片机的模拟。(什么是叫使用硬件模拟?比如模拟源平台的Timer/PPU/SPU, 直接使用目标平台的Timer/PPU/SPU,那么就是硬件模拟)。

  2. 一般的,在PC上运行的模拟器都叫Simulator,常见的是模拟LCD的显示画面; 在嵌入平台上运行的模拟器都是Emulator,因为在嵌入平台运行的话,为了提高效率,都会以对应的硬件模块来模拟源平台。

  3. PC上的模拟器如果模拟其内部设计、行为,比如读取ROM文件,精确中断、异常,OS等都是Emulator。



总的来说,接触仿真器(emulator)的机会更多一些,我一时居然想不到有什么著名的开发用的真正的模拟器(simulator左上的use simulator,指使用软件仿真。右上的ULINK 指使用实时仿真器,即硬件仿真器。ADS下使用另外一种实时仿真器叫ICE(In Circuit Emulator,ICE)。


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 5

    粉丝
  • 0

    好友
  • 8

    获赞
  • 4

    评论
  • 2003

    访问数

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-5 10:21 , Processed in 0.016043 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部