CN101894013B - 处理器内指令级流水线控制方法及其系统 - Google Patents

处理器内指令级流水线控制方法及其系统 Download PDF

Info

Publication number
CN101894013B
CN101894013B CN 201010233616 CN201010233616A CN101894013B CN 101894013 B CN101894013 B CN 101894013B CN 201010233616 CN201010233616 CN 201010233616 CN 201010233616 A CN201010233616 A CN 201010233616A CN 101894013 B CN101894013 B CN 101894013B
Authority
CN
China
Prior art keywords
instruction
register
value
transmitting rank
write
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
CN 201010233616
Other languages
English (en)
Other versions
CN101894013A (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.)
Beijing Zhongke Ruixin Technology Group Co ltd
Original Assignee
Institute of Computing Technology of CAS
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 Institute of Computing Technology of CAS filed Critical Institute of Computing Technology of CAS
Priority to CN 201010233616 priority Critical patent/CN101894013B/zh
Publication of CN101894013A publication Critical patent/CN101894013A/zh
Application granted granted Critical
Publication of CN101894013B publication Critical patent/CN101894013B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

本发明涉及处理器内指令级流水线控制方法和系统,方法包括:步骤1,初始化发射序号寄存器和写回序号寄存器初始值相同;步骤2,发射指令时,以发射序号寄存器的值为基础值,按指令在本次发射中的顺序,生成指令的发射序号,并在指令中携带所述发射序号;步骤3,指令发射完成后,更新发射序号寄存器的值;步骤4,指令进入功能部件被执行时,指令的发射序号保持不变;步骤5,写回指令时,以写回序号寄存器的值为基础值,依据允许写回寄存器的指令的个数,依序生成写回序号,按写回序号由小到大顺序,将发射序号和写回序号相同的指令的结果写回寄存器;步骤6,指令写回完成后,更新写回序号寄存器的值。本发明能够减少对硬件资源的消耗。

Description

处理器内指令级流水线控制方法及其系统
技术领域
本发明涉及到处理器的指令按序发射和按序写回机制,涉及到基于指令发射序号的指令相关性的解决方法。
背景技术
在现代处理器设计中,处理器的性能提升主要通过提高处理器的主频来实现。然而,随着片上集成的晶体管的数量越来越多,功耗和散热问题变得更加严重。单纯提高主频的方法已经很难适应现在处理器的发展。在这种情况下,需要一种简单而有效的处理器流水线控制方法来提高指令的执行效率。也就是说,用较少的硬件资源实现指令的流水线控制,从而实现较高的指令吞吐率。
流水线技术是指把一条指令的执行分成若干个阶段,每个阶段完成指令的一部分功能。这样在多条指令同时执行的时候,多条指令的不同阶段可以同时执行。在实际中,指令和指令之间可能存在着数据依赖关系。比如,一条指令的源操作数是前面一条指令的目的操作数,这样就产生了写后读相关。流水线的控制方法必须能够检测到这样的相关关系,然后采用一定方法来保证指令发射和写回时程序的正确性。
流水线控制方法涉及到指令相关关系。处理器的硬件逻辑需要检测指令间的相关关系,并且采取某种办法来解除或避免这样的相关关系。指令相关包括数据相关、控制相关和结构相关。数据相关一般是指写后读(RAW,ReadAfter Write)相关,写后写(WAW,Write After Write)和读后写(WAR,Write After Read)相关。如果是按序发射的处理器,只存在RAW和WAW;如果是乱序发射的处理器还存在WAR的问题。如果存在指令相关,则相关的指令就不能被发射出去。现有技术中,解决数据相关有两类方法:软件方法和硬件方法。软件方法是编译器通过语义分析,尽可能不产生有相关的指令序列。编译器可以把一个循环体内部的指令,一次展开多次,并进行合适的调度,这样就可以消除指令间的数据相关和控制相关。超长指令字(VLIW,Very Long Instruction Word)也是依靠编译器来提高指令级并行性。在超长指令字处理器上,选择同时发射的多条指令和相关性分析都是由编译器完成的。因此,这可以大大简化硬件逻辑。同时发射的指令条数越多,处理器的性能就越高。
寄存器重命名也是解决相关的方法。由于编译器可以看到的寄存器的个数是由指令集所确定的,有时会出现逻辑寄存器不够用的情况,这时就会产生寄存器相关。这时可以增加物理寄存器堆的个数来解决相关问题。
硬件支持的动态指令调度是超标量处理器挖掘指令级并行的重要手段。IBM 360/91的浮点部件设计实现了本领域公知的Tomasulo算法,这为现代超标量处理器的设计打下了基础。该算法增加了3种新的机制:保留站、公共数据总线(CDB)和寄存器标签。它的工作机制如下:如果存在可用的保留站就把指令发射到保留站中,如果这时源操作数寄存器的值有效,就可以把指令分派到相应的功能部件。功能部件的结果总线把结果广播到公共数据总线,保留站中需要该数据的指令将数据从CDB上锁存到本地锁存器。保留站里每个操作数域有一个标签,如果标签为0,则表示操作数域是真实数据;如果标签不是0,则表示在等待其他已经分派出去的指令结果。
指令结果可以旁路到要发射的指令,以提前取得操作数的结果。因为多发射和乱序发射的原因,有些指令可以同时在结果总线产生结果,这时只有其中一部分指令可以写入寄存器堆。如果正要发射的指令恰巧需要这些不能马上写回的结果,就会造成发射级的停顿。因此,使用旁路可以使指令尽早发射。
现有技术中,每条指令的执行时间不完全相同,有的指令时间长,有的指令时间短。如果流水线前面的一条指令是一个长延迟指令,而后面一条指令是短延迟指令,这时为了保证每条指令的按序提交,每条指令都需要标出自己的整个流水线中的次序信息。如果不保证这个次序信息,则在后面短延迟的指令产生结果后,就提交结果,这样就不是按序提交了。
发明内容
为解决上述问题,本发明提供了处理器内指令级流水线控制方法及其系统,能够减少对硬件资源的消耗。
本发明公开了一种处理器内指令级流水线控制方法,包括:
步骤1,初始化发射序号寄存器和写回序号寄存器为相同初始值;
步骤2,在一个时钟周期内发射指令时,对于每条指令,以发射序号寄存器的值为基础值,按所述指令在本次发射中的顺序,生成指令的发射序号,并在所述指令中携带所述发射序号;
步骤3,在一个时钟周期的指令发射完成后,更新发射序号寄存器的值为发射的最后一个指令的发射序号加n,n为预设常量;
步骤4,指令进入功能部件被执行时,指令的发射序号保持不变;
步骤5,在一个时钟周期内写回指令时,以写回序号寄存器的值为基础值,依据允许写回寄存器的指令的个数,依序生成写回序号,按写回序号由小到大顺序,将发射序号和写回序号相同的指令的结果写回寄存器;
步骤6,在一个时钟周期的指令写回完成后,更新写回序号寄存器的值为写回的最后一个指令的发射序号加n,n为所述预设常量。
所述处理器为多发射处理器,
所述步骤2中以发射序号寄存器的值为基础值,按所述指令在本次发射中的顺序,生成指令的发射序号进一步为
步骤21,第一个将被发射的指令的发射序号为所述发射序号寄存器的值,第一个以后将被发射的指令的发射序号为前一个将被发射的指令的发射序号加1。
预设n的值为1,
所述步骤3中更新发射序号寄存器的值为发射的最后一个指令的发射序号加n进一步为,
步骤31,将发射序号寄存器的值加本次发射的指令的个数,获得加和,将发射序号寄存器的值更新为所述加和。
一个时钟周期中被写回的指令的个数为一个;
所述步骤5进一步为,
步骤41,确定本次的写回序号为写回序号寄存器的值,将发射序号和确定的写回序号相同的指令的结果写回寄存器。
所述处理器每个时钟周期允许多条指令写回;预设n的值为1;
所述步骤5中以写回序号寄存器的值为基础值,依据允许写回寄存器的指令的个数,依序生成写回序号进一步为,
步骤51,在一个时钟周期内写回指令时,确定第一条写回序号为所述写回序号寄存器的值,确定第一条以后的写回序号为前一条写回序号加1,直至确定的写回序号的个数为允许写回寄存器的指令的个数;
所述步骤6进一步为,
步骤52,在一个时钟周期的指令写回完成后,将写回序号寄存器的值加写回的指令的个数,获得加和,将写回序号寄存器的值更新为所述加和。
本发明还公开了一种处理器内指令级流水线控制系统,包括获取指令的指令模块,对指令译码的译码模块,将译码后指令发射的发射模块,执行发射的指令的功能部件,以及将执行结果写回的写回模块,
发射模块包括发射序号寄存器,写回模块包括写回序号寄存器,
发射序号寄存器和写回序号寄存器的初始值相同;
发射模块,还用于在一个时钟周期内发射指令时,对于每条指令,以发射序号寄存器的值为基础值,按所述指令在本次发射中的顺序,生成指令的发射序号,并在所述指令中携带所述发射序号;在一个时钟周期的指令发射完成后,更新发射序号寄存器的值为发射的最后一个指令的发射序号加n,n为预设常量;
功能部件,还用于在指令进入并被执行时,保存指令的发射序号不变;
写回模块,还用于在一个时钟周期内写回指令时,以写回序号寄存器的值为基础值,依据允许写回寄存器的指令的个数,依序生成写回序号,按写回序号由小到大顺序,将发射序号和写回序号相同的指令的结果写回寄存器;在一个时钟周期的指令写回完成后,更新写回序号寄存器的值为写回的最后一个指令的发射序号加n,n为所述预设常量。
所述处理器为多发射处理器,
所述发射模块在以发射序号寄存器的值为基础值,按所述指令在本次发射中的顺序,生成指令的发射序号时进一步用于
确定第一个将被发射的指令的发射序号为所述发射序号寄存器的值,第一个以后将被发射的指令的发射序号为前一个将被发射的指令的发射序号加1。
预设n的值为1,
所述发射模块在更新发射序号寄存器的值为发射的最后一个指令的发射序号加n时进一步用于
将发射序号寄存器的值加本次发射的指令的个数,获得加和,将发射序号寄存器的值更新为所述加和。
一个时钟周期中被写回的指令的个数为一个;
所述写回模块在进行结果写回时进一步用于
确定本次的写回序号为写回序号寄存器的值,将发射序号和确定的写回序号相同的指令的结果写回寄存器。
所述处理器每个时钟周期允许多条指令写回;预设n的值为1;
所述写回模块在以写回序号寄存器的值为基础值,依据允许写回寄存器的指令的个数,依序生成写回序号时进一步用于
在一个时钟周期内写回指令时,确定第一条写回序号为所述写回序号寄存器的值,确定第一条以后的写回序号为前一条写回序号加1,直至确定的写回序号的个数为允许写回寄存器的指令的个数;
所述所述写回模块在更新写回序号寄存器的值时进一步用于
在一个时钟周期的指令写回完成后,将写回序号寄存器的值加写回的指令的个数,获得加和,将写回序号寄存器的值更新为所述加和。
本发明的有益效果在于,为多发射的超标量的处理器提供了简洁的操作方法;现有技术中多发射反射处理器使用保留站和再定序缓冲来保持指令发射和写回的次序关系,保留站和再定序缓冲的实现复杂,消耗的硬件资源多,在片上的处理器数目越来越多的情况下,现有技术中的该实现方式不适用;本发明中采用指令发射序号寄存器和写回序号寄存器来保证次序关系;这种实现方法控制简单,硬件开销小,更适合片上大规模集成,可扩展性好。
附图说明
图1是实施例中处理器的流水线工作过程的示意图;
图2是实施例中处理器内部指令发射级和结果写回级的示意图;
图3是实施例中处理器内部的旁路逻辑示意图;
图4是实施例的寄存器堆的逻辑示意图。
图5是实施例中处理器按序写回方法的示意图。
图6是本发明处理器内指令级流水线控制方法的流程图。
具体实施方式
下面结合附图对本发明的方法做进一步的说明。
本发明的处理器内指令级流水线控制方法如图6所示。
步骤S100,初始化发射序号寄存器和写回序号寄存器为相同初始值。
步骤S200,在一个时钟周期内发射指令时,对于每条指令,以发射序号寄存器的值为基础值,按所述指令在本次发射中的顺序,生成指令的发射序号,并在所述指令中携带所述发射序号。
在现有技术的指令级流水线上,当一条指令的源操作数已经都准备好,并且功能部件有空闲时,则可以发射当前指令。本发明中这条指令在发射时携带上依据发射序号寄存器生成的发射序号,发射序号表明发射的顺序。
以发射序号寄存器的值为基础值表明以当前的发射序号寄存器的值为本次发射序号生成的基准。
步骤S300,在一个时钟周期的指令发射完成后,更新发射序号寄存器的值为发射的最后一个指令的发射序号加n,n为预设常量。
步骤S400,指令进入功能部件被执行时,指令的发射序号保持不变。
步骤S500,在一个时钟周期内写回指令时,以写回序号寄存器的值为基础值,依据允许写回寄存器的指令的个数,依序生成写回序号,按写回序号由小到大顺序,将发射序号和写回序号相同的指令的结果写回寄存器。
在现有技术的指令级流水线上,当指令在功能部件里执行完成后,从所有功能部件的结果总线上选择需要写回的指令。本发明中,如果结果总线上指令的发射序号等于在写回级依据写回序号寄存器的值生成的写回序号,则这条指令就是当前需要写回的指令。
因为按写回序号由小到大顺序,将发射序号和写回序号相同的指令的结果写回寄存器,所以在之前的执行结果没有生成的时候,即使按写回序号排在后面的执行结果已经生成,也需要等待之前的执行结果生成写回后才能够写回在后的执行结果。
步骤S600,在一个时钟周期的指令写回完成后,更新写回序号寄存器的值为写回的最后一个指令的发射序号加n,n为所述预设常量。
在一个具体实施方式中,处理器为多发射处理器。
所述步骤S200中以发射序号寄存器的值为基础值,按所述指令在本次发射中的顺序,生成指令的发射序号进一步如下所述。
步骤S210,第一个将被发射的指令的发射序号为所述发射序号寄存器的值,第一个以后将被发射的指令的发射序号为前一个将被发射的指令的发射序号加1。
处理器为多发射处理器表明每次发射两条以上的指令.
发射宽度为m,发射序号寄存器的值是x,则第一条将要发射的指令携带序号信息x,第二条将要发射的指令需携带序号信息x+1,第三条将要发射的指令需携带序号信息x+2。由此类推,最后一条将要发射的指令需携带序号信息x+m-1。
在一具体实施方式中,预设n的值为1。
步骤S300中更新发射序号寄存器的值为发射的最后一个指令的发射序号加n进一步为将发射序号寄存器的值加本次发射的指令的个数获得加和,将发射序号寄存器的值更新为所述加和。
在发射出一条指令后,发射序号寄存器需增加1。
如果该处理器是多发射处理器,每次发射两条以上的指令,每个时钟周期发射的指令数为m,则在指令发射后,发射序号寄存器的值增加m。
在一具体实施方式中,一个时钟周期中被写回的指令的个数为一个。
步骤S500进一步为确定本次的写回序号为写回序号寄存器的值,将发射序号和确定的写回序号相同的指令的结果写回寄存器。
在一具体实施方式中,处理器每个时钟周期允许多条指令写回,预设n的值为1。
步骤S500中以写回序号寄存器的值为基础值,依据允许写回寄存器的指令的个数,依序生成写回序号进一步为在一个时钟周期内写回指令时,确定第一条写回序号为所述写回序号寄存器的值,确定第一条以后的写回序号为前一条写回序号加1,直至确定的写回序号的个数为允许写回寄存器的指令的个数。
该处理器每个时钟周期允许多条指令写回,设允许m条指令写回寄存器,则在结果总线选择需要写回的指令时,按如下方法操作。
当前写回寄存器的值为y,则第一条可以写回的指令序号是y,第二条可以写回的指令序号是y+1,第三条是y+2,依此类推,最后一条可以写回的指令的序号是y+m-1。但此时并不能保证这m条指令都已经产生结果。已经有w条连续指令产生结果,并且他们的指令序号分别是y,y+1,y+2,...,y+w-1,这时可以在一个时钟周期内写回这w条指令。如果指令序号为y的指令还没有产生结果,但是后续的w-1条指令已经产生结果,此时,后续的w-1条指令必须等待指令序号为y的这条指令产生结果。
所述步骤S600进一步为在一个时钟周期的指令写回完成后,将写回序号寄存器的值加写回的指令的个数获得加和,将写回序号寄存器的值更新为所述加和。
该处理器是多发射处理器,当同时有w(w>1)条指令同时写回时,写回寄存器的值增加w。
本发明的一具体实施例如下所述。
实施例中处理器的流水线工作过程如图1所示。处理器的内部流水线分为5部分,分别是取指令101(IF,Instruction Fetch),指令译码102(ID,Instruction Decode),指令发射103(IS,Issue),指令执行104(EX,Execution)和结果写回105(WB,Write Back)。在现有技术中的流水线里每条指令都要经过5级,如果指令间不存在控制相关和数据相关,在指令流水线开始稳定后,每个时钟周期得到一个结果。对于现代超标量处理器,由于处理器的功能部件一般分为定点部件、浮点部件和访存部件,每个部件执行的执行周期也不一样。具体实施例中,某个处理器有3个执行的部件,如图1EX的第一行、第二行、第三行,每一行对应一个执行的部件,每个部件的执行周期分别是1个时钟周期,3个时钟周期和4个时钟周期。
如图1所示,如果一条指令已经发射出去了,对于定点指令在1个时钟周期后可以得到结果;对于浮点指令在第3个时钟周期后得到结果;对于访存指令在第4个时钟周期后得到结果。得到结果后会在下一个周期写回寄存器堆。
这里取指令101是一个流水级,指令译码102是一个流水级,指令发射103是一个流水级,指令执行104按照不同的功能部件,流水级的级数有所不同,结果写回105占一个流水级。
本发明在指令发射103流水级和结果写回105流水级使用指令序号的方法来使指令按序写回。指令序号包括发射序号和写回序号。
本实施例中使用一个按序双发射的处理器。
指令发射103流水级和结果写回105流水级的流程图2所示。其中,译码模块202在一个时钟周期内给发射模块203的发射队列送出两条指令。发射队列中如果有两个以上的空项,译码模块202的指令就可以进入发射队列,如果没有,则发射模块203向译码模块202送出发射队列满的信号。译码模块202收到队列满的信号,则在下一个时钟周期继续向发射队列送出两条指令。
处理器内部为通用寄存器和浮点寄存器设置一个寄存器状态表416。在这个寄存器状态表内,每个通用寄存器和浮点寄存器都有一个有效位。这个有效位为1时,则表明在该寄存器的值为可用;这个有效位为0时,则说明该寄存器的值不可用,图2中,当前正有一条目的寄存器号为该寄存器的指令已经发射到功能部件204,但是并没有写回寄存器。
本实施例中,当寄存器的值不在寄存器堆415的时候,为了加速指令的发射,使用旁路(forward)技术从功能部件204的结果总线得到最新值,再送往发射队列。如果通过旁路可以得到寄存器所需要的值,那么源操作数就准备好了。如果有某个操作数没有准备好,则该条指令不能发射。不能发射的指令就缓存在发射队列里,直到发射条件满足才可以发射。
发射模块203根据发射队头的两条指令的源寄存器号去查询寄存器状态表。如果所有源寄存器号的值都准备好或者通过旁路可以得到最新的值,并且功能部件204这时可以接受新的指令,则可以发射这两条指令。
当功能部件204里含有当前没有写回的指令结果的时候,功能部件204就有可能发生堵塞。这时,功能部件204就不能接收发射流水级送来的指令。
本实施例中,发射级的发射总线有两条,也就是说,每个时钟周期最多可以发射两条指令。而对于功能部件204,功能部件204一共分为8组,每组都完成一类指令。这8组功能部件204被划分成两大组,每个大组接受来自两条发射总线的指令。这里,每条指令的分组工作由译码模块202完成。分组信息分别由译码模块202产生后送给了发射模块203,发射模块203依靠分组信息将指令发送给相应的功能部件204大组。
发射模块203在发射指令时,需要维护一个发射序号寄存器,这个寄存器存储了指令在发射时的顺序信息。如果当前只能发射一条指令,则下一个时钟周期这个寄存器就加1;如果当前能发射两条指令,则在下一个时钟周期这个寄存器加2。
由于本实施例的该处理器结构是顺序多发射,只需要处理写后读(RAW,Read After Write)相关和写后写(WAW,Write After Write)相关。对于RAW相关的判断是:如果不能够得到有效寄存器的值,这里包括在寄存器状态表里对应表项的valid位无效和结果总线上对应的值无效。对于WAW相关的判断是:这里是指当寄存器状态表里对应表项的valid位无效。对于这两种相关,采取不发射相关指令的方法。
为了加速指令的执行,为每条结果总线都增加了旁路(forward)逻辑305,如图3。在图3中,每条要发射的指令都需要使用旁路逻辑去查询每条结果总线上是否有相应寄存器的值已经得到。如果9条结果总线上有1条结果总线上的值正好是需要的寄存器的值,那么表明旁路成功。如果没有1条结果总线上能找匹配的寄存器的值,那么旁路失败。每条指令一般有2-3个源寄存器,每个源寄存器都需要经过一个旁路逻辑去查询是否有需要的值在结果总线上。在图3中,src 301代表源寄存器号,resbus1-9302代表9条结果总线,fwd_valid 303表明旁路是否成功,fwd_value 304代表旁路得到的寄存器的值。
寄存器堆(regfile)一共有64项,每项是一个64位的寄存器。前32个用于定点寄存器,后32个用于浮点寄存器。由于有些指令的源寄存器号有3个,如同时发射两条含有3个源寄存器号的指令,则寄存器堆最多需要6个读端口。每个时钟周期发射两条指令,必然要求在写回流水级也能写回两条指令。这就要求寄存器堆写端口是2个。寄存器堆有6个读端口和2个写端口。
图4是寄存器堆415的示意图。其中在输入端有:clock 401为时钟信号,reset 402是复位信号,read1_addr1-3403是第1条要发射的指令的3个读地址信号,read2_addr1-3404是第2条要发射的指令的3个读地址信号。wr_addr1 405和wr_addr2 406是写回流水级的2个写地址信号。wr_en1 407和wr_en2 408是写回流水级的2个写使能信号。在输出端,read1_data1 409是第一条指令的第一个源操作数的值;read1_data2 410是第一条指令的第二个源操作数的值;read1_data3 411是第一条指令的第三个源操作数的值;read2_data1 412是第二条指令的第一个源操作数的值;read2_data2 413是第一条指令的第二个源操作数的值;read2_data3 414是第一条指令的第三个源操作数的值。
图5描述了一个顺序双发射处理器的按序写回机制。指令在发射模块203准备发射时,需要携带由发射序号寄存器(issue_id_reg)2031指明的发射序号。发射总线有2条,分别是issue_bus1 502和issue_bus2 503。在发射总线issue_bus1 502和issue_bus2 503里分别含有指令的序号id1和id2。功能部件204有9条结果总线,每条结果总线上都含有一个指令序号。写回模块205根据写回序号寄存器2051选择需要写回的2条结果总线。
实施例中,本发明的处理器内指令级流水线控制方法如下所述。
步骤S701,对所用的控制寄存器初始化。
在处理器发射级设置一个发射序号寄存器,这个寄存器用来记录当前将要发射的指令的序号。在处理器写回级设置一个写回序号寄存器,这个寄存器用来选择当前要写回的指令,其初始值与发射序号寄存器的值相同。这个两个寄存器的位宽设置为5位,即指令序号从0到31。这两个寄存器的位宽大小需要使当前功能部件流水线里的所有指令都具有唯一的指令编号。当指令序号为31时,如果再增加1,则变为0。
步骤S702,指令发射时,指令需携带发射序号进入功能部件。
当一条指令的源操作数已经都准备好,并且功能部件也有空闲,这时可以发射当前指令。假设当前的指令发射序号是0,下面的步骤也遵循此假设。被发发射的指令需要携带这个发射序号为0的信息,然后再进入功能部件。
步骤S703,该处理器是双发射的,每次最多发射两条指令。第一条指令的发射序号为0,第二条指令的发射序号为1。
步骤S704,发射指令,并更新发射序号寄存器。
如果当前时钟周期内只发射了一条指令,则发射序号寄存器增加1,其当前值就由0变为1。
如果当前时钟周期内发射了两条指令,则发射序号寄存器增加2,其当前值就由0变为2。
如果当前时钟周期只发射了一条指令,那么在功能部件流水级里的指令序号为1。如果发射了两条指令,那么在功能部件流水级里的指令序号为2。
步骤S704,当发射序号为0的指令执行完成的时候,功能部件需要根据写回寄存器的值来确定哪条指令是将要写回的指令。此时,写回寄存器的值为0。因此,发射序号为0的指令被选中为当前需要写回的指令。
如果发射序号为0和1的指令都已经得到了执行结果,那么在一个时钟周期内这两条指令都可以写回。如果发射序号为1的指令已经得到执行结果,但是此时发射序号为0的指令还没有得到执行结果,那么发射序号为1的指令也不能写回。
步骤S705,更新写回序号寄存器。
当只有一条指令写回时,写回序号寄存器的值需增加1。如果同时有两条指令能够写回,则写回序号寄存器的值增加2。
本发明处理器内指令级流水线控制系统,包括获取指令的指令模块,对指令译码的译码模块,将译码后指令发射的发射模块,执行发射的指令的功能部件,以及将执行结果写回的写回模块,发射模块包括发射序号寄存器,写回模块包括写回序号寄存器,
发射序号寄存器和写回序号寄存器的初始值相同;
发射模块,还用于在一个时钟周期内发射指令时,对于每条指令,以发射序号寄存器的值为基础值,按所述指令在本次发射中的顺序,生成指令的发射序号,并在所述指令中携带所述发射序号;在一个时钟周期的指令发射完成后,更新发射序号寄存器的值为发射的最后一个指令的发射序号加n,n为预设常量;
功能部件,还用于在指令进入并被执行时,保存指令的发射序号不变;
写回模块,还用于在一个时钟周期内写回指令时,以写回序号寄存器的值为基础值,依据允许写回寄存器的指令的个数,依序生成写回序号,按写回序号由小到大顺序,将发射序号和写回序号相同的指令的结果写回寄存器;在一个时钟周期的指令写回完成后,更新写回序号寄存器的值为写回的最后一个指令的发射序号加n,n为所述预设常量。
在一具体实施方式中,所述处理器为多发射处理器,
所述发射模块在以发射序号寄存器的值为基础值,按所述指令在本次发射中的顺序,生成指令的发射序号时进一步用于
确定第一个将被发射的指令的发射序号为所述发射序号寄存器的值,第一个以后将被发射的指令的发射序号为前一个将被发射的指令的发射序号加1。
在一具体实施方式中,预设n的值为1,
所述发射模块在更新发射序号寄存器的值为发射的最后一个指令的发射序号加n时进一步用于
将发射序号寄存器的值加本次发射的指令的个数,获得加和,将发射序号寄存器的值更新为所述加和。
在一具体实施方式中,一个时钟周期中被写回的指令的个数为一个;
所述写回模块在进行结果写回时进一步用于
确定本次的写回序号为写回序号寄存器的值,将发射序号和确定的写回序号相同的指令的结果写回寄存器。
在一具体实施方式中,所述处理器每个时钟周期允许多条指令写回;预设n的值为1;
所述写回模块在以写回序号寄存器的值为基础值,依据允许写回寄存器的指令的个数,依序生成写回序号时进一步用于
在一个时钟周期内写回指令时,确定第一条写回序号为所述写回序号寄存器的值,确定第一条以后的写回序号为前一条写回序号加1,直至确定的写回序号的个数为允许写回寄存器的指令的个数;
所述所述写回模块在更新写回序号寄存器的值时进一步用于
在一个时钟周期的指令写回完成后,将写回序号寄存器的值加写回的指令的个数,获得加和,将写回序号寄存器的值更新为所述加和。
本领域的技术人员在不脱离权利要求书确定的本发明的精神和范围的条件下,还可以对以上内容进行各种各样的修改。因此本发明的范围并不仅限于以上的说明,而是由权利要求书的范围来确定的。

Claims (8)

1.一种处理器内指令级流水线控制方法,其特征在于,包括:
步骤1,初始化发射序号寄存器和写回序号寄存器为相同初始值;
步骤2,在一个时钟周期内发射指令时,对于每条指令,以发射序号寄存器的值为基础值,按所述指令在本次发射中的顺序,生成指令的发射序号,并在所述指令中携带所述发射序号;
步骤3,在一个时钟周期的指令发射完成后,更新发射序号寄存器的值为发射的最后一个指令的发射序号加n,n为预设常量;
步骤4,指令进入功能部件被执行时,指令的发射序号保持不变;
步骤5,在一个时钟周期内写回指令时,以写回序号寄存器的值为基础值,依据允许写回寄存器堆的指令的个数,依序生成写回序号,按写回序号由小到大顺序,将发射序号和写回序号相同的指令的结果写回寄存器堆;
步骤6,在一个时钟周期的指令写回完成后,更新写回序号寄存器的值为写回的最后一个指令的发射序号加n,n为所述预设常量;
所述处理器每个时钟周期允许多条指令写回;预设n的值为1;
所述步骤5中以写回序号寄存器的值为基础值,依据允许写回寄存器堆的指令的个数,依序生成写回序号进一步为,
步骤51,在一个时钟周期内写回指令时,确定第一条写回序号为所述写回序号寄存器的值,确定第一条以后的写回序号为前一条写回序号加1,直至确定的写回序号的个数为允许写回寄存器堆的指令的个数;
所述步骤6进一步为,
步骤52,在一个时钟周期的指令写回完成后,将写回序号寄存器的值加写回的指令的个数,获得加和,将所述写回序号寄存器的值更新为所述加和。
2.如权利要求1所述的处理器内指令级流水线控制方法,其特征在于,
所述处理器为多发射处理器,
所述步骤2中以发射序号寄存器的值为基础值,按所述指令在本次发射中的顺序,生成指令的发射序号进一步为
步骤21,第一个将被发射的指令的发射序号为所述发射序号寄存器的值,第一个以后将被发射的指令的发射序号为前一个将被发射的指令的发射序号加1。
3.如权利要求1所述的处理器内指令级流水线控制方法,其特征在于,预设n的值为1,
所述步骤3中更新发射序号寄存器的值为发射的最后一个指令的发射序号加n进一步为,
步骤31,将发射序号寄存器的值加本次发射的指令的个数,获得加和,将发射序号寄存器的值更新为所述加和。
4.如权利要求1所述的处理器内指令级流水线控制方法,其特征在于,
一个时钟周期中被写回的指令的个数为一个;
所述步骤5进一步为,
步骤41,确定本次的写回序号为写回序号寄存器的值,将发射序号和确定的写回序号相同的指令的结果写回寄存器堆。
5.一种处理器内指令级流水线控制系统,包括获取指令的指令模块,对指令译码的译码模块,将译码后指令发射的发射模块,执行发射的指令的功能部件,以及将执行结果写回的写回模块,其特征在于,发射模块包括发射序号寄存器,写回模块包括写回序号寄存器,
发射序号寄存器和写回序号寄存器的初始值相同;
发射模块,还用于在一个时钟周期内发射指令时,对于每条指令,以发射序号寄存器的值为基础值,按所述指令在本次发射中的顺序,生成指令的发射序号,并在所述指令中携带所述发射序号;在一个时钟周期的指令发射完成后,更新发射序号寄存器的值为发射的最后一个指令的发射序号加n,n为预设常量;
功能部件,还用于在指令进入并被执行时,保存指令的发射序号不变;
写回模块,还用于在一个时钟周期内写回指令时,以写回序号寄存器的值为基础值,依据允许写回寄存器堆的指令的个数,依序生成写回序号,按写回序号由小到大顺序,将发射序号和写回序号相同的指令的结果写回寄存器堆;在一个时钟周期的指令写回完成后,更新写回序号寄存器的值为写回的最后一个指令的发射序号加n,n为所述预设常量;
所述处理器每个时钟周期允许多条指令写回;预设n的值为1;
所述写回模块在以写回序号寄存器的值为基础值,依据允许写回寄存器堆的指令的个数,依序生成写回序号时进一步用于
在一个时钟周期内写回指令时,确定第一条写回序号为所述写回序号寄存器的值,确定第一条以后的写回序号为前一条写回序号加1,直至确定的写回序号的个数为允许写回寄存器堆的指令的个数;
所述写回模块在更新写回序号寄存器的值时进一步用于
在一个时钟周期的指令写回完成后,将写回序号寄存器的值加写回的指令的个数,获得加和,将所述写回序号寄存器的值更新为所述加和。
6.如权利要求5所述的处理器内指令级流水线控制系统,其特征在于,
所述处理器为多发射处理器,
所述发射模块在以发射序号寄存器的值为基础值,按所述指令在本次发射中的顺序,生成指令的发射序号时进一步用于
确定第一个将被发射的指令的发射序号为所述发射序号寄存器的值,第一个以后将被发射的指令的发射序号为前一个将被发射的指令的发射序号加1。
7.如权利要求5所述的处理器内指令级流水线控制系统,其特征在于,
预设n的值为1,
所述发射模块在更新发射序号寄存器的值为发射的最后一个指令的发射序号加n时进一步用于
将发射序号寄存器的值加本次发射的指令的个数,获得加和,将发射序号寄存器的值更新为所述加和。
8.如权利要求5所述的处理器内指令级流水线控制系统,其特征在于,
一个时钟周期中被写回的指令的个数为一个;
所述写回模块在进行结果写回时进一步用于
确定本次的写回序号为写回序号寄存器的值,将发射序号和确定的写回序号相同的指令的结果写回寄存器堆。
CN 201010233616 2010-07-16 2010-07-16 处理器内指令级流水线控制方法及其系统 Active CN101894013B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 201010233616 CN101894013B (zh) 2010-07-16 2010-07-16 处理器内指令级流水线控制方法及其系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 201010233616 CN101894013B (zh) 2010-07-16 2010-07-16 处理器内指令级流水线控制方法及其系统

Publications (2)

Publication Number Publication Date
CN101894013A CN101894013A (zh) 2010-11-24
CN101894013B true CN101894013B (zh) 2013-07-31

Family

ID=43103214

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 201010233616 Active CN101894013B (zh) 2010-07-16 2010-07-16 处理器内指令级流水线控制方法及其系统

Country Status (1)

Country Link
CN (1) CN101894013B (zh)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102508635B (zh) * 2011-10-19 2014-10-08 中国科学院声学研究所 一种处理器装置及其循环处理方法
CN103207776B (zh) * 2013-03-11 2015-07-15 浙江大学 一种gene乱序发射处理器内核
CN104915183B (zh) * 2015-06-23 2018-10-16 北京玉华骢科技股份有限公司 一种多发射流水线的前馈探测电路
CN105354117B (zh) * 2015-10-26 2018-10-19 清华大学 超标量处理器中指令相关性检测的方法
CN105824603B (zh) * 2016-03-14 2018-07-31 西南交通大学 一种基于cisc指令集的流水线取指和译码方法
CN108182082A (zh) * 2017-12-06 2018-06-19 中国航空工业集团公司西安航空计算技术研究所 一种流水处理双发射处理器记分板电路
CN108334326A (zh) * 2018-02-06 2018-07-27 江苏华存电子科技有限公司 一种低延迟指令调度器的自动管理方法
CN111290786B (zh) * 2018-12-12 2022-05-06 展讯通信(上海)有限公司 一种信息处理方法、设备及存储介质
CN109933368B (zh) * 2019-03-12 2023-07-11 北京市合芯数字科技有限公司 一种指令的发射和验证方法及装置
CN111857830B (zh) * 2020-06-05 2023-09-22 上海赛昉科技有限公司 一种提前转发指令数据的通路设计方法、系统及存储介质
CN111913746B (zh) * 2020-08-31 2022-08-19 中国人民解放军国防科技大学 一种低开销嵌入式处理器设计方法
CN117472445A (zh) * 2023-12-26 2024-01-30 睿思芯科(深圳)技术有限公司 基于发射缓冲的超标量处理系统、方法及相关设备

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1308274A (zh) * 2000-02-08 2001-08-15 斯罗扬有限公司 在处理器中传送指令结果及处理器的编译方法
CN101211256A (zh) * 2006-12-29 2008-07-02 上海贝岭股份有限公司 一种专用双流水线risc指令系统及其操作方法
JP2008299729A (ja) * 2007-06-01 2008-12-11 Digital Electronics Corp プロセッサ

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1308274A (zh) * 2000-02-08 2001-08-15 斯罗扬有限公司 在处理器中传送指令结果及处理器的编译方法
CN101211256A (zh) * 2006-12-29 2008-07-02 上海贝岭股份有限公司 一种专用双流水线risc指令系统及其操作方法
JP2008299729A (ja) * 2007-06-01 2008-12-11 Digital Electronics Corp プロセッサ

Also Published As

Publication number Publication date
CN101894013A (zh) 2010-11-24

Similar Documents

Publication Publication Date Title
CN101894013B (zh) 处理器内指令级流水线控制方法及其系统
US10664275B2 (en) Speeding up younger store instruction execution after a sync instruction
US8904153B2 (en) Vector loads with multiple vector elements from a same cache line in a scattered load operation
US8069340B2 (en) Microprocessor with microarchitecture for efficiently executing read/modify/write memory operand instructions
US20120060016A1 (en) Vector Loads from Scattered Memory Locations
US20100325395A1 (en) Dependence prediction in a memory system
CN100461094C (zh) 一种针对流处理器的指令控制方法
US8145887B2 (en) Enhanced load lookahead prefetch in single threaded mode for a simultaneous multithreaded microprocessor
KR101541001B1 (ko) 아직 발행되지 않은 명령들에 대한 얼리 액세스를 가진 코프로세서를 구비한 프로세서
CN101281460B (zh) 处理多个线程的方法和设备
WO2017048651A1 (en) Broadcast channel architectures for block-based processors
WO2016210020A1 (en) Explicit instruction scheduler state information for a processor
CN102662634A (zh) 非阻塞发射和执行的存储器访问执行装置
JP2004171573A (ja) 新規な分割命令トランズアクションモデルを使用して構築したコプロセッサ拡張アーキテクチャ
JP2008226236A (ja) 構成可能なマイクロプロセッサ
JP2001209535A (ja) プロセッサの命令スケジューリング装置
CN104216681A (zh) 一种cpu指令处理方法和处理器
CN101371223B (zh) 运算数的提早有条件选择
US8037366B2 (en) Issuing instructions in-order in an out-of-order processor using false dependencies
CN116661870A (zh) 一种基于risc-v架构的高性能嵌入式处理器
JP4996945B2 (ja) データ処理装置、データ処理方法
EP3757772A1 (en) System, apparatus and method for a hybrid reservation station for a processor
CN114780149A (zh) 用于乱序超标量处理器的操作依赖性调度方法、部件及处理器
KR100861701B1 (ko) 레지스터 값의 유사성에 기반을 둔 레지스터 리네이밍시스템 및 방법
JP2001051845A (ja) アウトオブオーダー実行方式

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
TR01 Transfer of patent right

Effective date of registration: 20240103

Address after: 100095 room 135, 1st floor, building 15, Chuangke Town, Wenquan Town, Haidian District, Beijing

Patentee after: Beijing Zhongke Ruixin Technology Group Co.,Ltd.

Address before: 100080 No. 6 South Road, Zhongguancun Academy of Sciences, Beijing, Haidian District

Patentee before: Institute of Computing Technology, Chinese Academy of Sciences

TR01 Transfer of patent right