1 JavaCard简介
智能卡是指集成了CPU、ROM、RAM、COS(芯片操作体系)和EEPROM,能贮存信息和图画,具有读/写才能,信息能被加密维护的便携卡。智能卡的最根本规范是ISO/IEC7816。智能卡在银行、电信等职业得到广泛运用,但在开展进程中也遇到许多问题,首要有:各厂商指令集不一致;编程接口APIs太杂乱;开发环境不通用,新卡开发都要了解开发环境;体系不兼容,专卡专用。因为开发门槛过高,影响了智能卡的开展。商场对智能卡的开展提出了新的要求,Sun公司提出了Java Card敞开规范。JavaCard技能将智能卡与Java技能相结合,克服了智能卡开发技能太专业、开发周期长等阻止智能卡遍及的缺陷,答应智能卡运转Java编写的运用程序。JavaCard技能承继了Java言语的长处,拟定了一个安全、快捷且多功用的智能卡渠道。
JavaCard根本的硬件装备(来自Sun文档)为:512B RAM、24KB ROM、8KB EEPROM、8位处理器。典型的JavaCard设备有8位或16位的CPU,3.7MHz时钟频率,1KB的RAM和大于16KB的非易失存储(EEPROM或Flash)。高功能的智能卡带有独立的处理器、加密芯片及暗码信息。
JavaCard体系的完结有依据软件虚拟机和依据硬件两种办法。依据软件虚拟机办法是在非Java处理器上用软件办法模仿完结JavaCard渠道,在此渠道上完结JavaCard运用。依据硬件办法是硬件逻辑完结JavaCard处理器,在此硬件基础上完结JavaCard渠道,再在此渠道上完结JavaCard运用。
2 Java处理器的完结办法比较
Java处理器有以下几种完结办法:
(1)通用CPU+OS+Java软件解说器,软件解说履行Java指令。
(2)通用CPU+OS+Java JIT(Just-In-Time)编译器,按块编译履行Java指令。
(3)Java加强CPU+OS+特别的Java编译器,充沛运用Java加强硬件的优势。
(4)Java 硬件CPU,本地支撑Java指令,履行功率最高。
现在的Java体系是依据软件虚拟机完结的,软件解析履行Java指令,如(1)、(2)。用软件完结JavaCard虚拟机,需求软件JavaCard指令解说器,将Java指令转换到本地CPU的指令集。这样,不光速度慢,并且虚拟机自身占用内存资源,不适合在智能卡这种资源有限的硬件中运用。办法(3)要求CPU硬件完结部分Java指令,它需求特别的编译器来充沛发挥Java加强CPU的功用。办法(4)是最有用的解决办法,Java指令的履行不再需求先转换到宿主CPU的本地指令集,一起,它也不占用RAM等软件资源,能够给运用程序供给更多的资源。
本文介绍JavaCard CPU。体系选用Verilog描绘,规划成一个装备灵敏、修正便利、资源占用少、兼容性好、能够在一般FPGA中完结的软核。
3 JavaCard CPU的规划
3.1 Java CPU的硬件完结技能
在CPU的规划中,当从内存中取出下一条指令时,履行这条指令有两种办法,即硬件逻辑办法和微码序列办法。硬件逻辑办法运用译码器、锁存器、计数器和其他一些逻辑部件搬运和操作数据,完结指令功用。微码序列办法是在内部完结一个十分简练、快速的微码处理器。此微码处理器的每条指令对应很简略的硬件动作(一般都是单周期指令),即将履行的CUP指令作为索引,索引到微码ROM中的某个地址,经过履行此地址处的一组微码完结指令功用。
硬件逻辑办法的长处是能规划出更快的CPU,缺陷是难以完结杂乱的指令集,一起会导致芯片面积增大。微码序列办法的长处是能够减小芯片的面积,完结杂乱指令集,缺陷是速度有时较慢。两种办法的速度快慢并非肯定,微码指令是简略指令,一般每个时钟就能履行一条指令。硬件逻辑办法在履行CPU指令时,一般也是划分为几个阶段履行,相同需求几个时钟。实践规划中选用哪种办法要权衡利弊,在速度不是要害时,微码序列办法是个很好的挑选。
3.2 JavaCard CPU结构
JavaCard CPU选用微码完结,中心部分是微码处理器,用微码指令序列完结JavaCard指令。微码处理器首要组成为:主控逻辑CORE,运算单元ALU,内部仓库单元STACK,微码ROM,微码指令指针调整模块MCPC,外存读写接口MEMRW,经过wishbone总线衔接外部RAM、ROM、I/O。各模块之间衔接联系、数据通路、操控通路以及应对信号衔接见图1。
3.3 微码处理器各模块接口及功用
(1)运算单元ALU
module alu(x,y,op,z,flag,calc,rst,ack,clk);
x、y为输入操作数,op为操作码,z为输出成果,flag为输出运算成果标志,calc为运算使能操控信号,ack为运算完毕应对。本模块完结op界说的运算,并给出标志位和应对。
(2)内部仓库STACK
module stack(clk,rst,pop,push,data_i,data_o,sp,ack);
pop、push为仓库的弹出及压入操作信号,data_i、data_o为数据输入输出,sp为仓库指针,ack为仓库操作完毕应对。本模块依据pop、push信号对仓库进行操作。
(3)微码ROM
module microcoderom(mcp,mcr);
MCP为微码ROM的指针,MCR为微码寄存器。依据微码指针MCP,在MCR上输出MCP处的微码数据。
(4)微码指令指针调整模块MCPC
module mcpc(clk,rst,load,new_mcp,hold,remap,instr,mcp);
微码指针有坚持、重加载、重映射三种操作。重加载是用new_mcp的值作为新的MCP值。重映射是将CPU指令Instr对应的微码序列首地址作为新的MCP值。
load信号有用,用new_mcp的值给MCP赋值;
hold信号有用,坚持MCP值不变;
remap信号有用,则将CPU指令Instr做为索引,得到Instr指令对应的微码序列首地址,将首地址赋给MCP。
以上三个信号均无效时,每时钟MCP主动加1。
(5)外存读写接口MEMRW
module memrw(clk,addr,data_read_in,data_write_out,ack,rst,rd,wr,wb_stb_out,wb_cyc_out,wb_ack_in,wb_addr_out, wb_data_in,wb_data_out,wb_we_out);
对外接口选用开源的wishbone总线规范,wb*信号是wishbone相关信号。依据rd、wr读写信号,操作wishbone信号,等候wishbone的应对,然后将数据和应对信号反馈给主控模块。
3.4 本JavaCard CPU规划的特色
(1)主控模块与其他从模块之间用使能信号和应对信号坚持同步,从模块在完结操作后只需给出应对信号,即可匹配不同速度的从模块。
(2)微码指令的规划。一切的微码指令为单指令,即不带任何操作数。微码指令自身包含所需操作的信息,如在哪两个寄存器之间搬运数据等。关于跳转操作等有必要带后续操作数的指令采纳变通办法,先将所需操作数存入内部寄存器,再履行跳转等指令。具体示例为:
微码界说为16位。位15指示本微码是指令仍是数据。位15==1表明是数据,此刻微码的低8位是一个数据,处理此微码时,要将此8位数据提取出来,存入内部寄存器;位15==0表明是指令。当需求履行一个跳转Jmp 0x0809时,微码序列办法运用三条微码表明:
0x8008 //位15==1,是数据型微码
0x8009
JMP //指令型微码助记符
履行时,遇到前面两个数据型微码,会将08和09存入内部16位数据寄存器的凹凸8位;履行JMP指令时,隐含运用此内部数据寄存器。
(3)一切的微码指令是单周期指令。因为选用了(2)中所述的单指令微码,在履行当时微码指令的一起读取下一条微码指令,能够做到每个时钟履行一条微码。
(4)简练的主控逻辑。一切JavaCard指令均由微码履行,不选用硬件堕入、软件模仿办法,简化了主控逻辑规划。主控模块状况机仅有EXEC_MC和HLT两个状况。CPU复位后,一向处于履行微码EXEC_MC状况,直到履行HLT微码指令。
(5)适应性好。选用了应对机制,能够匹配不同速度的部件;对外选用wishbone总线,简化了各部件接口的规划,便利了外部设备的扩大。
(6)I/O选用内存映射办法一致编址,避免了非Java指令的引进,确保了兼容性。
3.5 Verilog表述的微码处理器中心逻辑
下面是主控逻辑结构代码的一部分。本段代码表现了如何处理数据型微码和指令型微码,能够在YOUR_MICRO_CODE_INSTR处增加需求的微码指令以及对应的操作。
always@(posedge clk or posedge reset)
begin
if(reset)
begin
new_mcp[15:0]=init_ADDR;//初始化微码
//序列首地址
{pop,push,alu_calc,memrd,memwr,load_mcp,hold_mcp,remap_mcp}=8′b00000000;
H_READED=1′b0;//表明是否读过了一次
//数据型微码
state[1:0]=EXEC_MC;
end
else
begin
case(state[1:0])
EXEC_MC:
begin//首要依据mcr的位15判别是数据型
//微码仍是指令型微码
if(mcr[15])//mcr中寄存微码,位15==1表明
//此微码是数据型,先保存高8位,再低8位
begin
if(H_READED==1′b0)//首个数据型
//微码,数据保存到高8位
begin
{mcdata[15:8]}=mcr[7:0];
//mcdata是内部数据寄存器
H_READED=1′b1;
end
else
begin
{mcdata[7:0]}=mcr[7:0];
H_READED=1′b0;
end
end
else//表明此微码是指令,依据后边的15位
//分支操作
begin
case(mcr[15:0])
YOUR_M%&&&&&%RO_CODE_INSTR://
begin
……//界说的微码操作
end
……//其他微码指令处理
endcase
end//end for mcr为指令处理
end
HLT://state[1:0]=HLT,宕机状况处理
…
endcase//end for state[1:0]
end//end for reset
end//end for always@(posedge clk or posedge reset)
体系选用微码完结,用微码序列操控读取Java指令、存储数据,完结Java指令。JavaCard指令被解说履行的进程如下:
读取JavaCard PC处的JavaCard指令至指令寄存器Instr,宣布remap信号给微码指针调整模块MCPC,微码指针寄存器MCP得到新的JavaCard指令对应的微码序列首地址,MCP的改变使微码指令寄存器MCR变为该微码序列的首个微码指令,再由微码处理器履行此MCR中的微码。
4 JavaCard CPU测验渠道的FPGA完结
4.1 外围接口和模块
测验渠道是以一块xc2s200芯片为中心的简略开发板,悉数规划都在此芯片内完结,包含CPU逻辑、存储单元等,板上的8位led指示灯用作I/O输出端口。
4.2 测验渠道结构
测验渠道结构结构如图2所示。
4.3 成果阐明
规划是用Verilog言语完结的,内部运用16位数据总线,对外是8位的wishbone总线,微码ROM为4KB,外接512B的ROM和512B的RAM。
JavaCard 界说了187条指令,其间47条指令触及32位整型数。对32位整型数的支撑是可选的,本次没有完结对32位整型数操作的指令,遇到未界说指令的操作为宕机。共界说了109条微码指令。用了3273条微码指令序列完结体系初始化操作和解说JavaCard指令,每条JavaCard指令约用17条微码指令履行(首要是有些面向对象的杂乱指令需求更多的微码解说)。
整个体系占用资源很少:4个Block RAM,2 052个Slice,能够在一般FPGA上完结。
测验代码下载到板上的ROM中,以24MHz时钟运转经过,验证了JavaCard指令处理的正确性,功能彻底满意JavaCard虚拟机规范要求。
完结JavaCard硬件CPU是JavaCard的开展方向。因用处原因,它不需求很高的功能,而更需求成本低、资源占用少、功耗低一级特性。JavaCard指令集是面向对象的杂乱指令集,很难直接用硬件完结。选用微码办法完结是很好的挑选,每一条微码对应一个很简略的硬件动作,硬件完结简单,且运用的资源少。用微码序列完结JavaCard指令,使硬件规划坚持简练、灵敏、修正便利,有些改动只需重写微码序列而不需求更改硬件规划;增加新功用支撑的也只需求修正微码,如硬件完结加密办法调用接口。JavaCard硬件CPU的完结必将促进JavaCard的运用。