微处理器与调试系统 本发明涉及一个微处理器与调试系统。该系统具有跟踪程序计数器的功能和通知外部预设置地址或已被存取的数据的功能。
图1是根据现有技术实现的调试系统,称为内部电路仿真器。
该系统包括:用户目标系统500和用于调试目标系统500的调试器505,目标系统500含有微处理器501,存贮器503以及输入输出部件502,调试器含有调试微处理器506与监控程序存贮器507。
为调试目标系统500,要移去或禁止微处理器501工作,而调试器505的插针连到微处理器501,使得微处理器506能代替微处理器501的操作。使微处理器506执行贮存在存贮器507的监控程序,以实现对保存在存贮器503中的用户程序的控制。
微处理器506执行用户程序,并存取存贮器503的数据与输入输出部件502。调试器505含有跟踪存贮器508,使得微处理器506能够提供关于内部状态的跟踪信息。例如,可以提供通常微处理器501经处理器总线504不能提供的程序计数器的数值。
然而,图1的现有技术必须把目标系统500中的微处理器501的所有引线连到调试器505。例如,微处理器501有70条引线,用于30条地址信号线、4条字节允许信号线。1条读信号线,1条写信号线、1条读确认信号线。1条写确认信号线和32条数据信号线。调试器505具有用于这些引线的插针,成本昂贵,且工作不稳定。为了能存取目标系统500的存贮器503和调试器505的存贮器507,微处理器506必须从一组总线转换到另一组总线,因而,不能应用于高速微处理器。
如果目标微处理器具有外围元件,并且可能有不同的引线排列,这样,调试器必须具有同样引线排列的探针。当调试器505的探针连到目标系统500时可能影响和使得目标系统500信号不稳定。
图2是根据另一种现有技术实现地调试系统,称为只读存贮器监控程序。
用户目标系统510具有一个连到宿主机517的串行接口,存贮器513贮存监控程序514,微处理器511执行监控程序,访问存贮器514、输入输出部件515和寄存器516,使用软件断点指令执行和控制用户程序。
这种现有技术,借用用户存贮器513贮存监控程序514。如果目标系统510的存贮系统不完善,则监控程序514本身也将不稳定。如果存贮器513的容量较小,则将没有存放监控程序514的空间。由于监控模式是由用户中断启动,则某些程序将不能被调试。虽然安装在目标系统510上的串行接口512对于调试是必不可少的,但调试之后,则不再使用。这种现有技术的调试性能不好,因为它没有硬件断点也不能跟踪程序计数器。
图3仍然是根据另一种现有技术的调试系统。
用户目标系统520具有微处理器521,该微处理器含有串行接口526和定序器525。串行接口526与调试工具529通信。调试工具529向接口526发送信号,而定序器525对信号进行解释,为了影响信号,定序器525暂停用户程序的执行,存取寄存器528使用总线控制器527存取输入输出部件523和存贮器524,并控制用户程序。串行接口526通常不能与宿主机530直接通信。因此,调试工具529要把来自宿主机530的命令转换成微处理器521能理解的信号,而把来自微处理器521的信号转换成宿主机530能理解的数据格式。
微处理器521含有必须访问微处理器521和调试工具529的定序器525。这样,这种现有技术由于采用复杂的连接逻辑,而使芯片面积增加。如果目标系统520要提供复加的寄存器,由于复杂的工作,必须相应地修改定序器525。这种现有技术不能跟踪程序计数器。
如上所述,这些现有技术不能跟踪程序计数器,即使他们能够跟踪,他们必须通过处理器总线,在调试处理器与目标系统之间连接许多信号。根据图1的现有技术,调试程序505的微处理器506必须访问存贮器503和目标系统500中的输入输出部件502,其困难在于控制这些存取操作的时序。
图2的现有技术是在用户存贮器513中存放监控程序,它减少用户存贮的空间。用这种现有技术进行调试是不可靠的和不充分的。
图3的现有技术是在目标系统520中的微处理器521中包含定序器525,对来自调试工具529发送的信号进行解释并执行。换句话说,这种现有技术涉及目标系统与调试工具之间的复杂的连接。如果要修改处理器521,则要做复杂的工作,对定序器525进行修改。
图2和图3的现有技术均没有触发功能。虽然图1的现有技术在调试微处理器506可能有触发功能,但也要有用于提供触发信息的附加信号。
本发明的目的在于提供一个配置在用户目标系统中的微处理器,用于以目标系统与调试器之间的少量信号实现调试功能。
本发明的另外目的在于提供一个配置在用户目标系统中的微处理器,借助在目标系统上微处理器的操作,方便地存取目标系统的存贮器和输入输出部件。实现调试功能。
本发明的其它目的在于提供一个配置在用户目标系统中的微处理器,以少量的信号实现跟踪程序计数器的调试功能。
本发明的其它目的还在于提供一个配置在用户目标系统中的微处理器,以最少的硬设备通过共享地址、通过带有硬件断点功能和触发功能的数据比较器、以及共享具有程序计数器信息和触发器信息的输出信号,实现调试功能。
为了达到这些目的,本发明的第一部分是提供一个具有处理器内核(代码块)和调试模块的微处理器。处理器内核执行用户程序以及用于调试用户目标系统的监控程序。调试模块通过内部调试接口和处理器总线连到处理器内核。调试模块具有一个接口,通过它处理机内核执行保存一个在调试工具内的监控程序,调试模块还有一个用于向处理器内核发出中断和异常请求的运行控制器,用它把处理器内核从用户程序切换到监控程序。
本发明第二部分是提供一个调试系统,在此系统中,调试工具存放用于调试用户目标系统的监控程序。目标系统包括:微处理器、存贮器和输入输出部件。微处理器具有处理器内核及调试模块。处理器内核执行用户程序或监控制序。调试模块通过内部调试接口和处理器总线连到处理器内核,而通过外部调试接口连到调试工具。调试模块的接口能使得处理器内核执行监控程序。调试模块还有用于向处理器内核发出中断和异常请求的运行控制器,用它把处理器内核从用户程序切换到监控程序。存贮器通过处理器总线与微处理器相连,并贮存对于微处理器执行用户程序所必要的信息。输入输出部件通过处理器总线连到微处理器。
根据第一部分和第二部分的考虑,目标系统的微处理器具有调试功能,并减少了目标系统与调试工具之间信号的数量。在调试期间,第一方面和第二方面操作微处理器,并能方便地存取目标系统的存贮器和输入输出部件。
本发明第三部分的考虑是提供一个具有能用于执行程序的处理器内核和能跟踪程序计数器的跟踪器的微处理器。跟踪器通过内部调试接口被连到处理器内核,提供一个能表示处理器内核将要执行的指令地址的程序计数器信号。用于传送输出信号的信号数量要少于指令地址的位数。
根据第三部分的考虑,目标系统的微处理器具有调试功能,并能削减用于跟踪程序计数器接口信号的数目。
本发明的第四部分考虑的是提供一个具有用于运行程序的处理器内核、断点电路和程序计数器跟踪器的微处理器。当存贮的地址与设置的地址相符合、或当被存取的地址和数据与设置的地址和数据相符合,则断点电路向处理机内核提供断点请求和触发请求。跟踪器提供一个触发请求已被允许的外部状态信号信息。
根据第四部分的考虑,目标系统的微处理器具有调试功能,硬件断点功能和触发功能共享地址比较器,使用跟踪器的输出提供触发信号,将硬件减至最低限度。
从下述完美实施方案的描述,连同附图一起考虑本发明的这些以及其它的目的、特征和优点将更加明显。
图1是根据现有技术用于调试用户目标系统的一个调试系统。
图2是根据另一现有技术用于调试用户目标系统的一个调试系统。
图3是根据其它类似现有技术用于调试用户目标系统的一个调试系统。
图4是根据本发明的一个实施方式的调试系统和微处理器。
图5是图4实施方式的调试模块。
图6是图4实施方式的寄存器电路。
图7是图6中寄存器电路的调试控制寄存器(DCR)。
图8是图6中寄存器电路的指令,断点地址0寄存器(IBA0)。
图9是图6的寄存器电路的指令断点控制0寄存器(IBC0)
图10是图6的寄存器电路的指令断点状态寄存器(IBS)。
图11是图6的寄存器电路的数据断点地址0寄存器(DBA0)
图12是图6的寄存器电路的数据断点控制0寄存器(DBC0)
图13是图6的寄存器电路的数据断点状态寄存器(DBS)。
图14是图6的寄存器电路的处理器总线断点地址0寄存器(PBA0)。
图15是图6的寄存器电路的处理器总线断点数据0寄存器(PBD0)。
图16是图6的寄存器电路的处理器总线屏蔽0寄存器(PBM0)。
图17是图6的寄存器电路的处理器总线控制0寄存器(PBC0)。
图18是图6的寄存器电路的处理器总线断点状态寄存器(PBS)。
图19是图5的调试模块的指令/数据地址断点电路。
图20是图5的调试模块的处理器总线断点电路。
图21是图5的调试模块的串行监控总线电路。
图22是串行监控总线电路读操作的时间图。
图23是串行监控总线电路写操作的时间图。
图24是根据指令CFC0的串行监控总线电路读操作的时间图。
图25是根据指令CTC0的串行监控总线电路写操作的时间图。
图26是图21串行监控总线电路的操作流程图。
图27是串行监控总线电路的读操作流程图。
图28是串行监控总线电路的写操作流程图。
图29是图5调试模块的程序计数器跟踪器。
图30是根据转移指令程序计数器输出的时间图。
图31是根据间接跳转指令程序计数器输出的时间图。
图32是根据异常和间接跳转指令的程序计数器输出的时间图。
图33是指令/数据地址跟踪触发器的时间图。
图34是响应异常产生指令,产生的指令/数据地址跟踪触发器的时间图。
图35是响应间接指令,产生的指令/数据跟踪触发器的时间图。
图36是当调试异常发生时,输出信号PCST〔2:0〕的时间图。
图37是当调试异常发生,同时提供目标程序计数器的输出时,信号PCST〔2:0〕的时间图。
图38是调试方式之后,正常方式被恢复时,信号PCST〔2:0〕的时间图。
图39是目标程序计数器的输出时间图。
图40是在给出目标程序计数器输出的同时,下一条出现间接转移的时间图。
图41是在给出目标程序计数器输出的同时,发生异常的时间图。
图42是图5调试模块的外部接口电路。
图43是扩展的IBS寄存器。
图44是根据本发明的一个实施方式的调试系统。
图4是根据本发明的一个实施方式的调试系统和微处理器。
调试系统具有用户目标系统70和调试器60。
目标系统70具有微处理器10、存贮器40和输入输出部件50。微处理器10具有调试功能。
微处理器10具有处理机内核20和调试模块30。处理机内核20通过处理机总线80存取存贮器40和输入/输出部件50并执行程序。处理机内核20通过内部调试接口和处理机总线80被连到调试模块。调试模块30通过外部调试接口被连到调试器60。
调试系统用调试方式执行监控程序;用正常方式执行用户程序。
〔调试方式〕
处理机内核20产生调试异常,或者产生调试复位以启动调试方式。处理机内核20跳转到调试异常向量地址FF20-0200或者跳转到调试复位向量地址FF20-0000并设置(assert)调试方式信号DM。通过这些向量地址在调试器60中访问存贮器。处理机内核20通过调试模块30去执行存放在调试程序60中的监控程序。监控程序通过指定用户程序首地址和末地址以及对存贮器和寄存器读、写执行和控制用户程序。处理机内核20可以通过执行返回指令返回到正常方式并执行用户程序。这样,处理机内核20跳转到由返回指令所指定的地址,并对调试方式信号DM取反。
〔正常方式〕
在正常方式下,调试系统执行用户程序,同时,跟踪程序计数器。通过产生一个调试异常,或者通过硬件断点、软件断点或调试中断产生的用于处理机内核20的调试复位信号可以使调试系统从正常方式转换到调试方式。
在正常方式下,能够对程序计数器跟踪功能、硬件断点功能、软件断点功能、调试中断功能、调试复位功能和跟踪触发的功能进行解释。
当处理机内核20执行存放在存贮器40的用户程序的同时,程序计数器跟踪功能对程序计数器中的值进行跟踪。在处理机内核20执行用户程序时,程序计数器信息被发送到内部调试接口,调试模块30处理该信息并通过外调试接口将已处理的信息送到调试器60。
当有预设定地址的指令在执行、或当预设定地址的数据被存取时,硬件断点功能产生一个调试异常,使得处理机内核20执行监控程序。更确切地说,就是调试模块30对处理机内核20执行的指令的地址与存放在调试模块30的地址进行比较、或者把处理机内核20存取数据的地址与存放在调试模块30的数据地址进行比较,或是把处理机20提供的数据与存贮在调试模块30的数据进行比较,如果他们之间彼此符合,调试模块向处理机20发出调试异常请求或调试中断请求。
软件断点功能产生一条导致调试异常的软件断点指令,使得处理机内核20执行监控程序。
调试中断功能设置一个产生调试异常的调试中断信号,使得处理机内核20执行监控程序。
调试复位功能设置一个使调试复位的调试复位信号,对处理机内核20和调试模块30的内部状态初始化。然后,处理机内核20进行调试方式,并从调试复位向量地址FF20-0000,启动调试程序。
跟踪触发功能使得微处理器10发出一个表明有预设定地址的指令执行或预设定地址的数据被存取的外部信号。为了响应该信号,调试器60接通/关断程序计数器跟踪功能。在调试模块30把被处理器内核20执行的指令地址与存贮在调试模块30的指令地址进行比较,或把被处理器内核20存取的数据的地址与存贮在调试模块30的数据地址进行比较,或是把从处理器内核20发送到内部调试接口和处理机总线80的数据与存贮在调试模块30的数据进行比较之后,如果它们之间彼此相符合,向调试器60提供触发器信息,实现跟踪触发功能。
调试模块30的详细说明。
图5是调试模块30的内部框图。
调试模块30有指令/数据地址断点电路31、程序计数器跟踪器32、处理机总线断点电路33、串行监控总线电路34、寄存器电路35、外部接口电路36和时钟发生器37。
指令/数据地址断点电路31通过内部调试接口连到处理机内核20。电路31把处理机20提供的指令地址与设置在寄存器电路35的指令地址比较,如果他们相符合,向处理器内核20提供指令地址断点异常请求。电路31还把处理器内核20提供的数据地址与设置在寄存器电路35的数据地址进行比较,如果他们彼此相符合,向处理器内核20提供一个数据地址断点异常请求。
程序计数器跟踪器32通过内部调试接口连到处理机内核20,对处理机内核20提供的程序计数器的跟踪信息进行处理,并将已处理的信息提供给外部接口电路36。
处理机总线断点电路33通过处理器总线80连到处理机内核20。电路33监控在处理机总线80的总线周期,当用于设置在寄存器电路35的地址和数据的总线周期执行时,向处理机内核20发出异常请求。
串行监控总线电路34通过处理器总线80连到处理器内核20,并且当处理器内核20执行调试器60的监控程序时,起接口作用。
寄存器电路35包括控制调试模块30各种功能的控制寄存器。寄存器35通过处理器总线80和内部调试接口连到处理机内核20,使得处理机20能够读、写控制寄存器的内容。为了控制调试功能,控制寄存器的内容被送到调试模块30的各个单元和处理机内核20。
外部接口电路36作为程序计数器跟踪器32和调试模块30的串行监控总线电路34和处理器内核20与调试器60的接口。
时钟发生器37对时钟信号CLK分频,并向串行监控总线电路34提供时钟信号CLK2。
〔外部信号〕
调试模块30采用下面8种专用的接口信号与外部调试器60通信:
1.SDAD/TPC(输出)
2.SDI/DINT*(输入)
3.DCLK(输出)
4.DRESET*(输入)
5至7、PCST〔2:0〕(输出)
8.DBGE*(输入)
(1)、调式时钟信号DCLK(输出)
这个信号是送到调试器60的时钟输出信号,用来控制串行监控总线和程序计数器跟踪接口的定时。用于串行监控总线的操作,这个信号是由处理器内核20的操作时钟信号的频率二分频形成的。
(2)、调试复位信号DRESET*(输入到上拉(pull-up)端钮)。
这个信号是低有效的信号(low-active),它的设置使调试模块30初始化,而无须考虑输入信号DBGE*。当不使用调试器60时,该信号端钮断开。
(3)、程序计数器跟踪状态信号PCST〔2:0〕(输出)
这个信号表示下列程序计数器跟踪状态和串行监控总线方式:
111:流水线失速状态(STL)
110:已获取(Taken)转移/跳转状态(JMP)(具有程序计数器输出)
101:已获取转移/跳转状态(BRT)(没有程序计数器输出)
100:异常状态(EXP)(具有异常向量码输出)
011:顺序异常状态(SEQ)(指令运行)
010:在流水线失速情况下,跟踪触发器输出状态(TST)
001:运行时,跟踪触发器输出状态(TSQ)
000:调试方式(DBM)(0:低电平,1:高电平)
(4)、调试器允许信号DBGE*(输入到上拉端钮)
这个信号指示是否调试器被连接。如果调试器60断开,信号是高;如果调试器被连接,则信号是低。
如果信号DBGE*是高,表示调试器断开,处理器内核20的信号DEV是低,并且调试异常向量地址是FF200200。用户复位信号RESET*使调试模块30的功能初始化,并且禁止调试器60的功能。这时,输出信号SDA0/TPC、DCLK和PCST〔2:0〕变成高。
如果信号DBGE*是低,则表示调试器60接通,信号DEV是高,调试异常向量地址是FF20-0200(在监控区域)。用户复信号不对调试模块30初始化。
(5)、串行数据和地址输出/目标程序计数器信号SDA0/TPC(输出)
当信号PCST〔2:0〕表示调试方式(DBM)时,这个信号做为串行数据和地址输出信号SDA0,当信号PCST〔2:0〕不表示调试方式时,则这个信号做为目标程序计器信号TPC。
当信号PCST〔2:0〕表示调试方式时,则信号SDA0以串行方式,一位一位地提供数据、地址、读/写和字节允许信号。在一个总线周期开始之前,为时钟周期提供一个低电平起始位信号。
在读操作时,按低电平起始位,地址位A〔2〕到A〔19〕,读/写位R/W*和字节允许位BE〔0〕*到BE〔3〕*的顺序提供信号。在写操作时,按低电平起始位,A〔2〕到A〔9〕,R/W*,BE〔0〕*到BE〔3〕*和数据位D〔0〕到D〔31〕。
当信号PCST〔2:0〕表示正常方式时,则信号TPC提供转移/跳转指令的目标地址以及异常/中断的向量数。目标地址从位A〔2〕到位A〔31〕顺序提供。
(6)、串行数据输入/调试中断信号SDI/DINT*(输入到上拉端钮)
当信号PCST〔2:0〕表示调试方式时,则这个信号做为串行监控总线接口信号SDI;当信号PCST〔2:0〕表示正常方式时,则这个信号做为程序计数器跟踪接口信号DINT*。
信号SDI是数据输入信号,在读操作中,当接收一个在时钟周期内为低的外部起始位时,数据输入操作从下一个时钟开始。当在写操作中有低电平输入时,则总线周期结束。
在读操作中,数据各位按低电平起始位,数据位D〔0〕到D〔31〕的顺序提供。在写操作中,仅接收低电平结束位。
信号DINT*是来自调试器60的调试中断输入信号。当不使用调试器60时,则端钮是断开的。
图6是寄存器电路35的详图。
寄存器电路35由地址译码器351和寄存器部位352组成。
地址译码器351接收经由处理器总线80从处理器内核20送来的地址输入信号A〔31:0〕、读信号RD*、写信号WR*、调试方式信号DM和内核时钟信号CLK。当读寄存器部位352的一个寄存器时,地址译码器351接收指定寄存器的设备地址码,断言一个对应于该寄存器的寄存器读信号,并断言一个送到处理器内核20的读确认信号RDACK*。
当向寄存器部件352寄存器按给定地址写入数据时,地址译码器351对应于该寄存器的寄存器写信号、读确认信号RDACK*和写确认信号WRACK*。
在正常方式下,寄存器部件352是不可存取的。这样,在读总线周期地址译码器351只设置送到处理器内核20的读确认信号RDACK*,而在写总线周期,仅设置送到处理器内核20的写确认信号WARCK*,因此,读出的值是不确定的,而写入数据也是无效的。
如果寄存器DCR的存贮保护位MP被调置,即使在调试方式下,寄存器部件352的寄存器,除了寄存器DCR外都是不可存取的。这样,在读总线周期,地址译码器351只设置读确认信号RDACK*;在写总线周期仅设置写确认信号WRACK*,因此,读出来的值是不确定的,写入的数据也无效。
表1是地址译码的操作被存取的寄存器 地址A[31:2] 读 RD* 写 WR* DM MP读确认RDACK* 写确认 WRACK*被设置的信号 DCR FF300000 低 高 高x 低 高 高 低DCR 读DCR 写 高 低 IBS FF300004 低 高 高0 低 高 高 低IBS 读IBS 写 高 低 DBS FF300008 低 高 高0 低 高 高 低DBS 读DBS 写 高 低 PBS FF30000C 低 高 高0 低 低 高 低PBS 读PBS 写 高 低 IBA0 FF300010 低 高 高0 低 高 高 低IBA0 读IBA0 写 高 低 IBC0 FF300014 低 高 高0 低 高 高 低IBC0 读IBC0 写 高 低 DBA0 FF300020 低 高 高0 低 高 高 低DBA0 读DBA0 写 高 低 DBC0 FF300024 低 高 高0 低 高 高 低DBC0 读DBC0 写 高 低 PBA0 FF300030 低 高 高0 低 高 高 低PBA0 读PBA0 写 高 低 PBD0 FF300034 低 高 高0 低 高 高 低PBD0 读PBD0 写 高 低 PBM0 FF300038 低 高 高0 低 高 高 低PBM0 读PBM0 写 高 低 PBC0 FF30003C 低 高 高0 低 高 高 低PBC0 读PBC0 写 高 低 - FF300xxx 低 高 高x 低 高 高 低 - - 高 低 - FF300004 ~ FF300FFC 低 高 高1 低 高 - 高 低 高 低 -
寄存器部件352包括调试控制寄存器(DCR)指令。断点状态(IBS)寄存器、数据、断点状态(DBS)寄存器、处理器总线断总状态(PBS)寄存器、指令断点地址0(IBA0)寄存器、指令、断点控制0(IBC0)寄存器,数据断点地址0(DBA0)寄存器、数据、断点控制0(DBC0)寄存器、处理器总线断点地址0(PBA0)寄存器、处理器总线断点数据0(PBD0)寄存器、处理器总线断点数据屏蔽0(PBM0)寄存器和处理器总线断点控制0(PBC0)寄存器。
当调试复位信号DRESET*被设置,或是当为高电平,而表示调试器60断开的信号DEGE*用户复位信号RESET*激活时,则所有寄存复位。
解释寄存器功能
图7是调试控制寄存器(DCR)
跟踪方式位TM(复位到0)
这一位规定程序计数器跟踪操作
0:实时提供程序计数器跟踪信息
1:提供完整的程序计数器跟踪信息(不保证实时操作)。
位TM被送到程序计数器跟踪器32。
屏蔽用户复位MRST(复位到0)
这一位规定用户复位屏蔽
0:调试异常时,屏蔽用户复位
1:调试异常时,允许用户复位
位MRST被送到外部接口电路36。
存贮保护位MP(复位到1)
0:在调试方式下,允许对监控区进行写操作。
1:在调试方式下,除了寄存器DCR阻止写操作之处,保护监控区域(FF20-0000到FF3F-FFFF)
位MP被送到地址译码器351和串行监控总线电路34。
屏蔽非屏蔽中断位MNmI(复位到1)
0:屏蔽处理器内核20的NmI。
1:允许NmI。
位MVmI被送到处理器内核20。
屏蔽中断位MInt(复位到1)
0:屏蔽处理器内核20的外中断(Int〔5:0〕*)
1:允许外中断(Int〔5:0〕*)
位MInt被送到外部接口电路36。
Endian存贮器位ENM。
当用户进行复位操作时,这一位表示Endian信号的值,这一位是只读位,对该位的写操作是无效的。
0:小的endian。
1:大的endian。
当用户复位信号RESET*为低,在内核时钟信号上升沿,通过锁存endian信号形成位ENM。
暂停状态位HIS
当信号DINT*有效,这一位表示暂停信号的值。位HIS是只读位,对这一位的写操作是无效的。
0:非暂停状态
1:暂停状态
通过在调试中断信号DINT的上升沿锁住暂停信号形成HIS位。
打盹(doze)状态位DZS。
当信号DINT*有效这一位表示打盹信号的值。该位是只读位,对这一位的写操作是无效的。
0:非打盹状态
1:打盹状态
在调试中断信号DINT*的下降边锁存打盹信号形成位DZS。
图8是指令断点地址0寄存器IBA0。
指令断点地址字段IBA。
寄存器IBA0的字段存贮指令断点地址,它是虚拟地址。字段IBA送到指令/数据地址断点电路31。
图9是指令断点控制0寄存器IBC0。
断点允许位BE(复位到0)
这一位规定指令地址断点功能的有效性。
0:禁止指令地址断点功能。
1:允许指令地址断点功能。
如果将被运行的指令的虚拟地址与设置在寄存器IBA的地址相符合,且当位BE为1,则向处理器内核20发出指令断点请求,使寄存器IBS的位、BS0置位。(处理器内核20产生指令地址断点异常,刚好在运行的指令地址符合之前)位BE送往到断点电路31。
跟踪触发允许位TE(复位置0)。
这一位表示指令地址跟踪触发功能的有效性。
0:禁止指令地址跟踪触发功能
1:允许指令地址跟踪解发功能。
如果被运行的指令的虚拟地址与寄存器IBA0地址设置相符合,并且表明允许指令地址跟踪触发功能的位TE为1,则信号PCST〔2:0〕代表跟踪触发的输出状态TST(0/0)或TSQ(001),使得寄存器IBS的位BSO置位。位TE送往断点电路31。
图10是指令中断状态寄存器IBS
中断通道号字段BCN
该字段表示一个指令断点的通道号。它是只读字段,对该字段的写操作将是无效的。
0000:空(保留)
0001:1个通道:
1111:15个通道(保留)
断点状态0位BS0
这是一个表明产生指令地址、断点或指令地址跟踪触发的状态位。
0:无指令地址断点,也没有通道0的指令地址跟踪触发。
1:指令地址断点异常的发生或指令地址跟踪触发并且寄存器IBC0中位BE为1或TE为1
则表明指令的虚地址与设置地址相符合。
通过向BS0写0将BS0清除。当一个从断点电路31发出的BS0置位信号被调置则BS0被置位。
图11是数据断点地址0寄存器DBA0
数据断点地址字段DBA。
该字段存放一个数据断点地址,这个地址是虚地址。这个字段送往断点电路31。
图12是数据断点控制0寄存器PBC0。
断点允许位BE(复位置0)
这个位规定数据地址断点功能的有效性。
0:禁止数据地址断点功能。
1:允许数据地址断点功能
若被存取的数据的虚地址与在寄存器DBA0中设置的地址相符合且寄存器DBA0的位BE为1,将产生一个数据断点请求送往处理器内核20,并置位寄存器DBS的位BS0。位BE被送往断点电路31。
跟踪触发允许位TE(复位置0)
这个位规定数据地址跟踪触发功能的有效性。
0:禁止数据地址跟踪触发功能
1:允许数据地址跟踪触发功能
若被存取的数据的虚地址与寄存器DBA0中设置的地址相符合,并且位TE为1,则表明允许数据地址跟踪触发功能。信号PCST〔2:0〕表示跟踪触发输出状态TST(0/0)或TSQ(001),并且寄存器DBS的位BS0被置位。位TE被送往断点电路31。
图13是数据断点状态寄存器DBS。
断点通道号字段BCN
该字段表明数据断点的通道号。它是只读的,对该字段的写操作是无效的。
0000:空(保留)。
0001:1个通道。
1111:15个通道(保留)
断点状态0位BS0。
这是一个表明一个数据地址断点或数据地址跟踪触发已经发生的状态位。
0:没有数据地址断点或通道0的数据地址跟踪触发。
1:在数据的虚地址与设置地址相符合,并且位BE为1或寄存器DBC0中的TE为1时发生了数据地址断点异常或数据地址跟踪触发。
通过向BS0写0将BS0清除。当从断点电路31发出的BS0置位信号被设置后,BS0被置位。
图14是处理器总线断点地址寄存器PBA0。
处理器总线断点地址字段PBA。
该字段存储处理器总线断点跟踪触发功能的断点地址。这个地址是物理地址。该字段PBA被送往处理器总线断点电路33。
图15是处理器总线断点数据0寄存器PBD0。
处理器总线断点数据字段PBD。
该字段存放处理器总线断点/跟踪触发功能的断点数据。字段PBD被送往处理器总线断点电路33。
图16是处理器总线屏蔽0寄存器PBM0。
处理器总线断点数据屏蔽字段PBM。
该字段表示禁止(屏蔽)某些存储在寄存器PBD0中的数据比较的位。这些位是根据处理机总线断点/跟踪触发功能而设置的位。
0:允许寄存器PBD0中的相应位进行比较。
1:禁止寄存器PBD0中的相应位进行比较。
字段PBM被送往处理器总线断点电路33。
图17是处理器总线控制0寄存器PBC0。
断点允许位BE(复位置0)
这一位规定处理器总线断点的有效性。
0:禁止处理器总线断点。
1:允许处理器总线断点。
若一个地址和数据与设置的值相符合,则一个调试中断请求被发送给处理器内核20,位BE被送往处理器总线断点电路33。
跟踪触发器允许位TE(复位置0)。
该位规定一个处理器总线跟踪触发的有效性。
0:禁止处理器总线跟踪触发。
1:允许处理器总线跟踪触发。
若一个地址和数据与设置的值相符合,那么信号PCST〔2:0〕代表跟踪触发输出状态TST(0/0)或TSQ(001)。位TE被送往处理器总线断点电路33。
从非高速缓存区取指令位IFUC。
该位规定一个地址和数据是否和设定值比较,用于从非高速缓存区取指令。
0:禁止比较。
1:允许比较
位IFUC被送往处理器总线断点电路33。
从非高速缓存区数据加载位DLUC。
该位规定高速缓存区加载的数据是否进行地址和数据的比较。
0:禁止比较。
1:允许比较。
位DLUC被送往处理器总线中断电路33。
存储数据到非高速缓存区位DSUC。
该位表示当数据被存储到非高速缓存区时,是否进行地址和数据的比较。
0:禁止比较。
1:允许比较。
位DSUC是被送往处理器总线断点电路33。
存储数据到高速缓存区位DSCA。
该位规定当数据被存储到高速缓存区时,是否进行地址和数据的比较。
0:禁止比较。
1:允许比较。
位DSCA被送往处理器断点电路33。
图18是处理器总线断点状态寄存器PBS。
断点通道号字段BCN。
该字段规定处理器总线断点的通道号。
0000:0通道(保留)。
0001:1通道
1111:15通道(保留)
断点状态0位BS0(复位置0)
这是一个表示是否发生了处理器总线断点或一个处理器总线跟踪触发的状态位。
0:没有通道0的处理器总线断点或处理器总线跟踪触发。
1:通道0的处理器总线断点或处理器总线跟踪触发,且BE是1或在寄存器PBE0中位TE被置1。
通过向BS0写0将它清除。若位BE为1,到处理器内核20的断点调试请求也被清除。当一个从处理器总线断点电路33发出的BS0置位信号被设置,位BS0被置位。
图19是指令/数据地址断点电路31,该电路具有一个指令地址比较器311、一个数据地址比较器312和“与”电路313、314、315和316。
若断点允许位BE或寄存器IBC0中的触发允许位TE被置位,并且一个从处理器内核20发出的指令地址允许信号被设置,那么,比较器311将从处理器内核20来的输入指令地址和存储在寄存器IBA0中的地址进行比较。若它们符合,则比较器311给寄存器IBS中的位BS0提供一个信号使它置位,若寄存器IBC0中的BE位在这时置位,“与”电路313的输出被设置,则提供给处理器内核20一个指令地址断点请求。若寄存器IBC0的TE位被置位,“与”电路314的输出被设置,则提供给程序计数器跟踪器32一个指令地址跟踪触发请求。
若寄存器DBC0的位BE或TE被置位,并且若一个从处理器内核20发出的数据地址允许信号被设置,那么,比较器312对从处理器内核20发出的输入数据地址与存储在寄存器DBA0中的地址进行比较。若它们相符合,比较器312提供一个信号来置位寄存器DBA0中的位BS0。若寄存器DBC0中的位BE在这时置位,“与”电路315的输出被设置,则提供一个数据地址中断请求给处理器内核20。若寄存器DBC0的位TE被置位,“与”电路316的输出被设置,则提供一个数据地址跟踪触发请求给程序计数器跟踪器。
图20是处理器总线断点电路33的详图。
电路33监控处理器总线的总线操作,并且若在寄存器中发生了用于地址和数据设置的总线操作,电路33则提供一个调试中断请求给处理器内核20。
电路33具有一个处理器总线地址比较器331,一个带有屏蔽的数据比较器332和“与”电路333,334和335。
当寄存器PBC0的断点允许位BE或触发允许位TE被置位,比较器331将处理总线中的地址和在设置在寄存器PBA0中的地址进行比较。寄存器PBC0的位DSCA,DSUC,DLUC和IFUC规定关于非高速缓存区/高速缓存区、存储数据/加载数据和指令获取的比较的有效性。表2是比较器331的操作。它们是根据信号ID(指示是否为指定获取或数据存取),读信号RD*,写信号WR*,和信号CACHE*而进行的。
表2 存取类型 I D R D * W R * C A C H E * 处理器总线 地址 -(PBA0) I F U C D L U C D S U C D S C A比较器输出 读 (地址不匹配)X L H X 不匹配 X X X X L 写 (地址不匹配)X H L X 不匹配 X X X X L从非高速缓存区的指令获取HL H H 匹配 1 X X X H 0 X X X L从非高速缓存区的数据加载L L H H 匹配 X 1 X X H X 0 X X L存储数据到非高速缓存区L H L H 匹配 X X 1 X H X X 0 X L存储数据到高速缓存区L H L L 匹配 X X X 1 H X X X X L
在读信号RD*为低的读总线周期中,数据比较器332将从处理器总线80输入的数据DIN〔31:0〕和在寄存器PBD0中存储的数据进行比较,它只比较那些在寄存器PBM0中相应位为0的位。在写信号WR*为低的写总线周期中,比较器332将处理器总线80的输出数据DOUT〔31:0〕和在寄存器PBD0中存储的数据进行比较。它只比较在寄存器PBM0中相应位为0的那些位。
若比较器331和332的每个输出均为高,亦既,如果地址和数据与设置的地址和数据相符合。“与”电路333的输出被设置,则请求寄存器电路35设置寄存器PBS的位BS0。若这时寄存器PBC0的位BE被置位,“与”电路334的输出被设置,则提供给处理器内核20一个调试中断请求。若寄存器PBC0的TE位被置位,则“与”电路335的输出被设置,发出处理器总线跟踪触发请求给程序计数器跟踪器32。
图21是串行监控总线电路34的详图。电路34具有一个串行监控总线控制器341,一个串行输出电路342和一个串行输入电路343。
串行监控总线控制器341以处理器总线80接收数据输出信号DOUT〔31:0〕、地址信号A〔31:20〕、读信号RD、写信号WR*、协处理器读信号CPRD*、协处理器写信号CPWR*和调试方式信号DM、控制器341也接收来自时钟发生器37产生的时钟信号CLK2、寄存器电路35的寄存器DCR的MP位以及外部接口电路产生的信号SDI。
控制器341向处理器总线80提供一个读确认信号RDACK*。写确认信号WRACK*。协处理器读确认信号CPRDACK*、和协处理器写确定信号CPWRACK*、控制器341向串行输出电路342提供一个串行监控总线读/写信号,串行监控总线字节允许信号、串行监控总线数据信号、和用于电路342的输出移位寄存器的数据加载信号和输出移位信号,控制器341向串行输入电路343提供用于输入移位寄存器345的输入移位信号和用于输出缓冲区346的输出允许信号。串行监控总线读/写信号在读总线操作期间为高,在写总线操作期间为低。
当一个从控制器341到输出移位寄存器344的数据加载信号被设置,一个起始位(固定值为低)、地址位A〔1〕到A〔19〕,串行监控总线读/写信号,串行监控总线字节允许信号,串行监控总线数据信号被从LSB加载到输出移位寄存器344。当到寄存器344的输出移位信号被设置,寄存器344中的值以MSB向LSB移动一位。MSB被置为高。输出移位寄存器344的LSB的值由输出信号SDA0来进位。
当从控制器341到输入移位寄存器345的输入信号被设置,寄存器345的值从LSB向MSB移动一位,输入信号SDI的值被置于LSB中。
图21中的串行监控总线电路34的操作将被解释如下:
当处理器内核20在调试方式下存取从0XFF200000到0XFF2F-FFFF这个区域;或当协处理器在调试方式下执行读/写操作(CTC0,CFC0),通过串行监控总线电路34存取调试器60中的存储器。使用串行监控总线的写操作期间。电路34以串行方式一位一位地提供一个地址信号,一个总线控制信号和一个数据信号做为输出信号SDA0在读操作期间,电路34以串行方式一位一位地提供一个地址信号,一个总线控制信号做为输出信号SDA0。并接收通过输入信号SDI进位的数据。
串行监控总线电路34的操作按照时钟信号CLD2进行。CLK2是通过将处理器内核20的操作时钟信号CLK进行一次分频得到的。
a)通过读/写总线操作存取
在读总线操作期间,处理器内核20提供地址A〔31:0〕来存取和设置信号RD*、当读确认信号RDACK*被设置时,数据DIN〔31:0〕被读出并且总线操作结束。
在写总线操作期间,处理器内核20发送一个存取地址A〔31:0〕和一个要写入的数据〔31:0〕并设置信号WR*。当写确认信号WRACK*被设置时,总线操作结束。
若在调试方式下,处理器内核20对下面提到的监控区域执行总线操作,那么调试器60通过串行监控总线电路34被访问。
监控区域在0XFF20-0000与0XFF2F-FFFF之间扩展了1兆。
(A〔31:20〕)=1111-1111-0010(0:低,1:高)
例如,写总线操作用存储指令(SW)操作将数据写入存储器。下面是一个存储指令的例子:
SW r8 0X0004(r9)
在这个例子中,一个存储器地址是通过向通用寄存器r9加一个16位偏移量0X0004来获得。要访问监控区域,通用寄存器的值必须提前设置到0XFF20-0000到0XFF2F-0000之间。
串行监控总线电路34,从低位中提供地址信号A〔19:2〕,在读操作期间提供高电平信号或在写操作期间提供低电平信号作为输出信号SDA0。此后,字节允许信号BE〔3:0〕*从低位开始提供。在读操作期间,32位数据做为输入信号SDI被接收,并以数据DIN〔31:0〕提供给处理器总线80。在写操作期间,从处理器总线80来的数据D0UT〔31:0〕由输出信号SDA0来进位。
从处理器内核20来的18位地址信号A〔19:2〕、用来存取1兆的内存空间。
处理器内核20的字节允许信号BE〔3:0〕送到串行监控总线,用以存取一个字节、半个字或三个字节,即使是进行字节、半字或三字节访问时,串行总线仍然传送32位的数据D〔31:0〕。当写字节、半字或三字节数据时,信号BE〔3:0〕中与数据D〔31:0〕中有用字节对应的位将被设置。在进行读操作时,与信号BE〔3:0〕中非有效位对应的字节将被微处理器内核20忽略。
如果DCR寄存器的MP位为1,监控区处于调试方式的保护之下,则对从FF20-0000到FF2F-FFFF区域内的写操作将被忽略。在这种情况下,串行监控总线电路34只向微处理器内核20返回WRACK*信号,用以终止总线操作。
在调试方式下,当读取FF20-0000至FF2F-FFFF区的数据时,将从串行监控总线得到正确的数值,而不必考虑MP位的值。
在正常方式下,对FF20-0000至FF2F-FFFF监控区的写操作将被忽略,而且读操作的结果是不确定的。此时串行监控总线电路34返回WRACK*或RDACK*信号到处理器内核20并结束总线操作。
b)协处理器总线操作的存取(CTC0/CFC0)
当执行CFC0指令时,处理器内核20执行协处理器的读总线操作,而执行CTC0指令时,是协处理器的写总线操作。在协处理器总线操作时,CFC0和CTC0指令被提供给处理器总线的地址A〔31:0〕,如下所示:
A〔31:0〕COP0 CT rt rd 0
A〔31:0〕COP0 CF rt rd 0
CFC0(0:低电平,1:高电平)
rt:通用寄存器
rd:协处理器的控制寄存器(对于串行监控无意)
在协处理器读操作时,处理器内核20设置CPRD*信号,而当协处理器读确认信号CPRDACK*被设置时,读取数据DIN〔31:0〕并结束总线操作。
在协处理器写操作时,处理器内核20设置CPWR*信号,并提供一个处理器内核20中的通用寄存器的值,做为数据总线信号D0UT〔31:0〕。当协处理器写确认信号CPWRACK*设置时,处理器内核20结束总线操作。
处理器内核20用指令CTC0和CFC0执行协处理器总线操作,通过串行监控总线存取调试器60。
串行监控总线电路34提供每个周期传送一位的总线周期信号,做为输出信号SDA0。处理器内核20的地址信号A〔19:2〕从低位提供。此后,在协处理器读操作时,是一个高电平信号,而协处理器的写操作时是低电平信号。串行监控总线的字节允许信号是四个时钟周期的低电平信号,与处理器总线的BE〔3:0〕信号无关。
对CFC0指令的响应是接收32位的输入信号SDI并作为数据信号DIN〔31:0〕提供给处理器总线。而对CTC0指令的响应是把处理器总线的输出信号D0UT〔31:0〕作为输出信号SDA0。
在调试方式下,串行监控总线的写操作按照CTC0指令执行,不考虑监控区的保护,即不考虑DCR寄存器MP位的值。同样地,串行监控总线的读操作按照指令CFC0执行。
在正常方式下,根据CTC0指令,写操作将被忽略,根据CFC0指令读操作的结果则是不确定的,调试模块只返回CPRDACK*和CDWRACK*信号到处理器内核20并结束总线操作。
串行监控总线操作的时序图解释如下:
a)串行监控总线的读操作。
图22是串行监控总线读操作的时序图。
(1)在周期1中,处理器内核20启动0XFF2F-FFFF到0XFF2F-FFFF(A〔31:20〕=1111-1111-0010)的读操作,处理器内核20提供地址A〔31:0〕进行存取并设置信号RD*,同时设置用于指明所读字节位置的字节允许信号BE〔3:0〕。
(2)在周期2中,串行监控总线电路34确认启动读操作,并提供由时钟信号CLK2形成的一个时钟周期的低电平信号作为输出信号SDA0,CLK2是通过内核时钟信号CLK=分频得到的。
(3)在周期3到25中,电路34提供地址位A〔2〕到A〔19〕,一个高电平位(指明读操作),和处理器内核20的字节允许位BE〔0〕*到BE〔3〕*作为输出信号SDA0,每个CLK2的周期传一位。
(4)在周期n中,调试器60在输出数据前提供一个时钟周期的低电平,作为信号SDI。在接收到低电平信号后,电路34在周期n+1到n+32中,以每个时钟周期一位和速度接收数据D〔0〕到D〔3〕。
(5)在周期n+33中,电路34向处理器内核20设置确认信号RDACK*并提供所读的32位数据D〔31:0〕,作为数据信号DIN〔31:0〕。
(6)在周期n+33中,处理器内核20读取数据信号DIN〔31:0〕,读操作结束。
b)串行监控总线的写操作。
图23是串行监控总线写操作的时序图。
(1)在周期1中,处理器内核20启动0XFF20-0000至0XFF2F-FFFF(A〔31:20〕=1111-1111-0010)的写操作。处理器内核20提供一个存取地址A〔31:0〕并设置信号WR*,同时设置字节允许信号BE〔3:0〕指明所写数据的字节位置。
(2)在周期2中,串行监控总线电路34确认写操作的开始并提供时钟信号CLK2的一个时钟周期的低电平,作为输出信号SDA0。
(3)在周期3到57,电路34提供地址位A〔2〕到A〔19〕、一个低电平(指明写操作)、字节允许位BE〔0〕*到BE〔3〕*作为输出信号SDA0,并写入由处理器内核20提供的数据D0UT〔0〕到IOUT〔31〕。
(4)在周期n,调试器60结束写数据并提供一个时钟周期的低电平,作为输入信号SDI。
(5)在周期n+1,电路34检测低电平信号并设置写确认信号WRACK*到处理器内核20。
(6)在周期n+1,处理器内核20结束写操作。
c)按指令CFC0进行读总线操作。
图24是根据指令CFC0的读总线操作的时序图。
(1)在周期1,处理器内核20根据指令CFC0启动协处理器读总线操作,向处理器总线提供地址A〔31:21〕=0100 0000010并设置信号CPRD*。
(2)在周期2,串行监控总线电路34确认读操作的开始并提供由CLK2信号确定的一个时钟周期的低电平信号作为输出信号SDA0。
(3)在周期3到20,电路34提供地址A〔31:21〕的地址位A〔2〕~A〔19〕作为输出信号SDA0。在周期21,输出一个时钟周期的高电平信号指明是读操作。在周期22至25,输出四个时钟周期的低电平信号而不考虑处理器总线的字节允许信号。
(4)在周期n,调试器60在提供数据之前输出一个时钟周期的低电平信号作为输入信号SDI,电路34接收到低电平信号后,在n+1到n+32周期读数据D〔0〕到D〔31〕。
(5)在周期n+33,电路34设置协处理器读确认信号CPRDACK*到处理器内核20,并提供数据总线信号DIN〔31:0〕和要读取的32位数据D〔31:0〕。
(6)在周期n+33,处理器内核20读信号DIN〔31:0〕并结束协处理器读总线操作。
d)根据指令CTC0的写总线操作。
图25是根据CTC0指令进行写总线操作的时序图。
(1)在周期1,处理的内核20根据指令CTC0启动协处理器写总线操作,提供一个处理器总线地址A〔31:21〕=0100-0000-110,并设置信号CPWR*。
(2)在周期2,串行监控总线电路34确认写操作的开始并提供一个由信号CLK2确定的一个时钟的低电平,作为输出信号SDA0。
(3)在周期3到20,电路34提供地址A〔31:21〕的地址位A〔2〕至A〔19〕作为输出信号SDA0。在周期21,输出一个时钟周期的低电平信号指明为写操作。在周期22至25,输出信号SDA0变为四个时钟周期的低电平信号而不考虑处理器总线的字节允许信号。在周期26至57,输出信号SOAD提供数据总线的输出位DOUT〔0〕至DOUT〔31〕。
(4)在周期n中,调试器60完成写数据并提供一个时钟的低电平作为输入信号SDI。
(5)在周期n+1,电路34检测该低电平信号,并设置协处理器写确认信号CPWRCK*到处理
(6)在周期n+1,处理器内核20结束协处理器写总线操作。
图26是串行监控总线控制器341的操作的流程图。
控制器341监控处理器总线80的操作。
(1)在步骤S120,S124和S125,串行监控总线读操作启动,因为,有一个地址A〔31:20〕=0XFF2,读电平RD*(低)被设置,信号DM是高电平指明为调试方式。
(2)在步骤S120,S124,S132和S133,设置处理器内核20的RDACK信号以结束总线操作,尽管A〔31:20〕=0XFF2并设置了RD*信号(低电平),但因为DM信号为低电平,则表示正常方式。
(3)在步骤S120、S121,S126和S127,串行监控总线的写操作启动,因为A〔31:20〕=0XFF2,写信号WR*(低)被设置,信号DM为高指明是调试方式,而且寄存器DCR的MP位为0,指明为写允许状态。
(4)在步骤S120、S121,S126,S134和S135,设置微处理器内核20的WRACK*信号结束总线操作。尽管A〔31:20〕=0XFF2并且设置了写信号WR*(低),但因为信号DM为低指明为正常方式,或寄存器DCR的MP位为1指明为写禁止状态。
(5)在步骤S120、S122,S128和S129,串行监控总线的协处理器读操作开始,因为A〔31:21〕=0100-0000-010,用于指令CFC0的协处理器读总线信号CPRD*被设置,而且信号DM为高指明为调试方式。
(6)在步骤S120,S121,S128,S136和S137,处理器内核20的CPRDACK*信号被设置,则结束总线操作。虽然A〔31:21〕=0100-0000-010且用于指令CFC0的CPRD信号(低)被设置,但是,因为信号DM为低,指明是正常方式。
(7)在步骤S120,S121,S122,S123,S130和S131,串行监控总线的协处理器读操作启动,因为A〔31:21〕=0100-0000-110,指令CTC0的协处理器写总线操作信号CPWR(低)被设置,且信号DM为高指明为调试方式。
(8)在步骤S120,S121,S122,S123,S138和S139,设置处理器内核20的CPWRACK*信号以结束总线操作。尽管A〔31:21〕=0100一0000-110且设置了指令CTC0的信号CPWR*(低),但因为信号DM为低说明是正常方式。
图27是串行监控总线电路34进行读操作的流程图。
在读操作中,串行监控总线控制器341在周期1中,向输出移位寄存器344提供:高电平的串行监控总线读/写信号,串行监控总线字节允许信号BE〔3:0〕和高电平的串行监控总线数据信号,并设置一个数据装入信号。
根据指令CFC0,在协处理器读总线操作中,串行监控总线控制器341向输出移位寄存器344提供:高电平的串行监控总线读/写信号,低电平的字节允许信号,高电平的串行监控总线数据信号,并设置数据装入信号。移位寄存器334锁存这些值和位于LSB的低电平信号。
输出信号SBA0置为低,控制器341在周期2中,设置输出移位信号。
从周期3至周期25,控制器341设置输出移位信号。寄存器344在周期1锁存的位,以每个时钟周期一位的速度送出,作为输出信号SDA0。
从周期26至周期n,控制器341等待被设置的输入信号SDI变为低电平。
从周期n+1至周期n+32,控制器341设置输入移位信号到串行输入电路343,而输入信号SDI送输入数据D〔0〕至D〔31〕再到输入移位寄存器345。
在周期n+33,控制器341在读操作中,设置处理器总线的读确认信号RDACK*。在协处理器读总线操作中,控制器341设置协处理器读确认信号CPRDACK*。输出允许信号到串行输入电路343被设置,输入寄存器345中的数据D〔31:0〕由数据总线输入信号DIN〔31:0〕传送。
图28是串行监控总线电路34写操作的流程图。
在写操作中,串行控制总线控制器341在周期1中,向输出移位寄存器344提供低电平的串行监控总线读/写信号,串行监控总线字节允许信号BE〔3:0〕和串行监控总线的数据信号D0UT〔31:0〕,并设置数据装入信号。
根据指令CTC0在协处理器的写总线操作中,控制器341向寄存器提供低电平的串行监控总线读/写信号,4位低电平的串行监控总线字节允许信号和串行监控总线数据信号DOUT〔31:0〕,并设置数据装入信号。寄存器344在周期1锁存这些数值和位于LSB的低电平信号。
在周期2,输出信号SDA0置为低,控制器341设置输出移位信号。
从周期3至57,控制器341设置输出移位信号。寄存器344在周期1锁存的数据由输出信号SDA0以每个时钟周期一位的速度传送。
从周期58至n,控制器341等待被设置的输入信号SDI变为低。
在周期n+1,控制器341在写操作中,向处理器总线设置写确认信号WRACK*,若为协处理器总线操作,控制器341设置协处理器写确认信号CPWRACK*。
下面介绍程序计数器跟踪器32。
间接跳转,直接跳转和转移定义如下:
间接跳转
跳转的目标地址是存贮于寄存器或内存中的值,也就是,跳转指令本身不指明跳转的目标地址。
直接跳转
跳转指令的目标地址由程序计数器和指令中的编码确定。
转移(或条件转移)
这一类跳转指令的目标是由程序计数器与指令中几部分代码和共同确定。转移是否实际执行取决于条件,若转移被实际执行则称之为“进入转移”,否则称为“末进入转移”。
图29是程序计数器跟踪器32的详图。
跟踪器32接收来自处理器内核20下列信号:
调试方式信号DM
该信号说明当前方式是调试方式还是正常方式。
流水线执行信号
该信号指示指令的执行。
30位的目标程序计数器〔31:2〕信号
这些信号指明转移或跳转指令的目标地址或是异常处理的向量地址。当设置间接跳转、直接跳转、转移进入和异常发生信号时,则该信号有效。
间接跳转信号
该信号表示执行了一个间接跳转。
直接跳转信号
该信号表示执行了一个直接跳转。
转移进入信号
该信号表示执行了一条转移指令并进入转移。
异常发生信号
该信号表示异常已经发生。
跟踪器32向处理器内核20提供如下信号以全面跟踪程序计数器。
流水线失速请求信号
该信号阻塞了处理器内核20的流水线处理,从而完全地让目标程序计数器产生输出。当跟踪器32正在接收目标程序计数器的间接跳转信号时发生了下一个间接跳转,则跟踪器32设置流水线失速请求信号,停止处理器内核20的流水线处理。一旦目标程序计数器的信号完成,流水线失速请求信号被取消,灰复流水线处理。
跟踪器32接收来自指令/数据地址断点电路31或处理器总线断点电路33的触发请求。跟踪器32接收DCR寄存器的TM位和调试允许信号DBGE*。若DBGE*信号被设置为低电位,它表示调试器60有效。
跟踪器32在正常方式下,把处理器内核20提供的程序计数器跟踪信息转换成一位的程序计数输出TPC和一个三位状态信号PCST〔2:0〕,供调试器60使用。
下面说明信号PCST〔2:0〕和TPC
a)PCST〔2:0〕
指令的执行状态由信号PCST〔2:0〕以每个时钟一位的速度传送(0:低,1:高)。
111:流水线失速状态(STL)
该状态说明当没有跟踪触发请求时,则指令的执行尚未完成。
110:转移/跳转进入状态(JMP)(用程序计数器输出)
该状态表示执行了进入转移或跳转指令,且目标地址将由信号TPC传送。
101:转移/跳转进入状态(BRT)(没有程序计数器输出)
该状态表明执行了进入转移或直接跳转指令,但信号TPC不传送目标地址。
100:异常状态(EXP)(异常向量码输出)
该状态表示出现了一个异常,异常处理的向量码将由信号TPC传送。
011:顺序执行状态(SEQ)(指令执行)
该状态表示在JMP,BRT或TSQ状态下执行指令。当转移指令没有进入时也建立这一状态。
010:流水线失速中的跟踪触发器输出状态(TST)
该状态表明地址跟踪触发器或处理器总线跟踪触发器在指令仍在执行中的一个时钟周期发生了请求。
000:调试方式(DBM)
在正常方式下不能达到该状态。
信号TPC用来提供转移或跳转指令的目标地址。在信号PCST〔2:0〕指明状态″110″(JMP)的时钟周期里,目标地址从低位A〔2〕开始以每个时钟周期一位的速度传送。在信号PCST〔2:0〕指明状态″100″(EXP)的时钟周期时,一个三位的异常向量从低位开始按代码(0),代码(1),代码(2)的顺序以每个时钟一位的速度传送。异常向量地址和三位代码如下所示:
向量地址代码(2:0)
Reset,Nmi BFCO-0000 4(100)
UTLB(BEV=0)8000-0000 0(000)
UTLB(BEV=1)BFC0-0100 6(110)
其它(BEV=0)8000-0080 1(001)
其它(BEV=1)BFCO-0180 7(111)
由于目标地址由信号TPC一位一位地按顺序发送,在当前转移/跳转指令正由TPC信号传送时,可能发生下一条转移指令,跳转指令或异常,TPC信号传送的目标地址的优先权如下:
a)当传送目标程序计数器信号时,产生了一个新的间接跳转指令,则停止当前的目标程序计数器信号,开始新的间接跳转指令的目标程序计数器信号。
b)当传送目标程序计数器信号时发生了异常,则挂起目标程序计数器信号,传送三位的异常向量码,然后灰复被挂起的信号。
c)当传送目标程序计数器信号时发生了新的直接跳转或转移指令,不传送直接跳转或转移指令的目标地址。只有当不传送目标程序计数器信号时,才能传送直接跳转或转移指令的目标程序计数器信号。
下面结合图示介绍程序计数器跟踪输出的示例。
(例1)转移指令的程序计数器跟踪。
图30是用于转移指令程序计数器跟踪信号的示例。
当第一个进入的转移指令″beq″执行时,输出信号TPC没有传送目标程序计数器信号,信号PCST〔2:0〕指明状态TMP,信号TPC开始为指令″beq″传送目标程序计数器信号,作为对非进入转移指令″bne″的响应,信号PCST〔2:0〕指明状态码SEQ,作为对再次进入转移指令″bne″的响应信号TPC并不传送目标程序计数器信号,因为信TPC正为第一条转移指令″beq″传送目标程序计数器信号。这时,信号PCST〔2:0〕指明状态为BRT。
(例2):间接跳转指令的程序计数器跟踪。
图31是用于间接跳转指令的程序计数器跟踪信号示例。
作为对第一条间接跳转指令″jr1″的响应,信号PCST〔2:0〕指明状态为JMP,信号TPC开始传送目标程序计数器信号。作为对非进入转移指令″bne″的响应,信号PCST〔2:0〕指明状态为SEQ,作为对第二条间接转移指令″jr2″的响应,信号TPC停止传送第一条间接跳转指令″jr1″的目标程序计数器信号,开始为第二条指令″jr2″传送目标程序计器信号。这时,信号PCST〔2:0〕指明状态为JMP。
(例3)异常和间接跳转指令的程序计数器跟踪。
图32是异常和间接跳转指令的程序计数器跟踪示例。
作为对软件断点指令″break″的响应,产生一个异常,信号PCST〔2:0〕指明状态为EXP,这时,信号TPC开始传送异常向量代码,在非进入转移指令″bne″,信号PCST〔2:0〕指明状态SEQ,在间接跳转指令″jr2″,信号TPC传送用于″jr2″指令的目标程序计数器信号,该信号PCST〔2:0〕指明状态JMP。
下面介绍信号PCST〔2:0〕的跟踪触发状态TSQ或TST。
当地址和数据在同一总线周期出现时,发生一个指令/数据地址断点或处理器总线断点,产生一个表示状态TSQ或TST的信号PCST〔2:0〕。
当指令地址跟踪触发请求、数据地址跟踪触发请求或处理器总线跟踪触发请求产生时,信号PCST〔2:0〕指明状态为TSQ或TST。若信号PCST〔2:0〕可能在将要表明状态SEQ或STL的时钟周期里指明状态TSQ或TST。
a)指令/数据地址跟踪触发发生时,信号PCST〔2:0〕指明状态为TSQ。若跟踪触发由进入转移指令、跳转指令或不使信号PCST〔2:0〕指明状态SEQ的指令产生时,跟踪触发的输出将被推迟。若没有跟踪触发请求,信号PCST〔2:0〕在即将表示状态SEQ或STL的时钟周期里,表示状态TSQ或TST。
(例1)指令/数据地址跟踪触发示例。
图33是指令/数据地址跟踪触发的示例。
作为对产生指令跟踪触发或数据地址跟踪触发或数据地址跟踪触发的指令″add″的响应,信号PCST〔2:0〕指明状态TSQ。
(例2)由异常引起的指令/数据地址触发的示例。
图34是由异常引起的指令/数据地址触发的示例。
如果软件断点″break″产生时了指令地址跟踪触发或数据地址跟踪触发,信号PCST〔2:0〕指明状态EXP,在下一个时钟周期,指明用于流水线失速的跟踪触发状态TST。
(例3)由间接跳转指令引起的指令/数据地址跟踪触发的示例。
当间接跳转指令″jr2″引起指令地址跟踪触发或数据地址跟踪触发时,信号PCST〔2:0〕指明状态为JMP。在下一个时钟周期里,指明用于指令执行条件的跟踪触发状态TSQ。
b)处理器总线跟踪触发
当发生一个处理器总线跟踪触发请求时,信号PCST〔2:0〕指明状态TSQ或TST。若信号PCST〔2:0〕正指明状态JMP、BRT或EXP时,跟踪触发状态TSQ或TST将被推迟,若没有跟踪触发请求时,信号PCST〔2:0〕将在本应指明状态SEQ或STL的下一个时钟周期里指明状态为TSQ或TST。
下面介绍调试方式状态DBM的产生
若处理器内核20引起一个调试异常或调试复位,则设置高电平的调试方式信号DM进入调试方式。然后,跟踪器32提供信号PCST〔2:0〕表明调试方式状态DBM。
图36是当调试异常出现时,信号PCST〔2:0〕的输出时间图。
当没有提供目标程序计数器信号时,在引起调试异常的指令结束后,立即启动调试方式,提供出调试异常发生前的程序计数器跟踪信息。
图37是当调试异常发生时,传送目标程序计数器信号的PCST〔2:0〕的时序。
在这种情况下,在目标程序计数器信号结束后,启动调试方式,提供出直到调试异常即将发生前的指令的程序计数器跟踪信息。当目标程序计数器信号传送的同时,信号PCST〔2:0〕指明状态为STL。
图38是从调试方式返回时信号PCST〔2:0〕的时序。
调试方式一直持续到由调试异常或调试方式发送的返回指令DERET的转移延迟间隙指令出现为止。正常方式从DERET指令的一条目标指令开始,启动程序计数器跟踪。
回到图29,解释跟踪器32。
跟踪器32有一个程序计数器跟踪控制器321,一个目标程序计数移位寄存器322,一个异常向量编码器323,一个异常编码移位寄存器324和一个选择器325。
控制器321还有一个异常编码输出状态位326和一个目标程序计数器输出计数器329。
下面说明跟踪器321的操作。
表3是当寄存器DCR的TM位为0时,信号PCST〔2:0〕的输出。在表3中,″1″表示有效状态,″X″表示″无关″状态。
表3调试方式信号DM 0 0 0 0 0 0 0 0 1 1间接跳转信号 0 0 0 0 0 1 0 0 x x直接跳转信号 0 0 0 0 1 0 0 0 x x转移进入信号 0 0 0 1 0 0 0 0 x x异常发生信号 0 0 1 0 0 0 0 0 x x流水线执行信号 0 1 1 1 1 1 0 1 x x触发请求信号 0 0 x x x x 1 1 1 0提供TPC或异常码(内部状态) x x x 1 0 1 0 x x x x 1 0PCST[2:0]输出 STL SEQ EXP BRT JMP BRT JMP JMP TST TSQ TST STL DBM在该表中,触发请求信号是指令地址跟踪触发请求信号,数据地址跟踪触发请求信号和处理器总线跟踪触发请求信号的″或″。
当五位的计数器327非0时,它表示正在传送信号TPC。当异常代码输出状态位326为1时,传送异常量时代码。在表3中,当计数器327非0或异常代码输出状态位326为1时,则内部状态″输出TPC或异常代码″为1。计数器327以如下方式更新:
(1)当信号TPC不传送目标程序计数器信号,或者新的程序计数器信号将被传送时,计数器327被请零。
(2)当信号TPC正传送异常向量,内部状态指明正在传送程序计器信号时,计数器327保持不变。
(3)当计数器327达到30时将被清零。表明目标程序计数器输出完成。
(4)除(1)、(2)、(3)的其它情况下,计数器327自增加1。此时,信号TPC正在传送目标程序计数器信号。
当异常发生时,在三个时钟周期内,异常代码输出状态位326设置一个表示正在传送异常代码的内部状态。设置状态位326后,异常代码移位信号和异常代码输出开关信号也被设置。当信号PCST〔2:0〕指明状态EXP时,异常代码装入信号被设置。此时,异常向量编码器323的输出装入到异常代码移位寄存器324中,设置目标程序计数器装入信号,信号PCST〔2:0〕指明状态JMP。然后,目标程序计数器的值装入到目标程序计数器移位寄存器322中。当计数器327非0,且状态位326未设置时,则目标程序计数器移位信号被设置。
当DCR寄存器的TM位为1时,程序计数器跟踪彻底结束。若信号DBGE*置,则TM位置位,而且在传送用于间接跳转指令的目标程序计数器信号时,发生了下一条间接跳转指令,则控制器321设置流水线失速请求信号,以停止处理器内核20的流水线处理。当前的目标程序计数器传送结束后,流水线失速信号取消并灰复流水线操作。
表4是TM位为1时,信号PCST〔2:0〕的输出。在表4中,″1″表示有效状态,″X″表示″无关″状态。
表4调试方式信号DM 0 0 0 0 0 0 0 0 1 1间接跳转指令 0 0 0 0 0 1 0 0 x x直接跳转指令 0 0 0 0 1 0 0 0 x x转移进入指令 0 0 0 1 0 0 0 0 x x异常发生信号 0 0 1 0 0 0 0 0 x x流水线执行信号 0 1 1 1 1 1 0 1 x x触发请求信号 0 0 x x x x 1 1 1 0传送目标程序计数器或异常代码(内部状态) x x x 1 0 1 0 1 0 x x x 1 0PCST[2:0]输出 STL SEQ EXP BRT JMP BRT JMP STLJMP TST TSQ TST STL DBM流水线失速请求信号 0 0 0 0 0 0 0 1 0 0 0 0 0 0在传送目标程序计数器信号时,或异常代码过程中,由于执行间接跳转指令而使间接跳转信号有效时,对处理器内核20的流水线失效请求被激活。指明目标程序计数器信号或异常代码正在传送的内部状态,在目标程序计数器信号开始后的30个时钟周期里为激活态。
当控制器321的目标程序计数器装入信号被设置时,目标程序计数器移位寄存器322装入目标程序计数器的输出值。当控制器321的目标程序计数器移位信号被设置时,寄存器322把它的值每次一位地从MSB移向LSB。
异常向量编码器323,根据向量地址的位A〔29〕,A〔8〕和A〔7〕编码出的异常向量地址。如下所示: 向量地址(A29,A8,A7) 编码Reset,NmiUTLB(BEV=0)UTLB(BEV=1)其它(BEV=0)其它(BEV=1) BFC0-0000 8000-0000 BFC0-0100 8000-0080 BFC0-0180 (100) (000) (110) (001) (111) 4 0 6 1 7
编码器323把目标程序计数器输出的地址位A〔29〕,A〔8〕和A〔7〕传送到异常代码移位寄存器324中。
当控制器321的异常代码装入信号设置时,寄存器从编码器323中装入异常向量代码,当控制器321的异常代码移位信号设置时,异常代码移位寄存器324中的值一位一位地从MSB移向LSB。
当控制器321异常代码输出开关信号置位时,选择器325向信号TPC提供寄存器324的LSB。当异常代码输出开关信号取消时,选择器325向信号TPC提供寄存器322的LSB。
将用参考时间图解释跟踪器32的操作。
图39是当提供了一个目标程序计数器信号时,跟踪器32的操作。
当计数器327保持″0″并且一个间接跳转信号,或直接跳转信号,或进入转移信号被设置时,则控制器321设置目标程序计数器装入信号。
在下一个时钟,LSB,即被装入到寄存器322的目标地址A〔2〕被送给信号TPC。同时,信号PCST〔2:0〕指示状态JMP,控制器321设置目标程序计数器移位信号,结果,寄存器322由MSB向LSB移一位且在下一时钟A〔3〕位提供给信号TPC。目标程序计数器移位信号不断地设置,把程序计数器的输出提供给信号TPC,直到计数器327计数到30为止。当计数器327计满30时,被清0,并且目标程序计数器移位信号被取消,结束目标程序计数器对信号TPC的输出。
图40是当下一个间接跳转出现,同时目标程序计数器信号被提供时,跟踪器322的操作。
当第二个间接跳转出现时,计数器327被清0,目标程序计数器装入信号被设置。在下一个时种,则LSB,即被装入到寄存器322的目标地址A〔2〕位被送往信号TPC。同时,信号PCST〔2:0〕指示状态JMP,且控制器321设置目标程序计数器移位信号。从下一个时钟起,每个周期目标地址都传送给信号TPC。
图41是在提供了目标程序计数器信号,出现异常时的操作时间图。
当一个目标程序计数器信号正在传送时,异常出现信号被设置,则异常代码装入信号也被设置,把异常代码装入到异常代码移位寄存器324中,从下一个时钟起,异常代码输出状态位326、异常代码移位信号和异常代码输出开关信号被设置,用三个时钟周期传送异常代码。在此期间,目标程序计数器移位信号无效。当状态位326和异常代码开关信号取消时,信号TPC重新传送目标程序计数器信号。
图42是外部接口电路36的详图。
外部接口电路36有一个DBM代码测试器361,选择器362和363,屏蔽电路364,365和366,输出缓冲器367A367B和367C,上拉电阻输入缓冲器368A、368B和368C以及输入缓冲器369A和369B。
当信号PCST〔2:0〕指明调试方式状态DBM(000),则DBM代码测试器361设置一个输出信号。
当DBM代码测试器361的输出被设置,即它是调试方式时,则选择器362提供分频时钟信号CLK2。当DBM代码测试器361输出无效时,即它是正常方式时,则选择器362提供内核时钟CLK。
当DBM代码测试器361的输出被设置,即它是调试方式,则选择器363提供串行监控总线34的输出SDAD;当DBM代码测试器361输出无效时,即它是正常方式,则选择器363提供跟踪器32的信号TPC。
在调试方式下,屏蔽电路364屏蔽外部输入信号DINT*/SDI,使得输入到处理器内核20的信号KINT*总是无效。
当寄存器DCR的MINT位为0时,屏蔽电路365对处理器内核20置位信号Int〔5:0〕,得以屏蔽中断。
当寄存器DCR的MRST位是0时,在调试异常处理器执行期间(信号DM为高),则屏蔽电路366屏蔽用户复位信号RESET*。
输出缓冲器367A向外提供选择器362的输出作为信号DCLK;输出缓冲器367B向外提供选择器363的输出作为信号TPC/SDAD;输出缓冲器367C向外提供跟踪器32的信号PCST〔2:0〕作为外部信号PCST〔2:0〕。
上拉电阻输入缓冲器368A接收外部信号DINT*/SDI,由于该缓冲器有上拉电阻,所以,当外部信号DINT*/SDI断开时,则输出总是高电平。上拉电阻输入缓冲器368B接收外部信号DBGE*,由于该缓冲器有上拉电阻,所以,若外部信号DBGE*断开时,同输出总是高电平。上拉电阻输入缓冲器368C接收外部信号DRESET*,由于该缓冲器有上拉电阻,所以,当外部信号DRESET*断开时,则输出总是高电平。
当调试器60断开时,则外部信号DINT*/SDI,DBGE*和DRESET*也断开,然后,这些信号成为高电平内部信号,因而,调试方式的功能被禁止。
输入缓冲器369A接收外部中断信号INT〔5:0〕*,输入缓冲器369B接收外部用户复位信号RESET*。
图44是根据本发明的另一种实施方式的徽处理器和调试系统。
这种实施方式的特征在于微处理器10与存贮器90和外围电路100结合在一起,这种实施方式的其它安排则与第一种实施方式相同。
处理器内核20通过内部处理器总线80,执行读出的程序,读或写存贮器据和访问外围电路100。在调试方式下,处理器内核20通过调试模块30执行调试器60的监控程序。
如果调试模块30和调试器60的功能和接口信号的时序彼此相同,则第一种实施方式的调试器60将被用于第二种实施方式,而不必考虑联合存贮器90和外围电路100的差异。
如果第二种实施方式的微处理器内核20的功能与第一种实施方式相同,与第一种实施方式相同的监控程序将会用于第二种实施方式。
上述两种实施方式使用单个的指令/数据地址断点通道和处理器总线断点通道。而本发明则不受这种安排的限制,可以使用两个或多个通道。图43是一个涉及15个指令地址断点通道的寄存器IBS。
上述两种实施方式使用单个的位宽一位的串行监控总线。本发明则不受这种安排的限制,如果许多微处理器外部信号被用于串行监控总线,则位宽可以是两位或更多位。
上述两种实施方式使用单个的外部信号用于传送目标程序计数器的输出。本发明不受这种安排的限制,目标程序计数器的输出可被多个外部信号传送(如果多个外部信号是有用的)。
根据上述两种实施方案,时钟发生器37对用于处理器内核的时种信号CLK二分频。本发明则不受这个限制,用于串行监控总线电路的时钟信号频率可以和时钟信号相同,或整数倍或倍数为2的乘方。
如上所述,本发明能使调试工具的硬件与许多功能共享,并减少了连到调试工具信号的数量。而现有技术必须采用,例如,30个地址信号、4个字节允许信号、1个读信号、1个写信号、1个读确认信号、1个写确认信号、32个数据信号,即总共70个信号将用户目标系统连到调试器。换言之,本发明只用8个信号将用户目标程序系统连到调试器,从而使插针数量降到最低限度并降低成本。
根据本发明,一个和户目标系统的微处理器访问存贮器和I/O部件,为了为调试工具定时提供方便的条件,不与调试工具不连接的信号不受调试的影响。如果微处理的运行速度太高,本发明能够降低调试工具与微处理器之间的通信速度。
与图2的现有技术比较,本发明把监控程序存放在调试工具的存贮器中,而没有使用用户存贮器。为了启动监控一个目标系统,本发明使用专用的调试异常和调试复位,而不限制用户中断。用户目标系统无需具有用于调试的串行接口,本发明能使用硬件断点。
与图3的现有技术相比较,本发明无需在微处理器上安装定序器来简化用于调试的逻辑电路,由于本发明使用监控程来访问寄存器,所以只要修改监控程序便可访问附加的寄存器。
总之,本发明提供了一个带有调试功能的用户目标系统的微处理器,从而减少了用于连接目标系统与调试器的信号在调试过程中,本发明运行目标系统的微处理器,使得便于访问目标系统的存贮器和输入/输出部件。
根据本发明,在正常方式下,当用户程序运行时,调试工具和调试模块中的寄存器是不可访问的,使得调试工具的存贮器和寄存器决不会被用户程序破坏,从而提高了系统的可靠性。
即使在调试方式启动之后,本发明也禁止访问调试工具和调试模块的控制寄存器。当一个启动调试方式的调试异常出现时,如果用户程序对调试工具或调试模块的控制寄存器的写操作不完全,通过置位寄存器DCR的MP位来禁止写操作,这就避免了用户程序对调试工具的存贮器和寄存器的破坏,从而提高了调试系统的可靠性。
根据本发明在调试方式下,根据指令CTCO对调试工具的写操作总是允许进行,而无需考虑MP位的值。由于监控区的地址与写指令的存贮器是分开准备的,所以无需使用通用寄存器。
因此,通用寄存器的内容将不会被写操作破坏,它的值也可以在调试异常出现之后存入调试工具的存贮器中。这样,本发明的调试工具决不会破坏用户通用寄存器的内容。
本发明提供一个带有调试功能的用户目标系统的微处理器,使得消除了用于传送程序计器输出的接口信号。
本发明提供了一个带有调试功能的用户目标系统的微处理器,以最少的硬件实现触发功能。
对于那些熟练的技术人员,在领会了本公开秘密的学习之后,因此,在不离本技术领域的情况下,进行各种各样的改进将是完全可能的。