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

📄 cpu.v

📁 8051的Verilog实现
💻 V
📖 第 1 页 / 共 5 页
字号:
   else
      //-----------------------------------
      // Synchronous write
      //-----------------------------------
      // Read-Modify-Write flip-flop
      //--------------------------------
      begin
      if (mempsackint)
         begin
         if (code_fetch_e | debug_fetch_e)
            begin
            rmwinstr <= rmwinstr_a ; 
            end 
         end
      end  
   end 

   //------------------------------------------------------------------
   // Instruction decoder
   // Combinational part
   //------------------------------------------------------------------
   always @(memdatai)
   begin : nr_decoder_hand
   //------------------------------------------------------------------ 
   case (memdatai)
   //-----------------------------------
   // 00h
   //-----------------------------------
   NOP :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   AJMP_0 :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   LJMP :
      begin
      nr_bytes_a = 2'b11 ; 
      nr_cycles_a = 4'b0100 ; 
      end
   RR_A :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   INC_A :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   INC_ADDR :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   INC_IR0 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   INC_IR1 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   INC_R0 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   INC_R1 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   INC_R2 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   INC_R3 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   INC_R4 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   INC_R5 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   INC_R6 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   INC_R7 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   
   //-----------------------------------
   // 10h
   //-----------------------------------
   JBC_BIT :
      begin
      nr_bytes_a = 2'b11 ; 
      nr_cycles_a = 4'b0100 ; 
      end
   ACALL_0 :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0110 ; 
      end
   LCALL :
      begin
      nr_bytes_a = 2'b11 ; 
      nr_cycles_a = 4'b0110 ; 
      end
   RRC_A :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   DEC_A :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   DEC_ADDR :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   DEC_IR0 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   DEC_IR1 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   DEC_R0 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   DEC_R1 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   DEC_R2 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   DEC_R3 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   DEC_R4 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   DEC_R5 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   DEC_R6 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   DEC_R7 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   
   //-----------------------------------
   // 20h
   //-----------------------------------
   JB_BIT :
      begin
      nr_bytes_a = 2'b11 ; 
      nr_cycles_a = 4'b0100 ; 
      end
   AJMP_1 :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   RET :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0100 ; 
      end
   RL_A :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   ADD_N :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   ADD_ADDR :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   ADD_IR0 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   ADD_IR1 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   ADD_R0 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   ADD_R1 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   ADD_R2 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   ADD_R3 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   ADD_R4 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   ADD_R5 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   ADD_R6 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   ADD_R7 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   
   //-----------------------------------
   // 30h
   //-----------------------------------
   JNB_BIT :
      begin
      nr_bytes_a = 2'b11 ; 
      nr_cycles_a = 4'b0100 ; 
      end
   ACALL_1 :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0110 ; 
      end
   RETI :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0100 ; 
      end
   RLC_A :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   ADDC_N :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   ADDC_ADDR :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   ADDC_IR0 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   ADDC_IR1 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   ADDC_R0 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   ADDC_R1 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   ADDC_R2 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   ADDC_R3 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   ADDC_R4 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   ADDC_R5 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   ADDC_R6 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   ADDC_R7 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   
   //-----------------------------------
   // 40h
   //-----------------------------------
   JC :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   AJMP_2 :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   ORL_ADDR_A :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   ORL_ADDR_N :
      begin
      nr_bytes_a = 2'b11 ; 
      nr_cycles_a = 4'b0100 ; 
      end
   ORL_A_N :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   ORL_A_ADDR :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   ORL_A_IR0 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   ORL_A_IR1 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   ORL_A_R0 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   ORL_A_R1 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   ORL_A_R2 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   ORL_A_R3 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   ORL_A_R4 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   ORL_A_R5 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   ORL_A_R6 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   ORL_A_R7 :
      begin
      nr_bytes_a = 2'b01 ; 
      nr_cycles_a = 4'b0001 ; 
      end
   
   //-----------------------------------
   // 50h
   //-----------------------------------
   JNC :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   ACALL_2 :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0110 ; 
      end
   ANL_ADDR_A :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0011 ; 
      end
   ANL_ADDR_N :
      begin
      nr_bytes_a = 2'b11 ; 
      nr_cycles_a = 4'b0100 ; 
      end
   ANL_A_N :
      begin
      nr_bytes_a = 2'b10 ; 
      nr_cycles_a = 4'b0010 ; 
      end
   ANL_A_ADDR :
      begin
      nr_bytes_a = 2'b10 ; 

⌨️ 快捷键说明

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