一种
Javacard虚拟机IP软核
设计 0引言
虚拟机技术的出现,满足了人们不断增强的计算需求,确保了各种平台上应用的正确性与可靠性。在资源受限的智能卡领域,规范化的Javacard已经成为智能卡技术发展的一个重要方向[1]。相比传统智能卡,Javacard在ISO7816的基础上具有面向对象开发环境、平台无关性、多应用共存性、Java
程序动态编辑、应用程序接口等方面优势。Javacard虚拟机是一种规范定义的抽象的
计算机,存在着用户应用执行效率低的性能
问题。
软件编译器无法解决Java程序运行时高编译时耗。硬件解释器、专用处理器、协处理器以及高性能FPGA支持是主要的硬件方式研究趋势。本文从虚拟机硬件实现的角度出发,对基于可编程逻辑器件的Javacard虚拟机软核进行了广泛的研究探讨,并对可编程片上
系统技术中的Avalon交换式总线技术和用户自定义逻辑元件问题进行了的分析和研究。面向Javacard虚拟机的SOPC原型系统指出了SOPCBuilder的通用系统开发方法。Avalon总线互连IP组成的系统,在并行数据处理、现场可配置性、可扩展性方面有着良好表现,具有广泛的嵌入式应用前景。
1相关研究
Javacard虚拟机是Java虚拟机的子集。Java技术兴起不久,大量研究开始重点关注于借助硬件方式来解决Java虚拟机性能缺陷。特别是随着FPGA性能的提高使得为Java虚拟机设计提供更高的硬件支持成为可能。动态内存管理[2]、堆栈访问[3]、面向Java虚拟机的片上
网络[4]等方面研究通过为Java虚拟机设计提供FPGA硬件支持在性能上均获益颇丰。在常规方法加速不够情况下,协同设计Java虚拟机很划算。合适的体系结构及协同设计方法,Java虚拟机性能会得到很大的提高且可以通过应用在Java虚拟机基准程序来评估。Java软/硬协同设计及Java协处理器的研究[4~7]逐渐成为了另一个关注重点。针对Javacard虚拟机不定长指令实现可以采用类RISC流水线[1,8]或微序列[9]方法。流水线速度快但也会导致面积过大。在速度不是关键的时候,微序列方法是个很好的选择。基于SOPC技术的嵌入式Java虚拟机一般采用预先移植进嵌入式操作系统的开放式Java虚拟机或可定制指令的Nios处理器执行用户应用。
2Javacard虚拟机设计
2.1指令集Javacard虚拟机在构架上支持新的short整型数据,不支持fl
oat型与long型,运算字节码基本单元缩短为16位等方面改动提高了Javacard中应用程序存储空间利用率。字节码是否应该提供硬件支持主要取决于性能、设计空间、
通信开销以及内存关键因素。设计采用Javacard虚拟机指令系统子集SJCVM,不包括int型指令。字节码功能实现通过微序列来解释执行实现。SJCVM中共定义了101条Javacard指令、2条扩展指令、265条微指令。遇到未定义的指令宕机。为方便同外设交互数据,SJCVM指令集基于栈式指令集特点扩展了两条双字节指令:rdmem_ext和wrmem_ext。rdmem_ext可以读取外设中地址addressbyte对应的数据并压栈。wrmem_ext可以将栈顶的数据弹出并写入外设中addressbyte指定的地址单元。公用的15条微指令主要用于系统初始化、分支跳转及状态复用。
2.2微体系结构微体系结构层是实现指令系统层的基础。微体系结构层的设计在Javacard规范说明书中并没有具体规定,需要由设计者规划。SJCVM微体系结构的实现所示。AvalonMaster是Avalon-MM型主接口。软核HDL源设计文件顶层封装Avm_m1采用符合主接口信号命名规则,便于元件编辑器能很方便识别接口信号,减少手工配置
工作量,也利于采用自顶向下的开发流程。memory利用隐含地址为指针提供基地址,并通过指针来访问。Data_memory为256*16bits双端口RAM,地址0x0000、0x0040、0x0080划分出
操作数栈sp、局部变量lv、常量池。Program_memory为256*8bits,通过pc访问。MC_REGs是内存控制寄存器,包含mar、mdr、pc、mbr、ir寄存器。SA_REGs是总线A的数据源寄存器,由寄存器h、constants组成。SB_REGs是总线B的数据源寄存器,由寄存器sp、lv、cpp、tos、tm1、tm2组成。Flag_REGs是标志位寄存器,存储了B与0、B与A各六种大小比较标志,为微序列控制器的mpc地址映射提供条件输入信号。ALU是主要算术逻辑运算单元,运算数据A与B由SA_REGs与SB_REGs提供。ALU内部执行16bits的short型数据运算,8bits的byte型数据经扩展存成short型。开发实现过程中应用LPM功能模块库提高IC设计效率。ExecutionController采用直接控制方式微指令格式的微序列控制器。微指令共52位,分9组信号,包括:决定下一条微指令映射的JAM域;主端口读写传输操作的AVM域;内存操作的MEM域;C总线数据要写入的寄存器选择的C域;选择B总线与A总线数据来源的B域和A域;控制ALU操作的ALU域;选择输出常数的CON域;指出下址的ADDR域。微程序计数器Mpc共有9位。执行重映射操作的逻辑是最高位,布尔函数式F=(JmpBAANDFlagz)OR(JmpzANDFlagn)ORNEXT_ADDR[8]。执行微指令译码的逻辑是后八位,布尔函数式B=JmpcAND(MBR_IRORNEXT_ADDR)OR((NOTJmpc)ANDNEXT_ADDR)。时序电路控制系统停机与运行及四个节拍脉冲。每个节拍对应子周期内处理器动作为:T1时控制信号建立;T2时寄存器的内容加载到B总线;T3时ALU运算结果送到寄存器;T4时内存读写及微控制器译出微指令。整个设计层次化、文件命名格式统一化。顶层主要包括jcc_core顶层文件与project_p工程Package文件。Project_p.VHD包含了所有子模块声明和全局参数声明,与WORK库共同为整个系统工程提供模块复用支持。