数据处理装置和方法与流程

文档序号:14071470阅读:252来源:国知局

本发明实施例涉及通信领域,并且更具体地,涉及一种数据处理装置、方法和计算机系统。



背景技术:

在软件设计中,主程序调用子程序称为子程序嵌套。一般当嵌套深度大于8时,称为深层子程序嵌套。为了消除函数嵌套带来的时钟开销,现代处理器中广泛采用返回地址栈(returnaddressstack,ras)来提供函数的预测返回地址。但是ras的深度一般有限,当子程序嵌套的层数超过ras的深度时,ras就会溢出。在ras溢出后,新调用的函数的返回地址要么没有地方存储,要么会把上一次存储的函数返回地址覆盖掉,这样会导致某一次或者几次的子程序返回地址可能预测错误。

针对溢出后,预测返回地址错误的问题,目前业界广泛采用的方法是设置一个计数器。通过计数器对大于ras的深度的子层序嵌套层数进行记录,以决定下一次遇到函数返回指令的时候,是需要等待使用处理器提供的数值,还是使用ras当中的预测值。具体地说,当嵌套深度大于ras的深度时,ras不再保存新调用的函数返回地址,而只通过计数器记录溢出的层数。当程序执行到函数返回指令时,ras首先通过计数器是否为“0”来判断返回地址是否在记录范围内,当不在记录范围内,每次执行函数返回指令时,计数器减“1”。当计数器计数为“0”时,表示此刻的函数返回地址在ras的记录范围之内,从而提供函数的预测返回地址。通过以上方式来避免ras溢出后,预测返回地址错误的问题。但是,该方法提供的计数器也存在溢出的问题,在计数器溢出后,同样会带来预测返回地址错误的问题。



技术实现要素:

本发明实施例提供一种数据处理装置、方法和计算机系统,能够保证函数返回地址的正确性。

第一方面,提供了一种数据处理装置,包括:返回地址预测器、输出选择电路、多路选择器。

返回地址预测器包括多个地址寄存器,地址寄存器与通用寄存器窗口中的跳转链接寄存器(branchlink,bl)一一对应,每个地址寄存器用于记录与每个地址寄存器对应的跳转链接寄存器中的函数返回地址。

输出选择电路,用于接收处理器输出的当前寄存器窗口指针(currentwindowpointer,cwp),并根据cwp输出读取选择信号,其中,cwp用于指示当前通用寄存器窗口。

多路选择器,用于接收读取选择信号和地址寄存器输出的函数返回地址,并根据读取选择信号输出目标地址寄存器存储的目标函数返回地址至处理器,其中,目标地址寄存器与当前通用寄存器窗口中的目标跳转链接寄存器对应。

在本发明实施例中,多路选择器输出的函数返回地址作为预测地址,但因地址寄存器中的函数返回地址始终与与其对应的跳转链接寄存器中的函数返回地址相同,因此,该预测地址实际为正确的函数返回地址。也就是说,本发明实施例的数据处理装置,可以保证返回地址的正确性。并且,由于本发明实施例的数据处理装置能够输出正确的函数返回地址,因此处理器不需要判断数据处理装置的输出地址是否正确,从而能够提高处理性能。

在一种可能的实现方式中,该装置还可以包括:输入选择电路,用于接收处理器输出的cwp,并根据cwp输出写入选择信号至返回地址预测器,以便于处理器向写入选择信号所指示的目标地址寄存器写入目标函数返回地址。

通过输入选择电路,可以实现函数返回地址在跳转链接寄存器和对应的地址寄存器的同步写入。

在一种可能的实现方式中,该装置还可以包括:写检测电路,用于接收处理器输出的第一地址,并判断第一地址是否与通用寄存器窗口中的其中一个跳转链接寄存器的地址相同;当第一地址与通用寄存器窗口中的其中一个跳转链接寄存器的地址相同时,输出第一电平至返回地址预测器,第一电平用于使能处理器对地址寄存器进行写操作。

在一种可能的实现方式中,该装置还可以包括:读检测电路,用于接收处理器输出的指令,并判断指令是否为函数返回指令;当指令为函数返回指令时,输出第二电平至返回地址预测器,第二电平用于使能处理器对地址寄存器进行读操作。

在函数调用时,本发明实施例的数据处理装置通过选择与通用寄存器窗口对应的地址寄存器,使得处理器可以同步向通用寄存器窗口和地址寄存器写入函数返回地址。根据寄存器窗口与地址寄存器的对应关系,在函数返回时,本发明实施例的数据处理装置可以输出正确的函数返回地址。

另外,在通用寄存器窗口全部被数据占用后,处理器也可以先将一个或多个通用寄存器窗口内容保存到内存中。当处理器需要恢复通用寄存器窗口内容的时候,通过写操作可以将内存中将相应通用寄存器窗口的内容重新写回到通用窗口寄存器中,并同步写入到相应地址寄存器中,从而保证地址寄存器内容的正确性。因此,本发明实施例的数据处理装置,由于该数据处理装置中地址寄存器直接与通用寄存器窗口中的跳转链接寄存器一一映射,因此通过寄存器窗口自身已有的逻辑和处理程序就可以保证数据处理装置中地址寄存器内容的正确性,从而不需要独立的溢出检测和溢出处理逻辑。

第二方面,提供了一种数据处理方法,包括:输出选择电路接收处理器输出的当前通用寄存器窗口指针cwp,并根据cwp输出读取选择信号,其中,cwp用于指示当前通用寄存器窗口;多路选择器接收读取选择信号和返回地址预测器中的地址寄存器输出的函数返回地址,并根据读取选择信号输出地址寄存器中的目标地址寄存器存储的目标函数返回地址至处理器。其中,返回地址预测器包括多个地址寄存器,地址寄存器与通用寄存器窗口中的跳转链接寄存器一一对应,目标地址寄存器与当前通用寄存器窗口中的目标跳转链接寄存器对应,每个地址寄存器用于记录与每个地址寄存器对应的跳转链接寄存器中的函数返回地址。

在本发明实施例中,多路选择器输出的函数返回地址作为预测地址,但因地址寄存器中的函数返回地址始终与与其对应的跳转链接寄存器中的函数返回地址相同,因此,该预测地址实际为正确的函数返回地址。也就是说,本发明实施例的数据处理方法,可以保证返回地址的正确性。并且,本发明实施例的数据处理方法能够输出正确的函数返回地址,因此处理器不需要判断多路选择器的输出地址是否正确,从而能够提高处理性能。

在一种可能的实现方式中,在输出选择电路接收处理器输出的当前通用寄存器窗口指针cwp之前,该方法还可以包括:输入选择电路接收处理器输出的cwp,并根据cwp输出写入选择信号至返回地址预测器,以便于处理器向写入选择信号所指示的目标地址寄存器写入目标函数返回地址。

在一种可能的实现方式中,在输出选择电路接收处理器输出的当前通用寄存器窗口指针cwp之前,该方法还可以包括:写检测电路接收处理器输出的第一地址,并判断第一地址是否与通用寄存器窗口中的其中一个跳转链接寄存器的地址相同;当第一地址与通用寄存器窗口中的其中一个跳转链接寄存器的地址相同时,写检测电路输出第一电平至返回地址预测器,第一电平用于使能处理器对地址寄存器进行写操作。

在一种可能的实现方式中,在多路选择器接收读取选择信号和返回地址预测器中的地址寄存器输出的函数返回地址之前,该方法还可以包括:读检测电路接收处理器输出的指令,并判断指令是否为函数返回指令;当指令为函数返回指令时,读检测电路输出第二电平至返回地址预测器,第二电平用于使能处理器对地址寄存器进行读操作。

第三方面,提供了一种数据处理方法,包括:处理器向输出选择电路输出当前寄存器窗口指针cwp,cwp指示当前通用寄存器窗口,cwp用于输出选择电路向多路选择器输出读取选择信号,其中,读取选择信号用于多路选择器输出返回地址预测器中的目标地址寄存器存储的目标函数返回地址;处理器接收多路选择器输出的目标函数返回地址,返回地址预测器中的地址寄存器与通用寄存器窗口中的跳转链接寄存器一一对应,其中,目标地址寄存器与当前通用寄存器窗口中的目标跳转链接寄存器对应,每个地址寄存器用于记录与每个地址寄存器对应的跳转链接寄存器中的函数返回地址。

在本发明实施例中,多路选择器输出的函数返回地址作为预测地址,但因地址寄存器中的函数返回地址始终与与其对应的跳转链接寄存器中的函数返回地址相同,因此,该预测地址实际为正确的函数返回地址。也就是说,本发明实施例的数据处理方法,可以保证返回地址的正确性。并且,本发明实施例的数据处理方法能够输出正确的函数返回地址,因此处理器不需要判断多路选择器装置的输出地址是否正确,从而能够提高处理性能。

在一种可能的实现方式中,在处理器向输出选择电路输出当前寄存器窗口指针cwp之前,该方法还可以包括:处理器输出目标跳转链接寄存器的地址;处理器向输入选择电路输出cwp,cwp用于输入选择电路输出写入选择信号,写入选择信号用于处理器确定目标地址寄存器;处理器根据目标跳转链接寄存器的地址向目标跳转链接寄存器写入目标函数返回地址,并根据写入选择信号向目标地址寄存器写入目标函数返回地址。

在一种可能的实现方式中,该方法还可以包括:处理器将目标跳转链接寄存器中的目标函数返回地址保存至内存;处理器向目标跳转链接寄存器写入从内存中读取的目标函数返回地址,并向目标地址寄存器写入从内存中读取的目标函数返回地址。

另外,在通用寄存器窗口全部被数据占用后,处理器也可以先将一个或多个通用寄存器窗口内容保存到内存中。当处理器需要恢复通用寄存器窗口内容的时候,通过写操作可以将内存中将相应通用寄存器窗口的内容重新写回到通用窗口寄存器中,并同步写入到相应地址寄存器中,从而保证地址寄存器内容的正确性。因此,本发明实施例的数据处理方法,由于地址寄存器直接与通用寄存器窗口中的跳转链接寄存器一一映射,因此通过寄存器窗口自身已有的逻辑和处理程序就可以保证地址寄存器内容的正确性,从而不需要独立的溢出检测和溢出处理逻辑。

在一种可能的实现方式中,在处理器向目标地址寄存器写入目标函数返回地址之前,该方法还可以包括:处理器向写检测电路输出目标跳转链接寄存器的地址;其中,处理器向目标地址寄存器写入目标函数返回地址,包括:当写检测电路根据目标跳转链接寄存器的地址输出第一电平至返回地址预测器时,处理器向目标地址寄存器写入目标函数返回地址。

在一种可能的实现方式中,在处理器接收多路选择器输出的目标函数返回地址之前,该方法还可以包括:处理器向读检测电路输出函数返回指令;其中,处理器接收多路选择器输出的目标函数返回地址,包括:当读检测电路根据函数返回指令输出第二电平至返回地址预测器时,处理器接收多路选择器输出的目标函数返回地址。

第四方面,提供了一种处理器,包括:输出单元和接收单元。

输出单元,用于向输出选择电路输出当前寄存器窗口指针cwp,所述cwp指示当前通用寄存器窗口,所述cwp用于所述输出选择电路向多路选择器输出读取选择信号,其中,所述读取选择信号用于所述多路选择器输出返回地址预测器中的目标地址寄存器存储的目标函数返回地址;

接收单元,用于接收所述多路选择器输出的所述目标函数返回地址,所述返回地址预测器中的地址寄存器与所述通用寄存器窗口中的跳转链接寄存器一一对应,其中,所述目标地址寄存器与所述当前通用寄存器窗口中的目标跳转链接寄存器对应,每个地址寄存器用于记录与所述每个地址寄存器对应的跳转链接寄存器中的函数返回地址。

在本发明实施例中,多路选择器输出的函数返回地址作为预测地址,因地址寄存器中的函数返回地址始终与与其对应的跳转链接寄存器中的函数返回地址相同,因此,该预测地址实际为正确的函数返回地址。也就是说,本发明实施例的处理器能够得到正确的函数返回地址。

在一种可能的实现方式中,输出单元还用于,输出目标跳转链接寄存器的地址;向输入选择电路输出cwp,cwp用于输入选择电路输出写入选择信号,写入选择信号用于处理器确定目标地址寄存器;该处理器还包括:写入单元,用于根据目标跳转链接寄存器的地址向目标跳转链接寄存器写入目标函数返回地址,并根据写入选择信号向目标地址寄存器写入目标函数返回地址。

在一种可能的实现方式中,该处理器还可以包括:读取单元,用于从目标跳转链接寄存器读取目标函数返回地址;写入单元还用于,将读取单元读取的目标函数返回地址写入内存;写入单元还用于,向目标跳转链接寄存器写入从内存中读取的目标函数返回地址,并向目标地址寄存器写入从内存中读取的目标函数返回地址。

在通用寄存器窗口全部被数据占用后,处理器也可以先将一个或多个通用寄存器窗口内容保存到内存中。当处理器需要恢复通用寄存器窗口内容的时候,通过写操作可以将内存中将相应通用寄存器窗口的内容重新写回到通用窗口寄存器中,并同步写入到相应的地址寄存器中,从而保证地址寄存器内容的正确性。因此,本发明实施例的处理器,通过寄存器窗口自身已有的逻辑和处理程序就可以保证地址寄存器内容的正确性,从而不需要独立的溢出检测和溢出处理逻辑。

在一种可能的实现方式中,输出单元还用于,向写检测电路输出目标跳转链接寄存器的地址;写入单元具体用于:当写检测电路根据目标跳转链接寄存器的地址输出第一电平至返回地址预测器时,向目标地址寄存器写入目标函数返回地址。

在一种可能的实现方式中,输出单元还用于,向读检测电路输出函数返回指令;接收单元具体用于:当读检测电路根据函数返回指令输出第二电平至返回地址预测器时,接收多路选择器输出的目标函数返回地址。

第五方面,提供了一种计算机系统,包括:处理器和数据处理装置。

处理器包括通用寄存器窗口,数据处理装置包括多个地址寄存器,地址寄存器与通用寄存器窗口中的跳转链接寄存器一一对应,每个地址寄存器用于记录与每个地址寄存器对应的跳转链接寄存器中的函数返回地址。

处理器用于向数据处理装置输出当前寄存器窗口指针cwp,cwp用于指示当前通用寄存器窗口。

数据处理装置用于根据cwp输出目标地址寄存器中的目标函数返回地址,其中,目标地址寄存器与通用寄存器窗口中的目标跳转链接寄存器对应。

本发明实施例的计算机系统,通过设置地址寄存器与跳转链接寄存器的对应关系,能够通过当前寄存器窗口指针得到正确的函数返回地址。

在一种可能的实现方式中,处理器还用于,向数据处理装置输出cwp;数据处理装置还用于,根据cwp选择地址寄存器中的目标地址寄存器;处理器用于,向目标跳转链接寄存器写入目标函数返回地址,并向目标地址寄存器写入目标函数返回地址。

在一种可能的实现方式中,处理器还用于:将目标跳转链接寄存器中的目标函数返回地址保存至内存;向目标跳转链接寄存器写入从内存中读取的目标函数返回地址,并向目标地址寄存器写入从内存中读取的目标函数返回地址。

在一种可能的实现方式中,处理器还用于,向数据处理装置输出第一地址,其中,第一地址为目标跳转链接寄存器的地址;数据处理装置具体用于,根据第一地址使能写使能信号;处理器具体用于,根据写使能信号向目标地址寄存器写入目标函数返回地址。

在一种可能的实现方式中,处理器还用于,向数据处理装置输出函数返回指令;数据处理装置具体用于,根据函数返回指令使能读使能信号;处理器具体用于,根据读使能信号读取目标函数返回地址。

第六方面,提供一种计算机可读介质,用于存储计算机程序,该计算机程序包括用于实现第一方面或第一方面的任意单元或电路功能的指令。

第七方面,提供一种计算机可读介质,用于存储计算机程序,该计算机程序包括用于执行第二方面或第二方面的任意可能的实现方式中的方法的指令。

第八方面,提供一种计算机可读介质,用于存储计算机程序,该计算机程序包括用于执行第三方面或第三方面的任意可能的实现方式中的方法的指令。

第九方面,提供一种计算机可读介质,用于存储计算机程序,该计算机程序包括用于执行第四方面或第四方面的任意单元或电路功能的指令。

第十方面,提供一种计算机可读介质,用于存储计算机程序,该计算机程序包括用于执行第五方面或第五方面的任意单元或电路功能的指令。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是一个ras的结构示意图。

图2是另一ras的结构示意图。

图3是根据本发明实施例的数据处理装置的示意性框图。

图4是根据本发明实施例的嵌入式系统的示意性框图。

图5是根据本发明实施例的处理器写操作的示意性流程图。

图6是根据本发明实施例的处理器读操作的示意性流程图。

图7是根据本发明实施例的数据处理方法的示意性流程图。

图8是根据本发明实施例的处理器的示意性框图。

图9是根据本发明实施例的计算机系统的示意性框图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚描述,显然,所描述的实施例是本发明实施例的一部分实施例,而不是全部实施例。基于本发明实施例中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都应属于本发明实施例保护的范围。

本发明实施例中的数据处理装置可以应用于嵌入式系统。嵌入式系统的核心是嵌入式处理器,一般具有较强的实时多任务支持能力、较强的存储区保护功能、可扩展的处理器结构和极低的功耗。嵌入式系统采用流水线技术,一般将指令的执行分解为多个独立的子任务(如取指、译码、执行、寄存器访问和写回等),将多个子任务在同一个时间点上独立和并行执行,从而显著提升处理器的频率和吞吐率。指令预取单元作为流水线中的最前级,其主要任务是提高指令存储空间的访问效率、加快指令获取速度、降低指令预取的功耗开销。程序执行过程中普遍存在着用于控制程序执行流程的分支指令,因此流水线将会不同程度地被打断。在指令执行过程中,为了确保流水线的不间断,需要对分支指令的后续指令进行预取,但是一旦在流水线后级发现分支预测错误,分支指令后的预取指令需要被丢弃,从而致使流水线中出现多个周期的空操作,造成性能损失。

作为一种重要的分支指令、函数调用(bl)和返回(ret)指令大量出现在处理器指令流中,对于函数调用和返回指令的准确预测,可以极大减少由于分支预测错误引起的性能损失。由于函数调用和返回指令的特殊性,利用通常的分支预测技术无法获得准确的函数返回指令的目标程序地址,即函数返回地址。目前业界最常见的针对函数返回指令的优化技术称为ras技术,即采用专门的硬件堆栈记录函数调用时的返回地址,即函数返回地址,从而确保无延时的精确函数返回。根据不同应用,ras的深度可以自行配置。但是ras的深度有限,一般为8~32。ras采用的是先进后出(firstinlastout,filo)结构,即最先压栈(push)的地址最后出栈(pop)。如图1所示,举例来说,如果程序执行函数调用的顺序是0,1,2,3,此后开始返回,那么函数返回的顺序就是3,2,1,0。图1中设置ras数量为8,如果子程序嵌套的层数超过了8层,那么ras就会溢出。在ras溢出后,新调用的函数的返回地址要么没有地方存储,要么会把上一次存储的函数返回地址覆盖掉,这样会导致某一次或者几次的子程序返回地址可能预测错误。

针对溢出后,预测返回地址错误的问题,目前业界广泛采用的方法是设置一个返回地址栈计数器ras_counter。如图2中所示,通过ras_counter对8层以上的子层序嵌套层数进行记录,以决定下一次遇到函数返回指令的时候,是需要等待使用处理器提供的数值,还是使用ras当中的预测值。一般ras_counter设置为5比特的计数器,可以容纳超过8层之外额外32层之内的嵌套。也就是说,当嵌套深度大于8时,ras不再保存新的返回地址,通过ras_counter记录溢出的层数。如图1中的bl8、bl9、bl10丢弃掉,ras_counter记录到3,表示丢弃了溢出的3组地址值。当程序执行到函数返回指令时,其返回顺序为10、9、8。ras首先通过ras_counter是否为“0”来判断返回地址是否在记录范围内,当不在记录范围内,每次执行函数返回指令时,ras_counter减“1”。当ras_counter计数为“0”时,表示此刻的返回地址在8个记录范围之内,从而提供函数的预测返回地址。通过以上方式来避免ras溢出后,预测返回地址错误的问题。但是,该方法提供的ras_counter计数器也存在溢出的问题,在ras_counter计数器溢出后,会带来预测返回地址错误的问题。

为解决上述问题,本发明实施例提供了一种数据处理装置,能够正确预测函数返回地址。下面,将对本发明实施例提供的数据处理装置进行详细描述。

图3示出了本发明实施例的数据处理装置300的示意性框图。该装置300可以是嵌入式系统中的一个功能单元或功能模块。该装置300包括:返回地址预测器310、输出选择电路320、多路选择器330。

返回地址预测器310,包括多个地址寄存器,每个地址寄存器可以存储一个函数返回地址。应理解,返回地址预测寄存器可以是随机存储器,闪存、或者电可擦写可编程存储器等本领域成熟的存储介质。

地址寄存器的数量与处理器中的通用寄存器窗口的数量相等。应理解,处理器可以是嵌入式系统中的流水线处理器。处理器可以是中央处理单元(centralprocessingunit,简称为“cpu”),该处理器还可以是其他通用处理器、数字信号处理器(dsp)、专用集成电路(asic)、现成可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

处理器包括多组通用的寄存器文件,寄存器文件一般指一组通用的寄存器,典型的精简指令集计算机(reducedinstructionsetcomputer,rsic)体系结构中为32个。在不同的处理器状态下处理器可见的寄存器文件也不相同。当前寄存器窗口指针可以指示当前有效的寄存器文件,也称为当前的寄存器窗口。在执行函数调用指令时的处理器可见的通用寄存器窗口的数量即为地址寄存器的数量。一个寄存器窗口可以包括多个寄存器,其中用于处理器执行函数调用指令时,存储函数返回地址的寄存器,称为跳转链接bl寄存器。在本发明实施例中,地址寄存器与寄存器窗口中的bl寄存器一一对应,并且每个地址寄存器用于记录与所述每个地址寄存器对应的跳转链接寄存器中的函数返回地址。也就是说,地址寄存器与与其对应的bl存器中存储的是同一地址。

输出选择电路320,用于接收处理器输出的当前寄存器窗口指针cwp,并根据cwp输出读取选择信号。

处理器本次执行函数返回指令时,输出的寄存器指针即为cwp。cwp用于指示当前通用寄存器窗口。当前通用寄存器窗口是多个通用寄存器窗口中的其中一个通用寄存器窗口。

多路选择器330,用于接收读取选择信号和返回地址预测器310中的寄存器输出的函数返回地址,并根据读取选择信号输出返回地址预测器310中的目标地址寄存器存储的目标函数返回地址至处理器。

其中,目标地址寄存器与当前通用寄存器窗口中的目标跳转链接寄存器对应。即,目标跳转链接寄存器存储有目标函数返回地址。

具体地,处理器执行函数调用指令时,向目标跳转链接寄存器和目标地址寄存器写入目标函数返回地址。当处理器执行到函数返回指令时,处理器中的译码单元输出cwp至输出选择电路320。输出选择电路320可以根据cwp,输出读取选择信号。读取选择信号作为多路选择器330的选择控制信号,可以控制多路选择器330输出目标地址寄存器中存储的内容,即目标函数返回地址。处理器读取到目标函数返回地址后,可以获得该目标函数返回地址所对应的指令,即函数调用指令的后一条指令,并执行该指令。

应理解,程序执行过程中,函数返回指令被打断流水线。在指令执行过程中,为了确保流水线的不间断,需要对函数返回指令的后续指令进行预取,本发明实施例的数据处理装置通过预取函数返回地址,可以保证流水线的不间断。

在本发明实施例中,多路选择器输出的函数返回地址作为预测地址,因地址寄存器中的函数返回地址始终与与其对应的跳转链接寄存器中的函数返回地址相同,因此,该预测地址实际为正确的函数返回地址。也就是说,本发明实施例的数据处理装置,可以保证返回地址的正确性。并且,由于本发明实施例的数据处理装置能够输出正确的函数返回地址,因此处理器不需要判断数据处理装置的输出地址是否正确,从而能够提高处理性能。

函数返回时,处理器读取的函数返回地址是函数调用时写入地址寄存器的。函数调用时,处理器向地址寄存器写入函数返回地址可以通过输入选择电路340实现。以处理器向返回地址预测器310中的目标地址寄存器写入目标函数返回地址为例,具体地,函数调用时,处理器向目标跳转链接寄存器写入函数调用时的返回地址,即目标函数返回地址。同时,处理器输出cwp至输入选择电路340,输入选择电路340根据cwp可以输出写入选择信号,选取需要写入的地址寄存器,在这里即为目标地址寄存器。之后,处理器将处理器输出的数据写入目标地址寄存器,完成函数调用时的返回地址的写操作。

由于寄存器窗口有限,当通用寄存器窗口中的跳转链接寄存器全部被数据占用后,处理器可以选择将一个或多个窗口中的跳转链接寄存器的内容保存到内存中,当处理器需要恢复通用寄存器窗口内容的时候,可以从内存中将相应窗口的内容重新写回到跳转链接寄存器中,此时需要同步写入到相应的地址寄存器中,从而保证返回地址预测器310中的寄存器内容的正确性。处理器将内存中相应通用寄存器窗口的内容重新写回到跳转链接寄存器的操作,与函数调用时处理器的写操作类似,可以通过输入选择电路340实现,具体过程可以参照上述与输入选择电路340相关的描述,为了简洁,此处不再赘述。

可选地,装置300还可以包括写检测电路350。处理器执行函数调用指令时,输出一个地址至写检测电路。写检测电路350在接收到处理器输出的地址后,判断该地址是否与通用寄存器窗口中的其中一个跳转链接寄存器的地址相同。如果该地址与通用寄存器窗口中的其中一个跳转链接寄存器的地址相同时,表明处理器当前执行的指令为跳转链接指令,当前写入跳转链接寄存器的内容需要写入地址寄存器。此时,写检测电路350输出第一电平至返回地址预测器310,指示当前操作为写操作。对于处理器来讲,写检测电路350输出第一电平,处理器才对地址寄存器进行写操作,否则不执行写操作。

处理器输出的第一地址为目标跳转链接寄存器的地址举例来说,写检测电路在接收到第一地址时,判断该地址是否与通用寄存器窗口中的其中一个跳转链接寄存器的地址相同。当确定第一地址为目标跳转链接寄存器的地址时,输出第一电平。然后,处理器可以根据输入选择电路340输出的写入选择信号,选取需要写入的寄存器,同步向地址目标寄存器和目标跳转链接寄存器写入目标函数返回地址。

第一电平可以是高电平,高电平可以使能处理器的写操作。当写检测电路350输出低电平时,表明当前操作不是写操作,处理器不能对地址寄存器进行写操作。另外,第一电平也可以是低电平,低电平指示当前操作为写操作。此时,当写检测电路350输出高电平时,表明当前操作不是写操作,处理器不能对地址寄存器进行写操作。

可选地,该装置300还可以包括读检测电路360。读检测电路360可以接收处理器中的译码单元输出的指令,并判断指令是否为函数返回指令。当该指令为函数返回指令时,输出第二电平至返回地址预测器310,表示需要从返回地址预测器310中返回函数返回地址。

以处理器读取目标函数返回地址为例,具体地,处理器的译码单元输出指令,读检测电路判断该指令是否为函数返回指令。如果该指令为函数返回指令,则输出第二电平。然后,处理器可以执行读操作。

第二电平可以是高电平,高电平指示当前操作为读操作。当读检测电路360输出低电平时,表明当前操作不是读操作,处理器不能读取地址寄存器的内容。另外,第二电平也可以是低电平,低电平指示当前操作为读操作。此时,当读检测电路360输出高电平时,表明当前操作不是读操作,处理器不能读取地址寄存器中的内容。

下面,结合图4,对本发明实施例的数据处理装置进行详细描述。

图4示出了一个嵌入式系统的示意性框图。如图4所示,该嵌入式系统包括典型的流水线处理器400和数据处理装置420。

典型的流水线处理器400采用七段流水线结构,包括:取指级(f)、译码级(d)、寄存器访问级(r)、执行级(e)、访存级(m)、异常级(x)和寄存器写回级(w)。每一级包括相应的逻辑功能单元和级间寄存器。以下,简单介绍流水线处理流程。

f级,cpu发出指令地址,将下一条指令地址(npc,nextprogramcounter)送入指令高速缓冲存储器cache405中。当指令cache405命中时,将指令cache返回的指令送入到f级间寄存器406,待下一时钟周期处理。d级,将指令送入译码单元407进行译码,根据指令译码结果产生诸如访存、算术逻辑、函数调用,分支跳转等操作码和需要操作的寄存器地址,将结果送入d级间寄存器408。r级,根据上一时钟周期译码结果,将寄存器地址送入到寄存器文件409,并完成读操作,将读出的寄存器内容送入到r级间寄存器410。e级,由算数逻辑运算单元411执行算术逻辑操作,并将结果送入到e级级间寄存器412。m级,访存队列单元413执行访存操作,待结果返回后将结果送入到m级间寄存器414。x级,当指令在前端流水线执行出现异常时,到该级流水线异常处理单元415进行统一处理,以实现精确异常处理,并将处理结果送入x级间寄存器416。w级,将正常指令执行的结果写入到寄存器文件中。

处理器400中的寄存器文件的结构如图4所示的寄存器文件结构图其中,该寄存器文件包括8个通用寄存器窗口,即通用寄存器窗口0~窗口7。每个通用寄存器窗口包括一个跳转链接寄存器,寄存器窗口0~窗口7中的跳转链接寄存器是w0:bl~w7:bl。

数据处理装置420包括:写检测电路421、输入选择电路422、返回地址预测器423、读检测电路424、输出选择电路425、多路选择器mux426。

应理解,图4所示的写检测电路421、输入选择电路422、返回地址预测器423、读检测电路424、输出选择电路425、多路选择器mux426,可以分别对应于图3所示的写检测电路350、输入选择电路340、返回地址预测器310、读检测电路360、输出选择电路320、多路选择器330。以下,将对这六部分电路进行详细介绍。

写检测电路421:当指令执行到寄存器写回阶段(w级),判断流水线输出的写地址wraddr是否为跳转链接bl寄存器的地址,如果写地址wraddr与bl寄存器的地址相同,写使能信号wr_enable为高,指示当前为写操作;如果不相等,写使能信号为低,不执行写操作。

输入选择电路422:当指令执行到寄存器写回阶段,根据当前寄存器窗口指针wrcwp生成写选择信号wr_sel,选取需要写入的寄存器,写入函数返回地址wrdata。具体地,输入选择电路422可以根据3:8译码器的原理生成wr_sel。

返回地址预测器423:保存函数返回地址的地址寄存器组,数目与通用寄存器窗口的数目一致。图4所示的返回地址预测器423包括8个地址寄存器。每个地址寄存器与寄存器文件中的一个窗口的跳转链接寄存器对应。例:no0号地址寄存器保存着寄存器窗口0的bl寄存器,即w0:bl的内容。

读检测电路424:当指令执行到译码单元,指令译码为函数返回指令时,读使能信号rd_enable置高,表示需要从返回地址预测器423中读函数返回地址。

输出选择电路425:记录指令在译码单元时的当前寄存器窗口指针d.cwp,并根据d.cwp生成读选择信号rd_sel。

多路选择器mux426:根据输出选择电路生成的rd_sel选择输出的函数返回地址,并将该函数返回地址发往流水线中的f级,用于预测函数返回的地址。

本发明实施例中,当d级译码指令为函数调用指令时,函数调用发生时的当前pc值将在w级写入bl(branchlink)寄存器中。具体地,在w级,处理器根据w级输出的wraddr==bl@addr生成的写使能信号,将d级传来的pc值根据当前寄存器窗口指针wrcwp写入到对应的地址寄存器中。此后,当d级译码指令为函数返回指令时,根据当前寄存器窗口指针d.cwp,直接将返回地址预测寄存器内容送入到f级,然后作为返回地址的基地址,经过双路选择器401送入到加法器403。根据返回地址的类型为ret或retl,将4或8进入双路选择器402,送入到加法器403的另一端。将加法器403输出内容作为npc,送至指令cache405,完成地址预测。

需要说明的是,如图4所示,d.retl/ret_enable作为双路选择器401的控制信号,控制双路选择器401输出pc或地址寄存器送入的内容。d.retl/ret_sel作为双路选择器402的控制信号,控制双路选择器401输出4或8。双路选择器404的两路输入分别为加法器403输出的内容和来自x级间寄存器的内容x.pc。返回地址预测器440同传统的ras模块类似,也分为类似压栈(push)和出栈(pop)操作的写和读操作。下面分别就这两种操作进行说明。

函数调用时处理器的操作为写操作,写操作的流程如图5所示。

s510,处理器400输出写地址wraddr;

s520,写检测电路421判断流水线输出写地址wraddr是否与跳转链接bl寄存器的地址bl@addr相同,即wraddr==bl@addr?;

s530,如果地址相同,即wraddr==bl@addr,表明流水线写入的是bl寄存器,当前执行的指令为跳转链接指令,当前写入寄存器的内容要写入到地址寄存器中。此时,写检测电路421将写使能信号wr_enable置高,指示当前为写操作。如果地址不相同,表明当前周期无写操作。

s540,输入选择电路422根据当前寄存器窗口指针wrcwp(相当于上文中所描述的cwp),生成写选择信号wr_sel,选取需要写入地址寄存器。

s550,处理器将流水线输出的wrdata数据,即函数返回地址写入bl寄存器,并同步写入到选中的地址寄存器中,写操作完成。

函数返回时的处理器的操作为读操作,读操作的流程如图6所示。

s610,处理器译码单元输出指令inst。

s620,读检测电路424判断流水线译码单元输出到返回地址预测器423的指令inst是否为函数返回指令ret。

s630,如果为函数返回指令,表明流水线需要通过返回地址预测器423读出预测的函数返回地址。此时,读检测电路424将读使能信号rd_enable置高,指示当前为读操作。如果不为函数返回指令,当前不需要进行读操作。

s640,流水线译码单元输出寄存器当前寄存器窗口指针d.cwp(相当于上文中所描述的cwp),控制输出选择电路425输出rd_sel信号。

s650,mux460根据输出选择电路425生成的rd_sel选择输出的地址,并将该地址发往流水线中的f级,用于预测函数返回的地址。

在函数调用时,本发明实施例的数据处理装置通过选择与通用寄存器窗口对应的返地址寄存器,使得处理器可以同步向通用寄存器窗口和地址寄存器写入函数返回地址。根据寄存器窗口与地址寄存器的对应关系,在函数返回时,本发明实施例的数据处理装置可以输出正确的函数返回地址。

另外,在通用寄存器窗口全部被数据占用后,处理器也可以先将一个或多个通用寄存器窗口内容保存到内存中。当处理器需要恢复通用寄存器窗口内容的时候,通过图5所示的写操作可以将内存中将相应通用寄存器窗口的内容重新写回到通用窗口寄存器中,并同步写入到相应的地址寄存中,从而保证寄存器内容的正确性。因此,本发明实施例的数据处理装置,由于该数据处理装置中的地址寄存器直接与通用寄存器窗口中的跳转链接寄存器一一映射,因此通过寄存器窗口自身已有的逻辑和处理程序就可以保证数据处理装置中寄存器内容的正确性,从而不需要独立的溢出检测和溢出处理逻辑。

图7示出了本发明实施例的数据处理方法的示意性流程图。该方法中的相应单元或电路可以由图3所示的装置300中的对应的单元或电路实现。

s710,处理器向输出选择电路输出当前寄存器窗口指针cwp。其中,cwp用于指示当前通用寄存器窗口。

该处理器可以是中央处理单元(centralprocessingunit,简称为“cpu”),该处理器还可以是其他通用处理器、数字信号处理器(dsp)、专用集成电路(asic)、现成可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

s720,输出选择电路根据cwp输出读取选择信号。读取选择信号用于多路选择器选择返回地址预测器中的目标地址寄存器。

s730,多路选择器接收读取选择信号和返回地址预测器中的地址寄存器输出的函数返回地址,并根据读取选择信号输出目标地址寄存器存储的目标函数返回地址至处理器。

其中,返回地址预测器包括多个地址寄存器,地址寄存器用于存储函数返回地址,地址寄存器的数量与处理器中的通用寄存器窗口的数量相等,且地址寄存器与通用寄存器窗口中的跳转链接寄存器一一对应,目标地址寄存器与当前通用寄存器窗口中的目标跳转链接寄存器对应。跳转链接寄存器用于存储函数返回地址,每个地址寄存器用于记录与所述每个地址寄存器对应的跳转链接寄存器中的函数返回地址。

具体地,处理器执行函数调用指令时,向目标跳转链接寄存器和目标地址寄存器写入目标函数返回地址。当处理器执行到函数返回指令时,处理器中的译码单元输出cwp至输出选择电路。输出选择电路可以根据cwp,输出读取选择信号。读取选择信号作为多路选择器的选择控制信号,可以控制多路选择器输出目标地址寄存器中存储的内容,即目标函数返回地址。处理器读取到目标函数返回地址后,可以获得该目标函数返回地址所对应的指令,即函数调用指令的后一条指令,并执行该指令。

在本发明实施例中,多路选择器输出的函数返回地址作为预测地址,因地址寄存器中的函数返回地址始终与与其对应的跳转链接寄存器中的函数返回地址相同,因此,该预测地址实际为正确的函数返回地址。也就是说,本发明实施例的数据处理方法,可以保证返回地址的正确性。并且,本发明实施例的数据处理方法能够输出正确的函数返回地址,因此处理器不需要判断多路选择器的输出地址是否正确,从而能够提高处理性能。

作为一个实施例,在执行函数调用指令时,处理器可以输出目标跳转链接寄存器的地址,并向输出目标跳转链接寄存器的地址。输入选择电路可以根据cwp输出写入选择信号至返回地址预测器,用以选择目标地址寄存器。这样,处理器在根据目标跳转链接寄存器的地址向目标跳转链接寄存器写入目标函数返回地址时,并同时向目标地址寄存器写入目标函数返回地址。

可选地,该方法还可以包括:处理器将目标跳转链接寄存器中的目标函数返回地址保存至内存;处理器向目标跳转链接寄存器写入从内存中读取的目标函数返回地址,并向目标地址寄存器写入从内存中读取的目标函数返回地址。

可选地,在输出选择电路接收处理器输出的当前通用寄存器窗口指针cwp之前,该方法还可以包括:写检测电路接收处理器输出的第一地址,并判断第一地址是否与通用寄存器窗口中的其中一个跳转链接寄存器的地址相同;当第一地址与通用寄存器窗口中的其中一个跳转链接寄存器的地址相同时,写检测电路输出第一电平至返回地址预测器。然后,处理器向目标地址寄存器写入目标函数返回地址。其中,与第一地址相同的跳转链接寄存器的地址为目标跳转链接寄存器的地址。

可选地,在多路选择器接收读取选择信号和地址寄存器输出的函数返回地址之前,该方法还可以包括:读检测电路接收处理器中输出的指令,并判断指令是否为函数返回指令;当指令为函数返回指令时,读检测电路输出第二电平至返回地址预测器。然后,处理器读取返回目标地址寄存器中存储的目标函数返回地址。

应理解,根据本发明实施例的数据处理方法的各步骤可以参照上述实施例中的数据处理装置的相关描述,为了简洁,此处不再赘述。

图8示出了根据实施例的处理器800的示意性框图。该处理器800包括:输出单元810和接收单元820。

输出单元810,用于向输出选择电路输出当前寄存器窗口指针cwp,所述cwp指示当前通用寄存器窗口,所述cwp用于所述输出选择电路向多路选择器输出读取选择信号,其中,所述读取选择信号用于所述多路选择器输出返回地址预测器中的目标地址寄存器存储的目标函数返回地址;

接收单元820,用于接收所述多路选择器输出的所述目标函数返回地址,所述返回地址预测器中的地址寄存器与所述通用寄存器窗口中的跳转链接寄存器一一对应,其中,所述目标地址寄存器与所述当前通用寄存器窗口中的目标跳转链接寄存器对应,每个地址寄存器用于记录与所述每个地址寄存器对应的跳转链接寄存器中的函数返回地址。

在本发明实施例中,多路选择器输出的函数返回地址作为预测地址,因地址寄存器中的函数返回地址始终与与其对应的跳转链接寄存器中的函数返回地址相同,因此,该预测地址实际为正确的函数返回地址。也就是说,本发明实施例的处理器能够得到正确的函数返回地址。

可选地,输出单元810还用于,输出目标跳转链接寄存器的地址;向输入选择电路输出cwp,cwp用于输入选择电路输出写入选择信号,写入选择信号用于处理器确定目标地址寄存器;该处理器还包括:写入单元,用于根据目标跳转链接寄存器的地址向目标跳转链接寄存器写入目标函数返回地址,并根据写入选择信号向目标地址寄存器写入目标函数返回地址。

可选地,该处理器800还可以包括:读取单元,用于从目标跳转链接寄存器读取目标函数返回地址;写入单元还用于,将读取单元读取的目标函数返回地址写入内存;写入单元还用于,向目标跳转链接寄存器写入从内存中读取的目标函数返回地址,并向目标地址寄存器写入从内存中读取的目标函数返回地址。

在通用寄存器窗口全部被数据占用后,处理器也可以先将一个或多个通用寄存器窗口内容保存到内存中。当处理器需要恢复通用寄存器窗口内容的时候,通过写操作可以将内存中将相应通用寄存器窗口的内容重新写回到通用窗口寄存器中,并同步写入到相应的地址寄存器中,从而保证地址寄存器内容的正确性。因此,本发明实施例的处理器,通过寄存器窗口自身已有的逻辑和处理程序就可以保证地址寄存器内容的正确性,从而不需要独立的溢出检测和溢出处理逻辑。

可选地,输出单元810还用于,向写检测电路输出目标跳转链接寄存器的地址;写入单元具体用于:当写检测电路根据目标跳转链接寄存器的地址输出第一电平至返回地址预测器时,向目标地址寄存器写入目标函数返回地址。

可选地,输出单元810还用于,向读检测电路输出函数返回指令;接收单元820具体用于:当读检测电路根据函数返回指令输出第二电平至返回地址预测器时,接收多路选择器输出的目标函数返回地址。

应理解,根据本发明实施例的处理器的各单元或各单元对应的功能可以参照上述实施例中的数据处理方法的相关描述,为了简洁,此处不再赘述。

图9示出了本发明实施例的计算机系统900的示意性流程图。该系统中包括处理器910和数据处理装置920。

处理器910包括通用寄存器窗口。数据处理装置920包括多个地址寄存器,地址寄存器与通用寄存器窗口中的跳转链接寄存器一一对应,每个地址寄存器用于记录与每个地址寄存器对应的跳转链接寄存器中的函数返回地址。

应理解,地址寄存器可以是上述实施例中的返回地址预测器中的地址寄存器。

处理器910用于向数据处理装置输出当前寄存器窗口指针cwp,cwp指示当前通用寄存器窗口。

该处理器910可以是中央处理单元(centralprocessingunit,简称为“cpu”),该处理器还可以是其他通用处理器、数字信号处理器(dsp)、专用集成电路(asic)、现成可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

数据处理装置920用于根据cwp输出目标地址寄存器中的目标函数返回地址,其中,目标地址寄存器与通用寄存器窗口中的目标跳转链接寄存器对应。

应理解,目标地址寄存器可以对应于上述实施例中的返回地址预测器中的目标地址寄存器。

本发明实施例的计算机系统,通过设置地址寄存器与跳转链接寄存器的对应关系,能够通过当前寄存器窗口指针得到正确的函数返回地址。

可选地,处理器910还用于,向数据处理装置输出cwp。数据处理装置920还用于,根据cwp选择地址寄存器中的目标地址寄存器。处理器910用于,向目标跳转链接寄存器写入目标函数返回地址,并向目标地址寄存器写入目标函数返回地址。

可选地,处理器910还用于:将目标跳转链接寄存器中的目标函数返回地址保存至内存;向目标跳转链接寄存器写入从内存中读取的目标函数返回地址,并向目标地址寄存器写入从内存中读取的目标函数返回地址。

可选地,处理器910还用于,向数据处理装置920输出第一地址,其中,第一地址为目标跳转链接寄存器的地址。数据处理装置920具体用于,根据第一地址使能写使能信号。处理器910具体用于,根据写使能信号向目标地址寄存器写入目标函数返回地址。

可选地,处理器910还用于,向数据处理装置920输出函数返回指令。数据处理装置920具体用于,根据函数返回指令使能读使能信号。处理器910具体用于,根据读使能信号读取目标函数返回地址。

应理解,本发明实施例的处理器910可以对应处理器800,数据处理装置920可以是上述的装置300,为了简洁,此处不再赘述。

应理解,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。

应理解,在本发明的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本发明实施例所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1