第28卷第2A期1998年3月东南大学学报JOffALOFSOUTHEASTUNIvERSYv0I.28Ma】No.2A1998(上海中晶电脑有限套司,上海200233)摘要电子技术的日渐发展,需要研究开发在最短的时问设计出产品.在设计嵌入式操作系统时,使用一个好的仿真嚣,或许能大丈减短研制时闻.本文主要从仿真嚣的硬件设计角度出发,介绍赋CPU仿真器的设计.V关键词仿真器;汗发系统目前,国内及美国微处理器开发系统(仿真器)的种类相当多,国内的仿真器基本上是以8052,8096为主的8位CPU仿真器,品牌也有好几家,但若以性能上来讲,与美国的产品相比,还是有较大的距离.做得比较好的美国仿真器厂商有MICROTEK,I-IP等.他们的仿真器基本上是以中、高档的为主,有8位元、16位元、32位元.如何评价一个仿真器的性能,一般以下述功能作为评价的根据:(1)是否占用用户的资源.(2)是否是实时操作.(3)扩展性能,即能够支持多种不同的CPU,或一系列CPU.(4)执行断点的多少,是否有综合逻辑断点(Event/Trigger).(5)是否有实时跟踪储存功能.(6)仿真存储器影射到用户目标板以后,是否能够做step、Halt等操作.(7)仿真器的速率.(8)软件界面的友好程度,如用windows.(9)能否支持多种语言,如ASM、C等,以及多个编译器厂家的编译器,如2500AD,MRl,BSO,IAR,FRANKLIN等.(10)能否做到源程序调试(SoreeLevelDebug).(11)是否有软件性能剖析及代码覆盖剖析一些好的仿真器具备以上功能.用户在使用一个好的仿真器在开发其产品时,能大大缩知产品开发周期,减少研制的时间.以下以MICROTEK的EasyPack8052F为例,详述一些较好的仿真器的硬件实现,对国外的一些设计仿真器的厂商会有些帮助.1硬件的主体构架目前,仿真器在硬件大构架上分为两类:单CPU构架及双CPU构架+一般来说,单CPU昀290东南大学学报第28卷仿真器,其优点是硬件简单,价格较低,一般在人民币1000~3000元左右,甚至不到101X)元.但其缺点也是相当严重的,由于单CPU既要做仿真用户的程序,又要做控制(如与主机的通讯、仿真存储器的切换、断点的控制等),所以必然要占用许多用户的资源(如一部分的仿真空间、堆栈、中断),并且,不可能是实时操作,也不可能用一种硬件去支持多种不同的CPtl(f【口INTEL、MOTOROLA、ZILOG).这种仿真器,也更难以做到一些其它更复杂的功能,如综台逻辑断点、实时跟踪记忆.且仿真存储器影射到用户目标板以后,只能c0,不能做Step等,也;liq能:芰持一些源文件调试等.双CPU构架的仿真器,一般都为中、高档仿真器.其硬件设计相当复杂其中一个为控制CPU(ControlCPU),另一个为仿真CPU(EmuladonCPU),仿真CPU的工作单一,就是执行用户的程序,其它都由控制CPU去做,如与主机的通讯、如何去做断点、Step等.由控制c王.U实现硬件控制电路的操作,从而达到对仿真CPU的控制.它的优点是不会占用用户的资源,且肯定是实时仿真.这种设计还有一个优点,只要更换不同的仿真CPU的仿真模块,就能达到仿真不同cPu的目标,如8n51、8088、8086、ZSO、68HClI、6502,68000等等.象M1(2ROTEK的EasyPack/E8052F仿真器,是双CPU构架的中档性能的仿真器,它用一颗8032的CPU作仿真CPU,一颗8031作控制CPU.仿真CPU仍然在实时地工作,要么跑用户的程序,要么执行控制CPU硬件给出的控制代码,它不去做任何控制,而所有的硬件控制都由控制CPU及相应的控制电路去实现,控制CPU在这儿饰演的角色为接收用户给出的命令,然后启动相应的控制电路,如设嚣断点、仿真存储器影射、启动仿真CPU做Step,Go,Halt,读取CPU内部寄存器和仿真存储器内容等,从而使仿真CPU动作.其它的硬件,都基本上为旁观者的角度,如跟踪存储器,只是实时地把总线上出现的数据存到一个RAM中去.以下详尽介绍一下双CPU仿真器是怎样实现控制的.2Halt的功能及实现Halt即是使仿真CPU在运行(freerllla)时能停下来,这只是一个基本的功能,但常常有些低档的仿真器就很难做到,特别是一些单CPU的仿真器.当8052CPU在运行用户的程序时,有一个Halt命令,就须要将CPU从运行用户的程序最终转换到JUNIP¥的指令.过就须要有一个仿真存储器切换过程.但是,这种切换是要等当前的指令执行完后才可进行,若遇到一些指令如LCALI,,当CPU剐把HLL的执行代码读进去,后面跟随的地址码还没有读完就切换的话,会导致程序的混乱.所以一些低档的仿真器就不具有该功能.也就难以做到触发等实时操作.M[CROTEK的EasyPack8052F运用了许多硬件的技术解决了这一问题.用户可以在任何时刻将仿真CPU停下来.其实现方式如下.CPU从reset开始,就不停地从存储器中抓取指令并执行.有些指令是单字节,有些指令是双字节或三字节.我们需在硬件上算出当前的机器周期是一条指令的开始(抓操作码c帕.code),还是在一条指令的中间.只有在一条指令的开始(抓操作码印一code)时,才能将仿真gPU从执行用户的程序切到内部的控制程序并在控制程序结束后将CPU从执行内部的控制程序切到JUmP¥的操作,可见形成指令起始讯号:SYNC(当前的机器周期是一条指令的开始)这々、徐曙清:微处理器开发系统(仿真器)设计构架讯号是}目当重要的3执行断点(ExecutionBreakpoint)的实现及意义执行断点是指当仿真CPU执行到所设断点的地址时,仿真CPU即马上停下舞.一般来说,一台仿真器必须要有执行断点.但是,不同构架的硬件,执行断点的性能就相差很赶.殛‘于一些CPU,如80C196,由于其有TRAP指令,在做执行断点时比较好做,j:要使CPU执行到这个地址时,塞进一个TRAP指令,然后再做其它一些控制就行了.但是,不fri的仿真器有不同的做法,有的是用更改用户的程序代码来塞这个TRAP指令,这会导致当仿1..有:储器在影射到目标板EPROM时,由于难以更改EPROM中的代码,导致不能做执行断点的身能更差的做法是用单步走,非实时的方法去做.走一步单步,然后瞧瞧是否到了这个地址,r|i决定是否停'F来.这种做法的缺点就相当显著了.由于非实时操作,在调试定时器/{十数器、c,断等实时酗功能时,很可能会导致不可估量的事情发生.好的仿真器,在做这些CPU时,就一须考虑到这些问题.还有一些CPU,例如8051系列,它没有TRAP等类似的指令,这在硬件上实现就更复杂rMIcRtYrEK的EasyPack8052F是运用以下方式去做的:用一块RAM(BreakcPU的AddressBus,当仿真CPU的AddressBus遇到所设的Breakpoint时,在Breml,RAM的D“f Bus』‘输出一个讯号告诉硬件须将仿真CPU停下来.这样的做法能做到全空江执行断点,I 8052能达到64K个的执行断点,如可下以下命令:>Breakpoint P:5555. 4综合断点的实现及意义(Event,Level。
Trigger) 苫调试时,想让程序执行某个地址:的指令100次以后,再执行另一个地址:Tl的指。 时,仿真cPU才停下来.对于这些情况,若仿真器仅有断点的话,用户就必须在‘0一址设上一T 段点,下一个“co”的命令,等CPU停下来以后,再下一个“Go”的命令,如此重复I 30次后,将i_l_) 处的断点清掉,再在TI处设上一个段点,再“G0”可见调试之困难.而且这些调试方式是诈实时 的.综合断点(事件:Event)是指具有一定的逻辑组台功能的断点.这种断点(事f})的没援可以 是地址总线、数据总线或状态讯号(程序代码读取、数据读/写、中断响应等).逻辑组合应是}: 种逻辑关系(多少次(Counter)、与(And)、或(Or)、非(Nor)等),层次(Level)是指列已设的风波寸 作一定的逻辑组台,如或(Or),然后(Then)等.触发(Triggcr):是指对于已设的事悄及臣次满足条 件删,提供内部或外部触发讯号,如启动CPU立刻停下来,或再运行一些CPU(YCIE再停,战 提倒一个讯号给外设用,如逻辑分析仪,记忆示渡器等.对于这些综合断点实现,硬件构架的T、 同,整个性能的差别也就相当的大.是否实时操作是评价这一功能的关键.或i1,有些仿真鞘, 表面上看也有一些类似的功能,但都是通过非实时的调试去做的.它是借助执’j断点的方法, 用软件去实现,也就是说,在这些地方设上断点,然后借助执行断点的方法,执ri到哪个地.,J, 使仿真CPU停下来,然后用软件去判定所设条件是否创立,决定是否再继续做F.妾,这种非实 时舯方法所存在的问题就相当显著,且非CPU的真实执行情况.而一些仿真器.全部都是片:|硬 件的形式实时地去做.象MICROTEK的EasyPack.当然,这样做在硬件的i殳计P硅相当复杂的. 要保证实时地去做即不能破坏仿真CPU真实的执行流程.以下介绍MICROll_l=K的Easv hr.k 805’2F的操作. 292 东南太学学报 第28卷 一种RAM用于比较Address Bus的风波(Address Event Compare RAM),另一个F:AM用于比 较Data Bus的风波(Data Event Compare),一个RAM用于比较状态(PIo乎mRead、DaLtRead、L呻1 wdte、InterruptAck…)的风波(Status EventComtm RAM).还有一些计数器(Couaater)用于风波的 计数.层次(1evel)是将风波作逻辑操作(And、Or、Not…),触发(1砘斟)是选个别层次(Level) 辑关系作触发条件(Or、Then…).最终将仿真CPU停下来. 通过以上简介可以看出这些做法是绝对不会占用用户资源的.我们在调试时伟 >Evl Address saga Data Ox55 Status Write Counter 10 >Ev2 Address 1234. >Lvl Evl Ev2>Trigger Lvl delay 20 以上的命令意义为:事件1设定为CPU对地址aaaa的地方写数据0x55写了10次.事件2 设定为CPU的地址总线上出现1234的值.当风波1的条件满足后再满足风波2的条件,a砌 再运行20个CPu CYCLE后停下来. 5实时逻辑跟踪功能的实现(Trace) 实时逻辑跟踪(Trace)是指当仿真CPU在运行(缸em)时,一些硬件电路从旁观耆的角度, 将CPU每一个机器周期一些信息抓下来,有地址总线上的值、数据总线上的值、状态信息(程 序读取、数据读/写、中断响应等),并存在实时逻辑跟踪存储器中.当仿真CPU停下:采后,就可 以见到这种信息,从中可知仿真CPU的程序流程的中间过程. 有了这个功能,对于调试程序就相当便捷,只要让CPU Go一次以后停下来,分杪:跟踪储存 器中的信息,就基本上能找出程序执行时问题所在,不必再用Step命令去调试,特别是对于一 些定时器/计数器、中断、RS232等,用Step来找问题是相当困难的. 实时逻辑跟踪再配合硬件过滤(Q础fy)和软件过滤(Filter),调试就更方便r.硬件过滤是 指用户指定条件满足时,跟踪存储器中才把那种机器周期的信息存上去;而软件过滤是指j{显 示已存人跟踪存储器里的用户指定的这些条件满足的信息,这个功能的益处:例如当Ej标板与 主机用RS232通讯时,想知道CPU在正常运行时,主机送了如下命令 switch co“lrnd case eommandl: 函数1; break; case comrusnd2; 函数2; break; case c(】I】zmaand3; 函数3; break;