📄 armdecode.vhd
字号:
arm_swp := '1';
if arm_swp = '1' then
insn_return := type_arm_swp;
end if;
when others => null;
end case;
when "00100" =>
arm_sumull := '1';
if arm_sumull = '1' then
insn_return := type_arm_sumull;
end if;
when "00110" =>
arm_sumlal := '1';
if arm_sumlal = '1' then
insn_return := type_arm_sumlal;
end if;
when others => null;
end case;
case vec_11 is
when "0" =>
arm_strhb := '1' and not (arm_mul or arm_mla or arm_swp or arm_sumull or arm_sumlal);
if arm_strhb = '1' then
insn_return := type_arm_strhb;
end if;
when "1" =>
arm_ldrhb := '1' and not (arm_mul or arm_mla or arm_swp or arm_sumull or arm_sumlal);
if arm_ldrhb = '1' then
insn_return := type_arm_ldrhb;
end if;
when others => null;
end case;
when others => null;
end case;
case vec_12 is
when "000" =>
case vec_13 is
when "0" =>
arm_and := '1' and not (arm_nop or arm_mrs or arm_bx or arm_mul or arm_mla or arm_swp or arm_sumull or arm_sumlal or arm_strhb or arm_ldrhb);
if arm_and = '1' then
insn_return := type_arm_and;
end if;
when "1" =>
arm_sub := '1' and not (arm_nop or arm_mrs or arm_bx or arm_mul or arm_mla or arm_swp or arm_sumull or arm_sumlal or arm_strhb or arm_ldrhb);
if arm_sub = '1' then
insn_return := type_arm_sub;
end if;
when others => null;
end case;
when "010" =>
case vec_14 is
when "0" =>
arm_eor := '1' and not (arm_nop or arm_mrs or arm_bx or arm_mul or arm_mla or arm_swp or arm_sumull or arm_sumlal or arm_strhb or arm_ldrhb);
if arm_eor = '1' then
insn_return := type_arm_eor;
end if;
when "1" =>
arm_rsb := '1' and not (arm_nop or arm_mrs or arm_bx or arm_mul or arm_mla or arm_swp or arm_sumull or arm_sumlal or arm_strhb or arm_ldrhb);
if arm_rsb = '1' then
insn_return := type_arm_rsb;
end if;
when others => null;
end case;
when "100" =>
case vec_15 is
when "0" =>
arm_add := '1' and not (arm_nop or arm_mrs or arm_bx or arm_mul or arm_mla or arm_swp or arm_sumull or arm_sumlal or arm_strhb or arm_ldrhb);
if arm_add = '1' then
insn_return := type_arm_add;
end if;
when "1" =>
arm_sbc := '1' and not (arm_nop or arm_mrs or arm_bx or arm_mul or arm_mla or arm_swp or arm_sumull or arm_sumlal or arm_strhb or arm_ldrhb);
if arm_sbc = '1' then
insn_return := type_arm_sbc;
end if;
when others => null;
end case;
when "110" =>
case vec_16 is
when "0" =>
arm_adc := '1' and not (arm_nop or arm_mrs or arm_bx or arm_mul or arm_mla or arm_swp or arm_sumull or arm_sumlal or arm_strhb or arm_ldrhb);
if arm_adc = '1' then
insn_return := type_arm_adc;
end if;
when "1" =>
arm_rsc := '1' and not (arm_nop or arm_mrs or arm_bx or arm_mul or arm_mla or arm_swp or arm_sumull or arm_sumlal or arm_strhb or arm_ldrhb);
if arm_rsc = '1' then
insn_return := type_arm_rsc;
end if;
when others => null;
end case;
when "011" =>
case vec_17 is
when "1111000" =>
arm_msr := '1' and not (arm_nop or arm_mrs or arm_bx or arm_mul or arm_mla or arm_swp or arm_sumull or arm_sumlal or arm_strhb or arm_ldrhb);
if arm_msr = '1' then
insn_return := type_arm_msr;
end if;
when others => null;
end case;
case vec_18 is
when "0" =>
arm_teq := '1' and not (arm_msr or arm_nop or arm_mrs or arm_bx or arm_mul or arm_mla or arm_swp or arm_sumull or arm_sumlal or arm_strhb or arm_ldrhb);
if arm_teq = '1' then
insn_return := type_arm_teq;
end if;
when "1" =>
arm_cmn := '1' and not (arm_msr or arm_nop or arm_mrs or arm_bx or arm_mul or arm_mla or arm_swp or arm_sumull or arm_sumlal or arm_strhb or arm_ldrhb);
if arm_cmn = '1' then
insn_return := type_arm_cmn;
end if;
when others => null;
end case;
when "001" =>
case vec_19 is
when "0" =>
arm_tst := '1' and not (arm_nop or arm_mrs or arm_bx or arm_mul or arm_mla or arm_swp or arm_sumull or arm_sumlal or arm_strhb or arm_ldrhb);
if arm_tst = '1' then
insn_return := type_arm_tst;
end if;
when "1" =>
arm_cmp := '1' and not (arm_nop or arm_mrs or arm_bx or arm_mul or arm_mla or arm_swp or arm_sumull or arm_sumlal or arm_strhb or arm_ldrhb);
if arm_cmp = '1' then
insn_return := type_arm_cmp;
end if;
when others => null;
end case;
when "101" =>
case vec_20 is
when "0" =>
arm_orr := '1' and not (arm_nop or arm_mrs or arm_bx or arm_mul or arm_mla or arm_swp or arm_sumull or arm_sumlal or arm_strhb or arm_ldrhb);
if arm_orr = '1' then
insn_return := type_arm_orr;
end if;
when "1" =>
arm_bic := '1' and not (arm_nop or arm_mrs or arm_bx or arm_mul or arm_mla or arm_swp or arm_sumull or arm_sumlal or arm_strhb or arm_ldrhb);
if arm_bic = '1' then
insn_return := type_arm_bic;
end if;
when others => null;
end case;
when "111" =>
case vec_21 is
when "0" =>
arm_mov := '1' and not (arm_nop or arm_mrs or arm_bx or arm_mul or arm_mla or arm_swp or arm_sumull or arm_sumlal or arm_strhb or arm_ldrhb);
if arm_mov = '1' then
insn_return := type_arm_mov;
end if;
when "1" =>
arm_mvn := '1' and not (arm_nop or arm_mrs or arm_bx or arm_mul or arm_mla or arm_swp or arm_sumull or arm_sumlal or arm_strhb or arm_ldrhb);
if arm_mvn = '1' then
insn_return := type_arm_mvn;
end if;
when others => null;
end case;
when others => null;
end case;
when "01" =>
case vec_22 is
when "0" =>
case vec_23 is
when "0" =>
arm_str1 := '1';
if arm_str1 = '1' then
insn_return := type_arm_str1;
end if;
when "1" =>
case vec_24 is
when "00000000" =>
arm_str2 := '1';
if arm_str2 = '1' then
insn_return := type_arm_str2;
end if;
when others => null;
end case;
when others => null;
end case;
case vec_25 is
when "0" =>
arm_str3 := '1' and not (arm_str1 or arm_str2);
if arm_str3 = '1' then
insn_return := type_arm_str3;
end if;
when others => null;
end case;
when "1" =>
arm_ldr1 := '1';
if arm_ldr1 = '1' then
insn_return := type_arm_ldr1;
end if;
when others => null;
end case;
case vec_26 is
when "11" =>
arm_undefined := '1' and not (arm_str1 or arm_str2 or arm_str3 or arm_ldr1);
if arm_undefined = '1' then
insn_return := type_arm_undefined;
end if;
when others => null;
end case;
when "10" =>
case vec_27 is
when "0" =>
case vec_28 is
when "0" =>
arm_stm := '1';
if arm_stm = '1' then
insn_return := type_arm_stm;
end if;
when "1" =>
arm_ldm := '1';
if arm_ldm = '1' then
insn_return := type_arm_ldm;
end if;
when others => null;
end case;
when "1" =>
arm_b := '1';
if arm_b = '1' then
insn_return := type_arm_b;
end if;
when others => null;
end case;
when "11" =>
case vec_29 is
when "1" =>
case vec_30 is
when "1" =>
arm_swi := '1';
if arm_swi = '1' then
insn_return := type_arm_swi;
end if;
when "0" =>
case vec_31 is
when "0" =>
arm_cdp := '1';
if arm_cdp = '1' then
insn_return := type_arm_cdp;
end if;
when "1" =>
case vec_32 is
when "1" =>
arm_mrc := '1';
if arm_mrc = '1' then
insn_return := type_arm_mrc;
end if;
when "0" =>
arm_mcr := '1';
if arm_mcr = '1' then
insn_return := type_arm_mcr;
end if;
when others => null;
end case;
when others => null;
end case;
when others => null;
end case;
when "0" =>
case vec_33 is
when "0" =>
arm_stc := '1';
if arm_stc = '1' then
insn_return := type_arm_stc;
end if;
when "1" =>
arm_ldc := '1';
if arm_ldc = '1' then
insn_return := type_arm_ldc;
end if;
when others => null;
end case;
when others => null;
end case;
when others => null;
end case;
return insn_return;
end;
end armdecode;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -