描述
图1是示出支持一系列多周期机器指令的可编程处理器2的方框图。处理器2包括执行流水线4和控制单元6。控制单元6按照系统时钟控制通过流水线的指令流和数据流。在处理指令期间,控制单元6能指导流水线的各种组件解码指令并正确地完成对应的操作,包括如将结果写回到存储器。
指令能加载到流水线4的第一阶段并经过后续的阶段处理。每一阶段通常与其他阶段同时处理。数据按照系统时钟信号在流水线的各阶段之间通过。指令的结果以快速的顺序出现在流水线4的终点。
如下详述,处理器2支持若干多周期指令。为响应多周期指令,停顿控制器8能通过确认停顿信号9停顿一个或多个流水线4的阶段,以防止流水线4取出或解码另外指令。在停顿一部分流水线4之后,多周期指令(MCI)控制器5能确认MCI信号7并指导流水线4完成由当前多周期指令确定的附加操作。
图2示出按本发明的示例性流水线4。例如,流水线4能具有5个阶段:指令取出(IF),指令解码(DEC),地址计算(AC),执行(EX),和写回(WB)。指令能在第一阶段(IF)由取指令单元11从如主存储器或指令缓存器那样的存储设备取出,并在第二阶段(DEC)由指令解码单元12解码。在下一时钟周期,结果经过第三阶段(AC),在那里数据地址生成器13计算任何存储器地址来完成该操作。
在执行阶段(EX),执行单元5完成指令的操作,如加或乘两个数。执行单元能包含用于完成操作的特定硬件,如一个或多个算术逻辑单元(ALU),浮点单元(FPU)和循环移位器。各种数据能应用于执行单元15,如由数据地址生成器13产生的地址,从存储器取出的数据或从数据寄存器14取出的数据。在最后阶段(WB),结果被写回到数据存储器或数据寄存器14。
多周期指令其表现如从流水线4的解码阶段产生的在若干时钟周期执行的多条指令。当MCI执行时,它在流水线的解码阶段保持停顿,而在MCI控制器5的控制下,向流水线4往下发送多个“子指令”。MCI控制器5按一系列内部状态机操作以便指导指令解码单元12在MCI执行期间分派若干操作在一系列时钟周期内完成。
停顿控制器8能通过确认停顿信号停顿流水线4的一个或多个周期,以防止流水线4取出和解码另外的指令。具体说来,流水线4的阶段包括如阶段寄存器19那样的存储线路,用于存储当前阶段的结果。阶段寄存器通常按照系统时钟锁存结果。阶段寄存器19接收停顿信号9,它控制阶段寄存器19是否所存从以前阶段得到的结果。以此方式,停顿控制器8能停顿流水线4的一个或多个阶段以响应多周期指令。
由处理器支持的多周期指令的例子包括Push Pop Multiple机器指令,Link指令和Unlink指令。Push Pop Multiple指令指导处理器2压入1到N个数据寄存器和/或指针寄存器,或从中弹出。Push Pop Multiple在等于要访问的寄存器目的时钟周期数中保持停顿在解码阶段。下面说明了压入多个机器指令的例子:
[--sp]=(r7-r4,p5-p0)
在此例中,单条机器指令指导处理器2压入4个数据寄存器(r4到r7)和6个指针寄存器(p0到p5)。通常,单条机器指令能指定零个或多个数据寄存器和零个或多个指针寄存器,只要指定至少一个寄存器即可。
图3示出在MCI控制器5内用于将多个寄存器压入堆栈的状态机的示例性状态图30。如下所述,MCI控制器5响应压入多个指令按照状态图30操作,以便压入一个或多个寄存器。在按状态30操作时,MCI控制器5能确认一个或多个MCI信号7,包括指导解码器12产生用于分派一个数据寄存器的压入操作的流水线控制信号的PUSH_DREG信号,和指导解码器12产生用于分派一个指针寄存器的压入操作流水线控制信号的PUSH_PREG信号。此外,MCI控制器5能确认D_REG_PRESELECT信号,它初始化一个计数器,其计数指出压入哪个数据寄存器;或能确认P_REG_PRESELECT信号,它初始化一个计数器,其计数指出压入哪个指针寄存器。MCI控制器5也可确认MCI_PRESTALL信号,它指导停顿控制器5在下个时钟周期停顿流水线4。
下面的表综合了引起在MCI控制器5中PUSH MULTIPLE状态机从一个状态向另一状态迁移的条件,以及被确认的相应输入信号,其中D是指出要压入的数据寄存器的指令位,P是指出要压入的指针寄存器的指令位,DR是指出要压入的起始数据寄存器的指令字段,PR是指出要压入的起始指针寄存器的指令字段,D_TAG表示被压入的当前数据寄存器,P_TAG表示被压入的当前指针寄存器,DMAX表示在可用的数据寄存器范围内最大的数据寄存器,PMAX表示在可用的指针寄存器范围内最大的指针寄存器:
路径 |
条件 |
输出 |
34A |
不压入多条指令 |
无 |
34B |
D&!P&DR=DMAX |
插入PUSH_DREG |
34C |
!D&P&PR=PMAX |
插入PUSH_PREG |
34D |
D&!P&DR=DMAX-1 |
插入PUSH_DREG插入D_REG_PRESELECT |
34E |
无 |
插入PUSH_DREG |
34F |
!D&P&PR=PMAX-1 |
插入PUSH_PREG插入P_REG_PRESELECT |
34F′ |
D&P&DR=DMAX&PR=PMAX |
插入PUSH_DREG |
34G |
无 |
插入PUSH_PREG |
34H |
D&!P&DR<DMAX-1 |
插入PUSH_DREG插入D_REG_PRESELECT插入MCI_PRESTALL |
34H′ |
D&P&DR<DMAX |
插入PUSH_DREG插入D_REG_PRESELECT插入MCI_PRESTALL |
34I |
((!P&D_TAG<DMAX-1) |
插入PUSH_DREG |
|
(P&D_TAG<DMAX)) |
插入D_REG_PRESELECT插入MCI_PRESTALL |
34J |
!D&P&PR<PMAX-1 |
插入PUSH_PREG插入P_REG_PRESELECT插入MCI_PRESTALL |
34J′ |
D&P&DR=DMAX&PR<PMAX |
插入PUSH_DREG插入D_REG_PRESELECT插入MCI_PRESTALL |
34K |
PR=PMAX-1 |
插入PUSH_PREG插入P_REG_PRESELECT |
34L |
P&D_TAG=DMAX&P_TAG<PMAX |
插入PUSH_DREG插入D_REG_PRESELECT插入MCI_PRESTALL |
34M |
P&D_TAG=DMAX&P_TAG=PMAX |
插入PUSH_DREG插入D_REG_PRESELECT |
34N |
P_TAG<PMAX-1 |
插入PUSH_PREG插入P_REG_PRESELECT插入MCI_PRESTALL |
34O |
D_TAG=DMAX-1&!P |
插入PUSH_DREG插入D_REG_PRESELECT |
表1
最初,MCI控制器5在WAIT状态开始,直到由取单元11取出指令并由解码单元12解码。若指令不是PUSH POP MULTIPLE指令,MCI控制器5如路径34A所示返回到WAIT状态。
若指令是PUSH POP MULTIPLE指令,但只命令处理器2压入单个数据寄存器,状态确认PUSH_DREG信号并经过路径34B返回到WAIT状态。若指令是PUSHPOP MULTIPLE,它命令处理器2压入单个指针寄存器,状态机确认PUSH_PREG信号并经过路径34C返回到WAIT状态。
若指令规定压入两个数据寄存器或两个指针寄存器,状态机分别改变状态到状态32A或状态32C。状态机经路径34D或34F迁移到这些状态,并在迁移到32A时确认PUSH_DREG信号,或在迁移到32C时确认PUSH_PREG信号。此外,在沿路径34D迁移时,状态机确认D_REG_PRESELECT信号,它初始化指出压入哪个数据寄存器的计数器。类似地,在沿路径34F迁移时,状态机确认P_REG_PRESELECT信号,它初始化指出压入哪个指针寄存器的计数器。
状态机从状态32A经路径34E返回到WAIT状态。在此迁移期间,MCI控制器5再次确认PUSH_DREG并不确认D_REG_PRESELECT,使得解码单元23分派另外数据寄存器的压入操作。类似地,状态机从状态32C经路径34G返回到WAIT状态。在此迁移其间,MCI控制器5确认PUSH_PREG并不确认P_REG_PRESELECT,引起执行单元15压入另外的指针寄存器。
对需要指令解码单元12分派三个或更多数据寄存器压入操作的PUSH POPMULTIPLE指令,状态机从WAIT状态经路径34H迁移到状态32B。在迁移其间,MCI控制器8确认PUSH_DREG信号并确认D_REG_PRESELECT,引起执行单元15压入第一数据寄存器。此外,MCI控制器5确认MCI_PRESTALL信号,引起停顿控制器8在下一时钟周期停顿流水线4的一个或多个阶段。例如,在一个实施例中,停顿控制器8确认STALL_DEC,停顿流水线4的解码阶段。一旦在状态32B中,MCI控制器5继续压入数据寄存器,直到两个寄存器保持要被压入。例如,若指令要求压入6个数据寄存器,MCI控制器5往复路径34I三次,每次压入一个数据寄存器,直到当前要被压入的数据寄存器等于最大可用的数据寄存器(DMAX)减一。即当两个数据寄存器保持要被压入为止。
在往复路径34I时,MCI控制器5确认PUSH_DREG信号,D_REG_PRESELECT信号和MCI_PRESTALL信号。当两个数据寄存器保持要被压入时,MCI控制器5经路径340迁移到状态32A,同时压入一个余下的数据寄存器。在此迁移期间,MCI控制器5不确认MCI_PRESTALL。在MCI控制器5往复路径34E并压入余下的数据寄存器之后的一个时钟周期,指令解码器12接收新的指令。
类似地,对需要指令解码单元12分派三个或多个指针寄存器压入操作的PUSH POP MULTIPLE指令,状态机从WAIT状态经路径34J迁移到状态32D。在迁移期间,MCI控制器确认PUSH_PREG信号并确认P_REG_PRESELECT,引起执行单元15压入第一指针寄存器。此外,MCI控制器5确认MCI_PRESTALL信号,引起停顿控制器8停顿流水线4的一个或多个阶段。在状态32D,MCI控制器5通过往复路径34N压入指针寄存器,直到两个指针寄存器保持要被压入。在往复路径34N时,MCI控制器5确认PUSH_DREG信号,D_REG_PRESELECT信号和MCI_PRESTALL信号。一旦两个数据寄存器保持被压入,MCI控制器5经路径34K迁移到状态32C,同时压入一个指针寄存器。在此迁移期间,MCI控制器5不确认MCI_PRESTALL。以此方式,流水线4在MCI控制器5经路径34G迁移到WAIT状态并压入余下的指针寄存器后的下一时钟周期上重新继续操作。
除了上述功能,PUSH POP MULTIPLE指令能指定多个数据寄存器和多个指针寄存器。通常,状态机30设计成首先压入数据寄存器,随后是指针寄存器,虽然本发明不限于此。
对于指定压入单个数据寄存器和单个指针寄存器的PUSH MULTIPLE指令,MCI控制器5经路径34F’迁移到状态32C,并确认PUSH_DREG信号以压入数据寄存器。接着,MCI控制器5经路径34G迁移回到WAIT状态并压入指针寄存器。
对指定压入一个数据寄存器和多个指针寄存器的PUSH MULTIPLE,MCI控制器5经路径34J’迁移到状态32D,并确认PUSH_DREG信号,D_REG_PRESELECT信号和MCI_PRESTALL信号以压入数据寄存器。接着,MCI控制器5通过往复路径34N压入除二个指针寄存器外的所有指针寄存器,通过往复路径34K压入一个指针寄存器并通过往复路径34G压入最后指针寄存器并返回WAIT状态。
最后,对指定压入多个数据寄存器及至少一个指针寄存器的PUSH POPMULTIPLE指令,MCI控制器5经路径34H’迁移到状态32B,并确认PUSH_DREG信号,D_REG_PRESELECT信号和MCI_PRESTALL信号以压入第一个数据寄存器。接着,MCI控制器5通过往复34I’压入除一个数据寄存器外的所有数据寄存器。若该指令指定压入单个指针寄存器,MCI控制器5通过往复路径34M压入最后的数据寄存器并通过往复路径34G压入单个指令寄存器。否则,MCI控制器5通过往复路径34L压入最后的数据寄存器并通过往复路径34N压入多个指针寄存器,若必要34N在34K和34G之前。
图4示出在MCI控制器5中状态机的示例性状态图40,用于从堆栈弹出多个寄存器。MCI控制器5按照状态图40操作,以响应PUSH POP MULTIPLE指令,它指定一个或多个寄存器从存储器中堆栈弹出。在按状态图40操作时,MCI控制器5能确认一个或多个MCI信号7,它包括指导流水线4弹出一个数据寄存器的POP_DREG信号,和指导流水线4弹出一个指针寄存器的POP_PREG信号。此外,MCI控制器5能确认初始化指出弹出哪个数据寄存器的计数器的D_REG_PRESELECT信号,或初始化指出弹出哪个指针寄存器的计数器的P_REG_PRESELECT信号。MCI控制器5还能确认MCI_PRESTALL信号,以在下一时钟周期停顿流水线4。
下表综合了引起MCI控制器5在状态图40的状态之间迁移的条件和被确认的对应输出,其中D是指出要弹出一个数据寄存器的指令位,P是指出要弹出一个指针寄存器的指令位,DR是指出从堆栈弹出的最后数据寄存器的指令字段,PR是指出从堆栈弹出的最后指针寄存器的指令字段,D_TAG表示弹出的当前数据寄存器,P_TAG表示弹出的当前指针寄存器,DMAX表示在可用的数据寄存器范围内的最大数据寄存器,PMAX表示在可用的指针寄存器范围内的最大指针寄存器:
路径 |
条件 |
输出 |
44A |
不压入多条指令 |
无 |
44B |
P&!D&PR=PMAX |
插入POP_PREG |
44C |
!P&D&DR=DMAX |
插入POP_DREG |
44D |
P&!D&PR=PMAX-1 |
插入POP_PREG插入P_REG_PRESELECT |
44E |
无 |
插入POP_PREG |
44F |
!P&D&DR=DMAX-1 |
插入POP_DREG插入D_REG_PRESELECT |
44F′ |
D&P&DR=DMAX&PR=PMAX |
插入POP_PREG |
44G |
无 |
插入POP_DREG |
44H |
P&!D&PR<PMAX-1 |
插入POP_PREG插入P_REG_PRESELECT插入MCI_PRESTALL |
44H′ |
D&P&PR<PMAX |
插入POP_PREG |
| |
插入P_REG_PRESELECT插入MCI_PRESTALL |
44I |
((!D&P_TAG>PR+1)(D&P_TAG>PR)) |
插入POP_PREG插入P_REG_PRESELECT插入MCI_PRESTALL |
44J |
!P&D&DR<DMAX-1 |
插入POP_DREG插入D_REG_PRESELECT插入MCI_PRESTALL |
44J′ |
D&P&PR=PMAX&DR<DMAX |
插入POP_PREG插入P_REG_PRESELECT插入MCI_PRESTALL |
44K |
D_TAG=DR+1 |
插入POP_DREG插入D_REG_PRESELECT |
44L |
D&P_TAG=PR&DR<DMAX |
插入POP_PREG插入P_REG_PRESELECT插入MCI_PRESTALL |
44M |
D&P_TAG=PR&DR=DMAX |
插入POP_PREG插入P_REG_PRESELECT |
44N |
D_TAG>DR+1 |
插入POP_DREG插入D_REG_PRESELECT插入MCI_PRESTALL |
44O |
P_TAG=PR+1&!D |
插入POP_PREG插入P_REG_PRESELECT |
表2
最初,MCI控制器5在WAIT状态开始,直到由取指令单元11取出指令并由解码单元12解码。若指令不是PUSH POP MULTIPLE指令,MCI控制器5如路径44A所示返回到WAIT状态。
若指令是PUSH POP MULTIPLE指令,它指导处理器2弹出单个指针寄存器而无数据寄存器,则MCI控制器5确认POP_DREG信号并经路径44B返回到WAIT状态。若指令是POP MULTIPLE命令并命令处理器2弹出单个数据寄存器,则MCI控制器5确认POP_DREG信号并经路径44C返回到WAIT状态。
若该指令指定弹出两个指针寄存器或数据寄存器,MCI控制器5分别经路径44D或44F改变状态到状态42A或状态42C。MCI控制器5确认POP_PREG信号同时迁移到状态42A,或确认POP_DREG信号同时迁移到状态42C。此外,在沿路径44D迁移时,MCI控制器5确认初始化计数器的P_REG_PRESELECT信号,其计数指出弹出哪个指针寄存器。类似地,在沿路径44F迁移时,MCI控制器5确认初始化计数器的D_REG_PRESELECT信号,其计数指出弹出哪个数据寄存器。
在弹出两个指针寄存器的第一个之后,MCI控制器5从状态42A经路径44E返回到WAIT状态。在此迁移期间,MCI控制器5再次确认POP_PREG并不确认P_REG_PRESELECT,引起执行单元15弹出另外指针寄存器。类似地,在弹出两个数据寄存器的第一个之后,MCI控制器5从状态42C经路径44G返回到WAIT状态。在此迁移期间,MCI控制器5确认POP_DREG并不确认D_REG_PRESELECT,引起执行单元15弹出另外数据寄存器。
对于需要指令解码单元12分派三个或更多指针寄存器的弹出操作的POPMULTIPLE指令,MCI控制器5从WAIT状态经路径44H迁移到状态42B。在迁移期间,MCI控制器8确认POP_PREG信号并确认P_REG_PRESELECT,引起执行单元15弹出第一个指针寄存器。此外,MCI控制器5确认MCI_PRESTALL信号,引起停顿控制器8在下一时钟周期停顿流水线的一个或多个阶段。一旦在状态42B,MCI控制器5继续弹出指针寄存器,直到只有两个指针寄存器保持要被弹出。例如,若指令要求压入6个指针寄存器,MCI控制器5往复路径44I三次,每次弹出一个指针寄存器,直到要弹出的当前指针寄存器等于最大可用指针寄存器(PMAX)减一,即到只有两个寄存器保持要被弹出时。
在往复路径44I时,MCI控制器5确认POP_PREG信号,P_REG_PRESELECT信号和MCI_PRESTALL信号。当两个指针寄存器保持要弹出时,MCI控制器经路径440迁移到状态42A,同时弹出一个余下的指针寄存器。在此迁移期间,MCI控制器5不确认MCI_PRESTALL。指令解码器12在MCI控制器5往复路径44E并弹出余下的指针寄存器之后的周期接收新的指令。
类似地,对需要指令解码单元12分派三个或更多数字寄存器弹出操作而没有指针寄存器弹出操作的PUSH POP MULTIPLE指令,MCI控制器5从WAIT状态经路径44J迁移到状态42D。在迁移期间,MCI控制器8确认POP_DREG信号并确认D_REG_PRESELECT,引起执行单元15弹出第一指针寄存器。此外,MCI控制器5确认MCI_PRESTALL信号,引起停顿控制器8停顿流水线4的一个或多个阶段。在状态42D,MCI控制器5通过往复路径44N弹出数据寄存器,直到两个数据寄存器保持要被弹出。在往复路径44N的同时,MCI控制器5确认POP_DREG信号,D_REG_PRESELECT信号和MCI_PRESTALL信号。一旦两个数据寄存器保持要被弹出,MCI控制器5经路径44K迁移到状态42C,同时弹出一个数据寄存器。在此迁移期间,MCI控制器5不确认MCI_PRESTALL。然后,MCI控制器5经路径44G迁移到WAIT状态,并弹出余下的数据寄存器。
除上述功能以外,PUSH POP MULTIPLE指令能指定弹出多个数据寄存器和多个指针寄存器。通常,状态机30设计成首先弹出指针寄存器,随后是数据寄存器,虽然本发明不限于这样。
对指定弹出单个指针寄存器和单个数据寄存器的PUSH POP MULTIPLE指令,MCI控制器5经路径44F’迁移到状态44C,并确认POP_PREG信号以弹出指针寄存器。接着,MCI控制器5经路径44G迁移回到WAIT状态,确认POP_DREG信号并弹出数据寄存器。
对指定弹出一个指针寄存器和多个数据寄存器的PUSH POP MULTIPLE指令,MCI控制器5经路径44J’迁移到状态42D并确认POP_PREG信号,P_REG_PRESELECT信号和MCI_PRESTALL信号以弹出指针寄存器。接着,MCI控制器5通过往复路径44N弹出除两个数据寄存器外的所有数据寄存器,通过往复路径44K弹出一个数据寄存器,并弹出最后的数据寄存器,并通过往复路径44G返回到WAIT状态。
最后,对指定弹出多个指针寄存器和至少一个数据寄存器的POP MULTIPLE指令,MCI控制器5经路径44H’迁移到状态42B,并确认POP_PREG信号和P_REG_PRESELECT信号以弹出第一指针寄存器。接着,MCI控制器5通过往复路径44I弹出除一个指针寄存器的所有指针寄存器。若指令指定弹出单个数据寄存器,MCI控制器5通过往复路径44M弹出最后的指针寄存器,并通过往复路径44G弹出单个数据寄存器。否则,MCI控制器5通过往复路径44L弹出最后指针寄存器,并通过往复路径44N弹出多个数据寄存器,若需要,在路径44N后跟随44K和44G。
指导流水线处理器2按本发明完成多重操作的另外的指令例子是Link指令和Unlink指令。Link指令通常在调用子程序时使用,并引起流水线处理器4在堆栈上压入子程序的返回地址,在堆栈上压入帧指针,将堆栈指针移到帧指针并根据由该指令指定的子程序的帧大小更新堆栈指针。Unlink指令在退出子程序时使用,引起流水线处理器2从堆栈还原返回地址,还原堆栈指针并从堆栈还原帧指针。
下面例子说明了Link和Unlink指令:
Link1234;
Unlink;
图5示出在MCI控制器5中为完成Link命令的操作的状态机的示例性状态图50。在按状态图50操作时,MCI控制器5能确认一个或多个MCI信号7,指导流水线4完成相应的操作。此外,MCI控制器5能确认MCI PRESTALL信号以停顿线线4。
下面表综合了输出信号,它们在MCI控制器5通过状态机50迁移时被确认。
路径 |
输出信号 |
54A |
无 |
54B |
PUSH_RTS,MCI_PRESTALL |
54C |
PUSH_FP,MCI_PRESTALL |
54D |
MOVE_SP_TO_FP |
54E |
UPDATE_SP |
表3
若现在的指令不是Link命令,则状态机指导MCI控制器5经路径54A返回到WAIT状态。若指令是Link指令,MCI控制器5经路径54B迁移到状态52B并确认PUSH_RTS信号,引起解码单元12分派在堆栈上压入返回地址的操作。此外,MCI控制器5确认MCI_PRESTALL以便在下一时钟周期停顿流水线4。
接着,MCI控制器5经路径54C迁移到状态52C,确认PUSH_FP,引起解码单元12分派在堆栈上压入帧指针寄存器的操作,并确认MCI_PRESTALL以便在下一时钟周期停顿流水线4。然后MCI控制器5经路径54D迁移到状态52D,并确认MOVE_SP_TO_FP,引起指令解码器12分派将堆栈指针寄存器的内容移到帧指针寄存器。最后,MCI控制器5经路径54E迁移到WAIT状态,并确认UPDATE_SP,引起指令解码器12分派如由指令指定的从堆栈指针减去帧大小的操作。
图6示出在MCI控制器5中为完成Unlink命令的操作状态机的示例性状态图。下表综合了MCI控制器5在通过状态机60迁移时确认的输出信号:
路径 |
输出信号 |
64A |
无 |
64B |
LOAD_RTS,MCI_PRESTALL |
64C |
LOAD_SP |
64D |
UPDATE_FP |
表4
若现在的指令不是Unlink命令,则状态机60指导MCI控制器5经路径64A返回到WAIT状态。若指令是Unlink指令,MCI控制器5经路径64B迁移到状态62B,并确认LOAD_RTS信号,引起指令解码单元12确认控制信号,它引起从堆栈取出返回地址,如:RETS=[FP+4]。此外,MCI控制器5确认MCI_PRESTALL,以便在下一时钟周期停顿流水线4。
接着,MCI控制器5经路径64C迁移到62C并确认LOAD_SP,引起指令解码单元12确认控制信号,它引起如下设置堆栈指针:SP=FP+8。
最后,MCI控制器5经路径64D迁移回到WAIT状态,并确认UPDATE_FD,引起指令解码单元12确认控制信号,它引起从堆栈加载帧指针,如:FP=[FP]。
图7是示出停顿控制器8的一部分的示例性实施例的原理图。停顿控制器8能接收若干输入信号,如STALL_CONDITION_1到STALL_CONDITION_8,它们可以在检测到相应停顿条件时被确认。这些输入信号仅是为了示例性目的;例如停顿控制器8可接收任何数目不同的停顿信号用于流水线4的各个阶段。
响应输入停顿条件信号,停顿控制器8能产生停顿信号9来停顿流水线4。停顿控制器8能产生多个停顿信号9,它们对应于流水线4的各个阶段。例如,当STALL_CONDITION_1或STALL_CONDITION_2被确认,且处理器2不在复位状态时,停顿控制器8能确认STALL_WB输出信号,导致流水线4的WB阶段的停顿。值得注意,STALL_WB输出信号用于产生对流水线4的较早阶段的停顿输出信号,如STALL_EX输出信号。更具体说,当STALL_CONDITION_3,STALL_CONDITION_4或STALL_WB被确认且处理器2不在复位状态,停顿控制器8确认STALL_EX输出信号。以此方式,在WB阶段的停顿强制在WX阶段的停顿。停顿控制器8类似地根据单独的危险条件产生STALL_AC和STALL_DEC信号,并在流水线4的较后阶段停顿。
当引起解码阶段停顿的条件出现时,停顿控制器8确认STALL_DEC_MCI信号,它引起MCI控制器停顿。更具体说,当STALL_DEC_MCI被确认时,MCI控制器5不从其当前位置迁移。
停顿控制器8的停顿定时线路72从MCI控制器5接收MCI_PRESTALL信号,并作为响应确认MCI_STALL信号。或门70接收由停顿定时线路72提供的MCI_STALL线路并确认STALL_DEC信号,从而停顿解码阶段和流水线4的较早阶段。
图8是时序图,说明了停顿控制器8能得益于在流水线4的解码阶段检测MCI指令,以增加流水线4的性能。在一个实施例中,在流水线4的IF阶段的预解码器在早于解码阶段一个阶段解码MCI指令。若MCI指令被预解码,预解码器确认MCI_PREDECODE信号。在MCI指令移到解码阶段的下一时钟周期时,MCI_STALL_1ST_CYCLE信号被确认,它是MCI_PREDECODE信号的反转(floppedVersion)。停顿控制器5根据MCI_STALL_FIRST_CYCLE信号和MCI_STALL_REMATNDER信号的逻辑或提供MCI_STALL信号。MCI_STALL_REMAINDER信号是MCI_PRESTALL的反转,后者如上所述由MCI控制器5的状态逻辑控制。
图9是用于根据从预解码器接收的MCI_PREDECODER信号和从MCI控制器5接收的MCI_PRESTALL信号产生MCI_STALL的示例性停顿时序线路72的原理图。在MCI指令处于解码阶段的第一周期期间,在MCI指令处于解码阶段的第一周期期间,在MCI_PREDECODE的反转被确认且没有当前的MCI被执行时,OR门92确认MCI_STALL。对需要多个一个停顿周期的MCI指令,停顿时序线路72根据从MCI控制器5接收的MCI_PRESTALL信号产很其余的停顿周期。
图10是用于产生表示当前要压入或弹出的数据寄存器的数据寄存器值(D_TAG)的示例性数据寄存器地址生成线路100的原理图。D_TAG能包括多个数据线,如三根数据线,它们能表示数据寄存器的范围。
对压入操作,线路100从起始数据寄存器向上计数到最大数据寄存器。对弹出操作,线路100通过寄存器的范围向下计数到最后的数据寄存器。更具体说,在第一周期,多路复用器102在最大数据寄存器(DMAX)或从指令字段(DR)的起始数据寄存器(如数据寄存器5)之间,根据PPM_SELECT是否对压入操作确认并对弹出操作不确认而选择。
由MCI控制器5提供的D_REG_PRESELECT输出信号使多路复用器104在MCI指令的第一周期选择多路复用器102的输出,在余下周期选择存储线路108的输出。多路复用器104的输出D_TAG根据PPM_SELECT由加法器106增量或减量,并反馈到存储线路108。输出信号D_TAG馈给流水线4的指令解码单元12用于压入或弹出寄存器并作为输出馈回给MCI控制器5的状态控制逻辑。
图11是示例性指针寄存器地址生成线路110的原理图,用于输出表示要压入或弹出的当前指针寄存器的指针寄存器值(P_TAG)。类似于图10的线路100,线路110对弹出操作递减计数通过寄存器的范围,而对压入操作从起始指针寄存器递增计数。
已描述了本发明的各个实施例。例如,已描述了流水线处理器,它包括提供输出复位信号到执行流水线的至少一个阶段的复位单元。该复位单元处理如硬复件,软复件和模拟复位那样的复位请求,作为具有指定优先级的复位事件。
该处理器能在各种系统中实现,包括通用计算系统,数字信号处理系统,膝上计算机,个人数字助理(PDA)和移动电话。在那样的系统中,处理器能连接如闪存设备或静态随机存储器(SRAM)那样的存储器设备,它们存储操作系统或其它软件应用。这些和其它实施例是在下列权利要求的范围之中。