第一章 为什么要使用仿真器?
1.1 仿真的概念
仿真的概念其实使用非常广,最终的含义就是使用可控的手段来模仿真实的情况。
在嵌入式系统的设计中,仿真应用的范围主要集中在对程序的仿真上。例如,在单片机的开发过程中,程序的设计是最为重要的但也是难度最大的。一种最简单和原始的开发流程是:编写程序-烧写芯片-验证功能,这种方法对于简单的小系统是可以对付的,但在大系统中使用这种方法则是完全不可能的。
1.2 仿真的种类
软件仿真:这种方法主要是使用计算机软件来模拟运行实际的单片机运行,因此仿真与硬件无关的系统具有一定的优点。用户不需要搭建硬件电路就可以对程序进行验证,特别适合于偏重算法的程序。软件仿真的缺点是无法完全仿真与硬件相关的部分,因此最终还要通过硬件仿真来完成最终的设计。
硬件仿真:使用附加的硬件来替代用户系统的单片机并完成单片机全部或大部分的功能,使用了附加硬件后用户就可以对程序的运行进行控制,例如单步,全速,查看资源,断点等。硬件仿真是开发过程中所必须的。
1.3 为什么要使用仿真器?
在与一些有经验的工程师交谈中,我们会发现有相当一部分工程师在开发中不使用或很少仿真器。向他们询问原因,得到的回答是“仿真器不可靠”。但是他们是如何解决程序开发中遇到的问题呢?通过深入的交流才明他们是照这样的方法来开发程序的:
(1) 根据自己的设计建立一个符合要求的硬件平台,如果该平台涉及的程序比较复杂,还要搭建一个人机交流的通道。人机交流通道可能是一个简单的发光二极管,蜂鸣器,复杂的可能是串口通讯口,LCD显示屏。
(2) 写一个最简单的程序,例如只是将发光二极管连续的闪烁。程序编译后烧写到单片机芯片中,验证硬件平台是否工作正常。
(3) 硬件平台正常工作后编写系统最低层的驱动程序,每次程序更改后都重新烧写单片机芯片验证。如果在程序验证中遇到问题,则可能在程序中加入一些调试手段,例如通过串口发送一些信息到PC 端的超级终端上,用于了解程序的运行情况。
(4) 系统低层驱动程序完成后再编写用户框架程序,由于这部分已经不涉及到硬件部分,所以程序中的问题用户一般能够发现。
但是更多的调查表明,使用以上方法的工程师总的看来所设计的程序不是很庞大或很复杂。因为在做简单的项目时,我们可以通过一个发光二极管就可以表达出内部的信息;如果程序复杂,可能需要更多的信息来表示内部的状态,这样可能就需要串口协助调试;如果程序更复杂,硬件更多,实时性更强,那工程师就要更多的增强调试手段,串口可能就不能满足了,需要类似于断点的功能,因为我想知道在某一个时刻单片机内部的状态究竟是怎样?
如果用户程序的修改非常频繁,可能一次又一次地的烧写芯片占用的时间就很多,这时用户就会想能下载程序并运行的装置。到这里,您会看到,随着用户要求的越来越高,调试装置已经越来越象一个通用的仿真器了。因此我们的建议是:不要回避使用仿真器,因为使用仿真器能提高您的开发速度。
但是不能否认的是,用户回避使用仿真器也是有原因的。因为仿真器也是一种电子装置,非常依赖于设计者的水平。如果一个仿真器设计者的水平有欠缺,那将给仿真器的使用者带来很大的问题,因为仿真器的使用者将分不清楚究竟是程序的问题还是出在那里。随着电子设备的复杂化,设计工程师面临前所未有的压力。您可以想象,用户发现了程序中有一个问题,首先怀疑是自己系统中的问题,可能是软件方面也可能是硬件方面。因为用户系统处于开发阶段,用户基本上不会怀疑仿真器。在这种情况下,用户将耗费很大的精力在自己的系统中寻找并不存在的问题。如果用户最终发现问题来源于仿真器,并通过烧写芯片验证确实如此,那这个仿真器用户以后可能会逐渐放弃使用仿真器。
用户放弃使用仿真器,对用户的影响是巨大的。因为放弃使用一个设计不完善的仿真器,也放弃了 使用其它设计完善的仿真器,关键是放弃了合理的开发方法。因此我们的建议是:不要回避使用仿真器,但要挑选好的仿真器。
1.4仿真器的附加服务更加重要
在购买仿真器的同时,还要注意仿真器厂家的服务,这一点很关键。这里说的服务包含仿真器本身的服务,例如仿真器使用上的指导服务,仿真器的维修服务。这些都是一个产品的最基本的服务,对于仿真器这种特殊产品来将还不是全部的服务。
使用仿真器来开发产品,会遇到很多问题:产品本身的问题,仿真器的问题,仿真器和用户系统的问题。如果用户开发经验不是很丰富,他并不能排除遇到的问题究竟来源于哪个方面。这时,他可能求助于仿真器生产厂商。如果仿真器的生产厂商只专注于仿真器的设计,而对于其它的单片机应用不熟悉,他可能对用户提出的问题不能作出正确的判断而一味的强调自己的仿真器没有问题。与之相反,一个既熟悉仿真器的使用,又有丰富开发经验的仿真器支持厂商则能协助用户快速的找出问题,实践证明这两种情况带来的效果是完全不一样的。因此我们的建议是:挑选好的仿真器,更要挑选好的技术支持。
第二章 仿真器中使用的技术
仿真器的生产在国内有十多年的历史,其中使用的技术根据时间和性能的不同大约分成以下几种:
(1) 仿真开发系统
这种技术主要在仿真器的初级阶段使用。由于当时没有好的仿真技术或仿真芯片,仿真器设计成了一个双平台的系统并根据用户的要求在监控系统和用户系统中切换。这种仿真系统性能完全依赖于设计者的水平,实际的最终性能厂家之间相差很大。不过总的说来需要占用一定的用户资源并且设计复杂,现在基本上已经淘汰,只是使用在一些开发学习系统中。
(2) Bondout 技术
一般来说,人们常常说的专用仿真芯片其实就是 Bondout。这种仿真芯片一般也是一种单片机, 但是内部具有特殊的配合仿真的时序。当进入仿真状态后,可以冻结内部的时序运行,可以查看/修改在静止时单片机内部的资源。
使用Bondout 制作的仿真器一般具有时序运行准确(也有例外),设计制作成本低等优点;Bondout芯片一般是由单片机生产厂家提供的,因此它只能仿真该厂商指定的单片机,仿真的品种很少。
(3) HOOKS 技术
HOOKS 是PHILIPS拥有的一项仿真技术,主要解决不同品种单片机的仿真问题。使用该专利技术 就可以仿真所有具有HOOKS 特性的单片机,即使该单片机是不同厂家制造的。使用HOOKS 技术制造的仿真器可以兼容仿真不同厂家的多种单片机,而且仿真的电气性能非常接近于真实的单片机。但是HOOKS 技术对仿真器的制造厂家的技术要求特别高,不同的仿真器生产厂家同时得到HOOKS 技术的授权,但是设计的仿真器的性能差别很大。
10 年前国内就已经得到了 PHILIPS 的 HOOKS 技术授权,但是受当时技术水准的限制研制的 HOOKS 仿真器还不能实用。即使到了今天,也不是每个仿真器厂家都能生产HOOKS 仿真器,即使生 产出来性能也差异很大,用户应仔细区别。
(4) 内嵌仿真功能的芯片
随着芯片技术的发展,很多单片机生产厂商在芯片内部增加了仿真功能,一般通过JTAG 接口进行控制。为了降低成本和增加可靠性,内嵌的仿真部分一般功能比较简单。
根据当前的发展趋势,如果只仿真标准的MCS-51 系列单片机可以选用Bondout 技术的仿真器;如果用户希望仿真器功能更多更灵活的诸如增强型80C51 系列单片机的话,那么必须选用HOOKS 技术仿真器。二者比较而言,采用HOOKS 技术的仿真器性价比要高于Bondout 技术。
第三章 国内仿真器的现状
到今天为止国内的仿真器发展大约有20 年的历史,总的说来生产商的规模都不是很大,在新产品 的研制/开发/服务上都不能投入很大的资金。根据仿真器使用的技术来划分,国内仿真器的设计大约可以分成以下几个时期:
(1) 70 年代末期-80 年代中期 这个时期采用的技术主要是仿真开发系统,现在看来技术含量不高,用户要求也不高。
(2) 80 年代末期-90 年代末期 这个时期主要使用华邦一颗带有仿真功能的芯片制作,采用的技术应该叫做Bondout。采用这颗芯片能大大简化仿真器的设计,因此国内仿真器的水准有了大的提高,基本上可以不占用用户资源。
正是由于仿真性能的提高,国内的仿真器制作在将近 10 年的时间内没有进步,一直采用这种制作模式。虽然个别厂商也尝试过别的技术来提高仿真水准,例如HOOKS 技术,但是由于本身技术的限制没有成功。相反国外的仿真器较早地使用了HOOKS 技术,在初期由于HOOKS 技术本身的复杂性,仿 真性能和价格不如国内采用Bondout 的仿真器。
随着IC 技术的发展,国内制作HOOKS 技术的条件已经成熟,但是国内的几家主要的生产厂商还 陶醉于Bondout 技术之中。
(3) 2000 年开始
2000 年是中国仿真器市场变化最大的时期,其中最引人注目的变化是华邦仿真芯片W78958 的停产。
华邦公司在设计W78958 芯片时,其内部的仿真功能只是为了仿真器厂商能制作仿真器以便更好的推广W78958。但是经过几年的变化,W78958 演变成为一颗仿真器上使用的仿真专用芯片而不是用户使用的标准芯片,使用的范围也仅限于国内,一年不到20000 只的用量也促使华邦公司在进入2002年后宣布将停产该芯片。
W78958 停产以后,国内仿真器厂商处于一个非常尴尬的局面。由于W78958 在国内使用了将近10 年,国内的用户群非常庞大,这些用户将无法得到持续的支持特别是维修方面。另外,国内围绕在W78958 上所做的技术工作也无法得到延续和提高,很多业界人士认为仿真器行业将面临另起炉灶或重新洗牌的局面。
HOOKS 技术无疑是仿真器厂商在失去W78958 后的替代品,但是由于没有长期跟踪和关注,短期内多数厂家无法将复杂的HOOKS 技术应用于成熟的产品中。专家们认为仿真器厂家的整体转型可能需要2-3 年的周期,并且有相当的仿真器厂家将会被淘汰,市场拥有量将主要集中在少数几个仿真器厂家。
周立功单片机发展有限公司是PHILIPS 在国内最大的代理商,它以独特的技术销售引起国内乃至全球的注目。周立功公司成立时间不到5 年,但是膨胀很快,现在已然成为国内单片机行业的龙头,一言一行对整个行业影响很大。
2001 年12 月,周立功公司试探性地推出第一款仿真器TKS-764,用于支持周立功公司当时的 主打芯片51LPC 系列OTP 单片机。由于TKS-764 内部稳定可靠的设计,并直接直接在Keil 中的调试,所以推出后得到51LPC 用户的青睐,拥有相当大的用户群。
2002 年6 月,周立功旗下的广州致远电子有限公司在国内率先推出研制达两年之久的HOOKS 仿真器,全面支持PHILIPS 和其它公司的增强型80C51 系列单片机的仿真问题。该系列仿真器彻底解决了国内仿真器在仿真低电压、内部64K 程序、静态和动态关闭ALE、静态和动态切换6/12 Clock、4 个中断优先级、串口从地址自动识别和帧错误检测以及P8xC51 独具定时器2 等增强性能的难题, 短期内使仿真器的用户群迅速扩大,并在业界得到良好的口碑。
TKS 系列HOOKS 技术仿真器推出后,在仿真器行业引起了不小的震动。因为周立功公司在公众前的形象一一直是一个优秀的芯片代理商,在掌握了先进的仿真器技术后将改变整个行业的格局。国内的仿真器生产厂商在华邦的仿真芯片停产后发现自己处于一个尴尬的境地,现有的仿真器不能继续生产了。而转向HOOKS 技术还需要一段研发的过程,即使有些厂家匆匆推出了HOOKS 技术仿真器却明显比周立功公司的HOOKS 技术仿真器在性能上有明显的差距,仿真器行业可能会重新洗牌。
第五章 如何挑选通用仿真器
仿真器是一种很特殊的电子工具,仿真器的性能跟设计者的水平密切相关。同样使用一种仿真器技术,但是最终产品的性能差别很大。根据用户的不同用途,可以照如下标准挑选仿真器:
如果主要用途是商业产品开发,使用专用仿真器比较理想因为专用仿真器只是仿真某一种或一类芯片,可以做得性能比较高,性能也比较稳定,不用兼顾其它芯片的特殊要求。专用仿真器可能价格高一点,但是对商业开发来讲良好的性能是第一位的。
尽量采用技术含量高的仿真技术
例如,HOOKS 技术由于其良好的兼容性以及接近实际芯片的性能,应该成为通用和专用仿真器
首选。
慎重选择仿真芯片装在外置仿真头上的结构
有些仿真器的仿真芯片放置在外置仿真头的上方,这种方式的优点是可以通过更换仿真头来更换仿真器的仿真性能,通用性比较强,可以仿真不同类型的单片机。一些宣传中说仿真芯片贴近用户板,性能是最可靠的,但实际不是这样的。仿真芯片除了输出用户信号外,还要通过复杂的总线由监控电路控制,这种控制时序是最重要的。由于控制时序频率比较高,因此不应该通过较长的仿真电缆输出到外部仿真头上,这很容易受到外部的干扰或干扰外部。一旦控制时序出现问题,仿真芯片离用户板再近也没有用途。
注意仿真器的一些细节问题。例如:
(1) 否支持外部复位信号?
(2) 是否支持用户板晶振?
(3) 能否在真正仿真内部64K 程序 (P0/P2 口仍做I/O 口)?
(4) P0/P2 口是否可以同时用作I/O 口和总线?
(5) 仿真器的输出/输入口是否有可靠的保护?
(6) 是否支持低电压的仿真?
(7) 是否支持增强型80C51性能?例如内部的附加XRAM,双DPTR,ALE 关闭,6CLK 时钟等。
(8) 是否支持静态关闭和动态关闭ALE?
(9) 是否静态切换和动态切换6/12 Clock?
(10)是否支持更高的仿真频率?
仿真器厂家后续的技术支持
由于仿真器在应用中的特殊性,用户在选购时尽量选择有强大技术支持的生产厂家。好的技术支持不但能给您带来仿真器使用上的支持,也能给您在应用项目上的各个方面提出良好的建议和指导,使您能快速准确的完成您目前的项目。但如前所述,国内多数厂商规模很小,不能给用户提供全面的技术支持。周立功公司在进入工具行业后,提出了单片机的一揽子解决方,提供包括工具在内的全方位的用户支持,开辟了一种全新的销售服务模式。
第六章 如何测试通用仿真器
在选择了仿真器生产厂商后,用户还需要对仿真器的性能做仔细的测试,保证您选择的仿真器能够达到该仿真器保证的性能以及作为仿真器应该达到的性能。
在选择一种仿真器前,通过该仿真器的广告和销售人员的介绍,用户能基本上了解该仿真器的突出性能。这些突出性能应该是该仿真器确实存在的功能,虽然可能有被夸大但一般都不会有欺骗的成分。这些性能好不好需要有针对性的一一验证,这里只能建议用户将目光注意在实际仿真性能上,而不要过分注意一些与仿真器无关或关系不大的功能。
很多的仿真器虽然具备一些附加的功能,但是用户必须要注意到这些仿真器可能在一些最基本的仿真功能却做不好,这种现象在国产的仿真器中非常普遍!由于用户并不专业于仿真器的测试,因此在购买中不知道对这些仿真器的死点进行验证。等以后在学习特别是在开发设计中,这些设计中的死点可能给您带来莫名其妙的问题。您可能要花几倍的时间来寻找其中的原因,因为您首先怀疑是您系统的问题而不怀疑是仿真器的问题。所以选择一个性能可靠的仿真器是十分重要的,这需要非常专业化的测试程序来实现。
以下的测试程序由广州致远电子有限公司提供,经过长时间的使用证明能基本上反映出一个仿真器设计水平的高低。广州致远电子有限公司在提供这些测试程序时声明:这些测试程序只是指出仿真器设 计中容易出现的问题,但并不有意攻击任何含有上述问题的仿真器厂家。
1.单步性能的测试
测试说明:单步是仿真器设计中比较难实现的功能。照通常的理解,用户每执行一个单步应该准确实现理想运行的单步性能。例如,运行一个机器周期的指令,内部的所有时序应该都动作一个机器周 期而不能出现不动作或动作过度的现象。不过很遗憾的看到国内的仿真器多数不能达到这个指标。
测试程序:
ORG 0000H
SETB TR0 /* 打开定时器0 */
TestStart:
NOP /* 定时器0 运行1个机器周期, TL0 加1 */
MOV A,#0FFH /* 定时器0 运行1个机器周期, TL0 加1 */
MUL AB /* 定时器0 运行4 个机器周期, TL0 加4 */
LJMP TestStart /* 定时器0 运行2 个机器周期, TL0 加2 */
END
测试步骤
(1) 照您当前使用的仿真器要求测试上面的程序;
(2) 在运行前打开TL0 的显示,以便单步运行后能观察TL0 的变化;
(3) 使用当前仿真器环境提供的单步功能开始单步运行;
(4) 单步运行后检查TL0 变化的数值是否与指令的周期数相同。
测试结论:仿真器如果没有照严格正规的设计,程序的单步运行性能将不准确,一般会出现实际运行时间变长的现象,这在时间要求较高的单步运行将不能仿真程序的真正运行。
2.中断性能的测试
测试说明:中断是一种非正常的程序跳转,单步仿真有一定的难度,尤其在低档仿真器中。在当前采用Bondout 技术制作的仿真器中一般可以做到正确仿真,但是仍有一些仿真器不能正确单步仿真中断。
测试程序:
ORG 0000H
LJMP TestStart
ORG 000BH /* 定时器0 的中断服务程序 */
RETI
TestStart:
SETB EA /* 开放全局中断允许 */
SETB ET0 /* 开放T0 中断允许 */
TestLoop:
SETB TF0 /* 设置T0 的中断标志 */
INC A /* A 数值加一,以便观察程序持续运行 */
LJMP TestLoop /* 连续运行 */
END
测试步骤
(1) 照您当前使用的仿真器要求测试上面的程序。
(2) 每次SETB TF0 后程序将进入T0 的中断服务程序,执行完毕后返回主程序继续运行。
(3) 主程序能在TestLoop 中连续运行,因此A 能连续加一,但是每循环一次就进入一次中断。
测试结论:仿真器如果没有照严格正规设计,程序的中断性能将不准确。可能出现程序不能跳转到中断服务程序,或没有返回到正确的主程序,或A 不能每次循环连续的加1。
3.连续中断性能的测试
测试说明:在80C51 的中断系统中,串口中断比较特殊。进入串口中断服务程序后中断标志TI或RI不会自动清除,如果用户程序不对TI 或RI进行清除操作则可能会出现连续进入中断服务程序的情况。根据80C51 的中断处理,在退出中断后必须执行完一条指令后才能重新进入中断服务程序,因此即使连续中断的情况下主程序也能得到连续执行。
测试程序:
ORG 0000H
LJMP TestStart
ORG 0023H /* 定时器0 的中断服务程序 */
RETI
TestStart:
SETB EA /* 开放全局中断允许 */
SETB ES /* 开放串口中断允许 */
SETB TI
TestLoop:
NOP
NOP
INC A /* A 数值加一,以便观察程序持续运行 */
LJMP TestLoop /* 连续运行 */
END
测试步骤
(1) 照您当前使用的仿真器要求测试上面的程序。
(2) 进入TestLoop 后,每次单步运行完一条程序都会进入串口中断,退出后继续运行一条下面的程序,然后又进入中断服务程序,A 的数值可以得到递增。
(3) 主程序能在TestLoop 中连续运行,因此A 能连续加一,但是每循环一次就进入一次中断。
测试结论:仿真器如果没有照严格正规设计,程序连续运行中断程序性能将不准确。可能出现程序不能跳转到中断服务程序,或没有返回到正确的主程序,或A 不能每次循环连续的加1。
测试小结
上述的几个测试程序对仿真器的性能要求很高,如果仿真器通过测试说明被测试的仿真器仿真性能指标较高;如果仿真器没有通过测试只能判断仿真器性能不是最好,具体的综合性能要有待其它检验。
第七章 如何挑选测试HOOKS 技术仿真器
HOOKS 技术是国外普遍采用的一种仿真技术,同Bondout 技术相比较,仿真器的适用范围可以更广。HOOKS 技术在10年前已经被国内引进,并被当时的仿真器厂家试图采用。但是由于HOOKS 技术本身的复杂性,当时国内众仿真器厂家竟无法设计出可以使用的仿真器,致使国内的仿真技术远远落后于国外。
2002年,周立功旗下的广州致远电子有限公司推出了研制多年的TKS 系列HOOKS 仿真器,并在性能上全面超过国外同类型的HOOKS 仿真器,国内的用户能以低廉的价格购买到技术先进的HOOKS技术仿真器。在TKS 系列HOOKS 仿真器面市以后,国内的仿真器厂商纷纷加强研发力量研制HOOKS技术,经过了一段时间后也宣布供应采用HOOKS 技术的仿真器。用户需要注意的是:HOOKS 技术只是一个基本的仿真技术,要最终作成仿真器还必须依靠设计工程师精心的设计,因此市场上HOOKS 技术的仿真器性能指标可能有很大的差别,有的不占用用户资源,有的就做不到;有的仿真频率可以到很高,但是有的不行。因此用户应仔细加以挑选和鉴别。
根据HOOKS 技术本身的特点,用户应该对以下的几个方面加以注意和测试。
能否运行外部用户目标板上的程序
由于HOOKS 技术中P0/P2 口是重新构造的,因此P0/P2 口上的时序处理是整个设计中的难点。P0/P2 的I/O 特性和数据总线特性相对容易实现一点,但是程序总线很难正确实现,这是由于HOOKS的技术结构决定的。一般HOOKS 仿真器在实现仿真内部64K 代码空间比较容易,但是仿真内部4K (类似89C51)/8K (类似89C54)/16K (类似89C54)/32K (类似89C58)等能外扩ROM 空间的MCU类型则无法实现。在国内外所有的HOOKS 技术的仿真器中,只有广州致远公司的TKS 仿真器B 系列能真正做到稳定运行外部用户目标板上的程序。运行外部用户目标板上的程序是非常必要的,因为用户可能在外部扩充了一般的用户程序,需要实际仿真一下来验证整个系统的正确性;也可能在外部放置了大容量的(可能超过64K 的物理地址限制)分组字库,而这种特性是仿真器内部无法实现的;也可能是外部有分组的BANK 方式的运行代码,这种方式要求仿真器必须有运行外部程序代码的能力。
P0/P2 口能否同时用作总线和I/O
这种特性是芯片本来的性能,但是由于HOOKS 技术的难度,有很多HOOKS 仿真器不能做到这一点,导致用户在使用时无法全面满足要求。该性能一般不需要测试,可以直接阅读仿真器的性能说明或向生产厂商或代理商询问。作者检测过国内外知名仿真器厂家的多种HOOKS 仿真器,几乎都没有完美做到P0/P2 口的准确仿真。
P0/P2 口的直流参数
如果需要检测的仿真器根本做不到同时仿真I/O 和总线方式,则没有必要检测P0/P2 的直流参数。如果要检测的仿真器宣称能够同时仿真I/O 和总线方式,用户还必须分别在I/O 和总线两种方式下对直流参数进行测试。根据作者的HOOKS 仿真器测试经验,有的仿真器虽然宣称能够同时仿真I/O 和总线方式,但是根本不区分这两种方式驱动能力,采用的是一种平均方式,这样在作为I/O 时高电平驱动能力过大,而作为总线时驱动能力过小。用户在使用这类仿真器作为输入时,必须加大外部信号的驱动能力,这跟实际芯片的驱动能力相差太远;在作为总线使用时,如果外部的总线(包括地址总线和数据总线)个数稍多,总线电平将严重下降而无法工作。用户可以使用下面的测试程序配合示波器检查。
测试程序:
ORG 0000H
LJMP TestStart
TestStart: MOV P0,#0FFH
TestLoop: MOV P0,#00H
NOP
MOV A,#0FFH
MOV DPTR,#0FFFFH
MOVX @DPTR,A
NOP
MOV P0,#00H
SJMP TestLoop
END
测试步骤
(1) 照您当前使用的仿真器要求测试上面的程序,仿真器不接任何用户设备。
(2) 单步运行完TestStart 的程序行,P0 的数值设置为0FFH。这时使用电压表测量一下P0的任意一个管脚(例如P0.0)的电压,记录为V1,V1 的数值一般小于当前的电源电压。然后使用一个2K 电阻,一端接仿真器提供的地,另一端接P0.0,使用电压表测量一下P0.0 的电压,记录为V2,V2的电压越接近与0 说明该仿真器P0 在I/O 口方式下的特性越好(接近于开漏)。如果V2 大于1伏说明P0 口的输入电阻在10K 以下,该仿真器P0 口在I/O 下性能较差。
(3) 在TestLoop 中连续全速运行,仍保持2K 电阻接在P0.0。使用示波器观察P0.0 引脚,可以看到占空比较小的正电平脉冲,该正电平脉冲是有P0 输出的低8 位地址和数据输出引起的,因为处于总线方式,P0 口的驱动能力应该较强。保持示波器的正常显示,然后将2K 电阻不断的接触/脱离P0.0 引脚,观察P0.0 脚脉冲信号幅度的变化。如果该信号在2K 电阻接入后幅度降低很大,例如1V 以上,说明该仿真器P0 口驱动能力不足,无法满足用户的正常的需要。
测试结论:HOOKS 仿真器要同时仿真I/O 口和总线模式而且保持良好的驱动特性是比较困难的,但是可以作到的。一般的HOOKS 仿真器一般不敢宣称同时仿真I/O 口和总线方式,但是用户需要注意即使宣称可以同时仿真I/O 和总线,用户也需要照上述的方法进行测试,防止厂家采取驱动折中的方法掩盖。根据作者的测试结果,国内所有的HOOKS 仿真器只有TKS 系列可以作到真正同时仿真I/O 口和总线方式,重要的是仍保持了良好的驱动特性。
是否占用用户资源
设计优良的HOOKS 仿真器不会占用任何用户资源,但是由于设计技术的差别,有一些采用HOOKS技术的仿真器不能达到这样的性能,一般会占用部分资源。占用资源将在使用中限制用户的使用,用户可能无法通过该仿真器实现正常程序的功能。该性能一般不需要测试,可以直接阅读仿真器的性能说明或向生产厂商或代理商询问。
ALE 信号的关闭/开启
HOOKS 技术的一个突出优点是能支持增强性能的仿真,而ALE 信号的关闭/开启是增强性能的一个典型范例。由于在HOOKS 技术中,依赖ALE 信号能大大简化信号的处理,因此一般采用HOOKS 技术的仿真器都不能关闭ALE 信号,否则会引起仿真时序的全面紊乱。该性能一般在仿真器的性能说明中没有详细说明,因此需要用户自己进行测试。
下面的测试程序以PHILIPS 的P89C52X2 仿真芯片为例。
测试程序:
ORG 0000H
LJMP TestStart
TestStart: MOV P2,#55H /* 先对P1 进行设置 */
TestLoop: ORL AUXR,#01H /* 关闭ALE 信号 */
NOP
MOV P2,#55H
NOP
ANL AUXR,#0FEH /* 开启ALE 信号 */
NOP
MOV P2,#0AAH
NOP
LJMP TestLoop /* 连续运行 */
END
测试步骤
(1) 照您当前使用的仿真器要求测试上面的程序。
(2) 进入TestLoop 后,连续单步运行,程序应该能照正确的程序流程运行,而且对P2 的操作能正确在P2 口反映出来。
(3) 在TestLoop 中连续全速运行,然后停止程序运行,观察当前程序位置是否是在TestLoop 内的有效位置,P2 是否是前一个对P2 操作的数值。
测试结论:仿真器如果不能支持ALE 的关闭将无法通过上面的测试程序。
双倍速时钟的动态/静态切换
PHILIPS、SST 等一些MCU 厂商在自己的增强型51 产品中增加了双倍速时钟的功能,使51 内核的速度提高了两倍。而且在有的型号中同时具有6/12Clock 时钟切换的功能,用户在使用中有了更多的灵活性。因此,这种变化要求HOOKS 仿真器必须同时满足6/12Clock 两种方式之一的仿真(静态切换),更高的要求则是能在用户程序运行中变换6/12Clock 模式(动态切换)。能同时满足动态/静态切换的仿真器难度很大,在国内除TKS 宣布掌握这一技术外,没有见到其它厂家有类似的报道。时钟的静态切换功能可以直接查阅仿真器的性能说明或向生产厂商/代理商询问,也可以用下面的程序进行测试:
下面的测试程序以PHILIPS 的P89C52X2 仿真芯片为例。
测试程序:
ORG 0000H
LJMP TestStart
TestStart: MOV P2,#55H /* 先对P2 进行设置 */
TestLoop: ORL CKCON,#01H /* 切换为6Clock 模式 */
NOP
MOV P2,#55H
NOP
ANL CKCON,#0FEH /* 切换为6Clock 模式*/
NOP
MOV P2,#0AAH
NOP
LJMP TestLoop /* 连续运行 */
END
测试步骤
(1) 照您当前使用的仿真器要求测试上面的程序。
(2) 进入TestLoop 后,连续单步运行,程序应该能照正确的程序流程运行,而且对P2 的操作能正确在P2 口反映出来。
(3) 在TestLoop 中连续全速运行,然后停止程序运行,观察当前程序位置是否是在TestLoop 内的有效位置,P2 是否是前一个对P2 操作的数值。
测试结论:仿真器如果不能支持6/12Clock 的切换将无法通过上面的测试程序。