CN101809542A - 用于监视调试事件的系统和方法 - Google Patents

用于监视调试事件的系统和方法 Download PDF

Info

Publication number
CN101809542A
CN101809542A CN200880108954A CN200880108954A CN101809542A CN 101809542 A CN101809542 A CN 101809542A CN 200880108954 A CN200880108954 A CN 200880108954A CN 200880108954 A CN200880108954 A CN 200880108954A CN 101809542 A CN101809542 A CN 101809542A
Authority
CN
China
Prior art keywords
instruction
debug
debugging
events
debug events
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.)
Granted
Application number
CN200880108954A
Other languages
English (en)
Other versions
CN101809542B (zh
Inventor
W·C·莫耶
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NXP USA Inc
Original Assignee
Freescale Semiconductor Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Freescale Semiconductor Inc filed Critical Freescale Semiconductor Inc
Publication of CN101809542A publication Critical patent/CN101809542A/zh
Application granted granted Critical
Publication of CN101809542B publication Critical patent/CN101809542B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)
  • Advance Control (AREA)

Abstract

一种系统具有用于通过顺序地取出、解码、执行及写入与每条指令的执行关联的结果来执行多条指令的流水线处理器(12)。调试电路(40)与流水线处理器耦连以用于监视指令的执行来确定调试事件发生的时间。该调试电路产生调试异常以中断指令处理流。该调试电路具有用于指示表示在引起调试事件的指令与获得调试异常时的在指令执行中的点之间完成指令执行的指令(如果有的话)的数量的值的控制电路(44)。

Description

用于监视调试事件的系统和方法
技术领域
本公开内容一般地涉及数据处理系统,并且更特别地涉及用于监视调试事件的系统和方法。
背景技术
数据值断点涉及比较数据存取地址,以及比较与数据存取地址关联的数据,以便确定是否应当产生断点异常。但是,当在典型的流水线处理器中时,数据可能直到存取地址可用之后的多个周期后才可用。因此,断点确切在指令流中的何处发生是不确定的,因为随数据存取之后的一条或更多条指令可以在存取数据还不可用的间隔内执行。在现今可用的一种数据处理系统中,附加的停车(stall)被添加到固有的执行中以便防止任何指令在存取数据仍不可用的间隔内执行。但是,这需要额外的开销并且干扰了正常的执行时序,这可能是调试过程中所不希望的。
附图说明
本发明通过举例进行说明但并不限定于附图,在附图中相似的标记指示相似的元素。出于简单清晰的目的对附图中的元素进行了说明而并不一定按比例描绘。
图1是根据本发明的一种实施方案的数据处理系统的框图。
图2是根据本发明的一种实施方案与图1的数据处理系统关联的处理器的框图。
图3是说明与图1的数据处理系统关联的示例性调试寄存器的图表。
图4是根据本发明的一种实施方案与图3的调试寄存器关联的调试控制寄存器的图表。
图5和图6以表格形式示出了图4中根据本发明的一种实施方案的调试控制寄存器的一部分的功能。
图7是根据本发明的一种实施方案与图3的调试寄存器关联的调试状态寄存器的图表。
图8以表格形式示出了图7中根据本发明的一种实施方案的调试状态寄存器的一部分的功能。
图9-11示出了对图2的处理器的操作的不同实例进行说明的时序图。
图12-16以表格形式示出了多种示例性数据地址比较(DAC)事件及其相应的结果。
图17是根据本发明的一种实施方案与图3调试寄存器关联的调试状态寄存器的图表。
图18示出了对图2的处理器的操作实例进行说明的时序图。
具体实施方式
在调试(debug)代码时,通常难以了解实际上是哪条指令导致了所获得的调试异常(debug exception)。例如,在数据值断点的情形中,执行与所存取数据之间的数据存取地址比较及数据值比较,并且比较结果可能触发中断正常的指令流执行的调试异常。可以在存取初始化之后多个周期返回数据进行存取,这通过提供数据存取请求及存取地址来触发。在关于所请求存取的数据地址比较与关于所接收数据的数据值比较之间的滞后可能使得要确定是指令流中的哪条指令实际上导致了指令流中断尤为困难。在一种实施方案中,偏移值可以被用来指出在引起数据值断点的指令与指令流中实际发生断点异常的点之间执行了多少条指令。通过这种方式,可以获得改进的调试功能。
如在此所使用的,术语“总线”被用来指示可以用来传输一种或多种不同类型的信息(例如数据、地址、控制、或状态)的多种信号或导体。在此所讨论的导体可以作为单导体、多导体、单向导体、或双向导体来说明或描述。但是,不同的实施方案可以改变导体的实现。例如,可以使用分离的单向导体而不是双向导体,反之亦然。此外,多导体可以用串行地或以时分复用的方式传输多种信号的单导体来代替。类似地,输送多种信号的单导体可以被分开成输送这些信号的子集的不同导体。因此,存在用于传输信号的多种选择。
在此术语“确证(assert)”和“置位(set)”或“否定(negate)”(或“取消确证(deassert)”或“清除(clear)”)在涉及使信号、状态位、或相似装置分别呈现出其逻辑真或逻辑假的状态时被使用。如果逻辑真的状态是逻辑电平1,则逻辑假的状态是逻辑电平0。而如果逻辑真的状态是逻辑电平0,则逻辑假的状态是逻辑电平1。
在此所描述的每种信号可以被指定为正逻辑或负逻辑,其中负逻辑能够由信号名称上方的横线或名称后的星号(*)来指示。在负逻辑信号的情形中,信号是低有效的,其中逻辑真的状态对应于逻辑电平0。在正逻辑信号的情形中,信号是高有效的,其中逻辑真的状态对应于逻辑电平1。应当注意,在此所描述的任何信号都能够被指定为负逻辑信号或正逻辑信号。因此,在可替换的实施方案中,可以将那些描述为正逻辑信号的信号实现为负逻辑信号,并且可以将那些描述为负逻辑信号的信号实现为正逻辑信号。
在此使用方括号以指示总线的导体或值的数位位置。例如,“总线60[7:0]”或“总线60的导体[7:0]”指示总线60的8个低阶导体,以及“地址位[7:0]”或“地址[7:0](ADDRESS[7:0])”指示地址值的8个低阶位。在数字之前的符号“$”指示该数字以其十六进制或基数16的形式来表示。在数字之前的符号“%”或“0b”指示该数字以其二进制或基数2的形式来表示。
图1说明了根据本发明的一种实施方案的数据处理系统10。数据处理系统可以是片上系统。数据处理系统10可以在单个集成电路或多个集成电路上实现。数据处理系统10包括可以通过总线20进行耦连的处理器12、外部调试电路14、I/O模块16、及存储器18。在可替换的实施方案中,存储器18可以是任何类型的存储器以及可以位于与处理器12相同的集成电路上,或者位于与处理器12不同的集成电路上。存储器18可以是任何类型的存储器,例如,只读存储器(ROM)、随机存取存储器(RAM)、非易失性存储器(如闪存)等。此外,存储器18可以是位于另一外围设备或从动设备之内的或者位于不同的集成电路上的存储器或其它数据存储。
图2是与图1的数据处理系统10关联的处理器12的框图。处理器12可以包括指令管道22、执行单元24、取指令单元26、控制电路28、通用寄存器30、装载/存储单元32、总线接口单元(BIU)34以及内部调试电路40。处理器12可以通过与BIU 34耦连的总线20与数据处理系统10的其它组件通信。内部调试电路40可以通过图2所示的调试端口耦连至外部调试单元,例如IEEE ISTO-5001兼容性NexusTM调试单元。NexusTM是位于德克萨斯州的奥斯汀市的Freescale半导体公司的商标。调试端口可以是串行接口,例如JTAG,或者可以实现为并行端口,串行与并行端口的组合,或者以太网端口。内部调试电路40可以包括调试寄存器42和调试控制电路44。调试控制电路44可以包括一个或更多个偏移计数器41,其中偏移计数器41可以用来确定在引起调试事件的指令与指令执行中进行调试事件处理时的点之间完成指令执行的指令的数量(如果有的话)。调试寄存器42可以包括按字段分组用于控制各种调试关联的事件的位,包括指令断点、数据断点、监视点、以及与调试关联的其它消息接发。这些调试资源可以在处理器12与外部调试电路14之间共享。此外,调试控制电路44可以通过导体35与BIU 34进行地址及数据的通信。
现在参考图3,调试寄存器42内的寄存器也可以被提供用于存储一个或更多个地址比较值、地址范围、以及用于实现指令和/或数据存取断点及监视点事件的数据匹配值,以及其它调试控制准则。这些地址及数据值,与各种控制准则一起,被用来确定处理器12何时为了产生断点或监视点事件而存取一个或更多个预定的指令地址或数据地址,这能够在内部调试模式有效时引起处理器12开始进行用于调试异常的异常处理,或者在外部调试模式有效时引起处理器12进入调试暂停模式,在该调试暂停模式中处理器12响应于由外部调试电路14通过内部调试单元40的调试端口提供的命令。举例来说,调试寄存器42可以包括各种调试控制寄存器,包括调试控制寄存器50(DBCR0)以及其它调试控制寄存器43(DBCR1、DBCR2、DBCR3、及DBCR4)。调试寄存器42还可以包括指令地址比较寄存器45(IAC1和IAC2)。指令地址比较寄存器45可以为了地址比较的目的而存储指令地址。调试寄存器42还可以包括数据地址比较寄存器47(DAC1和DAC2)。数据地址比较寄存器47可以为了地址比较的目的而存储数据存取地址。调试寄存器42还可以包括调试状态寄存器49、调试计数器51(DBCNT1和DBCNT2)、及数据值比较寄存器53(DVC1和DVC2)。调试寄存器42可以是用户软件编程模型的一部分。当一个或更多个计数启用事件发生时,调试计数器51可以被配置成倒计数(count-down)。当计数值达到零时,调试计数事件的可以被信号发出,并且可以产生调试中断(若已启用)。数据值比较寄存器53可以为了数据比较的目的而存储数据值。
在内部调试模式中,这些寄存器资源由软件来管理,并且不需要使用外部调试电路。软件可以通过使用移至专用寄存器或由专用寄存器移来的指令(其是编程器模型软件指令)进行的数据移动来配置寄存器以初始化各个调试寄存器用于执行基于软件的调试活动,其中启用的调试事件引起软件调试中断发生。然后,软件中断处理器可以执行由数据处理系统10的软件编程器确定的各种所希望的活动。在内部调试模式中,外部调试电路14被分派这些共享的调试事件配置寄存器的所有权,并且当所配置的调试事件发生时,处理器12可以进入暂停状态并等待将由外部调试电路14提供的命令。当外部调试模式被启用(enable)时,软件不再拥有对共享调试资源的控制。外部调试电路14可以存取共享的调试资源,包括直接通过调试端口(如图2所示)存取的调试寄存器42,其中该调试端口例如可以被实现为JTAG TAP端口。在一种实施方案中,调试寄存器42可以通过在用于各种JTAG指令的一个或更多个字段内所包含的寄存器选择编码映射为JTAG数据寄存器,这提供了由调试器通过JTAG IR及DR操作对寄存器执行的读存取及写存取。
单组寄存器的共享需要更少的处理器12资源来实现,并且这为数据处理系统10的用户简化了编程模型。内部调试单元40监视处理器12内的活动并且响应基于所存储的调试配置信息的一个或更多个预定条件的探测,可以产生一个或更多个数据断点事件、指令断点事件、指令执行事件(例如分支或陷阱获得事件)、指令完成事件等。在这种操作方式下,处理器12起着本领域技术人员能够意识到的作用。
图4是与图1的数据处理系统关联的调试控制寄存器50的图表。可以将调试控制寄存器50作为调试寄存器42的一部分包含于其中,该调试寄存器42可以进一步作为内部调试单元40的一部分包含于其中。调试控制寄存器50可以用来存储调试配置信息。尽管图4说明了本发明的一种使用具体位字段的具体实施方案,但是本发明的可替换实施方案可以使用每个字段中位的数量不同的不同位字段。在图4中所描述的具体位字段仅出于说明性的目的来示出。举例来说,调试控制寄存器50可以包括32个位。调试控制寄存器50可以包括标记为:EDM 52、IDM 54、ICMP 58、BRT 60、IAC1 62、IAC264、DAC1 66、DAC2 68、DVC1 70、及DVC2 72的位字段。这些位字段只是示例性的并且调试控制寄存器50可以包括更少的或附加的位字段。另外,这些数位字段可以进行不同的布置。调试控制寄存器50也可以包括可在将来使用的保留位字段56、61、及74。各种位字段的功能在下文针对图5和图6进行说明。举例来说,调试控制寄存器50可以是可写的寄存器,其中该可写寄存器也可以是可读的并且可以是用户软件编程模型的一部分。在本发明的可替换实施方案中,调试控制寄存器50可以不是用户软件编程模型中的控制寄存器,而是可以被实现于用户软件编程模型之外。任何类型的存储电路都可以用来实现调试控制寄存器50。
图5以表格形式示出了图4中的调试控制寄存器50的一部分的功能。EDM位52可以指示外部调试模式是启用(enable)的还是禁用(disable)的。例如,当EDM位52被置为1时,控制寄存器(例如调试控制寄存器56)被置于外部调试电路14的独占控制之下并且数据处理系统10软件不能够将信息写入这些控制寄存器中。作为选择,当EDM位52被置为1时,软件不能够写调试控制寄存器的具体部分。因而,EDM位52被用来选择性地阻止某些重置事件清除调试控制寄存器50及其它调试资源中所存储的信息,其中能够包含调试控制及设置信息。IDM位54可以指示内部调试模式是启用的还是禁用的,从而指示调试异常是启用的还是禁用的。ICMP位58可以用来指示指令完成调试事件是启用的还是禁用的。BRT位60可以用来指示分支获得调试事件是启用的还是禁用的。位6:7 61可以被保留以备将来使用。现在参考图6,图6以表格形式示出了图4中的调试控制寄存器50的一部分的功能。IAC1位62可以用来指示指令地址比较1调试事件是启用的还是禁用的。IAC2位62可以用来指示指令地址比较2调试事件是启用的还是禁用的。DAC1位66可以用来指示数据地址比较1调试事件是启用的还是禁用的。如果已启用,则DAC1位66还指示数据地址比较1调试事件对于何种类型的存储存取(例如,用于存储类型数据存储存取,用于装载类型数据存储存取,或者用于装载类型或存储类型数据存储存取)是被启用的。DAC2位68可以用来指示数据地址比较2调试事件是启用的还是禁用的。如果已启用,则DAC2位68还指示数据地址比较1调试事件对于何种类型的存储存取(例如,用于存储类型的存储存取,用于装载类型数据存储存取,或者用于装载类型或存储类型数据存储存取)是被启用的。DVC1位70可以用来指示数据值比较1限定器(qualifier)是否被启用。DVC2位72可以用来指示数据值比较2限定器是否被启用。位16:31可以被保留以备将来使用。尽管图5和图6描述了具体数量的位字段以提供与调试事件关联的不同配置信息,但是也可以使用数量与这些图中所示出的数量不同的位字段。
图7是与图1中的数据处理系统关联的调试状态寄存器49的图表。调试状态寄存器49可以被引入作为调试寄存器42的一部分,该调试寄存器42可以进一步被引入作为内部调试单元40的一部分。调试状态寄存器49可以被用来存储关于调试事件的状态信息。尽管图7说明了本发明的一种使用具体位字段的具体实施方案,但是本发明的可替换实施方案可以使用在每个字段中位的数量不同的不同位字段。图7中所描述的具体位字段只是出于说明性的目的来示出。举例来说,调试状态寄存器49可以包括32个位。调试状态寄存器49可以包括标记为:IDE 76、ICMP 78、BRT 80、IAC1 82、IAC2 84、IAC3 86、IAC4 88、DAC1R 90、DAC1W 92、DAC2R 94、DAC2W96、及DAC_OFST 98的位字段。这些位字段只是示例性的并且调试状态寄存器49可以包括更少的或附加的位字段。另外,这些位字段可以进行不同的布置。调试状态寄存器49还可以包括可在将来使用的保留的位字段100。各种位字段的功能在下文针对图8进行说明。此外,对于调试状态寄存器49,位的置位(setting)涉及存储逻辑电平1并且位的清除涉及存储逻辑电平0。举例来说,调试状态寄存器49可以是其位通过硬件来置位以及通过软件来读取及清除的寄存器,并且该寄存器可以是用户软件编程模型的一部分。在本发明的可替换实施方案中,调试状态寄存器49可以不处于用户软件编程模型内,而是可以被实现于用户软件编程模型之外。在一种实施方案中,只有在内部调试模式被启用或者外部调试模式被启用的时候,调试状态寄存器49的调试状态位才由调试事件来置位。此外,在一种实施方案中,当调试中断被启用时,调试状态寄存器49中的置位位可以引起调试中断产生,其中调试中断处理器负责在返回正常执行之前清除调试状态寄存器49的位。此外,任何类型的存储电路都可以用来实现调试状态寄存器49。
图8以表格形式示出了图7中的调试状态寄存器49的功能。IDE位76被用来指示不准确的调试事件的发生并且从而可以在调试异常被禁用并且调试事件引起其各自的调试状态寄存器位被置为1时被置为1。也就是,尽管调试事件可以发生,但是调试异常可以保持为禁用,因为由于流水线的当前状态中断还不能产生。如果指令完成调试事件发生,则ICMP位78可以被置为1。如果分支获得调试事件发生,则BRT位80可以被置为1。如果IAC1调试事件发生,则IAC1位82可以被置为1。如果IAC2调试事件发生,则IAC2位84可以被置为1。如果IAC3调试事件发生,则IAC3位86可以被置为1。如果IAC4调试事件发生,则IAC4位88可以被置为1。当DAC1位66等于%10或%11(指示DAC1调试事件被启用以对装载类型的数据存储进行存取,如图6所示)时,如果读取类型的DAC1调试事件发生,则DAC1R位90可以被置为1。当DAC1位66等于%01或%11(指示DAC1调试事件被启用以对存储类型的数据存储进行存取,如图6所示)时,如果写入类型的DAC1调试事件发生,则DAC1W位92可以被置为1。当DAC2位68等于%10或%11(指示DAC2调试事件被启用以对装载类型的数据存储进行存取,如图6所示)时,如果读取类型的DAC2调试事件发生,则DAC2R位94可以被置为1。当DAC2位68等于%01或%11(指示DAC2调试事件被启用以对存储类型的数据存储进行存取,如图6所示)时,如果写入类型的DAC2调试事件发生,则DAC2W位96可以被置为1。DAC_OFST位98可以被用来指示数据地址比较的偏移。在一种实施方案中,位13~31被保留以备将来可能的使用。
如果数据值比较限定器为调试控制寄存器50中的DAC1或DAC2而被指示,那么数据存取地址匹配以及数据值匹配(对于与数据存取地址关联的数据值)必须为了将要指示的DVC1 DAC1或DVC2 DAC2调试事件而发生。也就是,直到数据值匹配也发生时才置位DAC1R位90、DAC1W位92、DAC2R位94、及DAC2W位96中的每一个以指示DVC1 DAC1或DVC2 DAC2调试事件。应当注意,将要匹配的值能够被存储于调试寄存器42中,例如在数据地址比较寄存器47及数据值比较寄存器53中。例如,如果调试控制寄存器50的DVC1位70被置位了,那么DAC1调试事件由数据值比较所限定,意味着对于将要被指示的DVC1 DAC1调试事件,地址必须与DAC1数据地址比较寄存器匹配并且该地址的关联数据值必须与DVC1数据值比较寄存器匹配。但是,由于处理器12的流水线性质,数据可能直到存取地址可用之后的多个周期后才可用于比较。而且,即使在数据一旦可用以及DBC DAC被指示时,指令流在那一刻也可以是不可中断的(即,可以禁用调试异常),这意味着在DVC
DAC被指示时可以不获得实际数据值断点。在这种情形中,IDE位76能够被置为1以指示不准确的调试事件,在该不准确的调试事件中调试异常在调试事件被指示时不能够被获得。也就是,直到调试异常启用后才能够获得实际数据值断点,这可以在随后的指令流中的不同的(以及不可预料的)点发生,如同将参考图9-11讨论的。一旦调试异常被获得,则中断处理就开始并且调试事件被处理。
因此,DAC_OFST位98可以被用来指示在引起DVC DAC被指示的指令与数据值断点产生以及调试异常被获得的点之间执行了的指令的数量。DAC_OFST位98可以被用来存储所保存的DSRR0值相对装载或存储指令的地址的“偏移-1”,其中该装载或存储指令获得了数据地址比较调试异常。应当注意,DSRR0对应于调试存储恢复寄存器0,而所保存的DSRR0值对应于断点中断的返回指针。因此,如果数据值断点发生,则所保存的DSRR0地址值对应随中断处理之前所执行的最后指令之后的指令的地址值。通过这种方式,能够确定有多少指令已经在引起DVC1 DAC1的地址与指令流被中断以获得数据值断点的点之间的间隔内执行了。这允许用户来确定实际上是哪条指令引起了数据值断点。在一种实施方案中,DAC_OFST位98正常被置为%00,而DVC DAC则将该字段置为%01、%10、或%11,这表示“偏移-1”。实例将在下文参考图9-11来提供。但是,应当注意,如果同时的转换旁视缓冲器(translation look-asidebuffer)丢失(也称作DTLB错误)或者数据存储中断(例如DSI)错误由于存取许可错误或其它存取关联的错误而发生,则DAC_OFST位98可以被置为%00并且IDE位76可以被置为1。在这些情形中,应当注意,与地址关联的数据可以由于这些错误中的某一错误的发生而始终不可用。
不同的状况及条件能够影响在执行数据地址比较的时间与实际获得数据值断点的时间之间执行的指令的数量。图9-11示出了说明一系列的四装载指令(由l0、l1、l2、及l3表示,其中l0引起DVCDAC调试事件)是如何导致不同的DAC偏移值的时序图。这些能够由DAC偏移计数器41保持追踪的DAC偏移值代表或编码在l0与获得在l0的DVC DAC被指示之后的数据值断点的调试异常的时间点之间执行的指令的数量。对于图9-11,假定l0产生DVC1 DAC1调试事件。因此,DAC1位66是%10或%11,使得DAC1调试事件被启用以用于装载类型数据存储存取,并且DVC1位70被置位以指示DAC1调试事件由数据值比较所限定。l0的DVC1 DAC1调试事件的对应状态位是DAC1R位90,该DAC1R位90直到相同存取的每个地址值比较及数据值比较产生匹配后才会被置位。在该实例中,对于数据地址比较,应当注意的是数据地址比较寄存器47中的DAC1值可以用于与由l0计算的数据地址进行比较,以及,对于数据值比较,应当注意的是数据值比较寄存器53中的DVC1值可以用于与关联l0的所引起的装载数据进行比较。在可替换的实施方案中,l0可以与DAC2 DVC2对应,使用DAC2位68、DVC2位72、DAC2R位90等。
应当注意,图9-11中的每个图都参照6级流水线来描述,包括下列阶段:取出、解码、有效地址(EA)/E0、存储器1(mem1)/E1、存储器2(mem2)/E2、及回写。应当注意,这被提供作为处理器12的指令管道22的一种流水线实例;但是,可替换的实施方案可以包括不同的流水线,例如具有不同的级数。指令流水线(例如图9-11中所参照的6级流水线)的操作是本领域已知的并且因此在这里将不作详细描述。此外,图9-11中的每个图都包括可以与处理器12的处理器时钟对应的时钟信号。处理器时钟能够是系统时钟或者是仅给处理器12的一部分提供的时钟,并且能够如同本领域已知的那样来产生。
参照图9,l0在时钟周期1内进入取出阶段,在时钟周期2内进入解码阶段,在时钟周期3内进入EA/E0阶段,其中l0的有效地址在时钟周期3内被计算,并且然后在时钟周期4内进入mem1/E1阶段。因此,有效地址在时钟周期3结束时准备就绪并且被提供于到调试控制电路44的导体35的地址部分上使得地址比较能够在l0的有效地址与数据地址比较寄存器47中所存储的DAC1值之间执行。(应当注意,在这一时间点地址还可以由BIU 34布置于总线20上。)该DAC1地址比较在时钟周期4内执行,如DAC1地址比较信号中的正脉冲所指示的,其中该DAC1地址比较信号能够是在调试控制电路44内确证以指示指令l0的DAC1地址比较匹配正在发生的控制信号。但是,由于DAC1需要DVC1限定器(因为DVC1位70的置位),因而DAC1R调试事件还没有被指示,即使地址比较产生匹配。指令处理继续进行,因为与l0(l0将响应于l0装载指令而被检出)关联的数据仍然不可用于数据值比较。l0然后进行到mem2/E2阶段,在该阶段中数据正被从存储器(例如,图1中的存储器18)内装载。该装载数据在这个阶段结束时可以是可用的(并且例如由BIU 34通过总线20来接收)以及然后被提供于到调试控制电路44的导体35的数据部分上,使得数据值比较能够在关联l0的装载数据值与存储于数据值比较寄存器53内的DVC1值之间执行。因此,数据值比较在下一时钟周期(时钟周期6)内执行,如同DVC1数据比较信号中的正脉冲所指示的,其中该DVC1数据比较信号能够是在调试控制电路44内确证以指示指令l0的DVC1数据比较匹配正在发生的控制信号。在与数据值比较寄存器53中所存储的DVC1值匹配时,则DVC1 DAC1调试事件就被指示,从而硬件对DAC1R位90进行置位。
应当注意,当在周期6内探测到l0上的DVC1 DAC1时,DAC偏移计数器被清零并被启用以开始在每个后续指令完成时计数。但是,流水线在时钟周期6内还不能被中断,因为l1和l2处于存储器阶段(mem1和mem2)并且从而必须在对未决的调试异常进行进一步的处理之前完成,因为存储器存取一旦被初始化它们就不能被中断,而是必须完成。但是后续的存储器存取没有被初始化,因为DVC1 DAC1异常当前是未决的。l1和l2的每次存储器存取在进入回写阶段后就被看作是完成的。应当注意,l2(指令l1和l2的后者)在时钟周期8内处于回写阶段,在时钟周期8之后能够获得未决的调试异常并且能够开始中断处理。也就是,DVC1 DAC1调试事件的中断处理直到时钟周期8之后(例如,在时钟周期9内)才开始。应当注意,在DVC1 DAC1被探测到时,l3只是处于流水线的EA/E0阶段并且因而能够被杀死。也就是,指令流中断于l3(即调试异常在l2执行之后,l3执行之前被获得)。因此,正常的执行可以在中断处理完成之后从l3再次开始。因此,DSRR0寄存器可以存储l3的地址,因为该地址对应于数据断点调试中断的返回指针。在调试中断处理器的软件例程完成之后,通过执行从中断指令处的返回使正常的执行重新开始,这使用作为要继续正常的(非中断的)指令执行而返回到的指令(在此情形中为l3)的指针存储于DSRR0中的值。
应当注意,在当探测到DVC1 DAC1调试事件时就清除DAC偏移计数器之后,随着每个后续指令完成时,DAC偏移计数器就加1直到调试异常被获得(中断处理在该点发生)。因此,DAC偏移计数器在时钟周期8内递增至2,由于后续的指令l1和l2分别于时钟周期7和8完成,因此,调试状态寄存器49的DAC_OFST位98被置为%10。也就是,在引起DVC1 DAC1的指令(在本实例中为l0)之后且在调试事件中断处理之前执行的指令的数量是2,其中该数量被存储为DAC_OFST。在这种情形中,用户能够了解,数据值断点一旦发生,则该断点不是实际引起数据值断点的前一条指令(在本实例中为l2),而是在l2之前2条多加指令(其中该值“2”对应于DAC_OFST)。在l2之前2条多加指令的那条指令是l0,其中该指令l0在当前实例中确实引起了数据值断点。如上文针对DAC_OFST位98所讨论的,如果DVC DAC发生,则这指示所保存的DSRR0值相对获得DAC调试异常的指令(该指令是l0)的地址的“偏移-1”。所保存的DSRR0值相对l0的偏移(在本实例中对应于l3的地址)是3,并且DAC_OFST位98从而指示2,其中该值2为“3-1”。应当注意,在可替换的实施方案中,能够使用不同的边界来计算DAC_OFST或者可以使用不同的计数方法以允许DAC_OFST来指示该实例中的l0。
参照图10,l0在时钟周期1内进入取出阶段,在时钟周期2内进入解码阶段,在时钟周期3内进入EA/E0阶段,其中l0的有效地址在时钟周期3内被计算,以及在时钟周期4内进入mem1/E1阶段。有效地址被提供于到调试控制电路44的导体35的地址部分上使得地址比较能够在l0的有效地址与存储于数据地址比较寄存器47中的DAC1值之间执行。l0的这种DAC1地址比较在时钟周期4内执行,并且地址比较匹配发生,如DAC1地址比较信号中的正脉冲所指示的。但是,由于DAC1需要DVC1限定器(因为DVC1位70的置位),因而DAC1R调试事件仍没有被指示,即使地址比较匹配发生。指令处理继续进行因为与l0(该指令l0将响应于l0装载指令而被检出)关联的数据还不可用于数据值比较。l0然后进行到mem2/E2阶段,在该mem2/E2阶段内数据正被从存储器(例如,图1中的存储器18)中装载。但是,在时钟周期5内,l0的装载数据由存储器等待状态所停车(stall)。(应当注意,l0的停车导致流水线停车,在该流水线停车中l1-l3的每个阶段也都在时钟周期5内停车。)因而,代替那个时钟周期5结束时提供l0的装载数据(如图9那样),这里直到时钟周期6结束后才提供于到调试控制电路44的导体35的数据部分上。然后,数据值比较在下一时钟周期(时钟周期7)执行,并且数据匹配发生,如DVC1数据比较信号中的正脉冲所指示的。在与数据值比较寄存器53中所存储的DVC1值匹配时,DVC1 DAC1调试事件被指示,从而硬件对DAC1R位90进行置位。
应当注意,当在周期7内探测到l0的DVC1 DAC1时,DAC偏移计数器被清零并且被启用以在每个后续指令完成时开始计数。但是,流水线在时钟周期7内还不能被中断,因为l1处于存储器阶段(mem2)并且因而必须在对未决的调试异常进行进一步处理之前完成,因为存储器存取一旦被初始化,它们就不能够被中断,而是必须完成。但是后续的存储器存取没有被初始化,因为DVC1 DAC1异常当前是未决的。但是,在图10的实例中,指令l2返回指示违反存取允许的DSI错误并且存储器从而将不给l2返回任何装载数据。因此,即使l2也处于存储器阶段(mem1),它也能够由于DSI错误而被杀死(kill)。处于EA/E0阶段的l3也能够被杀死,因为它还没有开始存储器存取,其中该存储器存取正常情况下在流水线阶段mem1内发生。指令l1在时钟周期8内处于回写阶段,在该时钟周期8之后未决的调试异常能够被进一步处理使得调试异常能够被获得并且中断处理能够开始执行。也就是,DVC1 DAC1调试事件的中断处理直到时钟周期8后(例如,在时钟周期9中)才开始。因此,指令流在l2中断(即调试异常在l1执行之后及l2执行之前被获得)。然后,正常的执行可以在调试中断的中断处理完成之后从l2再次开始。因此,DSRR0寄存器可以存储l2的地址,因为该地址对应于数据断点调试中断的返回指针。在调试中断处理器的软件例程完成之后,通过执行从中断指令处的返回使正常的执行重新开始,这使用作为要继续正常的(非中断的)指令执行而返回到的指令(在此情形中为l2)的指针保存于DSRR0中的值。
应当注意,在当探测到DVC1 DAC1时就清除DAC偏移计数器之后,随着每个后续指令完成时,DAC偏移计数器就加1直到调试异常被获得(中断处理在该点发生)。直到调试异常被获得(在其点中断处理发生)。因此,DAC偏移计数器在当前实例中只递增至1,因此,调试状态寄存器49的DAC_OFST位98被置为%01。也就是,在引起DVC1 DAC1的指令(在本实例中为l0)之后且在调试事件中断处理之前执行的指令的数量是1,其中该数量被存储为DAC_OFST。在这种情形中,用户能够了解,数据值断点一旦发生,则该断点不是实际引起数据值断点的前一条指令(在本实例中为l1),而是在l2之前1条多加指令。在l1之前1条多加指令的那条指令是l0,其中该指令l0在当前实例中确实引起了数据值断点。如上文针对DAC_OFST位98所讨论的,如果DVC DAC发生,则这指示所保存的DSRR0值相对获得DAC调试异常的指令(该指令是l0)的地址的“偏移-1”。所保存的DSRR0值相对l0的偏移(在本实例中对应于l2的地址)是2,并且DAC_OFST位98从而指示2,其中该值1为“2-1”。应当注意,在可替换的实施方案中,能够使用不同的边界来计算DAC_OFST或者可以使用不同的计数方法以允许DAC_OFST来指示该实例中的l0。
参照图11,l0在时钟周期1内进入取出阶段,在时钟周期2内进入解码阶段,在时钟周期3内进入EA/E0阶段,其中l0的有效地址在时钟周期3内被计算,以及在时钟周期4内进入mem1/E1阶段。有效地址被提供于到调试控制电路44的导体35的地址部分上使得地址比较能够在l0的有效地址与存储于数据地址比较寄存器47中的DAC1值之间执行。这种DAC1地址比较在时钟周期4内为l0执行并且地址匹配发生,如DAC1地址比较信号中的正脉冲所指示的。但是,由于DAC1需要DVC1限定器(因为DVC1位70的置位),因而DAC1R调试事件仍没有被指示,即使地址比较匹配发生。指令处理继续进行因为与l0(该指令l0将响应于l0装载指令而被检出)关联的数据还不可用于数据值比较。l0然后进行到mem2/E2阶段,在该mem2/E2阶段内数据正被从存储器(例如,图1中的存储器18)中装载。l0的装载数据在那个时钟周期5结束时准备就绪,并且被提供于到调试控制电路44的导体35的数据部分上。然后,数据值比较在下一时钟周期(时钟周期6)执行,并且数据匹配发生,如DVC1数据比较信号中的正脉冲所指示的。在与数据值比较寄存器53中所存储的DVC1值匹配时,DVC1 DAC1调试事件被指示,从而硬件对DAC1R位90进行置位。
当在周期6内探测到l0上的DVC1 DAC1时,DAC偏移计数器被清零并被启用以在每个后续指令完成时开始计数。在图11的实例中,应当注意的是存储器阶段mem1内的l1由于转换旁视缓冲器(TLB)中的地址转换丢失引起了错误,并且因而l1没有继续执行。(应当注意,TLB没有在附图中示出,但是能够与存储器管理单元(MMU)一起被布置于处理器12中,如本领域所已知的,其中TLB和MMU两者都可以如本领域所已知的那样操作)。因此,在时钟周期6中,指令l1-l3全部都能够被杀死。因此,调试异常能够在时钟周期7内立即启用,使得调试异常能够被获得并且中断处理能够开始执行。也就是,指令l0的DVC1 DAC1调试事件的中断处理能够在时钟周期6之后(例如,在时钟周期7中)开始。因此,指令流在l1中断(即调试异常在l0执行之后及l1执行之前被获得)。然后,正常的执行可以在中断处理完成之后从l1再次开始。因此,DSRR0寄存器可以存储l1的地址,因为该地址对应于数据断点调试中断的返回指针。在当前的实例中,DAC偏移计数器保持为0;因此,调试状态寄存器49的DAC_OFST位98保持为%00。也就是,引起DVC1 DAC1的指令(在本实例中为l0)是在被中断的指令(l1)之前的指令。然后,正常的执行可以在调试中断的中断处理完成之后从l1再次开始。因此,DSRR0寄存器可以存储l1的地址,因为该地址对应于数据断点调试中断的返回指针。在调试中断处理器的软件例程完成之后,通过执行从中断指令处的返回使正常的执行重新开始,这使用作为要继续正常的(非中断处理)指令执行而返回到的指令(在此情形中为l1)的指针保存于DSRR0中的值。
因此,应当注意,关于DVC DAC的数据值断点的时序能够根据各种因素来改变,其中许多因素是不可预料的以及事先不知道的。但是,通过使用DAC_OFST,调试异常一旦被实际获得,用户就能够确定是哪条指令实际上引起了数据值断点(即实际上引起了要被获得的调试异常)。
在某些情况下,例如当用户已经通过用中断屏蔽控制对调试中断进行明确的屏蔽来禁用它们时,IDE位76则通知用户调试事件(例如DVC DAC调试事件)已经发生,但它是不准确的因为调试异常已经被用户全局禁用了。也就是,即使调试事件发生了,但调试异常当前正由用户屏蔽着。因此,一旦调试异常在对调试中断解除了屏蔽之后被实际获得,也不能使用DSC_OFST值来准确判定是哪条指令引起调试异常发生的,因为许多指令可以在用户对调试中断再次解除屏蔽之前被执行。I在这种情形中,DE位76可以由软件使用以限定DAC_OFST的有效性,因为它不反映所执行指令的实际数量。
图12-16以表格形式示出了说明DAC和DVC DAC调试事件的发生的多种实例以及在一种实施方案中说明调试状态寄存器49的结果更新,例如DAC_OFST位98。在图12-16的表格中,一系列的三指令,l0、l1及l2,被使用于每个实例。第一指令,l0,是装载/存储类指令,第二指令,l1,除非另有说明否则是装载/存储类指令,以及第三指令,l2,除非另有说明否则是装载/存储指令。应当注意,图12包括行201-208,图13包括行209-212,图14包括行213-215,图15包括行216-218,以及图16包括行219-220。
参考代表一个实例的表格的行201,假定是l0导致了DTLB错误并且没有DAC调试事件。在这种情形中,DTLB异常被获得并且对调试状态寄存器没有更新被执行。行202代表一个实例,在该实例中l0导致了数据存储中断(DSI)错误并且没有DAC调试事件。在这种情形中,DSI异常被获得并且对调试状态寄存器没有更新被执行。行203代表一个实例,在该实例中l0导致了DTLB错误;但是,DAC调试事件被指示(例如DAC1或DAC2调试事件)。在这种情形中,作为DACx调试事件的结果而引起的调试异常被获得,并且对应的DACx位字段被置位(例如DAC1R、DAC1W、DAC2R、DAC2W)并且IDE位76被置位,并且DAC_OFST位98被置为%00。DSRR0寄存器指向l0(即存储l0的地址)。行204代表一个实例,在该实例中l0导致了DSI错误;但是,DACx调试事件被指示(例如DAC1或DAC2调试事件)。在这种情形中,作为DACx调试事件的结果而引起的调试异常被获得,并且对应的DACx位字段被置位(例如DAC1R、DAC1W、DAC2R、DAC2W)并且IDE位76被置位,并且DAC_OFST位98被置为%00。DSRR0寄存器指向l0(即存储l0的地址)。行205代表一个实例,在该实例中l0导致了DACx调试事件(例如DAC1或DAC2调试事件)。在这种情形中,作为DACx调试事件的结果而引起的调试异常被获得,并且对应的DACx位字段被置位(例如DAC1R、DAC1W、DAC2R、DAC2W),并且DAC_OFST位98被置为%00。DSRR0寄存器指向l1(即存储l1的地址)。应当注意,对于在行203和204中所指示的条件,IDE位76被置位,但是对于行205,IDE位76则没有被置位。这被用来指出行203和204的DAC_OFST置为%00指示着指令l0引起了中断发生,以及DSRR0中所保存的程序计数器值当在l0上的调试中断由于DAC1或DAC2事件而被获得时正指向着l0而不是指向正常的位置(l1)。这发生了是因为在l0上还存在同时的DTLB或DSI异常,并且从而l0应当在调试中断后被重新执行,因为它还没有完成执行。在重新执行时,DAC1、DAC2事件可以被用户禁用,以及正常的DTLB或DSI异常然后被获得并被适当地处理。但对于行205,指令l0已经完成执行,因而在DAC_OFST值为%00时所保存的DSRR0值指向l1,并且IDE被清除,指示DSRR0中对于DAC_OFST值为%00时的正常边界条件。
行206-220代表了多个实例,在这些实例中l0引起了DVCxDACx调试事件(例如DVC1DAC1或DVC2DAC2调试事件)。行206代表一个实例,在该实例中l1没有引起异常并且能够是任何指令并且l3没有引起异常并且不是装载/存储类型的指令。在这种情形中,作为DVCx DACx调试事件的结果而引起的调试异常被获得,并且对应的DACx位字段被置位(例如DAC1R、DAC1W、DAC2R、DAC2W),并且DAC_OFST位98被置为%01。DSRR0寄存器指向l2之后的指令。通过检查DAC_OFST位98,能够判定l0引起了DVCx DACx事件。
行207代表与图9的实例相似的一个实例,在该实例中l1没有引起异常并且l3没有引起异常,但l3是装载/存储类指令。在这种情形中,作为DVCx DACx调试事件的结果而引起的调试异常被获得,并且对应的DACx位字段被置位(例如DAC1R、DAC1W、DAC2R、DAC2W),并且DAC_OFST位98被置为%10。DSRR0寄存器指向l2之后的指令。在该实例中,指令l2应当允许完成,因为它已经开始了存储器存取。行208代表与图11的实例相似的一个实例,在该实例中l1引起DTLB错误且没有DAC。在这种情形中,作为DVCx DACx调试事件的结果而引起的调试异常被获得,并且对应的DACx位字段被置位(例如DAC1R、DAC1W、DAC2R、DAC2W),并且DAC_OFST位98被置为%00。DSRR0寄存器指向l1,因为它招致了DTLB错误,且没有完成执行。通过检查DAC_OFST位98,能够判定l0引起了DVCx DACx事件。
行209代表一个实例,在该实例中l1引起了DSI错误且没有DAC。在这种情形中,作为DVCx DACx调试事件的结果而引起的调试异常被获得,并且对应的DACx位字段被置位(例如DAC1R、DAC1W、DAC2R、DAC2W),并且DAC_OFST位98被置为%00。DSRR0寄存器指向l1,因为它招致了DSI异常并且没有完成。行210代表一个实例,在该实例中l1引起了DTLB错误及DACy(例如DAC1或DAC2调试事件)。在这种情形中,作为DVCx DACx调试事件的结果而引起的调试异常被获得,并且对应的DACx位字段被置位(例如DAC1R、DAC1W、DAC2R、DAC2W),并且DAC_OFST位98被置为%00。DSRR0寄存器指向l1。在这种情形中,l1的DACy事件没有被报告,因为它由于l1上的DTLB错误无论如何都应当被重新执行。行211代表一个实例,在该实例中l1引起了DSI错误及DACy(例如DAC1或DAC2调试事件)。在这种情形中,作为DVCx DACx调试事件的结果而引起的调试异常被获得,并且对应的DACx位字段被置位(例如DAC1R、DAC1W、DAC2R、DAC2W),并且DAC_OFST位98被置为%00。DSRR0寄存器指向l1。在这种情形中,l1的DACy事件没有被报告,因为它由于l1上的DTLB错误无论如何都应当被重新执行。应当注意,对于行208-211的实例,l1异常被屏蔽;但是,这是随实现而定的并且在其它处理器上可以是不同的。
行212代表一个实例,在该实例中l1引起了DACy(例如DAC1或DAC2调试事件)。在这种情形中,调试异常被获得,对应的DACx位字段被置位(例如DAC1R、DAC1W、DAC2R、DAC2W),对应的DACy位字段被置位(例如DAC1R、DAC1W、DAC2R、DAC2W),并且DAC_OFST位98被置为%01。DSRR0寄存器指向l2。行213代表一个实例,在该实例中l1引起了DVCy DACy(例如DVC1 DAC1或DVC2 DAC2调试事件)并且是正常的装载/存储指令而在该实例中l2不是装载/存储指令。在这种情形中,调试异常被获得,并且对应的DACx位字段被置位(例如DAC1R、DAC1W、DAC2R、DAC2W),对应的DACy位字段被置位(例如DAC1R、DAC1W、DAC2R、DAC2W),并且DAC_OFST位98被置为%01。DSRR0寄存器指向l2。还应当注意,在这种情形中,如果x等于y,那么调试状态寄存器与DSRR0的结果状态(resultant state)可能无法区别于“无DACy”的情形(即其中l2没有引起DACy的情形)。
行214代表一个实例,在该实例中l1引起了DVCy DACy(例如DVC1 DAC1或DVC2 DAC2调试事件)并且是正常的装载/存储指令并且在该实例中l2是没有引起异常的装载/存储指令。在这种情形中,在l2完成之后获得调试异常,因为它已经开始存储器存取,并且对应的DACx位字段被置位(例如DAC1R、DAC1W、DAC2R、DAC2W),对应的DACy位字段被置位(例如DAC1R、DAC1W、DAC2R、DAC2W),并且DAC_OFST位98被置为%10。DSRR0寄存器指向l2之后的指令。还应当注意,在这种情形中,如果x等于y,那么调试状态寄存器与DSRR0的结果状态可能无法区别于“无DACy”的情形(即其中l2没有引起DACy的情形)。
行215代表一个实例,在该实例中l1引起了DVCy DACy(例如DVC1 DAC1或DVC2 DAC2调试事件)并且是正常的装载/存储指令并且在该实例中l2引起了DSI错误。行216代表一个实例,在该实例中l1引起了DVCy DACy(例如DVC1 DAC1或DVC2 DAC2调试事件)并且是正常的装载/存储指令并且在该实例中l2引起了DTLB错误。在这些情形的任何一种情形中,调试异常被获得,并且对应的DACx位字段被置位(例如DAC1R、DAC1W、DAC2R、DAC2W),对应的DACy位字段被置位(例如DAC1R、DAC1W、DAC2R、DAC2W),并且DAC_OFST位98被置为%01。DSRR0寄存器指向l2。还应当注意,在这种情形中,如果x等于y,那么调试状态寄存器与DSRR0的结果状态可能无法区别于“无DACy”的情形(即其中l2没有引起DACy的情形)。此外,应当注意,在这些情形中,指令l2被屏蔽;但是,这种行为是随实现而定的并且在其它处理器上可以是不同的。
行217代表一个实例,在该实例中l1引起了DVCy DACy(例如DVC1 DAC1或DVC2 DAC2调试事件)并且是正常的装载/存储指令并且在该实例中l2是正常的装载/存储指令或者是引起DACy或DVCy DACy的多字装载/存储指令。在这种情形中,调试异常被获得,并且对应的DACx位字段被置位(例如DAC1R、DAC1W、DAC2R、DAC2W),对应的DACy位字段被置位(例如DAC1R、DAC1W、DAC2R、DAC2W),并且DAC_OFST位98被置为%10。DSRR0寄存器指向l2之后的指令。还应当注意,在这种情形中,如果x等于y,那么调试状态寄存器与DSRR0的结果状态可能无法区别于“无DACy”情形(即其中l1或l2没有引起DACy的情形)。
行218代表一个实例,在该实例中l1引起了DVCy DACy(例如DVC1 DAC1或DVC2 DAC2调试事件)并且是多字装载/存储指令并且在该实例中l2可以是任何指令。在这种情形中,调试异常被获得,并且对应的DACx位字段被置位(例如DAC1R、DAC1W、DAC2R、DAC2W),对应的DACy位字段被置位(例如DAC1R、DAC1W、DAC2R、DAC2W),并且DAC_OFST位98被置为%01。DSRR0寄存器指向l2。在这种情形中,因为l1装载或存储多寄存器,所以有足够的时间来防止l2存取存储器,一l0的DVCxDACx条件发生,则它就可以被杀死。还应当注意,在这种情形中,如果x等于y,那么调试状态寄存器与DSRR0的结果状态可能无法区别于“无DACy”情形(即其中l2没有引起DACy的情形)。
行219代表一个实例,在该实例中l1可以是任何指令并且没有引起异常并且在该实例中l2是正常的装载/存储或者是引起DSI错误以及可能或可能不引起DAC的多字装载/存储指令。在这种情形中,调试异常被获得,并且对应的DACx位字段被置位(例如DAC1R、DAC1W、DAC2R、DAC2W),对应的DACy位字段被置位(例如DAC1R、DAC1W、DAC2R、DAC2W),并且DAC_OFST位98被置为%01。DSRR0寄存器指向l2。还应当注意,在这种情形中,指令l2被屏蔽;但这种行为是随实现而定的并且在其它处理器上可以是不同的。
行220代表一个实例,在该实例中l1可以是任何指令并且没有引起异常并且在该实例中l2是正常的装载/存储或者是引起DACy或DVCy DACy的多字装载/存储指令。在这种情形中,调试异常被获得,并且对应的DACx位字段被置位(例如DAC1R、DAC1W、DAC2R、DAC2W),对应的DACy位字段被置位(例如DAC1R、DAC1W、DAC2R、DAC2W),并且DAC_OFST位98被置为%10。DSRR0寄存器指向l2之后的指令。还应当注意,在这种情形中,如果x等于y,那么调试状态寄存器与DSRR0的结果状态可能无法区别于“无DACy”情形(即其中l2没有引起DACy的情形)。
图17是根据本发明的另一种实施方案与图1的数据处理系统关联的调试状态寄存器49的图表。在图17的实例中,调试状态寄存器49包括标记为:IDE 76、ICMP 78、BRT 80、IAC1 82、IAC2 84、IAC3 86、IAC4 88、DAC1R 90、DAC1W 92、DAC2R 94、DAC2W96、DAC_OFSTA 102、OCCA 104、DAC_OFSTB 106、及OCCB108的位字段。图17的实例还可以包括保留的位字段110,该位字段110可以被保留以备将来使用。应当注意,以上(例如,在对图7和图8的讨论中)针对调试状态寄存器49以及位字段IDE 76、ICMP78、BRT 80、IAC1 82、IAC2 84、IAC3 86、IAC4 88、DAC1R90、DAC1W 92、DAC2R 94、及DAC2W 96所提供的说明同样应用于图17,并且因此将不在这里重复。但是,与图7的实例不一样,图17的实例包括的是多DAC偏移字段(例如DAC_OFSTA 102和DAC_OFSTB 106)而不是DAC_OFST 98。多DAC偏移字段的使用使其具有保持追踪多偏移的能力,其中每个DAC偏移字段都可以如上文参考DAC_OFST 98所描述的那样来操作。但是,由于多DAC偏移字段的存在,每个DAC偏移字段(例如DAC_OFSTA 102和DAC_OFSTB 106)都具有对应的发生字段(例如分别为OCCA 104和OCCB 108)。
因此,DAC_OFSTA位102可以用来指示已经在引起要被指示的第一DVC DAC(DVC1 DAC1或DVC2 DAC2)的指令与数据值断点发生及DVC DAC的调试异常被获得的点之间执行的指令的数量。DAC_OFSTA位102可以用来存储所保存的DSRR0值相对装载或存储指令的地址的“偏移-1”,其中所述装载或存储指令以与DAC_OFST 98相同的方式获得了第一数据地址比较调试异常。如上文所讨论的,DSRR0对应于调试保存恢复寄存器0,并且所保存的DSRR0值对应于调试中断的返回指针。通过这种方式,能够确定有多少指令已经在引起第一DVC DAC的地址与指令流于其上中断以获得数据值断点(其中该数据值断点可以被获得作为第一DVC DAC或另一DVC DAC的结果)的点之间的间隔内执行了,这允许用户判定是哪条指令引起了该第一DVC DAC。在一种实施方案中,DAC_OFSTA位102在正常情况下置为%00,并且DVC DAC将把该字段置为%00、%01、%10、或%11,这表示“偏移-1”。因为DVC_OFSTA位102在默认下正常情况置为%00,OCCA 104可以在第一DVC DAC发生时置位,以指出DAC_OFSTA保持着指示DVCDAC偏移的值。因此,DAC_OFSTB位106可以用来指示已经在引起要被指示的第二DVC DAC的指令与数据值断点发生以及DVCDAC的调试异常被获得的点之间执行的指令的数量。DAC_OFSTB位106可以用来存储所保存的DSRR0值相对获得第二数据地址比较调试异常的装载或存储指令的地址的“偏移-1”。通过这种方式,还能够确定有多少指令已经在引起第二DVC DAC的地址与指令流于其上中断以获得数据值断点(这里再次,数据值断点可以被获得作为第一DVC DAC或第二DVC DAC的结果)的点之间的间隔内执行了。在一种实施方案中,DAC_OFSTB位106在正常情况下置为%00,并且DVC DAC将把该字段置为%00、%01、%10、或%11,这代表“偏移-1”。因为DAC_OFSTB位106在默认下正常情况置为%00,OCCB 108可以在第二DVC DAC发生时置位。(此外,如上所述,应当注意,如果DVC DAC的同时的DTLB错误或DSI错误发生,则对应的DAC偏移位可以被置为%00并且IDE位76可以被置为1,如上文参考DAC_OFST位98所讨论的。)
因此,应当注意,指令的数量可以导致DVC DAC,以及在指令流被中断以获得数据值断点的点上,假定对应的发生位被置位了,则偏移字段DAC_OFSTA 102和DAC_OFSTB 104中的每个都能够指示是指令流中的哪条(或哪些)指令引起了其中可能已经引起数据值断点的DVC DAC。如果OCCA位104和OCCB位108两者都被置位了,指示着两个DVC DAC已发生,用户可以使用对应的偏移值以指示是哪条指令实际上引起了每个DVC DAC,但是用户可能有必要实际确定是这两条指令中的哪一条(即该两个DVC DAC中的哪一个)实际上导致了中断指令流的数据值断点。
图18示出了说明多偏移字段的使用的时序图,如同参考图17所讨论的。对于图18的实例,假定l0-l4中的每条都是装载指令,并且l0产生第一DAC DVC调试事件(DVCx DACx,其中x能够是1或2)并且l2产生第二DAC DVC调试事件(DVCy DACy,其中y能够是1或2)。图18同样参照6级流水线来描述;但是,可替换的实施方案可以包括不同的流水线,例如具有不同的级数。指令流水线(例如图18中所参照的6级流水线)的操作,是本领域已知的并且因此在这里将不作详细描述。此外,图18包括可以与处理器12的处理器时钟对应的时钟信号。处理器时钟能够是系统时钟或者是仅给处理器12的一部分提供的时钟,并且能够如同本领域已知的那样来产生。
参照图18,l0在时钟周期1内进入取出阶段,在时钟周期2内进入解码阶段,在时钟周期3内进入EA/E0阶段,其中l0的有效地址在时钟周期3内被计算,并且然后在时钟周期4内进入mem1/E1阶段。因此,有效地址在时钟周期3结束时准备就绪并且被提供于到调试控制电路44的导体35的地址部分上使得地址比较能够在l0的有效地址与存储于数据地址比较寄存器47中的DAC值(DAC1和DAC2)之间执行。(应当注意,在这一时间点地址还可以由BIU 34布置于总线20上。)指令l0的这种DACx地址比较在时钟周期4内执行,并且匹配发生,如DAC地址比较信号中的正脉冲所指示的,其中该DAC地址比较信号能够是在调试控制电路44内确证以指示DACx地址比较正在执行并且匹配已经发生的控制信号。但是,由于DACx需要DVCx限定器(因为DVCx位的置位,例如DVC1位70或DVC2位72),所以调试事件还没有被指示,即使DACx地址比较发生匹配。指令处理继续进行,因为与l0(该指令l0将响应于l0装载指令被检出)关联的数据还不可用于数据值比较。l0然后进行到mem2/E2阶段,在该mem2/E2阶段内数据正被从存储器(例如,图1中的存储器18)中装载。该装载数据在该阶段结束时可以是可用的(以及例如由BIU 34通过总线20来接收)并且然后被提供于到调试控制电路44的导体35的数据部分上使得数据值比较能够在关联l0的装载数据值与存储于数据值比较寄存器53中的DVCx值之间执行。因此,数据值比较在下一时钟周期(时钟周期6)内执行,并且匹配发生,如DACx数据比较信号中的正脉冲所指示的,其中该DACx数据比较信号能够是在调试控制电路44内确证以指示DAC数据比较正在执行的控制信号。当与数据值比较寄存器53中所存储的DVCx值匹配时,DVCx DACx调试事件被指示,从而硬件对相应的状态位(例如DAC1R位90或DAC2R位94,取决于l0是引起了DAC1 DVC1还是DAC2 DVC2)进行置位。
应当注意,当在周期6内探测到l0的DVCx DACx时,DAC偏移A计数器被清零并被启用以开始在每个后续指令完成时计数。(DAC偏移A计数器可以包含于计数器41中。)但是,流水线在时钟周期6内还不能被中断,因为l1和l2处于存储器阶段(mem1和mem2)并且从而必须在对未决的调试异常进行进一步的处理之前完成,因为存储器存取一旦被初始化,它们就不能被中断,而是必须完成。但是后续的存储器存取没有被初始化,因为DVC1 DAC1异常当前是未决的。l1和l2的每次存储器存取在进入回写阶段后就被看作是完成的。应当注意,l2(指令l1和l2的后者)在时钟周期8内处于回写阶段,在时钟周期8之后能够处理未决的调试异常使得调试异常能够被获得并且能够开始中断处理。也就是,DVC1 DAC1调试事件的中断处理直到时钟周期8之后(例如,时钟周期9)才能开始。应当注意,在DVC1 DAC1被探测到时,l3只是处于流水线的EA/E0阶段并且因而能够被杀死。也就是,指令流中断于l3。因此,执行可以在中断处理完成之后从l3再次开始。因此,DSRR0寄存器可以存储l3的地址,因为该地址对应于数据断点调试中断的返回指针。在调试中断处理器的软件例程完成之后,通过执行从中断指令处的返回使正常的执行重新开始,这使用作为要继续正常的(非中断的)指令执行而返回到的指令(在此情形中为l3)的指针存储于DSRR0中的值。
应当注意,在当探测到DVCx DACx调试事件时就清除DAC偏移A计数器之后,随着每个后续指令完成时,DAC偏移A计数器就加1直到调试异常被获得(中断处理在该点发生)。因此,DAC偏移A计数器在时钟周期8内递增至2,因此,调试状态寄存器49的DAC_OFSTA位102被置为%10并且OCCA位104也被置位。也就是,在引起DVCx DACx的指令(在本实例中为l0)之后且在调试事件中断处理之前执行的指令的数量是2,其中该数量被存储为DAC_OFSTA。
应当注意,l2在时钟周期5内进入EA/E0阶段。因此,有效地址在时钟周期5结束时准备就绪并且被提供于到调试控制电路44的导体35的地址部分上使得地址比较能够在l2的有效地址与数据地址比较寄存器47中所存储的DAC值(DAC1和DAC2)之间执行。(应当注意,在这一时间点地址还可以由BIU 34布置于总线20上。)该DACy地址比较在时钟周期6内执行,并且匹配发生,如DACy地址比较信号中的正脉冲所指示的,其中该DACy地址比较信号能够是在调试控制电路44内确证以指示DAC地址比较正在执行并且匹配正在发生的控制信号。但是,由于DAC1需要DVCy限定器(因为DVCy位的置位,例如DVC1位70或DVC2位72),因而调试事件还没有被指示,即使DACy地址比较发生匹配。指令处理继续进行,因为与l2(该指令l2将响应于l2装载指令而被检出)关联的数据仍然不可用于数据值比较。l2然后进行到mem2/E2阶段,在该阶段中数据正被从存储器(例如,图1中的存储器18)内装载。该装载数据在这个阶段结束时可以是可用的(以及例如由BIU34通过总线20来接收)并且然后被提供于到调试控制电路44的导体35的数据部分上,使得数据值比较能够在关联l2的装载数据值与存储于数据值比较寄存器53内的DVCy值之间执行。因此,数据值比较在下一时钟周期(时钟周期8)内执行,并且匹配发生,如DVCy数据比较信号中的正脉冲所指示的,其中该DVCy数据比较信号能够是在调试控制电路44内确证以指示DVC数据比较正在执行以及匹配正在发生的控制信号。在与数据值比较寄存器53中所存储的DVCy值匹配时,则DVCy DACy调试事件就被指示,从而硬件对相应的状态位(例如DAC1R位90或DAC2R位94,取决于l2是引起了DAC1 DVC1还是DAC2 DVC2)进行置位。
应当注意,当在周期8内探测到l2的DVCy DACy时,DAC偏移B计数器被清零并被启用以开始在每个后续指令完成时计数。(DAC偏移B计数器可以包含于计数器41中。)流水线在时钟周期8内还不能被中断,因为l1和l2两者都必须在数据值断点响应于l0所引起的DVCx DACx被获得之前完成。因此,与l2对应的数据也被返回,使DVCy DACy能够在获得调试异常之前发生。如上所述,指令流在周期8之后中断于l3,意味着在获得调试异常时DAC偏移B计数器没有递增并保持为0。因此,调试状态寄存器49的DAC_OFSTB位106被置为%00并且OCCB位108也被置位(这将使用户能够了解到在还没有第二DVC DAC发生时%00指示实际的偏移值而不仅仅返回默认值)。因此,在引起DVCy DACy的指令(在本实例中为l2)之后且在中断处理之前执行的指令的数量是0。通过这种方式,应当注意,DAC_OFSTB位106和OCCB位108能够提供关于在第一调试事件(例如DVCx DACx)与该第一调试事件的调试异常被获得的点之间发生的调试事件(例如DVCy DACy)的信息。
因此,应当注意,在图18的实例中,两个DVC DAC在周期8之后获得调试异常之前发生,其中每个DVC DAC由不同的指令引起。与对应的OCCA位104和OCCB位108一起使用DAC_OFSTA位102和DAC_OFSTB位104,应当了解的是l0(在指令l2之前2条多加指令,对应于指令流中断的点)和l2(在指令l2之前0条多加指令,对应于指令流中断的点)每条指令都引起了DVC DAC。然后,用户能够译解是哪条指令实际上导致了数据值断点(该指令在本实例中为l0,它引起了第一DVC DAC,DVCx DACx)。还应当注意,x和y可以是不同的使得l0引起DVC1 DAC1或DVC2 DAC2而l2引起DVC1 DAC1及DVC2 DAC2中的另一个。作为选择,x可以等于y,使得l0和l2两者都引起了DVC1 DAC1或DVC2DAC2。此外,应当注意,在一种实施方案中,DAC A偏移计数器和DAC B偏移计数器可以位于偏移计数器41内。
因此,能够认识到一个或更多个偏移值可以被如何使用以帮助确定在调试事件发生与调试异常获得之间(即在调试事件发生与调试事件的中断处理起始之间)执行的指令的数量。这可以允许进行改进的调试,在该改进的调试中用户能够使用该一个或更多个偏移值以更好地了解是哪条指令实际上引起了将被获得的调试异常。尽管以上说明已经针对导致数据值断点的DVC DAC调试事件进行了提供,但是这些偏移值(例如DAC_OFST、DAC_OFSTA、及DAC_OFSTB)也可以使用于其它类型的调试事件。也就是,偏移字段(例如DAC_OFST、DAC_OFSTA、及DAC_OFSTB)可以用来指示在任何类型的调试事件发生与对应的调试异常获得之间(即在任何类型的调试事件发生与具体调试事件的中断处理起始之间)执行的指令的数量。
此外,应当注意,了解自调试事件发生以来已经执行的指令的数量,而非已经引起该事件的指令的位置可能是有帮助的,因为能够理解相同的指令(具有相同的位置)可以在达到流水线边界之前多次执行,其中指令流可以为了未决的调试事件在该流水线边界中断,因而位置信息单独可能不足以确定事件的实际次序。
在一种实施方案中,一种系统包括用于通过顺序地取出、解码、执行及写入与每条指令的执行关联的结果来执行多条指令的流水线处理器,以及与流水线处理器耦连的用于监视指令的执行以确定调试事件发生的时间并产生调试异常以中断指令处理流的调试电路,该调试电路还包括用于指示表示在引起调试事件的指令与获得调试异常时的在指令执行中的点之间完成指令执行的指令(如果有的话)的数量的值的控制电路。
在另一种实施方案中,调试电路的控制电路还包括用于计数并提供计数值的计数器,其中该计数值作为表示在引起调试事件的指令之后完成指令执行的指令的数量的值。在另一种实施方案中,计数值大于0,这指示出调试事件的处理是不准确的。
在另一种实施方案中,调试电路指示随引起调试事件的指令之后完成指令执行的一条或更多条附加的指令也引起了调试事件发生。
在另一种实施方案中,流水线处理器执行其中每条都引起调试事件的至少两条指令以及控制电路还包括多个计数器,其中每个计数器提供由随引起调试事件的该至少两条指令的各自一条之后完成指令执行的附加的指令的数量所确定的各自的计数值。
在另一种实施方案中,调试电路还包括调试状态寄存器,其中该调试状态寄存器具有用于保持表示随引起调试事件的指令之后直到获得调试异常时的在指令执行中的预定点之前完成指令执行的附加的指令(如果有的话)的数量的值的字段。
在另一种实施方案中,调试电路响应于对多条指令中的一条进行的解码来确定调试事件已经发生,将由流水线处理器所形成的地址与一个或更多个预定的调试地址进行比较以确定数据地址匹配是否已经发生,以及将由流水线处理器所存取的数据值与一个或更多个预定的数据值进行比较以确定数据值匹配是否已经发生,其中该调试事件需要两种比较操作中的一种匹配来发生。
在再一种实施方案中,一种系统包括用于通过顺序地取出、解码、执行及写入与每条指令的执行关联的结果来执行多条指令的流水线处理电路,以及与流水线处理电路耦连的用于通过选择性地将一个或更多个调试地址与由指令执行所形成的地址进行比较以及选择性地将至少一个调试数据值与由指令执行所形成的数据进行比较来监视指令的执行的调试电路,其中该调试电路确定两种比较发生匹配的时间以及,作为响应,指示调试事件,该调试电路指示在引起调试事件的指令之后直到获得数据值断点时的在指令执行中的预定点之前所执行的指令的数量。
在该再一种实施方案的另一种实施方案中,数据值断点是不准确的以及测试电路还包括具有指示不准确的数据值断点是否已经发生的位字段的寄存器。
在该再一种实施方案的另一种实施方案中,测试电路还包括用于指示关于在调试事件发生的时间与获得数据值断点的时间之间发生的事件的状态信息的状态寄存器。在另一种实施方案中,在调试事件发生的时间与获得数据值断点的时间之间发生的事件之一还包括第二调试事件。
在该再一种实施方案的另一种实施方案中,调试电路还包括用于计数并提供随引起调试事件的指令之后完成指令执行的指令的数量的计数值的计数器。
在该再一种实施方案的另一种实施方案中,调试电路还包括状态调试寄存器,具有用于保持指示随引起调试事件的指令之后直到获得数据值断点时的在指令执行中的预定点之前完成指令执行的附加的指令(如果有的话)的数量的数值的字段。
在又一种实施方案中,一种方法包括通过顺序地取出、解码、执行及写入与每条指令的执行关联的结果来执行多条指令,监视指令的执行以确定调试事件发生的时间,产生调试异常以中断指令处理流,以及指示在引起调试事件的指令与获得调试异常时的在指令执行中的点之间完成指令执行的指令(如果有的话)的数量。
在该又一种实施方案的另一种实施方案中,方法还包括计数以及提供随引起调试事件的指令之后完成指令执行的指令的数量的计数值。在另一种实施方案中,方法还包括形成大于0的计数值,这指示出调试事件的处理是不准确的。
在该又一种实施方案的另一种实施方案中,方法还包括确定随引起调试事件的指令之后完成指令执行的一条或更多条附加的指令也引起了调试事件发生。
在该又一种实施方案的另一种实施方案中,方法还包括确定其中每条都引起调试事件的至少两条指令,以及在不同的计数器中存储随该至少两条指令的每一条之后完成指令执行的附加的指令的数量的各自的计数值。
在该又一种实施方案的另一实施方案中,方法还包括在调试电路中提供调试状态寄存器,其中该调试状态寄存器具有用于保持指示随引起调试事件的指令之后直到获得调试异常时的在指令执行中的预定点之前完成指令执行的附加的指令(如果有的话)的数量的值的字段。
在该又一种实施方案的另一种实施方案中,方法还包括响应于对多条指令中的一条进行的解码来确定调试事件已经发生,将由流水线处理器所形成的地址与一个或更多个预定的调试地址进行比较以确定数据地址匹配是否已经发生,以及将由流水线处理器所形成的数据值与一个或更多个预定的数据值进行比较以确定数据值匹配是否已经发生,其中该调试事件需要两种比较操作中的一种匹配来发生。
因为实现本发明的装置大部分包括本领域技术人员所已知的电子组件及电路,为了本发明的基本概念的了解及理解以及为了不使本发明的内容模糊或分散,除了上文所说明的认为必要的电路细节以外将不对其它更多的电路细节进行说明。
在此所使用的术语“程序”被定义为用于在计算机系统上执行而设计的的指令序列。程序或计算机程序可以包括子程序、函数、过程、对象方法、对象实现、可执行的应用程序、小程序(applet)、服务小程序(servlet)、源代码、目标代码,共享库/动态装载库和/或用于在计算机系统上执行而设计的其它指令序列。
以上实施方案中的一些(若适用)可以使用多种不同的信息处理系统来实行。例如,尽管图1及其讨论描述了示例性的信息处理体系结构,但是该示例性的体系结构只是为了在本发明的各个方面的讨论中提供有用的参考而示出。当然,为了讨论的目的已经简化了对体系结构的描述,并且它只是可以根据本发明来使用的许多不同类型的适合的体系结构中的一种。本领域技术人员将认识到在逻辑块之间的边界仅仅是说明性的并且可替换的实施方案可以合并逻辑块或电路元件或者对各种逻辑块或电路元件实行可替换的功能分解。
从而,应当了解在此所描述的体系结构只是示例性的,并且实际上能够实现获得相同功能的许多其它体系结构。在抽象的而仍然明确的意义上,要实现相同功能的组件的任何布局是有效“关联的”使得所希望的功能得以实现。因此,在不考虑体系结构或中间的组件的情况下,在此结合以实现特别功能的任何两个组件都能够被看作是彼此“关联的”使得所希望的功能得以实现。类似地,这样关联的任何两个组件还能够被看作是彼此“可操控地连接的”或者“可操控地耦连的”以实现所希望的功能。
还例如,在一种实施方案中,所说明的系统10的元件是位于单个集成电路上或者位于相同的器件之内的电路。作为选择,系统10可以包括彼此互连的任何数量的分离的集成电路或分离的器件。还例如,系统10或其部分可以是物理电路的或可转换成物理电路的逻辑表示的软表示或代码表示。这样,系统10可以用任何适合类型的硬件描述语言来实现。
而且,本领域技术人员会认识到在上述操作的功能之间的边界只是说明性的。多个操作的功能可以结合到单个操作中,和/或单个操作的功能可以分布于附加的操作中。而且,可替换的实施方案可以包括具体操作的多种实例,并且在不同的其它实施方案中可以改变操作的顺序。
在此所描述的所有或某些软件可以是数据处理系统10从例如计算机可读媒体(例如存储器18或其它计算机系统上的其它媒体)所接收的元素。该计算机可读媒体可以是与信息处理系统(例如数据处理系统10)固定地、可移动地或远程地耦连的。计算机可读媒体可以包括,例如而不限于,任何数量的下列媒体:磁存储媒体,包括磁盘和磁带存储媒体;光存储媒体,例如压缩磁盘媒体(如CD-ROM、CD-R等)和数字视频磁盘存储媒体;非易失性存储器存储媒体,包括基于半导体的存储器单元,例如FLASH存储器、EEPROM、EPROM、ROM;铁磁数字存储器;MRAM;易失性存储媒体,包括寄存器、缓冲器或高速缓存器、主存储器、RAM等;以及数据传输媒体,包括计算机网络、点对点远程通信设备、及载波传输媒体,仅列举几个。
尽管本发明在此参考具体的实施方案来描述,但是在没有脱离权利要求书所阐明的本发明的范围的情况下能够进行各种修改和改变。因此,说明书和附图应当被看作是说明性的而非限制性的,并且所有这样的修改都意欲要包括于本发明的范围之内。在此针对具体的实施方案所描述的任何利益、优点、或问题的解决方案并不是要理解为任何或所有的权利要求的关键的、必需的、或本质的特征或元素。
在此所使用的术语“耦连的”并不是要限定于直接的耦连或机械上的耦连。
而且,在此所使用的词语“a”或“an”被定义为一个或多于一个。此外,引入性短语(例如“至少一个”和“一个或更多个”)在权利要求中的使用不应当被解释为暗示着由不定冠词“a”或“an”引入另一权利要求元素将包含该引入的权利要求元素的任何特别的权利要求限定于只包含一个该元素的发明,即使在相同的权利要求包括引入性短语“一个或更多个”或“至少一个”及不定冠词(例如“a”或“an”)的时候。这对定冠词的使用也有效。
除非另有说明,否则词语例如“第一”和“第二”被用来任意地区分这样的词语所描述的元素。因而,这些词语并非必须要指示这样的元素的时间先后或其它优先序。

Claims (20)

1.一种系统,包括:
流水线处理器,用于通过顺序地取出、解码、执行及写入与每条指令的执行关联的结果来执行多条指令;以及
与所述流水线处理器耦连的调试电路,用于监视指令的执行以确定调试事件何时发生并产生调试异常以中断指令处理流,所述调试电路还包括控制电路,用于指示表示在引起调试事件的指令与获得调试异常时的在指令执行中的点之间完成指令执行的指令的数量的值,如果在引起调试事件的指令与获得调试异常时的在指令执行中的点之间完成指令执行的指令存在的话。
2.根据权利要求1所述的系统,其中所述调试电路的控制电路还包括:
用于计数并提供计数值的计数器,其中该计数值作为表示在引起调试事件的指令之后完成指令执行的指令的数量的值。
3.根据权利要求2所述的系统,其中所述计数值大于0,这指示:调试事件的处理是不准确的。
4.根据权利要求1所述的系统,其中所述调试电路指示:引起调试事件的指令之后完成指令执行的一条或更多条附加的指令也引起了调试事件发生。
5.根据权利要求1所述的系统,其中所述流水线处理器执行其中每条都引起调试事件的至少两条指令,并且所述控制电路还包括多个计数器,每个计数器提供由引起调试事件的所述至少两条指令的相应一条之后完成指令执行的附加的指令的数量所确定的相应的计数值。
6.根据权利要求1所述的系统,其中所述调试电路还包括:
调试状态寄存器,具有用于保持表示引起调试事件的指令之后直到获得调试异常时的在指令执行中的预定点为止完成指令执行的附加的指令的数量的值的字段,如果引起调试事件的指令之后直到获得调试异常时的在指令执行中的预定点为止完成指令执行的附加的指令存在的话。
7.根据权利要求1所述的系统,其中所述调试电路响应于对所述多条指令中的一条进行解码来确定调试事件已经发生,将由所述流水线处理器所形成的地址与一个或更多个预定的调试地址进行比较以确定数据地址匹配是否已经发生,以及将由所述流水线处理器所存取的数据值与一个或更多个预定的数据值进行比较以确定数据值匹配是否已经发生,所述调试事件需要两种比较操作的匹配来发生。
8.一种系统,包括:
流水线处理电路,用于通过顺序地取出、解码、执行及写入与每条指令的执行关联的结果来执行多条指令;以及
与流水线处理电路耦连的调试电路,用于通过选择性地将一个或更多个调试地址与由指令执行所形成的地址进行比较并且选择性地将至少一个调试数据值与由指令执行所形成的数据进行比较来监视指令的执行,所述调试电路确定何时两种比较都导致匹配的,以及,作为响应,指示调试事件,所述调试电路指示在引起调试事件的指令之后直到获得数据值断点时的在指令执行中的预定点为止所执行的指令的数量。
9.根据权利要求8所述的系统,其中所述数据值断点是不准确的,并且所述测试电路还包括具有指示不准确的数据值断点是否已经发生的位字段的寄存器。
10.根据权利要求8所述的系统,其中所述测试电路还包括用于指示关于在调试事件发生的时间与获得数据值断点的时间之间发生的事件的状态信息的状态寄存器。
11.根据权利要求10所述的系统,其中在调试事件发生的时间与获得数据值断点的时间之间发生的事件之一还包括第二调试事件。
12.根据权利要求8所述的系统,其中所述调试电路还包括:
计数器,用于对引起调试事件的指令之后完成指令执行的指令的数量的计数值进行计数并提供该计数值。
13.根据权利要求8所述的系统,其中所述调试电路还包括:
状态调试寄存器,具有用于保持指示引起调试事件的指令之后直到获得数据值断点时在指令执行中的预定点为止完成指令执行的附加的指令的数量的数值的字段,如果引起调试事件的指令之后直到获得数据值断点时在指令执行中的预定点为止完成指令执行的附加的指令存在的话。
14.一种方法,其特征在于包括:
通过顺序地取出、解码、执行及写入与每条指令的执行关联的结果来执行多条指令;
监视指令的执行以确定何时调试事件发生;
产生调试异常以中断指令处理流;以及
指示在引起调试事件的指令与获得调试异常时的在指令执行中的点之间完成指令执行的指令的数量,如果在引起调试事件的指令与获得调试异常时的在指令执行中的点之间完成指令执行的指令存在的话。
15.根据权利要求14所述的方法,还包括:
对引起调试事件的指令之后完成指令执行的指令的数量的计数值进行计数并提供该计数值。
16.根据权利要求15所述的方法,还包括:
形成大于0的计数值,这指示:调试事件的处理是不准确的。
17.根据权利要求14所述的方法,还包括:
确定引起调试事件的指令之后完成指令执行的一条或更多条附加的指令也引起调试事件发生。
18.根据权利要求14所述的方法,还包括:
确定其中每条都引起调试事件的至少两条指令;以及
在不同的计数器中存储:所述至少两条指令的每一条之后完成指令执行的附加的指令的数量的相应的计数值。
19.根据权利要求14所述的方法,还包括:
在调试电路中提供调试状态寄存器,其中所述调试状态寄存器具有字段,所述字段用于保持指示引起调试事件的指令之后直到获得调试异常时的在指令执行中的预定点为止完成指令执行的附加的指令的数量的值,如果引起调试事件的指令之后直到获得调试异常时的在指令执行中的预定点为止完成指令执行的附加的指令存在的话。
20.根据权利要求14所述的方法,还包括:
响应于对多条指令中的一条进行的解码来确定调试事件已经发生;
将由流水线处理器所形成的地址与一个或更多个预定的调试地址进行比较以确定数据地址匹配是否已经发生;以及
将由流水线处理器所形成的数据值与一个或更多个预定的数据值进行比较以确定数据值匹配是否已经发生,所述调试事件需要两种比较操作的匹配来发生。
CN2008801089547A 2007-09-28 2008-08-04 用于监视调试事件的系统和方法 Expired - Fee Related CN101809542B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/864,292 2007-09-28
US11/864,292 US8407457B2 (en) 2007-09-28 2007-09-28 System and method for monitoring debug events
PCT/US2008/072109 WO2009045628A1 (en) 2007-09-28 2008-08-04 System and method for monitoring debug events

Publications (2)

Publication Number Publication Date
CN101809542A true CN101809542A (zh) 2010-08-18
CN101809542B CN101809542B (zh) 2013-06-19

Family

ID=40509716

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2008801089547A Expired - Fee Related CN101809542B (zh) 2007-09-28 2008-08-04 用于监视调试事件的系统和方法

Country Status (4)

Country Link
US (1) US8407457B2 (zh)
JP (1) JP5419103B2 (zh)
CN (1) CN101809542B (zh)
WO (1) WO2009045628A1 (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105760321A (zh) * 2016-02-29 2016-07-13 福州瑞芯微电子股份有限公司 SOC芯片的debug时钟域电路
CN108460296A (zh) * 2016-12-09 2018-08-28 上海新微技术研发中心有限公司 一种具有调试接口安全机制的soc芯片及方法
CN111858256A (zh) * 2015-12-25 2020-10-30 北京忆芯科技有限公司 命令队列监控电路、数据交换方法及其设备

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9417987B2 (en) * 2008-06-12 2016-08-16 International Business Machines Corporation Advisory warning and workaround indications to user when stopped between load and store conditional instructions while using source level debuggers
CN101826052B (zh) * 2010-05-04 2012-07-04 中国人民解放军国防科学技术大学 Nual执行语义微处理器中保持延时一致性的断点实现方法
DE102011110151B4 (de) * 2011-08-16 2018-07-26 Texas Instruments Deutschland Gmbh Halbleitervorrichtung und Verfahren zum Betreiben einer Pipeline-Ausgleichseinrichtung in einer Halbleitervorrichtung
KR101991680B1 (ko) * 2012-01-25 2019-06-21 삼성전자 주식회사 소프트웨어 파이프라인된 프로그램의 하드웨어 디버깅 장치 및 방법
US9170920B2 (en) * 2013-03-26 2015-10-27 International Business Machines Corporation Identifying and tagging breakpoint instructions for facilitation of software debug
US9619214B2 (en) 2014-08-13 2017-04-11 International Business Machines Corporation Compiler optimizations for vector instructions
US9588746B2 (en) 2014-12-19 2017-03-07 International Business Machines Corporation Compiler method for generating instructions for vector operations on a multi-endian processor
US10169014B2 (en) 2014-12-19 2019-01-01 International Business Machines Corporation Compiler method for generating instructions for vector operations in a multi-endian instruction set
US10686539B2 (en) * 2015-05-29 2020-06-16 Avago Technologies International Sales Pte. Limited Flexible debug observation point insertion in pipeline designs
US9880821B2 (en) 2015-08-17 2018-01-30 International Business Machines Corporation Compiler optimizations for vector operations that are reformatting-resistant
US9594668B1 (en) * 2015-09-04 2017-03-14 International Business Machines Corporation Debugger display of vector register contents after compiler optimizations for vector instructions
WO2017095739A1 (en) * 2015-11-30 2017-06-08 Hubbell Incorporated Interrupt exception window protocol on a data communication bus and methods and apparatuses for using same
CN106126360B (zh) * 2016-06-28 2020-08-25 海信视像科技股份有限公司 地址空洞屏蔽方法及装置
US11256605B2 (en) 2017-10-19 2022-02-22 Samsung Electronics Co., Ltd. Nonvolatile memory device
KR102396448B1 (ko) 2017-10-19 2022-05-11 삼성전자주식회사 불휘발성 메모리 장치 및 그것의 동작 방법
US11599445B2 (en) * 2018-06-15 2023-03-07 Board Of Regents, The University Of Texas System Watcher: precise and fully-automatic on-site failure diagnosis

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62239238A (ja) 1986-04-10 1987-10-20 Nec Corp ブレ−ク回路
US5257358A (en) * 1989-04-18 1993-10-26 Nec Electronics, Inc. Method for counting the number of program instruction completed by a microprocessor
JPH06139107A (ja) * 1992-10-30 1994-05-20 Nec Corp ブレイクアドレス検出回路
US5850562A (en) * 1994-06-27 1998-12-15 International Business Machines Corporation Personal computer apparatus and method for monitoring memory locations states for facilitating debugging of post and BIOS code
JP2752592B2 (ja) * 1994-12-28 1998-05-18 日本ヒューレット・パッカード株式会社 マイクロプロセッサ、マイクロプロセッサ−デバッグツール間信号伝送方法及びトレース方法
JP3846939B2 (ja) * 1995-08-30 2006-11-15 フリースケール セミコンダクター インコーポレイテッド データプロセッサ
US5889981A (en) * 1996-05-07 1999-03-30 Lucent Technologies Inc. Apparatus and method for decoding instructions marked with breakpoint codes to select breakpoint action from plurality of breakpoint actions
GB9626401D0 (en) * 1996-12-19 1997-02-05 Sgs Thomson Microelectronics Diagnostic procedures in an integrated circuit device
JP3397230B2 (ja) * 1997-05-28 2003-04-14 松下電器産業株式会社 デバッグシステム
US6356960B1 (en) * 1997-10-29 2002-03-12 Sgs-Thomson Microelectronics Limited Microprocessor having an on-chip CPU fetching a debugging routine from a memory in an external debugging device in response to a control signal received through a debugging port
US6016555A (en) * 1997-11-19 2000-01-18 Texas Instruments Incorporated Non-intrusive software breakpoints in a processor instruction execution pipeline
US6321331B1 (en) * 1998-04-22 2001-11-20 Transwitch Corporation Real time debugger interface for embedded systems
DE19835610A1 (de) * 1998-08-06 2000-02-10 Siemens Ag Programmgesteuerte Einheit und Verfahren zum Debuggen derselben
US6389557B1 (en) * 1998-09-16 2002-05-14 Advanced Micro Devices, Inc. Freezing mechanism for debugging
JP2001134461A (ja) * 1999-11-05 2001-05-18 Fujitsu Ltd リセット制御システムおよび方法
US6591378B1 (en) * 2000-02-22 2003-07-08 Motorola, Inc. Debug controller in a data processor and method therefor
JP2002163126A (ja) * 2000-11-28 2002-06-07 Nec Microsystems Ltd デバッグ用cpuに内蔵のイベント検出回路、イベント検出方法および外部周辺回路
US6829701B2 (en) 2000-12-15 2004-12-07 Intel Corporation Watchpoint engine for a pipelined processor
US6862694B1 (en) * 2001-10-05 2005-03-01 Hewlett-Packard Development Company, L.P. System and method for setting and executing breakpoints
US7051197B2 (en) * 2002-11-22 2006-05-23 Texas Instruments Incorporated Tracing through reset
US7275148B2 (en) 2003-09-08 2007-09-25 Freescale Semiconductor, Inc. Data processing system using multiple addressing modes for SIMD operations and method thereof
US20050188186A1 (en) * 2004-02-23 2005-08-25 Wolczko Mario I. Obtaining execution path information in an instruction sampling system
US7249285B2 (en) * 2004-03-25 2007-07-24 International Business Machines Corporation Address watch breakpoints in a hardware synchronization range
US7334161B2 (en) * 2004-04-30 2008-02-19 Arm Limited Breakpoint logic unit, debug logic and breakpoint method for a data processing apparatus

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111858256A (zh) * 2015-12-25 2020-10-30 北京忆芯科技有限公司 命令队列监控电路、数据交换方法及其设备
CN111858256B (zh) * 2015-12-25 2024-05-28 北京忆芯科技有限公司 命令队列监控电路、数据交换方法及其设备
CN105760321A (zh) * 2016-02-29 2016-07-13 福州瑞芯微电子股份有限公司 SOC芯片的debug时钟域电路
CN108460296A (zh) * 2016-12-09 2018-08-28 上海新微技术研发中心有限公司 一种具有调试接口安全机制的soc芯片及方法

Also Published As

Publication number Publication date
JP2010541067A (ja) 2010-12-24
CN101809542B (zh) 2013-06-19
WO2009045628A1 (en) 2009-04-09
US20090089547A1 (en) 2009-04-02
JP5419103B2 (ja) 2014-02-19
US8407457B2 (en) 2013-03-26

Similar Documents

Publication Publication Date Title
CN101809542B (zh) 用于监视调试事件的系统和方法
US7412589B2 (en) Method to detect a stalled instruction stream and serialize micro-operation execution
CN101946232B (zh) 基于地址的条件调试指令的认定
US7043416B1 (en) System and method for state restoration in a diagnostic module for a high-speed microprocessor
KR101994636B1 (ko) 데이터 처리장치의 추적
US10795685B2 (en) Operating a pipeline flattener in order to track instructions for complex
CN104364772A (zh) 事务环境内的程序事件记录
CN107577593B (zh) 使用执行单一步骤来诊断编码
CN104205064A (zh) 将程序事件记录事件向运行时间检测事件的变换
GB2362729A (en) Memory access debug using an emulator
US20140053036A1 (en) Debugging multiple exclusive sequences using dsm context switches
CN104169887A (zh) 通过指令操作码的运行时间检测间接采样
GB2525715A (en) Pipelined ECC-protected memory access
CN101821719A (zh) 用于数据处理系统的调试指令
US10061940B2 (en) Secure protection processor and method including comparing an instruction security attribute of an instruction and a security attribute of an operational event
WO2009111108A1 (en) Method and apparatus for sharing debug resources
US7496899B2 (en) Preventing loss of traced information in a data processing apparatus
CN115687131A (zh) 一种程序调试方法
US6880069B1 (en) Replay instruction morphing
US8484007B2 (en) Method and apparatus of handling instruction rejects, partial rejects, stalls and branch wrong in a simulation model
US7249285B2 (en) Address watch breakpoints in a hardware synchronization range
US20190303265A1 (en) A method, apparatus and system for diagnosing a processor executing a stream of instructions
US20110185156A1 (en) Executing watchpoint events for debugging in a "break before make" manner
GB2380831A (en) Debug exception handler and registers
WO2018002572A1 (en) Diagnostic data capture

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
CP01 Change in the name or title of a patent holder

Address after: Texas in the United States

Patentee after: NXP America Co Ltd

Address before: Texas in the United States

Patentee before: Fisical Semiconductor Inc.

CP01 Change in the name or title of a patent holder
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20130619

Termination date: 20200804

CF01 Termination of patent right due to non-payment of annual fee