*************************************
case op is
when EXE_ORI => rfe1 := '1'; wreg :='1'; rdo := inst(20 downto 16);
aluop := EXE_OR_OP; alusel := EXE_RES_LOGIC; inst_valid := '1';
imm(15 downto 0) := inst(15 downto 0);
when others =>
end case;
**************************************
EXE_ORI 的定义在stdlib 中, 因为只处理ORI函数,所以 when others=> 什么都不做。
****************************************
logic_op 过程
****************************************
procedure logic_op(r : registers; aluin1, aluin2: word;
logicres : out word) is
variable logicout : word;
begin
logicout := (others => '0');
case r.e.aluop is when EXE_OR_OP => logicout := aluin1 or aluin2;
when others => logicout := (others => '-');
end case;
logicres := logicout;
end;
或 运算的实现。
****************************************
opdata_select 过程
****************************************
procedure opdata_select(r,v: registers; opdata1 : out word; opdata2: out word) is
begin
if r.e.rfe1='0' then
opdata1 := r.e.imm; --源操作数是立即数
else
opdata1 := r.e.reg1;
end if;
if r.e.rfe2='0' then
opdata2 := r.e.imm; --源操作数是立即数
else
opdata2 := r.e.reg2;
end if;
end;