《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > Javacard CPU的設(shè)計(jì)與FPGA實(shí)現(xiàn)
Javacard CPU的設(shè)計(jì)與FPGA實(shí)現(xiàn)
摘要: 支持Javacard技術(shù)標(biāo)準(zhǔn)是智能卡的發(fā)展方向,目前的Javacard系統(tǒng)大多是采用軟件虛擬機(jī)的方式來(lái)解釋執(zhí)行或者通過(guò)just-in-time方式執(zhí)行Java指令,系統(tǒng)軟件平臺(tái)本身占用了大量的資源,且執(zhí)行效率不高.解決這些問(wèn)題的方法就是實(shí)現(xiàn)硬件Javacard指令處理器.該文給出了一種基于微碼的Javacard指令處理器的FPGA設(shè)計(jì)和實(shí)現(xiàn),以JavacardCPU為核心搭建JavacardCPU測(cè)試平臺(tái),并將其集成在一塊FPGA上實(shí)現(xiàn).
關(guān)鍵詞: FPGA Javacard CPU
Abstract:
Key words :

1 JavaCard簡(jiǎn)介

    智能卡是指集成了CPU、ROM、RAM、COS(芯片操作系統(tǒng))和EEPROM,能儲(chǔ)存信息和圖像,具備讀/寫能力,信息能被加密保護(hù)的便攜卡。智能卡的最基本標(biāo)準(zhǔn)是ISO/IEC7816。智能卡在銀行、電信等行業(yè)得到廣泛應(yīng)用,但在發(fā)展過(guò)程中也遇到很多問(wèn)題,主要有:各廠商指令集不統(tǒng)一;編程接口APIs太復(fù)雜;開(kāi)發(fā)環(huán)境不通用,新卡開(kāi)發(fā)都要熟悉開(kāi)發(fā)環(huán)境;系統(tǒng)不兼容,專卡專用。由于開(kāi)發(fā)門檻過(guò)高,影響了智能卡的發(fā)展。市場(chǎng)對(duì)智能卡的發(fā)展提出了新的要求,Sun公司提出了Java Card開(kāi)放標(biāo)準(zhǔn)。JavaCard技術(shù)將智能卡與Java技術(shù)相結(jié)合,克服了智能卡開(kāi)發(fā)技術(shù)太專業(yè)、開(kāi)發(fā)周期長(zhǎng)等阻礙智能卡普及的缺點(diǎn),允許智能卡運(yùn)行Java編寫的應(yīng)用程序。JavaCard技術(shù)繼承了Java語(yǔ)言的優(yōu)點(diǎn),制定了一個(gè)安全、便捷且多功能的智能卡平臺(tái)。

   JavaCard基本的硬件配置(來(lái)自Sun文檔)為:512B RAM、24KB ROM、8KB EEPROM、8位處理器。典型的JavaCard設(shè)備有8位或16位的CPU,3.7MHz時(shí)鐘頻率,1KB的RAM和大于16KB的非易失存儲(chǔ)(EEPROM或Flash)。高性能的智能卡帶有獨(dú)立的處理器、加密芯片及密碼信息。

    JavaCard系統(tǒng)的實(shí)現(xiàn)有基于軟件虛擬機(jī)和基于硬件兩種方法。基于軟件虛擬機(jī)方法是在非Java處理器上用軟件方法模擬實(shí)現(xiàn)JavaCard平臺(tái),在此平臺(tái)上實(shí)現(xiàn)JavaCard應(yīng)用。基于硬件方法是硬件邏輯實(shí)現(xiàn)JavaCard處理器,在此硬件基礎(chǔ)上實(shí)現(xiàn)JavaCard平臺(tái),再在此平臺(tái)上實(shí)現(xiàn)JavaCard應(yīng)用。

2 Java處理器的實(shí)現(xiàn)方式比較

Java處理器有以下幾種實(shí)現(xiàn)方式:

(1)通用CPU+OS+Java軟件解釋器,軟件解釋執(zhí)行Java指令。

(2)通用CPU+OS+Java JIT(Just-In-Time)編譯器,按塊編譯執(zhí)行Java指令。

(3)Java加強(qiáng)CPU+OS+特殊的Java編譯器,充分使用Java加強(qiáng)硬件的優(yōu)勢(shì)。

(4)Java 硬件CPU,本地支持Java指令,執(zhí)行效率最高。

    目前的Java系統(tǒng)是基于軟件虛擬機(jī)實(shí)現(xiàn)的,軟件解析執(zhí)行Java指令,如(1)、(2)。用軟件實(shí)現(xiàn)JavaCard虛擬機(jī),需要軟件JavaCard指令解釋器,將Java指令轉(zhuǎn)換到本地CPU的指令集。這樣,不但速度慢,而且虛擬機(jī)本身占用內(nèi)存資源,不適合在智能卡這種資源有限的硬件中應(yīng)用。方式(3)要求CPU硬件實(shí)現(xiàn)部分Java指令,它需要特殊的編譯器來(lái)充分發(fā)揮Java加強(qiáng)CPU的功能。方式(4)是最有效的解決方法,Java指令的執(zhí)行不再需要先轉(zhuǎn)換到宿主CPU的本地指令集,同時(shí),它也不占用RAM等軟件資源,可以給應(yīng)用程序提供更多的資源。

    本文介紹JavaCard CPU。系統(tǒng)采用Verilog描述,設(shè)計(jì)成一個(gè)配置靈活、修改方便、資源占用少、兼容性好、可以在普通FPGA中實(shí)現(xiàn)的軟核。

3 JavaCard CPU的設(shè)計(jì)

3.1 Java CPU的硬件實(shí)現(xiàn)技術(shù)

    在CPU的設(shè)計(jì)中,當(dāng)從內(nèi)存中取出下一條指令時(shí),執(zhí)行這條指令有兩種方法,即硬件邏輯方法和微碼序列方法。硬件邏輯方法使用譯碼器、鎖存器、計(jì)數(shù)器和其他一些邏輯部件轉(zhuǎn)移和操作數(shù)據(jù),完成指令功能。微碼序列方法是在內(nèi)部實(shí)現(xiàn)一個(gè)非常簡(jiǎn)潔、快速的微碼處理器。此微碼處理器的每條指令對(duì)應(yīng)很簡(jiǎn)單的硬件動(dòng)作(一般都是單周期指令),將要執(zhí)行的CUP指令作為索引,索引到微碼ROM中的某個(gè)地址,通過(guò)執(zhí)行此地址處的一組微碼完成指令功能。

    硬件邏輯方法的優(yōu)點(diǎn)是能設(shè)計(jì)出更快的CPU,缺點(diǎn)是難以實(shí)現(xiàn)復(fù)雜的指令集,同時(shí)會(huì)導(dǎo)致芯片面積增大。微碼序列方法的優(yōu)點(diǎn)是可以減小芯片的面積,實(shí)現(xiàn)復(fù)雜指令集,缺點(diǎn)是速度有時(shí)較慢。兩種方法的速度快慢并非絕對(duì),微碼指令是簡(jiǎn)單指令,一般每個(gè)時(shí)鐘就能執(zhí)行一條指令。硬件邏輯方法在執(zhí)行CPU指令時(shí),通常也是劃分為幾個(gè)階段執(zhí)行,同樣需要幾個(gè)時(shí)鐘。實(shí)際設(shè)計(jì)中采用哪種方法要權(quán)衡利弊,在速度不是關(guān)鍵時(shí),微碼序列方法是個(gè)很好的選擇。

3.2 JavaCard CPU結(jié)構(gòu)

    JavaCard CPU采用微碼實(shí)現(xiàn),核心部分是微碼處理器,用微碼指令序列實(shí)現(xiàn)JavaCard指令。微碼處理器主要組成為:主控邏輯CORE,運(yùn)算單元ALU,內(nèi)部堆棧單元STACK,微碼ROM,微碼指令指針調(diào)整模塊MCPC,外存讀寫接口MEMRW,通過(guò)wishbone總線連接外部RAM、ROM、I/O。各模塊之間連接關(guān)系、數(shù)據(jù)通路、控制通路以及應(yīng)答信號(hào)連接見(jiàn)圖1。

3.3 微碼處理器各模塊接口及功能

(1)運(yùn)算單元ALU

    module alu(x,y,op,z,flag,calc,rst,ack,clk);

    x、y為輸入操作數(shù),op為操作碼,z為輸出結(jié)果,flag為輸出運(yùn)算結(jié)果標(biāo)志,calc為運(yùn)算使能控制信號(hào),ack為運(yùn)算結(jié)束應(yīng)答。本模塊完成op定義的運(yùn)算,并給出標(biāo)志位和應(yīng)答。

各模塊之間連接關(guān)系、數(shù)據(jù)通路、控制通路以及應(yīng)答信號(hào)連接

 

(2)內(nèi)部堆棧STACK

module stack(clk,rst,pop,push,data_i,data_o,sp,ack);

pop、push為堆棧的彈出及壓入操作信號(hào),data_i、data_o為數(shù)據(jù)輸入輸出,sp為堆棧指針,ack為堆棧操作結(jié)束應(yīng)答。本模塊根據(jù)pop、push信號(hào)對(duì)堆棧進(jìn)行操作。

(3)微碼ROM

module microcoderom(mcp,mcr);

MCP為微碼ROM的指針,MCR為微碼寄存器。根據(jù)微碼指針MCP,在MCR上輸出MCP處的微碼數(shù)據(jù)。

(4)微碼指令指針調(diào)整模塊MCPC

module mcpc(clk,rst,load,new_mcp,hold,remap,instr,mcp);

微碼指針有保持、重加載、重映射三種操作。重加載是用new_mcp的值作為新的MCP值。重映射是將CPU指令I(lǐng)nstr對(duì)應(yīng)的微碼序列首地址作為新的MCP值。

load信號(hào)有效,用new_mcp的值給MCP賦值;

hold信號(hào)有效,保持MCP值不變;

remap信號(hào)有效,則將CPU指令I(lǐng)nstr做為索引,得到Instr指令對(duì)應(yīng)的微碼序列首地址,將首地址賦給MCP。

以上三個(gè)信號(hào)均無(wú)效時(shí),每時(shí)鐘MCP自動(dòng)加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);

對(duì)外接口采用開(kāi)源的wishbone總線標(biāo)準(zhǔn),wb*信號(hào)是wishbone相關(guān)信號(hào)。根據(jù)rd、wr讀寫信號(hào),操作wishbone信號(hào),等待wishbone的應(yīng)答,然后將數(shù)據(jù)和應(yīng)答信號(hào)反饋給主控模塊。

3.4 本JavaCard CPU設(shè)計(jì)的特點(diǎn)

(1)主控模塊與其他從模塊之間用使能信號(hào)和應(yīng)答信號(hào)保持同步,從模塊在完成操作后只需給出應(yīng)答信號(hào),即可匹配不同速度的從模塊。

(2)微碼指令的設(shè)計(jì)。所有的微碼指令為單指令,即不帶任何操作數(shù)。微碼指令本身包含所需操作的信息,如在哪兩個(gè)寄存器之間轉(zhuǎn)移數(shù)據(jù)等。對(duì)于跳轉(zhuǎn)操作等必須帶后續(xù)操作數(shù)的指令采取變通方法,先將所需操作數(shù)存入內(nèi)部寄存器,再執(zhí)行跳轉(zhuǎn)等指令。詳細(xì)示例為:

     微碼定義為16位。位15指示本微碼是指令還是數(shù)據(jù)。位15==1表示是數(shù)據(jù),此時(shí)微碼的低8位是一個(gè)數(shù)據(jù),處理此微碼時(shí),要將此8位數(shù)據(jù)提取出來(lái),存入內(nèi)部寄存器;位15==0表示是指令。當(dāng)需要執(zhí)行一個(gè)跳轉(zhuǎn)Jmp 0x0809時(shí),微碼序列方法使用三條微碼表示:

0x8008 //位15==1,是數(shù)據(jù)型微碼

0x8009

JMP //指令型微碼助記符

執(zhí)行時(shí),遇到前面兩個(gè)數(shù)據(jù)型微碼,會(huì)將08和09存入內(nèi)部16位數(shù)據(jù)寄存器的高低8位;執(zhí)行JMP指令時(shí),隱含使用此內(nèi)部數(shù)據(jù)寄存器。

(3)所有的微碼指令是單周期指令。由于采用了(2)中所述的單指令微碼,在執(zhí)行當(dāng)前微碼指令的同時(shí)讀取下一條微碼指令,可以做到每個(gè)時(shí)鐘執(zhí)行一條微碼。

(4)簡(jiǎn)潔的主控邏輯。所有JavaCard指令均由微碼執(zhí)行,不采用硬件陷入、軟件模擬方式,簡(jiǎn)化了主控邏輯設(shè)計(jì)。主控模塊狀態(tài)機(jī)僅有EXEC_MC和HLT兩個(gè)狀態(tài)。CPU復(fù)位后,一直處于執(zhí)行微碼EXEC_MC狀態(tài),直到執(zhí)行HLT微碼指令。

(5)適應(yīng)性好。采用了應(yīng)答機(jī)制,可以匹配不同速度的部件;對(duì)外采用wishbone總線,簡(jiǎn)化了各部件接口的設(shè)計(jì),方便了外部設(shè)備的擴(kuò)充。

(6)I/O采用內(nèi)存映射方式統(tǒng)一編址,避免了非Java指令的引入,保證了兼容性。

3.5 Verilog表述的微碼處理器核心邏輯

    下面是主控邏輯框架代碼的一部分。本段代碼體現(xiàn)了如何處理數(shù)據(jù)型微碼和指令型微碼,可以在YOUR_MICRO_CODE_INSTR處添加需要的微碼指令以及對(duì)應(yīng)的操作。

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;//表示是否讀過(guò)了一次

//數(shù)據(jù)型微碼

state[1:0]<=EXEC_MC;

end

else

begin

case(state[1:0])

EXEC_MC:

begin//首先根據(jù)mcr的位15判斷是數(shù)據(jù)型

//微碼還是指令型微碼

if(mcr[15])//mcr中存放微碼,位15==1表示

//此微碼是數(shù)據(jù)型,先保存高8位,再低8位

begin

if(H_READED==1′b0)//首個(gè)數(shù)據(jù)型

//微碼,數(shù)據(jù)保存到高8位

begin

{mcdata[15:8]}<=mcr[7:0];

//mcdata是內(nèi)部數(shù)據(jù)寄存器

H_READED<=1′b1;

end

else

begin

{mcdata[7:0]}<=mcr[7:0];

H_READED<=1′b0;

end

end

else//表示此微碼是指令,根據(jù)后面的15位

//分支操作

begin

case(mcr[15:0])

YOUR_MICRO_CODE_INSTR://

begin

……//定義的微碼操作

end

……//其他微碼指令處理

endcase

end//end for mcr為指令處理

end

HLT://state[1:0]=HLT,宕機(jī)狀態(tài)處理

endcase//end for state[1:0]

end//end for reset

end//end for always@(posedge clk or posedge reset)

    系統(tǒng)采用微碼實(shí)現(xiàn),用微碼序列控制讀取Java指令、存儲(chǔ)數(shù)據(jù),實(shí)現(xiàn)Java指令。JavaCard指令被解釋執(zhí)行的過(guò)程如下:

   讀取JavaCard PC處的JavaCard指令至指令寄存器Instr,發(fā)出remap信號(hào)給微碼指針調(diào)整模塊MCPC,微碼指針寄存器MCP得到新的JavaCard指令對(duì)應(yīng)的微碼序列首地址,MCP的變化使微碼指令寄存器MCR變?yōu)樵撐⒋a序列的首個(gè)微碼指令,再由微碼處理器執(zhí)行此MCR中的微碼。

4 JavaCard CPU測(cè)試平臺(tái)的FPGA實(shí)現(xiàn)

4.1 外圍接口和模塊

    測(cè)試平臺(tái)是以一塊xc2s200芯片為核心的簡(jiǎn)單開(kāi)發(fā)板,全部設(shè)計(jì)都在此芯片內(nèi)實(shí)現(xiàn),包括CPU邏輯、存儲(chǔ)單元等,板上的8位led指示燈用作I/O輸出端口。

4.2 測(cè)試平臺(tái)框架

 

測(cè)試平臺(tái)框架結(jié)構(gòu)如圖2所示。

測(cè)試平臺(tái)框架結(jié)構(gòu)

 

4.3 結(jié)果說(shuō)明

    設(shè)計(jì)是用Verilog語(yǔ)言實(shí)現(xiàn)的,內(nèi)部使用16位數(shù)據(jù)總線,對(duì)外是8位的wishbone總線,微碼ROM為4KB,外接512B的ROM和512B的RAM。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲欧美一区二区三区久久 | 欧美在线啊v| 宅男精品视频| av成人动漫| 一级日韩一区在线观看| 亚洲精品一区二区在线| 最新热久久免费视频| 亚洲国产日韩在线一区模特| 亚洲国产成人一区| 亚洲第一久久影院| 91久久夜色精品国产九色| 亚洲国产精品传媒在线观看| 亚洲高清不卡av| 亚洲区免费影片| 一本一道久久综合狠狠老精东影业| 日韩视频三区| 一个人看的www久久| 亚洲视频第一页| 亚洲欧美日韩成人高清在线一区| 亚洲欧美美女| 久久精品日产第一区二区三区| 亚洲国产精品久久精品怡红院| 亚洲欧洲一区二区三区在线观看| 亚洲精品视频一区| 宅男66日本亚洲欧美视频| 亚洲午夜羞羞片| 欧美伊人久久| 久久夜色精品国产亚洲aⅴ| 女仆av观看一区| 欧美日韩91| 国产精品裸体一区二区三区| 国产情人综合久久777777| 激情综合中文娱乐网| 亚洲精品1区2区| 亚洲视频一区二区| 香蕉久久一区二区不卡无毒影院| 亚洲福利视频一区| 一本综合久久| 欧美一级专区免费大片| 另类春色校园亚洲| 欧美日韩一级大片网址| 国产精品自拍一区| 在线观看欧美日韩| 一区二区高清视频| 欧美综合国产| 一区二区福利| 久久国产精品一区二区三区| 免费在线观看成人av| 欧美日一区二区三区在线观看国产免| 国产精品一区视频| 亚洲黑丝在线| 亚洲一区二三| 91久久亚洲| 亚洲欧美日韩综合国产aⅴ| 久久久五月婷婷| 欧美日韩亚洲一区二| 国产亚洲欧美一区在线观看| 亚洲肉体裸体xxxx137| 亚洲欧美综合精品久久成人| 亚洲欧洲综合另类| 亚洲欧美一区二区三区极速播放 | 国产视频一区在线| 亚洲国产欧美在线| 午夜精品久久一牛影视| 99视频热这里只有精品免费| 欧美在线亚洲一区| 欧美日韩1区| 国产综合色精品一区二区三区| 亚洲日本无吗高清不卡| 欧美一区二区网站| 亚洲一级免费视频| 美女亚洲精品| 国产欧美视频一区二区| 亚洲免费高清视频| 亚洲国产一区在线观看| 欧美影院视频| 欧美天堂亚洲电影院在线观看| 樱桃视频在线观看一区| 午夜精品久久久久久久99水蜜桃| 日韩午夜激情| 久久综合九色九九| 国产免费成人av| 亚洲视频精品| 99成人精品| 毛片一区二区| 国产亚洲欧洲| 亚洲免费视频在线观看| 夜夜嗨av一区二区三区网站四季av | 亚洲欧美日韩综合| 亚洲深夜福利| 欧美福利在线| 国内综合精品午夜久久资源| 亚洲综合国产激情另类一区| 一区二区三区黄色| 欧美高潮视频| 在线欧美日韩精品| 久久成人资源| 久久av一区二区三区| 国产精品高清网站| 99精品热6080yy久久| 亚洲久久一区| 欧美va亚洲va国产综合| 黄色综合网站| 久久精品99无色码中文字幕| 久久成人精品视频| 国产欧美精品久久| 亚洲免费影视| 亚洲欧美另类在线观看| 国产精品高潮呻吟久久av无限| 亚洲免费观看高清完整版在线观看熊 | 在线观看欧美日韩国产| 久久精品人人爽| 久久免费视频在线| 国产在线精品二区| 欧美自拍偷拍| 久久人91精品久久久久久不卡| 国产无一区二区| 久久成人一区二区| 久久五月天婷婷| 今天的高清视频免费播放成人| 久久gogo国模啪啪人体图| 久久久99久久精品女同性| 国产亚洲在线观看| 久久精品91久久香蕉加勒比| 久久久久看片| 精品不卡在线| 亚洲精品乱码久久久久久蜜桃麻豆| 蜜桃av噜噜一区| 亚洲国产天堂久久综合网| 亚洲精品一区二区三区蜜桃久 | 午夜免费日韩视频| 久久精品视频免费| 国产综合精品| 91久久黄色| 欧美欧美天天天天操| 一区二区成人精品| 性色av一区二区三区在线观看| 国产精品日韩高清| 欧美一区二区三区婷婷月色| 美女诱惑一区| 亚洲精品免费观看| 亚洲欧美日韩中文播放| 国产亚洲欧美日韩精品| 亚洲国产老妈| 欧美激情一区二区三区在线| 99综合精品| 欧美主播一区二区三区| 海角社区69精品视频| 亚洲三级性片| 国产精品久久国产愉拍| 欧美一区二区三区四区在线观看地址 | 国产精品尤物| 久久激情五月丁香伊人| 欧美高清一区| 亚洲性感激情| 久久尤物视频| 亚洲免费av网站| 欧美在线视频导航| 亚洲电影第1页| 亚洲专区在线| 一区二区三区在线免费视频| 一区二区三欧美| 国产精品爽爽ⅴa在线观看| 亚洲高清不卡一区| 欧美午夜精品伦理| 久久成人在线| 欧美日韩专区在线| 欧美在线免费视屏| 欧美伦理影院| 午夜日韩激情| 欧美日韩91| 久久精品国产99| 欧美性猛交xxxx乱大交退制版| 欧美一区二区三区成人| 欧美日韩不卡| 欧美一区二视频在线免费观看| 欧美精品免费视频| 欧美一区二区三区啪啪| 欧美日韩一区二区三区在线 | 在线欧美福利| 欧美亚洲色图校园春色| 136国产福利精品导航| 香港成人在线视频| 亚洲人成亚洲人成在线观看| 欧美影院精品一区| 亚洲免费精彩视频| 理论片一区二区在线| 亚洲午夜视频在线| 欧美精品成人91久久久久久久| 午夜一区二区三视频在线观看| 欧美精品激情在线| 久久精品网址| 国产精品一区二区视频| 亚洲精品小视频在线观看| 国产婷婷97碰碰久久人人蜜臀| 亚洲无吗在线| 亚洲黄网站在线观看| 久久久久国产精品厨房| 中文日韩在线| 欧美日韩国产一区|