仿真器概念及实现技术Word格式.docx
- 文档编号:20698124
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:5
- 大小:20.57KB
仿真器概念及实现技术Word格式.docx
《仿真器概念及实现技术Word格式.docx》由会员分享,可在线阅读,更多相关《仿真器概念及实现技术Word格式.docx(5页珍藏版)》请在冰豆网上搜索。
因为仿真器要在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仿真器的实现构成。
如Motorola的DragonBallEZ/VZ328CPU的开发就是一例,需要MC68EZ/VZ328ADS板,集成开发环境CodeWarriorfor68k,Monitor-MetroTRK协议--建立MC68EZ/VZ328ADS和调试器CodeWarrior之间通讯的协议。
这就可以实现源程序调试的功能。
如用户设计自己的目标板,只需修改MetroTRK原码协议即可。
二.仿真器的功能概念
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的环境。
三.总结
目前市场上各种仿真器,开发系统的种类非常多,支持的CPU种类也非常丰富,从Intel的8051到PentiumIII,从Motorola的68HC05到PowerPC,还有一些像ARM,MIPS等等。
用户在选购时,最关键的一点是要看这个公司是否有后续的开发实力,能提供一套完整的解决方案,如硬件的调试仿真器,软件的调试平台,编译器的支持,实时操作系统的支持,多种评估板的支持等等。
仿真器及开发系统是一种仪器,有句话说得好“工欲善其事,必先利其器”。
注:
以上的一些概念是参照MICETEK祥宝科技有限公司的仿真器及开发系统而写的。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 仿真器 概念 实现 技术