首页> 中国专利> 嵌入式Java处理器微码指令集动态装载方法

嵌入式Java处理器微码指令集动态装载方法

摘要

本发明公开了一种Java处理器微码指令集动态装载技术,属于嵌入式处理器设计领域。本发明通过在原有的处理器的基础上增加了一种指令集装载模块。首先装载模块从外部存储器读取微码指令,寄存在装载模块的临时寄存器中,再通过微码拼接技术解决外部存储器和内部存储器位数不一的问题,最后再将拼接好的微码指令写入到内部存储器之中,当所有内部存储器都初始化完成,即指令集加载到芯片内部后,系统开始执行启动代码,进入正常工作状态。通过本发明不仅使其它平台的Java程序在该平台上正确运行,保证上层应用的通用性,还可以针对不同的嵌入式应用环境对本地指令集进行更新优化,实时修改启动代码,提高处理器效率。

著录项

  • 公开/公告号CN101349973A

    专利类型发明专利

  • 公开/公告日2009-01-21

    原文格式PDF

  • 申请/专利权人 中山大学;

    申请/专利号CN200810198330.0

  • 发明设计人 陈挚睿;谭洪舟;陆许明;

    申请日2008-09-05

  • 分类号G06F9/445;

  • 代理机构广州市深研专利事务所;

  • 代理人陈雅平

  • 地址 510275 广东省广州市新港西路135号

  • 入库时间 2023-12-17 21:23:40

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-10-28

    未缴年费专利权终止 IPC(主分类):G06F9/445 授权公告日:20110518 终止日期:20140905 申请日:20080905

    专利权的终止

  • 2011-05-18

    授权

    授权

  • 2009-03-11

    实质审查的生效

    实质审查的生效

  • 2009-01-21

    公开

    公开

说明书

技术领域

本发明属于嵌入式处理器设计领域,具体来说,涉及一种Java处理器微码指令集动态装载技术。

背景技术

现有的Java处理器或Java协处理器将本地指令集固化在芯片之中,无法对指令集进行优化。对于通用处理器,如PC中的处理器,此种方法可以满足应用需求,因为基于通用处理器的上层应用,是由功能十分完善的操作系统支持。而Java处理器常被应用于嵌入式系统中,考虑到运行速度和系统成本,与其对应的操作系统或控制功能相对简单,且针对不同的应用场合需要作相应的调整。

操作系统执行程序的过程直接映射到系统底层的本地指令集执行的过程。当前的Java处理器或Java协处理器已将本地指令集固化到芯片之中,无法针对不同的嵌入式应用环境进行指令优化,也无法开发针对不同环境的、用户定制的指令段,将其添加到系统当中。嵌入式系统的实时、可靠、便携等要求受到了限制。

现有的一些“动态装载”解决方案都是基于FPGA技术的,因其硬件的可配置性可以满足Java处理机制的重构。不过这些解决方案都必须通过HDL代码的更改,对FPGA进行重新编程才可以实现,不是真正意义上的动态装载。且FPGA的成本和性能,与专用处理器相比,也不适合作为批量生产的产品使用到嵌入式系统当中,只能作为研发过程中的验证平台。

发明内容

针对以上的不足,本发明提出了一种嵌入式Java处理器微码指令集动态装载方法。通过微码指令集(即本地指令集)的动态优化和装载,可更好地满足嵌入式系统实时、可靠、便携等的要求。利用对实现各个Java字节码的微码指令段的优化,可以不断提高系统运行的速度。同时,增加用户自定义的微码指令段,可以很方便地对指令的功能进行扩充,提升嵌入式系统的性能。更为常用的是,通过微码指令集的动态装载,可以任意改变嵌入式系统的启动代码,在硬件的最底层满足了不同应用场合的需求,便捷高效。

一种嵌入式Java处理器微码指令集动态装载方法,它的步骤包括:

1)系统上电;

2)装载模块选中外部存储器的控制器,并指向外部存储器的全零地址;

3)装载模块读取外部存储器当前地址的数据,并存储在装载模块内部的临时寄存器之中,装载模块的计数器进行一次加1操作,外部存储器的控制器指向下一个地址;

4)装载模块根据芯片内部存储器的位宽和容量确定微码拼接所需读取外部存储器的次数,每读取一次外部数据,都暂存在装载模块的临时寄存器,进行拼接;

5)装载模块将拼接完成后的整组数据写入到内部存储器,同时指向内部存储器的地址进行加1操作,指向下一个内部存储单元;

6)重复3)-5)的步骤,直到所有的处理器微码指令集写入完成;

7)执行系统启动代码。

所述装载模块选取模块优先级可控的总线技术,使装载模块优先级高于主核,优先考虑AMBA总线。

所述外部微码存储器可选取不同位宽的Flash存储器。

所述内部存储器使用SRAM技术或Flash(EEPROM)技术。

本发明的有益效果:

1)在其它平台上运行的Java程序同样可以在该平台上运行,保证上层应用的通用性。

2)针对不同嵌入式应用环境可以对本地指令集进行即时的更新优化,比其它Java处理器更有专用性。如精简指令集,去除该系统无需使用的微码段,使系统有更多空间存放启动用微码程序。或是设计出更为高效的实现字节码的微码段后,可以随时更新原有的相应微码段。

3)可开发用户自定义的本地微码指令段,使处理器效率得以提升。其它已将本地指令集固化在芯片内的处理器无法实现。如嵌入一段时间相加的代码,替代基本的整数相加代码,可以快速实现时间相加。

4)可按照需求开发功能强大的系统启动代码,并且可随时更新。而其它Java处理器若需完成相应内容,必须有操作系统的支持。相比而言,无需操作系统可实时更新的启动代码更为便捷与高效。

附图说明

图1为微码指令集动态加载流程图;

图2为微码指令读写示意图;

图3为微码指令动态装载结构示意图。

具体实施方式

下面结合附图对本发明进行进一步的阐述。

微码指令集动态加载过程如图1所示,在系统上电后,指令装载模块会从外部的存储器中读取事先存放好的指令集代码。经过装载模块的内部地址映射机制,将相应的微码指令写入到芯片内部的各个存储器及寄存器。当所有的微码指令均已正确存放到芯片内部对应的存储器和寄存器后,装载模块则输出表示初始化完成的信号,此时处理器接收到初始化完成的有效信号后,即开始执行片内的系统启动代码,进而执行其它程序。

在图1中,表示为“微码拼接”的过程以虚线框画出。该过程主要是解决芯片外部和芯片内部存储器位数不一的问题。若片外的存储器为8位,片内的存储器亦为8位,则微码的导入可以直接通过地址映射完成;若片外的存储器为8位,而片内的存储器为11位,则装载模块需要对片外存储器读取两次后,拼接成16位数据,再截取其有效的11位数据写入到芯片内部。所以,该子模块实现了数据拼接的功能,若芯片内外存储器位数相同,该子模块可以省略。

图2中显示了Java微码指令集读取、拼接、写入的详细过程。系统上电后,装载模块选中外部存储器的控制器,并指向外部存储器的全零地址。从全零地址开始读取相应的数据,然后地址顺序加1,继续读取下一个数据。

芯片内部的存储器位宽与容量已固定,所以根据当前正在初始化的内部存储器,可以判断拼接成一组内部数据所需读取外部存储器的次数。每读取一次外部数据,都会暂存在装载模块的临时寄存器,进行拼接。拼接完成后,即将整组数据写入到内部存储器,同时指向内部存储器的地址进行加1操作,指向下一个内部存储器地址。

如图2中所示,外部存储器为8位数据位宽,内部存储器位数最宽为32位,所以临时寄存器亦为32位。当前初始化的内部存储器1为32位宽,所以需要从外部读取4次数据,拼接为32位后再写入到内部存储器1内。又如当前正在初始化内部存储器2,该存储器为24位宽,则只需读取3次外部数据即可拼接为24位,读取24位外部数据存放到临时寄存器的低24位后,高8位无需处理,只需将内部存储器2的数据线和临时寄存器的低24位连接,即可达到数据截取的目的。

装载模块中含有一个计数器,每读取一次外部数据,计数器的值则进行一次加1操作。因为内部存储器的位宽和容量已固定,所以需要读取外部存储器的次数很容易就可以计算出来。使用计数器的目的在于,产生控制当前初始化的内部存储器的片选信号,以及判断临时寄存器中的有效位数(或拼接次数)。

如图2所示,假设内部存储器1的容量为64个字,内部存储器2的容量为128个字,内部存储器3的容量为128个字。对应各个存储器的位数,内部存储器1需要读取4次外部数据拼接为一个32位数,内部存储器2需要读取3次外部数据拼接为一个24位数,内部存储器3需要读取2次外部数据拼接为一个11位数。则初始化内部存储器1所需读取外部数据的次数为64*4,即256次。所以当计数器计数到256时,内部存储器1已完成初始化,即释放内部存储器1的片选信号,使内部存储器2的片选有效,同时内部地址清零,相当于从内部存储器2的零地址开始计算。以此类推,内部存储器2所需读取外部数据的次数为128*3,即384次。所以当计数器计数到256+384,即640时,内部存储器2初始化完毕,进而对内部存储器3进行初始化。当计数器计数到896(640+256)时,即内部存储器全部初始化完毕,则输出结束信号,系统开始执行启动代码,进入正常工作状态。

图3中省略了Java处理器的其余模块,可更清楚地显示出装载模块和主核以及外部存储器的逻辑关系。系统上电后,作为当前的主控制模块——装载模块,选中闪存控制器,从外部读取数据。并将拼接好的数据,逐组写入到Java主核的各个片内寄存器,如跳转表、偏移表、微码表等。当Java主核内的各个存储器都初始化完成后,装载模块释放控制权,此时Java主核充当主控制模块,系统开始执行启动代码,进入正常工作状态。

当系统上电后,因Java处理器主核中没有任何微码内容,所以此时的Java处理器无法工作。即上电后,必须让微码指令装载模块自动开始工作。首先从外部微码指令存储器读取数据,根据Java处理器主核内存储器的位数要求,对外部读入的数据进行拼接或截取。然后按照指令装载模块的内部地址映射机制,将拼接或截取完成的微码指令写入到主核的内部存储器当中。当所有片内的存储器都初始化完成后,Java处理器主核即可开始执行启动代码,进入工作状态。

进入正常工作状态后的Java处理器可以按照用户要求,编写程序对外部的微码指令存储器进行更新操作。当系统再次复位上电后,Java处理器即可使用更新后的微码指令集。

实现该技术有几处可替换点:

1)连接子模块的总线技术。因系统上电后首先工作的是装载模块,所以应选取模块优先级可控的总线技术,使装载模块优先级高于主核,如AMBA总线。

2)外部微码存储器。可根据系统设计要求,选取不同位宽的Flash存储器。如果片内和片外存储器位宽相同,则加载过程可以省略数据的拼接和截取功能。

3)内部微码存储器。内部的存储器可使用SRAM技术或Flash(EEPROM)技术。SRAM的读写速度更快,但系统掉电后不能保存数据;而Flash可以在系统掉电后保存数据,即可在指令集更新后,才进行载入过程,否则芯片可以直接上电进入工作状态。但Flash(EEPROM)的数据读写速度相比较慢。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号