?? it51_alu.vhd
字號:
-- ACC Operations Do_A_Imm <= '0'; Do_A_Carry <= '0'; Do_A_RR <= '0'; Do_A_INC <= '0'; Do_A_RRC <= '0'; Do_A_DEC <= '0'; Do_A_RL <= '0'; Do_A_ADD <= '0'; Do_A_RLC <= '0'; Do_A_ORL <= '0'; Do_A_ANL <= '0'; Do_A_XRL <= '0'; Do_A_MOV <= '0'; Do_A_DIV <= '0'; Do_A_SUBB <= '0'; Do_A_MUL <= '0'; Do_A_CJNE <= '0'; Do_A_SWAP <= '0'; Do_A_XCH <= '0'; Do_A_DA <= '0'; Do_A_XCHD <= '0'; Do_A_CLR <= '0'; Do_A_CPL <= '0'; Do_A_Imm <= '0'; if OpCode(3 downto 0) = "0100" then Do_A_Imm <= '1'; end if; if OpCode = "00000011" then -- 00000011 1 RR A Do_A_RR <= '1'; end if; if OpCode = "00000100" then -- 00000100 1 INC A Do_A_INC <= '1'; end if; if OpCode = "00010011" then -- 00010011 1 RRC A Do_A_RRC <= '1'; end if; if OpCode = "00010100" then -- 00010100 1 DEC A Do_A_DEC <= '1'; end if; if OpCode = "00100011" then -- 00100011 1 RL A Do_A_RL <= '1'; end if;-- 030714 >>> if OpCode = "00100100" or OpCode = "00100101" or OpCode(7 downto 3) = "00101" then -- 00100100 2 ADD A,#data -- 00100101 2 ADD A,data addr -- 00101rrr 1 ADD A,Rn Do_A_ADD <= '1'; end if; if OpCode(7 downto 1) = "0010011" and not PCPause then -- 0010011i 1 ADD A,@Ri Do_A_ADD <= '1'; end if;-- <<< if OpCode = "00110011" then -- 00110011 1 RLC A Do_A_RLC <= '1'; end if;-- 030714 >>> if OpCode = "00110100" or OpCode = "00110101" or OpCode(7 downto 3) = "00111" then -- 00110100 2 ADDC A,#data -- 00110101 2 ADDC A,data addr -- 0011011i 1 ADDC A,@Ri -- 00111rrr 1 ADDC A,Rn Do_A_ADD <= '1'; Do_A_Carry <= '1'; end if; if OpCode(7 downto 1) = "0011011" and not PCPause then -- 0011011i 1 ADDC A,@Ri Do_A_ADD <= '1'; Do_A_Carry <= '1'; end if;-- <<<-- 030714 >>> if OpCode = "01000100" or OpCode = "01000101" or OpCode(7 downto 3) = "01001" then -- 01000100 2 ORL A,#data -- 01000101 2 ORL A,data addr -- 01001rrr 1 ORL A,Rn Do_A_ORL <= '1'; end if; if OpCode(7 downto 1) = "0100011" and not PCPause then -- 0100011i 1 ORL A,@Ri Do_A_ORL <= '1'; end if;-- <<<-- 030714 >>> if OpCode = "01010100" or OpCode = "01010101" or OpCode(7 downto 3) = "01011" then -- 01010100 2 ANL A,#data -- 01010101 2 ANL A,data addr -- 01011rrr 1 ANL A,Rn Do_A_ANL <= '1'; end if; if OpCode(7 downto 1) = "0101011" and not PCPause then -- 0101011i 1 ANL A,@Ri Do_A_ANL <= '1'; end if;-- <<<-- 030714 >>> if OpCode = "01100100" or OpCode = "01100101" or OpCode(7 downto 3) = "01101" then -- 01100100 2 XRL A,#data -- 01100101 2 XRL A,data addr -- 01101rrr 1 XRL A,Rn Do_A_XRL <= '1'; end if; if OpCode(7 downto 1) = "0110011" and not PCPause then -- 0110011i 1 XRL A,@Ri Do_A_XRL <= '1'; end if;-- <<<-- 030714 >>> if OpCode = "01110100" or OpCode = "11100101" or OpCode(7 downto 3) = "11101" then -- 01110100 2 MOV A,#data -- 10000011 1 MOVC A,@A+PC -- Not handled here -- 10010011 1 MOVC A,@A+DPTR -- Not handled here -- 11100000 1 MOVX A,@DPTR -- 1110001i 1 MOVX A,@Ri -- 11100101 2 MOV A,data addr -- 11101rrr 1 MOV A,Rn Do_A_MOV <= '1'; end if; if OpCode(7 downto 1) = "1110011" and not PCPause then -- 1110011i 1 MOV A,@Ri Do_A_MOV <= '1'; end if;-- <<< if OpCode = "10000100" then -- 10000100 1 DIV AB Do_A_DIV <= '1'; end if;-- 030714 >>> if OpCode = "10010100" or OpCode = "10010101" or OpCode(7 downto 3) = "10011" then -- 10010100 2 SUBB A,#data -- 10010101 2 SUBB A,data addr -- 10011rrr 1 SUBB A,Rn Do_A_SUBB <= '1'; Do_A_Carry <= '1'; end if; if OpCode(7 downto 1) = "1001011" and not PCPause then -- 1001011i 1 SUBB A,@Ri Do_A_SUBB <= '1'; Do_A_Carry <= '1'; end if;-- <<< if OpCode = "10100100" then -- 10100100 1 MUL AB Do_A_MUL <= '1'; end if; if OpCode(7 downto 1) = "1011010" then -- 10110100 3 CJNE A,#data,code addr -- 10110101 3 CJNE A,data addr,code addr Do_A_SUBB <= '1'; Do_A_CJNE <= '1'; end if; if OpCode = "11000100" then -- 11000100 1 SWAP A Do_A_SWAP <= '1'; end if;-- 030714 >>> if OpCode = "11000101" or OpCode(7 downto 3) = "11001" then -- 11000101 2 XCH A,data addr -- 11001rrr 1 XCH A,Rn Do_A_XCH <= '1'; end if; if OpCode(7 downto 1) = "1100011" and not PCPause then -- 1100011i 1 XCH A,@Ri Do_A_XCH <= '1'; end if;-- <<< if OpCode = "11010100" then -- 11010100 1 DA A Do_A_DA <= '1'; end if;-- 030714 >>> if OpCode(7 downto 1) = "1101011" and not PCPause then -- 1101011i 1 XCHD A,@Ri Do_A_XCHD <= '1'; end if;-- <<< if OpCode = "11100100" then -- 11100100 1 CLR A Do_A_CLR <= '1'; end if; if OpCode = "11110100" then -- 11110100 1 CPL A Do_A_CPL <= '1'; end if; -- IDCPBL Operations Do_I_Imm <= '0'; Do_I_INC <= '0'; Do_I_DEC <= '0'; Do_I_ORL <= '0'; Do_I_ANL <= '0'; Do_I_XRL <= '0'; Do_I_MOV <= '0'; Do_I_MOVD <= '0'; Do_I_CJNE <= '0'; IA_d <= IA; MOV_Op <= OpCode(7 downto 4); if OpCode(3 downto 0) = "0011" then Do_I_Imm <= '1'; end if;-- 030714 >>> if OpCode = "00000101" or OpCode(7 downto 1) = "0000011" or OpCode(7 downto 3) = "00001" then -- 00000101 2 INC data addr -- 0000011i 1 INC @Ri -- 00001rrr 1 INC Rn Do_I_INC <= '1'; end if; if OpCode(7 downto 1) = "0000011" and not PCPause then -- 0000011i 1 INC @Ri Do_I_INC <= '1'; end if;-- <<<-- 030714 >>> if OpCode = "00010101" or OpCode(7 downto 3) = "00011" or OpCode(7 downto 3) = "11011" or OpCode = "11010101" then -- 00010101 2 DEC data addr -- 00011rrr 1 DEC Rn -- 11011rrr 2 DJNZ Rn,code addr -- 11010101 3 DJNZ data addr, code addr Do_I_DEC <= '1'; end if; if OpCode(7 downto 1) = "0001011" and not PCPause then -- 0001011i 1 DEC @Ri Do_I_DEC <= '1'; end if;-- <<< if OpCode(7 downto 1) = "0100001" then -- 01000010 2 ORL data addr,A -- 01000011 3 ORL data addr,#data Do_I_ORL <= '1'; end if; if OpCode(7 downto 1) = "0101001" then -- 01010010 2 ANL data addr,A -- 01010011 3 ANL data addr,#data Do_I_ANL <= '1'; end if; if OpCode(7 downto 1) = "0110001" then -- 01100010 2 XRL data addr,A -- 01100011 3 XRL data addr,#data Do_I_XRL <= '1'; end if; if OpCode = "01110101" or OpCode(7 downto 1) = "0111011" or OpCode(7 downto 3) = "01111" or OpCode(7 downto 1) = "1000011" or OpCode(7 downto 3) = "10001" or OpCode = "10010000" or OpCode(7 downto 1) = "1010011" or OpCode(7 downto 3) = "10101" or OpCode = "11110000" or OpCode(7 downto 1) = "1111001" or
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -