《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 業(yè)界動(dòng)態(tài) > JavaCard CPU的設(shè)計(jì)與FPGA實(shí)現(xiàn)

JavaCard CPU的設(shè)計(jì)與FPGA實(shí)現(xiàn)

2008-03-31
作者:張德學(xué),,郭 立,,傅忠謙,何

  摘 要: 給出了一種基于微碼的JavaCard指令處理器的FPGA設(shè)計(jì)和實(shí)現(xiàn),,以此JavaCard CPU為核心搭建的測試平臺(tái)" title="測試平臺(tái)">測試平臺(tái)已集成在一塊FPGA上實(shí)現(xiàn),。
  關(guān)鍵詞: JavaCard 處理器 智能卡


1 JavaCard簡介
  智能卡是指集成了CPU,、ROM、RAM,、COS(芯片操作系統(tǒng))和EEPROM,,能儲(chǔ)存信息和圖像,具備讀/寫能力,,信息能被加密保護(hù)的便攜卡,。智能卡的最基本標(biāo)準(zhǔn)是ISO/IEC7816。智能卡在銀行,、電信等行業(yè)得到廣泛應(yīng)用,,但在發(fā)展過程中也遇到很多問題,主要有:各廠商指令集" title="指令集">指令集不統(tǒng)一,;編程接口APIs太復(fù)雜,;開發(fā)環(huán)境不通用,新卡開發(fā)都要熟悉開發(fā)環(huán)境,;系統(tǒng)不兼容,,專卡專用,。由于開發(fā)門檻過高,,影響了智能卡的發(fā)展。市場對智能卡的發(fā)展提出了新的要求,,Sun公司提出了Java Card開放標(biāo)準(zhǔn),。JavaCard技術(shù)將智能卡與Java技術(shù)相結(jié)合,克服了智能卡開發(fā)技術(shù)太專業(yè),、開發(fā)周期長等阻礙智能卡普及的缺點(diǎn),,允許智能卡運(yùn)行Java編寫的應(yīng)用程序,。JavaCard技術(shù)繼承了Java語言的優(yōu)點(diǎn),制定了一個(gè)安全,、便捷且多功能的智能卡平臺(tái),。
  JavaCard基本的硬件配置(來自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ī)和基于硬件兩種方法,?;谲浖摂M機(jī)方法是在非Java處理器上用軟件方法模擬實(shí)現(xiàn)JavaCard平臺(tái),在此平臺(tái)上實(shí)現(xiàn)JavaCard應(yīng)用,?;谟布椒ㄊ?a class="cblue" href="http://forexkbc.com/search/?q=硬件邏輯" title="硬件邏輯">硬件邏輯實(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)勢,。
  (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)" title="硬件實(shí)現(xiàn)">硬件實(shí)現(xiàn)部分Java指令,,它需要特殊的編譯器來充分發(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è)非常簡潔,、快速的微碼處理器。此微碼處理器的每條指令對應(yīng)很簡單的硬件動(dòng)作(一般都是單周期指令),,將要執(zhí)行的CUP指令作為索引,,索引到微碼ROM中的某個(gè)地址,通過執(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í)較慢,。兩種方法的速度快慢并非絕對,,微碼指令是簡單指令,一般每個(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,,通過wishbone總線連接外部RAM,、ROM、I/O,。各模塊之間連接關(guān)系,、數(shù)據(jù)通路、控制通路以及應(yīng)答信號(hào)連接見圖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)答,。
  (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)對堆棧進(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對應(yīng)的微碼序列首地址作為新的MCP值,。
  load信號(hào)有效,用new_mcp的值給MCP賦值,;
  hold信號(hào)有效,,保持MCP值不變;
  remap信號(hào)有效,,則將CPU指令I(lǐng)nstr做為索引,,得到Instr指令對應(yīng)的微碼序列首地址,,將首地址賦給MCP。
  以上三個(gè)信號(hào)均無效時(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);
  對外接口采用開源的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ù)等。對于跳轉(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ù)提取出來,,存入內(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)簡潔的主控邏輯,。所有JavaCard指令均由微碼執(zhí)行,,不采用硬件陷入、軟件模擬方式,,簡化了主控邏輯設(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ī)制,,可以匹配不同速度的部件;對外采用wishbone總線,,簡化了各部件接口的設(shè)計(jì),,方便了外部設(shè)備的擴(kuò)充。
  (6)I/O采用內(nèi)存映射方式統(tǒng)一編址,,避免了非Java指令的引入,,保證了兼容性。
3.5 Verilog表述的微碼處理器核心邏輯
  下面是主控邏輯框架代碼的一部分,。本段代碼體現(xiàn)了如何處理數(shù)據(jù)型微碼和指令型微碼,,可以在YOUR_MICRO_CODE_INSTR處添加需要的微碼指令以及對應(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;//表示是否讀過了一次
             //數(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í)行的過程如下:
  讀取JavaCard PC處的JavaCard指令至指令寄存器Instr,,發(fā)出remap信號(hào)給微碼指針調(diào)整模塊MCPC,微碼指針寄存器MCP得到新的JavaCard指令對應(yīng)的微碼序列首地址,,MCP的變化使微碼指令寄存器MCR變?yōu)樵撐⒋a序列的首個(gè)微碼指令,,再由微碼處理器執(zhí)行此MCR中的微碼。
4 JavaCard CPU測試平臺(tái)的FPGA實(shí)現(xiàn)
4.1 外圍接口和模塊

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


4.3 結(jié)果說明
  設(shè)計(jì)是用Verilog語言實(shí)現(xiàn)的,內(nèi)部使用16位數(shù)據(jù)總線,,對外是8位的wishbone總線,,微碼ROM為4KB,外接512B的ROM和512B的RAM。
  JavaCard 定義了187條指令,,其中47條指令涉及32位整型" title="整型">整型數(shù),。對32位整型數(shù)的支持是可選的,本次沒有實(shí)現(xiàn)對32位整型數(shù)操作的指令,,遇到未定義指令的操作為宕機(jī),。共定義了109條微碼指令。用了3273條微碼指令序列完成系統(tǒng)初始化操作和解釋JavaCard指令,,每條JavaCard指令約用17條微碼指令執(zhí)行(主要是有些面向?qū)ο蟮膹?fù)雜指令需要更多的微碼解釋),。
  整個(gè)系統(tǒng)占用資源很少:4個(gè)Block RAM,2 052個(gè)Slice,,可以在普通FPGA上實(shí)現(xiàn),。
  測試代碼下載到板上的ROM中,以24MHz時(shí)鐘運(yùn)行通過,,驗(yàn)證了JavaCard指令處理的正確性,,性能完全滿足JavaCard虛擬機(jī)標(biāo)準(zhǔn)要求。
  實(shí)現(xiàn)JavaCard硬件CPU是JavaCard的發(fā)展方向,。因用途原因,,它不需要很高的性能,而更需要成本低,、資源占用少,、功耗低等特性。JavaCard指令集是面向?qū)ο蟮膹?fù)雜指令集,,很難直接用硬件實(shí)現(xiàn),。采用微碼方式實(shí)現(xiàn)是很好的選擇,每一條微碼對應(yīng)一個(gè)很簡單的硬件動(dòng)作,,硬件實(shí)現(xiàn)容易,,且使用的資源少。用微碼序列完成JavaCard指令,,使硬件設(shè)計(jì)保持簡潔,、靈活、修改方便,,有些改動(dòng)只需重寫微碼序列而不需要更改硬件設(shè)計(jì),;添加新功能支持的也只需要修改微碼,如硬件實(shí)現(xiàn)加密方法調(diào)用接口,。JavaCard硬件CPU的實(shí)現(xiàn)必將促進(jìn)JavaCard的應(yīng)用,。
參考文獻(xiàn)
1 Martin Schoeberl.JOP:A Java Optimized Processor.http://www.jopdesign.com
2 Martin Schoeberl.Java Technology in an FPGA.http://www.jopdesign.com

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn),。轉(zhuǎn)載的所有的文章,、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容、版權(quán)和其它問題,,請及時(shí)通過電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失,。聯(lián)系電話:010-82306118,;郵箱:[email protected]