具有自对准堆栈指针的数据处理系统及其方法

文档序号:6412001阅读:213来源:国知局
专利名称:具有自对准堆栈指针的数据处理系统及其方法
技术领域
本发明一般涉及数据处理系统,特别是涉及数据处理系统中的堆栈指针。
在数据处理系统中,堆栈指针通常是硬件寄存器,用作限定程序变量和临时存储的存储器位置的存储器地址指针。通常,硬件使用程序设计模型中一个或多个寄存器作为系统堆栈指针。在许多系统中,在执行某些操作期间,堆栈指针由指令集隐含使用。通常,该地址寄存器定义了当前堆栈帧的顶,在此操作数通过将数据“推进”存储器堆栈而在各函数之间传送。该推进操作包括将堆栈指针减“1”,然后将数据拷贝到新堆栈指针地址定义的位置。在例行程序使用了该数据之后,通过简单地将堆栈指针加“1”使其恢复到原来值,而再分配该数据。该过程称为“弹出”堆栈。
由于这些堆栈指针通常定义了存储器地址,用户程序例行处理限定堆栈顶的堆栈指针内容。各类长度的操作数,如字节、字、长字,都可能被推入堆栈,这样在任何时候堆栈顶都可能指向任何允许的对准。据说在任何操作数地址对准上提供任何操作数长度的自动硬件支持的处理器也支持未对准。如果操作数的存储器地址与其自然边界不对应,则称该操作数未对准。自然边界简单地定义成一个对操作数长度模运算余0的地址。例如,如果存储器字节地址是模2余0则16位字操作数是对准的,如果存储器字节地址是模4余0则32位长字是对准的。不符合这种定义的对准会产生未对准操作数。
大多数处理器包括对各种异常事件处理的硬件支持。这些异常事件,也称为故障,通常包括中断、系统调用和算术运算错误条件。也可能发生其他异常事件。通常在检测到异常事件时,处理器将在发生故障时在描述机器环境的系统堆栈顶部产生一特殊的异常事件帧。在产生该异常事件堆栈帧之后,处理器通过将控制传送给异常事件类型确定的指令地址,而将控制传送给特殊异常事件处理例程。通常异常事件处理例程将处理可能会启动某些校正动作的故障,然后返回到异常事件发生时执行的应用程序。
大多数处理器使用某种类型的出错检测,这样在处理任何其他异常事件期间发生的某些灾难性故障状态会导致整个系统失效从而使处理器停止工作。灾难性故障状态这一特殊的集合包括在某些边界上系统堆栈指针的对准。为了补偿这种可能性,现有技术已实施了一些不同的解决方案,它们要求大量的硬件。例如,大多数现有技术解决方案要求能够确保无操作数未对准的硬件电路。该方案通常要求基于处理器操作模式的多堆栈指针。该操作模式通常定义与执行程序有关的特权级,其最简单形式通常包括两级特权监督者(最高特权)和用户(最低特权)。在监督方式中执行提供对系统所有资源的访问,而用户方式中执行不能访问某些硬件资源。此外,许多处理器在数据处理系统中提供专用硬件电路来强制所需的堆栈指针的对准。注意,在每种现有技术方案中,都需要专用硬件电路和相应的额外开销。
对于无法实施这种昂贵的硬件电路的数据处理系统,已开发出软件解决方案。在使用这种软件方案时,不允许并发异常事件。换句话说,一旦数据处理系统已经获取了一个异常事件,则不允许其他异常事件。在这种情况下,如果另一异常事件不能被标记和确认,则机器环境的状态和程序计数器信息将被重写。于是,数据处理系统将不能回到处理第一个异常事件之前的状态。在第二种类型的现有技术系统中,数据处理系统无法有效地正确处理所有异常事件。
现有技术的解决方案需要大量额外的硬件电路,以在确认和处理完异常事件之后将数据处理系统恢复到其初始状态。于是需要这样一种解决方案它使数据处理系统的设计者有选择地包括用于操作数未对准的硬件支持,同时又能保证数据处理系统无论系统堆栈指针是否对准都能正确地处理所有的异常事件并在处理了异常事件之后恢复初始状态。


图1以方框图形式显示根据本发明一个实施例的数据处理系统;图2以方框图形式显示图1所示数据处理系统的中央处理单元部分;
图3以方框图形式显示图2所示中央处理单元的取操作数电路;图4以方框图形式显示图3所示取操作数电路的寄存器存储器电路(register file circuit);图5以方框图形式显示图2所示中央处理单元的地址产生执行电路;图6以方框图形式显示图4所示地址产生执行电路的另一个执行机构的一部分;图7以方框图形式显示用于多个截栈指针SP寄存器值的一个异常事件堆栈帧结构;以及图8以方框图形式显示包括4位格式字段的一个异常事件堆栈帧的结构。
本发明提供一种数据处理器以及操作一个数据处理系统的方法,在该系统中当把硬件支持堆栈操作数对准作为一种可选功能时,可以使用单个系统堆栈指针来建立系统和用户堆栈操作二者的记录。该单个系统堆栈指针被用作为自对准堆栈指针。简单地说,这个自对准堆栈指针自动地把自己对准到当前地址设置之下的最近的模4余0(0-modulo-4)地址,从而即使当没有硬件支持未对准操作数时也不会发生系统错误。一旦发生了自动对准,本发明的数据处理器便在一个异常事件堆栈帧中存储一个4位格式字段(field),以指示关于出错时堆栈指针对准的信息。当已经对异常事件提供了服务并执行从异常事件返回(RTE)指令时,处理器使用这个存储在异常事件堆栈帧中的4位格式字段,以把堆栈指针恢复到异常事件发生时它的原来值。
本发明提供一种数据处理器和操作方法,其中使用单一堆栈指针来支持一个数据处理系统的监控和用户二个堆栈区。再有,在本发明中可以采用专用于操作数未对准的硬件,但不是必需的。这一单个堆栈指针对自己对准的能力允许数据处理器保证当发生异常事件而堆栈指针未对准时也不会使数据处理系统出现灾难性错误。下面将更详细地讨论本发明的操作。
在下面的讨论中将更详细地提供采用本发明的数据处理系统的连接和操作情况。本发明的连接在下面描述本发明的连接时,将使用“总线(bus)”一词代表可能用于传送一种或多种类型信息(诸如数据、地址、控制、或状态)的一组信号或导线。术语“认定(assert)”和“否定(negate)”将用于表示一个信号、状态位、或类似装置分加进入了它的逻辑真或逻辑伪状态。如果逻辑真状态是逻辑电平1,则逻辑伪状态将是逻辑电平0。而如果逻辑真状态是逻辑电平0,则逻辑伪状态将是逻辑电平1。
再有,如果在一个数字前冠以“$”符号,则表明这个数是以其16进制形式或者说以16为基的形式表示的。在数字前冠以“%”符号,则表明这个数是以其2进制形式或者说以2为基的形式表示的。
现在参考图1,图1显示了根据本发明一个实施例的数据处理系统5。数据处理系统5由数据处理器3和外部开发系统7组成。数据处理器3包括系统总线控制器8、处理器核心9、从动模块12、从动模块13、主控模块14、以及调试模块10。系统总线控制器8通过E-总线与一外部设备(这里未画出)相连。系统总线控制器8通过S-总线与从动模块12及从动模块13相连。S-总线是从动模块总线。系统总线控制器8通过M-总线23与处理器核心9及主控模块14相连。M-总线23是主控模块总线。
处理器核心9由中央处理单元(CPU)2、存储器管理单元(MMU)/控制器4、以及存储器6组成。在处理器核心9中也可以有选择地包括一个操作数未对准单元5。中央处理单元2、MMU/控制器4、存储器6以及调试模块10通过K-总线25彼此相连。中央处理单元2和存储器6还直接与MMU/控制器4相连。MMU/控制器4通过M-总线23向数据处理系统5的其余部分提供信息。中央处理单元2与调试模块10相连以提供内部控制总线。CPU2还从外部设备(这里未画出)接收一复位信号。调试模块10使用外部控制总线与外部开发系统7双向通信。外部开发系统7是数据处理系统5外部的一个可选设备。
图2更详细地显示出CPU2部分。CPU2包括寄存器208、取指令流水线(pipeline)210、缓冲器216、操作数执行流水线220、以及多路转换器(MUX)222。取指令流水线210由指令地址产生电路202、取指令电路204、FIFO(先进先出)指令缓冲器206、以及多路转换器219构成。此外,操作数执行流水线220由取操作数电路212、地址产生/执行电路214、以及流水线控制逻辑218构成。
取指令流水线210的指令地址产生电路202向多路转换器222提供指令地址信号。多路转换器222在来自取指令流水线210的指令地址与来自操作数执行流水线220的操作数地址之间进行选择,以用于K总线25上的处理。寄存器208输出一个KADDR(K-总线地址)信号。取指令流水线210的取指令电路204与取操作数电路212及缓冲器216相连,以接收缓冲的KRDATA信号。取指令电路204与取操作数电路212相连以提供取指令地址。取指令电路204还与FIFO指令缓冲器206及多路转换器219相连,以提供指令缓冲器写数据信号。FIFO指令缓冲器206与多路转换器219相连,以提供指令缓冲器读数据信号。多路转换器219与操作执行流水线220的取操作数电路212相连,以提供指令信号。
操作数执行流水线220的流水线控制逻辑218与取操作数电路212相连,以提供异常事件处理信号。流水线控制逻辑218还与地址产生/执行电路214相连,以提供一控制总线。流水线控制逻辑218与取操作数电路212及地址产生/执行电路214相连,以提供向量信号。操作数执行流水线220的地址产生/执行电路214与多路转换器222相连以提供操作数地址信号。再有,地址产生/执行电路214还与缓冲器216相连,以提供操作数写数据信号。缓冲器216提供KRDATA(K-总线读数据)信号和KWDATA(K-总线写数据)信号。KRDATA、KWDATA及KADDR信号都提供给K-总线25。
图3更详述地显示取操作数电路212。取操作数电路212由寄存器224、多路转换器1(MUX)226、寄存器存储器228、程序计数器寄存器229、多路转换器2(MUX)230、多路转换器231、多路转换器3(MUX)232、加法器233、寄存器A234、以及寄存器B236组成。
一个指令信号从图2的多路转换器219提供给寄存器224。图3的寄存器224与多路转换器1226的第一输入相连,而向量信号与多路转换器1226的第二输入相连。多路转换器1226向多路转换器2230及多路转换器3232提供常数和立即操作数,如寄存器224中存储的指令所指明的。一个执行结果信号与寄存器存储器228及多路转换器2230和多路转换器3232每一个相连。寄存器存储器228与多路转换器2230相连以提供“A”信号,并与多路转换器3232相连以提供“B”信号。此外,寄存器存储器228提供一个SP(1∶0)信号。SP(1∶0)信号提供存储在寄存器存储器228中的堆栈指针值的位0和位1。多路转换器2230与寄存器A234相连,多路转换器3232与寄存器B236相连。寄存器A234提供一个RA信号。寄存器B236提供一个RB信号。RA和RB信号作为被寄存的输入操作数提供给地址产生/执行电路214。
取指令地址信号被提供给多路转换器231的第一输入。多路转换器231的输出提供给程序计数器寄存器229。程序计数器寄存器提供一个PC(程序计数器)信号作为输出信号送给加法器233的输入。加法器233被用于计算下一个顺序的程序计数器值,其输出与多路转换器231的第二输入相连。当CPU2执行指令时,程序计数器寄存器229的内容代表了存储在寄存器224中指令的地址。
图4更详细地显示寄存器存储器228。寄存器存储器228通常包括所有通用的可在CPU中实现的可编程机器寄存器。寄存器存储器228通常由多个寄存器组成,例如寄存器240、寄存器242、堆栈指针244、多路转换器246、多路转换器248、与门272、以及与门274。执行结果信号提供给寄存器240、寄存器242、以及堆栈指针244中每一个。寄存器240、寄存器242、堆栈指针244中每一个的内容以及这里没特别显示的但在寄存器存储器228中包括的其他寄存器的内容都提供共多路转换器246和248中每一个。多路转换器246提供一个“A”信号,而多路转换器248提供一个“B”信号。
堆栈指针244是定义为系统堆栈指针的可编程序寄存器,它提供堆栈指针寄存器内容的低两位,作为SP(1∶0)。该低两位定义了32位宽地址空间中的字节地址。SP(1)信号提供存储在寄存器存储器228的堆栈指针244中的堆栈指针值的位1。类似地,SP(0)信号提供存储在寄存器存储器228的堆栈指针244中的堆栈指针值的位0。SP(1)信号提供给与门272的第一输入,而异常事件处理信号提供给与门272的第二输入。与门272的输出与多路转换器248的输入相连。此外,SP(0)信号提供给与门274的第一输入,而异常事件处理信号提供给与门274的第二输入。
图5更详细地显示地址产生/执行电路214。地址产生/执行电路214由多路转换器4 250、多路转换器5 252、逻辑电路253、算术逻辑单元(ALU)254、其他执行机构电路256、状态寄存器257、以及多路转换器6 258。
由取操作数电路212提供的RA信号与多路转换器4250、其他执行机构电路256、以及多路转换器6258相连。由取操作数电路212提供的RB信号与多路转换器5252、其他执行机构电路256、以及多路转换器6258相连。多路转换器4250及多路转换器5252各与ALU254相连。ALU254与多路转换器6258相连以提供执行结果信号。多路转换器6258提供操作数地址信号。ALU254的输出是执行结果信号并耦合到多路转换器6258的一个输入上。多路转换器6258然后提供一个操作数地址信号。逻辑电路253与状态寄存器257相连,而状态寄存器257提供SR(状态寄存器)信号。这是一个可编程序寄存器,用于定义处理器特权级和杂项控制功能。正如已知的,也可以作为其他结构中的处理器状态字。此外,SP(1∶0)信号、PC信号、以及SR(状态寄存器)信号都提供给其他执行机构电路256。其他执行机构电路256提供操作数写数据信号和执行结果信号。
图6更详细地显示其他执行机构电路256。其他执行机构电路256由逻辑电路259、多路转换器260、寄存器261、以及寄存器262构成。SP(1∶0)信号被提供给逻辑电路259的输入。逻辑电路259的输出与多路转换器260相连以提供格式信号。SR、PC、格式、向量、以及SP(1∶0)信号都提供给多路转换器260。多路转换器260与寄存器262相连。寄存器262提供操作数写数据信号。此外,RB信号提供给寄存器261。寄存器261提供一已提取格式信号及执行结果信号。操作描述在数据处理系统5的操作过程中,处理器核心9使用K-总线25连接CPU2、MMU/控制器4及存储器6。此外,在本发明中,使用者可选择包括操作数未对准单元5。如果在数据处理器3中包括了操作数未对准单元5,则K-总线25把它与CPU2、MMU/控制器4及存储器6中的每一个连接起来。在本发明的本实施例中,K-总线25是一个高速、单周期存取总线。存储器6可以包括随机存取存储器(RAM)、只读存储器(ROM)、高速缓冲存储器块以及它们的任何组合。所有其他系统模块和外部设备通过M-总线23与处理器核心9相连。M-总线23是一个内部多主控器总线,用于完成由多总线主控器之一发起的数据传送。系统总线控制器8提供多重功能。如果外部总线E-总线存在,则系统总线控制器8提供内部M-总线23和外部E-总线之间的接口。此外,系统总线控制器8作为控制S-总线上所有数据传送的焦点。S-总线用于把简单从动外部模块(12和13)(如计时器和串行通信通道和存储器)连到数据处理系统5中。
在本发明中,数据处理器3有几层总线带宽,以提供低成本的数据传送机制。处理器核心9与高速单周期K-总线25互连以获得最好性能。对于不直接与这一高速总线相连的传送,M-总线23提供了来自任何一个内部总线主控器(如处理器核心9和主控模块14)的带宽。系统总线控制器8提供内部M-总线23和外部E-总线(如果存在的话)之间的连接,同时还提供在低成本、较低带宽的S-总线上所有数据传送的控制功能,用于诸如从动模块12和13等从动外部设备模块。调试模块10连于K-总线25以允许对所有处理器发动的存储器存取进行非入侵监测。调试模块还提供与可选择的外部开发系统7的连接。外部开发系统7通常在程序调试期间相连和在系统集成测试时开发。数据处理器3与外部开发系统7相连以互通信息。外部开发系统7通过外部控制总线与数据处理器3相连。
在下面关于数据处理系统5的操作的讨论中,假定数据处理器3的用户已决定应降低与设备相关的附加费用,并已选定采用不带操作数未对准单元5的数据处理器3。如果在数据处理器3中采用了操作数未对准单元5,那么它便提供了CPU2和K-总线25之间的逻辑电路,它将侦听由CPU2输出的未对准的参考。于是,操作数未对准单元5将把未对准的参考信号重新组织成对准的参考序列。然而,在本发明的当前实施例中,用户没有在数据处理器3中采用操作数未对准单元5。
如前面讨论的那样,由于没有采用操作数未对准单元5,在异常事件处理过程中现有技术数据处理器将会对任何被恢复的未对准操作数参考产生一个异常事件。如果对于其他类型错误,作为异常事件处理部分发生了未对准参考,则会发生灾难性的双重错误状态。对于大多数数据处理系统,这种双重异常事件对系统性能是灾难性的,常常会导致数据处理系统停机直至对系统复位为止。如以前提到的那样,本发明认识到这个问题并提供了一在自对准的堆栈指针,所以保证了CPU2在响应一个异常事件时不会产生未对准参考。下面将更详细地描述本发明的处理器核心9和CPU2。
当数据处理器3在运行时,处理器核心9控制执行内部程序和外部中断。提供CPU2以利用取指令流水线210和操作数执行流水线220来快速有效地处理指令。在本发明的当前实施例中,取指令流水线210和操作数执行流水线220是独立的和互不相连的。
在运行过程中,取指令流水线210预先取指令以供处理器核心9中执行。指令地址产生电路202形成一个预取地址,用于存取下一个指令。这个预取地址通过多路转换器222提供给寄存器208。该预取地址作为KADDR信号提供给K-总线25。CPU2启动所需的K-总线25传送,以取出由KADDR定义的地址中存放的指令。所希望的指令可以在存储器6、从动模块12、从动模块13、或E-总线相连的设备中,如果存在的话。无论所需的指令位于什么地方,数据最终都通过KRDATA(K总线读数据)信号送回CPU2。KRDATA信号向缓冲器216提供指令。缓冲器216继而将取来的指令传送给取指令电路204。一旦向取指令电路204提供了取来的指令,取指令电路204向FIFO指令缓冲器206或者多路转换器219提供指令缓冲器写数据信号。当操作数执行流水线220在等待下一指令时,FIFO指令缓冲器206便被越过,于是指令缓冲器写数据信号便被直接提供给多路转换器219。否则,指令缓冲器写数据信号先提供给FIFO指令缓冲器206然后再到多路转换器219。
指令信号从取指令流水线210的多路转换器219提供给操作数执行流水线220的流水线控制逻辑218及取操作数电路212。再有,取指令流水线210的取指令电路204向取操作数电路212提供取指令地址信号。该取指令地址信号用于根据指令流变化,如分支,建立新的程序计数器寄存器229的值。对于涉及寄存器操作数的简单指令,操作数执行流水线作用是两级流水线。在第一级,流水线控制逻辑218对指令解码并向取操作数电路212提供控制信息。于是,取操作数电路212取存储在寄存器存储器中的值。在第二级,流水线控制逻辑218向地址产生/执行电路214提供控制信号以使用ALU254或其它执行机构256完成对寄存的输入操作数、RA234和RA236所需的数据运算。所产生的数据在执行结果信号上提供,并通常在一个机器周期结束时写入到寄存器存储器228中。
在本发明的当前实施例中,流水线控制逻辑218将认定异常事件处理信号以指出已发生了异常事件。例如,可以根据外部中断请求产生异常事件。在数据处理环境中产生异常事件是技术上公知的,这里将不再更详细地讨论。当发生异常事件时,数据处理器3不再执行正常的处理。相反,数据处理器3必须存取和执行一个特殊的异常事件处理例程。在从正常处理到异常事件处理的过渡过程中,数据处理器3的CPU2建立一个异常事件堆栈帧,它在系统存储器中保存了当前处理器信息。实际上该存储器可以是存储器6、从动模块12、从动模块13或与E总线相连的设备。
在存储于异常事件堆栈帧的当前处理器信息当中包括一个在发生异常事件时正被执行指令的当前地址。该异常事件堆栈帧置于驻留在系统存储器中当前系统堆栈的“顶”部。如前已讨论的那样,由于操作数可以驻留在任何字节边界,所以在检测到异常事件时,硬件堆栈指针可以指向任何字节边界。在本发明的当前实施例中没有采用操作数未对准单元,如果在开始异常事件处理时,堆栈指针未对准,则异常事件堆栈帧的试图产生将导致另一异常事件,并引起灾难性双重错误状态,导致系统操作停止。
为保证在检测到异常事件时,不会由于未对准堆栈指针导致系统性能被破坏而停机,本发明已采用了一种电路和方法来改正这种情况。当在本发明中发生异常事件时,数据处理器3的CPU2首先检验堆栈指针寄存器244的当前值。然后CPU2自动地将它对准到当前值之下最近的模4为0地址。一旦完成这一调整,CPU 2在系统存储器中存储一个8字节堆栈帧,它包括异常事件的类型和位置。该8字节堆栈帧包括一个4位格式字段,该字段包括在发生异常事件时有关堆栈指针对准情况的信息。下面将更详细地描述这一操作。
当产生一个异常事件时,流水线控制逻辑218认定异常事件处理信号并把它提供给取操作数电路212。再有,流水线控制逻辑218并发执行一个异常事件序列以把当前处理器状态存于系统存储器中它可能是存储器6、从动模块12、从动模块13或通过E-总线相连的其他设备。在执行这个异常事件序列过程中,流水线控制逻辑218使取操作数电路212和地址产生/执行电路214在K-总线25上产生写周期。这个写周期将把构成前述堆栈帧的必须信息写入存储器6。请注意,堆栈帧一词和异常事件堆栈帧一词可以互换使用。
当产生堆栈帧时,流水线控制逻辑218首先提供控制信息,使寄存器存储器228(如图4所示)的堆栈指针寄存器244向多路转换器246输出调整的堆栈指针值。该调处理包括通过将低两位置0将堆栈指针寄存器244的当前值截断成模4余0。该截断操作由与门272和274完成。在正常处理时,异常事件处理信号是求反的,于是与门272和274仅简单地传送堆栈指针寄存器244低两位SP(1∶0)的当前值。一旦检测到异常事件并且流水线控制逻辑218认定异常事件处理信号,则与门272和274的输出被强迫置0,这样产生模4余0地址。此外,堆栈指针寄存器244向其他执行机构256输出最低两有效位,SP(1∶0)。向多路转换器246提供经调整的堆栈指针,它将该值在A输出上传送给多路转换器2230,然后该值被装入寄存器A234。
在经调整的堆栈指针值被从寄存器存储整器228传送给寄存器A234时,多路转换器226产生一个常数“-4”。然后,这个常数“-4”被送到多路转换器232并存于寄存器B236。在这一点,经调整的栈指针值存于寄存器A234,而常数“-4”存于寄存器B236。经调整的堆栈指针值对应于图7所示各例中的“X”。
接下来,寄存器A 234通过RA信号向地址产生/执行电路214的多路转换器250提供经调整的堆栈指针值。类似地,寄存器B236通过RB信号向地址产生/执行电路214的多路转换器252提供常数“-4”。然后ALU254对这两个值求和,提供一个值为经调整的堆栈指针值(X)加常数-4(X-4)的输出。ALU254的输出通过执行结果信号提供给多路转换器258。X-4的值从多路转换器258提供给多路转换器222作为操作数地址信号。多路转换器222向寄存器208提供操作数地址信号。用这种方式,产生用于K-总线25周期的操作数地址,以完成第一个32位异常事件堆栈帧存储。
X-4地址值还在执行结果信号上提供给多路转换器230,然后送给寄存器A234。在下一个时间周期开始处,寄存器A234存储X-4值,而寄存器B236存储常数-4。流水线控制逻辑218再次提供控制信号,使寄存器A234能通过RA信号向地址产生/执行电路214的多路转换器250提供X-4值。类似地,寄存器B236通过RB信号向地址产生/执行电路214的多路转换器252提供常数-4。其后ALU254对这两个值求和,提供一个值为当前堆栈指针值(X-4)加-4(X-8)的输出。ALU254的输出通过执行结果信号提供给多路转换器258。多路转换器258向多路转换器222提供操作数地址信号,然后再提供给寄存器208。用此方式,对于K总线25周期产生操作数地址,以形成第二个32位异常事件堆栈帧存储。此外,在执行结果信号上提供的X-8值被写入堆栈指针寄存器244,以在异常事件堆栈帧写结束时反映系统堆栈顶状态。
在产生写数据所需地址的同时,还必须存取要存储在异常事件堆栈帧中的数据。在X-4地址值被形成之时,PC值被提供给其他执行机构256。PC值是出错指令的程序计数器值。该PC值定义了当前操作数执行流水线220中指令的地址,该值从取指令电路212中存取。
当产生了程序值并通过PC信号提供给其他执行机构256时,该PC值也和状态寄存器(SR)值、格式(F)值、以及向量(V)值一起提供给多路转换器260。SR值是响应地址产生/执行逻辑214的ALU254所产生的状态信息而产生的。由ALU254产生的状态信息作为执行结果信号输出给逻辑电路253。逻辑电路253处理这个状态信息以提供一个状态值存于状态寄存器257。然后由状态寄存器257向其他执行机构256通过SR值提供该状态值。
由流水线控制逻辑218产生一个向量值用以代表当前异常事件的类型。该值以后被用于访问定义异常事件处理软件例程的指令地址的向量。
格式值是一个4位格式,它确定了在异常事件被认定之时堆栈指针的对准。这个格式值是由逻辑电路259在发生异常事件时响应堆栈指针值的第0位和第1位,即SP(1∶0)而产生的。下表指出堆栈指针值与逻辑电路259产生的格式值之间的关系
表1所以,参考表1,当SP(1∶0)有二进制值00时,逻辑电路259提供的格式字段有相应的二进制值0100。类似地,当SP(1∶0)有二进制值01,逻辑电路259提供的格式字段有二进制值0101。当SP(1∶0)有二进制值10时,逻辑电路259提供的格式字段有二进制值0110。再有,当SP(1∶0)有二进制值11时,逻辑电路259提供的格式字段有二进制值0111。一旦处理程序例程处理了异常事件,处理器将使用这个异常事件堆栈帧格式字段将堆栈寄存器244恢复成其原始的值。
当处理异常事件时,流水线控制逻辑218提供控制信息(这里未画出)以使多路转换器260能向寄存器262提供SR、PC、格式(F)、以及向量(V)值之一。首先,流水线控制逻辑218提供控制信息,它使多路转换器260能选择和向寄存器262传送PC值。通过操作数写数据信号,PC值从寄存器262提供给缓冲器216。然后,缓冲器216通过KWDATA(K总线写数据)信号把PC值驱动到K-总线25。其后,PC值存储在存储器中的一个位置,该位置由第1时间周期中并发产生的X-4之值确定。
在第2时间周期期间产生X-8地址,期间流水线控制逻辑218提供控制信息使多路转换器260能够选择的向寄存器262传送SR、格式(F)及向量(V)值。由寄存器262把SR、格式及向量值按图7所示顺序连接起来并通过操作数写数据信号提供给缓冲器216。然后,缓冲器216通过KWDATA(K总线与数据)信号把这个连接起来的值驱动到K-总线25上。其后,格式/向量/状态寄存器值存储在系统存储器中的一个位置,该位置由第2时间周期中并发产生的X-8之值确定。
在产生了异常事件堆栈帧并把PC、SR、格式以及向量之值存于系统存储器中之后,便由数据处理器3处理异常事件。在这一点上,由流水线控制逻辑218提供的向量值被提供给取操作数电路212中的多路转换器226。向量值由多路转换器226提供给多路转换器230,然后存储在寄存器A234中。向量值由寄存器A234通过RA信号提供给多路转换器250。在向量产生的同时,在其他执行机构256读取向量基本寄存器(VBR)并通过执行结果信号发送给多路转换器232。VBR具有在系统存储器中重新定位异常事件向量表的能力。通过多路转换器232的VBR值进行门控并装入寄存器B236中。然后向量值与VBR值在ALU254中相加从而产生一个向量地址,它对应于所产生的异常事件。由ALU254提供的和数被提供给多路转换器258。当由流水线控制逻辑218向多路转换器258提供适当控制时,多路转换器258提供一个向量地址作为操作数地址信号。然后把操作数地址信号提供给多路转换器222。该向量数从多路转换器222由缓冲器208作为KADDR信号输出。KADDR信号由K-总线25使用以读出所希望的异常事件向量。
被取向量通过KRDATA信号传送给缓冲器216。被取向量由KRDATA缓冲器信号从缓冲器216中提供给取操作数电路212。KRDATA缓冲器信号与执行结果信号相连以传送被取向量。然后该被取向量被提供给多路转换器230并存于寄存器A234。通过RA信号,把被取向量从寄存器A234提供给多路转换器250。多路转换器250把被取向量传送给ALU254,在那里在流水线控制逻辑218的控制下它与多路转换器252产生的零求和。ALU254必须将被取向量在执行结果信号上传送,在此它将输入提供给多路转换器258,然后又被传送给多路转换器222。该被取向量然后装入KADDR寄存器208。该地址代表用于异常事件处理程序起始指令的取指令地址。该异常事件取指令地址从寄存器208通过KADDR信号提供给K总线25。
随着处理异常事件的软件程序最初指令被取出而且数据被取出,由KRDATA信号把该数据提供回CPU2。特别是KRDATA信号从缓冲器216提供给取指令电路204。然后由多路转换器219(作为选择可使用FIFO指令缓冲器206)对取出指令进行门控,以将取出的指令装入操作数执行流水线220。上文中详细描过的处理过程发动和执行处理异常事件的软件程序。
当处理异常事件的软件程序完成时,数据处理器3将停止异常事件处理并返回正常处理。为了返回正常处理,必须恢复异常事件发生之前数据处理器3操作所处前后关系(context)。所以,程序计数器、状态寄存器、以及堆栈指针都必须恢复到它们在异常事件发生之前的值。把异常事件堆栈帧唯一地用于存储格式字段,而该格式字段确定了在异常事件发生时刻堆栈指针的对准,这对于正确和有效地把数据处理器3恢复到一个原来状态是至关重要的。
处理异常事件的软件程序中最后一条指令必须是RTE(由异常事件返回)指令。当执行RTE指令时,二个存于异常事件堆栈帧(如图7所示)上的长字值将被取出。为了取出这些值,以寄存器存储器228的堆栈指针寄存器244中取出一个当前堆栈指针值。请记住,在软件执行程序开始时,堆栈指针值是X-8。尽管在异常事件处理例程的执行过程中,必须使用堆栈区域用于暂时存储,但堆栈指针必须保持为X-8,向RTE指令开始执行时那样。通过A信号将堆栈指针值提供给要进行通信的多路转换器246。A信号被提供给多路转换器230,然后传送给寄存器A234。与此同时,多路转换器226产生一个常数值“+4”。常数值4从多路转换器226传送到多路转换器232并存于寄存器B236。
在下一个时间周期,寄存器A 234的内容(即X-8之值)被RA信号提供给多路转换器258。然后,多路转换器258通过操作数地址信号把X-8之值提供给多路转换器222。从多路转换器222取出的X-8值被存于寄存器208。其后这个X-8之值通过KADDR信号提供给K-总线25。然后在X-8之值所指定的系统存储器中的地址位置存取数据。
在形成操作数地址X-8的同时,分别将包含X-8值的寄存器A234和包含+4值的寄存器B236传送给多路转换器250和252。在流水线控制逻辑218提供的控制下,多路转换器250和252将X-8值和常数4送到ALU254。ALU254将两值相加产生X-4。将该结果送给执行结果信号,它将X-4值送给多路转换器230。多路转换器将X-4提供给寄存器A234。
参考图7,当由X-8之值指定的地址被存取时,格式(F)、向量(V)、及SR值被存取。格式、向量、及SR值通过KRDATA信号提供给缓冲器216。从缓冲器216,通过缓冲器KRDATA信号和执行结果信号、格式、向量和SR值被提供给取操作数电路212的多路转换器232。然后,这些值进入寄存器B236。从寄存器B236,通过RB信号,格式、向量及SR值被提供给多路转换器252。其后,寄存器B236的整个内容不加修改地穿过ALU254并由逻辑电路253处理以提供一个状态值。然后该状态值被存于状态寄存器257中以表示发生异常事件时数据处理器3的操作前后关系。类似地,从寄存器B236,通过RB信号,格式值被提供其他执行机构256。其后该格式值被存于寄存器261。
在下一时间周期中,存于寄存器A234的X-4值被RA信号提供给多路转换器258。RA信号把X-4值传送给多路转换器222,然后再传送给寄存器208。然后X-4值通过KADDR信号提供给K-总线25。然后在由X-4值指定的系统存储器中地址位置存取数据。
再参考图7,当由X-4值指定的地址位置被存取时,程序计数器(PC)值被存取。PC值通过KRDATA信号提供给缓冲器216。从缓冲器216,通过缓冲器KRDADT信号,PC值被提供给取操作数电路212,将PC值通过执行结果信号送到多路转换器233,在此传送并装入寄存器B236。此时,在这一点寄存器A234包括X-4值,而寄存器B236包括新的程序计数器地址。
在下一时间周期,包含新的程序计数器地址的寄存器B236值被送入多路转换器258。该地址然后通过操作数地址信号送入多路转换器222,在此将其装入寄存器208。该地址定义指令地址以便在处理异常事件之后继续执行。然后使用KADDR寄存器208由系统存储器访问所需的指令以继续执行程序。该所需指令在KRDATA上返回,通过缓冲器216送入取指令电路204。
在下一时间周期,通过执行结果信号由寄存器261中取出格式值。然后将该值发送到多路转换器232并装入寄存器B236中。此时,寄存器A234还包含X-4值,而寄存器B包含格式值。在下一时间周期,多路转换器250和252的内容都送到ALU254,它对两值求和,即X-4+格式值。
该求和又产生异常事件发生时的原始堆栈指针值。该ALU输出通过执行结果信号存储在寄存器存储器228的堆栈指针寄存器244中作为当前的堆栈指针。
此时,处理器3已完全将机器状态恢复到异常事件发生时其原始值取指令流水线210从恢复的程序计数器值取指令,并且堆栈指针寄存器244已恢复到异常事件发生时其原始值。本发明的自对准特点使堆栈指针在接收到异常事件时自动将其本身对准到当前堆栈指针设置之下的最接近于模4余0的地址。当已处理了异常事件并且处理器3开始按正常操作方式运行,堆栈指针必须回到其原始值,即使在接收到异常事件时该值未对准。对堆栈指针的中间值X-4提供附加格式字段是使堆栈指针返回其初始值的唯一有效方法。
考虑已知基准的下列例子指令地址操作码$00005064 mov.b(a0),-(sp)#由源拷贝字节到堆栈$00005066 bra.b L%1 #在L%1处继续在执行地址$00005064处指令之前,堆栈指针的内容是$00006ed0。地址$00005064的操作码mov.b由寄存器a0内容定义的源位置将一字节数据拷贝到系统堆栈并将堆栈指针减“1”。在该指令结束时,堆栈指针值是$00006ecf。
假设,然后有一中断请求到来,使地址$00005056处的指令的执行延期,以服务于该中断请求。当处理该中断异常事件时,产生下列异常事件堆栈帧地址 数据$00006ec4 $70780008 #格式=$7 向量=$078,状态=$0008$00006ec8 $00005066 #指令地址$00006ecc $------aa #由mov.1操作码拷贝的数据其中,在异常事件处理软件程序开始时堆栈指针寄存器值是$00006ec4。
在为中断请求服务之后,异常事件处理器执行RTE指令。在堆栈顶部的32位数据被取出,以及按前所述由CPU2处理的格式、向量和SR字段。$00006ec8的中间地址X-4被形成并临时存储在寄存器A 234中。由位置$00006ec8取出指令地址$00005066,并使用该地址建立新的指令流。同时在ALU 254中对保存的格式字段($7)及寄存器234的内容($00006ec8)求和,以形成恢复的堆栈指针($00006ec8+$00000007=$00006ecf),将其装入寄存器存储器22 8的堆栈指针寄存器244中。然后控制继续执行地址$00005066处的指令。
概括地说,本发明提供一种数据处理器以及操作一个数据处理系统的方法,在该系统中当把硬件支持堆栈操作数对准作为一种可选功能时,可以使用单个系统堆栈指针来建立监督者和用户堆栈操作二者的记录。该单个系统堆栈指针被用作为自对准堆栈指针,它把自己对准到当前地址设置之下的最近的模4余0地址,从而即使当没有硬件支持未对准操作数时也不会发生系统错误。一旦发生了自动对准,本发明的数据处理器便在一个异常堆栈帧中存储一个4位格式字段,以指示关于出错时堆栈指针对准的信息。当已经对异常事件提供了服务并执行从异常事件返回(RTE)指令时,处理器使用这个存储在异常事件堆栈帧中的4位格式字段,以把堆栈指针恢复到异常事件发生时它的原来值。
这里描述的本发明的实现只是以举例方式提供的,而且可以有许多其他实现来执行这里所描述的功能。例如,产生并用于建立异常事件堆栈帧地址的常数不限于是-4,也可以是数据处理系统5的设计者或使用者所希望的任何数。
尽管已参考具体实施例图示和描述了本发明,但对于本行专家而言,可以有进一步的修改和改进。所以要理解本发明不限于所展示的特定形式,所附权利要求覆盖了不偏离本发明范围的所有修改。
权利要求
1.一个数据处理系统的运转方法,其特点在于如下步骤接收表明已发生第一预定状态的第一信号;从堆栈指针寄存器中取出当前地址值;将当前地址值对准到当前地址值以下的最近的模4余0(0-modulo-4)地址;以及在一存储器中存储-格式字段,该格式字段指明在接收表明已发生第一预定状态的第一信号时当前地址值对准的方式。
2.权利要求1的方法,这里第一预定状态是异常事件处理状态。
3.权利要求1的方法,这里的对准步骤进一步包括步骤否定从堆栈指针寄存器中取出的当前地址值的预定部分。
4.权利要求1的方法,其特征还在于如下步骤接收表明已发生第二预定状态的第二信号;从存储器中取出格式字段;并把当前地址值恢复到堆栈指针寄存器。
5.一种数据处理器,其特征在于总线装置,用于提供多个地址值和多个数据值;控制装置,用于确定何时已发生操作中的异常事件并响应这一操作异常事件而提供异常事件处理信号;一个寄存器,用于指明当发生操作异常事件时存取的当前地址值;一个逻辑电路,与寄存器相连以接收当前地址值的第一部分,与控制装置相连以接收异常事件处理信号,该逻辑电路有选择地修改当前地址值以构成调整后的地址值;以及一个格式产生电路与寄存器相连以接收至少是当前地址值的第一部分,该格式产生电路修改当前地址值的第一部分,以产生一个堆栈对准值,用以指示当操作中已发生异常事件时当前地址值的对准。
6.权利要求5的数据处理器,其特点在于一个存储器与格式产生电路相连以存储堆栈对准值。
7.权利要求5的数据处理器,这里,当操作中的异常事件已经发生并已被处理完毕时,当前地址值被存储于该寄存器。
8.权利要求5的数据处理器,这里被调整的地址值是一个小于当前地址值的最近一个模4余0的地址。
9.一种数据处理器,其特点在于控制装置,用于产生第一中断信号;一个堆栈指针寄存器,用于存储和提供当前地址值;一个逻辑电路,与控制装置相连以接收第一中断信号,还与堆栈指针相连以接收当前地址值的第一部分,该逻辑电路建立一个调整了的地址值;以及一个转换电路,与堆栈指针寄存器相连,以接收当前地址值的第二部分,该转换电路产生一个格式字,该格式字与调整过的地址值求和时将产生当前地址值。
10.权利要求9的数据处理器,这里的格式字段存储于数据处理器的存储器中。
11.权利要求9的数据处理器,这里的格式字段从数据处理器的存储器中取出并用于把当前地址值恢复到堆栈指针寄存器中。
12.权利要求9的数据处理器,这里被调整的地址值是小于当前地址值的最近的模4余0地址值。
全文摘要
当堆栈操作未对准的硬件支持作为任选部件时,处理器利用单个系统堆栈指针建立监控器和用户二者的堆栈操作的记录。单个系统堆栈指针作为自对准堆栈指针用于把它自己自动地对准到低于当前地址的最近的模4余0地址,从而即使在没有硬件支持未对准操作数的情况下也不会发生对准系统错。一旦发生了自动对准,数据处理器在异常事件堆栈帧中存储一个格式字段以指示在出错时刻堆栈指针对准的有关信息,当对异常事件的服务完成时,把堆栈指针恢复到原来值。
文档编号G06F9/48GK1168505SQ9711052
公开日1997年12月24日 申请日期1997年4月14日 优先权日1996年4月15日
发明者约瑟夫·C·西尔塞罗, 杰弗逊·高金科 申请人:摩托罗拉公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1