CN100401267C - 微处理器的片上动态跟踪方法 - Google Patents
微处理器的片上动态跟踪方法 Download PDFInfo
- Publication number
- CN100401267C CN100401267C CNB2006100307547A CN200610030754A CN100401267C CN 100401267 C CN100401267 C CN 100401267C CN B2006100307547 A CNB2006100307547 A CN B2006100307547A CN 200610030754 A CN200610030754 A CN 200610030754A CN 100401267 C CN100401267 C CN 100401267C
- Authority
- CN
- China
- Prior art keywords
- register
- observation point
- address
- dynamic tracking
- tracer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明涉及一种微处理器的片上动态跟踪方法。本方法通过一个集成在处理器内部的片上动态跟踪模块(On-Chip Tracer:OCT),将程序执行过程中的某些位置设置为观察点,然后对这些观察点处指定的内部寄存器的信息进行跟踪、记录和实时的输出。本发明的方法可应用于8051系列微处理器领域,亦可应用于其他微处理器领域。
Description
技术领域
本发明涉及一种微处理器的片上动态跟踪方法,可应用于8051系列的单片微处理器,也可应用于其他微处理器、微处理器领域。
背景技术
动态跟踪(Dynamic Trace)是指实时地记录程序运行的轨迹信息,并把这些信息通过某种手段传送到外部的调试工具进行分析和调试的过程。在以微处理器为核心的嵌入式系统的调试开发过程中,为了方便捕捉高速信号以及对处理器进行调试,比如根据程序执行历史进行查错、恢复、修改等,需要记录处理器高速运行时的轨迹。因此,在大多数的逻辑分析仪和在线仿真器等设备中,都有用于动态跟踪处理器运行轨迹的跟踪部件,用来监测处理器的各种内部信息,这样调试者就可以方便地检测程序执行流程、查找程序错误、重构程序运行轨迹等。不过,在实现动态跟踪的通常做法中,都需要一个较大容量的存储器来暂存各种被跟踪的处理器内部信息。因此,对于片上动态跟踪来说,在处理器内部集成一个用于动态跟踪的存储器会增大设计的难度以及生产成本等。
发明内容
本发明的目的在于提供一种微处理器的片上动态跟踪方法。通过一个集成在处理器内部的独立的片上跟踪模块(On-Chip Tracer:OCT),可以将程序执行过程中调试者关心的一些位置设置为观察点(Watchpoint),并对这些位置的信息进行跟踪、记录和实时的输出,以实现动态跟踪的目的。而且整个过程不需要专门的跟踪缓冲单元,只需少量的寄存器就能满足数据的暂存要求。
为达到上述目的,本发明的构思如下:
构建一个集成在处理器内部的片上动态跟踪模块(On-Chip Tracer:OCT),通过这个模块将程序执行过程中的某些位置标记为观察点,然后在程序执行的过程中,将每条指令的地址与这些观察点进行比较来检测观察点。如果有观察点被检测到,则CPU暂停运行,等待OCT模块将该观察点处指定的内部寄存器的信息串行输出到外部的调试工具进行分析。若数据输出完毕,则通知处理器自动恢复程序的执行。如果遇到下一个观察点,就再重复前面的跟踪、记录和输出过程。如此往复,直到程序执行完毕或者调试者暂停或终止本次的动态跟踪过程。
根据上述构思,本发明采用下述技术方案:
一种微处理器的片上动态跟踪方法,其特征在于通过一个片上动态跟踪模块(OCT),将程序执行过程中的某些位置设置为观察点(Watchpoint),然后对这些观察点处指定的内部寄存器的信息进行跟踪、记录和实时的输出;其具体步骤为:
a.设置一个异步的串行收发子模块,以实现片上动态跟踪模块OCT与微处理器外部的通信;
b.设定一个调试命令寄存器DBGCMD,来存储调试者向片上动态跟踪模块OCT所发出的动态跟踪调试命令;
c.设定n个观察点地址寄存器WPi,i=0~n-1,来存储被调试者设置为观察点的指令的首地址;
d.设定一个内部寄存器选择信号寄存器SFR_SEL,来存储在每个观察点处被跟踪和记录的内部寄存器的选择信号;
e.设定一个当前指令首地址寄存器PCC,来自动存储微处理器当前正在执行的指令的首地址;
f.通过“启动动态跟踪命令”来启动动态跟踪过程,然后在动态跟踪的过程中,片上动态跟踪模块OCT根据情况进行动态跟踪操作,并设定相关信号。
上述设置一个异步串行收发子模块的方法为:
该串行收发子模块采用半双工的异步串行通信模式,通过1根信号线与处理器外部进行串行通信,而且发送和接收是两个独立的过程。接收部分的主要目的是接收调试工具发出的各种调试命令,以及上述的各种调试命令有关的数据和程序地址,而发送的目的则是将每个观察点处被指定的内部寄存器的内容串行输出;同时,接收和发送过程都采用了1位停止位(1电平)+有效数据位+1位起始位(0电平)的数据帧格式(分别见图2(a)和图3)。
与串行通信相关的一些信号和寄存器的定义如下(见图4):
a.NEA:异步串行收发子模块与微处理器外部进行通信的外部引脚,在片上动态跟踪模块OCT内部则分为NEA_I(串行数据输入端)和NEA_O(串行数据输出端);
b.RX_CLK/TX_CLK:分别是异步串行收发子模块接收和发送串行数据时的采样时钟,频率都是微处理器时钟频率的1/100;
c.RX_SHIFT/TX_SHIFT:分别是异步串行收发子模块接收和发送数据时的串行移位脉冲,频率都是RX_CLK/TX_CLK的1/8,因此,通信的波特率为微处理器工作速度的1/800;
d.RX_SHIFTER:接收移位寄存器,接收的是各个调试命令以及相关的数据和地址,数据格式见图2;
e.TX_SHIFTER_1:发送移位寄存器,发送的是在每个观察点处内部寄存器的数据和该观察点的地址,数据格式见图3。
上述的设定一个调试命令寄存器DBGCMD的方法为:
定义DBGCMD为一个4位的寄存器,它被用来存储调试工具所发出的调试命令的二进制编码,并将接收到的调试命令译码为相应的控制信号。
DBGCMD可以存储8个与动态跟踪相关的命令,见表1。其中,DBGCMD中没有用到的其他二进制编码暂时保留,可以在以后进行扩展。
表1DBGCMD存储的动态跟踪命令
二进制编码 | 命令符号 | 功能描述 |
0000 | DBG_RST | 在调试状态下对整个微处理器系统进行复位 |
1010 | WP_SET | 将程序中的某条指令设置为一个观察点 |
1011 | WP_REMOVE | 移除一个指定的观察点 |
1100 | WP_CLR | 一次性清除所有的观察点 |
0011 | SFR_SET | 设定在每个观察点处需要被跟踪和记录的内部寄存器 |
1101 | D_DBG | 启动动态跟踪过程 |
1110 | D_DBG_PAUSE | 暂停动态跟踪过程 |
1111 | D_DBG_Stop | 停止动态跟踪过程 |
上述的设定n个观察点地址寄存器WPi(i=0~n-1)的方法为:
定义WPi为n个16位的寄存器,i=0~n-1,存储的是被设定为观察点的指令的首地址。系统复位后,这n个观察点地址寄存器的值都为高阻值。
片上动态跟踪模块OCT根据以下三种情况来设置或者清除观察点:
a)若接收到WP_SET命令,片上动态跟踪模块OCT就将与该命令一起接收到的16位地址作为一个观察点的地址存储在一个WPi寄存器中(存储的顺序是从WP0开始,最后到WPn-1)。如果调试者设置的观察点超过n个,则第n+1个观察点的地址就覆盖掉第1个观察点的地址,第n+2个观察点的地址覆盖掉第2个观察点的地址,依次类推。
b)若接收到WP_REMOVE命令,片上动态跟踪模块OCT就会将此时接收到的16位地址与先前设定为观察点的地址相比较,然后将与该地址匹配的观察点移除。
c)若接收到WP_CLR命令,片上动态跟踪模块OCT就将所有的观察点一次性全部清除,被清除后的观察点地址寄存器的数据都为高阻值。
上述的设定一个内部寄存器选择信号寄存器SFR_SEL的方法为:
定义内部寄存器选择信号寄存器SFR_SEL为一个n位的寄存器,它的每一位按序对应n个常用的内部寄存器,它的定义如下:
内部寄存器n选择信号 | ...... | 内部寄存器2选择信号 | 内部寄存器1选择信号 |
当接收到选择内部寄存器命令SFR_SET的时候,片上动态跟踪模块OCT就将此时与SFR_SET命令一起接收到的n位内部寄存器选择信号(见图2(d))存储在内部寄存器选择信号寄存器SFR_SEL中。此时如果内部寄存器选择信号寄存器SFR_SEL的某一位为1,则这一位所对应的内部寄存器就要被跟踪,同时该内部寄存器的内容在每个观察点处都要被输出。反之,如果这一位为0,那么对应的这个内部寄存器就不需要被跟踪和记录。
上述的设定一个当前指令首地址寄存器PCC的方法为:
定义当前指令首地址寄存器PCC为1个16位的地址寄存器,存储的是当前正在执行的指令的16位首地址。它的值由片上动态跟踪模块OCT自动设定。系统复位后,当前指令首地址寄存器PCC的值为00h。
设定当前指令首地址寄存器PCC的具体方法是:在程序执行的过程中,在每条指令的第1个时钟周期,把指向该条指令的程序指针的值送到当前指令首地址寄存器PCC中。当前指令首地址寄存器PCC会一直保存这个地址,直到下一条指令的第1个时钟周期到来的时候,就更新为新的地址。
上述在动态跟踪的过程中根据情况进行动态跟踪操作有如下三种:
a.如果动态跟踪过程启动后,片上动态跟踪模块OCT没有接收到其他控制命令,则片上动态跟踪模块OCT就会在程序执行的过程中自动比较WPi,和当前指令首地址寄存器PCC的内容来进行观察点的检测,i=0~n-1。如果检测到观察点,片上动态跟踪模块OCT就把该观察点处被指定的内部寄存器的信息串行输出到外部的调试工具进行分析。
检测观察点并输出内部寄存器信息的具体步骤为:
a)WP_MATCH:观察点匹配信号,高电平有效;
WP_STOP:观察点匹配停止信号;
检测观察点的方法见图7。在程序执行的过程中,在每条指令的第3个时钟周期,将n个观察点地址寄存器WPi的内容分别与当前指令首地址寄存器PCC进行比较,i=0~n-1。只要有一个观察点地址寄存器的内容与当前指令首地址寄存器PCC的内容完全匹配,就说明检测到了一个观察点,于是WP_MATCH信号立即有效。在执行完该观察点处的指令后,微处理器还需要再执行一条空操作指令NOP以保证指令执行过程的完整性。然后,在该空操作指令NOP的第2个时钟周期,WP_STOP信号有效,同时,片上动态跟踪模块OCT将所有被指定出的内部寄存器的值都存储在对应的暂存寄存器中,而与那些没有被指定的内部寄存器所对应的暂存寄存器的内容则都为0。在紧接着WP_STOP信号有效之后的下一个时钟周期,片上动态跟踪模块OCT进入串行发送的准备阶段。
b)TX_SFR_DATA:存储n个内部寄存器数据和当前观察点首地址的寄存器;
TX_SHIFTER_1:发送移位寄存器;
TX_BEGIN:发送开始信号;
CPU_STOP:停止微处理器工作时钟的信号。
在串行发送的准备阶段,即空操作指令NOP的第3个时钟周期,TX_BEGIN信号有效,串行收发子模块将n个暂存寄存器的内容和当前观察点的首地址都按序存放在寄存器TX_SFR_DATA中。然后,又将TX_SFR_DATA与1位起始位和1位停止位按序存放在发送移位寄存器TX_SHIFTER_1中。从空操作指令NOP的第4个时钟周期开始,片上动态跟踪模块OCT进入串行发送的输出阶段,见图7。同时,CPU_STOP信号有效,微处理器停止运行。
c)TX_END:串行输出的结束信号。
在串行发送的输出阶段,串行收发子模块将TX_SHIFTER_1的内容串行送出,且输出的时候低位在前,左端不断补0。当停止位到达TX_SHIFTER_1的最右端时,停止位左端的全零信号被一个“全零检测器”检测到,于是TX_END信号立即有效,片上动态跟踪模块OCT便停止串行发送过程。见图4。
b.如果动态跟踪过程启动后,在动态跟踪的过程中,片上动态跟踪模块OCT接收到暂停动态跟踪的命令D_DBG_PAUSE,则在当前指令的最后一个时钟周期,CPU_STOP信号有效,微处理器停止运行,整个系统进入动态跟踪的暂停状态。此时,调试者可以根据被检测到的观察点处的微处理器内部信息来分析程序的运行情况,从而查找程序错误、重构程序流程等。
若系统当前正处于动态跟踪的暂停状态,如果调试者再次发出暂停动态跟踪的命令D_DBG_PAUSE,则系统立即退出暂停状态,并重新进入动态跟踪过程。同时CPU_STOP信号立即无效,微处理器从先前暂停处的下一条指令开始重新运行。
c.如果动态跟踪过程启动后,在动态跟踪的过程中,片上动态跟踪模块OCT接收到停止动态跟踪的命令D_DBG_STOP,则系统立即退出动态跟踪过程,并等待调试者发出新的动态跟踪命令。
本发明与现有技术相比较,具有以下的突出实质性特点和显著优点:通过一个片上的动态跟踪模块OCT,可以由调试者将程序执行过程中的一些关键位置设置为观察点(Watchpoint),然后通过检测观察点来触发串行发送,将该观察点处内部寄存器的内容输出到外部的调试工具进行分析,用少量的寄存器实现对内部寄存器的跟踪和记录。本发明已在8051系列的MCU上实现了对程序运行过程的动态跟踪,亦可应用于其他微处理器和微处理器领域。
附图说明:
图1是动态跟踪的工作流程图。
图2是串行接收时的数据帧格式示图。
图3是串行发送时的数据帧格式示图。
图4是串行通信子模块的内部结构示意图。
图5是片上动态跟踪模块OCT的内部结构示意图。
图6是SFR SEL寄存器的每一位与24个内部寄存器的对应关系图。
图7是检测观察点的时序图。
具体实施方式
本发明的一个优选实施例结合附图详述如下:
本微处理器的片上动态跟踪方法,通过一个片上动态跟踪模块OCT,采用下述的工作流程(见图1)来实现对处理器运行过程的动态跟踪:
1)由调试者指定程序中的若干观察点。在本实例中,设定n=8,共8个观察点地址寄存器WPi(0~7),因此,调试者可以任意设置0~8个观察点。
2)由调试者指定在各个观察点处需要被跟踪和记录的内部寄存器。在本实例中设定24个常用的内部寄存器可供选择,而且这24个内部寄存器的选择互相独立,调试者可以视情况选择1~24个需要被跟踪和记录的内部寄存器。
3)通过启动动态跟踪命令D_DBG来启动动态跟踪的过程。然后在动态跟踪的过程中,微处理器正常运行,只是在每条指令的开始,都要把8个观察点寄存器与当前指令首地址寄存器PCC进行比较以检测观察点。
4)在动态跟踪的过程中,如果检测到观察点,则微处理器立即停止运行,并等待片上动态跟踪模块OCT将该观察点处那些被选中的内部寄存器的内容串行输出。待输出过程结束,微处理器立即恢复运行。
5)在动态跟踪的过程中,如果没有检测到观察点,则微处理器继续运行,片上动态跟踪模块OCT继续动态跟踪过程,直到程序执行完毕或者调试者发出动态跟踪的暂停或停止命令。
6)在动态跟踪的过程中,如果调试者发出停止动态跟踪的命令D_DBG_STOP,则整个系统立即退出动态跟踪模式,并等待调试者发出新的调试命令。
7)在动态跟踪的过程中,如果调试者发出暂停动态跟踪的命令D_DBG_PAUSE,则系统进入暂停状态,此时调试者可以根据每个观察点处内部寄存器的信息来分析程序的执行情况。若调试者再次发出暂停命令,则系统立即退出暂停状态,并回到动态跟踪过程。
本实施例在接收和发送串行数据时,采用图2和图3所示的数据帧格式,接收和发送的数据都包括1位起始位和1位停止位,只是各自的有效数据位不同而已。同时,定义起始位为0电平,停止位为1电平。接收和发送时的有效数据位的定义分别为:
1)由于接收的有效数据是调试工具所发出的各种动态跟踪命令(定义见前述的表1),以及与各个命令相关的数据和程序地址,因此,对不同的命令来说,需要定义不同的有效数据格式,不过它们的有效数据位数都是28位(不包括2位标志位)。各个命令以及与该命令相关的有效数据位分别定义如下:
·WP_SET/WP_REMOVE命令:设置和清除指定观察点的命令,与这两个命令相关的数据位是无效位,而16位地址则是需要被设置的观察点或者是需要被移除的观察点的地址。
·WP_CLR命令:清除所有8个观察点的命令,与该命令相关的数据位和地址位此时都无效;
·SFR_SET命令:选择每个观察点处需要被跟踪和记录的内部寄存器的命令,与该命令一起接收到的8位数据和16位地址合起来作为24个内部寄存器的选择信号;
·D_DBG命令:动态跟踪的启动命令,与此命令相关的数据位无效,而16位地址则是微处理器开始执行程序的起始地址;
·D_DBG_PAUSE/D_DBG_STOP命令:动态跟踪的暂停和停止命令,与这两个命令相关的数据位和地址位都无效。
2)发送时候的有效数据由每个观察点处被选择出的内部寄存器的数据和当前观察点的地址组成(见图3)。不过,为了保证每次串行输出的位数一致,那些没有被选中的内部寄存器的内容也以全0数据输出。因此,总共有24个内部寄存器和1个16位的地址需要输出。
为了实现片上动态跟踪模块OCT与外部调试工具的串行通信,本实施例采用了下述的异步串行通信结构(见图4):
·NEA:通信子模块与处理器外部进行串行通信的引脚;
·NEAOE:串行通信时,接收和发送过程复用NEA引脚的使能信号;
·NEA_I/NEA_O:分别是通信子模块内部的串行接收和串行发送数据端;
·RX_CLK/TX_CLK:分别是接收和发送过程的工作时钟;
·RX_SHIFT/TX_SHIFT:分别是接收和发送过程的串行移位脉冲;
·RX_SHIFTER/TX_SHIFTER_1:分别是接收和发送过程的移位寄存器;
·RX_START/RX_OVER:分别是接收过程的开始和结束信号;
·TX_BEGIN/TX_SEND:分别是发送过程的启动和输出信号;
·DBGCMD/RX_DATA/RX_ADDR:分别是接收过程结束后,接收到的调试命令、数据和地址的暂存寄存器。
·TX_SFR_DATA:存储24个内部寄存器数据和当前观察点首地址的寄存器。
从图4可以看出,该串行通信子模块分成两个独立的部分:接收部分和发送部分。当处于发送状态时(TX_BEGIN或者TX_SEND信号有效),NEAOE信号有效(1电平),此时的NEA引脚用作输出(即NEA_O),反之若NEAOE信号无效,则NEA用作输入(NEA_I)。
1)接收的过程如下:
首先,系统复位时或者上一次的接收过程结束之后,30位全1信号被写入一个30位的接收移位寄存器RX_SHIFTER中。然后,若接收控制器在NEA_I端检测到从1到0的负跳变,RX_START信号就立即有效,于是在接收移位脉冲RX_CLK的控制下,出现在NEA_I端的数据被串行向右移入RX_SHIFTER,直到起始位0到达RX_SHIFTER的最右端。此时,0检测器检测到RX_SHIFTER最右端的0信号,于是使接收完毕信号RX_OVER有效,同时把接收到RX_SHIFTER中的命令、数据和地址分别存储到DBGCMD、RX_DATA和RX_ADDR三个寄存器中。
另外,在采样NEA_I端信号的时候,采用了3取2的判决方法来提高接收的准确性和抗干扰性。也就是用与RX_CLK同频率的采样时钟CLK_SAMP(频率是移位脉冲RX_SHIFT的8倍)在每个接收字符的中间连续采样3次,然后取3个中至少2个相同的采样结果作为该字符的真实值。
2)发送的过程如下:
若检测到观察点,也即是WP_STOP和WP_MATCH信号同时有效的时候,发送过程的启动信号TX_BEGIN有效,且存储在TX_SFR_DATA中的内部寄存器的数据和当前观察点的地址被下载到发送移位寄存器TX_SHIFTER_1中。同时,由一个D触发器产生的1信号作为停止位被写进TX_SHIFTER_1的最左端。然后,TX_SEND信号有效,TX_SHIFTER_1中的数据在发送移位脉冲TX_SHIFT的控制下被串行右移到NEA_O信号线上。在数据右移的过程中,D触发器不断向TX_SHIFTER_1写入0信号,直到停止位到达TX_SHIFTER_1的最右端。此时,停止位左端的全0数据被一个全0检测器检测到,于是触发TX_END信号,通知发送控制器停止发送数据。
经上述串行通信子模块接收到的动态跟踪调试命令共有8个。为了存储接收到的这些调试命令,定义了1个4位的调试命令寄存器DBGCMD来存储这8个调试命令的二进制编码(见表1)。其中,DBGCMD中没有用到的那些二进制编码暂时保留,可以在以后进行扩展。
存储在DBGCMD中的动态跟踪命令可以控制片上动态跟踪模块OCT完成各种对微处理器的动态跟踪功能(见图5),包括:观察点的设置、内部寄存器的选择以及在动态跟踪的过程中检测观察点等。
1)观察点的设置:
·WP0~WP7:8个观察点地址寄存器,存储的是被设置为观察点的指令的首地址。系统复位的时候,8个观察点地址寄存器WPi(i=0~7)的内容都是高阻值。
观察点的设置由专门的“观察点设置网络”来实现(见图5),根据接收到的不同命令,可以进行观察点的不同设置:
i)如果接收到观察点设置命令WP_SET,观察点设置网络就将此时一并接收到的16位地址(见图2(b))作为一个观察点的地址写入到其中一个WPi中,写入的顺序是从WP0开始,然后到WP7结束。调试者可以根据情况设置0~8个观察点。如果调试者所设置的观察点超过了8个,那么第9个观察点就会覆盖掉第1个,而第10个覆盖掉第2个,依此类推。
ii)如果接收到观察点移除命令WP_REMOVE,观察点设置网络就将此时接收到的16位地址(见图2(b))与已经被设置为观察点的地址相比较,然后将匹配的那个观察点移除掉。
iii)如果接收到观察点清除命令WP_CLR,观察点设置网络就将所有的8个观察点一起清除掉。
2)内部寄存器的选择:
·SFR_SEL:寄存器选择信号寄存器,大小为24位,存储的是24个内部寄存器的选择信号。系统复位时,24位选择信号都为0。
设置完观察点之后,调试者还需要指定在每个观察点处需要被跟踪和记录的内部寄存器,这是通过“内部寄存器选择网络”来实现的(见图5)。如果片上动态跟踪模块接收到SFR_SET命令,内部寄存器选择网络就将此时与该命令一起获得的“24位内部寄存器选择信号”(见图2(d)所示)存储在寄存器SFR_SEL中,然后根据SFR_SEL每一位的状态选择出对应的内部寄存器。
SFR_SEL寄存器的每一位都是一个独立的寄存器选择信号,高电平有效,而且与24个常用内部寄存器一一对应(见图6)。因此,一共有24个内部寄存器可供选择,调试者可以任意选择其中的0~24个。例如,如果SFR_SEL的最低位SFR_SEL.0为1,则与之对应的累加器ACC就被选中,因此在每个观察点处ACC都要被跟踪和记录,但如果SFR_SEL.0为0,则ACC就不需要被跟踪和记录。其他内部寄存器的选择方式与之相同。
3)在动态跟踪的过程中检测观察点:
如果调试者已经设置好观察点,并设置好在每个观察点处需要被跟踪和记录的内部寄存器,就可以用D_DBG命令启动动态跟踪过程,然后,微处理器会从与该命令一起获得的“起始地址”(见图2(e))处开始运行。在微处理器正常运行的过程中,片上动态跟踪模块OCT自动进行观察点的检测。检测观察点的方法如图7所示:
·PCC:当前正在执行的指令的16位首地址寄存器。
·WP_MATCH:观察点匹配信号。
·WP_STOP:观察点匹配停止信号。
·NOP:空操作指令。
·CCLK:CPU正常工作的时钟信号。
·CPU_STOP:停止CPU的工作时钟的信号。
从图7可以看出,观察点寄存器WP0中存储的地址为75H,此即为某条指令的首地址。如果微处理器当前正执行指令MOV A,#data,而且该指令的首地址为75H,那么,当前指令首地址寄存器PCC中的数据就是75H。接下来,检测观察点的步骤为:
i)在这条MOV A,#data指令的第3个时钟周期C1P3,片上动态跟踪模块OCT将WP0的值与当前指令首地址寄存器PCC进行比较,两者相符,于是WP_MATCH信号立即有效。然后,由于WP_MATCH信号的有效,执行完该MOV指令之后,微处理器还要执行一条额外的空操作指令NOP,以保证MOV A,#data指令的完整性。因此,在空操作指令NOP的第一个时钟周期C1P1,当前指令首地址寄存器PCC的值立即变为空操作指令NOP的首地址77H(因为MOV A,#data的机器码占用两个字节地址,而且在执行完该MOV指令后,处理器的程序指针会指向被这条额外的NOP指令所暂时替换的指令的首地址)。
ii)在空操作指令NOP的第3个时钟周期C1P3,此时WP0与当前指令首地址寄存器PCC已经不匹配,于是WP_MATCH信号立即无效。同时,由于该空操作指令NOP是微处理器额外执行的,因此在该空操作指令NOP的第2个时钟周期C1P2,片上动态跟踪模块OCT会使WP_STOP信号有效。然后,在WP_STOP有效之后的下一个时钟周期(即空操作指令NOP的C1P3时刻),发送启动信号TX_BEGIN有效。于是,在观察点75H处被跟踪的数据就被写入到发送移位寄存器TX_SHIFTER_1中,同时,NEA_O端开始发送串行数据的起始位(0电平)。
iii)接着,在空操作指令NOP的第4个时钟周期C1P4,CPU_STOP信号有效,并使微处理器的工作时钟CCLK停止下来。于是微处理器暂停,等待片上动态跟踪模块OCT将观察点75H处的微处理器内部信息串行输出到外部的调试工具进行分析。由于CCLK已经停止,因此空操作指令NOP的第4个时钟周期C1P4会一直维持到CCLK恢复为止。
Claims (7)
1.一种微处理器的片上动态跟踪方法,其特征在于:通过一个片上动态跟踪模块OCT,将程序执行过程中的某些位置设置为观察点,然后对这些观察点处指定的内部寄存器的信息进行跟踪、记录和实时的输出;其具体步骤为:
a.设置一个异步的串行收发子模块,以实现片上动态跟踪模块OCT与微处理器外部的通信;
b.设定一个调试命令寄存器DBGCMD,来存储调试者向片上动态跟踪模块OCT所发出的动态跟踪调试命令;
c.设定n个观察点地址寄存器WPi,i=0~n-1,来存储被调试者设置为观察点的指令的首地址;
d.设定一个内部寄存器选择信号寄存器SFR_SEL,来存储在每个观察点处被跟踪和记录的内部寄存器的选择信号;
e.设定一个当前指令首地址寄存器PCC,来自动存储微处理器当前正在执行的指令的首地址;
f.通过“启动动态跟踪命令”来启动动态跟踪过程,然后在动态跟踪的过程中,片上动态跟踪模块OCT根据情况进行动态跟踪操作,并设定相关信号。
2.根据权利要求1所述的微处理器的片上动态跟踪方法,其特征在于所述的步骤a中设置一个异步串行收发子模块的方法为:
该串行收发子模块采用半双工的异步串行通信模式,通过1根信号线与微处理器外部进行串行通信,而且发送和接收是两个独立的过程;接收部分的主要目的是接收调试工具发出的各种调试命令,以及与所述的各种调试命令有关的数据和程序地址,而发送的目的则是将每个观察点处被指定的内部寄存器的内容串行输出;同时,接收和发送过程都采用了1位停止位+有效数据位+1位起始位的数据帧格式,其中停止位为1电平,起始位为0电平;与串行通信相关的一些信号和寄存器的定义如下:
a.NEA:异步串行收发子模块与微处理器外部进行通信的外部引脚,在片上动态跟踪模块OCT内部则分为NEA_I,即串行数据输入端,和NEA_O,即串行数据输出端;
b.RX_CLK/TX_CLK:分别是异步串行收发子模块接收和发送串行数据时的采样时钟,频率都是微处理器时钟频率的1/100;
c.RX_SHIFT/TX_SHIFT:分别是异步串行收发子模块接收和发送数据时的串行移位脉冲,频率都是RX_CLK/TX_CLK的1/8,因此,通信的波特率为微处理器工作速度的1/800;
d.RX_SHIFTER:接收移位寄存器,接收的是各个调试命令以及相关的数据和地址;
e.TX_SHIFTER_1:发送移位寄存器,发送的是在每个观察点处内部寄存器的数据和该观察点的地址。
3.根据权利要求1所述的微处理器的片上动态跟踪方法,其特征在于所述的步骤b中设定一个调试命令寄存器DBGCMD的方法为:定义DBGCMD为一个4位的寄存器,它被用来存储调试工具所发出的调试命令的二进制编码,并将接收到的调试命令译码为相应的控制信号;DBGCMD可以存储8个与动态跟踪相关的命令,见表1,
表1DBGCMD存储的动态跟踪命令
其中,DBGCMD中没有用到的其他二进制编码暂时保留,可以在以后进行扩展。
4.根据权利要求1所述的微处理器的片上动态跟踪方法,其特征在于所述的步骤c中设定n个观察点地址寄存器WPi的方法如下,其中i=0~n-1,定义WPi为n个16位的寄存器,其中i=0~n-1,存储的是被设定为观察点的指令的首地址;系统复位后,这n个观察点地址寄存器的值都为高阻值;
片上动态跟踪模块OCT根据以下三种情况来设置或者清除观察点:
a)若接收到WP_SET命令,片上动态跟踪模块OCT就将与该命令一起接收到的16位地址作为一个观察点的地址存储在一个WPi寄存器中,存储的顺序是从WP0开始,最后到WPn-1;如果调试者设置的观察点超过n个,则第n+1个观察点的地址就覆盖掉第1个观察点的地址,第n+2个观察点的地址覆盖掉第2个观察点的地址,依次类推;
b)若接收到WP_REMOVE命令,片上动态跟踪模块OCT就会将此时接收到的16位地址与先前设定为观察点的地址相比较,然后将与该接收到的16位地址匹配的观察点移除;
c)若接收到WP_CLR命令,片上动态跟踪模块OCT就将所有的观察点一次性全部清除,被清除后的观察点地址寄存器的数据都为高阻值。
5.根据权利要求1所述的微处理器的片上动态跟踪方法,其特征在于所述的步骤d中设定一个内部寄存器选择信号寄存器SFR_SEL的方法为:
定义内部寄存器选择信号寄存器SFR_SEL为一个n位的寄存器,它的每一位按序对应n个常用的内部寄存器,它的定义如下:
当接收到选择内部寄存器命令SFR_SET的时候,片上动态跟踪模块OCT就将此时与SFR_SET命令一起接收到的n位内部寄存器选择信号存储在内部寄存器选择信号寄存器SFR_SEL中;此时如果内部寄存器选择信号寄存器SFR_SEL的某一位为1,则这一位所对应的内部寄存器就要被跟踪,同时该内部寄存器的内容在每个观察点处都要被输出;反之,如果这一位为0,那么对应的这个内部寄存器就不需要被跟踪和记录。
6.根据权利要求1所述的微处理器的片上动态跟踪方法,其特征在于所述的步骤e中设定一个当前指令首地址寄存器PCC的方法为:
定义当前指令首地址寄存器PCC为1个16位的地址寄存器,存储的是当前正在执行的指令的16位首地址;它的值由片上动态跟踪模块OCT自动设定;系统复位后,当前指令首地址寄存器PCC的值为00h;
设定当前指令首地址寄存器PCC的具体方法是:在程序执行的过程中,在每条指令的第1个时钟周期,把指向该条指令的程序指针的值送到当前指令首地址寄存器PCC中;当前指令首地址寄存器PCC会一直保存这个地址,直到下一条指令的第1个时钟周期,就更新为新的地址。
7.根据权利要求1所述的微处理器的片上动态跟踪方法,其特征在于所述的步骤f中在动态跟踪的过程中,片上动态跟踪模块OCT根据情况进行的动态跟踪操作有如下三种:
a.如果动态跟踪过程启动后,片上动态跟踪模块OCT没有接收到其他控制命令,则片上动态跟踪模块OCT就会在程序执行的过程中自动比较WPi和当前指令首地址寄存器PCC的内容来进行观察点的检测,其中i=0~n-1;如果检测到观察点,片上动态跟踪模块OCT就把该观察点处被指定的内部寄存器的信息串行输出到外部的调试工具进行分析;
检测观察点并输出内部寄存器信息的具体步骤为:
a)WP_MATCH:观察点匹配信号,高电平有效;
WP_STOP:观察点匹配停止信号;
在程序执行的过程中,在每条指令的第3个时钟周期,将n个观察点地址寄存器WPi的内容分别与当前指令首地址寄存器PCC进行比较,i=0~n-1;只要有一个观察点地址寄存器的内容与当前指令首地址寄存器PCC的内容完全匹配,就说明检测到了一个观察点,于是WP_MATCH信号立即有效;在执行完该观察点处的指令后,微处理器还需要再执行一条空操作指令NOP以保证指令执行过程的完整性;然后,在该空操作指令NOP的第2个时钟周期,WP_STOP信号有效,同时,片上动态跟踪模块OCT将所有被指定的内部寄存器的值都存储在对应的暂存寄存器中,而与那些没有被指定的内部寄存器所对应的暂存寄存器的内容则都为0;在紧接着WP_STOP信号有效之后的下一个时钟周期,片上动态跟踪模块OCT进入串行发送的准备阶段;
b)TX_SFR_DATA:存储n个内部寄存器数据和当前观察点首地址的寄存器;
TX_SHIFTER_1:发送移位寄存器;
TX_BEGIN:发送开始信号;
CPU_STOP:停止微处理器工作时钟的信号;
在串行发送的准备阶段,即空操作指令NOP的第3个时钟周期,TX_BEGIN信号有效,串行收发子模块将n个暂存寄存器的内容和当前观察点的首地址都按序存放在寄存器TX_SFR_DATA中;然后,又将TX_SFR_DATA与1位起始位和1位停止位按序存放在发送移位寄存器TX_SHIFTER_1中;从空操作指令NOP的第4个时钟周期开始,片上动态跟踪模块OCT进入串行发送的输出阶段;同时,CPU_STOP信号有效,微处理器停止运行;
c)TX_END:串行输出的结束信号;
在串行发送的输出阶段,串行收发子模块将TX_SHIFTER_1的内容串行送出,且输出的时候低位在前,左端不断补0;当停止位到达TX_SHIFTER_1的最右端时,停止位左端的全零信号被一个“全零检测器”检测到,于是TX_END信号立即有效,片上动态跟踪模块OCT便停止串行发送过程;
b.如果动态跟踪过程启动后,在动态跟踪的过程中,片上动态跟踪模块OCT接收到暂停动态跟踪的命令D_DBG_PAUSE,则在当前指令的最后一个时钟周期,CPU_STOP信号有效,微处理器停止运行,整个系统进入动态跟踪的暂停状态;此时,调试者可以根据被检测到的观察点处的微处理器内部信息来分析程序的运行情况,从而查找程序错误、重构程序流程等;若系统当前正处于动态跟踪的暂停状态,如果调试者再次发出暂停动态跟踪的命令D_DBG_PAUSE,则系统立即退出暂停状态,并重新进入动态跟踪过程;同时CPU_STOP信号立即无效,微处理器从先前暂停处的下一条指令开始重新运行;
c.如果动态跟踪过程启动后,在动态跟踪的过程中,片上动态跟踪模块OCT接收到停止动态跟踪的命令D_DBG_STOP,则系统立即退出动态跟踪过程,并等待调试者发出新的动态跟踪命令。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006100307547A CN100401267C (zh) | 2006-09-01 | 2006-09-01 | 微处理器的片上动态跟踪方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006100307547A CN100401267C (zh) | 2006-09-01 | 2006-09-01 | 微处理器的片上动态跟踪方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1912849A CN1912849A (zh) | 2007-02-14 |
CN100401267C true CN100401267C (zh) | 2008-07-09 |
Family
ID=37721790
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2006100307547A Expired - Fee Related CN100401267C (zh) | 2006-09-01 | 2006-09-01 | 微处理器的片上动态跟踪方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100401267C (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9280447B2 (en) | 2012-03-16 | 2016-03-08 | International Business Machines Corporation | Modifying run-time-instrumentation controls from a lesser-privileged state |
US9471315B2 (en) | 2012-03-16 | 2016-10-18 | International Business Machines Corporation | Run-time instrumentation reporting |
US9454462B2 (en) | 2012-03-16 | 2016-09-27 | International Business Machines Corporation | Run-time instrumentation monitoring for processor characteristic changes |
US9405541B2 (en) | 2012-03-16 | 2016-08-02 | International Business Machines Corporation | Run-time instrumentation indirect sampling by address |
US9367316B2 (en) | 2012-03-16 | 2016-06-14 | International Business Machines Corporation | Run-time instrumentation indirect sampling by instruction operation code |
US9442824B2 (en) | 2012-03-16 | 2016-09-13 | International Business Machines Corporation | Transformation of a program-event-recording event into a run-time instrumentation event |
US9250902B2 (en) * | 2012-03-16 | 2016-02-02 | International Business Machines Corporation | Determining the status of run-time-instrumentation controls |
US9483268B2 (en) | 2012-03-16 | 2016-11-01 | International Business Machines Corporation | Hardware based run-time instrumentation facility for managed run-times |
US9430238B2 (en) | 2012-03-16 | 2016-08-30 | International Business Machines Corporation | Run-time-instrumentation controls emit instruction |
US9411591B2 (en) | 2012-03-16 | 2016-08-09 | International Business Machines Corporation | Run-time instrumentation sampling in transactional-execution mode |
US9465716B2 (en) | 2012-03-16 | 2016-10-11 | International Business Machines Corporation | Run-time instrumentation directed sampling |
CN104380266B (zh) * | 2012-05-07 | 2017-07-18 | 密克罗奇普技术公司 | 具有复位条件跟踪能力的处理器装置 |
CN104536859B (zh) * | 2015-01-08 | 2018-07-03 | 北京思朗科技有限责任公司 | 一种片上调试系统的探头装置 |
CN109495408B (zh) * | 2017-09-13 | 2021-06-22 | 瑞昱半导体股份有限公司 | 波特率跟踪及补偿装置与方法 |
CN110727577B (zh) * | 2019-08-29 | 2023-06-09 | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) | 嵌入式系统软件中概率复现问题的调试方法、系统及介质 |
CN117827563A (zh) * | 2023-12-29 | 2024-04-05 | 深圳博瑞晶芯科技有限公司 | 处理器功能验证方法、装置及介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5748878A (en) * | 1995-09-11 | 1998-05-05 | Applied Microsystems, Inc. | Method and apparatus for analyzing software executed in embedded systems |
CN1648873A (zh) * | 2005-02-01 | 2005-08-03 | 苏州超锐微电子有限公司 | 断点调试功能的实现方法 |
CN1779654A (zh) * | 2004-11-19 | 2006-05-31 | 凌阳科技股份有限公司 | 用于处理器的追踪调试方法及系统 |
-
2006
- 2006-09-01 CN CNB2006100307547A patent/CN100401267C/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5748878A (en) * | 1995-09-11 | 1998-05-05 | Applied Microsystems, Inc. | Method and apparatus for analyzing software executed in embedded systems |
CN1779654A (zh) * | 2004-11-19 | 2006-05-31 | 凌阳科技股份有限公司 | 用于处理器的追踪调试方法及系统 |
CN1648873A (zh) * | 2005-02-01 | 2005-08-03 | 苏州超锐微电子有限公司 | 断点调试功能的实现方法 |
Also Published As
Publication number | Publication date |
---|---|
CN1912849A (zh) | 2007-02-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100401267C (zh) | 微处理器的片上动态跟踪方法 | |
CN100449477C (zh) | 用于嵌入式系统的实时调试器接口 | |
CN102360329B (zh) | 总线监控与调试控制装置及进行总线监控与总线调试的方法 | |
CN101154183B (zh) | 一种微控制器嵌入式在线仿真调试系统 | |
CN101770424B (zh) | 适于数字通信终端底层协议栈的数据采集与仿真系统 | |
CN105550118B (zh) | 调试系统和调试方法 | |
US7225357B2 (en) | SDIO card development system | |
CN102662835A (zh) | 一种针对嵌入式系统的程序调试方法及嵌入式系统 | |
CN103729288A (zh) | 一种嵌入式多核环境下应用程序的调试方法 | |
CN101458725B (zh) | 微控制器芯片及其调试方法 | |
CN100592266C (zh) | 一种微处理器调试方法及所用的微处理器调试模块 | |
CN101493847A (zh) | 一种通讯片上系统芯片追踪调试的方法及装置 | |
CN103430158A (zh) | 使用执行单一步骤来诊断编码 | |
CN100511179C (zh) | 带特殊功能寄存器断点的增强型微处理器片上动态跟踪方法 | |
CN103593271A (zh) | 一种片上系统芯片追踪调试的方法及装置 | |
CN102591760A (zh) | 基于长短扫描链与jtag接口的片上调试电路 | |
CN104298639A (zh) | 主处理器与若干协处理器的嵌入式连接方法及连接接口 | |
JP2001236245A (ja) | 異なる命令セットフィールドに固有のハードウエアでの実行時にエミュレートされた命令セットのトレースを再生成するための方法および装置 | |
CN107220175A (zh) | 应用程序死循环定位方法、装置、计算机设备和存储介质 | |
CN202267954U (zh) | 总线监控与调试控制装置 | |
CN104461796B (zh) | 用于嵌入式8051cpu的jtag调试模块及调试方法 | |
CN106528414A (zh) | 处理器芯片仿真器 | |
CN111008133B (zh) | 粗粒度数据流架构执行阵列的调试方法及装置 | |
CN102193860A (zh) | 微控制器在线调试电路及方法、微控制器 | |
CN100371907C (zh) | 用于处理器的追踪调试方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20080709 Termination date: 20120901 |