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

📄 cpu.v

📁 8051的Verilog实现
💻 V
📖 第 1 页 / 共 5 页
字号:
   ACALL_5 :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0110 ; 
      end
   CPL_BIT :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   CPL_C :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   CJNE_A_N :
      begin
      nr_bytes_a = 2'b11 ; 
      nr_cycles_a = 4'b0100 ; 
      end
   CJNE_A_ADDR :
      begin
      nr_bytes_a = 2'b11 ; 
      nr_cycles_a = 4'b0100 ; 
      end
   CJNE_IR0_N :
      begin
      nr_bytes_a = 2'b11 ; 
      nr_cycles_a = 4'b0100 ; 
      end
   CJNE_IR1_N :
      begin
      nr_bytes_a = 2'b11 ; 
      nr_cycles_a = 4'b0100 ; 
      end
   CJNE_R0_N :
      begin
      nr_bytes_a = 2'b11 ; 
      nr_cycles_a = 4'b0100 ; 
      end
   CJNE_R1_N :
      begin
      nr_bytes_a = 2'b11 ; 
      nr_cycles_a = 4'b0100 ; 
      end
   CJNE_R2_N :
      begin
      nr_bytes_a = 2'b11 ; 
      nr_cycles_a = 4'b0100 ; 
      end
   CJNE_R3_N :
      begin
      nr_bytes_a = 2'b11 ; 
      nr_cycles_a = 4'b0100 ; 
      end
   CJNE_R4_N :
      begin
      nr_bytes_a = 2'b11 ; 
      nr_cycles_a = 4'b0100 ; 
      end
   CJNE_R5_N :
      begin
      nr_bytes_a = 2'b11 ; 
      nr_cycles_a = 4'b0100 ; 
      end
   CJNE_R6_N :
      begin
      nr_bytes_a = 2'b11 ; 
      nr_cycles_a = 4'b0100 ; 
      end
   CJNE_R7_N :
      begin
      nr_bytes_a = 2'b11 ; 
      nr_cycles_a = 4'b0100 ; 
      end
   
   //-----------------------------------
   // C0h
   //-----------------------------------
   PUSH :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0100 ; 
      end
   AJMP_6 :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   CLR_BIT :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   CLR_C :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   SWAP_A :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   XCH_ADDR :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   XCH_IR0 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   XCH_IR1 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   XCH_R0 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   XCH_R1 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   XCH_R2 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   XCH_R3 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   XCH_R4 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   XCH_R5 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   XCH_R6 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   XCH_R7 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   
   //-----------------------------------
   // D0h
   //-----------------------------------
   POP :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   ACALL_6 :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0110 ; 
      end
   SETB_BIT :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   SETB_C :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   DA_A :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   DJNZ_ADDR :
      begin
      nr_bytes_a = 2'b11 ; 
      nr_cycles_a = 4'b0100 ; 
      end
   XCHD_IR0 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   XCHD_IR1 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   DJNZ_R0 :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   DJNZ_R1 :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   DJNZ_R2 :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   DJNZ_R3 :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   DJNZ_R4 :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   DJNZ_R5 :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   DJNZ_R6 :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   DJNZ_R7 :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   
   //-----------------------------------
   // E0h
   //-----------------------------------
   MOVX_A_IDPTR :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   AJMP_7 :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   MOVX_A_IR0 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   MOVX_A_IR1 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   CLR_A :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   MOV_A_ADDR :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   MOV_A_IR0 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   MOV_A_IR1 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   MOV_A_R0 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   MOV_A_R1 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   MOV_A_R2 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   MOV_A_R3 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   MOV_A_R4 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   MOV_A_R5 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   MOV_A_R6 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   MOV_A_R7 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   
   //-----------------------------------
   // F0h
   //-----------------------------------
   MOVX_IDPTR_A :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0100 ; 
      end
   ACALL_7 :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0110 ; 
      end
   MOVX_IR0_A :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0100 ; 
      end
   MOVX_IR1_A :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0100 ; 
      end
   CPL_A :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   MOV_ADDR_A :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   MOV_IR0_A :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   MOV_IR1_A :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   MOV_R0_A :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   MOV_R1_A :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   MOV_R2_A :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   MOV_R3_A :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   MOV_R4_A :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   MOV_R5_A :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   MOV_R6_A :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   MOV_R7_A :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   default :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   endcase 
   end 

   //------------------------------------------------------------------
   // Instruction decoder
   // Sequential part
   //------------------------------------------------------------------
   always @(posedge clk)
   begin : nr_decoder_proc
   //------------------------------------------------------------------ 
   if (rst)
      //-----------------------------------
      // Synchronous reset
      //-----------------------------------
      begin
      nr_bytes <= 2'b01 ; 
      nr_cycles <= 4'b0001 ; 
      end
   else
      //-----------------------------------
      // Synchronous write
      //-----------------------------------
      // nr_bytes and nr_cycles flip-flops
      //--------------------------------
      begin
      if (stoppmu)
         begin
         nr_bytes <= 2'b01;  // NOP
         nr_cycles <= 4'b0001; // NOP
         end
      else if ((code_fetch_e | debug_fetch_e) & mempsackint)
         begin
         if (intreq) // Interrupt request
            begin
            nr_bytes <= 2'b11 ; 
            nr_cycles <= 4'b0110 ; 
            end
         else
            begin
            nr_bytes <= nr_bytes_a ; 
            nr_cycles <= nr_cycles_a ; 
            end 
         end 
      else if ((curcycle==nr_cycles) & (a5instr | debugreq))
         begin
         nr_bytes <= 2'b01;  // NOP
         nr_cycles <= 4'b0001; // NOP
         end
      end  
   end 
   
   
endmodule

//*******************************************************************--

⌨️ 快捷键说明

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