begin
code=instr[17:16]; //输入指令instr的高2位为操作码code
opr1=instr[7:0]; //输入指令instr的低8位为操作数opr1
//通过case语句判断操作码的类型,获得操作数opr2
case(code)
2'b00: begin
add_func=1;
opr2=instr[15:8]; //从instr中取第二个操作数
end
2'b01: begin
add_func=0;
opr2=instr[15:8]; //从instr中取第二个操作数
end
2'b10: begin
add_func=1;
opr2=8'd1; //第二个操作数取为1,实现+1操作
end
2'b11: begin
add_func=0;
opr2=8'd1; //实现-1操作
end
endcase
code_add={add_func,opr2,opr1}; //函数的返回值
end
endfunction
//函数调用模块
always @(instr) begin
{func,op2,op1}=code_add(instr); //调用函数
if(func==1)
out=op1+op2; //实现两数相加或操作数1加1操作
else
out=op1-op2; //实现两数相减或操作数1减1操作
end
endmodule