首页> 中国专利> 带外部协处理器可访问的上下文切换寄存器组的RISC处理器

带外部协处理器可访问的上下文切换寄存器组的RISC处理器

摘要

RISC处理器包括序列发生器(12)、寄存器ALU(RALU)(14)、数据RAM(16)和协处理器接口(18)。序列发生器包括一个通过协处理器接口从外部存储器引导的N×32位指令RAM。RALU包括用于存储三个上下文的四端口寄存器文件(40)和ALU(30)。本发明的ISA(指令集体系结构)支持多达8个协处理器。本发明的重要特点是提供多组通用寄存器来存储若干个上下文。按照当前的最佳实施例,提供作为RALU一部分的三组通用寄存器,并提供用于在该三组通用寄存器之间切换的新的操作码。有了多组通用寄存器,上下文切换就能在三个处理周期内完成。此外,在一组通用寄存器被ALU使用的同时,另一组通用寄存器可以由协处理器进行装载。按照当前的最佳实施例,三组通用寄存器的每组都包含28个32位寄存器。此外,按照该当前的最佳实施例,提供四个32位寄存器组成的一组寄存器供在任何上下文中使用。该公用寄存器组被用来存储由一个以上的上下文使用的信息。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2006-06-14

    专利权的终止未缴年费专利权终止

    专利权的终止未缴年费专利权终止

  • 2003-11-12

    授权

    授权

  • 2001-10-24

    实质审查的生效

    实质审查的生效

  • 2001-08-01

    公开

    公开

说明书

本发明涉及精简指令集计算机(RISC)处理器体系结构。更具体来说,本发明涉及一种设计成实质性提高实时I/O密集的应用中的处理速度的处理器体系结构。

提高微处理器吞吐量的许多已知方法中,有一种方法称为“流水线处理”。流水线处理通过调节每个后继指令的时间差来重叠若干指令的执行。为了有效地实现流水线处理,处理器指令集中的每个指令最好使用相同数量的的时钟周期。例如,如果每个指令完全相同地使用n个时钟周期,就可以建立一个n条指令的流水线,流水线中每条后继指令与前一条指令偏移一个时钟周期。在这样一种流水线处理的系统中,处理器每个时钟周期有效地处理整个一条指令。RISC处理器设计的一个成就是定义了一个其中的所有或大多数指令的执行要求一个统一的周期数的指令集。关于RISC的整个背景的讨论,可见于“MIPS R-2000 RISCArchitectue”(MIPS R-2000 RISC体系结构)(G.Kane著,PrenticeHall出版,1987年),这里特此全文引用作为参考。

一种流行的现有技术水平的RISC体系结构是MIPSⅠ指令集体系结构(ISA)。MIPS是一种简单而高效的RISC体系结构,吸引了众多的第三方支持。MIPSⅠ和MIPSⅡISA的详细内容载于“MIPS RISCArchitecture”(MIPS RISC体系结构)(G.Kane和J.Heinrich著,Prentice Hall出版,1992年),这里特此全文引用作为参考。

MIPS R-2000处理器分5个部分执行指令(每个时钟周期一部分),指令流水线是个5阶段的流水线,每个指令部分对应一个阶段。这5个指令部分是取指(IF)、边译码指令边从寄存器读取操作数(RD)、对指令操作数执行操作(ALU)、访问存储器(MEM)、向寄存器回写结果(WB)。现有技术水平的图1中表示的MIPS流水线中的5条指令彼此偏差一个时钟周期。如图1中所示,在第1条指令向寄存器回写结果(WB)的周期中,第2条指令在访问存储器(MEM),第3条指令在进行对指令操作数的操作(ALU),第4条指令在一边译码指令一边从寄存器读取操作数(RD),第5条指令在从指令RAM提取指令(IF)。关于MIPS流水线的其它背景材料,可见于“ComputerOrganization and Design:the Hardware/Software Interface”(计算机组织与设计:硬件/软件接口)(D.A.Patterson和J.L.Hennessey著,Morgan Kauffmann出版,1994年),这里特此全文引用作为参考。

RISC体系结构中的指令流水线取得了一定程度的操作“并行性”。在图1中所示的例子中,一旦流水线中充满,5条指令就并行执行。尽管每条指令仍然需要5个时钟周期,每个时钟周期都能加入一条新的指令,使流水线保持充满。只要流水线是充满的,RISC处理器就能继续以每个时钟周期一条指令的有效速度处理指令-如果没有停顿周期、空操作(NOP)指令或中断的流水线的话。

本领域的熟练人员明白,对加载(load)、转移(jump)、分支(branch)指令来说存在着固有的延迟,有些指令可能会要求尚不能使用的数据。这些状态被称为处理相关性。解决相关性的一种方法是停顿或延迟流水线。(R-2000所用的)另一种方法是在流水线中插入NOP(空操作)指令来补偿指令之间的延迟。NOP指令的插入是在对程序进行编译时由软件汇编程序进行的。应当明白,异常事件(例如中断)干扰流水线的顺畅流动。例如,当R-2000检测到异常时,导致该异常的指令就被中止,并且流水线中所有已经开始执行的指令都被终止。发生向指定的异常处理程序的转移。在该异常被处理之后,处理器返回到发生异常时正在执行的指令的前一条指令。中断处理侵占处理器周期,降低系统的效能。如果中断处理的效率不高,流水线处理的效能优势就会丧失殆尽。

包括RISC处理器在内的大多数现代处理器都支持多重并行进程(multiple simultaneaus processes)和/或多线程进程。当在单一处理器上运行若干不同的程序时(多重并行进程)或者当运行一个多线程进程时,处理器(或操作系统)必须要从一个程序或线程(上下文)切换到另一个。上下文切换(context switching)经常是按某种优先调度策略来进行的,这种策略赋予有些进程以多于其它进程的处理时间。从理论上说,上下文切换能改善系统效能,因为每当有进程或线程因等待I/O设备而停顿时就切换到新的上下文,并且在停顿的进程或线程准备好运行时就返回到该进程或线程。然而实际上,上下文切换往往会妨碍达到最佳的系统效能,因为必须要用额外的处理周期(就MIPS处理器而言,要128个周期)来切换上下文,而在上下文切换期间不执行进程指令。在上下文切换期间,描述当前进程的状态的所有立即寄存器(也称通用寄存器,即从处理器的算术逻辑单元(ALU)直接读取数据或由ALU直接写入数据的寄存器)的内容,先要被保存到RAM中,然后再切换到另一个进程。保存了当前状态(上下文)之后,先将下一个上下文从RAM装入各寄存器,然后,下一个进程才能运行。这种非生产性的处理器活动(保存和恢复寄存器内容)能负面地影响总体性能,在上下文切换在很大程度上受I/O活动控制的实时事件驱动的系统中,尤其如此。

即使是运行一个单线程程序,上下文切换也可能经常发生。例如,MIPS R-2000 ISA有两种工作状态:用户状态和核心状态。这些状态的每一个都是一种不同的上下文,程序员可以建立若干个“用户状态”上下文,每个对应一个不同的线程。然而,即使是只有一个用户状态上下文,也会在用户状态上下文与核心状态上下文之间频繁地发生上下文切换。按照MIPS ISA,每当有异常被检测到时,CPU就进入核心状态,并保持在核心状态,一直到执行了一个“从异常恢复”(RFE)指令。所以,在事件驱动的应用中,会频繁发生上下文切换,不管处于用户状态中的线程的数量是多少。

RISC处理器的较高速度,使它们成为包括SONET和ATM应用在内的各种电信应用的理想选择。然而尽管RISC处理器功能强大,SONET和ATM电信的极高的需求,消耗了RISC处理器的资源,在中断处理和上下文切换方面尤其如此。应当明白,电信应用总体上来说几乎完全是实时事件驱动的,通过SONET和ATM而提供的高容量的宽带通信更是如此。

因此,本发明一个目的是提供一种特别能很好地适用于电信应用的处理器体系结构。

本发明另一个目的是提供一种特别能很好地适用于实时事件驱动的应用的处理器体系结构。

本发明再一个目的是提供一种极其适用于中断处理和上下文切换的处理器体系结构。

本发明还有一个目的是提供一种改进的RISC处理器中的上下文切换体系结构,它易于受到第三方产品的支持。

按照以下将作详细讨论的这些目的,本发明的RISC处理器类似于MIPS R-2000处理器,但有一些修改,这些修改旨在为在诸如SONET和ATM应用等电信应用中的使用而优化处理器和为实时事件驱动应用而总体上优化其性能。更具体来说,本发明的处理器总的包括一个序列发生器、一个寄存器ALU(RALU)、一个可选的(最好有的)数据RAM和一个协处理器接口。该序列发生器包含一个N×32位指令RAM(IRAM),它是通过协处理器接口从外部存储器引导的(booted)。该RALU包含一个ALU和一个多端口寄存器文件(register file),后者是以被安排成能适应三个上下文的多个通用寄存器的形式实现的。按照一个当前的最佳实施例,该多端口寄存器文件包括3组通用寄存器,提供一个新的操作码(opcode)用于在这几组通用寄存器间切换。有了多组通用寄存器,上下文切换就能在3个处理周期内完成。此外,一组通用寄存器可以在另一组通用寄存器由ALU使用的同时被协处理器装入内容。按照一个当前的最佳实施例,该3组通用寄存器每一组都包含28个32位寄存器。此外,按照该当前的最佳实施例,提供一组4个32位的公用寄存器用于任何上下文。该组公用寄存器最好被用来存储由一个以上的上下文使用的信息。有了这3组通用寄存器,本发明的处理器服务中断的速度大约比标准的MIPS R-2000处理器快10-12倍。

按照本发明的最佳实施例,该数据RAM最好是M×32位的,是可按字节寻址的,并且最好是用异步SRAM实现。本发明的RISC处理器被设计得能在大多数MIPS ISA内工作,其中忽略了一些指令,同时添加了若干新指令。相应地,依照MIPS ISA,将序列发生器按协处理器0对待,协处理器1则为浮点单元保留。MIPS ISA只提供2个额外的协处理器(这样总共就有4个),而本发明的ISA则支持多达6个额外的协处理器(这样总共就有8个)。按照本发明,处理器的所有外部逻辑都能通过这些(6个)协处理器接口其中之一被访问。

处理器的流水线、块间通信和同步方案被设计得能在出自VHDL模型的ASIC实现中工作,后者采用大多数具有本文所述增强功能的MIPSⅠISA(除了不含那些与电信和其它I/O密集型应用无关的功能部件)。本发明的ISA中的大多数新指令涉及协处理器功能、异常处理和上下文切换。

对本领域的熟练人员来说,参考结合各附图所作的详细说明,本发明的其它目的和优点将变得显而易见。

图1是现有技术水平的MIPS处理器中的流水线指令处理的示意图;

图2是按照本发明的处理器的主要功能块的示意框图;

图3是图2的RALU的主要功能块的示意框图;

图4是图2的序列发生器的主要功能块的示意框图;

图5是图2的协处理器接口的主要功能块的示意框图;和

图6是本发明的备用(alternate)上下文接口的关键信号的波形的时序图。

现在参看图2,按照本发明的处理器10总的包括序列发生器12、寄存器ALU(RALU)14、数据RAM 16和协处理器接口18,它们每个都与32位数据总线20相连。数据RAM 16对该处理器的工作来说并非是必不可少的,但对于大多数应用来说最好采用。该数据RAM最好是M×32位的,是可按字节寻址的,并且最好是用异步SRAM实现。序列发生器12通过32位指令总线22与RALU 14和协处理器18相连,借此使序列发生器从IRAM提取的指令能被RALU和协处理器使用,下文将对此作详细说明。如果提供了数据RAM 16,则它要由RALU 14通过控制链路24控制。条件指令和陷阱(traps)的标志由该RALU通过标志线路26传送给序列发生器12。应当明白,序列发生器12、RALU 14和协处理器接口18各分别有时钟/复位输入28、30和32。此外,序列发生器还有一个中断请求输入34以及一个协处理器条件标志输入36。也应当明白,协处理器接口18配备有用于与协处理器连接的I/O线路38。

如上所述,按照本发明的当前最佳的处理器10在MIPS R-2000ISA的基础上作了一些重要改变。相应地,该处理器采用5个流水线阶段,这与图1的现有技术中所示的基本相同。不过每个阶段的助记名稍微有所变化。这里所指的5个指令阶段是:取指(IF)、取源(SF)、执行(EX)、访问存储器(M)、写回(WB)。此外,正如MIPS ISA的情况一样,序列发生器按协处理器0被寻址,协处理器1则被假设为浮点单元。按照本发明当前的最佳实施例,不采用浮点单元,而提供6个额外的协处理器地址(2-7)来支持6个额外的协处理器接口和协处理器。

现在转看图3,按照本发明的RALU 14总的包括:一个包含多个通用寄存器的寄存器文件40,多个数据路径多路转换器和寄存器42、一个算术逻辑单元(ALU)44、和一个RALU控制器46。特别地,在最佳实施例中,寄存器文件40最好包括(如图所示并如下文结合表1更详细说明的那样)3组通用寄存器40a、40b、40c以及1组公用寄存器40d。对寄存器文件40的读访问是通过两个端口提供的:A端口48和B端口50。这保留与MIPS ISA的兼容,由此能存取操作数A和B。通过这些端口被读取的寄存器,是由序列发生器(图2中的12)用指令中固定的5位(MIPS兼容的)地址字段的内容通过地址线52、54寻址的。来自序列发生器(图2中的12)的指令的其它字段在IF阶段开始时由RALU控制器46接收并在SF阶段开始时由RALU译码。从通用寄存器40提取的操作数被传送到寄存器AREG和BREG供ALU44在EX阶段中使用,在EX阶段中,由ALU 44从RALU控制器46接收的译码后的指令被ALU执行。立即指令(inst2)被通过与控制器46的连接56提供给ALU。如果要读取数据RAM或者向数据RAM写入指令的结果,ALU 44就通过线路24对数据RAM寻址。更具体来说,对于装入(load)和存储(store)指令来说,由ALU在EX阶段中计算出数据RAM地址“基址+偏移量”,其中基址是从AREG中提取的,偏移量是在56从inst2提取的。表示读、写、符号和字节使能(byteenable)的信号是在M阶段开始时施加到数据RAM的。就装入指令而言,在M阶段的结尾将数据RAM16的数据通过数据总线20返回到RALU。就存储指令而言,在SF阶段将要存储的数据从B端口读入BREG,再将数据通过ALU 44传送到CREG1。然后,在M阶段中,将数据从CREG1施加到数据总线20上。概括来说,所有从RALU外出的数据都经过CREG1,包括由线路26(26b)传送到序列发生器的溢出标志V。在EX阶段的结尾,数据输出被写到CREG1。如果数据最终目的地是某个通用寄存器,就在M阶段的结尾将该数据转移到GREG2,然后在WB阶段的结尾通过C端口将该数据写到该寄存器。要被写入数据的寄存器的地址,是由RALU控制器46通过线路58选择的,写操作则是通过线路60启动的。按照一个当前的最佳实施例,在60提供3个线路,每个对应用于3个寄存器组中每1组的一个单独的写使能信号(c_wen0、c_wen1、c_wen2)。读A端口而产生的转移地址和标志,要通过线路26(26a)直接从AREG传送到序列发生器,以便保留MIPS兼容性。此外,MIPS还要求有某些直接通往AREG和BREG的路径,为简洁起见,图3中没有表示它们。这些路径包括从ALU输出、CREG1、数据总线20以及从CREG2出发的路径。

如上所述,本发明的处理器的最重要方面之一是将寄存器文件40安排成3组通用寄存器40a、40b、40c(表1)和1组公用通用寄存器40d。标准的MIPS处理器有32个(##0-31)通用寄存器,每个寄存器是32位宽的。按照本发明的对通用寄存器的安排在表1中表示。

    #    寄存器地址    40a Con_sel=00    40b Con_sel=01    40c Con_sel=10   31    11111上下文0_通用寄存器31上下文1_通用寄存器31上下文2_通用寄存器31   30    11110上下文0_通用寄存器30上下文1_通用寄存器30上下文2_通用寄存器30   ·   ·   ·     ·     ·     ·    ·    ·    ·    ·    ·    ·    ,    ,    ,    5    00101上下文0_通用寄存器5上下文1_通用寄存器5上下文2_通用寄存器5    4    00100上下文0_通用寄存器4上下文1_通用寄存器4上下文2_通用寄存器4    3    00011    通用寄存器3    2    00010    通用寄存器2    1    00001    通用寄存器1    0    00000    通用寄存器0(硬连线到0的)

                    表1

提供每组有28个(##4-31)32位宽的寄存器的3组寄存器用于三种不同的上下文中。这3组“上下文通用寄存器”的任何一组,都是通过本文称为CXTS(上下文开关)的新指令或操作码选择的。该CXTS指令是个立即指令,指令中有一个两位的上下文代码。这个代码可对多达4组“上下文通用寄存器”寻址。不过,按照当前最佳的实施例,只使用3组“上下文通用寄存器”。RALU控制器解释该立即CXTS指令,通过图3的线路62确立两位的“Con_sel”(上下文_选择)代码,该代码选择适当的寄存器集。Con_sel代码可以以若干不同的方法实现。按照当前最佳的实施例,将寄存器组集(bank ofregister sets)安排得使得每一个被放弃选择的集合忽视从序列发生器和RALU控制器发出的地址信号。另一种能在其中实现Con_sel代码的方法是在地址线与每组寄存器间提供一个多路输出选择器,该多路输出选择器由Con_sel代码控制,将地址线“切换”到所选择的寄存器集。再另一种实现Con_sel代码的方法是控制与A、B和C端口相连的多路转换器。按照这个实现,所有各组寄存器都接收地址并对地址起作用,但是只有所选择的寄存器集的端口才被连接到ALU。这个实现的一个缺点是不可能进行后台上下文寄存器的装入。本领域的熟练人员明白,可以用图3中虚线内的AMUX和BMUX来完成这个实现。然而,也可以将AMUX和BMUX连接到ALU的V输出alu,作为一个“潜通路”,用来将ALU的输出重定向返回到ALU的输入端,需要的话,绕过寄存器文件40,以改善性能。

除了上述的3组寄存器外,寄存器文件40还包括由4个32位寄存器##0-3组成的一组寄存器40d,它们总是被选择的,因此可用来在每个上下文中使用。应当明白,无论选择哪组寄存器,在任何处理周期中可用于RALU的通用寄存器的总数将是32个,与MIPS处理器中的相同,而且这些32位寄存器的读、写和寻址方式将与MIPS处理器中单一的一组32个寄存器的相同。正如MIPS规范所要求的那样,寄存器#0总是含有32个0。

这3组“上下文通用寄存器”40a-40c在任何给定时间都能用于诸如“用户”、“核心”和“AXI”的任何功能。AXI指的是按照本发明的“备用上下文接口”(Alternate conteXt Interface)的英文缩写。按照该AXI,允许协处理器访问RALU不在使用的“上下文通用寄存器”组,以便能在RALU处理其它指令的同时将这些寄存器装入数据。该AXI在图3中以线路64示意性地表示,下文将结合图6作更详细的说明。

表1中所示的寄存器的安排和对Con_sel代码的实现,具有许多有益效果,对实时事件驱动的应用来说尤其如此。例如在中断处理期间,当MIPS处理器正常地将上下文从用户状态切换到核心状态时,按照本发明的处理器不需要保存和恢复寄存器内容。按照本发明的处理器能在3个指令周期切换到核心状态,并在另外的3个指令周期内切换回用户状态。此外,通过用协处理器经AXI端口在后台装入寄存器内容,能快速地支持两个以上的线程。提供的一组独立于上下文或公用的寄存器40d,使数据可供在几个上下文中使用,而无需保存、恢复或复制数据。

与电信应用中使用的传统的门阵列或ASIC相比,本发明在处理中断、切换前台、后台和核心任务时的效率大约提高10-20倍。本发明能在3个或4个时钟周期内改变上下文,而典型的处理器或门阵列则要求用至少31个周期甚至可能要62个周期来改变上下文。例如,在传统的MIPS处理器中,一个被中断的后台任务必须保存31个寄存器的内容(R0寄存器是硬连线的,不用),这要31个处理器周期才能完成。如果前台任务此前尚未完成,它必须恢复31个寄存器的内容,这要另外31个处理器周期才能完成。如果该后台任务需要在前台任务完成之前执行,前台任务必须保存31个寄存器的内容,后台任务必须重新装入31个寄存器的内容。最坏的情况要用64个CPU周期切换到前台,再用64个CPU周期切换回后台。在许多应用中,总是将前台任务运行到完成,再切换回到一个后台任务,并且在这些应用中,只要用31个周期就能切换到前台并且只要用31个周期就能切换回后台。在下面的程序代码列表中,给出了本发明如何在仅仅3个CPU周期中切换上下文的例子。

background(task 1.context 2)

lw r6,data1    ;直接存储器装入到r6

lw r7,data2          ;直接存储器装入到r7

lw r8,offset($sp)    ;间接存储器装入到r8

--中断发生在这里--

switchfg

mfc0 r31,C0_EPC      ;把将来要返回到的地址装入r31

sw r31,k0-return     ;在核心ram位置k0存储r31

ctx1                 ;转换到foreground(task 2,context 1)

jal foreground       ;转移并连接到前台任务

nop

returnbg

ctx2                 ;转换到background(context 2)

lw r31,k0-return     ;将返回地址从k0放入r31

jr r31               ;转移到r31中的地址并执行

rfe

foreground(task 2,context 1)

lw r4,data0

lw r6,data1

lw r8,offset($sp)

--任务2继续,直到因中断被禁止而结束

jr r31               ;转移到returnbg

在以上列出的程序代码中,假设将上下文1用于前台应用程序,也称任务2;将上下文2用于后台应用程序,也称任务1。按照本发明当前一个最佳实施例,上下文0是为核心保留的。

如该程序代码列表中所示,当发生了一个中断时,后台应用程序正在装载它的几个寄存器(r6-r8)。按照本发明,后台应用程序没有必要保存任何寄存器的内容,因为它有自己的寄存器。相反,本方面的上下文开关切换寄存器集。这样,要正确返回到后台,全部的要求只是有来自程序计数器的指针,按照MIPS约定,它是协处理器0的一部分。当后台任务被中断时,就运行被标记为“switchfg”(切换前台)的例程。switchfg采取的第一个行动是从异常程序计数器(协处理器0)取得指针,将其装入上下文2的寄存器31,在核心RAM的一个保留位置存储之,然后再切换到上下文1。Switchfg例程然后将上下文切换到上下文1的寄存器组,转移并连接到foreground(task2,context 1)(前台任务(任务2,上下文1))。该前台任务开始执行,如果需要,就使用其寄存器组,而不参看其它上下文的寄存器组的内容。所以,正如该程序代码列表中所示,该前台任务使用的寄存器的编号(例如r6、r8),可以与后台任务此前使用的寄存器的编号相同。不过这些并非是相同的寄存器,因为按照本发明,前台和后台任务有如表1中所示的独立的寄存器集。

按照该例子,前台任务继续,直到因中断被禁止而结束,然后转移到含有例程returnbg的地址的上下文1的r31。returnbg例程将上下文切换到上下文2(被中断的后台任务),用来自核心RAM k0的指针(它是由switchfg例程存储在该位置的)装入上下文2的r31,然后转移到该指针位置,去继续执行该后台任务。

现在参看图4,本发明的处理器的序列发生器12大体包括指令RAM(IRAM)70、异常处理逻辑72、程序计数器选择逻辑74、程序计数器递增逻辑76和接口78。接口78包括从数据总线20装入和存储数据的寄存器。这些寄存器大多数在异常处理中使用。prid寄存器是只读的,在工厂已烧制好以包含处理器的标识号。异常逻辑72用这些寄存器中存储的信息来确定是否要接受(take)一个异常,以及要接受的话接受哪一个。

如果识别了一个异常,异常逻辑72就激活一个向pc选择逻辑74提供的异常信号。其结果是,该pc选择逻辑生成一个发往程序计数器递增逻辑的EXCEP_VEC消息。该EXCEP_VEC消息的几个高位是硬线路连接的,几个低位则视导致该异常的具体中断还是陷阱而定。如果原因是个陷阱,就将陷阱号装入接口78中的原因寄存器,异常逻辑72中的陷阱处理程序在软件控制下确定陷阱的原因。按照本发明,如果异常的原因是个中断,则每个中断的EXCEP_VEC都是不同的。

在IF阶段的开始,pc选择逻辑74生成五种可能的消息的其中之一:j_reg(寄存器跳转)(jump to a register)、pc_inc(正常的程序计数器递增)、pc_branch(转移)(branch taken)、pc_jump(采取跳转)(jump taken)或者EXCEP_VEC(接受异常)(exceptiontaken)。

如果在SF阶段译码出一个跳转到寄存器指令,pc选择逻辑将生成一个用于选择一个IRAM存储单元的j_reg消息。如果指令总线22上的指令是个转移指令,则来自RALU的Z、ZT和N标志以及(在37本地寄存的)协处理器状态标志都要被pc选择逻辑74测试。如果所选择的条件代码是真的,pc选择逻辑74就生成一个pc_branch消息。如果不出现这些状态,pc选择逻辑就缺省生成一个pc_inc消息。

转移(branch)地址是在SF阶段计算的,方法是将一个16位的2的补码的偏移地址加到pc指令地址。跳转(jump)地址从J-格式指令的绝对字段中选择26位放入pc_jump寄存器。如果要采取一个转移或译码出一个跳转(jump),在该转移或跳转之后将只执行一个延迟时间片(delay slot)。程序计数器递增逻辑76包括独立的增量器pc_inc和加法器pc_branch,因为pc_select逻辑在下一个pcadds(pc加)必定发生的同一个周期中译码适当的条件(假设有一个延迟时间片)。

如果执行了JAL或JALR,则在该延迟时间片后的指令的地址被存储在其中一个通用寄存器中。在这种情况下,用pc_inc装入接口功能块78中的LINK(联结)寄存器,供以后输出到DATA(数据)。pc_minus1和pc_minus2寄存器是pc的在先副本。如果在指令期间接受一个异常,则将pc_minus1装入epc寄存器。如果在转移或跳转后的延迟时间片期间接受一个异常,则将pc_minus2装入epc寄存器。

如图4中所示,序列发生器12也与标记为istall_N的总线相连,该总线实际上是与指令总线相伴的一个总线的一位。当接受一个异常时,istall_N总线被异常逻辑72拉低,这就无效掉流水线中的两条指令。

按照本发明的处理器不提供单片TLB,因此不提供在MIPS处理器中具有的上下文寄存器或另外的COP0寄存器。该寄存器(badvaddr)存储导致地址异常错误的指令的地址。按照本发明的处理器,通过增加对8个而不是4个协处理器的支持,通过提供额外的中断信号,以及通过提供对中断信号的更快的实时响应,扩展了MIPS异常处理。

按照本发明的处理器支持嵌套异常。然而,如果第二个中断因为内核正在服务第一个中断而得不到服务,则如果导致第二个中断的条件在第一个中断被服务之前已经清除的话,第二个中断就会丢失。因此,建议用一个外部寄存器或锁存器来在核心服务另一个中断的同时锁存高电平的中断信号。

如上所述,按照本发明的处理器以与传统MIPS ISA不同的方式实现epc寄存器。按照本发明,如果发生一个溢出异常,epc不指明导致该异常的指令,而是导致该异常的指令之后的两条指令。与MIPSR-4000也不同的是,本发明的处理器中的RFE(从异常返回)指令不把epc恢复到pc。程序首先要把epc转移到一个通用寄存器中,然后用JR指令退出异常处理程序。

本发明也在该接口模块78中增加了第二个状态寄存器。该增加的寄存器status_trc适应增加的协处理器,并且对于另外的中断信号屏蔽。这就使得不需改变MIPS状态寄存器,并保留了与MIPS的兼容。

现在转看图5,按照本发明的协处理器接口18总的包括一个指令译码逻辑80和若干个数据流寄存器82。指令译码逻辑80“监听”指令总线22和istall_N信号23。在EX阶段中,指令在本地寄存并译码,以确定它是否是个协处理器指令,如果是,是什么类型的。如果该指令是协处理器指令,则可以按该指令的要求对本地寄存器和数据进行读或写。每个协处理器都被分派一个条件代码标志CpCond_N,其中N是提供给序列发生器的协处理器号。特定协处理器生成的cNflag,通过一个1位寄存器被同步,并作为CpCond_N经线路36被传送到序列发生器。

如上所述,按照本发明的当前的最佳处理器是MIPS ISA兼容的,没有实现有些MIPS指令,同时又增加一些新指令。当前的最佳实施例中没有实现的MIPS指令是:MFHI、MTHI、MFLO、MTLO、MULT、MULTU、DIV、DIVU、TLBR、TLBWI、TLEWR和TLBP。乘法和除法以及乘/除寄存器HI和LO的移位,对提高I/O密集的应用的性能没有很大的好处,却占用并非微不足道的面积(non-trivial area),并且对极其关键的通路有一些影响。TLB指令没有被实现,是因为当前的最佳实施例不包含片上TLB。

本发明向MIPS ISA添加的新指令都关系到增强的协处理器功能、指令RAM的引导以及上下文切换。特别是将MIPS指令COPz、LWCz和SWCz扩展得包括协处理器4-7的地址,即z=4、5、6和7。全部的MIPS协处理器操作也都被扩展得计及4个额外的协处理器。此外,用于移入移出指令的协处理器通用寄存器地址空间,也从32扩展到(216-1)。增加了指令LWI和SWI,用于引导指令RAM。如上所述,增加了CXTS指令,用来切换上下文通用寄存器组。

分派给COP4至COP7的操作码,R-2000至R-6000 MIPS处理器的任何一个都不用。分派给LWC4至LWC7和SWC4至SWC7的操作码,R-2000/R-3000 MIPS处理器不用,但被R-4000用于其它指令。有些分派给新指令的操作码本当会导致R-2000处理器上的一个保留指令(RI)陷阱。由于这个原因和其它关键路径原因,已经将RI陷阱信号从当前的最佳实施例中剔除。

LWI和SWI指令,设计目的是配合一个引导ROM(或者一个预引导的引导RAM)使用,向IRAM装入字或存储IRAM的字。

按照本发明当前的最佳实施例,CXTS指令采用以下的表2所示的形式。

 31…26 25    24    23…6    5…0 000000 Con_sel 000000000000000000    001110

                      表2

32位的CXTS指令包含6个前导0位(位单元31-26)、两位的取整数值0、1或2的上下文代码Con_sel(位单元25和24)、18个0位(位单元23-6)和表示是CXTS指令的6位(位单元5-0)。6个前导0位指示该指令是“专用的”。Con_sel整数值也在表1中显示。

AXI上下文是通过一个新接口--备用上下文接口(图3中的64)被访问的,该接口允许对当前不使用的上下文寄存器进行装入。备用上下文接口是用(以一个特定于协处理器的命令集的形式实现的)几个新的指令信号和一个中断方案实现的。该命令集总的包括读信号(axi_rdata)、地址信号(axi_addr)、写数据信号(axi_wdata)、上下文选择信号(axi_con_sel)和每个上下文的单独的写使能信号(axi_wen_0、axi_wen_1、axi_wen_2)。

图6中表示AXI接口中的关键信号的波形图。如图6中所示,在时间t1,两位axi_con_sel信号从01变成10,表示访问上下文2。上下文2的一位写使能信号(axi_wen_2)升高,在此后的6个时钟周期内(在t2结束),将6个字写到用axi_addr信号选择的地址中。该地址信号是个5位的信号,对应于上文的表1中所示的寄存器地址。在第一个字写入操作后,axi_rdata信号输出由axi_addr选择的数据,但是延迟一个时钟。应当明白,因为MIPS体系结构是流水线型的,所以允许主处理器转换上下文之前,关键的一点是在选定的上下文中达到所有的寄存器写。总之,在CXTS指令前两个指令之内不应当试图进行寄存器存储。

如上所述,本发明的备用上下文接口要求一个外部协处理器。然而,对如何使用该接口则没有规定什么要求。管理传送、要求哪个中断等等的细节,都留给了开发者。按照本发明当前的最佳实施例,本发明的处理器支持一个15位的int_req信号,以便能实现15个硬件中断。

以上描述和阐明了具有增强的上下文切换功能的RISC处理器。尽管描述了本发明的特定的实施例,这并非是以此来限制本发明,应当认为本发明涵盖了本领域所允许的尽可能宽的范围,对说明书内容也应有同样的理解。所以,尽管所述的是用3组通用寄存器在三个上下文间进行切换,应当明白也可以利用更多或更少的寄存器组。还有,尽管表示了某些用于切换上下文和控制协处理器的操作码,应当认识到,也可以使用其它操作码来获得类似的结果。此外,尽管就通用寄存器组的寻址和对通用寄存器组的访问披露了特定的配置,应当明白其它配置也是可以采用的。此外,尽管所披露的处理器是具有经专门改造的MIPS体系结构的RISC处理器,应当明白,对MIPS体系结构的不同改造能取得与本文披露的相同或相似的功能。例如,可以实现没有被本发明实现的一些MIPS指令而不牺牲本发明的功能。此外,可以在没有备用上下文接口的情况下实现具有上下文切换功能的多组通用寄存器,并仍然具有本发明的一些优点。还有,在上下文切换期间不切换的公用寄存器的数量可以多于或少于所示的4个。本领域的熟练人员也将明白,用多组通用寄存器进行上下文切换,无论有还是没有备用上下文接口,都能在MIPS RISC处理器以外的处理器中实现。例如,本发明可以在诸如PowerTM处理器的其它RISC处理器的体系结构内实现,甚至在诸如PentiumTM处理器的CISC处理器的体系结构内实现。因此,本领域的熟练人员应当明白,在不偏离权利要求所述的本发明的精神和范围的情况下还可以对本发明作出其它改进。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号