使用双程序计数器计算待处理指令地址的系统的制作方法

文档序号:6436262阅读:236来源:国知局
专利名称:使用双程序计数器计算待处理指令地址的系统的制作方法
技术领域
本发明涉及处理器设计领域,尤其涉及计算中断与异常处理程序返回地址系统, 属于设计集成电路设计领域。
背景技术
程序在处理器上运行的过程中,会被外部设备的中断请求,包括普通中断请求或者快速中断请求,或者异常处理请求,包括存储器数据访问出错打断,请求处理器进入的相应的中断服务程序或者异常处理程序的起始地址,读取中断服务或异常处理程序并执行。 处理器在处理中断与异常请求的过程中,往往需要给中断服务程序一个入口地址,同时也要告诉处理器,中断程序结束之后的该从哪条指令开始执行程序,即中断返回地址。处理器运行程序时,根据中断与异常的类别,包括普通中断、快速中断、数据访问异常、指令访问异常、未定义指令异常、软件中断或者复位异常等将中断入口地址设定为固定的地址,而中断、异常请求的返回地址往往需要根据被打断程序指令在处理器流水线管道中执行的情况来计算得到。处理器能否精确的从异常处理和中段请求程序中返回,决定于计算得到的中断异常返回地址。在微处理器的设计中,随着流水线的深度越来越深,流水线的控制越来越复杂,多发射超标量等技术的应用,在计算返回地址变成了一个非常复杂的问题,正确地确定中断返回地址是处理精确中断的关键。在一般的设计中,中断异常返回地址均由程序计数器中的程序计数寄存器中的值,再判断处理器流水线管道中的指令条数,以及指令阶段的运行的情况,流水下是否存在空置情况,是否存在多周期执行情况等来计算中断异常返回地址的值,这样做不仅控制复杂,计算模块也复杂,而且往往难以做到中断范围地址的精确正确,本发明的目的在于提供一种正确简单的确定返回地址的技术。

发明内容
为了克服背景技术的不足,本发明提供了一种使用双程序计数器计算待处理指令地址的系统。本发明提供的使用双程序计数器计算待处理指令地址的系统,包括第一程序计数器模块、指令译码单元、执行单元、存储单元和写回单元;其中,所述写回单元包括第二程序计数器模块,所述第一程序计数器模块包括第一全加器和第一程序计数寄存器,所述第二程序计数器模块包括第二全加器和第二程序计数寄存器;所述第一程序计数器模块为系统取指令功能模块,所述第二程序计数器模块为写回级程序计数器模块,实现下一条待完成指令的地址计算。所述第一程序计数寄存器中的值为系统待取指令的地址,所述第二程序计数寄存器中的值为系统下一条待完成指令的地址。当所述系统开始执行程序时,所述第一程序计数寄存器中的值为起始地址,所述第二程序计数寄存器的值也为起始地址。
当所述存储单元向所述写回单元提供控制信号时,所述第二程序计数器模块根据所述控制信号修改所述第二程序计数寄存器中的值。其中,所述存储单元包括寄存器堆,所述寄存器堆包括一般寄存器和链接寄存器;其中,所述控制信号为中断信号或者异常信号时,所述链接寄存器存储中断返回地址或者异常返回地址,在系统处于无中断或者无异常情况时,所述链接寄存器可做一般寄存器使用。所述控制信号包括中断、异常信号,寄存器写回信号和指令完成信号。当所述控制信号为中断信号时,所述第二程序计数器模块将所述第二程序计数寄存器中的值写回到所述链接寄存器,则所述链接寄存器中的值为中断返回地址,所述第二程序计数寄存器和所述第一程序计数寄存器中的值改写为中断入口地址;当所述控制信号为寄存器写回信号时,将写回到所述第一程序计数寄存器中的值同时写回到所述第二程序计数寄存器;当所述控制信号为指令完成信号时,所述第二程序计数寄存器的值改写为所述第二程序计数寄存器的值与指令地址偏移量之和。本发明公开了一种使用双程序计数器计算待处理指令地址的系统,可以在中断控制中为中断控制器提供精确的无需处理的返回地址,同时也可以在异常系统中为异常处理提供无需处理的返回地址;返回地址为下一条待完成的指令的地址,此系统的结构可以应用于各类处理器设计中的中断控制与异常处理,提供简洁直接的返回地址,无需根据程序计数器再分不同的情况计算返回地址,确保精确返回地址的正确唯一,简化了一般设计中的中断程序与异常处理程序的返回程序,缩短中断异常处理的时间。


图1为本发明实施例的系统流水线示意图。图2为本发明实施例的寄存器堆的示意图。图3为本发明实施例的第一程序计数器模块示意图。图4为本发明实施例的计算中断返回地址的方法流程图。
具体实施例方式下面参照附图,结合具体实施例,对本发明进一步详细说明。如图1所示,本实施例的系统包括第一程序计数器模块Cl、指令译码单元ID、执行单元EX、存储单元MEM、写回单元WB ;其中,所述写回单元WB包括第二程序计数器模块 C2。在本实施例的系统中,存储单元MEM还包括链接寄存器,如图2所示,链接寄存器为系统寄存器堆中一特殊用途寄存器,用来存放返回地址;其中为一般寄存器;其中,所述控制信号为中断信号或者异常信号时,所述链接寄存器存储中断返回地址或者异常返回地址,在系统处于无中断或者无异常情况时,所述链接寄存器可做一般寄存器使用。。在本实施例的系统中,程序的每条指令都被分割成N个部分,顺序在流水线中推进执行,例如一条指令在流水线中通过第一程序计数器模块Cl以“取指令”这个动作开始,指令的机器码进入到流水线中,然后推进到指令译码单元ID,系统流水线中的指令译码单元ID对指令译码,然后推进到系统流水线的执行单元EX,指令需要做的计算操作在该单元完成,然后执行的结果推进流水线的存储单元MEM,在这个单元,如果指令有从外部存储器读写数据,则该单元中会完成存储操作,之后指令再进入写回单元WB,在写回单元WB中, 指令中的写回内部寄存器的操作最终在写回单元WB完成,指令最终执行完成也是在该单兀。本实施例中第一程序计数器模块Cl和第二程序计数器模块C2结构相同,以第一程序计数器模块Cl为例说明,如图3所示,第一程序计数器模块Cl包括第一全加器A和第一程序计数寄存器PC,即第一程序计数器模块Cl包括第一全加器和第一程序计数寄存器, 第二程序计数器模块包括第二全加器和第二程序计数寄存器。所不同的是,所述第一程序计数器模块Cl为系统取指令功能模块,所述第二程序计数器模块C2为写回级程序计数器模块,实现下一条待完成指令的地址计算。本实施例所述的下一条要完成的指令是指在流水线中,指令的执行被分在许多个周期完成,指令执行的最后一个周期为写回周期,下一条要完成的指令即是指下一条要写回的指令,且下一个写回是此条指令的最后一个写回操作。第二程序计数器模块C2的目的是计算下一条待完成指令的地址
在系统复位后程序开始运行时,第二程序计数寄存器为整个程序的起始地址,每当有一条指令通过整个流水线传递到写回单元WB,即流水线的最后一个单元,则表示又有一条指令要完成,此时,第二程序计数器模块C 2通过这条指令计算出下一条指令的地址,通常是第二程序计数寄存器的当前值加上指令地址的偏移量(3 2位指令偏移量为4),这样,每完成一条指令的同时也会修改第二程序计数寄存器中的值,这样可以确保第二程序计数寄存器的值永远正确地指向下一条待完成的指令,这样,在中断或者异常被采样的时候,第二程序计数寄存器中的值就可以做为中断或异常服务程序的返回地址保存起来。在中断与异常处理中,如果在时钟采样的沿到的时候,发现了请求中断执行的信号或者请求异常处理执行的信号有效,系统则执行以下的操作
首先,将第二程序计数寄存器中的值写回到链接寄存器,作为返回地址保存在系统的寄存器文件中,这样链接寄存器中存放的是中断返回后要执行的第一条指令的地址。其次,将中断入口的地址放入下一条即将完成指令的第二程序计数寄存器,这样第二程序计数寄存器就指向了下一条要完成指令的地址。同时,将中断入口的地址放入第一程序计数寄存器中,那么在下一个周期系统就能开始执行中断或异常的服务程序。如图4所示,本实施例的处理中断返回的步骤如下 S301,判断存储单元是否向写回单元传输数据;
如果写回单元没有收到存储单元传输的数据,则执行步骤S302,写回单元不操作,不修改第二程序计数寄存器的值;
如果写回单元收到存储单元传输的数据,则根据控制信号作如下处理 如果控制信号为中断、异常请求信号的采样,则执行步骤S303,将第二程序计数寄存器中的值写入链接寄存器中,区分中断种类,将中断、异常请求信号的入口地址写入第二程序计数寄存器中;
如果控制信号为要写回第一程序计数寄存器的信号,则执行步骤S304,将写回第一程序计数寄存器的值同时写回第二程序计数寄存器;
如果控制信号不是写回第一程序计数寄存器的信号,而是为指令的最后一拍的控制信号,则执行步骤S305,将第二程序计数寄存器的值改写为第二程序计数寄存器的值与指令地址偏移量之和,同时执行正常的写回操作,将待写回的寄存器值存储到寄存器堆中对应的寄存器中。如果判断为不是指令的最后一拍,则执行步骤S306,将待写回的寄存器值存储到寄存器堆中对应的寄存器中。本实施例的系统中,每当有一条指令通过整个流水线传递到写回单元,表示又有一条指令要完成,此时,第二程序计数器模块通过这条指令计算出下一条指令的地址。所以,每完成一条指令的同时也会修改第二程序计数寄存器中的值,可以确保第二程序计数寄存器的值永远正确的指向下一条待完成的指令,则在中断或者异常被采样的时候,第二程序计数寄存器中的值就可以做为中断或异常服务程序的返回地址保存起来。在中断控制或异常处理中中为中断控制器或者异常处理提供精确的无需处理的返回地址,确保精确返回地址的正确唯一性,简化了一般设计中的中断程序与异常处理程序的返回程序,缩短中断异常处理的时间。
权利要求
1.一种使用双程序计数器计算待处理指令地址的系统,包括第一程序计数器模块、指令译码单元、执行单元、存储单元和写回单元,其特征在于,所述写回单元包括第二程序计数器模块,所述第一程序计数器模块包括第一全加器和第一程序计数寄存器,所述第二程序计数器模块包括第二全加器和第二程序计数寄存器;其中,所述第一程序计数器模块为系统取指令功能模块,所述第二程序计数器模块为写回级程序计数器模块,实现下一条待完成指令的地址计算。
2.根据权利要求1所述的系统,其特征在于,所述第一程序计数寄存器中的值为系统待取指令的地址,所述第二程序计数寄存器中的值为系统下一条待完成指令的地址。
3.根据权利要求1或2所述的系统,其特征在于,所述系统开始执行程序时,所述第一程序计数寄存器中的值为起始地址,所述第二程序计数寄存器的值也为起始地址。
4.根据权利要求1或2所述的系统,其特征在于,所述存储单元向所述写回单元提供控制信号,所述第二程序计数器模块根据所述控制信号修改所述第二程序计数寄存器中的值。
5.根据权利要求4所述的系统,其特征在于,所述存储单元包括寄存器堆,所述寄存器堆包括一般寄存器和链接寄存器;其中,所述控制信号为中断信号或者异常信号时,所述链接寄存器存储中断返回地址或者异常返回地址,在系统处于无中断或者无异常情况时,所述链接寄存器做一般寄存器使用。
6.根据权利要求4所述的系统,其特征在于,所述控制信号包括中断信号、寄存器写回信号和指令完成信号。
7.根据权利要求6所述的系统,其特征在于,所述控制信号为中断信号时,所述第二程序计数器模块将所述第二程序计数寄存器中的值写回到所述链接寄存器,则所述链接寄存器中的值为中断返回地址,所述第二程序计数寄存器和所述第一程序计数寄存器中的值改写为中断入口地址。
8.根据权利要求6所述的系统,其特征在于,所述控制信号为寄存器写回信号时,将写回到所述第一程序计数寄存器中的值同时写回到所述第二程序计数寄存器。
9.根据权利要求6所述的系统,其特征在于,所述控制信号为指令完成信号时,所述第二程序计数寄存器的值改写为所述第二程序计数寄存器的值与指令地址偏移量之和。
全文摘要
本发明公开了一种使用双程序计数器计算待处理指令地址的系统,包括第一程序计数器模块、指令译码单元、执行单元、存储单元、写回单元和链接寄存器;其中,所述写回单元包括第二程序计数器模块,所述第一程序计数器模块为系统取指令功能模块,所述第二程序计数器模块为写回级程序计数器模块,实现下一条待完成指令的地址计算。本发明通过写回单元中的第二程序计数器模块,可以在中断控制或异常处理中中为中断控制器或者异常处理提供精确的无需处理的返回地址,确保精确返回地址的正确唯一性,简化了一般设计中的中断程序与异常处理程序的返回程序,缩短中断异常处理的时间。
文档编号G06F9/30GK102364432SQ201110325310
公开日2012年2月29日 申请日期2011年10月25日 优先权日2011年10月25日
发明者张耀辉, 李文江 申请人:中国科学院苏州纳米技术与纳米仿生研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1