- 浏览: 387825 次
- 性别:
- 来自: 北京
最新评论
-
liuzhongzhou2721:
不错啊
Snmp4j编程简介之三:Snmp -
ahong520:
我在Keystore.getInstance("JK ...
java实现 SSL双向认证 -
tanghanlin:
好吧,还是支持下
Snmp4j编程简介之三:Snmp -
sjp524617477:
mark
java实现 SSL双向认证 -
dikesky:
您好,看了您的这篇文章学到很多东西。希望您提供一个QQ号(发到 ...
httpclient笔记(二)
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,a ck,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;//初始化微码
<!-- 2008-5-2 18:22:25-->
//序列首地址
{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_MICRO_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.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的应用。
发表评论
-
OpenNMS® 安裝指南
2011-03-10 16:20 1905THIS DOCUMENT IS FOR OpeNNMS 1. ... -
OSGI学习笔记(三)
2010-09-09 11:08 1203OSGi依赖性管理 OSGi允许您把您的应用程序分成多个模 ... -
OSGI学习笔记(二)
2010-09-09 11:03 1536开发一个简单的Hello World的OSGi Bundle( ... -
OSGI学习笔记(一)
2010-09-09 10:43 1198OSGi是什么 OSGi亦称做Java语言的动态模块系统,它 ... -
Javarebel小试
2010-09-07 16:49 34171 Javarebel简介 JavaRebel是一个JV ... -
240多个jQuery插件下载地址
2009-08-11 17:24 12048概述 jQuery 是继 prototype 之后又一个优秀 ... -
关于SNMP的RFC文档号
2009-05-04 16:10 4635一. SMIv1Full Standards: ... -
Java Card 技术(三)
2009-05-04 14:17 2662Java Card 应用程序的元素 请记住,Java ... -
Java Card 技术(二)
2009-05-04 14:13 2763本系列文章的第 1 部分介绍了 Java Card 技术的 ... -
Extjs学习笔记(一)
2008-12-15 13:39 1634下载extj :http://extjs.com/deploy ... -
ftp4j之FTP
2008-12-01 10:11 3739The ftp4j library implements a ... -
James学习笔记
2008-11-25 15:13 3419Apache James 简称 James, 是 Java ... -
非阻塞的Socket链接(来自老紫竹)
2008-11-25 11:10 1749import java.io.IOException; ... -
java实现 SSL双向认证
2008-11-24 16:36 31289实现技术:JSSE(Java Security Socket ... -
编码传说
2008-11-21 17:38 1347很久很久以前,有一群人,他们决定用8个可以开合的晶体管来 ... -
使用Log4j进行日志操作
2008-10-16 11:36 1180使用Log4j进行日志操作1. 概述1.1. 背景在应用程序中 ... -
linux 下cpu 内存 磁盘 jvm的使用监控
2008-07-24 13:50 2985java 监控linux CPU 内存 磁盘 JVM: imp ... -
snmp4j获取数据agent实例(三)
2008-07-03 11:43 6733agent代理端例子: import java.util. ... -
snmp4j获取数据实例(二)之SnmpTrap示例
2008-07-03 10:27 6654snmp4j的jar包可以在它的官方网站http://www. ... -
snmp4j获取数据实例(一,Linux SNMP OID’s for CPU,Memory a)
2008-07-03 09:10 9107常用SNMP OID Linux SNMP OID’s f ...
相关推荐
JavaCard CPU设计与FPGA实现是嵌入式领域的一个重要课题,主要针对智能卡和物联网设备的安全计算需求。JavaCard技术是由Sun公司提出的,旨在解决传统智能卡开发中遇到的问题,如指令集不统一、API复杂、开发环境不...
4. **API实现**:JavaCard API是一组预定义的类和接口,用于与智能卡硬件交互。OpenJCVVM需要提供这些API的实现。 5. **卡片生命周期管理**:包括卡片的初始化、个人化、应用选择和终止等步骤。 6. **事件驱动编程...
【JCOP Eclipse javacard 插件】是一个专为Eclipse集成开发环境设计的扩展工具,主要用于支持Java Card应用的开发、调试和测试。Java Card技术是Sun Microsystems(现为Oracle)推出的一种在智能卡、SIM卡等微型设备...
例如,在移动通信中,JavaCard Applet可以实现SIM卡上的各种业务功能,如通话计费、短信服务等。在金融领域,JavaCard技术用于制作安全的银行卡,提供加密和签名功能,确保交易的安全性。 总的来说,"JavaCard应用...
JavaCard应用程序开发主要聚焦于利用Java技术来设计和构建智能卡以及其他资源受限设备的应用程序。Java Card技术由Sun Microsystems(现已被Oracle收购)推出,它为小型、安全、嵌入式系统提供了一种强大而安全的...
Java Card技术是Oracle公司推出的一种安全的嵌入式计算平台,主要用于智能卡、SIM卡、电子身份证等设备,实现安全的存储和处理信息。Java Card Development Kit (JCDK) 是开发这种技术的基础工具集,提供了编写、...
在JavaCard中,这通常通过特定的JCOP(Java Card Operating System)命令来实现,这些命令遵循GlobalPlatform规范,以确保操作的可靠性和不可逆性。 2. **文件系统**:JavaCard上的文件系统是基于ISO 7816标准的,...
JavaCard技术是一种专为智能卡和其他资源受限设备设计的Java技术实现。它提供了在非常有限的内存空间(如几KB RAM)内运行高度安全、多应用的环境的能力。JavaCard 3.0.1 Classic Edition是该技术的一个重要版本,于...
- **定义**: JavaCard是由Sun Microsystems开发的一种适用于智能卡和其他资源受限设备的技术,用于在这些设备上实现Java程序。 - **目标**: JavaCard旨在使不同供应商的应用程序能够在一个平台上安全共存,提高智能...
这个"javacard_v2.2.1.rar"压缩包包含了Java Card开发的核心规范和相关文档,对于初学者来说是一份非常宝贵的学习资源。 1. **GP规范**:GP,全称GlobalPlatform,是一个开放的国际标准,定义了如何在智能卡或其他...
javacard开发环境 Eclipse 配置完成 安装了jdk后可以直接开发
Java Card是一种专为智能卡等小型设备设计的Java平台子集,用于执行安全、多应用的智能卡。要开发Java Card应用程序,开发者需要配置特定的开发环境。根据给定的文件内容,我们可以详细梳理出Windows环境下配置Java ...
1. JavaCard平台:JavaCard是Java的一个子集,专为嵌入式系统,尤其是智能卡设计。它包括JavaCard虚拟机(JCVM)和一组受限的Java类库。 2. Applet:在JavaCard中,应用程序通常称为Applet,它们是小型的Java程序,...
基于JAVACARD的校园一卡通设计与实现_李永辉
5. **开发手册**: "JavaCard应用程序开发三部曲.pdf"很可能是一个详细的指南,涵盖了Java Card开发的各个方面,包括API、安全机制、卡片管理等,对于初学者来说是一份宝贵的参考资料。 6. **Java Card SDK**: java_...
本文档集主要针对的是中文环境下的Global Platform与JavaCard开发,为开发者提供了一套详细的指南。 Global Platform是一种开放的标准,其目标是确保不同厂商的智能卡系统可以互操作。这个平台定义了两个主要的角色...
配置完成的Eclipse环境,可以开发java卡,javacard jcop nxp 环境配置完成,测试可运行
4. 应用设计:设计基于Java Card技术的应用程序,实现校园卡系统的功能。 三、基于Java Card技术的安全性设计 基于Java Card技术的安全性设计是校园卡系统的关键部分。Java Card技术可以提供安全的解决方案,保护...