一种基于MCU内部Flash的仿真器设计方法
用户程序通过MCU的ISP(在线编程接口)编程到内部Flash中,由Flash MCU的专用编程器完成。在设计bond-out MCU时,应该考虑与非bond-out MCU在编程时管脚的一致性。
外部SRAM用来存储监控程序和监时数据。
·跳转态
一旦程序中断事件发生,需要切换CPU的取指空间,跳转到监控程序窗口。
由于在程序中何处中断是不可预知的,因此不可能在用户程序中预先安插好用于空间 切换的跳转指令。所以需要一个专门的状态来插入跳转指令码和跳转的目的地址,即监控程序的入口地址,强制CPU运行监控程序。监控程序窗口是划分CPU地 址空间时,为仿真功能预留的地址空间,空间大小视所需的监控程序的大小而定,监控程序的大小在一定程序上取决于仿真功能的强弱。
CPU从仿真接口读跳转指令码和跳转地址。MCU外部仿真逻辑同时使能程序空间切换信号,屏蔽MCU的所外部中断,停止MCU中CPU外围模块的时钟,也就相当于屏蔽了MCU的所有内部中断。当程序空间的切换完成后,仿真器进入监控态,运行存储在外部SRAM中的监程序。
·监控态
在监控状态下,CPU运行存储在外部SRAM中的监控程序;继续禁止MCU的所有外部中断,停止MCU中CPU外围硬件模块的时钟。
监控程序的任务是获取MCU当前的状态,接受软件的调试命令,控制MCU的下一 步运行。监控程序可以写得很简单,仅仅获取CPU特殊寄存器和外围硬件寄存器的值,实现监视功能。也可以有比较完备的功能,例如接收用户的调试指令,修改 其中一些寄存器的值,命使得MCU再次运行时,按照用户的调试要求往下运行。这需要在MCU设计时,保证在CPU外围模块的时钟停止时,也可以读写外部硬 件寄存器。至于CPU的5个特殊寄存器;PC、ACC、IDX、CCR和SP,可以通过进入监控程序执行特定的程序段得到。如MOTOROLA的 HC6808就可以通过在监控程序开始处加入以下程序段得到这些寄存器的值。对于CPU指令集不支持读取全部特殊寄存器的MCU,可以通过在MCU内部增 加测试逻辑得到。PC值即为程序中断处CPU的取指地址。
PSHA ;将ACC的值压入堆栈
TPA ;将CCR的值传送给ACC
STA $2FEB ;将CCR的值存入存储器,地址为$2FEB
PULA ;将ACC弹出堆栈
STA $2FEA ;将ACC有值存入存储器,地址为$2FEA
STHX $5F ;将IDX(H:X)的值存入存储器,地址为$005F
TSX ;将SP的值传送给IDX(H:X)
STHX $5D ;将SP的值存放存储器,地址为$005D
当不再继续调试,给出开始运行的命令,监控程序结束对运行命令的等待,并且将CPU特殊寄存器的值恢复。继续运行监控程序,直到最后一条指令即跳转指令进行返回态。
·返回态
CPU执行监控程序的最后一条指令-跳转指令。外部仿真逻辑在指令码后紧接着插 入本次中断事件的中断点地址(进入监控程序之前的用户程序指令地址),CPU的取指空间需要跳回到用户程序空间。取消对外部中断的屏蔽,恢复CPU外围模 块的工作时钟,监控程序完成使命,回到用户态,继续运行内部Flash中的用户程序。
3.2 内部仿真逻辑
为了构造合适的MCU的仿真接口,必须在MCU设计时,在MCU内部增加一个仿 真接口模块,称为内部仿真接口模块。负责对仿真接口所需的CPU端口信号进行处理(如出于减少bond-out信号线的考虑,将地址和数据总线复用),并 产生外部仿真逻辑所需的控制信号如地址锁存信号,接收来自外部仿真逻辑的控制信号如程序文凭间切换使能信号等。
3.3 外部仿真逻辑
外部仿真逻辑如图2左部所示,负责接收计算机通过并口发送的仿真命令,监视MCU的仿真接口,控制仿真器的工作状态。外部仿真逻辑由外部仿真接口模块、断点判断模块、轨迹纪录模块、并口接口模块和外部SRAM读写控制模块等部分组成。各个模块的作用简单介绍如下:
·外部仿真接口模块
该模块是外部仿真逻辑中仿真状态机所在的核心模块。功能包括:接收业自MCU的 地址、数据、读/写、取指、地址锁存等信号;根据并口接口模块给出的来自软件的仿真命令,给出仿真控制信号;在程序空间切换时插入跳转指令和地址;将来自 MCU的地址和取指信号送给断点判断模块,并接收来自断点判断模块的断点标志信号;产生送给MCU的程序空间切换使能信号;运行监控程序时,给出读写外部 SRAM所需信号,并接收读出的数据,将其送给MCU。
·断点判断模块
根据外部仿真接口模块送来的CPU地址,读取断点标志存储器中的相应值。如果读出的标志为有效值,表示当前地址为断地址。接收来自并口接口模块的设置和清除断点命令,将断点存储器的相应位置1或置0。允许设置任意数目的硬件断点。
·轨迹纪录模块
将外部仿真接口模块送来的CPU取指地址,存储在轨迹纪录的存储器中。轨迹纪录的存储器采用的FIFO的方式,所能纪录的轨迹长度是有限的,存满刷新。软件读取该存储器,可以得到CPU的运行轨迹。
·并口接口模块
提供仿真器和计算机并口之间的通信接口,可以针对不同的并口模式设计,以满足不同模式的通信时序要求。
·外部SRAM读写控制模块
仿真过程中,仿真器的不同部分需要分时读写外部SRAM,包括:并口接口模块下装程序到外部SRAM;MCU在监控态从外部SRAM中读取程序指令,存储临时数据等。
对于Flash MCU而言,这种将用户的待调试程序存储在MCU内部的Flash中,将监控程序存储在MCU外部的SRAM中,并在MCU外部构造仿真逻辑,通过对采用 bond-out技术的MCU的bond-out管脚进行监控,来实现在线仿真的做法,在芯片设计时不需要做太多的工作,而且可以反映程序真实的运行效 果。相对于完全在芯片仿真(on-chip debugger),该方法简单,MCU的设计周期短;而相对于用硬件平台如FPGA仿真,则价格低廉许多,是一种种权衡折衷的方法。作者提取了一个简单 的Flash MCU模型,用这种方法完成了仿真器的逻辑设计,用Synopsys DC综合,用Quartus布线Altera APEX 20K200 FPGA中,用ModelSim5.4进行了后仿真,完成了仿真验证。结果证明这样的做法是可行的。
加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW
或用微信扫描左侧二维码