更新时间:2023-12-24 21:39
仿真器(emulator)以某一系统复现另一系统的功能。与计算机模拟系统(Computer Simulation)的区别在于,仿真器致力于模仿系统的外在表现、行为,而不是模拟系统的抽象模型。请参阅仿真和模拟词条。
仿真器可以替代你的目标系统中的MCU,仿真其运行。 仿真器运行起来和实际的目标处理器一样,但是增加了其它功能,使你能够通过桌面计算机或其它调试界面来观察MCU中的程序和数据,并控制MCU的运行。随着IC和软件集成平台的飞速发展,仿真器也不断赋予新的内容和新的挑战,因为它的发展必须与CPU同步,要想在总线速度为150Mhz 64bit的情况下实现TRACE已经成为不可能。
由于仿真器属于一种高科技含量的开发工具,其实现的方式比较复杂。
1).商用CPU这是一种最简单的实现方式,直接采用最普通的商用CPU去设计仿真器。一般来说,CPU都有一些资源,如非屏蔽中断,NMI,TRAP指令,Ready信号等等。在用商用CPU去设计仿真器时,基本上都会采用这些指令式信号,以达到单步Step,全速运行Go,断点Breakpoint的功能。用商用CPU去设计仿真器,一般来说其CPU的速度不能很快,
如像8051,196等是可以采用这种方式的。若CPU的速度很快,则无法去实现。因为仿真器要在CPU的地址,数据总线上截取或插入某些资讯。CPU的速度太快,则根本无法在时序上去做截取或插入资讯的动作。用商用CPU去做仿真CPU,一般来说会碰到I/O管脚重整的困难,就像最简单的8051或83C196,其A/D总线都可复用成I/O。而仿真器是要提供所有有关CPU的资料给用户。所以,实际上CPU是以地址/数据总线的方式在运行。如用户的设计是用I/O方式的话,仿真器就一定要重新整合一套I/O线路出来。这一点是最麻烦的地方,往往有些简单的仿真器就不能做到这一点。
.2)采用特殊的仿真模式有的商用CPU会提供一些特殊的仿真模式,其CPU还是采用商用CPU。但当CPU在上电或复位时,如果在CPU的某些管脚上灌一些特殊的电平或序列,则CPU就会进入一种特殊的仿真模式,如Philips的8051CPU,就是有一种叫“Hooks”的模式。进入这种模式之后,CPU会在地址数据总线上分时地提供一些用于I/O重建的信息。有了这种特殊的仿真模式,仿真器进行I/O重建相对来说比较简单一些,但往往会存在着一些时序方面的问题。毕竟进入仿真模式之后的CPU的时序与普通CPU是有所不同的。如果用户的设计非常苛刻的话,有时会存在连不上目标板的问题,并且,这时的CPU在跑很高的时钟频率会遇到困难。
3.)使用专用仿真CPU–BondoutSilicon一般来说,当CPU的速度很快时,往往就需要专用的仿真CPU了。这时仿真器在控制方面,相对来说设计起来就比较简单。但此时仿真器的性能,已在很大程度上取决于仿真CPU了。仿真CPU设计得好,则相对来说仿真器的功能及稳定度都会比较好。但是,由于仿真CPU是一款专用的CPU,对于芯片厂商来说生产的数量非常少,往往其测试程度不会很高,专用的仿真CPU或多或少都会有些问题,就像目前国内仿真器普遍采用的W78958仿真CPU。这是Winbond为8051做的一种仿真CPU,其在中断,I/O的驱动能力等存在着问题。
4).利用BDM,JTAG方式当CPU越来越复杂,速度越变越快时,以上方式都已不能满足要求了。像PowerPC或Pentium,其内部有MMU,Cache,并且可乱序执行,以往传统的总线方式都不可行了。JTAG的提出,最初是给测试用的,主要目的是为了测试器件是否焊好,是否存在短路或断路。后来,一些CPU的厂商把这一概念引进到了用于CPU内部。把JTAG的移位寄存器全部连到CPU内部的控制状态寄存器,并增加一些仿真器专用的寄存器,如控制Memory的读写等。这时,仿真器在硬件上面已变得很简单了,用户设计目标板时,只要把几个控制管脚电平设计正确,就可以实现在线实时控制。目前,32位元以上的CPU普遍支
持这种调试方式。5.ROM-Monitor绝大多数CPU厂商在新推出他的新一代CPU的同时,会相应的推出他的参考设计原型,这就是大家所熟知的ADS开发板,配上第三方的集成开发环境,就可以实现对相应CPU的软件开发,这就是ROM-Monitor仿真器的实现构成。
单片机仿真器是一种在电子产品开发阶段代替单片机芯片进行软硬件调试的开发工具。配合集成开发环境使用仿真器可以对单片机程序进行单步跟踪调试,也可以使用断点、全速等调试手段,并可观察各种变量、RAM及寄存器的实时数据,跟踪程序的执行情况。同时还可以对硬件电路进行实时的调试。利用单片机仿真器可以迅速找到并排除程序中的逻辑错误,大大缩短单片机开发的周期。在现场只利用烧录器反复烧写单片机,通过肉眼观察结果进行开发的方法大大增加了调试的难度,延长了整个开发周期,并且不容易发现程序中许多隐含的错误,特别对于单片机开发经验不丰富的初学者来说更加困难,由此可见,单片机仿真器单片机系统开发中发挥着重要的作用。
1).执行断点(Exebreakpoint)这是最普通的一个断点,所有的仿真器都必须有,其实现方式二种。一种是硬件断点,一般来说是用硬件的比较器去做的;另一种是软件断点,如用TRAP指令。评价执行断点的标准点:当用户在调试用户板EPROM中的程序时,还能不能设断点,往往一些低档的仿真器是做不到这一点的。
2).总线断点(Busbreakpoint)光有执行断点是不够满足实际需求的,总线断点是一个地址断点,若用户的系统需要调数据总线,或中断,定时器/记数器,并且要实时调试时,这时候就需要有总线断点。总线断点可以设定为地址总线,数据总线,CPU的一些状态。当这时设定匹配时,让CPU停下来,所以,这样的仿真器的功能就比较强大,很容易找问题,但是在实现这些功能时,所用到的硬件设计就要复杂得多了。
3).寄存器断点(RegisterBreakpoint)这种断点往往需要CPU能支持这功能。CPU内部要有一个比较器,当所设定的CPU的值与之匹配时,仿真器就停下来。像PowerPC是可以做到这一点的。
4).事件(Event)以上所说的总线断点,可以看成是事件的一种要素。事件可以是某些CPU的信息的组合,也可以是外部的触发输入,并且可以有逻辑的组合,时序上分先后顺序,具有记数功能等等。这种事件功能,在一些高档的仿真器中是一种最基本的功能。
5).触发(Trigger)事件的最终目的是产生触发,这种触发不见得要让CPU马上停下来,往往用户在调试时,有可能是想看当设定的条件满足要求之后的几个CPUCycle时的CPU情况。所以,触发要满足这方面的需求,并且触发最好能和追踪存储器配合使用。
6).追踪存储器(TraceMemory)追踪存储器就像是一台摄像机,在CPU全速运行时,能抓取CPU的一些信息,如地址/数据总线,CPU的状态,I/O管脚情况。所以,追踪存储器就必须要有一定的宽度与深度,很快就爆满的追踪存储器就不存在什么意义。目前,大多数人都是在以C,C++的方式写程序,对于追踪存储器中抓下来的数据,就必须要能翻译或链接到相应的C代码才有意义。
7).追踪过滤(Qualify)若是只有追踪存储器,没有追踪过滤,这样的追踪存储器是没有什么用处的!为什么这么说呢:追踪存储器就像以上说的是一台摄像机。用户总不可能去摄像时,一出家门就开始不作任何刷选地去摄像。往往大家只有感兴趣的景点才作摄像。所以,在使用追踪存储器时,一定要有一个硬件上的过滤,只挑选有用的信息才存下来,这样才不会导致追踪存储器爆满。当然,对于已追踪记录下来的数据,最好是还有一个软件过滤的动作,就像是电影的再剪辑。有些仿真器号称提供追踪或“逻辑分析仪”功能,但没有硬件过滤。用户程序停下来之后,追踪存储器中往往是大量的无用信息,真正有用的数据可能反而被覆盖了。
8).软件性能分析(SPA)大家在开始一个项目时,往往在项目刚开始时,追求的是功能,而到了一定时候,就要开始追求性能,这时,往往需要作程序代码的优化动作。但是,总不可能把整个用户程序从头到尾全部优化一次,这是非常没有效率的。有了软件性能分析,就可以分析出那些代码在整个系统的运行过程中占的时间百分比比较高,则在优化时,就只需要针对这一部分去优化就行了,这样的效率才能最高。
9).代码覆盖率分析(CodeCoverage)代码覆盖率分析能帮助用户分析出用户的那些代码是废代码。现在,用户系统越来越大,往往一个项目不是一个人开发的,或者花了好多时间才开发完,往往会存在着大量的废代码,在系统的运行过程中,根本就没有被调用过,但有时又不敢轻易地把它删除。有了代码覆盖率分析的功能,就很容易地分析出那些是废代码,可以放心地删除了。
10).时间节拍(TimeStamp)在一些高档的CPU,如486,Pentium,内部都已有MMU,Cache等,用户已根本无法按CPU时钟及cycle来算出到每一条指令的执行时间了,有时误差会有好几倍的出入。这时,有了时间节拍的功能,用户就能很清楚地知道到每一条指令的执行时间了。时间节拍器记录是在追踪存储器中的,如果要保证记录足够长的时间和足够的精度,需要大量的存储器。
11).仿真存储器(EmulationMemory)仿真存储器,也是仿真器的一个最基本的功能。对于窄地址空间的CPU,要看它是否能提供全空间的仿真存储器,对于宽地址空间的CPU,要看它能提供多少深度,并且是否能与编译器的Linker/Locater配合随意搬移使用。评价一个仿真器的仿真存储器,还要看它是否一点都不占用用户空间,能否读到用户板EPROM中的程序,能否帮用户反汇编并存成文件,能否接在用户板EPROM上调试。
12).仿真存储器块扩展(BankSwitch)一些窄地址空间的CPU,就像8051,其程序空间只有64K,往往有的用户会觉得不够用,如要存放一些语音,图像数据到EPROM中,这时候,就需要有块扩展功能。往往一些编译器能支持块扩展功能,像Keil的C51编译器。这时,最好仿真器也与一起支持,这样,用户在使用时就根本不需要再去考虑是否能平稳地做到块切换,全局变量与局部变量的问题。
13).内存映射(MAP)一般来说,仿真器都会提供内部与外部内存映射。但其实,好的仿真器还能做更复杂的属性,如警式(Guard),只读(Read-Only)等等。像这种属性是非常有用的。像Guard,它的意思是对于不存在的空间,用户可以设定成Guard。这样,当程序一旦跑飞进入这空间之后,CPU就马上停下来。配合上追踪功能,用户能很快定位出程序是从哪儿跑飞的,原因是什么,有可能是push/pop少写了一个,或者干扰因素等。
14).内存飞速(Memoryon-the-fly),追踪飞速(Traceon-the-fly)在某些场合,如PWM调试马达,马达是用PWM的占空比来作马达速度的控制,有可能CPU不能停下来,一旦CPU停下来,PWM保持高电平。这样,马达就要飞转起来。所以,CPU不能停。这时候,用户有可能想看仿真存储器中及追踪存储器中的资料,就需要仿真器能支持这方面的功能。这时候有一点非常重要,不能是偷偷地把仿真CPU停下来,读一下之后再让CPU跑起来。这样做就是假的,不存在任何意义,可以采用双端口RAM或者采用影子内存的方式(类似Cache)。
15).支持的工具链(ToolChains)一个好的仿真器,应能支持众多的编译器,就像51,做编译器的厂商就非常多,如Keil,2500AD,BSOTasking,PLM等。不能要求用户买了这台仿真器之后,指定用户只能用某一家的编译器,而让用户去重新熟悉一套编译器的环境。
16).协议软件的支持(SupportProtocolS/W)目前,用户的系统都越来越复杂,像USB,PCMCIA1394,LCD,Ethernet等,就需要相应的协议,如TCP/IP协议,有许多专业写这方面协议软件的公司,如Interniche等。一个好的开发系统,最好能直接支持第三方写好的协议软件。
17).支持实时操作系统(SupportRTOS)操作系统很多,特别是在嵌入式系统中,如VxWorks,ThreadX,Linux等。如是一个开发系统不能支持用户购买的操作系统的话,那么那些操作系统就成了一堆废代码,根本就不能调试。
开发系统要帮用户显示出哪些Task在运行,哪些Task被挂起,挂起的原因是因为Semaphore,Eventflag等,还要帮用户显示出Mailbox,messagequeue和memorypool等系统定义的结构。最佳的开发系统更要支持多项目和多CPU的环境。
仿真器的生产在国内有十多年的历史其中使用的技术根据时间和性能的不同大约分成以下几种:
(1) 仿真开发系统
这种技术主要在仿真器的初级阶段使用。由于当时没有好的仿真技术或仿真芯片,仿真器设计成了一个双平台的系统,并根据用户的要求在监控系统和用户系统中切换。这种仿真系统性能完全依赖于设计者的水平。实际的最终性能厂家之间相差很大。不过总的说来需要占用一定的用户资源并且设计复杂,现在基本上已经淘汰,只是使用在一些开发学习系统中。
(2) Bondout技术
一般来说人们常常说的专用仿真芯片其实就是Bondout。这种仿真芯片一般也是一种单片机。但是内部具有特殊的配合仿真的时序。当进入仿真状态后,可以冻结内部的时序运行,可以查看/修改在静止时单片机内部的资源 。 使用Bondout制作的仿真器一般具有时序运行准确(也有例外)。设计制作成本低等优点: Bondout芯片一般是由单片机生产厂家提供的。因此它只能仿真该厂商指定的单片机,仿真的品种很少 。
(3) HOOKS技术
HOOKS是PHILIPS拥有的一项仿真技术。主要解决不同品种单片机的仿真问题。使用该专利技术就可以仿真所有具有HOOKS特性的单片机。即使该单片机是不同厂家制造的 ,使用HOOKS技术制造的仿真器可以兼容仿真不同厂家的多种单片机,而且仿真的电气性能非常接近于真实的单片机。 但是HOOKS技术对仿真器的制造厂家的技术要求特别高 。不同的仿真器生产厂家同时得到HOOKS技术的授权。 但是设计的仿真器的性能差别很大 。即使到了今天也不是每个仿真器厂家都能生产HOOKS仿真器。即使生产出来性能也差异很大,用户应仔细区别 。
(4) 内嵌仿真功能的芯片
随着芯片技术的发展,很多单片机生产厂商在芯片内部增加了仿真功能一般通过JTAG接口进行控制。为了降低成本和增加可靠性,内嵌的仿真部分一般功能比较简单。 根据当前的发展趋势,如果只仿真标准的MCS-51系列单片机可以选用Bondout技术的仿真器。如果 用户希望仿真器功能更多更灵活的诸如增强型80C51系列单片机的话,那么必须选用HOOKS技术仿真器。二者比较而言采用HOOKS技术的仿真器性价比要高于Bondout技术 。
软件仿真器:这种方法主要是使用计算机软件来模拟运行,实际的单片机运行因此仿真与硬件无关的系统具有一定的优点。用户不需要搭建硬件电路就可以对程序进行验证,特别适合于偏重算法的程序。软件仿真的缺点是无法完全仿真与硬件相关的部分,因此最终还要通过硬件仿真来完成最终的设计。
硬件仿真器:使用附加的硬件来替代用户系统的单片机并完成单片机全部或大部分的功能。使用了附加硬件后用户就可以对程序的运行进行控制,例如单步,全速,
查看资源断点等。硬件仿真是开发过程中所必须的。