图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使调试模块30的程序计数器跟踪32和串
行监控总线电路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的位BS0置位。位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
从非高速缓存区的指令
获取
H
L
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执行。
在正常方式下,根据GTC0指令,写操作将被忽略,根据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〕到
DOUT〔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〕,并设置数据装入信号。
根据指令CTG0在协处理器的写总线操作中,控制器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 BFC0-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)BFC0-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
0
PCST[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
0
PCST[2:0]输出
STL
SEQ
EXP
BRT
JMP
BRT
JMP
STL
JMP
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,Nmi
UTLB(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读存贮器90的程序,
执行读程序,从存贮器90读数据或把数据写入存储器,并访问
外围电路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对调试工具的写