新闻中心

EEPW首页>嵌入式系统>设计应用> 单片机仿真器的原理介绍

单片机仿真器的原理介绍

作者: 时间:2016-11-17 来源:网络 收藏
一个理想的单片机仿真器使开发者能观察到单片机内部的操作,仿真器是使替代单片机并使单片机操作可视化的硬件工具。
一个ICE应包括两个接口,一个是连接到目标板上的MCU插座,另一个与PC相连。仿真器应该与目标MCU在电气及物理上等价,并能在开发系统中替代MCU。目标系统的操作可由PC得以控制及观察。在开发初期,开发系统依靠仿真器工作,当目标功能完善后,仿真器将被真正的MCU取代。

ICE的功能及特性:
在主机与目标系统间产生对应的程序区,host memory作为仿真程序区(emulator memory)或Shadow memory
脱离目标硬件实时测试代码
单步(Step),全速(Run),从特定的状态运行到特定的状态或到断点(BreakPoint)。这通常指特定的地址,但也可以是特定的触发条件。
修改MCU Register值
在线修改Memory内容
实时跟踪记录已执行的程序(Trace)

本文引用地址://m.amcfsurvey.com/article/201611/315380.htm

ICE设计中的难点及局限性:
ICE功能的实现需要与MCU的data bus,address bus,control bus相连,而实际芯片三总线往往不连外部引脚
电气上:ICE的驱动能力及时序需要与MCU完全相同,而ICE的外加电缆及电路必将降低负载能力及改变时序特性,引起一些目标系统在极限状态下与ICE联调往往会失败。
一个常见的现象是一个系统用ICE调试完成最终用实际MCU取代ICE可保证运行,但若硬件开发过程中未用ICE,为了调试软件问题在中途使用了ICE,往往会在时序及负载上出现问题。
理想的是所以的引脚的所以功能与MCU相同,而实际上不少低端仿真器占用了一个中断资源以控制监控程序的运行

使用ICE的主要优点在于:
软件设计及实时测试可先于实际硬件完成
提供了修改,显示memory及register的功能,提供了系统的开发效率

bond-out
MCU是芯片设计公司为实现其商用MCU的仿真功能,将内部的数据,地址及控制总线连接到芯片封装的管脚上,使得外部仿真逻辑可以监视和控制MCU内部的状态。一个ICE的质量很大程度上依赖于它与其要仿真的MCU之间的吻合程度,bond-out
MCU能最大程度上提供ICE与商用MCU的无差别替换。

基于bond-out MCU的在线仿真器的结构
见图1。系统包括三部分,bond-out MCU,存贮用户程序的SRAM及仿真监控电路。bond-out
MCU的数据,地址总线连接到SRAM,作为外部程序储存器。同时数据,地址及控制总线连接到仿真监控电路,使ICE可以监视和控制bond-out
MCU的运行状态。与PC相连的通讯接口根据速度及成本可选用串口,并口或USB接口。bond-out
MCU从本质上将是商用MCU的一种扩展,它包括所有商用MCU上的I/O并提供给用户使用,其电气与时序上应保证与商用MCU对应管脚完全一致。


在线仿真器基本功能的实现
单步(Step),全速(Run)
仿真监控电路将A/D总线的控制权交给bond-out MCU,bond-out
MCU先给出指令地址,再使能SRAM读信号,得到程序代码,依次解码并执行。

断点(BreakPoint)
见图2。断点电路由存贮断点位置的SRAM和断点监控电路组成。存贮断点位置的SRAM与存贮用户程序的SRAM的地址总线并接,SRAM的某个数据位作为断点信息存贮位,在下载用户程序的同时将设置有断点的地址上该位置为1,其余为0。当仿真器在全速运行时,该SRAM设为读状态,断点判断电路监控此数据位,当其为高时停止仿真器全速运行。

跟踪记录已执行的程序(Trace)
见图3。Trace电路由存贮Trace内容的SRAM和Trace监控电路组成。Trace SRAM的数据总线与bond-out
MCU地址总线并接,Trace SRAM的地址控制信号由Trace监控电路产生。在仿真器初始化时Trace
SRAM的地址被设置为0,当用户要求开始记录已执行的程序,在每个指令周期中,Trace SRAM的地址自加一并将bond-out
MCU地址写入SRAM中。在PC要读取Trace内容时,bond-out
MCU依次执行过的程序地址被上载到PC端并对应列出该地址上的指令代码。Trace
的记录长度受SRAM大小限制,当超出记录长度时前面的数据会被覆盖。

读取修改Register/Memory
使bond-out
MCU将Register/Memory的值从数据总线上输出,例如要读取20H地址上的值,仿真监控电路取得总线控制权,首先执行一条指令使20H地址上的值送入A,再将A写到数据总线上,仿真监控电路就能读到20H地址上的值。修改Register/Memory的方法,例如要改20H地址上的值,仿真监控电路送出该值,控制bond-out
MCU执行读取数据总线到A的指令,再执行将A送人20H地址的指令。

希望对大家用仿真器有帮助,还望各位讨论和指正。



评论


技术专区

关闭