一种寄存器访问时序的管理方法、处理器、电子设备及计算机可读存储介质与流程

文档序号:20945892发布日期:2020-06-02 19:52阅读:264来源:国知局
一种寄存器访问时序的管理方法、处理器、电子设备及计算机可读存储介质与流程

本申请涉及寄存器资源管理领域,尤其涉及一种寄存器访问时序的管理方法、处理器、电子设备及计算机可读存储介质。



背景技术:

目前,在基于流水线技术实现的处理器中,通常是将一条指令拆分为多个阶段来执行以便达到并行执行多条指令的目的,从而提高程序指令的执行效率、实现处理器的最高主频。然而,在并行执行多条指令的情况下,不可避免的将在不同指令之间发生寄存器访问时间的冲突,从而导致指令操作数的读取错误和运行结果错误。比如,指令2在第3个时钟周期需要从通用寄存器r1中读取指令1写回的数据,而指令1在第4个时钟周期才能将指令2所需的数据写回r1中,因此指令2在第3个时钟周期从r1中读取的数据并不是真正需要的数据。又如,指令1和指令2在同一个时钟周期向同一个寄存器写回数据,从而造成访问时间冲突。

因此,处理器需要对不同指令对寄存器的访问时序进行管理,避免寄存器访问冲突。现有的基于硬件实现的寄存器访问时序的管理方法的设计难度大、实现成本高。而基于编译器的寄存器访问时序的管理,将导致编译器需要同时兼顾优化编译和消除寄存器访问冲突,从而增加编译器的设计难度、影响处理器的整体性能。



技术实现要素:

本申请实施例提供一种寄存器访问时序的管理方法、装置、电子设备及计算机可读存储介质,可以降低处理器硬件设计的复杂度、提高寄存器的资源利用率。

本申请实施例第一方面提供了一种寄存器访问时序的管理方法,包括:

获取在多个时钟周期中的每个时钟周期内执行第一指令访问寄存器的第一访问信息,所述第一指令为已确定在所述每个时钟周期到来时开始生效的指令;

当接收到第二指令时,确定执行所述第二指令访问寄存器的第二访问信息;

根据所述第一访问信息和所述第二访问信息,确定执行所述第一指令访问寄存器与执行所述第二指令访问寄存器之间的时序关系。

相应地,本申请实施例第二方面提供了一种处理器,包括:

获取模块,用于获取在多个时钟周期中的每个时钟周期内执行第一指令访问寄存器的第一访问信息,所述第一指令为已确定在所述每个时钟周期到来时开始生效的指令;

译码模块,用于当接收到第二指令时,确定执行所述第二指令访问寄存器的第二访问信息;;

检测模块,用于根据所述第一访问信息和所述第二访问信息,确定执行所述第一指令访问寄存器与执行所述第二指令访问寄存器之间的时序关系。

其中,所述第一访问信息包括在每个时钟周期内执行第一指令所访问的寄存器的第一标识信息;所述第二访问信息包括执行所述第二指令所访问的寄存器的第二标识信息、以及执行所述第二指令访问寄存器的时间信息;

所述检测模块还用于:

根据所述时间信息,确定所述多个时钟周期中的目标时钟周期,所述目标时钟周期为执行所述第二指令访问寄存器的时钟周期;

确定在所述目标时钟周期内执行所述第一指令所访问的寄存器的第一标识信息与执行所述第二指令所访问的寄存器的第二标识信息是否相同;

当所述第一标识信息与所述第二标识信息相同时,确定所述时序关系为时间冲突。

其中,所述第一访问信息还包括多个数据端口中的每个数据端口在所述每个时钟周期内的端口状态信息,所述每个数据端口用于对寄存器进行访问;

所述检测模块还用于:

根据所述端口状态信息,确定所述每个数据端口在所述目标时钟周期内的使用状态;

当所述多个数据端口中的至少一个数据端口在目标时钟周期内处于空闲状态时,执行所述确定在所述目标时钟周期内执行所述第一指令所访问的寄存器的第一标识信息与执行所述第二指令所访问的寄存器的第二标识信息是否相同的操作。

其中,所述处理器还包括执行模块,用于:

当所述时序关系不为所述时间冲突时,根据所述端口状态信息,选择处于所述空闲状态的数据端口对执行所述第二指令所访问的寄存器进行写入。

其中,所述第一访问信息包括在所述每个时钟周期内的执行所述第一指令所访问的寄存器的第一标识信息;

所述多个时钟周期包括当前时钟周期和所述当前时钟周期之后的至少一个时钟周期,所述当前时钟周期为译码所述第二指令所发生的时钟周期;

所述检测模块还用于:

根据所述第二访问信息,确定在所述当前时钟周期的下一个时钟周期执行所述第二指令所访问的寄存器的第二标识信息;

确定在所述至少一个时钟周期中的每个时钟周期内执行所述第一指令所访问的寄存器的第一标识信息与执行所述第二指令所访问的寄存器的第二标识信息是否相同;

当所述第一标识信息与所述第二标识信息相同时,确定所述时序关系为时间冲突。

其中,所述第一访问信息还包括多个数据端口中的每个数据端口在所述每个时钟周期内的端口状态信息,所述每个数据端口用于对寄存器进行访问;

所述检测模块还用于:

根据所述端口状态信息,确定所述每个数据端口在所述至少一个时钟周期中的每个时钟周期内的使用状态;

将所述至少一个时钟周期中所述多个数据端口中的至少一个数据端口处于占用状态的时钟周期作为目标时钟周期;

确定在所述目标时钟周期内执行所述第一指令所访问的寄存器的第一标识信息与执行所述第二指令所访问的寄存器的第二标识信息是否相同。

其中,所述获取模块还用于:

在所述每个时钟周期结束后,根据所述第二访问信息和所述时序关系更新所述第一访问信息。

本申请实施例第三方面公开了一种电子设备,包括:处理器、存储器、通信接口和总线;

所述处理器、所述存储器和所述通信接口通过所述总线连接并完成相互间的通信;

所述存储器存储可执行程序代码;

所述处理器通过读取所述存储器中存储的可执行程序代码来运行与所述可执行程序代码对应的程序,以用于执行本申请实施例第一方面公开的一种寄存器访问时序的管理方法中的操作。

相应地,本申请实施例提供了一种存储介质,其中,所述存储介质用于存储应用程序,所述应用程序用于在运行时执行本申请实施例第一方面公开的一种寄存器访问时序的管理方法。

相应地,本申请实施例提供了一种应用程序,其中,所述应用程序用于在运行时执行本申请实施例第一方面公开的一种寄存器访问时序的管理方法。

实施本申请实施例,获取在多个时钟周期中的每个时钟周期内执行第一指令访问寄存器的第一访问信息,所述第一指令为已确定在所述每个时钟周期到来时开始生效的指令;当接收到第二指令时,确定执行所述第二指令访问寄存器的第二访问信息;根据所述第一访问信息和所述第二访问信息,确定执行所述第一指令访问寄存器与执行所述第二指令访问寄存器之间的时序关系。可以将每个时钟周期内执行指令访问寄存器的访问信息和寄存器访问端口的状态信息保存在一个硬件信息表中,从而可以通过简单地维护该硬件信息表来管理寄存器的访问时序,并在指令译码阶段基于该硬件信息表进行冲突检测,若存在冲突,则将指令卡住不发往rf阶段,达到了降低处理器硬件设计的复杂度的目的。此外,还可以通过该硬件信息表及时检测和利用空闲的寄存器资源,从而有效提高寄存器的资源利用率。

附图说明

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

图1是本申请实施例提供的一种处理器的结构示意图;

图2是本申请实施例提供的一种寄存器访问时序的管理方法的示意图;

图3是本申请实施例提供的另一种寄存器访问时序的管理方法的示意图;

图4是本申请实施例提供的另一种处理器的结构示意图;

图5是本申请实施例提供的一种电子设备的示意图。

具体实施方式

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

请参考图1,图1是本申请实施例提供的一种处理器的结构示意图。如图所示,在该处理器中包括一条指令执行流水线、多个数据端口、以及多个通用寄存器。其中,为了叙述的简洁,下文中将通用寄存器简称为寄存器。数据端口包括寄存器的写回端口,多个数据端口可以同时向多个不同的寄存器写入数据,但是多个数据端口不可以同时向一个寄存器写入数据。在该处理器中,每条指令的执行过程被拆分为多个阶段,包括:指令二进制(dec)译码阶段、寄存器读取(rf)阶段、运算执行(exe)阶段、存储器访问阶段0(m0)、存储器访问阶段1(m1)、存储器访问阶段2(m2)以及数据写回(wb)阶段。其中,存储器访问阶段又可以包括存储器访问阶段0(m0)、存储器访问阶段1(m1)和存储器访问阶段2(m2),则该指令执行流水线的阶数为7阶。待执行指令将依次进入指令执行流水线中的每个阶段进行执行,其中,dec阶段包括对待执行指令进行译码的过程,可以确定指令的操作数所在的寄存器;rf阶段包括从dec译码阶段确定的寄存器中读取指令的操作数的过程;exe阶段包括根据指令的运算逻辑对操作数进行运算的过程;m0-m2是针对于存储器访问指令的,包括从存储器中读取数据或者将数据写入存储器的过程,其中,存储器访问指令是最重要的指令类型之一。wb阶段是指通过数据端口将指令执行的结果写回寄存器的过程。指令执行流水线中的每个阶段都有各自独立的电路来处理,待执行指令在进入该流水线后,每完成一个阶段就进到下一阶段,执行前一阶段的电路就可以处理其他指令,从而可以实现多条指令的并行处理。例如:处理器可以同时执行处于m2阶段的指令1、处于m1阶段的指令2、处于m0阶段的指令3以及处于exe阶段的指令4。其中,还可以将每条指令的执行过程拆分为取指阶段、译码阶段、执行阶段、访存阶段和写回阶段。其中,不论是拆分为几个执行阶段、如何拆分,流程线技术的实现过程都是类似的。根据指令执行流水线的实现过程可知相比于在不采用流水线技术的处理器,采用的流水线技术的处理器的指令执行效率可以得到成倍的提升。基于上述处理器,本申请实施例提出以下寄存器访问时序的管理方法。

请参考图2,图2是本申请实施例提供的一种寄存器访问时序的管理方法的流程示意图。本申请实施例针对两条指令在同一时钟周期内向同一个寄存器写入数据的情况,执行主体为处理器。如图所示,本申请实施例中的方法包括:

s201,获取在多个时钟周期中的每个时钟周期内执行第一指令访问寄存器的第一访问信息。其中,所述第一指令为已确定在所述每个时钟周期到来时开始生效的指令。

具体实现中,时钟周期是处理器中的基本时间单位,一个时钟周期的时间长度等于处理器主频的倒数。首先可以在当前时钟周期中,确定当前时钟周期以及当前时钟周期之后的至少一个时钟周期内将要执行的指令,其中,在每个时钟周期到来时开始生效的指令就是在该时钟周期内所要执行的指令,并且在每个时钟周期到来时开始生效的指令可以有一个或多个。其中,可以根据指令在dec译码阶段的译码结果,确定该指令开始生效的时钟周期,从而确定在每个时钟周期内生效的指令。译码结果中还包括在执行该指令过程中访问寄存器的访问信息。针对每个时钟周期,访问信息可以包括执行在该时钟周期内生效的指令所要访问的寄存器的标识信息、以及访问该寄存器所使用的数据端口。其中,本申请实施例中主要关注在每个时钟周期内执行生效指令时需向其中写入数据的寄存器。

例如:处理器中包括2个数据端口wp0和wp1、32个寄存器(寄存器1、寄存器2、…、寄存器32),该处理器中的指令执行流水线的阶数为7阶,则为了覆盖该流水线的每个阶段,可以分别确定包括当前时钟周期在内的7个时钟周期内生效的指令,其中,f[0]表示当前时钟周期到来时生效的指令、f[1]表示下一个时钟周期到来时生效的指令、f[2]表示下两个时钟周期到来时生效的指令、…、以及f[6]表示6个时钟周期后生效的指令。接着根据f[0]、f[1]、…、f[6]中每个指令的译码结果,确定在每个时钟周期内所需写入的寄存器、和向该寄存器写入数据时所使用的数据端口,其中,可以根据确定的寄存器和数据端口的信息生成处理器的硬件信息表(如表1所示)。

其中,valid0和valid1表示对应数据端口wp0和wp1的使用情况,例如,valid0=1时表示数据端口wp0被对应指令的数据写入操作占用、valid1=0时表示数据端口wp1处于空闲状态,因此valid0和valid1也反映了指令的有效性(指令是否产生需要写入寄存器的数据),rsel1和rsel0为寄存器的标识。如表1所示,在执行f[0]的过程中分别通过wp0和wp1向寄存器15和寄存器29中写入数据、在执行f[1]的过程中将通过wp0向寄存器18写入数据、…、在执行f[5]的过程中valid0=0和valid1=0,表示没有针对寄存器的写入操作。

表1.硬件信息表

s202,当接收到第二指令时,确定执行所述第二指令访问寄存器的第二访问信息。

具体实现中,处理器在执行已经确定了执行顺序和执行时间的指令的同时,还可以继续接收应用程序或系统输入的新的待执行指令。通常,当在当前时钟周期接收到新的待执行指令时,会立即对该指令进行dec译码以得到执行该指令访问寄存器的第二访问信息,不存在延迟的情况,因此第二指令的译码发生在当前时钟周期。其中,该第二访问信息可以包括在执行第二指令的过程中需要向其中写入数据的寄存器的标识信息,以及该写入操作发生的时间信息(如n个时钟周期后)。

例如:在当前时钟周期中,处理器在执行f[0]的同时接收指令1,则在当前时钟周期对指令1进行dec译码后得到该指令需要将当前时钟周期的n个时钟周期后向寄存器rw写回数据。需要说明的是,向寄存器rw写回数据的发生在n个时钟周期后的前提是以指令1在下一个时钟周期顺利进入rf阶段为前提的,该前提表示不对该指令进行延迟执行。

s203,根据所述第一访问信息和所述第二访问信息,确定执行所述第一指令访问寄存器与执行所述第二指令访问寄存器的时序关系。

具体实现中,第一访问信息包括在每个时钟周期内执行第一指令所访问的寄存器的第一标识信息,其中,该寄存器为在执行第一指令过程中向其中写入数据的寄存器。第二访问信息包括执行第二指令所访问的寄存器的第二标识信息、以及执行第二指令访问寄存器的时间信息,其中,该寄存器也为在执行第二指令过程中向其中写入数据的寄存器。

因此,可以首先根据第二访问信息中的时间信息,确定多个时钟周期中的目标时钟周期,其中,该目标时钟周期为执行第二指令访问寄存器的时钟周期,例如:时间信息为3个时钟周期后,则以当前时钟周期为参考,可以确定目标时钟周期为当前时钟周期之后的第3个时钟周期。接着确定在目标时钟周期内执行第一指令所访问的寄存器的第一标识信息与执行第二指令所访问的寄存器的第二标识信息是否相同,当在目标时钟周期内的第一标识和第二标识信息相同时,表示在目标时钟周期内第一指令和第二指令向同一寄存器写回数据,从而确定执行第一指令访问寄存器与执行第二指令访问寄存器的时序关系为时间冲突。也就是说,若第二指令在当前时钟周期完成dec译码后,按照正常的流水线顺序执行该指令时,必定会在当前时钟周期之后的一个时钟周期内与第一指令发生寄存器访问时序的冲突,导致指令的执行结果错误。

可选的,考虑到必须通过数据端口才能向寄存写回数据,因此当在目标时钟周期不存在空闲的数据端口时,在执行第二指令的过程中仍无法实现向所访问的寄存器写回数据。因此,可以在确定在所述目标时钟周期内执行第一指令所访问的寄存器的第一标识信息与执行第二指令所访问的寄存器的第二标识信息是否相同之前,先确定是否有空闲的数据端口供第二指令使用。其中,第一访问信息还包括多个数据端口中的每个数据端口在每个时钟周期内的端口状态信息。于是,可以首先根据端口状态信息,确定每个数据端口在目标时钟周期内的使用状态,当多个数据端口中至少有一个数据端口处于空闲状态时,再进行第一标识信息和第二标识信息的比较。

结合表1,可以将上述确定执行第一指令向寄存器rw写入数据与执行第二指令向寄存器rw写入数据的时序关系的过程可以用(1)式所示的逻辑表达式来表示。当ww_conf=1时,确定时序关系为时间冲突。当ww_conf=0时确定时序关系正常。

其中,“&”表示逻辑“与”运算,“|”表示逻辑“或”运算,“==”表示判断该表达式两边的数是否相等,“f[n][validx]”和“f[n][rselx]”表示表1中f[n]所在行的validx和rselx,n=0,1,…,6,x=0,1。

例如:通过译码得到第二指令当前时钟周期之后的2个时钟周期需要向寄存器10写回数据,则将表1中f[2]所在行的相关信息代入(1)式中,计算得到ww_conf=0,从而表示该第二指令与f[0]、f[1]、…、f[6]均不存在寄存器写回操作上的冲突,即时序关系正常。

可选的,当确定执行第一指令访问寄存器与执行第二指令访问寄存器的时序关系为时间冲突时,处理器可以延迟执行第二指令,其中,可以在当前时钟周期通过硬件机制将第二指令卡住、使其停留在dec阶段。

可选的,为了提高数据端口的利用率,当确定时序关系不为时间冲突时,可以根据目标时钟周期内的端口信息,选择处于空闲状态的数据端口对执行第二指令所访问的寄存器进行写入,达到快速抢占空闲端口的目的。

例如:通过译码得到第二指令当前时钟周期之后的2个时钟周期需要向寄存器10写回数据,根据表1可知此时wp1处于空闲状态,则第二指令可以抢占该端口,将f[2][valid1]赋值为1。

可选的,在每个时钟周期结束后,可以根据在该时钟周期内确定的时序关系和第二访问信息对第一访问信息进行更新。例如:当前时钟周期为t0,t0的下一个时钟周期为t1,则在t0结束、t1到来时,则可以在t1内根据t0内确定的时序关系和第二访问信息,更新第一访问信息。

以下将结合表1来对更新第一访问信息的目的和原因进行说明:(1)若在当前时钟周期确定时序关系为时间冲突,则需要在当前时钟周期之后的时钟周期继续进行时序关系的检测,直到时间冲突解除就将第二指令发往rf阶段。因此在当前时钟周期结束后,需要对表1进行更新。此外,在当前时钟周期指令2会对空闲数据端口进行抢占也是表1需要更新的原因。(2)若在当前时钟周期确定时序关系不为时间冲突,也就是说第二指令不需要延迟执行。但是在当前时钟周期结束、下一个时钟周期到来时,处理器又会接收新的待执行指令。为了对新的待执行指令进行时间冲突的检测,需要在表1中增加第二指令的第二访问信息中对应的信息,并且当前时钟周期的结束也是表1需要更新的原因。

其中,第一访问信息的更新(表1的更新)包括以下3种情况:

第一种情况:若dec译码之后,确定第二指令不需要向寄存器写回数据,则无论时序关系是否为时间冲突,都按以下规则更新:

a)f[m]=f[m+1],m=0,1,2,3,4,5

b)f[m]=0,m=6

第二种情况:若dec译码之后,确定第二指令需要在n个时钟周期之后向寄存器rw写回数据、且时序关系为时间冲突,则按以下规则更新:

a)f[m]=f[m+1],m=0,1,2,3,4,5

b)f[m]=0,m=6

第三种情况:若dec译码之后,确定第二指令需要在n个时钟周期之后向寄存器rw写回数据、且时序关系正常,则按以下规则更新:

1)若f[n][valid0]==1,则

a)f[m][valid1]=1,f[m][rsel1]=rw,m=n-1

b)f[m]=f[m+1],m!=n-1

c)f[m]=0,m!=n-1,m!=6

2)若f[n][valid0]==0,则

a)f[m][valid0]=1,f[m][rsel0]=rw,m=n-1

b)f[m]=f[m+1],m!=n-1

c)f[m]=0,m!=n-1,m!=6

在本申请实施例中,获取在多个时钟周期中的每个时钟周期内执行第一指令访问寄存器的第一访问信息,所述第一指令为已确定在所述每个时钟周期到来时开始生效的指令;当接收到第二指令时,确定执行所述第二指令访问寄存器的第二访问信息;然后根据第二访问信息中包括的执行第二指令向寄存器写入的数据的目标时钟周期;最后将第一访问信息中包括的在目标每个时钟周期内执行第一指令时所需写入的寄存器的第一标识信息、与第二访问信息中包括的在目标每个时钟周期内执行第二指令时所需写入的寄存器的第二标识信息,当第一标识信息与第二标识信息相同时,表示第一指令和第二指令需要在同一时钟周期向同一个寄存器写入数据,造成时间冲突。若存在时间冲突,则通过硬件机制将敌人指令卡住不发往rf阶段,直到时间冲突解除。综上所述,本申请实施例中的方法通过实时维护一个硬件信息表,来保存每个时钟周期内的各个数据端口的状态信息和寄存器的访问信息,可以在dec译码阶段实现冲突检测,实现逻辑简单、硬件设计复杂度低、且所需功耗小。此外还可以通过获取到的寄存器访问信息快速抢占空闲数据端口,提高数据端口的利用率。

请参考图3,图3是本申请实施例提供的另一种寄存器访问时序的管理方法的流程示意图。本申请实施例针对一条指令在某个时钟周期需要从寄存器r中读取另一条指令的运算结果,但该运算结果在该时钟周期到来之前还未被写回寄存器r的情况,执行主体为处理器。如图所示,本申请实施例中的方法包括:

s301,获取在当前时钟周期和当前时钟周之后至少一个时钟周期中每个时钟周期内执行第一指令访问寄存器的第一访问信息。其中,所述第一指令为已确定在每个时钟周期到来时开始生效的指令。

具体实现中,时钟周期是处理器中的基本时间单位,一个时钟周期的时间长度等于处理器主频的倒数。首先可以在当前时钟周期中,确定当前时钟周期以及当前时钟周期之后的至少一个时钟周期内将要执行的指令,其中,在每个时钟周期到来时开始生效的指令就是在该时钟周期内所要执行的指令,并且在每个时钟周期到来时开始生效的指令可以有一个或多个。其中,可以根据指令在dec译码阶段的译码结果,确定该指令开始生效的时钟周期,从而确定在每个时钟周期内生效的指令。译码结果中还包括在执行该指令过程中访问寄存器的访问信息。针对每个时钟周期,访问信息可以包括执行在该时钟周期内生效的指令所要访问的寄存器的标识信息。其中,本申请实施例中主要关注在每个时钟周期内执行对应的生效指令时需向其中写入数据的寄存器。

s302,当接收到第二指令时,确定执行第二指令时访问寄存器的第二标识信息。

具体实现中,处理器在执行已经确定了执行顺序和执行时间的指令的同时,还可以继续接收应用程序或系统输入的新的待执行指令。通常,会立即对该指令进行dec译码以得到执行该指令访问寄存器的第二访问信息,不存在延迟的情况,因此第二指令译码发生在当前时钟周期。其中,该第二访问信息可以包括在执行第二指令的过程中需要从其中读取数据的寄存器的标识信息。

s303,根据第二访问信息,确定在当前时钟周期的下一个时钟周期执行第二指令所访问的寄存器的第二标识信息。

具体实现中,在当前时钟周期第二指令处于dec阶段,若按照正常的流水线技术执行第二指令时,第二指令应当在当前时钟周期的下一个时钟周期进入rf阶段,并在rf阶段读取该指令的操作数。例如;针对指令a=x+y,x和y为该指令的操作数。其中,第二访问信息中包括在rf阶段第二指令所需读取的寄存器的第二标识信息。

s304,确定在至少一个时钟周期中的每个时钟周期内执行第一指令所访问的寄存器的第一标识信息与执行第二指令所访问的寄存器的第二标识信息是否相同。若是,则执行s305。若否,则确定执行第一指令访问寄存器与执行第二指令访问寄存器之间的时序关系正常。

具体实现中,考虑到在当前时钟周期内第二指令处于dec阶段、且对于所有指令来说在dec阶段不存在针对寄存器的读取操作,因此在当前时钟周期内存在的针对任何寄存器的写入操作都不会与第二指令在下一个时钟周期内的寄存器读取操作产生时间冲突。从而可以将在当前时钟周期之后的至少一个时钟周期内执行第一指令所需写入的寄存器的第一标识信息与执行第二指令所读取的寄存器的第二标识信息进行比较。其中,若第二标识信息与当前时钟周期之后的至少一个时钟周期中的每个时钟周期中的第一标识信息都不相同时,则说明在下一个时钟周期之前第二指令所需读取的数据已被写入寄存器,第二指令在下一个时钟周期进入rf阶段后,可以从对应的寄存器中读取到正确的操作数。

可选的,当某个时钟周期内不存在针对寄存器的写回操作时,表示该时钟周期内的第一指令与第二指令所需的操作数无关。因此,为了提高冲突检测效率,可以首先根据第一访问信息中的端口状态信息,确定每个数据端口在至少一个时钟周期中的每个时钟周期内的使用状态;接着将至少一个时钟周期中多个数据端口中的至少一个数据端口处于占用状态的时钟周期作为目标时钟周期;然后确定在目标时钟周期内执行第一指令所访问的寄存器的第一标识信息与执行第二指令所访问的寄存器的第二标识信息是否相同。

例如:如表1所示,在f[3]、f[5]和f[6]对应的时钟周期中,wp0和wp1都处于空闲状态,则只需确定f[1]、f[2]和f[4]中对应valid为1的寄存器的标识信息与第二指令所要读取的寄存器的标识信息是否相同即可。

s305,确定执行第一指令访问寄存器与执行第二指令访问寄存器之间的时序关系为时间冲突。

具体实现中,当第二标识信息与所述至少一个时钟周期中的一个或一个以上时钟周期对应的第一标识信息相同时,说明在下一个时钟周期之前第二指令所需读取的数据还未被写入对应寄存器。若第二指令可以在下一个时钟周期进入rf阶段,则从对应寄存器中读取的操作数不是正确的操作数,从而导致第二指令的执行结果错误。因此,可以在当前时钟周期通过硬件机制将第二指令卡住,以便延迟将第二指令发往rf阶段的时间,直到冲突解除。

结合表1,可以将上述执行第一指令向寄存器写入数据与执行第二指令从寄存器中读取数据的时序关系的检测过程可以用(2)-(4)式所示的逻辑表达式来表示。其中,假设执行第一指令所需写入的寄存器为rw,执行第二指令所需读取的寄存器为rx和ry。当rw_conf=1时,确定时序关系为时间冲突。当rw_conf=0时确定时序关系正常。

rw_conf=rw_conf0|rw_conf1(4)

例如:通过译码得到第二指令当前时钟周期需要从寄存器7和寄存器10中读取操作数。则将表1中f[1]、f[2]、…、f[6]的相关信息分别代入(2)式和(3)式中,计算得到rw_conf0=0、rw_conf1=1,从而得到rw_conf=1,表示若第二指令在下一个时钟周期进入rf阶段,则f[2]还未将正确的操作数写入寄存器7,因此,第二指令在下一个时钟周期从寄存器7中读取的操作数是错误操作数。

其中,若在dec阶段也存在针对寄存器的读取操作,则在(2)式和(3)式中增加f[0]的相关信息即可。

可选的,在每个时钟周期结束后,需要根据在该时钟周期内确定的时序关系和第二访问信息对第一访问信息进行更新。例如:当前时钟周期为t0,t0的下一个时钟周期为t1,则在t0结束、t1到来时,则可以在t1内根据t0内确定的时序关系和第二访问信息,更新第一访问信息。

在本申请实施例中,获取在多个时钟周期中的每个时钟周期内执行第一指令时向其中写入数据的寄存器的第一标识信息,所述第一指令为已确定在所述每个时钟周期到来时开始生效的指令;当接收到第二指令时,确定执行所述第二指令时从其中读取数据的寄存器的第二标识信息;然后确定第二标识信息与当前时钟周期之后的至少一个时钟周期中的每个时钟周期对应的第一标识信息是否相同,当第二标识信息与一个或多个时钟周期对应的第一标识相同时,表示若第二指令可以在当前时钟周期的下一个时钟周期进入rf阶段,则从对应寄存器中读取的操作数不是正确的操作数误,即寄存器的读写操作存在时间冲突。则在当前时钟周期通过硬件机制将第二指令卡住不发往rf阶段,直到时间冲突解除。综上所述,本申请实施例中的方法通过实时维护一个硬件信息表,来保存每个时钟周期内的各个数据端口的状态信息和寄存器的访问信息,可以在dec译码阶段实现冲突检测,实现逻辑简单、硬件设计复杂度低、且所需功耗小。

请参考图4,图4是本申请实施例提供的一种处理器的结构示意图。如图所示,本申请实施例中的处理器包括:

获取模块401,用于获取在多个时钟周期中的每个时钟周期内执行第一指令访问寄存器的第一访问信息。其中,所述第一指令为已确定在所述每个时钟周期到来时开始生效的指令。

具体实现中,时钟周期是处理器中的基本时间单位,一个时钟周期的时间长度等于处理器主频的倒数。首先可以在当前时钟周期中,确定当前时钟周期以及当前时钟周期之后的至少一个时钟周期内将要执行的指令,其中,在每个时钟周期到来时开始生效的指令就是在该时钟周期内所要执行的指令,并且在每个时钟周期到来时开始生效的指令可以有一个或多个。其中,根据指令在dec译码阶段的译码结果,确定该指令开始生效的时钟周期,从而确定在每个时钟周期内生效的指令,并且译码结果中还包括在执行该指令过程中访问寄存器的访问信息。针对每个时钟周期,访问信息可以包括执行在该时钟周期内生效的指令所要访问的寄存器的标识信息、以及访问该寄存器所使用的数据端口。其中,本申请实施例中主要关注在每个时钟周期内执行生效指令时需向其中写入数据的寄存器。

译码模块402,用于当接收到第二指令时,确定执行所述第二指令访问寄存器的第二访问信息。

具体实现中,处理器在执行已经确定了执行顺序和时钟周期的指令的同时,还可以继续接收应用程序或系统输入的新的待执行指令。通常,当在当前时钟周期接收到新的待执行指令时,会立即对该指令进行dec译码以得到执行该指令访问寄存器的第二访问信息,不存在延迟的情况,因此第二指令译码发生在当前时钟周期。其中,第二访问信息可以包括在执行第二指令的过程中需要向其中写入数据的寄存器的标识信息,以及该写入操作发生的时间信息(如n个时钟周期后)。第二访问信息还可以包括在执行第二指令的过程中需要从其中读取数据的寄存器的标识信息

检测模块403,用于根据所述第一访问信息和所述第二访问信息,确定执行所述第一指令访问寄存器与执行所述第二指令访问寄存器的时序关系。

具体实现中,第一访问信息包括在每个时钟周期内执行第一指令所访问的寄存器的第一标识信息,其中,该寄存器为在执行第一指令过程中向其中写入数据的寄存器。第二访问信息包括执行第二指令所访问的寄存器的第二标识信息、以及执行第二指令访问寄存器的时间信息,其中,该寄存器也为在执行第二指令过程中向其中写入数据的寄存器。

因此,可以首先根据第二访问信息中的时间信息,确定多个时钟周期中的目标时钟周期,其中,该目标时钟周期为执行第二指令访问寄存器的时钟周期,例如:时间信息为3个时钟周期后,则以当前时钟周期为参考,可以确定目标时钟周期为当前时钟周期之后的第3个时钟周期。接着确定在目标时钟周期内执行第一指令所访问的寄存器的第一标识信息与执行第二指令所访问的寄存器的第二标识信息是否相同,当在目标时钟周期内的第一标识和第二标识信息相同时,表示在目标时钟周期内第一指令和第二指令向同一寄存器写回数据,从而确定执行第一指令访问寄存器与执行第二指令访问寄存器的时序关系为时间冲突。也就是说,若第二指令在当前时钟周期完成译码后,按照正常的流水线顺序执行该指令时,必定会在当前时钟周期之后的一个时钟周期内与第一指令发生寄存器访问时序的冲突,导致指令的执行结果错误。

可选的,考虑到必须通过数据端口才能向寄存写回数据,因此当在目标时钟周期不存在空闲的数据端口时,在执行第二指令的过程中仍无法实现向所访问的寄存器写回数据。因此,可以在确定在所述目标时钟周期内执行第一指令所访问的寄存器的第一标识信息与执行第二指令所访问的寄存器的第二标识信息是否相同之前,可以先确定是否有空闲的数据端口供第二指令使用。其中,第一访问信息还包括多个数据端口中的每个数据端口在每个时钟周期内的端口状态信息。于是,可以首先根据端口状态信息,确定每个数据端口在目标时钟周期内的使用状态,当多个数据端口中至少有一个数据端口处于空闲状态时,再进行第一标识信息和第二标识信息的比较。

可选的,当确定执行第一指令访问寄存器与执行第二指令访问寄存器的时序关系为时间冲突时,处理器可以延迟执行第二指令,其中,可以在当前时钟周期通过硬件机制将第二指令卡住、使其停留在dec阶段。

可选的,为了提高数据端口的利用率,可以当确定时序关系不为时间冲突时,则可以根据目标时钟周期内的端口信息,选择处于空闲状态的数据端口对执行第二指令所访问的寄存器进行写入,达到快速抢占空闲端口的目的。

可选的,在每个时钟周期结束后,可以根据在该时钟周期内确定的时序关系和第二访问信息对第一访问信息进行更新。例如:当前时钟周期为t0,t0的下一个时钟周期为t1,则在t0结束、t1到来时,则可以在t1内根据t0内确定的时序关系和第二访问信息,更新第一访问信息。

此外,在当前时钟周期第二指令处于dec阶段,若按照正常的流水线技术执行第二指令时,第二指令应当在当前时钟周期的下一个时钟周期进入rf阶段,并在rf阶段读取该指令的操作数。例如;针对指令a=x+y,x和y为该指令的操作数。其中,第二访问信息中包括在rf阶段第二指令所需读取的寄存器的第二标识信息。因此检测模块403还用于:

首先,确定在至少一个时钟周期中的每个时钟周期内执行第一指令所访问的寄存器的第一标识信息与执行第二指令所访问的寄存器的第二标识信息是否相同。具体的,考虑到在当前时钟周期内第二指令处于dec阶段、且对于所有指令来说在dec阶段不存在针对寄存器的读取操作,因此在当前时钟周期内存在的针对任何寄存器的写入操作都不会与第二指令在下一个时钟周期内的寄存器读取操作产生时间冲突。从而可以将在当前时钟周期之后的至少一个时钟周期内执行第一指令所需写入的寄存器的第一标识信息与执行第二指令所读取的寄存器的第二标识信息进行比较。其中,若第二标识信息与当前时钟周期之后的至少一个时钟周期中的每个时钟周期中的第一标识信息都不相同时,则说明在下一个时钟周期之前第二指令所需读取的数据已被写入寄存器,第二指令可以在下一个时钟周期进入rf阶段后,可以从对应的寄存器中读取到正确的操作数。

可选的,当某个时钟周期内不存在针对寄存器的写回操作时,表示该时钟周期内的第一指令与第二指令所需的操作数无关。因此,为了提高冲突检测效率,可以首先根据第一访问信息中的端口状态信息,确定每个数据端口在至少一个时钟周期中的每个时钟周期内的使用状态;接着将至少一个时钟周期中多个数据端口中的至少一个数据端口处于占用状态的时钟周期作为目标时钟周期;然后确定在目标时钟周期内执行第一指令所访问的寄存器的第一标识信息与执行第二指令所访问的寄存器的第二标识信息是否相同。

当第二标识信息与所述至少一个时钟周期中的一个或一个以上时钟周期对应的第一标识信息相同时,说明在下一个时钟周期之前第二指令所需读取的数据还未被写入对应寄存器。若第二指令可以在下一个时钟周期进入rf阶段,则从对应寄存器中读取的操作数不是正确的操作数,从而导致第二指令的置信结果错误。因此,可以在当前时钟周期通过硬件机制将第二指令卡住,以便延迟将第二指令发往rf阶段的时间,直到冲突解除。

结合表1,可以将上述执行第一指令向寄存器写入数据与执行第二指令从寄存器中读取数据的时序关系的过程可以用(2)-(4)式所示的逻辑表达式来表示。其中,假设执行第一指令所需写入的寄存器为rw,执行第二指令所需读取的寄存器为rx和ry。当rw_conf=1时,确定时序关系为时间冲突。当rw_conf=0时确定时序关系正常。其中,若在dec阶段存在针对寄存器的读取操作,则在(2)式和(3)式中增加f[0]的相关信息即可。

在本申请实施例中,首先获取在多个时钟周期中的每个时钟周期内执行第一指令访问寄存器的第一访问信息,所述第一指令为已确定在所述每个时钟周期到来时开始生效的指令;接着当接收到第二指令时,确定执行所述第二指令访问寄存器的第二访问信息;然后根据所述第一访问信息和所述第二访问信息,确定执行所述第一指令访问寄存器与执行所述第二指令访问寄存器之间的时序关系。可以降低处理器硬件设计的复杂度、提高寄存器的资源利用率。

请参考图5,图5是本申请实施例提供的一种电子设备的结构示意图。如图所示,该电子设备可以包括:至少一个处理器501,例如cpu,至少一个通信接口502,至少一个存储器503,至少一个总线504。其中,总线504用于实现这些组件之间的连接通信。其中,本申请实施例中电子设备的通信接口502是有线发送端口,也可以为无线设备,例如包括天线装置,用于与其他节点设备进行信令或数据的通信。存储器503可以是高速ram存储器,也可以是非不稳定的存储器(non-volatilememory),例如至少一个磁盘存储器。存储器503可选的还可以是至少一个位于远离前述处理器501的存储装置。存储器503中存储一组程序代码,且处理器501用于调用存储器中存储的程序代码,用于执行以下操作:

获取在多个时钟周期中的每个时钟周期内执行第一指令访问寄存器的第一访问信息,所述第一指令为已确定在所述每个时钟周期到来时开始生效的指令;

当接收到第二指令时,确定执行所述第二指令访问寄存器的第二访问信息;

根据所述第一访问信息和所述第二访问信息,确定执行所述第一指令访问寄存器与执行所述第二指令访问寄存器之间的时序关系。

其中,处理器501还用于执行如下操作步骤:

当所述时序关系为时间冲突时,延迟执行所述第二指令。

其中,述第一访问信息包括在每个时钟周期内执行第一指令所访问的寄存器的第一标识信息;所述第二访问信息包括执行所述第二指令所访问的寄存器的第二标识信息、以及执行所述第二指令访问寄存器的时间信息;

处理器501还用于执行如下操作步骤:

根据所述时间信息,确定所述多个时钟周期中的目标时钟周期,所述目标时钟周期为执行所述第二指令访问寄存器的时钟周期;

确定在所述目标时钟周期内执行所述第一指令所访问的寄存器的第一标识信息与执行所述第二指令所访问的寄存器的第二标识信息是否相同;

当所述第一标识信息与所述第二标识信息相同时,确定所述时序关系为时间冲突。

其中,所述第一访问信息还包括多个数据端口中的每个数据端口在所述每个时钟周期内的端口状态信息,所述每个数据端口用于对寄存器进行访问;

处理器501还用于执行如下操作步骤:

根据所述端口状态信息,确定所述每个数据端口在所述目标时钟周期内的使用状态;

当所述多个数据端口中的至少一个数据端口所述目标时钟周期内处于空闲状态时,执行所述确定在所述目标时钟周期内执行所述第一指令所访问的寄存器的第一标识信息与执行所述第二指令所访问的寄存器的第二标识信息是否相同的操作。

其中,处理器501还用于执行如下操作步骤:

当所述时序关系不为所述时间冲突时,根据所述端口状态信息,选择处于所述空闲状态的数据端口对执行所述第二指令所访问的寄存器进行写入。

其中,所述第一访问信息包括在所述每个时钟周期内的执行所述第一指令所访问的寄存器的第一标识信息;

所述多个时钟周期包括当前时钟周期和所述当前时钟周期之后的至少一个时钟周期,所述当前时钟周期为译码所述第二指令所发生的时钟周期;

处理器501还用于执行如下操作步骤:

根据所述第二访问信息,确定在所述当前时钟周期的下一个时钟周期执行所述第二指令所访问的寄存器的第二标识信息;

确定在所述至少一个时钟周期中的每个时钟周期内执行所述第一指令所访问的寄存器的第一标识信息与执行所述第二指令所访问的寄存器的第二标识信息是否相同;

当所述第一标识信息与所述第二标识信息相同时,确定所述时序关系为时间冲突。

其中,所述第一访问信息还包括多个数据端口中的每个数据端口在所述每个时钟周期内的端口状态信息,所述每个数据端口用于对寄存器进行访问;

处理器501还用于执行如下操作步骤:

根据所述端口状态信息,确定所述每个数据端口在所述至少一个时钟周期中的每个时钟周期内的使用状态;

将所述至少一个时钟周期中所述多个数据端口中的至少一个数据端口处于占用状态的时钟周期作为目标时钟周期;

确定在所述目标时钟周期内执行所述第一指令所访问的寄存器的第一标识信息与执行所述第二指令所访问的寄存器的第二标识信息是否相同。

其中,处理器501还用于执行如下操作步骤:

在所述每个时钟周期结束后,根据所述第二访问信息和所述时序关系更新所述第一访问信息。

需要说明的是,本申请实施例同时也提供了一种存储介质,该存储介质用于存储应用程序,该应用程序用于在运行时执行图2和图3所示的一种寄存器访问时序的管理方法中电子设备执行的操作。

需要说明的是,本申请实施例同时也提供了一种应用程序,该应用程序用于在运行时执行图2和图3所示的一种寄存器访问时序的管理方法中电子设备执行的操作。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solidstatedisk(ssd))等。以上所述的具体实施方式,对本申请的目的、技术方案和有益效果进行了进一步详细说明。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

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