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

JavaCard CPU的设计与FPGA实现之二

JavaCard CPU的设计与FPGA实现之二

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指令的引入,保证了兼容性。
有梦想就去做,不要给自己后悔的机会。
返回列表