嵌入式系统软件仿真器的研究与实现文档格式.docx

上传人:b****5 文档编号:21650411 上传时间:2023-01-31 格式:DOCX 页数:59 大小:250.06KB
下载 相关 举报
嵌入式系统软件仿真器的研究与实现文档格式.docx_第1页
第1页 / 共59页
嵌入式系统软件仿真器的研究与实现文档格式.docx_第2页
第2页 / 共59页
嵌入式系统软件仿真器的研究与实现文档格式.docx_第3页
第3页 / 共59页
嵌入式系统软件仿真器的研究与实现文档格式.docx_第4页
第4页 / 共59页
嵌入式系统软件仿真器的研究与实现文档格式.docx_第5页
第5页 / 共59页
点击查看更多>>
下载资源
资源描述

嵌入式系统软件仿真器的研究与实现文档格式.docx

《嵌入式系统软件仿真器的研究与实现文档格式.docx》由会员分享,可在线阅读,更多相关《嵌入式系统软件仿真器的研究与实现文档格式.docx(59页珍藏版)》请在冰豆网上搜索。

嵌入式系统软件仿真器的研究与实现文档格式.docx

3.3.1典型微控制器结构分析17

3.3.2GSSM体系结构18

3.3.3控制核的设计19

3.3.4GSSM基本特征20

3.3.5GSSM工作流程20

3.4本章小结21

第四章软件仿真器的设计实现21

4.1AT91X40体系结构21

4.1.1ARM指令编码21

4.1.2ARM指令分类说明22

4.1.3Thumb指令编码23

4.1.4Thumb指令分类说明24

4.1.5硬件结构和编程模型25

4.2软件仿真器设计30

4.2.1信息家电仿真系统的体系结构30

4.2.2软件仿真器结构31

4.2.3工作流程32

4.3实现原理33

4.3.1交互机制33

4.3.2控制模块38

4.3.3中央处理器模块40

4.3.4存储器模块44

4.3.5系统集成模块44

4.3.6设备模块46

4.3.7通信管理模块49

4.4数据结构50

4.5本章小结56

第五章软件仿真器验证56

5.1软件仿真器的验证56

5.2结果分析57

5.3本章小结57

第六章总结和展望57

6.1工作总结57

6.2创新点58

6.3后续研究展望58

参考文献58

致谢61

个人简历、在校期间的研究成果及发表的学术论文62

个人简历62

研究成果62

学术论文62

 

第一章绪论

1.1课题背景

对于后PC时代和pervasivecomputing(普适计算)而言,嵌入式系统将无处不在,而嵌入式系统的开发难度却越来越大。

一般的嵌入式系统开发不能脱离开一个具体的硬件环境。

有时开发的时候,硬件还没有,而工期又紧,这时可以开始软件开发。

需要硬件的地方可以用软件模拟的硬件仿真器来代替。

就是有时项目的时间并不是关键因数,但是一般的硬件的仿真器比较贵重,这时从经济的因数来考虑也可以用软件模拟的软件仿真器来代替。

当在软件平台调试完成以后,最后才下载都嵌入式硬件环境中。

在当今嵌入式应用中,CPU是核心部件,每个嵌入式系统中都要重点考虑。

而嵌入式CPU中,ARM处理器的市场占有率高达70%。

ARM处理器在嵌入式领域中有着广泛的应用。

iaSDP(InternetApplianceSimulationDevelopmentPlatform)家电控制器仿真开发平台,是电子科技大学与广东软件园共同完成的广东省科技攻关项目“智能电器嵌入式软件开发平台”的二项重要技术成果之一,它是为以智能家电为代表的嵌入式软件提供一套基础的、高效的计算机仿真开发平台。

已经实现的仿真MCU只有一个型号,并且是8位的。

现在需要的是在这个平台上开发并嵌入一个基于构件的ARM软件仿真器。

1.2软件仿真模型的提出

纯软件的模拟器有许多种,如模拟一个芯片时序逻辑的模拟器、只模拟CPU指令的模拟器、模拟整个硬件开发板的模拟器、模拟一个PDA的模拟器等。

存在一些纯软件的仿真器或模拟器,如Stanford大学的SimOS模拟器,它仿真的是MIPS系列CPU和相关外设,可以在其上运行SGI公司的Irix操作系统和软件,目前基本上停止了进一步的开发;

PSIM是一个仿真PowerPC指令集的模拟器,目前只支持简单的命令行应用程序;

Copilot是一个PDA模拟器,它是由GregHewgill出于个人喜好编写的,它仿真的是M68KCPU,通过它可以给PalmOS的软件开发者提供一个模拟开发环境。

Bochs是一个仿真x86CPU的开源项目,目前还支持AMD64CPU,在它上面可以运行linux操作系统。

其它一些商业的仿真软件如vmware和virtualPC可以仿真一个真实的x86计算机,而VirtutechSimics仿真器可以仿真多种CPU和硬件,功能强大,可用于硬件和系统软件的评测。

1.3课题来源

广东省科技厅应用研究项目

1.4章节安排

本论文以嵌入式系统开发为出发点,研究和实现软件仿真器原型,引入计算机仿真、构件化等关键技术,研究微处理器软件仿真模型和软件仿真器体系结构。

第一章概述嵌入式系统开发方式,提出利用软件仿真器模拟目标硬件环境;

第二章分析典型嵌入式系统开发方式,提出纯软件仿真开发的设计需求,综述了相关的仿真技术、构件技术,探讨实现微处理器软件仿真器模型的可行性。

第三章对一种结构集软件仿真器和一种指令集软件发仿真器进行分析研究,同时提出了一种软件仿真器模型。

第四章分析了ARM处理器的体系结构和指令系统,用软件仿真器模型实现了一个ARM软件仿真器,阐述了其实现机理,并给出具体实现中的部分数据结构。

第五章对实现的ARM软件仿真器进行验证,分析验证结果。

第六章总结论文的工作,讨论了软件仿真器原型的特点和本课题的创新之处。

术语解释:

定义一仿真器:

是一种用以模拟程序在目标芯片上运行情况的工具。

定义二软件仿真器:

这类仿真器是以纯软件的形式来仿真程序在目标芯片上的运行。

在本文中特指微控制器的软件指令级模拟(simulator)。

第二章嵌入式系统软件仿真器的相关技术

2.1嵌入式系统

嵌入式系统是以应用为中心,以计算机技术、半导体技术、控制技术和通讯技术为基础,强调硬软件的协同性与整合性,软件与硬件可剪裁,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。

它是包括微处理器、定时器、序列发生器、控制器、存储器、传感器等一系列微电子芯片与器件,以及嵌入在ROM、RAM和/FLASH存储器中的微型操作系统、控制与应用软件来实现各种自动化处理任务的电子设备或装置。

2.2开发方式比较

嵌入式系统的开发就是软硬件协同开发的过程,可分为4个阶段:

功能规格描述与验证、软件/硬件分解、软件/硬件设计以及集成测试。

传统的开发方式是:

在系统软件/硬件功能分解后,开发人员分别独立进行软件与硬件的设计开发,软件完成编码后必须等待硬件原型制造出来才能在上面调试,进行整个系统的集成与测试。

由于软件与硬件设计是相互独立完成的,嵌入式系统行为模型的合理性、软件/硬件间接口的有效性等问题在集成测试阶段才能得以验证,早期设计阶段的问题这时才可能发现,严重的情况下还要重新调整软件/硬件功能分配,重复整个开发流程,浪费极大的人力物力。

利用仿真技术构造嵌入式开发平台是新的发展趋势,仿真开发可以给应用软件提供一个虚拟的运行环境。

下面将嵌入式系统传统开发方式和仿真开发方式作一个比较:

发现问题

从图中可看出,仿真开发可以先一步发现问题,软件的调试测试也不需要等待硬件原型的制造完成,在真实系统集成前就对设计思想进行验证,使设计中的错误在硬件实现前消除,两种方式在开发效率上的优劣显而易见。

2.3软件仿真技术

目前很多嵌入式开发平台提供在线仿真方式,采用这种开发方式在应用开发过程中仍需与硬件打交道,软/硬件间敏感的交互影响会产生大量的麻烦和进度的延误,很多不确定因素会引起错误。

而纯软件的仿真开发方式可进一步改善开发环境,避免硬件干扰,集中精力开发软件。

它是用计算机软件模拟实际硬件电路的运行,构建应用软件运行所需的虚拟硬件环境,提供嵌入式软件开发和调试的真正“软”平台。

现在一些硬件模型已经相当精确,软件仿真可以真实地反映实际电路的行为。

引入软件仿真开发相当于引入一种新的开发模式,为程序员提供了一个更便捷高效低成本的开发平台,在仿真平台开出的程序,具有较高的可移植性,一些成熟的通用程序可以作为专家库函数产品推向社会。

2.4构件技术

嵌入式系统主要特点之一是多样性。

设备生产厂商在芯片选择、功能定义、显示设备特性、耗电限制方面会有许多不同的要求,同时嵌入式系统应用广泛,嵌入式硬件平台必须满足应用实际要求,可灵活定制。

仿真目标硬件平台的仿真运行环境要覆盖不断变化的嵌入式硬件系统,需要选择具有良好可扩展性、开放性的技术方案,以较小的代价应对未来不断变化的需求。

因此,仿真运行环境的研究和实现必须借助于软件复用技术,同时可以充分利用已有的开发成果,消除在设计、编码、测试等方面的重复劳动,提高软件开发的效率;

通过复用高质量的已有的开发成果,也可避免重新开发可能引入的错误,以提高软件质量。

当前有两大软件复用方式:

面前对象和构件方式,两者区别在于:

●构件是设计的概念,与具体编程语言无关,不象OO中的对象属于编程中的概念,要依赖于具体的编程语言。

●在对构件操作时不允许直接操作构件中的数据,数据真正被封装了。

而对象的操作通过公共接口部分,这样数据是可能被访问操作的。

●从构件和对象的生成方式上,OO中的对象生成属于实例化的过程,比较单一,而生成构件的方式较多。

●在纯OO设计中,对象(类)、封装和继承三者缺一不可,但对构件可以没有继承性,只要实现封装即可。

因此,构件不是OO中的对象,而是与基于对象中的对象类似。

●OO中的对象对软件重用是通过继承实现的,构件对软件重用不仅可以通过继承还可以通过组装时的引用来实现。

比较发现,基于构件的软件开发模式更满足仿真运行环境的设计要求,多年来构件技术的发展也提供了必要的技术支持。

构件是可重用的,对外提供统一接口,既包括接口信息,还包括自身的功能实现体;

软件开发者或用户选择一些这样的构件,通过一些适当的方式组合起来构成一个仿真硬件平台[12,14],使它们在一个时间或空间相一致的环境中实现交互作用,协调运行,完成特定的仿真任务。

构件的组合运行涉及到集成方式和体系结构的研究,本章后面对此有专门阐述。

2.4.1构件概述

软件构件技术是近几年来迅速发展并受到高度重视的一门技术。

所谓构件(component)是指一组封装的、规范的、可重用的软件模块,它具有特定的功能,支持灵活的即插即用,可以方便地插入到网络、语言、应用、工具、操作系统中工作,是组织系统的基本单位。

构件是指应用系统中可以明确辨识的构成成分,而可复用构件是指具有相对独立的功能和可复用价值的构件。

从功能角度可将软件构件分为系统构件System、支撑构件Support和领域构件Demain。

系统构件为在整个构件集成环境和运行环境中都使用的构件,支撑构件为在构件集成环境与构件库管理系统中使用的构件,领域构件为专用领域开发的构件。

构件是一个动态的概念,运行时要占用内存空间。

构件有一个生命周期:

构件的创建,构件的运行和构件的消亡。

其中激活构件是通过事件来触发的,即构件是通过事件来驱动的,事件是指消息、过程调用和指令等。

构件的封装性有两层含义:

一层指数据和操作的封装;

另一层是指没有操作下的数据属性的封装,这一层的封装可以认为是数据和操作封装的一种特例,即操作为空的特殊封装。

象Ada的Package、Smalltalk-80的object、C++的class和数据类型都可属于构件范畴。

但是,操作集合、过程、函数即使可以重用也不能成为一个构件[10]。

由于构件的标准化特点,组装标准的构件来形成新软件很容易;

同时依据标准开发的构件也才可能大量被其它软件使用。

基于构件的软件开发技术也正是强调:

(1)构件的使用,开发新软件尽量通过重用已有的构件来实现;

(2)构件的生产,在新软件的开发过程如果必须要添加新代码,尽量把这部分代码按照标准做成构件的形式,方便以后重用。

构件技术的主要研究内容包括构件获取、构件模型、构件描述语言(CDL)、构件分类与检索、构件复合组装、标准化。

其中构件模型和构件描述语言是构件制作、检索和组装的基础。

由于构件的种类繁多,形态各异,因此很难建立一个能够描述所有类型构件而又支持制作和组装的构件模型。

一般来说特定的构件模型只能用于描述特定类型的构件。

2.4.2构件模型

构件模型是一种部件通用体系结构,旨在建立一套软部件形态标准与接口标准,而且可以用不同的语言来编写,同时为用户提供各种不同的函数功能。

设计初期建立参考模型构件,还需要花一定的时间构造参考模型库,但一旦模型库建好以后,用户就可以根据这些参考模型库来定制自己的构件,使用起来特别方便。

目前国际上较为流行的构件模型主要有:

3C模型、CORBA模型、COM/DCOM模型、EJB模型等。

3C模型是一个指导性的构件模型,认为对一个构件的描述应该包括概念(concept)、内容(content)和语境(context)三个不同方面的内容。

从构件组装的角度可以将构件分为源代码级构件和二进制代码级构件。

CORBA模型则是通过属性、功能接口和依赖关系三个部分来描述一个分布式二进制代码级构件,COM/DCOM模型和EJB模型与CORBA模型类似,侧重于实现分布式二进制代码级构件的复用。

真正意义上的基于构件的软件开发模式是在源码件或者比它更高层次的设计件、分析件的基础上进行的,而就目前的研究情况来看,支持源码级组装的构件模型并不多。

2.4.3构件设计

构件在概念设计阶段主要是定义构件接口和描述构件功能。

构件不仅要提供外部物理实现接口,还要提供一个外部逻辑接口,外部逻辑接口是给用户提供一个非形式化的该构件的功能描述,这样更能方便用户了解和使用构件。

深入、明确的刻划构件功能有利于构件的重用,而构件功能的描述,就是通过构件的外部逻辑接口提供给用户的。

构件的逻辑设计须在构件设计规范下进行,利用规范所提供的构件定义语言和构件操作语言来进行逻辑设计。

构件的逻辑设计阶段和物理设计阶段是分开的,这样可以使构件有不同的语言实现版本。

随着构件规范的标准化,今后构件的设计开发将由构件制造商来完成,这样不但减少了用户开发系统的周期,同时还会提高系统的质量和可靠性。

可以这样设计一个可复用构件:

在设计一个构件A时,从提高复用性的角度出发需要将其内部某些功能相对独立的部分抽象出来,作为另外一些构件。

假设某一功能独立部分抽象为构件B,则A中原来B所在的部分将被B的部分功能描述(注意不是B本身)所替代,这一部分就是A的协作构件。

之所以说是B的部分功能描述,是因为这些功能描述可能只包括B中A要用到的那些功能,而不是B的全部功能。

构件设计应遵循以下原则:

●构件应设计有很好的与语义有关的界面,界面构件要有标准。

●构件将代表一个抽象,有很高的内聚力,并提供一些所需的特定操作、属性、事件和方法接口。

●提高构件的复用程度,区分领域的可变与不可变部。

●构件系统要向下兼容。

●构件粒度大小、复杂度适中。

●易于原型演化。

2.4.4基于构件技术开发的现状

目前已有许多功能和性能都很好的硬件仿真环境存在,象MatLab、SIMULINK等,它们也使用了构件开发的概念[11],但它们有两个不足:

(1)抽象层次低。

它们主要是为了验证硬件电路的设计,侧重于在电路级、寄存器级层次对硬件环境的内部工作的物理机制进行仿真。

而通常硬件仿真环境目的是为软件开发服务,只要验证软件对硬件的控制是否正确就可以了,所以只需要从软件所控制的对象的外部逻辑级别上仿真一个硬件环境就足够了,也即是在器件级上进行功能仿真,如IC、外设级别;

(2)没有考虑与开发工具之间集成的问题。

基于构件的软件开发中比较流行的技术标准CORBA和COM是面向通用领域的,它们在系统层次上解决了软件的开放性和扩展性的问题,在解决专用领域中的问题时能力不足,但是它们提供了实现适合专用领域的构件标准的技术基础。

2.5事件驱动仿真算法

在软件仿真中人们通常采用基于事件驱动的仿真技术,可分为连续事件仿真和离散事件仿真,在一般情况下人们采用的是实现离散事件仿真的基本功能。

离散事件仿真有两种仿真类型:

单个事件仿真和多重事件仿真,仿真算法采用高效的事件推进法。

仿真过程可概括为:

(1)扫描存放当前等待的仿真事件列表,将最先发生的事件推进到活动对象列表;

(2)扫描活动对象列表,按模型流程图进行推进;

(3)推进仿真钟,处理相应的性能指标;

(4)显示仿真结果。

下图为其流程图,其中生成起始事件序列有三种方法可选择:

平均分布、随机分布和按统计样本生成[29]。

仿真初始化

事件驱动算法是一个同步仿真算法,对并发事件的处理是由一个中央控制时间机构来管理,把时间划分为一个个细小时隙t,且认为在一个t时隙之内发生的事件都是并行事件,只有在当前仿真时隙内的所有并行事件处理完毕,仿真时间才前进一个时隙,通过一个全局半有序的事件列表中存储事件,通常用首尾相连的循环堆栈来完成算法此部分的实现。

其中t即为仿真周期,一般较小[4]。

仿真过程中采用两个列表:

一个是事件时间列表,它临时记录事件和事件发生的时间,在这里不断地对事件按它发生的时间从小到大的顺序进行排序,以便知道当前哪个事件最先发生;

一个是活动对象列表,它记录当前的活动对象是谁,仿真算法是基于事件驱动的仿真钟推进算法,先将从用户界面输入的开始事件进行按时间从小到大的顺序进行排序,然后将开始事件直接推进活动对象列表,并且将仿真钟推进到最先发生事件的时间,再判断活动对象列表中的下属的对象为功能、事件、连线和规则。

如果是连线,判断连线的下属对象是功能、事件还是规则。

是事件,直接将事件推进到活动对象列表中。

以图表文字的形式输出是规则,判断规则的类型并进行相应的处理;

是功能,则计算相应的时间、成本、队列长度、占用率等技术指标,再将功能的执行时间=仿真钟的当前时间+功能的执行时间+等待时间,并且将功能推进到事件列表中,再重新对事件时间列表进行排序,然后不断地将事件时间列表中的最先发生的事件推进到活动对象列表中。

如果是功能,将功能的下属对象推进到活动对象列表中。

如果是规则,依据规则的类型进行相应的处理,并将规则推进到活动对象列表中。

依此循环,直到仿真结束,对仿真的结果进行分类和计算,统计相应的空闲时间、忙时间、成本、净增加价值和每个功能的成本、等待时间、处理时间以及队列长度、各个功能所增加的价值等一系列数据。

通过以上活动,对用户建立的流程模型进行动态仿真,计算性能等指标,为分析评价和辅助决策提供信息。

2.6逻辑仿真算法

逻辑仿真的基本过程是要反映和模拟信号进入逻辑网络的输入端,在逻辑网络内部变化和传播的全过程。

在仿真过程中,元件状态的每一次变化,都是一次求值的过程。

由于网络的复杂和信号流的并行性,如何经济有效的安排元件的求值顺序是逻辑模拟算法中的核心问题。

典型的是编排级数法和事件驱动法。

编排级数法是一种较早的算法。

算法思想:

首先针对各个元件编制各自的处理子程序。

逻辑仿真主程序则根据网络中各个元件的位置,依一定的顺序就每个元件调用一次与之相应的处理程序,各个元件进行顺序求值。

为安排各个元件的求值顺序,对每个元件设置一个级数,入口元件的级数为0,以后各个元件的级数等于其所有前级元件的最大值加上1。

在逻辑仿真主程序中,按照各个元件的级数调用相应的处理程序。

事件驱动法没有固定的元件求值顺序,而是建立起动态的事件队列。

在仿真过程中,根据信号演变传播过程中的实际情况,只选择输入信号有变化的元件或输出信号可能有变化的元件进行处理。

典型的事件驱动法有下一事件法和时轮法。

2.7本章小结

本章阐述了嵌入式软件开发的传统技术和基于构件的软件平台开发技术。

接着简述了构件技术在软件开发平台中的应用。

最后介绍了仿真开发中的两种算法思想。

第三章软件仿真器模型研究

仿真器是一种用以模拟程序在目标芯片上运行情况的工具。

它执行用户输入的源程序,芯片的设计者通过比较输出的结果和预期的结果可以得到目标芯片软硬件设计的反馈信息。

随着现代嵌入式系统的迅速发展,仿真器以其在较低的开发成本和较少的开发时间等方面的优势,在芯片的开发过程中越来越受到重视。

现在的仿真器主要可以分为两大类,一类是硬件仿真器(emulator),对这种仿真器,程序是在目标芯片上运行的,软件只是提供一个界面,以供用户了解程序运行的情况。

另一类是软件仿真器(simulator),这类仿真器是以纯软件的形式来仿真程序在目标芯片上的运行。

它因为不需要目标芯片及其任何配套硬件的支持,所以既可以降低成本,又可借助高级语言强大的表达力,在短时间内就可用纯软件实现与目标芯片相同的功能。

由于这些优点,它无论是对芯片的开发者还是使用者,都是一个必不可少的工具。

软件仿真器又可再细分为结构仿真器和指令集仿真器。

前者是对目标芯片的完全描述,它不但仿真了芯片的指令集和寄存器、存储器和中断处理机制等硬件装置,还仿真了芯片的流水级,因而可以对芯片的各项性能给出更详细的描述,当然它的开发也需要较长的时间。

指令集仿真器只是对指令运行的结果加以仿真,这样虽然减少了一些功能,但可以在更短的时间内完成它。

当前的指令集仿真器主要有两种,一种是解释型指令集仿真器,它将应用程序存入仿真的存储器中,在运行时逐条取出指令,识别它,然后再仿真运行,将结果存入仿真的寄存器或者存储器中。

它的主体通常是一个Switch语句,用大量的case语句来对应各种类型不同的指令。

另一种是编译型指令集仿真器,它先将应用程序反编译为高级语言文件(通常是C语言),然后再用GCC优化为宿主机的汇编语言,最后执行。

两类指令集仿真器各有优缺点,解释型指令集仿真器仿真速度比较慢,但它可以提供对应用程序的执行很方便的控制;

而编译型指令集仿真器由于对源程序进行了反编译后又进行了优化,己经丢失了原来的用户程序与高级语言的对应关系,因而只能将程序一次执行完毕,不能对它的执行提供如解释型指令集仿真器那样详细的控制。

但它由于在运行时不需要逐条的解释指令,因而可以有很高的仿真速度。

现在的对仿真器的研究工作大多集中在如何提高仿真器的仿真效率,如何用机器描述语言来使仿真器具有可重定目标性等等。

本章给出一个结构仿真器的分析和一个指令集仿真器的分析。

3.1结构仿真器分析

结构仿真器是仿真芯片真实的物理结构的仿真器,它不仅仿真了芯片的寄存器和存储器,而且还仿真了芯片的cache结构、跳转指令预测和乱序执行等。

因而它不仅能给出指令执行的效果,而且还能够给出指令在流水级中运行的过程,对于芯片的开发有非常大的借鉴意义。

SimpleScalar工具集是一套用以分析程序性能、建立芯片的微结构模型和对软硬件协同设计进行验证的工具。

它在研究和教学中被广泛地使用。

2000年,世界顶级的计算机会议的论文中,有超过三分之一的论文使用了该工具来评估其设计方案。

这套工具由编译器、汇编器、链接器和仿真器组成。

它既能够对用户代码进行指令级上的仿真,又能够进行内部流水级上的仿真。

SimpleScalar仿真器能够对用户的程序进行7种不同层次上的仿真。

如表3-1:

仿真器

描述

sim-fast

简单的指令集仿真器

sim-safe

速度优化的指令集仿真器

sim-profile

带报告信息的指令集仿真器

sim-cache

多级存储器的指令集仿真器

sim-cheetah

带cache的指令集仿真器

sim-bp

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 计算机硬件及网络

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1