发明内容
本发明涉及一种芯片调试方法,在不改变内核的条件下,解决了指令编码长度不一以及指令执行周期不一致给调试带来的困难,实现了单步执行、指令***等功能。具体的,该方法包括以下步骤:
***接收调试信号,进入调试模式,同时进行时钟切换,由调试时钟控制芯片的内核与外设;
根据调试需要,可选的进行单步调试、指令***、内核执行、外部数据存储器调试、特殊寄存器调试或内部寄存器调试。
其中,进入调试模式的途径可以是状态位置低、调试接口单元发出的请求信号、触发断点或者触发观察点,其中,只有在***处于非安全模式下才可以通过后三种方法进入调试模式。
其中,采用门控时钟和多路选择器来实现时钟切换,即进入调试模式后,内核和外设的时钟被门控,内核停止指令执行,芯片调试模块输出状态位有效信号,重新给外设时钟驱动,这时外设时钟为调试时钟。
其中,所述的内核程序重启、运行、停止通过时钟切换协助完成,即在调试过程中,内核时钟是停止的,只有当单步执行和***指令执行时,内核才有时钟驱动,此时时钟来源于调试模块输出调试时钟。根据权利要求1所述的芯片调试方法,其特征在于,单步调试和指令***操作时,内核与内部ram、外部数据存储器、外设重新建立连接,操作完成连接关系解除。
其中,***处于调试状态时,除了单步调试和指令***的指令执行阶段,内核与内部寄存器,外部数据存储器以及特殊功能寄存器是断开连接的。
相应的,本发明提供了一种芯片调试装置,该装置包括:信号接收模块、调试状态判断模块、单步调试模块、指令***模块、内核执行模块、外部数据存储器调试模块、特殊寄存器调试模块以及内部寄存器调试模块。
从上述技术方案可以看出,本发明具有以下有益效果:几乎没有改动内核,不需要繁多的现场保护措施,结构简单、代价小;时钟控制网络利用门控时钟和设计上严格保证门控单元控制信号的时序关系,时钟切换具有稳定有效的时钟输出;解决了指令编码长度不一、指令执行周期不一致给调试带来的困难。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。
如图1所示,本发明实施例中芯片调硬件结构图。硬件平台采用8位MCU,该平台采用DW-8051内核,采用16位地址总线,8位数据总线的方式,进行数据传输。可以看出,所述***结构基于8051内核,包括ADC、CAN、LIN、PWM等外设,一个32k的外部数据存储器,一个64k的程序存储器和256Byte的内部ram。内核通过访问特殊功能寄存器sfr,控制外设的工作状态,通过存储器地址和数据线读写数据和程序存储器,通过内部ram地址和数据线读写内部ram。
具体的,本发明实例将结合***进入调试模式、单步调试、指令***、访问内部ram、外部数据存储器、特殊功能寄存器、退出调试状态等过程分别进行详细说明。
首先,***进入调试模式,根据本发明,***可通过四条途径进入调试模式,如图2所示,下面将对这四种情况逐一说明。
在实施例1中,复位时P0.7/DEBUG置低,***自动进入调试模式,之后指令寄存器中移入4'b0011,执行go指令,***由调试状态回到正常工作状态。
在实施例2中,***在非安全模式下,通过JTAG调试接口控制单元发出request请求信号,内核在执行完当前指令后,进入调试状态,之后指令寄存器移入指令4'b0100,执行指令Debug_Register,选择调试接口寄存器,配置断点、观察点、单步调试等调试信息;最后令寄存器中移入4'b0011,执行go指令,***由调试状态回到正常工作状态。
在实施例3中,***在非安全模式下,内核输出pc值,即当前执行指令的地址与断点寄存器地址匹配,通过触发断点进入调试状态,内核在执行完当前指令后,进入调试状态;之后执行单步调试操作,指令***操作;最后指令寄存器中移入4'b0011,执行go指令,***由调试状态回到正常工作状态。
在实施例4中,***在非安全模式下,内核访问外部数据存储器,且当前执行的地址和数据与断点寄存器地址和数据匹配,通过触发观察点进入调试状态,内核在执行完当前指令后,进入调试状态;之后根据调试需要访问内部ram、外部数据存储器或特殊功能寄存器;最后指令寄存器中移入4'b0011,执行go指令,***由调试状态回到正常工作状态。
***进入调试模式的同时,采用门控时钟和多路选择器进行时钟切换,内核和外设的时钟被门控,内核停止指令执行,调试模块输出状态位有效信号,重新给外设时钟驱动,这时外设时钟为调试时钟TCK。
***进入调试模式后,根据调试需要选择单步调试、内核执行等不同的调试过程,下面将结合图3,对单步调试和内核执行的过程进行详细说明。
在实施例5中,***进入调试模式之后,进行单步调试操作,具体步骤如下:
在步骤S101中,***进入调试状态后,指令寄存器移入指令4'b0100,执行指令Debug_Register,选择调试接口寄存器,单步调试控制寄存器移入“1”,调试模块发起单步调试命令。
在步骤S102中:调试模块输出单步执行时钟使能信号,作为调试时钟TCk门控控制信号,其输出作为内核时钟输入;
在步骤S103中:内核与程序存储器重新建立起连接关系;内核与内部ram、外部数据存储器、外设也重新建立连接关系;
在步骤S104中:内核根据pc值,从程序存储器取指令,开始执行指令,这时pc值按照程序运行正常变化;
在步骤S105中:当该条指令执行完,调试模块检测到指令执行完毕标志;调试模块停止调试时钟输出到内核,内核程序运行停止,同时内核与程序存储器断开连接,单步调试操作完成。
在实施例6中,***进入调试模式之后,进行指令***操作,具体步骤如下:
在步骤S201中,***进入调试状态后,指令寄存器移入指令4'b0100,执行指令Instruction_Insert,这时扫描链1连接至TDI和TDO之间。
在步骤S202中,根据***指令的二进制编码长度,决定采用专用扫描链,***指令MOV9aH,#55H。
在步骤S203中,指令输入扫描链完成update操作后,调试模块输出指令***时钟使能信号,作为调试时钟TCK门控控制信号,其输出作为内核时钟输入;
在步骤S204中,与此同时,内核与内部ram、外部数据存储器、外设重新建立连接关系;
在步骤S205中,当该级流水线执行完毕,调试模块检测内核执行停止标志;调试模块停止调试时钟输出到内核,内核程序运行停止,同时内核与内部ram、外部数据存储器、外设断开连接;
在步骤S206中,按TAP控制器控制,依次移入8’h99并重复步骤S203至S205,接下来按TAP控制器控制,依次移入8’h55,并重复步骤S203至S205。
在步骤S207中,重复上述步骤,直至所有指令***完毕,最后查看指令执行结果,完成指令***操作。
在***进入调试模式之后,可选的,还可以进行内核执行、外部数据存储器调试、特殊寄存器调试或内部寄存器调试等操作。
在实施例7中,***进入调试模式之后,对外部数据存储器进行调试,具体的,
首先,***进入调试状态后,指令寄存器移入指令4'b0110,执行指令DM_Control,这时扫描链2连接至TDI和TDO之间,扫描链2长度为34,16位外部数据存储器地址,8位数据输出位,8位数据输入位,1位读信号,1位写信号;
其次,按TAP控制器控制,执行capture操作,通过capture得到指令执行结果,即读取对外部数据存储器执行读写操作结果;
接下来,按TAP控制器控制,执行shift操作,按位依次移入数据,8bit数据输出8′hbd,写操作有效,地址16′h1234,数据输入8′ha2;
最后按TAP控制器控制,执行update操作,完成对外部数据存储器写操作,外部数据存储器地址16′h1234,写入8′ha2,完成调试。
在实施例8中,***进入调试模式之后,对特殊功能寄存器进行调试,具体的,
首先,***进入调试状态后,指令寄存器移入指令4'b0111,执行指令SFR_Control,这时扫描链3连接至TDI和TDO之间,扫描链3长度为28,8位sfr地址,8位sfr数据输出位,8位sfr数据输入位,1位读信号,1位写信号;
其次,按TAP控制器控制,执行capture操作,通过capture得到指令执行结果,即读取对特殊功能寄存器执行读写操作结果;
接下来,按TAP控制器控制,执行shift操作,按位依次移入数据,8bit数据输出8′ha9,写操作有效,地址8′hb2,数据输入8′hbf;
最后按TAP控制器控制,执行update操作,完成对特殊功能寄存器写操作,地址8′hb2,写入8′hbf,控制外设工作状态,完成调试。
在实施例9中,***进入调试模式之后,对内部寄存器进行调试,具体的,
首先,***进入调试状态后,指令寄存器移入指令4'b1000,执行指令Iram_Control,这时扫描链4连接至TDI和TDO之间,扫描链4长度为26,8位内部ram地址,8位数据输出位。8位数据输入位,1位读信号,1位写信号;
其次,按TAP控制器控制,执行capture操作,通过capture得到指令执行结果,即读取对内部ram执行读写操作结果;
接下来,按TAP控制器控制,执行shift操作,按位依次移入数据,8bit数据输出8′ha9,写操作有效,地址8′he5,数据输入8′h9f;
最后按TAP控制器控制,执行update操作,地址8′he5,写入8′h9f完成对内部ram写操作。
以上公开仅为本发明的具体实施例,但本发明的保护范围并不局限于此,任何本领域的技术人员能思之的变化都应属于本发明的保护范围内。