首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

JavaCard CPU的设计与FPGA实现之三

JavaCard CPU的设计与FPGA实现之三

 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_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 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的应用。


参考文献

1 Martin Schoeberl.JOP:A Java Optimized Processor.http://www.jopdesign.com
2 Martin Schoeberl.Java Technology in an FPGA.http://www.jopdesign.com
有梦想就去做,不要给自己后悔的机会。
返回列表