JavaCard指令处理器的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中的微码。
评论