微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > JavaCard指令处理器的FPGA设计

JavaCard指令处理器的FPGA设计

时间:01-30 来源:互联网 点击:

k为堆栈操作结束应答。本模块根据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指令的引入,保证了兼容性。

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,微码指针

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top