⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 it51_alu.vhd

📁 這是最新版本修正過後的8051,經過debug並有實現在某家公司的silicon上ㄛ
💻 VHD
📖 第 1 页 / 共 3 页
字号:
			-- 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 + -