The retargettable embedded system emulator architecture

SourceForge.net Logo

[English] [Chinese]

 

模拟器在教育/商业/工业的应用领域

 

计算机教育

计算机教育是模拟器的一个传统应用领域。在1970/80年代,学生们使用纸和铅笔来设计使用布尔代数和卡恩图的CPU组件,而现在,学生们可以利用CPU模拟器,通过将发生在程序执行期间的相关的、同时的事件虚拟化,来学习计算机的运作。交互式的CPU模拟器可以让学生们进行主动学习,他们可以设计他们自己的假想机器,并在这上面编写程序并执行、调试系统软件,最后,使用模拟来理解真实的机器。

作为一个支持工具,模拟器在一下几个方面很有吸引力:(1)学生可以在不同的抽象层学习计算机底层的细节;(2)学生可以在任何地方任何时候随意控制机器的内部状态;(3)很多模拟器与教科书紧密结合;(4)基本上没有基础建设的成本。

许多计算机教学由于资源有限无法提供良好的拥有足够计算机设备的实验室,而在模拟的环境中学习计算机技术与在真实的硬件上相比,不仅过程是类似的,而且更便宜、更灵活,学生如果不不小心犯了错误,也很容易进行恢复,此外,在一个核心设计上扩展新的功能也非常容易。

另外,我们将能使用已经不复存在(或只存在于博物馆)的计算机,或者它们存在,但用于纯教学目的又太过昂贵,这将改善我们对计算机的学习。模拟器可以让一个教学者教授任何模拟器所模拟的硬件的概念,而常常会一个已经成为历史遗产的机型是做好的架构概念的例子,或者它拥有最好的教学和文档资料。

有人这么说过:“使用模拟器来学习计算机和使用真实的机器是不同的,事实上模拟器更好!”由于真实的硬件变得越来越复杂,也越来越不适合用来教授计算机的基本概念。简单的假想机模拟器(虚拟机)可以起到一个重要的作用,它可以将一个系统内部的操作完全展现在学生眼前,并让他们可以做随意的改动(这对于真实的CPU是不可能的)。如果设计合理,假想机模拟器可以更好的演示诸如冯-诺依曼架构、存储程序概念、顺序执行原理、复杂数据表示、精简指令级、指令翻译过程、取指-执行周期、寄存器使用等核心概念。

单片机和嵌入式系统的教学已经在高校广泛地开展起来,对于这个利于的教学,模拟器起到的作用就更为重大了。传统的单片机,往往是在课程初期进行大量的书本教学,由于一般没有可能让每一个学生自己拥有一套完展的开发环境,学生的实践学习只能在有限的几次到实验室的上机机会来进行。但是有了模拟,每一个学生都能在自己的PC上拥有一趟开发和运行环境。真实的嵌入式设备往往比较脆弱而易损坏,但在模拟器中进行学习就可以完全不用担心这点。而且指令的执行、存储器和寄存器的变化、I/O的动态都非常直观,且能任意修改,这对于单片机和嵌入式系统的学习来说是非常有效的。

软件开发

模拟器可以在软件开发人员的桌面电脑上模拟他们所正在从事开发和调试工作的嵌入式系统,这种模拟是精确的,以至于在其中运行的程序无法分辩自己是运行在模拟或是真实的环境中,二进制代码一般不许修改就可以运行,甚至包括一些操作系统和设备驱动程序。更为重要的是,一个嵌入式系统在其开发阶段往往还并不完全存在,然而,一个模拟的模型可以在早期就建立起来,这样软件的开发就能在硬件完全就绪之前几个月就开展起来,和硬件进行并行的开发,这无疑会加速产品上市速度。

 

系统体系架构设计

系统架构设计一直以来都是一个难点。模拟器可以模拟出一个虚拟的系统原型,这个原型的参数可以被随意得配置和调校,比如总线宽度、队列深度等。在测试和分析过程中,完全可以使用在实际产品中将与硬件搭配的软件,而不是人为设计的数据和测试程序。模拟器可以用来与现实世界的网络与 I/O 数据进行交互,因此,完全可以使用数据流量产生仪器对模拟的系统进行压力测试。

同样,虚拟原型可以在硬件完全就绪之前就被交付软件开发小组,因此,软件开发可以提前很多时间开始。一旦基本的系统体系架构设计结束,软件开发也就重叠地完成了,在此期间,系统体系架构的最后一个细节还始终可以更改。

 

软件测试

模拟器具备强大的断点检查和继续执行的调试功能,这意味着,一个被测试的程序,例如系统的启动程序,在模拟环境中可以运行到一半,然后被暂停,在这个时候,测试人员可以对系统注入各种不同的错误因素,然后,被暂停的程序可以继续运行。在模拟器中运用这种技巧来运行整个测试项目可以比在真实的硬件上节省很多时间。

与硬件不同,模拟器的特性是完全确定的,运行相同的测试,比如利用已生成的网络流量进行跟踪,会产生相同的结果。如果一个问题被检测到,它很容易通过再次运行该测试而被再现。

因为模拟器能运行在便宜的 PC 上,巨大的设备投资就有可能被节省下来。没有足够的设备用来测试已经是过去的事情了。每一个软件工程师都能在他们的桌上有一个他们自己的目标系统,而这不需要任何额外的花费。

 

现场演示

一旦一个产品在模拟器中被模拟出来,甚至产品已经开始发售,模拟器还可以在开发与测试之后的许多场合被用到。它使得任何计算机能被用来模拟公司产品目录中的某个产品,或是几个产品练成网络。

内部和外部的培训,都可以用 PC 来完成,这将可以避免各种为了保证在培训场所有足够的硬件设备而带来的物流难题,同时又能节省大量购买培训设备所需的费用。产品的培训可以在它上市前,或是产品投产初期预产成本相当高的情况下进行。

现场工程师可以用他们的笔记本电脑来重现现场遇到的问题 email 回后方的工程师来解决,这种方法解决了现场报告的问题无法在事后进行在线和解决。模拟器的断点检查功能和确定性使得一旦测试例子被确定下来,它就能被无数次得再次运行。

 

硬件验证

当越来越多的功能被整合到一个系统的软件中去,硬件验证也变得越来越复杂,以至于仅仅凭借着几个简单的手工设计的测试项目已经很难达到目的。整个软件栈必须用来在真实的环境中测试硬件的特性。 模拟器可以模拟一个嵌入式系统,可以运行实际为该系统编写的代码,这样,真实世界和嵌入式系统的交互都能被捕捉下来。通过在整个开发流程中使用这种技术,更多的验证工作可以在更少的时间内完成,生产力就可以得到提高,这样也带来了个更高质量的系统。

 

 


(C)2005 All rights reserved by Stanley Huang | Page visited for times