CN102521137B - 多核架构中的调试 - Google Patents

多核架构中的调试 Download PDF

Info

Publication number
CN102521137B
CN102521137B CN201210004215.1A CN201210004215A CN102521137B CN 102521137 B CN102521137 B CN 102521137B CN 201210004215 A CN201210004215 A CN 201210004215A CN 102521137 B CN102521137 B CN 102521137B
Authority
CN
China
Prior art keywords
controller
tracking
thread
debug
interface
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.)
Active
Application number
CN201210004215.1A
Other languages
English (en)
Other versions
CN102521137A (zh
Inventor
马克·大卫·李佩特
阿耶温·翁
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.)
Ignios Ltd
Original Assignee
Fujitsu Semiconductor Ltd
IGNIOS Ltd
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 Fujitsu Semiconductor Ltd, IGNIOS Ltd filed Critical Fujitsu Semiconductor Ltd
Publication of CN102521137A publication Critical patent/CN102521137A/zh
Application granted granted Critical
Publication of CN102521137B publication Critical patent/CN102521137B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring

Landscapes

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

Abstract

本发明提供了多核架构中的调试。一种对多核处理器架构内的线程执行进行监测的方法,该多核处理器架构包括用于处理线程的多个互连的处理器单元,该方法包括:接收多个线程参数指示符,这些线程参数指示符表示与一个或多个线程的功能和/或标识和/或执行位置有关的多个参数;将这些线程参数指示符中的至少一个与第一多个预定标准进行比较,该第一多个预定标准中的每一个都代表了感兴趣的指示符;以及根据作为所述比较的结果而被识别为感兴趣的线程参数指示符来生成输出。

Description

多核架构中的调试
本申请是申请号为200580030789.4、申请日为2005年9月13日、发明名称为“多核架构中的调试”的发明专利申请的分案申请。
技术领域
本发明涉及在多核架构中进行调试的方法和设备。
背景技术
近年来,为了使硅效率(即,“应用可实现的”MIP/mm2或MIP/mW)最大化,出现了一种制造包含多个核的处理器的趋势。这种多核架构理想地适于运行基于线程的应用,因为线程定义了包含执行状态、指令流和数据组的自主工作包,该线程通过定义可以与其他线程并行执行。然而,这种并行执行对在这些多核架构上使用的软件调试进程引入了另外的问题。软件调试是对计算机应用的执行中的错误进行定位和改正的总称。
软件调试所面临的关键问题之一是海森堡臭虫(Heisenberg bug)(也称为“探针效应(probe effect)”)。出于调试目的(例如,为了提高***诊断的级别)而添加的任意代码都可能稍微改变同时和/或并行执行的线程的定时。这带来了程序缺陷(bug)被掩饰的风险,这些程序缺陷在同一应用的发行版本中可能会被发现。另外,难以在生成中存在很多调试代码时提取有意义的性能测量值和测定值(instrumentation)。这是因为如高速缓存和互连性能的二级效应可能会受到附加代码的影响,并且对代码大小有更明显的影响。
另外,由于其开发中使用了很多资源,所以对于提高为这种多核架构开发的软件的可重用性存在不断增长的需求。过去,用于多核架构的应用是在定制的基础上编写的,从而开发出可移植性很差的硬件专用应用。另外,这些应用的调试也非常特殊。
发明内容
根据本发明的第一方面,提供了一种对多核处理器架构中的线程执行进行监测的方法,该多核处理器架构包括用于处理这些线程的多个互连的处理器元件,该方法包括:接收多个线程参数指示符,这些线程参数指示符表示与一个或多个线程的功能和/或标识有关的多个参数;将这些线程参数指示符中的至少一些与第一多个预定标准进行比较,每一个预定标准都代表了感兴趣的指示符;以及根据作为所述比较的结果被识别为感兴趣的线程参数指示符来生成输出。
这提供了以下的能力:在线程级别对在多核处理器架构上运行的应用进行调试和跟踪,而无需出于线程级别调试的目的而专门添加代码。另外,还提供了以下的优点:使得能够对多核架构应用进行调试,而不需要引入附加代码而因此引入探针效应。
根据本发明的另一方面,提供了一种用于多核处理器架构的线程级别软件调试控制器,该多核处理器架构具有多个互连的处理器元件,每一个元件都提供用于处理线程的资源,所述调试控制器与所述处理器元件中的每一个进行通信,并且包括用于对该多核处理器架构中的线程的分配和执行进行监测的监测器逻辑。
附图说明
本发明可以按照多种方式来实现,下面将参照附图并通过示例的方式来描述某些实施例,在附图中:
图1示出了典型的多核处理器架构***的逻辑布局的示意性框图;
图2示出了图1的逻辑布局的一种示例性实现的示意性框图,其中线程管理和分配控制器与专用存储器设备和控制器客户端(client)一起结合在通用多核处理器架构中;
图3再次以框图的形式示出了结合有图2的元件的基于现有的片上***(SoC)总线的架构的示例;
图4示出了图1、2和3的控制器的外部连接的更详细视图;
图5示出了图2和3的存储器设备的更详细视图;
图6示出了图2、3和4的控制器的内部构成的更详细视图;
图7示出了如图2和3所示的控制器客户端的示意性框图;
图7B示出了在单个控制器客户端用作用于多个处理资源的代理的情况下该***的示意性框图;
图8示出了硬件控制器客户端的更详细示意性框图;
图9示出了线程描述符、控制器、处理资源和共享***存储器之间的典型关系;
图10示出了根据本发明实施例的结合有调试架构的典型多核处理器架构***的逻辑布局的一种示例性实现的示意性框图。在图10中,控制器用作用于调试控制的中心仲裁器;
图10b示出了根据本发明实施例的结合有调试架构的典型多核处理器架构***的逻辑布局的另一示例性实现的示意性框图。在图10b中,不是本发明的一部分的附加组件提供了包括控制器的多核处理器架构内的所有核之间的调试事件集合;
图11示出了图10和10b的线程调试控制器的外部连接的更详细视图;
图12a示出了图10和10b的线程调试控制器的跟踪缓冲器的外部连接的更详细视图;
图12b示出了图12a的跟踪缓冲器的典型输出的时序图;
图13示出了图10和10b的线程调试控制器的外部连接的另一详细视图,包括到图2的控制器的多个子块的连接;
图14示出了图11的线程调试管理器的内部构成的功能框图;
图15示出了图14的调试机之一的逻辑框图;
图16示出了图14的调试机之一的物理框图;
图17示出了图14的调试机的级联(concatenation)能力的示例;
图18示出了在单字EventWatch情况下调试机内的指令数据流;
图19示出了在双字EventWatch情况下调试机内的指令数据流;
图20示出了图14的示例性静态事件过滤器模块的功能框图;
图21示出了图20的静态事件过滤器模块中的事件过滤器掩码(mask)的示例性分配;以及
图22示出了图14的跟踪数据格式化器/压缩器模块的示例的框图。
具体实施方式
图1示出了典型的多核处理器架构的示例的***框架的逻辑视图。该框架包括多个处理资源150,每个处理资源都可以与该多核架构中的其他处理资源150相似或不相似。处理资源150可以是能够执行指令的任意形式的硬件或其等价物,因此可以包括通用处理资源150,或者具有有效限制指令集的处理资源150,例如输入输出设备。
该***框架还包括集中线程管理和分配***,该集中线程管理和分配***包括线程管理和分配控制器130以及经由存储器接口180连接至该控制器的专用紧密连接的存储器190。每个处理资源150都能够通过互连115来访问控制器130。应该理解,图1的结构的实现不需要任何特定的互连策略(即,控制器130与各个处理资源150进行通信或者各个处理资源150与控制器130进行通信所用的结构,以及各个处理资源150与***资源,例如存储器140,进行通信所用的结构);具体地说,同样可以采用点对点链接、中央***总线或者甚至是管道架构,只要处理资源150中的每一个都应当能够直接或间接(即,通过其他处理资源150或其他方式)与控制器130进行通信。
图2再次仅以示例的方式示出了实现图1的逻辑结构的多核处理器。图2的多核处理器采用了多个处理资源150,每一个处理资源都通过***互连160而连接。***互连160进而通过输入接口100和输出接口110与控制器130进行通信。在图3的示例中,***互连160被布置为传统的中央总线,该中央总线将处理资源150中的每一个彼此连接并将处理资源150中的每一个与控制器130连接,还将处理资源150中的每一个与诸如***存储器的共享***资源140连接。可以通过多种目前可用的接口技术中的任意一种来实现与共享***资源140的连接。存储器可以由目前可用的中央计算机存储器技术中的任意一种来构成,例如静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM),或者双倍数据速率随机存取存储器(DDR RAM)。
如图2所示,多个处理资源150中的每一个都具有被构造用于从中央控制器130接收控制信息,并根据所接收的控制信息来管理处理资源150的相关联的控制器客户端120。下面更详细地描述控制器客户端120的功能和用途。每个处理资源150还具有用于通过***互连160与控制器130进行通信的相关联的互连代理170。互连代理170为控制器客户端120提供普通接口,该接口独立于***互连160上使用的基本互连协议,即,该接口提供了***互连160上使用的通信协议与控制器客户端120所使用的通信协议之间的协议翻译。由于使用了互连代理170,本发明实施例的控制器客户端120可以应用于目前可用的任意***互连协议。实际上,控制器客户端120与控制器130进行通信所通过的接口协议115可以与接口协议160中的任意一个或全部在物理上不同并且具有不同的特性,所述接口协议160被用来使得能够在处理资源150和共享***资源140(例如,***存储器)之间进行通信。
作为整体,多核处理器10被构造用于执行目标应用,该目标应用可以分为多个单独的任务(称为线程)。每个处理资源150都由控制器130分配了适当的线程。该分配是根据多个参数来执行的,这些参数包括但并不限于所关注线程的优先级、每个处理资源150的可用性以及特定处理资源150对于特定线程的执行的适合性。
然而,应该理解的是,添加控制器130及其专用存储器190并不需要对处理器10的布局进行重新设计。
图3中示出了一种具体结构,图3以框图的形式示出了典型的片上***(SoC)架构,并且示出了可能在实际应用中被置于控制器130的控制之下的各种处理资源150。应该注意,处理资源150实际上可以具有相对普通的能力,例如DSP,或者可以具有相对有限的功能,例如***IO。
图4示出了控制器130及其相关联的输入接口组100、输出接口组110,以及两个双向接口组160和180,每个组都位于控制器130的***。
***控制组102包括确保控制器130的正确操作所需的各种信号。这些信号包括***时钟、实时时钟和重置信号(RST)。来自控制器130的所有输出信号对于***时钟都是同步的,尽管它们可能根据***的需要而被重新同步为其他时钟域。对于控制器130的所有输入信号在处理之前对于***时钟都是同步的。RST输入是用于重置控制器130的同步重置信号。
外部中断组101由源自线程管理和分配***外部的一组外部中断构成。外部中断组101中的信号例如可以通过与外界的输入接口来驱动,或者通过引脚直接从多核处理器的外部进行驱动。外部中断输入的数量可以在多核处理器10的设计阶段来限定。
内部控制组111由针对每个控制器客户端120及其相关联的处理资源150的同步中断构成。因此,信号的数量通常与***内的处理资源150的数量相对应,并且将在多核处理器10的设计阶段进行限定。内部中断信号是表示线程准备执行的内部线程就绪中断信号,并被分配给与该控制器客户端120相关联的特定处理资源150。
调试接口组112由以下子组构成:
1、辅助调试接口,其使得外部调试代理能够对控制器130以及作为整体的***进行调试访问。通过该接口,可以内部和外部地设定断点和观察点,并且可以读取***状态信息。
2、跟踪缓冲器输出,其是根据一组预先配置的过滤方针并在调试管理器400的最终控制下提供运行时***状态的流式输出。
3、外部调试使能信号,其可以按照它们自己的名称(right)用作断点信号,或者可以与处理资源特定使能信号进行组合。
下面将更详细地描述该特定格式、结构和以上调试接口组的使用。
紧密连接的存储器接口组180将控制器130连接至其专用的紧密连接的存储器资源190。
图5示出了该专用的紧密连接的存储器190的典型结构。地址路径和数据路径的宽度在多核处理器10的设计阶段进行限定。专用的紧密连接的存储器接口180包括存储器地址总线191、存储器读取数据总线192、存储器写入数据总线193以及写入使能信号194和读取使能信号196。
假定所附加的存储器是同步SRAM设备。根据目标应用的需要,专用的紧密连接的存储器190如在多核处理器10的设计阶段所限定的,包含整数个控制器存储器元件195。在当前优选的实施例中,每个控制器存储器元件195都消耗256位的存储器空间。另外,在当前优选的实施例中,该控制器支持最多65536个控制器存储器元件(即,16Mb存储器)。尽管如稍后所述,队列描述符消耗了控制器存储器元件195,但是在典型***中,所需的控制器存储器元件195的数量将由线程支持要求来控制。例如,能够在控制器130内同时支持400个线程的***将需要大约128kb的附加存储器。
图4的互连接口组160遵从所选择的互连协议或者多核处理器10中使用的协议以及互连代理170,互连代理170是在多核处理器的设计阶段限定的。在存在多个不同的互连结构的情况下,互连接口组160可以由多个可能不同的接口构成。在所示的实施例中,使用了总线接口。然而,应该明白的是,如前面所提及的,同样可以采用各种其他形式的接口。
控制器子块描述和功能
图6示出了控制器130的主要逻辑组件。控制器130的功能被分为四个主要内部并行处理子块,分别执行以下功能:
1、线程输入管理器(TSIM)200,其被构造用于维持专用的紧密连接的存储器190中的空闲控制器存储器元件195的列表,并且检查控制器存储器元件195的恢复。
2、线程同步管理器(TSPM)210,其被构造用于根据需要维持在专用的紧密连接的存储器190中的等候(pending)列表和定时器队列,并在线程之间进行同步,并将线程提升(promotion)为在专用的紧密连接的存储器190中的就绪队列结构。线程同步管理器210通过在专用的紧密连接的存储器190中***或提取等候线程描述符来维持等候和定时器队列结构的完整性。
3、线程输出管理器(TSOM)220,其被构造用于维持专用的紧密连接的存储器190中的就绪队列结构,并维持在专用的紧密连接的存储器190中的用于各个处理资源150的调度队列(dispatch queue)。线程输出管理器(TSOM)220还被构造用于生成被发送到控制器客户端120的中断110。就绪队列结构的完整性的维持是通过在专用的紧密连接的存储器190中***和提取保存在控制器存储器元件195中的线程描述符来进行的。
4、线程调度管理器(TSSM)230,其被构造用于为设置在专用的紧密连接的存储器190中的就绪队列结构内的各个处理资源150提供调度决定。
另外,多个二级处理子块提供了以下支持功能:
5、线程存储器管理器(TSMM)240,其被构造用于提供对所附加的专用的紧密连接的存储器190的集中访问,包括互相排斥和锁定。
6、中断管理器(TSIC)250,其被构造用于将输入外部***中断转换为内部同步原语(primitive)。
7、时间管理器(TSTC)260,其被构造用于为每个处理资源150提供用于同步目的的定时器功能以及监视定时器功能。
8、***接口(TSIF)280,其被构造用于提供互连接口和构造以及对多核处理资源150和控制器130内的各个子块的运行时访问。
9、服务器垫片(shim)(TSSS)290,其被构造用于提供控制器130与多核处理资源150之间的物理接口115。
以上列出的主要和二级子块中的每一个还包括调试输出,该调试输出构成调试接口112的一部分,用于向本发明的调试控制器400通知在与该信号相对应的各个子块内发生的事件。在命令可能通过特定条件完成的情况下,在子块内对状态标志进行管理。
总的来说,控制器130通过维持专用的控制器存储器190内的多个队列结构来管理线程。这些队列结构包括等候、就绪、定时器和调度队列。在这些队列中的一个或更多个中保存有正在等待执行的线程,并在这些线程就绪时被将这些线程分配给适当的处理资源150。这些队列中的线程的控制主要使用push(压入)、pop(弹出)和sort(排序)操作来进行。在共同未决的美国专利申请No.10/308,895中描述了控制器130的操作的全部细节,在此通过引用并入其全部内容。
下面是对控制器130内的上述主要和二级处理子块的交互的详细描述。
每个子块都为其他子块提供一组函数(function),使得每个子块都能够指示其同一层次的功能单元(peer)在专用的紧密连接的存储器190内对它们各自维持的结构进行控制。当接收到在控制器软件应用程序接口(API)处接收的相似命令时,由特定子块来调用函数。
线程输入管理器函数:
线程输入管理器200为控制器130内的其他子块提供了三个公共函数。
FreeListStatus函数返回控制器存储器元件195空闲列表内的头指针和元素的数量。该空闲列表是当前未使用的控制器存储器元件195的列表。该函数仅可以由***接口280在控制器130软件API处接收到相似命令时调用。
PushFreeIndex函数用于将被释放的控制器存储器元件195的索引压入回到空闲列表中。该函数仅可以由线程调度管理器230调用。
PopFreeIndex函数用于从空闲列表中弹出空闲控制器存储器元件195的索引。其通常在***接口280内的API调用服务例程中调用。
线程同步管理器函数:
线程同步管理器210为控制器130内的其他子块提供了七个公共函数。
以下五个函数仅可以由***接口280响应于控制器130软件API所接收的相似命令来调用。
PushPendingDescriptor函数在启动过程中使用,以向等候队列描述符的列表中添加等候队列描述符。
PushThread函数在运行时使用,以向给定等候队列中添加从属线程。
GetTimerStatus函数返回定时器队列中的头指针和元素的数量。
SetTimerStatus函数设定该定时器队列中的头指针和元素的数量。
SetPendingStatus函数设定等候队列描述符列表的状态。
GetPendingStatus函数返回等候描述符队列中的头指针和元素的数量。
SyncEvent函数用于向给定的等候队列发出同步原语。该函数由线程中断管理器250或***接口280调用。
TimeEvent函数用于向定时器队列发出基于定时器的同步原语。该函数仅由时间管理器260调用。
线程输出管理器函数:
线程输出管理器220为控制器130内的其他子块提供了五个公共函数。
Push函数将线程描述符设置在就绪队列结构中。该方法可以由***接口280或线程同步管理器210调用,并且其可以以高优先级被调用从而提高处理速度(例如,处理中断)。
在线程是独立(刚刚就绪)的情况下,将从***接口280进行调用,而在线程描述符最初具有依赖性时,从线程同步管理器210进行调用。
以下函数仅可以由***接口280响应于在控制器130的软件API处接收到相似命令而调用。
GetDispatchQueueStatus函数返回调度队列列表内的头指针和元素的数量。
SetDispatchQueueStatus函数设定调度队列列表内的头指针和元素的数量。
DispatchQueueSetMetrics函数设定当前正在执行的线程的量度(metrics),从而可以进行所通知的占先决定。
DispatchQueueEvent函数将调度事件从就绪队列结构传播到由线程输出管理器(TSOM)220管理的调度队列。该函数仅由线程调度管理器(TSSM)223调用。
DispatchQueuePop函数从调度队列的头部中弹出线程描述符。
DispatchWorkQueuePush函数将调度队列压入到线程输出管理器220的工作队列中。该函数仅可以由线程调度管理器230调用,线程调度管理器230利用该函数来通知输出管理器220作为调度更新的结果的调度队列内所需的改变。
线程调度管理器函数:
线程调度管理器230为控制器130内的线程输出管理器220和***接口280提供了三个公共函数。
PushPushWorkEvent函数由线程输出管理器220在其将线程描述符添加到就绪队列结构中后立即调用。
PushPopWorkEvent函数由线程输出管理器220在其将线程描述符从就绪队列结构中去除后立即调用。
FreeIndex函数使得控制器存储器元件195的释放能够与线程调度管理器230内的正在进行的调度行为适当地同步。可以在控制器130的软件API处接收到相似命令,或者作为线程输出管理器220内的pop操作的结果来发出该调用。
控制器客户端
如前所述,术语处理资源150适用于可以执行指令的任意资源,而不管该指令可能会多么基本。因此,还包括了诸如输入/输出模块的具有固定功能的资源。根据处理资源150的类型,***互连160与处理资源50之间经由控制器客户端120的连接可以是单向的或双向的。
图7示出了用于控制器130的控制器客户端120的示例图。
对于适当的处理资源150,例如通用处理器或数字信号处理器,控制器客户端120通常以软件形式实现。然而,当处理资源150功能有限时,控制器客户端120可能需要硬件组件。
在***互连160与处理资源150之间使用了硬件组件的情况下,控制器客户端120仍然使用相同的接口与处理资源150相连。也就是说,控制器客户端120为互连代理170提供了与处理资源150对控制器客户端120相同的接口。在某些情况下,例如在输入/输出设备的情况下,将进入处理资源150的数据路径视为与离开处理资源150的数据路径不同。
除了主接口之外,控制器客户端120还提供频带外接口(out of band interface)作为用于运行时和调试事件的输出。在使用软件控制器客户端120的情况下,使用标准中断来提供这些接口,以调用适当的服务例程,或形成对处理资源150的特定调试和跟踪单元151的输入。
控制器客户端的操作模式:
每个控制器客户端120都被完全中断驱动。当从控制器130接收到内部中断时,控制器客户端120从与特定处理资源150相关联的调度队列的头部中弹出线程描述符,该调度队列保存在专用的紧密连接的存储器190中。然后使用该线程描述符中的该唯一引用(reference)从主存储器资源140读取进一步的线程控制信息(线程控制块(TCB))。该TCB中所包含的信息可以是以下的任意一种:
1、控制器客户端120的构造内容。该信息可用于构造控制器客户端120的***资源使用监控(policing)、地址或数据总线触发器构造(用于调试)、数据呈现模式等。
2、处理资源150的构造内容。这是使处理资源150准备执行特定线程所需的信息。其可以包括从该线程的之前的部分执行或专门的硬件加速器(例如,音频CODEC)的构造中恢复。
3、指令内容。在固定功能硬件加速器的情况下,“指令”将在目标硬件处理资源150中暗示,例如在处理资源150是输出模块时的输出指令,并且任意所需的特殊化或配置都将容纳在配置信息中。在软件控制器客户端120的上下文中,这通常是对于与线程相关联的函数代码的指针。
4、数据内容。该内容可以限定***存储器140中的起始地址或多个地址以及线程可以操作的数据的范围。
5、控制器客户端120后处理内容。该内容确定了控制器客户端120在完成线程执行之后的动作。
控制器客户端120的操作有三个不同阶段。
1、配置阶段,其中准备处理资源150和控制器客户端120以执行特定线程。在最简单的情况下,该配置阶段为空。
2、执行阶段,其中执行线程,并且控制器客户端120可以提供数据或监测资源利用。
3、完成阶段。处理的完成可能导致无动作、创建另一线程、发出同步原语、或者线程创建和同步的组合。此外,控制器客户端120还可能需要设定或更新调度机的量度并终止线程。在执行线程的过程中需要其他存储器来存储结果的情况下,控制器客户端120还必须执行该服务器方法。
在各个硬件控制器客户端120b在有效周期期间充分利用可用的***互连160的带宽的情况下,优化方案将使得控制器客户端120b能够作为针对多个硬件处理资源150的代理来操作。图7B中示出了这种结构。与前面的情况相同,代理控制器客户端120b被中断驱动,然而,尽管在前面的示例中,仅从控制器130路由单个中断,但是在代理控制器客户端模型中,每个处理资源150都有中断。根据从控制器130接收的中断的索引,代理控制器客户端120b对所识别的处理资源150执行相同的步骤。在代理控制器客户端模型中,如果需要***互连160的使用监控,则硬件适配器120c将保留在处理资源150和***互连160之间。
如前所述,控制器客户端120可以实现为软件。在此情况下,控制器客户端120的某些功能(例如,共享资源使用监控)通常会利用可能已经存在于处理资源150硬件中的现有硬件组件(例如,存储器管理单元(MMU))。
结果,软件控制器客户端120架构和实现对于处理资源150是部分特定的。
根据相关处理资源150的特性,硬件控制器客户端120可以还具有特殊要求。以下部分说明了在大多数情况下适用的一般架构。
硬件控制器客户端的一般示例
图8中示出了硬件控制器客户端120的基本结构。该设计的功能核心是控制器客户端有限状态机(FSM)300。该有限状态机(FSM)300可以在所有三个阶段中都有效。控制器客户端FSM 300由来自控制器130的中断111启动。
首先,控制器客户端FSM 300对***互连160进行管理,以从共享存储器资源140中读取TCB,该TCB包含了对其本身指令的引用。在配置阶段中,控制器客户端120可以管理处理资源接口、解释配置命令并将它们翻译为发送至处理资源150的写入循环。此外,控制器客户端120对其自身的资源监控进行配置。从配置状态过渡到执行状态的方式对于处理资源150是特定的,但是可以通过显式执行原语或仅通过进入数据传递状态来进行标记。
从控制器客户端120的角度可以看出,最简单的架构对于处理资源150和***侧具有相同的接口协议。在此情况下,在执行阶段中,通过检查适当的情况,将处理资源150的读取和写入循环简单地映射到***接口。
最简单的控制器客户端120的实现在***到处理资源的路径310和处理资源到***的路径320上都需要FIFO型接口。在具有该特性的控制器客户端120的执行阶段中,可以通过消息模式或流模式将数据提供给处理资源150。消息模式(其中在处理之前,整个数据集本地累积在控制器客户端120中)造成更粗放的可靠的(coarsegrained blocky)互连行为,这便于更复杂的互连仲裁器。流模式(其中数据直接从***存储器140流传输到处理资源150中)提供了硅效率更高的方案,该方案需要更仔细地考虑硬件握手,并且展示了精细互连交易和对互连性能的紧密结合。
从执行阶段到完成阶段的过渡可以通过测量对处理资源150的数据提供来推断出,或者由处理资源150本身显式地告知。在完成阶段中,控制器客户端120再一次根据原始线程控制块所提供的指令集来执行。
注意,在某些情况下,适于将进入处理资源150(例如,输入/输出设备)的数据路径和离开处理资源150的数据路径视为不同。相比而言,在某些情况(例如,诸如DSP的算术加速器)下,将数据的消费者和产生者结合在同一控制器客户端120框架中是很自然的。
为了提供处理资源150与其他***资源之间的分离(decoupling)级别,还可以由控制器客户端120提供多个附加功能(facility):
a)可以针对由基本地址和偏移定义限定的预期行为,通过使用比较器330和比较地址寄存器340对处理资源150产生的地址进行检查。
b)可以使用减法器350和偏移地址寄存器360对处理资源150产生的地址进行偏移,使得处理资源150能够对于任意给定的线程具有归一化的地址映射图,通常为归一化循环地址(around address)0x0。
c)在处理资源功能有限并且因此不包括其自身的指令级调试硬件的情况下,可以包括调试监视寄存器。于是这种寄存器可用于监测地址使用,使得其他缺少固定功能的硬件资源150能够具有指令级的调试能力。
对象
控制器130中使用的数据类型的示例分为公共可见(可以通过***详尽地看到并控制)和私有可见(仅在控制器130内可见,并仅受控制器130子块的控制)。为了确保该设计在多端应用上的可移植性,将所有线程、队列和集合队列的描述符存储在使用公共基本类的专用的紧密连接的存储器190、控制器存储器元件195中。
控制器存储器元件
每个控制器存储器元件195都可以表示10种描述符类型中的任意一种:
1、空闲列表元素。该元素是空闲的,而可以由其他描述符类型中的任意一种使用。无需用户初始化或运行时控制。
2、线程描述符(TD)。这是表示应用/管理线程的数据结构。该描述符可能存在于专用的紧密连接的存储器190内的等候队列、就绪队列或调度队列中。无需用户初始化,但是需要运行时控制。
3、调度机根描述符(SRD)。这是调度机等级的最高级描述符。需要用户初始化,但是不需要运行时控制。该根描述符没有父描述符,但是子描述符可以是SSTD、DSTD或TD中的任意一个。
4、静态调度机等级(Tier)描述符(SSTD)。这是静态调度机等级描述符,其父描述符可以是SRD或另一SSTD。SSTD的子描述符可以是另一SSTD、DSTD或TD中的任意一个。
5、动态调度机等级描述符(DSTD)。这是动态调度机等级描述符。不需要用户初始化,但是需要运行时控制。DSTD的父描述符可以是SRD或SSTD,但是DSTD可以仅具有TD子描述符。
6、调度队列描述符。该类描述符描述了正在等待来自相关处理资源150的弹出操作的线程描述符的列表。需要用户初始化,但是不需要运行时控制。
7、等候队列描述符。该类描述符描述了正在等待同步事件的线程描述符的列表。需要用户初始化,但是不需要运行时控制。
8、池(pool)附接节点(PAN)。PAN用于将调度机根等级附接到处理资源150池根等级。需要用户初始化,但是不需要运行时控制。
9、池静态节点(PSN)。PSN用于将调度机根等级附接到处理资源150池根等级。需要用户初始化,但是不需要运行时控制。
10、池根节点(PRN)。对于每个处理资源150池,存在单个PRN。需要用户初始化,但是不需要运行时控制。
图9示出了线程描述符、控制器130、处理资源150和共享***存储器140之间的典型关系。每个线程原语都包含唯一的引用,pReference。该引用不能由控制器130解释或修改。pReference提供了对于***存储器140中的限定了要执行的任务的数据结构的指针。通常这会是控制器客户端控制块125,并且将包含至少以下元素:函数指针(在图9中被表示为处理资源指令块145)、堆栈指针和变量指针(在图9中一起被表示为数据块135)。
可以定义另外的字段,这些字段提供带内配置或共享***资源的安全性。
然而,根据应用和/或目标处理资源150,控制器客户端控制块125的复杂度会改变。特别要注意,可以包括其他间接级别,这些间接级别在给定适当的“控制”指令代码和相应的“数据路径”代码的情况下,可以使得完全不同的处理资源150能够在特定环境下对相同数据执行相同的功能。在这种情况下,与不同处理资源150所要求的特定指令流相对应地存在针对各种类型的处理资源150的指针。允许不同处理资源执行相同线程的能力还使得能够对多核架构内的所有可用处理资源进行载荷平衡。此外,可以将处理资源集中(pool)在一起。
处理器资源池使得能够将特定处理资源150的实例集中在单个分配节点中。该分配节点于是可以对属于特定处理资源池的各个处理资源150提供载荷平衡、智能占先和电力管理。
图10和10b示出了结合有根据本发明实施例的特征的调试***框架的基本示意性布局。在图10中,本发明提供了一种针对***范围调试控制的集中点,而在图10b中,本发明按照与所有其他调试和跟踪单元类似的方式连接至外部集中调试控制集合组件。
通常,每个处理资源150都提供指令级调试和跟踪单元151,以在指令级使用,或者等效地仅对于相关处理资源150是本地的。这些对于处理资源150是特定的,然而操作使用相同或相似的数据。
广义来讲,调试的方法可以分为两种:静态操作,其中***在提取调试信息的过程中暂停;以及动态操作,其中信息在运行时被收集、监测和分配。
静态操作包括除此之外的断点和观察点的设定配置、暂停和单步的管理、***状态和存储器负载的快照、观察和分析。
动态操作包括除此之外的处理器循环的监测、高速缓存操作、处理器间通信和***互连(例如,总线)事务。这种类型的监测总称为跟踪,并且在***行为的“概评(profiling)”中使用。动态调试(或者跟踪)信息通常由所嵌入***的组件自主地生成。
本地指令级调试和跟踪单元151包含使得相关处理资源150内的指令的处理在某种预定情况下暂停的嵌入“触发器”逻辑,但是还可以用于发起或终止跟踪信息的累积或者某些其他功能。触发器通常是表示已经观察到预定“触发器序列”的事件位。
作为最低要求,这种触发器逻辑通常包括在遇到给定指令时向本地处理资源150发出中断(触发器)的断点逻辑。包含在这些单元中的功能的量对于处理资源150是特定的,然而,如前所述,在需要的情况下,控制器客户端120可以包括调试观察寄存器,以提供最小级别的指令级调试和跟踪能力。当处理资源150功能有限(例如,专用音频CODEC)时需要这样。
指令级调试和跟踪单元151中的每一个都具有连接至调试访问端口141的双向接口155和经由一个或更多个可选的本地跟踪缓冲器152、跟踪集中点142和可选的统一跟踪缓冲器143连接至跟踪端口144的跟踪输出接口105。
调试访问端口141使得外部“调试主机”能够控制并访问调试进程。通常,这些主机通过串行端口或者其他类似的低速连接接口协议进行连接。
跟踪端口144向外部设备提供对跟踪数据的访问。这使得对跟踪数据的观察可以作为软件调试进程的一部分出现。
可选的本地跟踪缓冲器152和统一跟踪缓冲器143用于在输出之前临时存储跟踪数据。这使得可以存储***的运行“快照”,然后通过跟踪端口144随后读出。这样,假设调试数据实时地输出,则跟踪端口144不必具有所要求的潜在高传输速度。这就不需要(至少部分地)专用于调试数据输出的大量输出引脚。这是非常重要的,因为与功能逻辑本身的尺寸相反,目前可以装配到任意特定集成电路(IC)小片(die)上的输入/输出焊盘的数量限制了IC小片的尺寸。
跟踪集中点142仅用于将从本地调试和跟踪单元151输出的多个调试跟踪流105复用到单个输出流中,以备存储在统一跟踪缓冲器143中,或者仅用于在没有统一跟踪缓冲器143的情况下通过跟踪端口接口144输出。
在图10中,本发明的线程调试控制器400连接至本地调试和跟踪单元151中的每一个。该线程调试控制器400还再次经由一个或更多个可选的本地和统一的跟踪缓冲器连接至控制器130、调试访问端口141和跟踪输出端口144。在图10的调试框架中,控制器130向各个DTU 151提供初始调试使能信号450,该控制器130建议了最初根据在控制器内观察到的事件得到的调试策略。
在图10b中,指令级调试和跟踪单元151中的每一个都从调试控制集中单元接收调试使能信号,该信号作为对预定事件序列(可以包括本发明所生成的事件)进行观察的结果实现这种使能。图10b的框架使得能够实现可以由本地调试和跟踪单元151或者本发明发起的调试策略。
图11示出了本发明实施例的线程调试控制器400的具体输入和输出。
控制器130的子块200至280中的每一个都具有用于将信号传送到线程调试控制器400中的调试接口410。当这些子块进行交互以管理并在各个处理资源150之间分配各个线程时,这些输入信号将控制器130的相应子块的每一个中发生的事件通知给线程调试控制器400。该线程调试控制器400还可以对用于跟踪和触发器信息的子块事件进行过滤。
控制器130的各个子块内的命令执行导致向线程调试控制器400发送EventID字段和EventData字段。各个事件所相关的子块由这些字段通过哪个接口发送来确定,因为每个子块都具有其自身对于线程调试控制器400专用的接口440。EventID字段可以由用户来定义,因此长度可以为N位,然而在本发明的优选实施例中,EventID的长度为4位。每个单独的EventID字段都识别在特定子块200到280中发生的各个事件。
子块内可能发生的事件的示例包括将线程压入到队列中/从队列中弹出线程、对控制器存储器元件195的读取/写入访问、产生同步事件和在处理资源150与控制器130之间提供低级通信形式的事件。
在当前优选实施例中,伴随每个EventID的EventData字段的长度为32位。该字段包含了由当前正在执行的事件使用的主要数据。通常,其包含控制器存储器元件195的32位长pReference字段,然而,它还可以包括多种其他数据类型中的任意一种,或者当每个数据类型的长度都小于32位时,包含这些数据类型的组合。这些其他数据类型的示例包括控制器存储器元件195索引、中断掩码、定时器值和子模块ID。
线程调试控制器400还具有时间接口420。该接口提供32位时间表示,当线程调试控制器400经由子块输入接口410从控制器130的各个单独子块接收到所有记录的事件时,线程调试控制器400使用该32位时间表示来对所有记录的事件加上时间戳。
辅助调试接口430是用于使得标准外部软件调试及***可视化和控制工具可以访问线程调试控制器400的双向接口。这些外部软件调试工具用于设定与***初始化相关的调试参数,并且采集和显示所得到的跟踪数据。所支持的接口的示例包括IEEE1149.1 JTAG接口和能力更强的IEEE Nexus 5001 AUX端口接口。
最初,旨在用于对芯片设备的边界扫描的JTAG是基于包括串行链路和低速时钟策略的4线接口的技术,JTAG现在扩展用于多核架构中,以使得能够对数据访问进行调试。由于其带宽限制以及接口由调试主机通过低速串行链路来管理的事实,JTAG的应用通常限于静态操作。然而,由于其相对廉价(在硅面积和芯片I/O方面)且易于实现,所以JTAG已经成为用于芯片上调试(on-chip debug)的标准物理层。
Nexus 5001 AUX端口接口提供了更丰富的一组调试能力,包括扩展动态动作,例如对线程调试控制器400内部的调试寄存器的动态访问。
跟踪缓冲器接口440被设计成利用了任意当前可用的缓冲器技术。在该特定实施例中,跟踪数据是通过简单的字节宽度的先进先出接口输出的。图12a示出了字节宽度的接口及其相关控制信号,而图12b示出了形成这些数据并控制输入/输出的电信号的定时。尽管示出了单字节宽度的接口,但是本领域技术人员应该理解,本发明并不因此而范围受限。
再次参照图11,在图10所描述的框架中,外部调试使能信号组450都是本地调试和跟踪单元151使能信号。对多核架构10内存在的每个本地调试和跟踪单元151设置了一个使能信号,因此在设计阶段设定了精确数量。这些信号中的每一个都可以在检测到触发器事件时使能特定的本地调试和跟踪单元151。通过使用这种本地调试和跟踪单元151使能信号,并且由于控制器130的操作的固有线程级抽象(abstraction),线程调试控制器400提供了可以利用本地指令(微观架构)级别的本地调试和跟踪单元151进行门控(gated)的线程(即,宏观架构)级别调试能力。这为软件工程师提供了基于粗放线程的调试和基于较精细指令的调试,从而便于调试过程,而无需引入另外的调试软件,该另外的调试软件会导致探针效应。
再次参照图11,在图10b所描述的框架中,外部调试使能信号组450是用于将所有本地调试和跟踪单元151使能信号集中在调试控制集中块中的使能信号。这种信号的精确数量是由***设计者希望传送至调试控制集中块的离散事件的数量来确定的。于是,调试控制集中块的责任就是过滤所有调试使能源并在检测到触发器事件时确定适当的本地调试和跟踪单元151。如上所述,通过使用这种本地调试和跟踪单元151使能信号,并且由于控制器130的操作的固有线程级别抽象,线程调试控制器400提供了可以利用本地指令(微观架构)级别的本地调试和跟踪单元151来进行门控的线程(即,宏观架构)级别调试能力。然而,在这种情况下,触发器序列可以不由控制器发起。
应该注意,线程调试控制器400还为构成任务分配控制器130的子块提供了多种精细调试能力。下面将结合图13对此进行更加详细的说明。
内部调试使能信号组460包括由线程调试控制器400发送给构成任务分配控制器130的每个子块(200-280)的信号。这些信号用于根据线程调试控制器400的配置,使得线程调试控制器400能够使每个子块单步执行其下一指令,或者使该子块完全暂停。
线程调试控制器中断信号组470包括2个信号。它们使得对来自线程调试控制器400的中断的反馈能够回到控制器130。按照与对控制器130的所有其他外部中断相同的方式处理这些中断。这些信号的使用完全是可编程的,但是它们的应用的典型示例包括对应用中的需要关注的事件的统计的收集,以及特定处理资源150中的调试监测线程的启动。
TSIF***接口412使得可以在控制器130的接口管理子模块280与线程调试控制器400之间进行通信。该接口包括SubBlockCmd从输入接口490和GenericReg主输出接口480。TSIF子块和位于多核处理器内的所有处理资源150都可以通过SubBlockCmd从输入接口490访问线程调试控制器400,从而进行正常和调试操作,例如,在运行应用时对调试参数进行编程。同样,可以允许线程调试控制器400通过GenericReg主输出接口480完全访问控制器130的所有内部子块。
图13示出了控制器130的每个子块与线程调试控制器400之间连接的更详细的图。线程调试控制器400通过接口管理器(280)利用一般寄存器(GenericReg)接口480对控制器130的每个子块内的资源进行访问。该接口还使得线程调试控制器400能够独立地对每个子块进行调试和执行单个步骤。
线程调试控制器400还提供了多种***范围的闭环调试能力。首先,中断管理器(TSIC)250具有另外的线程调试控制器400反馈中断470。线程调试控制器400使用这些中断来表示被观察的一组特定的用户可定义事件已经发生。该中断随后可用于使中断管理器(TSIC)250生成SyncEvent来释放正在等待该特定SyncEvent的***管理线程。这样,调试***就可以在检测到特定***事件时触发***管理线程。
其次,专用TSIF***接口280命令可以生成能够保存32位数据的TSIFDebugEvent。随后这些TSIF DebugEvent可用于创建事件,以例如表示处理状态的改变,或者作为主机调试器和每个处理资源150之间的低比特率通信信道。
图14示出了线程调试控制器400的内部功能实现。
动态调试接口540用于对线程调试控制器400的动态操作的细节(例如,线程调试控制器400要寻找什么***管理和分配事件,以及当观察到特定事件时线程调试控制器400要执行什么动作)进行控制。
静态调试接口530用于对线程调试控制器400的静态操作的细节(例如静态事件过滤器)进行控制。
SubBlockCmd接口490使得控制器130的接口管理器280可以访问动态调试接口540。专门设计的复用器560仅使得可以从SubBlockCmd接口490访问动态调试接口540。Nexus协议转换器435将来自使用IEEE Nexus 5001协议标准的外部调试主机的信号转换为适于控制线程调试控制器400的调试操作的内部信号。这样,转换器435还提供了Nexus推荐寄存器的子集。允许外部调试主机经由复用器560来访问动态调试接口540和静态调试接口530。还允许外部调试主机经由接口管理器280一般接口来访问控制器130的所有内部子块200-280。
图15示出了调试机500中的一个的逻辑图。调试机500的数量是任意的,并且在设计时设定。
调试机500提供了一种灵活且用户可配置的设定多个断点或观察点、以及针对处理资源150的任意个体、池或任意组的复杂触发器场景(scenario)的方法。作为观察到出现触发器场景的结果,一个或多个调试机500还可以使能/禁能内部跟踪记录模块和静态事件过滤器600。
每个调试机500都包括:EventWatchInst先进先出(FIFO)寄存器510,用于存储要由该调试机500监视的事件;以及ActionListInst FIFO寄存器515,用于存储在检测到来自EventWatchInst FIFO 510的特定事件时要执行的动作。通过动态调试接口540使用这些寄存器各自的指令对这些寄存器进行编程。每个调试机500还包括事件服务模块520,该事件服务模块520获取来自EventWatchInst和ActionListInst寄存器二者的输出,并将它们与从控制器130的各个子块输入的***管理和分配事件进行比较。该事件服务模块随后输出以下信号中的一个或更多个:DebugEnable信号450,用于使能相应处理资源150的本地调试和跟踪单元151;TraceEnable/Disable 550,用于使得静态事件过滤器600能够(或不能够)将跟踪信息输出给跟踪缓冲器440;SynEnable信号555,用于控制与当前调试机500连接在一起的其他调试机。调试机500还具有调试编程的来自动态调试接口540的输入。
图16示出了此处描述的发明的具体实施例中的调试机500的物理实现。在该实施例中,EventWatchInst FIFO 510a和ActionListInst FIFO 515a实际上被实现为在所有调试机500之间共享的两个指令寄存器文件。经由读取506和写入505控制逻辑***来访问这些作为逻辑上独立的FIFO的统一的寄存器文件510a和515a。这种实现使得可以将针对每个调试机500的FIFO深度分别配置得适于用户的特定实现。
图17示出了调试机500的连接能力。这提供了对多个复杂逻辑触发器组合进行编程的能力。使用调试机500的SyncEnable信号555来创建这些复杂触发器组合。在所示的触发器场景中,各个触发器事件的单个序列之后必须是三个触发器序列的组合,这三个触发器序列的组合之后进而必须是动作被执行之前的另一单个触发器序列。由于提供了多个调试机500,所以可以同时评估组合触发器关系。
EventWatch指令用于捕获来自控制器130内的特定子块200-280的单个事件。控制各个调试机500的有限状态机(FSM)会查找EventWatch指令中指定的子块事件,并执行相关ActionList指令中限定的动作(例如,断点使能等)。
每个EventWatch指令都为44位宽。有两种主要类型的EventWatch指令:单字和双字EventWatch指令。双字EventWatch指令为88位长,并占据EventWatchInst FIFO510内的两个条目。下面示出了这两种类型:
单字EventWatch指令格式
双字EventWatch指令格式
这两种类型的EventWatch指令的各个字段为:
1、EWOpcode():这是定义操作格式的3位代码。
其可以是以下代码中的任意一种:
2、SubModuleID():该5位代码定义了事件所相关的子块:
 SubModuleID字段   模块描述
 00000   保留
 00001   TSIF
 00010   TSIM
 00011   TSOM
 00100   TSSM
 00101   TSPM
 00110   TSMM
 00111   TSTC
 0100   TSIC
 0101   TSSS
 01010-01111   保留用于其他子模块
 10000   调试机0
 10001   调试机1
  ...    ...
 11111   调试机15
3、EventID():该4位代码定义了各个子块事件,如从构成控制器130的各个子块200至280通过接口410提供的各个事件内提供的EventID所描述的。
4、EventData():该32位代码定义了被监视的各个子块200至280事件,例如控制器专用控制器存储器190内的pReference字段。
图18示出了用于单字事件观察的调试机500内的数据流。
对于单字事件观察,首先将下一EventWatch指令从EventWatchInst FIFO 510加载到事件服务模块520内的两个EventWatch指令缓冲器中的第一个中。接下来,使用比较器522将SubModuleID、EventID和EventData部分与输入的控制器130事件进行比较。尽管只包括EventID和EventData,但是因为每个子块都有其自身特定的接口410,所以SubModuleID是已知的。如果可以,则随后使用OR逻辑块523将比较的结果与由其他调试机500执行的其他比较的结果进行OR。使用OR功能块的输出来控制EventWatch指令解码器524(用于对EventWatch指令内包含的EWOpcode进行解码)的输出。EventWatch指令解码器524本身的输出对ActionList指令解码器521的输出进行控制,ActionList指令解码器521对与EventWatch指令相关的ActionList指令(前面已经由ActionList缓冲器516从ActionList指令FIFO 515载入)进行解码。ActionList指令解码器521的输出可以是以下信号中的任意一种:DebugEnable信号,用于控制与所关注的调试机500相关的处理资源150的本地调试和跟踪单元151;TraceEnable信号,用于使得跟踪数据可以从该点向前输出;SyncEnable信号,用于使得调试机500之间能够同步。
除了单字EventWatch指令内存在的字段以外,双字EventWatch指令还包括一组掩码,在根据EventWatch指令字段进行评估之前,根据MaskOp字段中指定的指令,将这些掩码应用于SubModuleID、EventID和EventData输入。MaskOp字段的值可以为以下任意一种:
  MaskOp字段   模块描述
  0000   位AND
  0001   位OR
  0010   位XOR
  0011-1111   保留
图19示出了在执行双字EventWatch指令的情况下调试机500内的数据流。与执行单字EventWatch指令的主要不同之处在于,根据以上示出的MaskOp代码类型,将双字EventWatch指令的字1的SubModuleID、EventID和EventData字段与双字EventWatch指令的字0进行AND、OR或XOR。
单字和双字EventWatch指令使用相同的ActionList指令。ActionList指令使得一个或多个调试机500能够执行复杂断点触发、跟踪使能或禁能,以及各个调试机500之间的同步,并且包括以下字段:
图20示出了静态事件过滤器600的功能框图,静态事件过滤器600在将***管理和分配事件传送至跟踪数据格式化器压缩器模块700以进行采集之前对***管理和分配事件进行过滤。该过滤器模块600还使用来自时间接口420的32位输入对从控制器130接收的所有事件加上时间戳。
静态事件模块提供了一组用户可通过静态接口530进行编程的事件过滤器掩码611至613,事件过滤器掩码611至613用于选择是否应该采集来自特定子块200至280的特定事件。将事件过滤器掩码应用于SubModuleID、EventID和EventData字段。对于每个单比特数据,在每个事件过滤器掩码中分配了两个位。这导致为每个事件过滤器掩码分配了76位的过滤器掩码。这些两位中的每一个两位的操作含义如下:
可以将用户可定义数量的事件过滤器掩码611至613分配给四个事件过滤器表610中的一个。每个事件过滤器表610都可以包含用户可定义数量的事件过滤器掩码611至613。然而,在该具体实施例中,这些表必须包含连续的过滤器掩码。这些表通过提供过滤器掩码子集而使得能够实现进一步的可编程性和对硬件资源的有效利用,这使得可以使用各个调试机500。
图21示出了特定事件过滤器掩码611至613对于特定事件过滤器掩码表610的分配。注意,在本示例中,没有使用过滤器表编号3。
图22示出了此处说明的本发明的具体实施例的跟踪数据格式化器压缩器700的功能框图。
跟踪数据格式化器压缩器模块700对跟踪数据进行压缩,以确保对片上跟踪缓冲器模块的有限能力进行最大可能的利用。尽管可以连同跟踪集中装置142或统一跟踪缓冲器143一起提供压缩模块,但是它们被设计成对来自与各个处理资源150相关的各个本地调试和跟踪单元151的指令级别或相同级别的调试和跟踪数据进行集中和压缩。由于当数据的特性既是公知的又是相似类型时对压缩进行了优化。因此该压缩器700在将从静态事件过滤器600得到的公知类型且形式类似的数据从线程调试控制器400输出到统一集中点142(如果存在的话)之前,对它们进行压缩。
跟踪数据格式化压缩器700包含事件开关710,该事件开关710将所有经过滤和加有时间戳的子块事件路由到下一个可用的两条目FIFO 720(其形成了到字段基本相关器730的输入)。这些FIFO是使得能够存储单字或双字事件的两个条目。事件开关710能够从控制器130的10个子块200至280接收10个同时事件。事件开关总是向目前可用的编号最小的FIFO 720进行写入。
一旦所有FIFO 720都包含了至少一个条目,或者一旦内部定时器到期(表示当前FIFO加载周期的结束),则将FIFO压入到字段基本相关器中。内部定时器在该10个FIFO 720中的任意一个中驻留有至少一个条目的情况下加载有固定值,并且在这些事件被读出时重新加载。
字段基本相关器730对各个固定长度的事件字段进行固定的功能操作,以使输出的字段中的零的数量最大。相对于第一FIFO,这是通过利用各个字段内的空间和时间相关性来实现的。因此第一FIFO保持不变。对于FIFO 2至10所得到的固定长度字段以及未改变的FIFO 1随后在被输入到符号内运行长度编码器750中之前被输出至另一字段相关的FIFO 740。该符号内运行长度编码器750对每个输入符号进行零运行长度编码,从而得到一组可变长度的输出符号。在加载到产生最终的输出位流的符号间运行长度编码器770中之前,将它们再次存储在一组输出FIFO 760中。通过可变长度分组器780将最终的输出位流分组成适于跟踪缓冲器接口440的可变长度数据分组。
跟踪分组数据的格式依赖于物理层。在物理层没有显示分组信号开始的情况下,接收器FSM可以使用固定模式头部和分组长度字段来经过多个分组以获得对分组描绘的锁定(lock)。示例分组格式:
再次参照图14,线程调试控制器500的内部调试控制模块580为控制器300内的子块200至280提供各自的子块调试使能信号和单步执行功能。当从任意一个调试机500接收到内部DebugEnable信号时,内部调试控制模块580会将指定子块设置为调试模式。用户还可以通过动态调试接口540单步执行指定的子块。
尽管已经对本发明的具体实施例进行了说明,但是应该理解,这仅是示例的方式,可以想到各种变型例。此外,本发明普遍适用于采用多核处理器的任意设备或应用,例如但并不限于移动电话或基于IP的语音(VoIP)网关。因此,该具体实施例不应被视为对由以下权利要求所确定的保护范围的限制。

Claims (10)

1.一种用于多核处理器架构的调试控制器,该多核处理器架构包括用于处理线程的多个互连的处理器单元,该调试控制器包括:
线程管理和分配事件输入部,其被构造为接收多个线程参数指示符,这些线程参数指示符表示与所述多核处理器架构内至少一个线程的功能和/或标识和/或执行位置有关的多个参数;
多个调试机,该多个调试机中的每一个被构造为将所述多个线程参数指示符中的至少一个线程参数指示符与多个预定标准进行比较,并响应于该比较生成跟踪使能信号,其中该多个预定标准中的每一个都代表了感兴趣的线程参数指示符;以及
静态事件过滤器,其被构造为响应于所述跟踪使能信号将跟踪信息输出给跟踪缓冲器并对***管理和分配事件进行过滤,
其中,所述静态事件过滤器提供了一组用户通过静态接口进行编程的事件过滤器掩码,所述事件过滤器掩码用于选择是否应该采集来自特定子块的特定事件。
2.根据权利要求1所述的调试控制器,其中,所述多个调试机中的每一个都包括:
事件监视先进先出寄存器,其被构造为存储多个预定标准的序列;
动作列表先进先出寄存器,其被构造为存储与在所述事件监视先进先出寄存器中存储的序列对应的动作指令序列,每个动作指令指示要执行的动作;以及
事件服务模块,其被构造为确定所述至少一个线程参数指示符与先进入所述序列中的所述多个预定标准匹配,如果匹配,则确定所述对应的动作指令是否指示跟踪被使能,如果是,则生成所述跟踪使能信号。
3.根据权利要求1所述的调试控制器,该控制器还包括:
静态接口,其被构造为向所述静态事件过滤器提供所述事件过滤器掩码。
4.根据权利要求1所述的调试控制器,其中,所述多核处理器架构还包括处理器控制器,该处理器控制器包括多个互连的单独子单元。
5.根据权利要求4所述的调试控制器,该控制器还包括:
动态调试接口,其用于通过在所述多个调试机与所述静态事件过滤器之间交互对所述处理器控制器的动态操作进行控制;以及
子块命令接口,其用于使得所述处理器控制器能够访问所述动态调试接口。
6.根据权利要求3所述的调试控制器,该控制器还包括:
辅助调试接口,其被构造为使得外部调试主机能够访问所述静态接口。
7.根据权利要求5所述的调试控制器,该控制器还包括:
辅助调试接口,其被构造为使得外部调试主机能够访问所述动态调试接口。
8.根据权利要求1所述的调试控制器,该控制器还包括:
跟踪数据格式化器压缩器模块,其被构造为接收多个生成的跟踪输出并且压缩所接收的跟踪输出;以及
跟踪缓冲器接口,其用于从所述跟踪数据格式化器压缩器模块将压缩的跟踪输出提供给所述跟踪缓冲器。
9.根据权利要求8所述的调试控制器,其中,所述跟踪数据格式化器压缩器模块包括:
多个两条目先进先出寄存器,所述多个两条目先进先出寄存器包括第一两条目先进先出寄存器;
事件开关,其被构造为接收每个生成的跟踪输出并将生成的跟踪输出路由到所述多个两条目先进先出寄存器中编号最小的一个;
字段基本相关器,其被构造为从所述多个两条目先进先出寄存器接收所述生成的跟踪输出,并通过对所述生成的跟踪输出执行固定的功能操作来处理所述生成的跟踪输出,以便通过利用关于所述第一两条目先进先出寄存器中所述生成的跟踪输出的空间和时间相关性,使零的数量最大,以由此提供经处理的跟踪输出;
多个字段相关的先进先出寄存器,它们被构造为接收所处理的跟踪输出,每个所述处理的跟踪输出包括多个符号;
符号内运行长度编码器,其被构造为从所述多个字段相关的先进先出寄存器接收所述处理的跟踪输出,并通过对所述处理的跟踪输出的每个符号执行零运行长度编码来对所述处理的跟踪输出进行编码,生成包括可变长度符号的已编码的跟踪输出;
多个输出先进先出寄存器,它们被构造为从所述符号内运行长度编码器接收所述已编码的跟踪输出;
符号间运行长度编码器,其被构造为根据来自所述多个输出先进先出寄存器的所述已编码的跟踪输出生成输出位流;以及
可变长度分组器,其被构造为从所述输出位流生成适于所述跟踪缓冲器接口的可变长度数据分组。
10.根据权利要求1所述的调试控制器,其中,所述静态事件过滤器还包括时间接口,该时间接口被构造为提供用于为所述跟踪输出加上时间戳的时间表示。
CN201210004215.1A 2004-09-14 2005-09-13 多核架构中的调试 Active CN102521137B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB0420442A GB0420442D0 (en) 2004-09-14 2004-09-14 Debug in a multicore architecture
GB0420442.6 2004-09-14
CN2005800307894A CN101084488B (zh) 2004-09-14 2005-09-13 用于调试在多核架构中执行的多线程程序的方法和***

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN2005800307894A Division CN101084488B (zh) 2004-09-14 2005-09-13 用于调试在多核架构中执行的多线程程序的方法和***

Publications (2)

Publication Number Publication Date
CN102521137A CN102521137A (zh) 2012-06-27
CN102521137B true CN102521137B (zh) 2015-10-28

Family

ID=33306559

Family Applications (3)

Application Number Title Priority Date Filing Date
CN201210004184.XA Active CN102508781B (zh) 2004-09-14 2005-09-13 多核架构中的调试
CN201210004215.1A Active CN102521137B (zh) 2004-09-14 2005-09-13 多核架构中的调试
CN2005800307894A Active CN101084488B (zh) 2004-09-14 2005-09-13 用于调试在多核架构中执行的多线程程序的方法和***

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN201210004184.XA Active CN102508781B (zh) 2004-09-14 2005-09-13 多核架构中的调试

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN2005800307894A Active CN101084488B (zh) 2004-09-14 2005-09-13 用于调试在多核架构中执行的多线程程序的方法和***

Country Status (7)

Country Link
EP (1) EP1805621B1 (zh)
JP (3) JP5610668B2 (zh)
KR (3) KR101365121B1 (zh)
CN (3) CN102508781B (zh)
GB (1) GB0420442D0 (zh)
TW (3) TWI475376B (zh)
WO (1) WO2006030195A2 (zh)

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9038070B2 (en) 2004-09-14 2015-05-19 Synopsys, Inc. Debug in a multicore architecture
GB0519981D0 (en) 2005-09-30 2005-11-09 Ignios Ltd Scheduling in a multicore architecture
CN100451972C (zh) * 2006-09-26 2009-01-14 杭州华三通信技术有限公司 提高多核***访问临界资源速度的方法和装置
GB2443277B (en) * 2006-10-24 2011-05-18 Advanced Risc Mach Ltd Performing diagnostics operations upon an asymmetric multiprocessor apparatus
US8341604B2 (en) * 2006-11-15 2012-12-25 Qualcomm Incorporated Embedded trace macrocell for enhanced digital signal processor debugging operations
US8380966B2 (en) 2006-11-15 2013-02-19 Qualcomm Incorporated Method and system for instruction stuffing operations during non-intrusive digital signal processor debugging
US8484516B2 (en) * 2007-04-11 2013-07-09 Qualcomm Incorporated Inter-thread trace alignment method and system for a multi-threaded processor
US7962885B2 (en) * 2007-12-04 2011-06-14 Alcatel-Lucent Usa Inc. Method and apparatus for describing components adapted for dynamically modifying a scan path for system-on-chip testing
KR100958303B1 (ko) 2007-12-12 2010-05-19 한국전자통신연구원 멀티코어 시스템 환경에서 내부 코어 간 통신채널을 이용한 모듈 디바이스의 동적 적재 및 실행을 통한 부하 균등화 시스템 및 방법
AT505630B1 (de) * 2008-02-05 2009-03-15 Ver Fachhochschule Technikum W Einrichtung zum koordinierten testen und zur fehlersuche in verteilten eingebetteten mikroprozessorsystemen
JP2010117813A (ja) * 2008-11-12 2010-05-27 Nec Electronics Corp デバッグシステム、デバッグ方法、デバッグ制御方法及びデバッグ制御プログラム
US8495344B2 (en) * 2010-01-22 2013-07-23 Via Technologies, Inc. Simultaneous execution resumption of multiple processor cores after core state information dump to facilitate debugging via multi-core processor simulator using the state information
TWI470421B (zh) * 2010-03-16 2015-01-21 Via Tech Inc 微處理器及其除錯方法
KR101151284B1 (ko) * 2010-04-06 2012-06-08 주식회사 안철수연구소 인젝션 스레드의 네트워크 행위 차단 시스템 및 그 방법
US8766666B2 (en) 2010-06-10 2014-07-01 Micron Technology, Inc. Programmable device, hierarchical parallel machines, and methods for providing state information
CN102655440A (zh) * 2011-03-03 2012-09-05 中兴通讯股份有限公司 对多套Turbo译码器进行调度的方法和装置
TWI497419B (zh) * 2011-10-20 2015-08-21 Via Tech Inc 電腦裝置及其中斷任務分配方法
CN102819218B (zh) * 2012-07-19 2015-04-29 西安交通大学 基于事件控制函数的离散事件***监控器及其控制方法
US9672041B2 (en) * 2013-08-01 2017-06-06 Andes Technology Corporation Method for compressing variable-length instructions including PC-relative instructions and processor for executing compressed instructions using an instruction table
KR20150019457A (ko) 2013-08-14 2015-02-25 삼성전자주식회사 시스템 온 칩, 이의 동작 방법, 및 이를 포함하는 시스템
CN104331388B (zh) * 2013-08-28 2018-09-11 威盛电子股份有限公司 微处理器及在微处理器的处理核间同步的方法
CN104572515B (zh) * 2013-10-28 2019-05-31 锐迪科(重庆)微电子科技有限公司 跟踪模块、方法、***和片上***芯片
US20150127927A1 (en) * 2013-11-01 2015-05-07 Qualcomm Incorporated Efficient hardware dispatching of concurrent functions in multicore processors, and related processor systems, methods, and computer-readable media
CN103631752A (zh) * 2013-12-19 2014-03-12 无锡美森微电子科技有限公司 一种众核处理器片上网络实时通信时间戳方法及***
US9195493B2 (en) * 2014-03-27 2015-11-24 International Business Machines Corporation Dispatching multiple threads in a computer
US9626265B2 (en) 2015-06-29 2017-04-18 International Business Machines Corporation Efficiency of cycle-reproducible debug processes in a multi-core environment
CN105740155A (zh) * 2016-03-09 2016-07-06 惠州Tcl移动通信有限公司 一种Modem CPU的调试实现方法及实现***
US10222995B2 (en) * 2016-04-13 2019-03-05 Samsung Electronics Co., Ltd. System and method for providing a zero contention parallel data stack
US10365987B2 (en) 2017-03-29 2019-07-30 Google Llc Synchronous hardware event collection
US9875167B1 (en) * 2017-03-29 2018-01-23 Google Inc. Distributed hardware tracing
CN107678892B (zh) * 2017-11-07 2021-05-04 黄淮学院 基于跳跃恢复链的连续数据保护方法
US10579501B2 (en) 2018-04-04 2020-03-03 International Business Machines Corporation Testing and reproduction of concurrency issues
US11119782B2 (en) * 2018-05-07 2021-09-14 Micron Technology, Inc. Thread commencement using a work descriptor packet in a self-scheduling processor
US11074078B2 (en) * 2018-05-07 2021-07-27 Micron Technology, Inc. Adjustment of load access size by a multi-threaded, self-scheduling processor to manage network congestion
US11513838B2 (en) * 2018-05-07 2022-11-29 Micron Technology, Inc. Thread state monitoring in a system having a multi-threaded, self-scheduling processor
US11513839B2 (en) * 2018-05-07 2022-11-29 Micron Technology, Inc. Memory request size management in a multi-threaded, self-scheduling processor
US11513840B2 (en) * 2018-05-07 2022-11-29 Micron Technology, Inc. Thread creation on local or remote compute elements by a multi-threaded, self-scheduling processor
CN113352329A (zh) * 2021-06-28 2021-09-07 珠海市一微半导体有限公司 机器人多***调试信息的实时序列化方法及机器人
CN116340188B (zh) * 2023-05-26 2023-08-04 深流微智能科技(深圳)有限公司 Gpu芯片渲染任务的调试方法及***

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1089183A2 (en) * 1999-10-01 2001-04-04 STMicroelectronics, Inc. Microcomputer debug architecture and method
CN1402132A (zh) * 2001-08-28 2003-03-12 华为技术有限公司 自动测试***的仪器模块驱动实现方法

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2538897B2 (ja) * 1987-01-14 1996-10-02 富士通株式会社 デ−タ処理装置
JP2627464B2 (ja) * 1990-03-29 1997-07-09 三菱電機株式会社 集積回路装置
JPH05324399A (ja) * 1992-03-23 1993-12-07 Toshiba Corp 情報監視装置
JPH06161817A (ja) * 1992-11-18 1994-06-10 Yokogawa Electric Corp スレッドオンラインデバッグ装置
JP2866591B2 (ja) * 1994-01-10 1999-03-08 インターナショナル・ビジネス・マシーンズ・コーポレイション オブジエクトの使用可能性の通知方法及び装置
JPH0816430A (ja) * 1994-06-27 1996-01-19 Mitsubishi Electric Corp 並列プログラムトレース装置
US5835705A (en) * 1997-03-11 1998-11-10 International Business Machines Corporation Method and system for performance per-thread monitoring in a multithreaded processor
UA55489C2 (uk) * 1997-10-07 2003-04-15 Каналь+ Сосьєте Анонім Пристрій для багатопотокової обробки даних (варіанти)
JPH11338733A (ja) * 1998-02-27 1999-12-10 Toshiba Corp デバッグ装置及び記録媒体
US6625635B1 (en) * 1998-11-02 2003-09-23 International Business Machines Corporation Deterministic and preemptive thread scheduling and its use in debugging multithreaded applications
US6593940B1 (en) * 1998-12-23 2003-07-15 Intel Corporation Method for finding errors in multithreaded applications
JP3604029B2 (ja) * 1999-01-12 2004-12-22 日本電気株式会社 マルチスレッドプロセッサ
US6587967B1 (en) * 1999-02-22 2003-07-01 International Business Machines Corporation Debugger thread monitor
JP3966453B2 (ja) * 1999-05-26 2007-08-29 株式会社ルネサステクノロジ 半導体集積回路
WO2001016714A1 (en) * 1999-09-01 2001-03-08 Intel Corporation Fast write instruction for micro engine used in multithreaded parallel processor architecture
KR20010085997A (ko) * 1999-09-07 2001-09-07 롤페스 요하네스 게라투스 알베르투스 프로그램 스레드 디버깅 방법
US6668275B1 (en) * 1999-12-17 2003-12-23 Honeywell International Inc. System and method for multiprocessor management
US6625654B1 (en) * 1999-12-28 2003-09-23 Intel Corporation Thread signaling in multi-threaded network processor
JP2002014841A (ja) * 2000-06-30 2002-01-18 Esol Co Ltd デバッグカーネルシステム
US7448025B2 (en) * 2000-12-29 2008-11-04 Intel Corporation Qualification of event detection by thread ID and thread privilege level
US7823131B2 (en) * 2001-06-29 2010-10-26 Mentor Graphics Corporation Debugger for a hardware-implemented operating system
JP2003131902A (ja) * 2001-10-24 2003-05-09 Toshiba Corp ソフトウェアデバッガ、システムレベルデバッガ、デバッグ方法、及びデバッグプログラム
JP2003263331A (ja) * 2002-03-07 2003-09-19 Toshiba Corp マルチプロセッサシステム
JP2004021751A (ja) * 2002-06-19 2004-01-22 Matsushita Electric Ind Co Ltd デバッグ装置、デバッグプログラム、およびデバッグプログラム記録媒体
GB0407384D0 (en) * 2004-03-31 2004-05-05 Ignios Ltd Resource management in a multicore processor
JP2006053835A (ja) * 2004-08-13 2006-02-23 Sony Corp 情報処理装置、デバッグ方法及びそのプログラム

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1089183A2 (en) * 1999-10-01 2001-04-04 STMicroelectronics, Inc. Microcomputer debug architecture and method
CN1402132A (zh) * 2001-08-28 2003-03-12 华为技术有限公司 自动测试***的仪器模块驱动实现方法

Also Published As

Publication number Publication date
TW201333680A (zh) 2013-08-16
EP1805621B1 (en) 2016-08-17
TWI474162B (zh) 2015-02-21
KR20070083590A (ko) 2007-08-24
TW201333681A (zh) 2013-08-16
KR20130032413A (ko) 2013-04-01
KR101248175B1 (ko) 2013-03-27
JP5610668B2 (ja) 2014-10-22
CN102508781A (zh) 2012-06-20
JP2008513853A (ja) 2008-05-01
CN101084488A (zh) 2007-12-05
EP1805621A2 (en) 2007-07-11
WO2006030195A2 (en) 2006-03-23
CN102521137A (zh) 2012-06-27
JP2013127782A (ja) 2013-06-27
JP2013239196A (ja) 2013-11-28
TWI408547B (zh) 2013-09-11
TWI475376B (zh) 2015-03-01
CN101084488B (zh) 2012-03-14
JP5492280B2 (ja) 2014-05-14
TW200613964A (en) 2006-05-01
GB0420442D0 (en) 2004-10-20
KR20120097422A (ko) 2012-09-03
JP5492332B2 (ja) 2014-05-14
KR101365121B1 (ko) 2014-03-12
KR101311846B1 (ko) 2013-09-27
CN102508781B (zh) 2015-10-14
WO2006030195A3 (en) 2007-02-22

Similar Documents

Publication Publication Date Title
CN102521137B (zh) 多核架构中的调试
US9830241B2 (en) Debug in a multicore architecture
US7058855B2 (en) Emulation interface system
US7890316B2 (en) Synchronizing on-chip data processor trace and timing information for export
US7219333B2 (en) Maintaining coherent synchronization between data streams on detection of overflow
US20060150023A1 (en) Debugging apparatus
WO2010135428A2 (en) Associating data for events occurring in software threads with synchronized clock cycle counters
US9710349B2 (en) Storing first computer trace information in memory of second computer
US20070294590A1 (en) Compression scheme to reduce the bandwidth requirements for continuous trace stream encoding of system performance
US20070271046A1 (en) Scheme for improving bandwidth by identifying specific fixed pattern sequences as header encoding followed by the pattern count
CN116860458A (zh) 一种数据补采调度方法及装置
CN114625359A (zh) 通过同步并发网络连接的多机无耦合数字化开发平台
CN114625360A (zh) 一种无耦合数字化开发平台及***
Courtois et al. SKALP: skeleton architecture for fault-tolerant distributed processing

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: SYNOPSYS INC.

Free format text: FORMER OWNER: COWARE INC.

Effective date: 20121019

C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20121019

Address after: American California

Applicant after: Ignios Ltd

Applicant after: Fujitsu Semiconductor Co., Ltd.

Address before: American California

Applicant before: Ignios Ltd

Applicant before: Fujitsu Semiconductor Co., Ltd.

C14 Grant of patent or utility model
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20200521

Address after: California, USA

Patentee after: Ignios Ltd.

Address before: California, USA

Co-patentee before: Fujitsu Semiconductor Ltd.

Patentee before: Ignios Ltd.