JavaCard指令处理器的FPGA设计
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,微码指针
- 基于FPGA的DSP设计方法(08-26)
- 电力电子装置控制系统的DSP设计方案(04-08)
- 基于DSP Builder的VGA接口设计(04-10)
- 基于DSP和USB的高速数据采集与处理系统设计(05-01)
- 数字信号处理(DSP)应用系统中的低功耗设计(05-02)
- 基于DSP的嵌入式显微图像处理系统的设计(06-28)