首页> 中国专利> 采用双指令集的32位嵌入式微处理器

采用双指令集的32位嵌入式微处理器

摘要

本发明为一种采用新体系结构的32位嵌入式微处理器,能够处理本地RISC指令和Java卡虚拟机两套指令集。它由取指单元、指令cache、指令译码电路、指令折叠电路、通用寄存器组、数据运算单元、内存单元、前推电路、异常处理单元等部分构成。其中,指令cache和指令折叠电路仅在执行Java卡虚拟机指令时有效,与此同时,通用寄存器组映射为堆栈cache。本发明中的微处理器可以同时支持两套指令集,并且之间能够方便的进行无缝切换,而电路面积与传统不支持Java卡虚拟机的处理器相比,增加不到20%。

著录项

  • 公开/公告号CN1450450A

    专利类型发明专利

  • 公开/公告日2003-10-22

    原文格式PDF

  • 申请/专利权人 复旦大学;

    申请/专利号CN03116913.9

  • 申请日2003-05-15

  • 分类号G06F9/30;G06F9/38;

  • 代理机构31200 上海正旦专利代理有限公司;

  • 代理人陆飞

  • 地址 200433 上海市邯郸路220号

  • 入库时间 2023-12-17 15:01:15

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2012-07-11

    未缴年费专利权终止 IPC(主分类):G06F9/30 授权公告日:20050824 终止日期:20110515 申请日:20030515

    专利权的终止

  • 2005-08-24

    授权

    授权

  • 2003-12-31

    实质审查的生效

    实质审查的生效

  • 2003-10-22

    公开

    公开

说明书

技术领域

本发明涉及一种32位嵌入式微处理器,它支持本地RISC指令和Java卡虚拟机两套指令集。

背景技术

随着网络时代的到来,网络通信、信息安全和信息家电产品将越来越普及,可重用的IP核和SOC技术也在这一潮流中得到了重视和发展。嵌入式微处理器作为SOC芯片的核心,对SOC设计非常关键。传统的8位微处理器由于芯片面积小,开发方便,得到了广泛的应用。但由于其总线宽度仅为8比特,性能相对较低。而随着无线通信、掌上电脑、网络通信、数字音频播放器、数字高清晰度电视等应用的不断扩展,系统控制部分越来越复杂,对微控制器的性能要求也日趋提高,因此32位处理器逐步成为市场主流。

信息家电飞速发展,同时,家庭网络也迅速崛起。Java处理芯片将在这两方面扮演重要角色。一方面Sun公司正致力于与消费电子设备制造商携手合作,推出基于Java技术的新型信息家电产品;另一方面,由于Java语言的跨平台和网络特性,绝大多数信息家电厂商正努力增强对Java的支持。直接将Java技术利用硬件实现,作为信息家电设备的核心将是大势所趋。Java智能卡技术是Java技术在智能卡领域的扩展,给传统的智能卡技术和应用领域带来变革,提高了发卡商或服务提供商选择智能卡的自主性,能动态的调整卡的应用程序,在具有灵活性的同时也保证了安全性。Java智能卡产品已经在全世界范围得到了广泛的应用,领域包括无线通信、医疗保健、金融银行、军队、身份认证、电子商务等方面。

一般的32位嵌入式微处理器只支持一套指令集,即本地RISC指令系统;而Java处理器则只支持Java虚拟机JVM(Java Card Virtual Machine)或Java卡虚拟机JCVM(Java Card VirtualMachine),不支持传统的RISC指令。如果要在嵌入式微处理器的基础上增加Java处理功能,需要额外利用软件编写的解释器或编译器。

传统的32位嵌入式微处理器设计技术比较成熟,但对Java功能的支持较弱。当前的Java实现方案中,主要有三种方法:解释执行(Interpreter),及时编译JIT(Just In Time)和硬件直接执行,即Java处理器(Java in Silicon)。解释执行的方式执行速度慢;及时编译JIT与解释执行相比,虽然能够提高处理速度,但是占用的内存资源会增加两到三个数量级,对于内存资源有严格限制的嵌入式应用来说,也是不现实的;硬件直接执行有三种常用的方法:

(1)纯粹的Java处理器:完全为执行Java bytecode而设计。如Sun公司提供的picoJava;

(2)Java协处理器:主处理器执行其本地RISC指令,当遇到待执行的指令是java bytecode时,激活协处理器,同时移交总线控制权,当Java协处理器执行结束后,重新将控制权交还给主处理器。如Nazomi公司提供的JSTAR;

(3)通用处理器带Java扩展功能,如ARM公司提供的Jazelle处理器。

发明内容

本发明的目的在于提供一种改进结构的32位嵌入式微处理器,在电路规模略有增加的前提下不仅支持本地RISC指令集,而且支持Java卡虚拟机指令集,同时可以在这两种状态(RISC状态,Java状态)之间方便的进行无缝切换。

本发明提出的32位嵌入式微处理,由指令存储器1、取指单元2、指令cache3、指令译码电路4、指令折叠电路5、通用寄存器组6、数据运算单元7、内存单元8、前推电路9、异常处理单元10、程序计数器PC11、状态寄存器PSR12、指令陷阱13、多路选择器14经电路连接构成,其中,指令存储器1、取指单元2、指令译码电路4、通用寄存器组6、数据运算单元7依次电路连接,前推电路9和异常处理单元11分别与取指单元2、指令译码电路4、数据运算单元7连接,状态寄存器12与数据运算单元7、内存单元8、寄存器组6连接,组成支持本地RISC指令集的电路系统,见图8所示;指令存储器1、指令cache、指令折叠电路5、指令译码电路4、堆栈cache6、数据运算单元7、多路选择器14、内存单元8依次电路连接,指令陷阱单元13与指令折叠电路5和指令译码电路4连接,组成支持Java卡虚拟机指令集的电路系统,见图9所示;并通过设置跳转指令,实现本地RISC状态和Java状态的无缝切换。

本发明中,微处理器采用哈佛结构,五/六级流水线切换,由指令存储器1、指令译码电路4、通用寄存器组6、数据运算单元7、内存单元8和写回电路构成数据通路,指令cache3、指令折叠电路5、前推电路9和指令陷阱13用于提高执行效率,分离总线和分离的算术逻辑运算单元降低功耗。

本发明中,在RISC状态下,有一条特殊的“跳转到Java”指令,当该指令执行条件满足时,处理器切换到Java状态,同时对RISC状态下通用寄存器组、程序计数器以及当前程序状态寄存器进行备份;在Java状态下,如果有异常或中断,处理器切换回RISC状态,同时恢复备份的寄存器和计数器。

本发明中,整个微处理器在RISC状态下,采用五级流水线结构;在Java状态下,采用特殊的六级流水线结构。具体来说,执行本地指令时,为五级流水线结构,依次是取指令(IF)、译码(ID)、执行(EXE)、访存(DM)、写回(WB)五部分;在执行Java卡虚拟机指令集时,自动切换为六级流水线结构,依次是取指令(IF)、折叠译码(ID)、取操作数(OF)、执行(EXE)、访存(DM)、写回(WB)六部分。这是由于原有的五级流水线的指令译码(ID)阶段在Java状态下承担了过多的任务,如指令折叠、指令cache管理、堆栈cache管理、取操作数,为了避免该级成为处理器设计的瓶颈,限制处理器性能的提高,本发明中将它划分成独立的两级折叠译码(ID)和取操作数(OF)。流水线之间的连接通过各级锁存器实现。

本发明中,根据程序计数器PC的值取指令。在RISC状态下,所有指令都为定长的32位字,而在Java状态下,为非定长指令,指令长度从一个字节(8位)到数个字节不等。因此,本发明中,RISC状态下用一个32位的指令控制器控制指令的正常读取;Java状态下用一个12字节(96位)的指令cache控制指令流动。指令控制器和指令cache均位于流水线取指令(IF)和译码(ID)两个阶段之间。

本发明中,寄存器组6采用32×32的寄存器组织形式,在执行本地指令时,为通用寄存器组;在执行Java卡虚拟机指令集时,映射为操作数堆栈cache。这是由于,微处理器在RISC状态下是面向寄存器组的组织形式,指令的绝大部分操作数处于寄存器中。32个32位的寄存器构成一个大的通用寄存器组;在Java状态下,则是面向堆栈的组织形式,指令的操作数大部分都隐藏在堆栈中。而传统的Java堆栈建于处理器内存中,因此使取操作数和写回运算结果成为运行时的瓶颈。所以,本发明在处理器中内建堆栈的cache来提高运行速度。考虑到Java状态下,原RISC状态下的32个通用寄存器组完全空闲,因此将这32个寄存器连成环形作为堆栈cache,即通用寄存器组和堆栈cache是物理上完全相同的单元,但在处理器的不同模式下有不同的功能。原来处理器RISC状态下5级流水中的DM阶段进行内存访问,Java状态下则可以在该阶段空闲(无流水线冲突)时候对新建的堆栈cache进行溢出(spill)和填充(fill)操作。由于堆栈cache由原来的通用寄存器组实现,可以进行三读两写操作,即在Java状态下取两个操作数时还剩余一读一写口以便进行填充和溢出。而且使用堆栈cache后也能进一步实现指令折叠以提高运行速度。操作数从通用寄存器组/堆栈cache取出后进行流水线冲突判断。

本发明中,执行Java卡虚拟机指令集时,采用了指令折叠技术,将多条指令合并折叠为一条指令执行。使用指令折叠技术可加速Java指令的执行效率。指令折叠模块位于指令译码单元前,用于对Java bytecode长度截取和折叠操作,折叠后的指令送译码模块译码。

本发明采用了前推(forwarding)技术来解决流水冲突情况,前推电路与数据通路相连,构成数据的快速通道,将操作结果从产生的单元直接移到实际需要它的地方,不用等到流水线的最后一个周期WB写回,那么绝大多数的数据冲突都可以避免,提高了流水线的效率。

本发明中,采用分离的内部总线结构和分离的算术逻辑运算单元,以降低处理器功耗。具体来说,本发明的数据处理单元主要由桶式移位器、算术/逻辑单元ALU和乘加单元组成,操作数来源于执行阶段的操作数锁存器,计算完成的结果送访存阶段锁存器存储。采用分离式内部总线,即数据处理单元中各部分的输入数据用两组带使能的触发器分别锁存,从而构成两组独立的内部总线,可以根据具体指令的需要来更新相关总线上的数据,同时保持其他总线上的数据不变,有效的降低了功耗。而且,整个ALU分成两部分,一部分算术运算单元AU(arithmetic unit)完成算术操作,一部分逻辑运算单元LU(logic unit)完成逻辑操作,最后输出结果为这两部分的并集。这样在算术操作时只有AU单元进行运算,LU单元关闭;逻辑操作时LU单元进行运算,AU单元关闭。通过将这两部分隔离,可以大大减少ALU不必要的动作,从而降低功耗。

本发明将Java卡虚拟机指令集分为三类,简单指令、复杂指令和未定义指令。简单指令全部用硬件实现,其中的绝大部分能够在一个到两个时钟周期内完成;复杂指令使用指令模拟陷阱,根据引发陷阱的字节码,陷阱处理调用位于固件中相应的陷阱处理程序来完成这部分功能;未定义指令置起未定义指令异常,同时从Java状态切换回RISC状态以对异常进行处理。

本发明采用了内嵌的方式支持Java卡虚拟机指令集,在Java状态时可以利用很多RISC状态下的硬件资源,同时,对虚拟机指令进行划分,对于复杂的、不适合在嵌入式处理器上直接实现的指令采用硬件陷阱的方法,因此相对于单一指令集的RISC处理器,面积增加了不到20%,而且还利用了指令折叠、堆栈cache等一系列硬件加速技术加快Java指令执行效率,分离总线技术降低功耗,五/六级流水线、前推技术提高整个处理器的性能。

附图说明

图1为本发明五/六级流水线功能对应图。

图2显示本发明流水线结构。

图3为Java状态下指令cache工作流程图。

图4显示Java状态下堆栈cache。

图5为基于通用寄存器组和基于堆栈处理器执行相同一条加法指令的比较。

图6显示Java状态下采用堆栈cache和指令折叠后一条加法指令的执行。

图7为本发明中前推电路的原理。

图8为本发明中RISC状态下电路框图。

图9为本发明中Java状态下主要电路部分框图。

图10显示RISC和Java状态的切换。

图中标号:1为指令存储器,2为取指单元,3为指令cache,4为指令译码电路,5为指令折叠电路,6为通用寄存器组,7为数据运算单元,8为内存单元,9为前推电路,10为异常处理单元,11为程序计数器PC,12为状态寄存器PSR,13为指令陷阱,14为多路选择器。

具体实施方式

下面结合附图进一步详细描述本发明。

RISC状态的五级流水线结构和Java状态的六级流水结构见图1和图2所示。其中:

IF(取指令),将指令从指令存储器中取出后锁存在IF/ID阶段的锁存器中,RISC状态与Java状态该级功能相同;

ID(指令译码),在RISC状态下,将IF/ID阶段锁存的指令取出进行译码,产生后续阶段的控制信号,所有的控制信号锁存在ID/EXE阶段的锁存器中,从寄存器堆中读取操作数;在Java状态下,进行指令长度截取、指令折叠以及指令译码,产生后续阶段的控制信号,所有的控制信号锁存在ID/OF阶段的锁存器中,同时还要进行指令cache管理;

OF(取操作数),仅Java状态有该流水级,根据控制信号,从堆栈cache或内存中取操作数,取出的数据锁存在OF/EXE阶段的锁存器中。

EXE(执行):ALU或MAC执行相应的指令,执行结果锁存在EXE/DM阶段的锁存器中,RISC状态与Java状态相同;

DM(内存访问):在RISC状态下,只有load/store类型的指令需要这一级的实际操作,将上级结果写入内存或从内存中取出数据,锁存在DM/WB阶段的锁存器中;在Java状态下,除访问内存单元外,还执行堆栈cache填充和溢出操作,以保证堆栈cache和内存中主cache的数据一致;

WB(寄存器写回):RISC状态下将DM/WB锁存的值写回通用寄存器组中,Java状态下则是写回堆栈cache中。

Java状态下的指令cache(icache)的工作过程见图3所示。icache中存放从只读指令存储器中取出待译的指令,每个译码阶段从中取出8byte的数据到指令折叠单元,根据指令折叠单元返回的值判断该次折叠译码消耗了多少字节的数据(因为并不是所有的指令组合都能够折叠,而且,即使能够折叠,也不一定正好用8个字节),从而进一步判断是否需要重新从指令存储器中取新指令进行填充。在本发明中,如果icache中的有效数据小于等于8byte,就需要指令填充。

RISC状态下的通用寄存器组映射成Java状态下的堆栈cache结构,见图4所示。数据处理单元(Integer Execution Unit)与堆栈cache有三个接口:两个读口和一个写口,完全能够满足正常指令取两个操作数执行完成后写回一个操作结果的需要。堆栈cache的另外一读一写口用于和内存中的主栈交换数据。堆栈内除了高水位线和低水位线这两个指针外,还有两个指针:栈底指针,始终指向动态的栈底,位置“0”处;栈顶指针,始终指向动态的栈顶。当栈顶指针的值大于高水位线时,表示堆栈cache即将被填满,为了防止数据丢失,需要将堆栈cache栈底的一部分值弹到内存的主栈中去,即进行溢出操作,每一个周期可以将一个栈底的数据写到内存中,同时栈底指针的值加一,即向缩小的方向移动一格;当栈顶指针的值小于低水位线的值时,表示堆栈cache中数据即将不足,为了防止取到错误的数据,需要将位于内存主栈栈顶的一部分数据弹出到堆栈cache的栈底,进行数据填充,即进行填充操作,每一个周期可以将主栈中的一个数据压入到堆栈cache的栈底,同时栈底指针的值减一,即向增加的方向移动一格。

和一般的堆栈一样,正常情况下从堆栈中弹出数据时,栈顶指针的值减一,向堆栈中压入数据时,栈顶指针的值加一。

值得注意的是,高水位线(“24”)和低水位线(“8”)的位置都是相对于栈底指针(“0”)而言的,并不是一个绝对值。随着栈底指针的变化,这两个水位线指向的寄存器的物理地址也是变化的。

极端情况下,在栈顶指针大于高水位线时,需要连续向堆栈cache压入数据,或者在栈顶指针小于低水位线时,需要连续从堆栈中弹出数据,使得溢出和填充操作来不及进行,这时,需要强制停止流水线的流动,以完成这两种操作,保持堆栈cache和内存中主堆栈数据的一致性。

图5为两种不同类型的微处理器比较,Java卡虚拟机指令集是面向堆栈的结构,因此对操作数栈的访问仅限于栈顶,所有的数据处理类型指令以及跟堆栈操作有关的指令都必须依赖于上一条指令在流水线的最后一个周期写回的数据,不仅降低了指令执行效率,而且严重限制了指令级的并行。一条普通的ADD指令,在传统RISC处理器中只需要一个时钟周期,但在堆栈处理器中,需要四个周期。本发明中采用了一种新的指令折叠操作模式。主要的思想是利用堆栈cache可以随机、多入口、单周期访问的特性,如果一条将局部变量(LocalVariable)的值压入栈顶的指令后面紧接一条对该数据的处理指令,当指令译码器检测到这种情况时,将这两条指令“折叠”在一起,即合并为同一条指令执行,把操作数当作已经位于栈顶的情况处理,如框图6所示。

根据流水线的特点,在理想情况下,流水线各级的所有操作单元在同一时刻都在工作。在五级流水线中,由于对寄存器组的写回在最后一级流水线中完成,因此,完全有可能后面的一两条指令的操作数在需要的时候还来不及写回,即造成流水线的数据冲突。如果不采取其他额外的措施,那么只能通过流水线停顿来解决这类问题,引起流水线的不连贯,大大降低了流水线的效率。在本发明中,通过前推(forwarding)电路来解决这种情况。

前推技术的核心在于绝大多数发生冲突的情况下,后一条指令需要数据时,上一条指令并不是真正来不及产生操作结果。如果我们将操作结果从产生的单元直接移到实际需要它的地方,不用等到流水线的最后一个周期写回,那么绝大多数的数据冲突都可以避免。比如,我们将ALU或乘加单元的输出结果直接前置到ALU或乘加单元的操作数输入级,就可以提前获得操作数,不用停顿流水线。

前推电路由地址cache和比较电路两部分组成。地址cache是一个两级的8比特寄存器,内部锁存了流水线在EXE阶段和DM阶段需要写回的寄存器组地址。在每个ID阶段,由译码器产生该条指令读/写寄存器的地址,并将其逐级锁存为EXE和DM阶段的地址。在比较电路中,把读地址与上两条指令在EXE和DM阶段的值分别进行比较。首先比较该条指令的读地址与EXE阶段的写地址,如果相同,表示上条指令需要写回的寄存器与该条指令要读的寄存器相同,通过数据源判断,将上条指令产生的操作结果直接通过前推电路送到本条指令需要该寄存器值的地方,如果不同,继续比较读地址与DM阶段的地址;如果相同,将前面第二条指令的结果送到本条指令需要的地方。如果两次比较没有相同的地方,表示不需要前推处理。操作数的数据来源用缺省值,即从寄存器组中读出。通过上述的前推电路,能够不用停顿流水线解决大部分的数据冲突。

图8为整个处理器在RISC状态下的体系结构,图9为处理器在Java状态下的体系结构。

在本地RISC指令集中,本发明新增加了一条跳转指令,用于处理器从RISC状态切换到Java状态。与一般的本地指令一样,指令执行时首先进行条件判断,如果条件不满足,则相当于一条空操作指令;如果条件满足,则首先保存当前状态的PC值,备份RISC状态下的通用寄存器组,其次PC跳转到特定的指令存储器单元,开始执行Java状态的Java卡虚拟机指令。

在Java状态下,如果遇到复杂指令,需要使用指令模拟陷阱来实现,处理器调用固件中相应微码来执行。完成之后回到陷阱入口,继续下一条指令的执行。同时,若在Java状态下有任何异常或中断产生,需要切换回RISC状态,在完成异常处理程序后,视异常种类以决定是否返回Java状态。实际上对于操作系统来说,Java状态可以看作一个特殊的异常来处理。状态切换如图10所示。

根据Java卡虚拟机指令规范,本发明定义了七类可以折叠的指令如表1,根据它们在指令折叠中的作用又分为三大类如表2。由于折叠的方式相当多,完全实现是不现实的。通过仔细分析,本发明中选择了出现频率最高的几种折叠方式,分别可以对二、三、四条指令进行折叠,如表3所示。

在折叠逻辑中,首先进行四条指令的折叠判断,如果满足,则采用四指令折叠,折叠好后送译码单元译码;若不满足,进行三指令折叠判断,如果满足,采用三指令折叠,折叠好后送译码单元译码;若不满足,进行两指令折叠判断,如果满足,采用两指令折叠,折叠好后送译码单元译码;若不满足,表示该组指令不可折叠,只取第一条指令送译码单元译码。通过这种方式,可以最大限度的利用指令折叠提高指令执行速度。

表四为本发明与商用RISC-ARM7TDMI的比较,在0.6um的工艺条件下可以达到0.35um工艺的速度,而且衡量处理器功能的两个重要指标CPI和MIPS有大幅度的提高。

表五为本发明与成熟的商用Java处理器比较,可以看出采用了较多的硬件加速手段,大大提高Java卡虚拟机指令执行速度。与软件方式相比,速度提高5~10倍,采用了硬件加速后,又在原有基础上提高了30%,但处理器规模增加不到20%。

表1显示Java卡虚拟机指令集动态执行时各类型指令所占的比例。

表2显示Java状态下指令折叠的分类。

表3显示Java状态下指令折叠的三种方式。

表4显示本发明在RISC状态下与市场上成熟的RISC比较。

表5显示本发明在Java状态下与市场上成熟的Java处理器的比较。

    指令类型动态运行过程中指令执行的比例    局部变量压入栈     38.02%    常数压入栈     7.07%    栈顶存储到局部变量     6.96%    算术运算     6.78%    逻辑运算     1.74%    反相操作     0.97%    转移控制     9.11%

                               表1

  指令折叠中的作用  类型             描述    百分比    Producer    L    局部变量压入栈/常数压入栈    45.09%    Consumer    S    栈顶数据存储到局部变量    6.96%    Operator    E    数据处理    9.49%    B    转移控制    9.11%

                                        表2

四指令折叠方式  Instruction0  Instruction1  Instruction2  Instruction3      L       L        E       S三指令折叠方式    Instruction0    Instruction1    Instruction2         L         L          E         L         L          B         L         E          S两指令折叠方式        Instruction0    Instructionl            L         S            L         E            L         B            L         S

                       表3

商用ARM7TDMI本发明百分比制造工艺 0.35um 0.6um--------最高频率 60MHz 60MHz100%CPI 1.9 1.4-26%MIPS 31.6 42.9+36%

                                   表4

  性质  指令集状态切换堆栈cache指令折叠硬件加速  ARM公司  Jazelle处理  器RISC基础内嵌Java功能扩展JVM规范  方便  4×32    无  Sun公司  Picojava处  理器完全针对Java的处理器JVM规范  无  64×32    较慢  本发明RISC基础上内嵌Java功能扩展JCVM规范  方便  32×32二、三、四指令折叠    较快

                              表5

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号