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

📄 it51_alu.v

📁 流片过的risc_8051源代码 verilog语言描述的~
💻 V
📖 第 1 页 / 共 3 页
字号:
         Do_A_RRC <= 1'b0 ; 
         Do_A_DEC <= 1'b0 ; 
         Do_A_RL <= 1'b0 ; 
         Do_A_ADD <= 1'b0 ; 
         Do_A_RLC <= 1'b0 ; 
         Do_A_ORL <= 1'b0 ; 
         Do_A_ANL <= 1'b0 ; 
         Do_A_XRL <= 1'b0 ; 
         Do_A_MOV <= 1'b0 ; 
         Do_A_DIV <= 1'b0 ; 
         Do_A_SUBB <= 1'b0 ; 
         Do_A_MUL <= 1'b0 ; 
         Do_A_CJNE <= 1'b0 ; 
         Do_A_SWAP <= 1'b0 ; 
         Do_A_XCH <= 1'b0 ; 
         Do_A_DA <= 1'b0 ; 
         Do_A_XCHD <= 1'b0 ; 
         Do_A_CLR <= 1'b0 ; 
         Do_A_CPL <= 1'b0 ; 
         Do_A_Imm <= 1'b0 ; 
         if (OpCode[3:0] == 4'b0100)
         begin
            Do_A_Imm <= 1'b1 ; 
         end 
         if (OpCode == 8'b00000011)
         begin
            // 00000011 1 RR    A
            Do_A_RR <= 1'b1 ; 
         end 
         if (OpCode == 8'b00000100)
         begin
            // 00000100 1 INC   A
            Do_A_INC <= 1'b1 ; 
         end 
         if (OpCode == 8'b00010011)
         begin
            // 00010011 1 RRC   A
            Do_A_RRC <= 1'b1 ; 
         end 
         if (OpCode == 8'b00010100)
         begin
            // 00010100 1 DEC   A
            Do_A_DEC <= 1'b1 ; 
         end 
         if (OpCode == 8'b00100011)
         begin
            // 00100011 1 RL    A
            Do_A_RL <= 1'b1 ; 
         end 
         // 030714 >>>
         if (OpCode == 8'b00100100 | OpCode == 8'b00100101 | OpCode[7:3] == 5'b00101)
         begin
            // 00100100 2 ADD   A,#data
            // 00100101 2 ADD   A,data addr
            // 00101rrr 1 ADD   A,Rn
            Do_A_ADD <= 1'b1 ; 
         end 
         if (OpCode[7:1] == 7'b0010011 & ~PCPause)
         begin
            // 0010011i 1 ADD   A,@Ri
            Do_A_ADD <= 1'b1 ; 
         end 
         // <<<
         if (OpCode == 8'b00110011)
         begin
            // 00110011 1 RLC   A
            Do_A_RLC <= 1'b1 ; 
         end 
         // 030714 >>>
         if (OpCode == 8'b00110100 | OpCode == 8'b00110101 | OpCode[7:3] == 5'b00111)
         begin
            // 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'b1 ; 
            Do_A_Carry <= 1'b1 ; 
         end 
         if (OpCode[7:1] == 7'b0011011 & ~PCPause)
         begin
            // 0011011i 1 ADDC  A,@Ri
            Do_A_ADD <= 1'b1 ; 
            Do_A_Carry <= 1'b1 ; 
         end 
         // <<<
         // 030714 >>>
         if (OpCode == 8'b01000100 | OpCode == 8'b01000101 | OpCode[7:3] == 5'b01001)
         begin
            // 01000100 2 ORL   A,#data
            // 01000101 2 ORL   A,data addr
            // 01001rrr 1 ORL   A,Rn
            Do_A_ORL <= 1'b1 ; 
         end 
         if (OpCode[7:1] == 7'b0100011 & ~PCPause)
         begin
            // 0100011i 1 ORL   A,@Ri
            Do_A_ORL <= 1'b1 ; 
         end 
         // <<<
         // 030714 >>>
         if (OpCode == 8'b01010100 | OpCode == 8'b01010101 | OpCode[7:3] == 5'b01011)
         begin
            // 01010100 2 ANL   A,#data
            // 01010101 2 ANL   A,data addr
            // 01011rrr 1 ANL   A,Rn
            Do_A_ANL <= 1'b1 ; 
         end 
         if (OpCode[7:1] == 7'b0101011 & ~PCPause)
         begin
            // 0101011i 1 ANL   A,@Ri
            Do_A_ANL <= 1'b1 ; 
         end 
         // <<<
         // 030714 >>>
         if (OpCode == 8'b01100100 | OpCode == 8'b01100101 | OpCode[7:3] == 5'b01101)
         begin
            // 01100100 2 XRL   A,#data
            // 01100101 2 XRL   A,data addr
            // 01101rrr 1 XRL   A,Rn
            Do_A_XRL <= 1'b1 ; 
         end 
         if (OpCode[7:1] == 7'b0110011 & ~PCPause)
         begin
            // 0110011i 1 XRL   A,@Ri
            Do_A_XRL <= 1'b1 ; 
         end 
         // <<<
         // 030714 >>>
         if (OpCode == 8'b01110100 | OpCode == 8'b11100101 | OpCode[7:3] == 5'b11101)
         begin
            // 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'b1 ; 
         end 
         if (OpCode[7:1] == 7'b1110011 & ~PCPause)
         begin
            // 1110011i 1 MOV   A,@Ri
            Do_A_MOV <= 1'b1 ; 
         end 
         // <<<
         if (OpCode == 8'b10000100)
         begin
            // 10000100 1 DIV   AB
            Do_A_DIV <= 1'b1 ; 
         end 
         // 030714 >>>
         if (OpCode == 8'b10010100 | OpCode == 8'b10010101 | OpCode[7:3] == 5'b10011)
         begin
            // 10010100 2 SUBB  A,#data
            // 10010101 2 SUBB  A,data addr
            // 10011rrr 1 SUBB  A,Rn
            Do_A_SUBB <= 1'b1 ; 
            Do_A_Carry <= 1'b1 ; 
         end 
         if (OpCode[7:1] == 7'b1001011 & ~PCPause)
         begin
            // 1001011i 1 SUBB  A,@Ri
            Do_A_SUBB <= 1'b1 ; 
            Do_A_Carry <= 1'b1 ; 
         end 
         // <<<
         if (OpCode == 8'b10100100)
         begin
            // 10100100 1 MUL   AB
            Do_A_MUL <= 1'b1 ; 
         end 
         if (OpCode[7:1] == 7'b1011010)
         begin
            // 10110100 3 CJNE  A,#data,code addr
            // 10110101 3 CJNE  A,data addr,code addr
            Do_A_SUBB <= 1'b1 ; 
            Do_A_CJNE <= 1'b1 ; 
         end 
         if (OpCode == 8'b11000100)
         begin
            // 11000100 1 SWAP  A
            Do_A_SWAP <= 1'b1 ; 
         end 
         // 030714 >>>
         if (OpCode == 8'b11000101 | OpCode[7:3] == 5'b11001)
         begin
            // 11000101 2 XCH   A,data addr
            // 11001rrr 1 XCH   A,Rn
            Do_A_XCH <= 1'b1 ; 
         end 
         if (OpCode[7:1] == 7'b1100011 & ~PCPause)
         begin
            // 1100011i 1 XCH   A,@Ri
            Do_A_XCH <= 1'b1 ; 
         end 
         // <<<
         if (OpCode == 8'b11010100)
         begin
            // 11010100 1 DA    A
            Do_A_DA <= 1'b1 ; 
         end 
         // 030714 >>>
         if (OpCode[7:1] == 7'b1101011 & ~PCPause)
         begin
            // 1101011i 1 XCHD  A,@Ri
            Do_A_XCHD <= 1'b1 ; 
         end 
         // <<<
         if (OpCode == 8'b11100100)
         begin
            // 11100100 1 CLR   A
            Do_A_CLR <= 1'b1 ; 
         end 
         if (OpCode == 8'b11110100)
         begin
            // 11110100 1 CPL   A
            Do_A_CPL <= 1'b1 ; 
         end 
         // IDCPBL Operations
         Do_I_Imm <= 1'b0 ; 
         Do_I_INC <= 1'b0 ; 
         Do_I_DEC <= 1'b0 ; 
         Do_I_ORL <= 1'b0 ; 
         Do_I_ANL <= 1'b0 ; 
         Do_I_XRL <= 1'b0 ; 
         Do_I_MOV <= 1'b0 ; 
         Do_I_MOVD <= 1'b0 ; 
         Do_I_CJNE <= 1'b0 ; 
         IA_d <= IA ; 
         MOV_Op <= OpCode[7:4] ; 
         if (OpCode[3:0] == 4'b0011)
         begin
            Do_I_Imm <= 1'b1 ; 
         end 
         // 030714 >>>
         if (OpCode == 8'b00000101 | OpCode[7:1] == 7'b0000011 | OpCode[7:3] == 5'b00001)
         begin
            // 00000101 2 INC   data addr
            // 0000011i 1 INC   @Ri
            // 00001rrr 1 INC   Rn
            Do_I_INC <= 1'b1 ; 
         end 
         if (OpCode[7:1] == 7'b0000011 & ~PCPause)
         begin
            // 0000011i 1 INC   @Ri
            Do_I_INC <= 1'b1 ; 
         end 
         // <<<
         // 030714 >>>
         if (OpCode == 8'b00010101 | OpCode[7:3] == 5'b00011 | OpCode[7:3] == 5'b11011 | OpCode == 8'b11010101)
         begin
            // 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'b1 ; 
         end 
         if (OpCode[7:1] == 7'b0001011 & ~PCPause)
         begin
            // 0001011i 1 DEC   @Ri
            Do_I_DEC <= 1'b1 ; 
         end 
         // <<<
         if (OpCode[7:1] == 7'b0100001)
         begin
            // 01000010 2 ORL   data addr,A
            // 01000011 3 ORL   data addr,#data
            Do_I_ORL <= 1'b1 ; 
         end 
         if (OpCode[7:1] == 7'b0101001)
         begin
            // 01010010 2 ANL   data addr,A
            // 01010011 3 ANL   data addr,#data
            Do_I_ANL <= 1'b1 ; 
         end 
         if (OpCode[7:1] == 7'b0110001)
         begin
            // 01100010 2 XRL   data addr,A
            // 01100011 3 XRL   data addr,#data
            Do_I_XRL <= 1'b1 ; 
         end 
         if (OpCode == 8'b01110101 | OpCode[7:1] == 7'b0111011 | OpCode[7:3] == 5'b01111 | OpCode[7:1] == 7'b1000011 | OpCode[7:3] == 5'b10001 | OpCode == 8'b10010000 | OpCode[7:1] == 7'b1010011 | OpCode[7:3] == 5'b10101 | OpCode == 8'b11110000 | OpCode[7:1] == 7'b1111001 | OpCode == 8'b11110101 | OpCode[7:1] == 7'b1111011 | OpCode[7:3] == 5'b11111 | (OpCode[7:5] == 3'b110 & OpCode[3:0] == 4'b0000))
         begin
            // 01110101 3 MOV   data addr,#data
            // 0111011i 2 MOV   @Ri,#data
            // 01111rrr 2 MOV   Rn,#data
            // 1000011i 2 MOV   data addr,@Ri
            // 10001rrr 2 MOV   data addr,Rn
            // 10010000 3 MOV   DPTR,#data	-- Not handled here
            // 1010011i 2 MOV   @Ri,data addr

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -