<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關(guān) 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設(shè)計應(yīng)用 > JavaCard CPU的設(shè)計與FPGA實(shí)現(xiàn)

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

          作者: 時間:2008-05-06 來源:電子技術(shù)應(yīng)用 | 中國科技大學(xué) 收藏

            1 簡介

          本文引用地址:http://www.ex-cimer.com/article/82185.htm

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

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

            JavaCard系統(tǒng)的實(shí)現(xiàn)有基于軟件虛擬機(jī)和基于硬件兩種方法?;谲浖摂M機(jī)方法是在非Java處理器上用軟件方法模擬實(shí)現(xiàn)JavaCard平臺,在此平臺上實(shí)現(xiàn)JavaCard應(yīng)用?;谟布椒ㄊ怯布壿媽?shí)現(xiàn)JavaCard處理器,在此硬件基礎(chǔ)上實(shí)現(xiàn)JavaCard平臺,再在此平臺上實(shí)現(xiàn)JavaCard應(yīng)用。

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

            Java處理器有以下幾種實(shí)現(xiàn)方式:
            (1)通用+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)部分Java指令,它需要特殊的編譯器來充分發(fā)揮Java加強(qiáng)CPU的功能。方式(4)是最有效的解決方法, Java指令的執(zhí)行不再需要先轉(zhuǎn)換到宿主CPU的本地指令集,同時,它也不占用RAM等軟件資源,可以給應(yīng)用程序提供更多的資源。

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

            3 JavaCard CPU的設(shè)計

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

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

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

            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)答信號連接見圖1。

                  

            3.3 微碼處理器各模塊接口及功能
            (1)運(yùn)算單元ALU
            module alu(x,y,op,z,flag,calc,rst,a ck,clk);
            x、y為輸入操作數(shù),op為操作碼,z為輸出結(jié)果,flag為輸出運(yùn)算結(jié)果標(biāo)志,calc為運(yùn)算使能控制信號,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為堆棧的彈出及壓入操作信號,data_i、data_o為數(shù)據(jù)輸入輸出,sp為堆棧指針,ack為堆棧操作結(jié)束應(yīng)答。本模塊根據(jù)pop、push信號對堆棧進(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信號有效,用new_mcp的值給MCP賦值;
            hold信號有效,保持MCP值不變;
            remap信號有效,則將CPU指令I(lǐng)nstr做為索引,得到Instr指令對應(yīng)的微碼序列首地址,將首地址賦給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總線標(biāo)準(zhǔn),wb*信號是wishbone相關(guān)信號。根據(jù)rd、wr讀寫信號,操作wishbone信號,等待wishbone的應(yīng)答,然后將數(shù)據(jù)和應(yīng)答信號反饋給主控模塊。


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

            (1)主控模塊與其他從模塊之間用使能信號和應(yīng)答信號保持同步,從模塊在完成操作后只需給出應(yīng)答信號,即可匹配不同速度的從模塊。
            (2)微碼指令的設(shè)計。所有的微碼指令為單指令,即不帶任何操作數(shù)。微碼指令本身包含所需操作的信息,如在哪兩個寄存器之間轉(zhuǎn)移數(shù)據(jù)等。對于跳轉(zhuǎn)操作等必須帶后續(xù)操作數(shù)的指令采取變通方法,先將所需操作數(shù)存入內(nèi)部寄存器,再執(zhí)行跳轉(zhuǎn)等指令。詳細(xì)示例為:
            微碼定義為16位。位15指示本微碼是指令還是數(shù)據(jù)。位15==1表示是數(shù)據(jù),此時微碼的低8位是一個數(shù)據(jù),處理此微碼時,要將此8位數(shù)據(jù)提取出來,存入內(nèi)部寄存器;位15==0表示是指令。當(dāng)需要執(zhí)行一個跳轉(zhuǎn)Jmp 0x0809時,微碼序列方法使用三條微碼表示:
            0x8008 //位15==1,是數(shù)據(jù)型微碼
            0x8009
            JMP //指令型微碼助記符
            執(zhí)行時,遇到前面兩個數(shù)據(jù)型微碼,會將08和09存入內(nèi)部16位數(shù)據(jù)寄存器的高低8位;執(zhí)行JMP指令時,隱含使用此內(nèi)部數(shù)據(jù)寄存器。
            (3)所有的微碼指令是單周期指令。由于采用了(2)中所述的單指令微碼,在執(zhí)行當(dāng)前微碼指令的同時讀取下一條微碼指令,可以做到每個時鐘執(zhí)行一條微碼。
            (4)簡潔的主控邏輯。所有JavaCard指令均由微碼執(zhí)行,不采用硬件陷入、軟件模擬方式,簡化了主控邏輯設(shè)計。主控模塊狀態(tài)機(jī)僅有EXEC_MC和HLT兩個狀態(tài)。CPU復(fù)位后,一直處于執(zhí)行微碼EXEC_MC狀態(tài),直到執(zhí)行HLT微碼指令。
            (5)適應(yīng)性好。采用了應(yīng)答機(jī)制,可以匹配不同速度的部件;對外采用wishbone總線,簡化了各部件接口的設(shè)計,方便了外部設(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)//首個數(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指令、存儲數(shù)據(jù),實(shí)現(xiàn)Java指令。JavaCard指令被解釋執(zhí)行的過程如下:

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

            4 JavaCard CPU測試平臺的實(shí)現(xiàn)

            4.1 外圍接口和模塊

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

            4.2 測試平臺框架

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

                         

            4.3 結(jié)果說明

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

            JavaCard 定義了187條指令,其中47條指令涉及32位整型數(shù)。對32位整型數(shù)的支持是可選的,本次沒有實(shí)現(xiàn)對32位整型數(shù)操作的指令,遇到未定義指令的操作為宕機(jī)。共定義了109條微碼指令。用了3273條微碼指令序列完成系統(tǒng)初始化操作和解釋JavaCard指令,每條JavaCard指令約用17條微碼指令執(zhí)行(主要是有些面向?qū)ο蟮膹?fù)雜指令需要更多的微碼解釋)。

            整個系統(tǒng)占用資源很少:4個Block RAM,2 052個Slice,可以在普通上實(shí)現(xiàn)。

            測試代碼下載到板上的ROM中,以24MHz時鐘運(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)一個很簡單的硬件動作,硬件實(shí)現(xiàn)容易,且使用的資源少。用微碼序列完成JavaCard指令,使硬件設(shè)計保持簡潔、靈活、修改方便,有些改動只需重寫微碼序列而不需要更改硬件設(shè)計;添加新功能支持的也只需要修改微碼,如硬件實(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



          關(guān)鍵詞: JavaCard CPU FPGA 智能卡

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();