亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? risc16f84_clk2x.v

?? 用VHDL語言實現的pic16f84
?? V
?? 第 1 頁 / 共 3 頁
字號:

      // go to Q2 state if reset signal is de-asserted
      if (~reset_i) state_reg <= Q2_PP;

    end  // End of QRESET_PP state


    // 2-3. Q2 cycle
    Q2_PP :
    begin
      ram_we_reg <= 0;  // Default to not writing (Can be overridden below)
      aux_we_reg <= 0;  // Default to not writing (Can be overridden below)
      
      // 2-3-1. Read data-RAM and substitute source values to alu-input regs
      if (exec_op_reg && ~intstart_reg && ~sleepflag_reg)  // Not stalled
      begin
        // 2-3-1-1. Set aluinp1 register (source #1)
        if (   inst_movf   || inst_swapf || inst_addwf || inst_subwf
            || inst_andwf  || inst_iorwf || inst_xorwf || inst_decf
            || inst_incf   || inst_rlf   || inst_rrf   || inst_bcf
            || inst_bsf    || inst_btfsc || inst_btfss || inst_decfsz
            || inst_incfsz || inst_comf)
            
            aluinp1_reg <= ram_i_node;       // RAM/Special registers
        else
        if (   inst_movlw || inst_addlw || inst_sublw || inst_andlw
            || inst_iorlw || inst_xorlw || inst_retlw)
            
            aluinp1_reg <= inst_reg[7:0];    // Immediate value ("k")
        else
        if (   inst_clrf  || inst_clrw) aluinp1_reg <= 0; // 0
        else aluinp1_reg <= w_reg;                        // W register
        
        // 2-3-1-2. Set aluinp2 register (source #2)
        c_in <= 0; // Default to no carry in.
        if      (inst_decf || inst_decfsz) aluinp2_reg <= -1; // for decr.
        else if (inst_incf || inst_incfsz) aluinp2_reg <=  1; // for incr.
                // -1 * W register (for subtract)
        else if (inst_sublw || inst_subwf) 
        begin
          aluinp2_reg <= ~w_reg + 1; 
          c_in <= 1;  // Set c_in for subtract operations (makes C come out).
        end
                // operation of BCF: AND with inverted mask ("1..101..1")
                // mask for BCF: value of only one position is 0
        else if (inst_bcf) aluinp2_reg <= ~mask_node; 
                // operation of BSF: OR with mask_node ("0..010..0")
                // operation of FSC and FSS: AND with mask_node, compare to 0
        else if (inst_btfsc || inst_btfss || inst_bsf)
                                      aluinp2_reg <= mask_node;
        else aluinp2_reg <= w_reg; // W register

        // 2-3-1-3. Set stack pointer register (pop stack)
        if (inst_ret || inst_retlw || inst_retfie)
             stack_pnt_reg   <= stack_pnt_reg - 1; // cycles 3,2,1,0,7,6...

        // 2-4-1-3. Set data-SRAM write enable (hazard-free)
        if (writeram_node && addr_sram)    ram_we_reg <= 1;
        if (writeram_node && addr_aux_dat) aux_we_reg <= 1;

      end  // End of "if not stalled"

      // 2-3-4. Goto next cycle
      if (reset_i) state_reg <= QRESET_PP;
      // if in sleep mode, wait until wake-up trigger comes
      else if (sleepflag_reg && ~intstart_reg)  // Sleeping, not stalled
      begin
        if (inte_sync_reg)
        begin
        // if rb0/inte interrupt comes, then resume execution
          sleepflag_reg <= 0;
          state_reg     <= Q2_PP;
        end
      end
      else state_reg <= Q4_PP;

    end   // End of Q2 state

    // 2-5. Q4 cycle
    Q4_PP :
    begin
      int_node <= 0;     // Default state is: no interrupt request
      
      if (exec_op_reg && ~intstart_reg)      // if NOT STALLED
      begin
        // 2-4-1-2. Set C flag and DC flag
        if (inst_addlw || inst_addwf || inst_sublw || inst_subwf)
        begin
          status_reg[1]   <= addlow_node[4];         // DC flag
          status_reg[0]   <= add_node[8];            // C flag
        end
        else if (inst_rlf) status_reg[0] <= aluinp1_reg[7];  // C flag
        else if (inst_rrf) status_reg[0] <= aluinp1_reg[0];  // C flag
      end

      // 2-4-2. Check external interrupt and set int. flag
      if (~intstart_reg && intcon_reg[7]) // GIE
      begin
        // PORT-B0 INT
        if (inte_sync_reg)
        begin
          intcon_reg[1] <= 1;     // set INTF
          intclr_reg    <= 1;     // clear external int-register
                                  // (intrise_reg and intdown_reg)
          int_node      <= 1;     // Flag ensures that PC is held, and that
                                  // GIE bit is set appropriately by logic
                                  // further "downstream" within this state.
        end
      end

      if (~exec_op_reg && ~intstart_reg)      // if STALLED (not interrupt) 
      begin
        pc_reg          <= inc_pc_node; // increment PC
        exec_op_reg     <= 1;           // end of stall
      end
      else  // if NOT stalled 
      begin
        // (note: if intstart_reg, only stack/pc-operations in this 
        //        else-clause will be performed)
        // 2-5-2. Store calculation result into destination, 
        // set PC and flags, and determine if execute next cycle.

        // 2-5-2-1. Set W register, if not in stall cycle 
        //          (~intstart_reg) and destination is W
        
        // writew_node == 0 if intstart_reg...
        if (writew_node) w_reg   <= aluout;    // write W reg

        // 2-5-2-2. Set data RAM/special registers,
        // if not in stall cycle (~intstart_reg)
        if (writeram_node)
        begin
          if (addr_stat)
          begin
            status_reg[7:5] <= aluout[7:5];      // write IRP,RP1,RP0
            // status(4),status(3)...unwritable, see below (/PD,/T0 part)
            status_reg[1:0] <= aluout[1:0];      // write DC,C
          end
          if (addr_fsr)         fsr_reg <= aluout;      // write FSR
          if (addr_pclath)   pclath_reg <= aluout[4:0]; // write PCLATH
          if (addr_intcon) intcon_reg[6:0] <= aluout[6:0]; 
                           // write INTCON (except GIE)
                           // intcon(7)...see below (GIE part)
          if (addr_option)   option_reg <= aluout;       // write OPTION
          if (addr_aux_adr_lo) aux_adr_lo_reg <= aluout; // write AUX low
          if (addr_aux_adr_hi) aux_adr_hi_reg <= aluout; // write AUX high
        end

        // 2-5-2-3. Set/clear Z flag, if not in stall cycle (~intstart_reg)
        if (~intstart_reg)
        begin
          if (addr_stat) status_reg[2] <= aluout[2]; // (dest. is Z flag)
          else if (   inst_addlw || inst_addwf || inst_andlw || inst_andwf
                   || inst_clrf  || inst_clrw  || inst_comf  || inst_decf
                   || inst_incf  || inst_movf  || inst_sublw || inst_subwf
                   || inst_xorlw || inst_xorwf || inst_iorlw || inst_iorwf )
                  status_reg[2] <= aluout_zero_node; // Z=1 if result == 0
        end

        // 2-5-2-4. Set PC and determine whether to execute next cycle or not
        // After interrupt-stall cycle ends, jump to interrupt vector
        if (intstart_reg) 
        begin
          pc_reg      <= 4;     // (interrupt vector)
          exec_op_reg <= 0;     // the next cycle is a stall cycle
        end
        else if (inst_ret || inst_retlw || inst_retfie) // "return" instr.
        begin
          pc_reg      <= stack_reg[stack_pnt_reg];
          exec_op_reg <= 0;              // the next cycle is stall cycle
        end
        else if (inst_goto || inst_call) // "goto/call" instructions
        begin
          // (see pp.18 of PIC16F84 data sheet)
          pc_reg      <= {pclath_reg[4:3],inst_reg[10:0]};
          exec_op_reg <= 0;
        end
        else if ( (   (inst_btfsc || inst_decfsz || inst_incfsz) 
                       && aluout_zero_node)
                   || (inst_btfss && ~aluout_zero_node)
                   ) // bit_test instrcutions
        begin
          pc_reg      <= inc_pc_node;
          exec_op_reg <= 0;
          // the next cycle is stall cycle, if test conditions are met.
        end
        else if (writeram_node && addr_pcl) // PCL is data-destination
        begin
          // (see pp.18 of PIC16F84 data sheet)
          pc_reg      <= pclath_reg[4:0] & aluout;
          exec_op_reg <= 0;
        end
        else
        begin
          // this check MUST be located AFTER the above if/else sentences
          // check if interrupt trigger comes
          if (~int_node) pc_reg <= inc_pc_node; 
          // if not, the next instr. fetch/exec. will be performed normally
          else pc_reg <= pc_reg; 
          // if so, value of PC must be held 
          //(will be pushed onto stack at the end of next instruction cycle)
          exec_op_reg <= 1;
        end

        // 2-5-2-5. Push current PC value into stack, if necessary
        if (inst_call || intstart_reg)
        // CALL instr. or End of interrupt-stall cycle
        begin
          stack_reg[stack_pnt_reg] <= pc_reg;  // write PC value
          stack_pnt_reg <= stack_pnt_reg + 1;  // increment stack pointer
        end

        // 2-5-2-6. Set GIE bit in intcon register (intcon_reg(7))
        if (~intstart_reg)
        begin
          if (int_node) // interrupt trigger comes
          begin
            intcon_reg[7] <= 0; // clear GIE
            intstart_reg  <= 1; // the next cycle is interrupt-stall cycle
          end
          else if (inst_retfie) // "return from interrupt" instruction
          begin
            intcon_reg[7] <= 1;
            intstart_reg  <= 0;
          end
          else if (writeram_node && addr_intcon) // destination is GIE
          begin
            intcon_reg[7] <= aluout[7];
            intstart_reg  <= 0;
          end
          else intstart_reg <= 0;
        end
        else intstart_reg <= 0;

        // 2-5-2-7. Enter sleep mode if needed. (No need to set /TO and /PD)
        if (~intstart_reg && inst_sleep) sleepflag_reg <= 1;

      end // (if not stalled)

      // 2-5-3. Clear data-SRAM write enable (hazard-free)
      ram_we_reg <= 0;
      aux_we_reg <= 0;

      // 2-5-1. Fetch next program-instruction
      inst_reg    <= prog_dat_i;

      // 2-5-6. Goto next cycle
      if (reset_i) state_reg   <= QRESET_PP;
      else state_reg   <= Q2_PP;
    end    // End of Q4 state

    // 2-6. Illegal states (NEVER REACHED in normal execution)
    default : state_reg   <= QRESET_PP;      // goto reset state
    endcase;
    
end  // End of global clock enable
end  // End of process


// Detect external interrupt requests
// INT0 I/F
always @(posedge int0_i or posedge intclr_reg)
begin
  if (intclr_reg) intrise_reg <= 0;
  else intrise_reg <= 1; // catch positive edge
end // process

always @(negedge int0_i or posedge intclr_reg)
begin
  if (intclr_reg) intdown_reg <= 0;
  else intdown_reg <= 1; // catch negative edge
end // process
assign rb0_int = option_reg[6]?intrise_reg:intdown_reg;

// Decode INT triggers 
// (do not AND with GIE(intcon_reg(7)), since these signals are 
//  also used for waking up from SLEEP)
assign inte  = intcon_reg[4] && rb0_int;                                       // G0IE and raw-trigger signal


// Circuit's output signals
assign prog_adr_o = pc_reg;        // program ROM address
assign ram_adr_o  = ram_adr_node;  // data RAM address
assign ram_dat_o  = aluout;        // data RAM write data
assign ram_we_o   = ram_we_reg;    // data RAM write enable

assign aux_adr_o  = {aux_adr_hi_reg,aux_adr_lo_reg};
assign aux_dat_io = (aux_we_reg && clk_en_i)?aluout:{8{1'bZ}};
assign aux_we_o   = aux_we_reg;

endmodule


//`undef STATEBIT_SIZE

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩av网站在线观看| 欧美日韩的一区二区| 亚洲欧美经典视频| 精品人在线二区三区| 99国产一区二区三精品乱码| 麻豆精品一二三| 欧美日韩在线免费视频| 精品无人码麻豆乱码1区2区 | 亚洲精品国久久99热| 日韩欧美一区在线| 欧美影视一区二区三区| 国内精品自线一区二区三区视频| 日韩欧美一卡二卡| 欧美天天综合网| 波多野结衣亚洲| 亚洲视频你懂的| 日本一区二区三区四区在线视频| 精品久久人人做人人爽| 欧美日韩一区二区在线观看视频 | 亚洲国产日韩综合久久精品| 色综合久久中文综合久久97| 久久99精品国产.久久久久| 亚洲人123区| 国产片一区二区| 欧美精品一区二区三区在线| 91久久香蕉国产日韩欧美9色| 又紧又大又爽精品一区二区| 国产精品久久久久久久久免费樱桃 | 制服丝袜激情欧洲亚洲| 蜜臀av一级做a爰片久久| 久久精品久久99精品久久| caoporn国产精品| 欧美日韩在线观看一区二区| 久久色成人在线| 亚洲激情自拍偷拍| 国产专区综合网| 欧美综合亚洲图片综合区| 日韩一区二区精品葵司在线| 中文字幕不卡一区| 视频精品一区二区| 波多野结衣欧美| 欧美一级一区二区| 亚洲综合小说图片| 国产a区久久久| 欧美人与性动xxxx| 亚洲婷婷在线视频| 国内精品伊人久久久久影院对白| 色综合久久88色综合天天免费| 精品乱人伦一区二区三区| 亚洲一卡二卡三卡四卡无卡久久| 久久成人免费网| 3751色影院一区二区三区| 中文字幕在线播放不卡一区| 麻豆精品一区二区三区| 欧美无砖砖区免费| 亚洲日穴在线视频| 国产九九视频一区二区三区| 欧美日韩精品欧美日韩精品一综合 | av在线播放不卡| 精品国产91久久久久久久妲己| 亚洲r级在线视频| 在线观看日韩一区| 国产精品卡一卡二| 国产精品一品视频| 精品久久久久久久久久久院品网 | 中文av一区特黄| 国内精品国产三级国产a久久| 欧美区一区二区三区| 亚洲精品一二三区| 91在线无精精品入口| 国产精品欧美一级免费| 国产永久精品大片wwwapp| 欧美mv和日韩mv国产网站| 日韩中文字幕av电影| 欧美日韩中文另类| 亚洲一区在线看| 欧美视频日韩视频在线观看| 亚洲视频一区二区免费在线观看| 不卡免费追剧大全电视剧网站| 欧美大片顶级少妇| 激情五月激情综合网| 久久先锋影音av| 成人三级伦理片| 中文字幕一区二区在线观看| 成人av电影免费在线播放| 中文字幕中文字幕在线一区 | 国产麻豆视频一区| 日本一区二区三区四区| av电影一区二区| 一区二区久久久| 日韩欧美美女一区二区三区| 久久99久久精品| 国产欧美一区二区精品忘忧草| 成人动漫在线一区| 亚洲私人影院在线观看| 欧美美女视频在线观看| 激情久久五月天| 中文字幕永久在线不卡| 欧美撒尿777hd撒尿| 久久精品国产999大香线蕉| 国产欧美一区视频| 欧洲精品视频在线观看| 另类人妖一区二区av| 国产精品久久毛片| 欧美三级电影网| 国产一区二区在线观看免费| 国产精品久久久久影院老司| 欧美无砖专区一中文字| 精品一区二区三区在线观看国产 | 久久午夜羞羞影院免费观看| 91在线国产福利| 亚洲国产成人91porn| 在线观看91av| 盗摄精品av一区二区三区| 亚洲另类中文字| 欧美美女一区二区三区| gogo大胆日本视频一区| 久久99精品国产.久久久久 | 蜜桃精品在线观看| 国产精品久久久久久久久免费桃花| 精品视频全国免费看| 成人激情校园春色| 九九**精品视频免费播放| 一区二区三区四区激情| 国产日韩精品一区二区三区在线| 欧美日韩精品一区二区| 成人动漫一区二区三区| 久久精品国产亚洲高清剧情介绍 | 国产精品萝li| 欧美精品一区二区三区四区 | 国产在线国偷精品产拍免费yy | 精品一二线国产| 亚洲国产综合在线| 国产精品久久久爽爽爽麻豆色哟哟| 日韩欧美国产一二三区| 欧美三级日本三级少妇99| 97久久精品人人爽人人爽蜜臀| 黄色成人免费在线| 久草在线在线精品观看| 婷婷丁香激情综合| 亚洲日本在线a| 国产女同互慰高潮91漫画| 欧美大片在线观看一区二区| 欧美人xxxx| 欧美精品乱码久久久久久| 色婷婷久久久综合中文字幕| 不卡影院免费观看| 成人午夜视频福利| 国产sm精品调教视频网站| 国产精品一区二区在线观看网站| 美国三级日本三级久久99 | 亚洲精品中文字幕在线观看| 中文字幕第一页久久| 中文字幕一区二区三区在线观看| 国产精品免费人成网站| 日本一区二区三区视频视频| 国产精品美女www爽爽爽| 国产精品免费看片| 亚洲欧美在线观看| 亚洲人成精品久久久久| 亚洲午夜免费电影| 午夜精品爽啪视频| 国内精品自线一区二区三区视频| 国产福利一区二区| 99国产精品久| 精品视频1区2区| 欧美tk丨vk视频| 中文一区二区在线观看| 成人免费视频在线观看| 亚洲第一福利一区| 蜜臀av性久久久久蜜臀av麻豆| 韩国精品主播一区二区在线观看 | 国内成人精品2018免费看| 国产美女精品在线| 色天天综合久久久久综合片| 欧美日韩国产三级| 久久综合九色综合97婷婷| 中文字幕va一区二区三区| 亚洲国产综合色| 国产在线日韩欧美| 91国产视频在线观看| 欧美一级欧美一级在线播放| 久久久一区二区三区捆绑**| 亚洲色图另类专区| 三级影片在线观看欧美日韩一区二区| 日本少妇一区二区| 成人午夜av电影| 欧美人体做爰大胆视频| 国产午夜精品久久久久久久| 亚洲精品美腿丝袜| 国产中文一区二区三区| 91九色02白丝porn| 日韩欧美成人午夜| ...xxx性欧美| 免费视频最近日韩| 色婷婷精品久久二区二区蜜臀av| 欧美成人艳星乳罩| 午夜影视日本亚洲欧洲精品| 国产激情91久久精品导航 | 亚洲美女区一区|