📄 opcode_decoder.vhd
字号:
when "0001111" => OP_CAT <= MOVE_R_dSP; D_OP <= ALU_X_OR_Y; D_SX <= SX_RR; D_SY <= SY_SY0; D_SA <= ADR_dSP; D_WE_O <= '1'; D_WE_SP <= SP_LOAD; -- 11111111111111111111111111111111111111111111111111111111111111111111 when "0010000" => OP_CAT <= AND_RR_i; LAST <= M3; -- wait for ## D_OP <= ALU_X_AND_Y; D_SX <= SX_RR; D_SY <= SY_I16; D_WE_RR <= IS_M2; when "0010001" => OP_CAT <= AND_RR_i; LAST <= M2; -- wait for # D_OP <= ALU_X_AND_Y; D_SX <= SX_RR; D_SY <= SY_UI8; D_WE_RR <= IS_M1; when "0010010" => OP_CAT <= OR_RR_i; LAST <= M3; -- wait for ## D_OP <= ALU_X_OR_Y; D_SX <= SX_RR; D_SY <= SY_I16; D_WE_RR <= IS_M2; when "0010011" => OP_CAT <= OR_RR_i; LAST <= M2; -- wait for # D_OP <= ALU_X_OR_Y; D_SX <= SX_RR; D_SY <= SY_UI8; D_WE_RR <= IS_M1; when "0010100" => OP_CAT <= XOR_RR_i; LAST <= M3; -- wait for ## D_OP <= ALU_X_XOR_Y; D_SX <= SX_RR; D_SY <= SY_I16; D_WE_RR <= IS_M2; when "0010101" => OP_CAT <= XOR_RR_i; LAST <= M2; -- wait for # D_OP <= ALU_X_XOR_Y; D_SX <= SX_RR; D_SY <= SY_UI8; D_WE_RR <= IS_M1; when "0010110" => OP_CAT <= SEQ_RR_i; LAST <= M3; -- wait for ## D_OP <= ALU_X_EQ_Y; D_SX <= SX_RR; D_SY <= SY_I16; D_WE_RR <= IS_M2; when "0010111" => OP_CAT <= SEQ_RR_i; LAST <= M2; -- wait for # D_OP <= ALU_X_EQ_Y; D_SX <= SX_RR; D_SY <= SY_UI8; D_WE_RR <= IS_M1; when "0011000" => OP_CAT <= SNE_RR_i; LAST <= M3; -- wait for ## D_OP <= ALU_X_NE_Y; D_SX <= SX_RR; D_SY <= SY_I16; D_WE_RR <= IS_M2; when "0011001" => OP_CAT <= SNE_RR_i; LAST <= M2; -- wait for # D_OP <= ALU_X_NE_Y; D_SX <= SX_RR; D_SY <= SY_UI8; D_WE_RR <= IS_M1; when "0011010" => OP_CAT <= SGE_RR_i; LAST <= M3; -- wait for ## D_OP <= ALU_X_GE_Y; D_SX <= SX_RR; D_SY <= SY_I16; D_WE_RR <= IS_M2; when "0011011" => OP_CAT <= SGE_RR_i; LAST <= M2; -- wait for # D_OP <= ALU_X_GE_Y; D_SX <= SX_RR; D_SY <= SY_SI8; D_WE_RR <= IS_M1; when "0011100" => OP_CAT <= SGT_RR_i; LAST <= M3; -- wait for ## D_OP <= ALU_X_GT_Y; D_SX <= SX_RR; D_SY <= SY_I16; D_WE_RR <= IS_M2; when "0011101" => OP_CAT <= SGT_RR_i; LAST <= M2; -- wait for # D_OP <= ALU_X_GT_Y; D_SX <= SX_RR; D_SY <= SY_SI8; D_WE_RR <= IS_M1; when "0011110" => OP_CAT <= SLE_RR_i; LAST <= M3; -- wait for ## D_OP <= ALU_X_LE_Y; D_SX <= SX_RR; D_SY <= SY_I16; D_WE_RR <= IS_M2; when "0011111" => OP_CAT <= SLE_RR_i; LAST <= M2; -- wait for # D_OP <= ALU_X_LE_Y; D_SX <= SX_RR; D_SY <= SY_SI8; D_WE_RR <= IS_M1; -- 22222222222222222222222222222222222222222222222222222222222222222222 when "0100000" => OP_CAT <= SLT_RR_i; LAST <= M3; -- wait for ## D_OP <= ALU_X_LT_Y; D_SX <= SX_RR; D_SY <= SY_I16; D_WE_RR <= IS_M2; when "0100001" => OP_CAT <= SLT_RR_i; LAST <= M2; -- wait for # D_OP <= ALU_X_LT_Y; D_SX <= SX_RR; D_SY <= SY_SI8; D_WE_RR <= IS_M1; when "0100010" => OP_CAT <= SHS_RR_i; LAST <= M3; -- wait for ## D_OP <= ALU_X_HS_Y; D_SX <= SX_RR; D_SY <= SY_I16; D_WE_RR <= IS_M2; when "0100011" => OP_CAT <= SHS_RR_i; LAST <= M2; -- wait for # D_OP <= ALU_X_HS_Y; D_SX <= SX_RR; D_SY <= SY_UI8; D_WE_RR <= IS_M1; when "0100100" => OP_CAT <= SHI_RR_i; LAST <= M3; -- wait for ## D_OP <= ALU_X_HI_Y; D_SX <= SX_RR; D_SY <= SY_I16; D_WE_RR <= IS_M2; when "0100101" => OP_CAT <= SHI_RR_i; LAST <= M2; -- wait for # D_OP <= ALU_X_HI_Y; D_SX <= SX_RR; D_SY <= SY_UI8; D_WE_RR <= IS_M1; when "0100110" => OP_CAT <= SLS_RR_i; LAST <= M3; -- wait for ## D_OP <= ALU_X_LS_Y; D_SX <= SX_RR; D_SY <= SY_I16; D_WE_RR <= IS_M2; when "0100111" => OP_CAT <= SLS_RR_i; LAST <= M2; -- wait for # D_OP <= ALU_X_LS_Y; D_SX <= SX_RR; D_SY <= SY_UI8; D_WE_RR <= IS_M1; when "0101000" => OP_CAT <= SLO_RR_i; LAST <= M3; -- wait for ## D_OP <= ALU_X_LO_Y; D_SX <= SX_RR; D_SY <= SY_I16; D_WE_RR <= IS_M2; when "0101001" => OP_CAT <= SLO_RR_i; LAST <= M2; -- wait for # D_OP <= ALU_X_LO_Y; D_SX <= SX_RR; D_SY <= SY_UI8; D_WE_RR <= IS_M1; when "0101010" => OP_CAT <= ADD_SP_I; LAST <= M3; -- wait for ## D_OP <= ALU_ANY; D_SX <= SX_ANY; D_SY <= SY_ANY; D_SA <= ADR_16SP_L; D_WE_SP <= sp(IS_M2, SP_LOAD); when "0101011" => OP_CAT <= ADD_SP_I; LAST <= M2; -- wait for # D_OP <= ALU_ANY; D_SX <= SX_ANY; D_SY <= SY_ANY; D_SA <= ADR_8SP_L; D_WE_SP <= sp(IS_M1, SP_LOAD); when "0101100" => OP_CAT <= CLRW_dSP; LAST <= M2; D_OP <= ALU_X_AND_Y; D_SX <= SX_ANY; D_SY <= SY_SY0; D_SA <= ADR_dSP; D_WE_O <= '1'; D_LOCK <= IS_M1; D_WE_SP <= SP_LOAD; PC_OP <= pc(IS_M1, PC_WAIT); when "0101101" => OP_CAT <= CLRB_dSP; D_OP <= ALU_X_AND_Y; D_SX <= SX_ANY; D_SY <= SY_SY0; D_SA <= ADR_dSP; D_WE_O <= IS_M1; D_WE_SP <= SP_LOAD; when "0101110" => OP_CAT <= IN_ci_RU; LAST <= M2; D_OP <= ALU_MOVE_Y; D_SX <= SX_ANY; D_SY <= SY_UM; D_SA <= ADR_IO; D_RD_O <= IS_M1; D_IO <= IS_M1; D_WE_RR <= IS_M2; when "0101111" => OP_CAT <= OUT_R_ci; LAST <= M2; D_OP <= ALU_X_OR_Y; D_SX <= SX_RR; D_SY <= SY_SY0; D_SA <= ADR_IO; D_WE_O <= IS_M1; D_IO <= IS_M1; -- 33333333333333333333333333333333333333333333333333333333333333333333 when "0110000" => OP_CAT <= AND_LL_RR; D_OP <= ALU_X_AND_Y; D_SX <= SX_LL; D_SY <= SY_RR; D_WE_RR <= IS_M1; when "0110001" => OP_CAT <= OR_LL_RR; D_OP <= ALU_X_OR_Y; D_SX <= SX_LL; D_SY <= SY_RR; D_WE_RR <= IS_M1; when "0110010" => OP_CAT <= XOR_LL_RR; D_OP <= ALU_X_XOR_Y; D_SX <= SX_LL; D_SY <= SY_RR; D_WE_RR <= IS_M1; when "0110011" => OP_CAT <= SEQ_LL_RR; D_OP <= ALU_X_EQ_Y; D_SX <= SX_LL; D_SY <= SY_RR; D_WE_RR <= IS_M1; when "0110100" => OP_CAT <= SNE_LL_RR; D_OP <= ALU_X_NE_Y; D_SX <= SX_LL; D_SY <= SY_RR; D_WE_RR <= IS_M1; when "0110101" => OP_CAT <= SGE_LL_RR; D_OP <= ALU_X_GE_Y; D_SX <= SX_LL; D_SY <= SY_RR; D_WE_RR <= IS_M1; when "0110110" => OP_CAT <= SGT_LL_RR; D_OP <= ALU_X_GT_Y; D_SX <= SX_LL; D_SY <= SY_RR; D_WE_RR <= IS_M1; when "0110111" => OP_CAT <= SLE_LL_RR; D_OP <= ALU_X_LE_Y; D_SX <= SX_LL; D_SY <= SY_RR; D_WE_RR <= IS_M1; when "0111000" => OP_CAT <= SLT_LL_RR; D_OP <= ALU_X_LT_Y; D_SX <= SX_LL; D_SY <= SY_RR; D_WE_RR <= IS_M1; when "0111001" => OP_CAT <= SHS_LL_RR; D_OP <= ALU_X_HS_Y; D_SX <= SX_LL; D_SY <= SY_RR; D_WE_RR <= IS_M1; when "0111010" => OP_CAT <= SHI_LL_RR; D_OP <= ALU_X_HI_Y; D_SX <= SX_LL; D_SY <= SY_RR; D_WE_RR <= IS_M1; when "0111011" => OP_CAT <= SLS_LL_RR; D_OP <= ALU_X_LS_Y; D_SX <= SX_LL; D_SY <= SY_RR; D_WE_RR <= IS_M1; when "0111100" => OP_CAT <= SLO_LL_RR; D_OP <= ALU_X_LO_Y; D_SX <= SX_LL; D_SY <= SY_RR; D_WE_RR <= IS_M1; when "0111101" => OP_CAT <= LNOT_RR; D_OP <= ALU_X_EQ_Y; D_SX <= SX_RR; D_SY <= SY_SY0; D_WE_RR <= IS_M1; when "0111110" => OP_CAT <= NEG_RR; D_OP <= ALU_NEG_Y; D_SX <= SX_ANY; D_SY <= SY_RR; D_WE_RR <= IS_M1; when "0111111" => OP_CAT <= NOT_RR; D_OP <= ALU_NOT_Y; D_SX <= SX_ANY; D_SY <= SY_RR; D_WE_RR <= IS_M1; -- 44444444444444444444444444444444444444444444444444444444444444444444 when "1000000" => OP_CAT <= MOVE_LL_RR; D_OP <= ALU_X_OR_Y; D_SX <= SX_LL; D_SY <= SY_SY0; D_WE_RR <= IS_M1; when "1000001" => OP_CAT <= MOVE_LL_cRR; LAST <= M2; PC_OP <= pc(IS_M1, PC_WAIT); D_OP <= ALU_X_OR_Y; D_SX <= SX_LL; D_SY <= SY_SY0; D_SA <= hadr(IS_M2, ADR_cRR_H); D_WE_O <= IS_M1_M2; D_LOCK <= IS_M1; D_SMQ <= IS_M2; when "1000010" => OP_CAT <= MOVE_L_cRR; D_OP <= ALU_X_OR_Y; D_SX <= SX_LL; D_SY <= SY_SY0; D_SA <= ADR_cRR_L; D_WE_O <= IS_M1; when "1000011" => OP_CAT <= MOVE_RR_LL; D_OP <= ALU_X_OR_Y; D_SX <= SX_RR; D_SY <= SY_SY0; D_WE_LL <= IS_M1; when "1000100" => OP_CAT <= MOVE_RR_cLL; LAST <= M2; PC_OP <= pc(IS_M1, PC_WAIT); D_OP <= ALU_X_OR_Y; D_SX <= SX_RR; D_SY <= SY_SY0; D_SA <= hadr(IS_M2, ADR_cLL_H); D_WE_O <= IS_M1_M2; D_LOCK <= IS_M1; D_SMQ <= IS_M2; when "1000101" => OP_CAT <= MOVE_R_cLL; D_OP <= ALU_X_OR_Y; D_SX <= SX_RR; D_SY <= SY_SY0; D_SA <= ADR_cLL_L; D_WE_O <= IS_M1; when "1000110" => OP_CAT <= MOVE_cRR_RR; LAST <= M3; D_SX <= SX_ANY; D_SY <= SY_UM; D_WE_RR <= not IS_M1; -- M2 or M3 PC_OP <= pc(IS_M1_M2, PC_WAIT); D_OP <= mix(IS_M3); D_SA <= hadr(IS_M2, ADR_cRR_H); D_RD_O <= IS_M1_M2; D_LOCK <= IS_M1; when "1000111" => OP_CAT <= MOVE_cRR_RS; LAST <= M2; D_OP <= ALU_MOVE_Y; D_SX <= SX_ANY; D_SY <= SY_SM; D_SA <= ADR_cRR_L; D_RD_O <= IS_M1; D_WE_RR <= IS_M2; PC_OP <= pc(IS_M1, PC_WAIT); when "1001000" =>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -