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

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

?? risc16f84_clk2x.v

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

     // Other output registers (for removing hazards)
reg  ram_we_reg;         // data-sram write strobe
reg  aux_we_reg;         // AUX write strobe

     // Synchronizers
reg  inte_sync_reg;

     // Signals used in "main_efsm" procedure
     // (Intermediate nodes used for resource sharing.)
wire [7:0] ram_i_node;   // result of reading RAM/Special registers
wire [12:0] inc_pc_node; // value of PC + 1
wire [7:0] mask_node;    // bit mask for logical operations
wire [8:0] add_node;     // result of 8bit addition
wire [4:0] addlow_node;  // result of low-4bit addition
wire temp;               // Placeholder wire
wire dtemp;              // Placeholder wire
wire aluout_zero_node;   // H if ALUOUT = 0
reg  [7:0] aluout;       // result of calculation

reg  writew_node;        // H if destination is W register
reg  writeram_node;      // H if destination is RAM/Special registers
reg  int_node;           // Used in Q4_PP to indicate interrupt condition

//--------------------------------------------------------------------------
// Instantiations
//--------------------------------------------------------------------------


//--------------------------------------------------------------------------
// Functions & Tasks
//--------------------------------------------------------------------------

//--------------------------------------------------------------------------
// Module code
//--------------------------------------------------------------------------

// CPU synchronizers
always @(posedge clk_i)
begin
  if (clk_en_i)  // Global clock enable
  begin
    inte_sync_reg   <= inte;
  end
end

// Decode OPcode    (see pp.54 of PIC16F84 data sheet)
// only 1 signal of the following signals will be '1'
assign inst_call     = (inst_reg[13:11] ==  3'b100           );
assign inst_goto     = (inst_reg[13:11] ==  3'b101           );
assign inst_bcf      = (inst_reg[13:10] ==  4'b0100          );
assign inst_bsf      = (inst_reg[13:10] ==  4'b0101          );
assign inst_btfsc    = (inst_reg[13:10] ==  4'b0110          );
assign inst_btfss    = (inst_reg[13:10] ==  4'b0111          );
assign inst_movlw    = (inst_reg[13:10] ==  4'b1100          );
assign inst_retlw    = (inst_reg[13:10] ==  4'b1101          );
assign inst_sublw    = (inst_reg[13:9]  ==  5'b11110         );
assign inst_addlw    = (inst_reg[13:9]  ==  5'b11111         );
assign inst_iorlw    = (inst_reg[13:8]  ==  6'b111000        );
assign inst_andlw    = (inst_reg[13:8]  ==  6'b111001        );
assign inst_xorlw    = (inst_reg[13:8]  ==  6'b111010        );
assign inst_subwf    = (inst_reg[13:8]  ==  6'b000010        );
assign inst_decf     = (inst_reg[13:8]  ==  6'b000011        );
assign inst_iorwf    = (inst_reg[13:8]  ==  6'b000100        );
assign inst_andwf    = (inst_reg[13:8]  ==  6'b000101        );
assign inst_xorwf    = (inst_reg[13:8]  ==  6'b000110        );
assign inst_addwf    = (inst_reg[13:8]  ==  6'b000111        );
assign inst_movf     = (inst_reg[13:8]  ==  6'b001000        );
assign inst_comf     = (inst_reg[13:8]  ==  6'b001001        );
assign inst_incf     = (inst_reg[13:8]  ==  6'b001010        );
assign inst_decfsz   = (inst_reg[13:8]  ==  6'b001011        );
assign inst_rrf      = (inst_reg[13:8]  ==  6'b001100        );
assign inst_rlf      = (inst_reg[13:8]  ==  6'b001101        );
assign inst_swapf    = (inst_reg[13:8]  ==  6'b001110        );
assign inst_incfsz   = (inst_reg[13:8]  ==  6'b001111        );
assign inst_movwf    = (inst_reg[13:7]  ==  7'b0000001       );
assign inst_clrw     = (inst_reg[13:7]  ==  7'b0000010       );
assign inst_clrf     = (inst_reg[13:7]  ==  7'b0000011       );
assign inst_ret      = (inst_reg[13:0]  == 14'b00000000001000);
assign inst_retfie   = (inst_reg[13:0]  == 14'b00000000001001);
assign inst_sleep    = (inst_reg[13:0]  == 14'b00000001100011);


// Calculate RAM access address (see pp.19 of PIC16F84 data sheet)

    // if "d"=0, indirect addressing is used, so RAM address is BANK+FSR
    // otherwise, RAM address is BANK+"d"
    // (see pp.19 of PIC16F84 data sheet)
assign ram_adr_node = (inst_reg[6:0]==0)?{status_reg[7],fsr_reg[7:0]}:
                               {status_reg[6:5],inst_reg[6:0]};

    // check if this is an access to external RAM or not
assign addr_sram   = (ram_adr_node[6:0] > 7'b0001011); //0CH-7FH,8CH-FFH

    // check if this is an access to special register or not
    // only 1 signal of the following signals will be '1'
assign addr_pcl     = (ram_adr_node[6:0] ==  7'b0000010); // 02H, 82H
assign addr_stat    = (ram_adr_node[6:0] ==  7'b0000011); // 03H, 83H
assign addr_fsr     = (ram_adr_node[6:0] ==  7'b0000100); // 04H, 84H
assign addr_aux_dat = (ram_adr_node[7:0] == 8'b00001000); // 08H
assign addr_pclath  = (ram_adr_node[6:0] ==  7'b0001010); // 0AH, 8AH
assign addr_intcon  = (ram_adr_node[6:0] ==  7'b0001011); // 0BH, 8BH
assign addr_option  = (ram_adr_node[7:0] == 8'b10000001); // 81H
assign addr_aux_adr_lo = (ram_adr_node[7:0] == 8'b00000101); // 05H
assign addr_aux_adr_hi = (ram_adr_node[7:0] == 8'b00000110); // 06H

// construct bit-mask for logical operations and bit tests
assign mask_node = 1 << inst_reg[9:7];

// 1. Intermediate nodes for resource sharing

// 1-2. PC + 1
assign inc_pc_node = pc_reg + 1;

// Tri-state drivers instead of a huge selector...  It produces smaller
// results, and runs faster.
assign ram_i_node = (addr_sram)       ?ram_dat_i:8'bZ;
assign ram_i_node = (addr_pcl)        ?pc_reg[7:0]:8'bZ;
assign ram_i_node = (addr_stat)       ?status_reg:8'bZ;
assign ram_i_node = (addr_fsr)        ?fsr_reg:8'bZ;
assign ram_i_node = (addr_aux_dat)    ?aux_dat_io:8'bZ;
assign ram_i_node = (addr_pclath)     ?{3'b0,pclath_reg}:8'bZ;
assign ram_i_node = (addr_intcon)     ?intcon_reg:8'bZ;
assign ram_i_node = (addr_option)     ?option_reg:8'bZ;
assign ram_i_node = (addr_aux_adr_lo) ?aux_adr_lo_reg:8'bZ;
assign ram_i_node = (addr_aux_adr_hi) ?aux_adr_hi_reg:8'bZ;

// 1-3. Adder (ALU)
// full 8bit-addition, with carry in/out.
assign {add_node,temp}     =    {1'b0,aluinp1_reg,1'b1} 
                              + {1'b0,aluinp2_reg,c_in};
// lower 4bit-addition
assign {addlow_node,dtemp} =    {1'b0,aluinp1_reg[3:0],1'b1} 
                              + {1'b0,aluinp2_reg[3:0],c_in};

// 1-4. Test if aluout = 0
assign aluout_zero_node = (aluout == 0)?1:0;

// 1-5. Determine destination
always @(
            intstart_reg
         or inst_reg
         or inst_movwf
         or inst_bcf
         or inst_bsf
         or inst_clrf
         or inst_movlw
         or inst_addlw
         or inst_sublw
         or inst_andlw
         or inst_iorlw
         or inst_xorlw
         or inst_retlw
         or inst_clrw
         or inst_movf
         or inst_swapf
         or inst_addwf
         or inst_subwf
         or inst_andwf
         or inst_iorwf
         or inst_xorwf
         or inst_decf
         or inst_incf
         or inst_rlf
         or inst_rrf
         or inst_decfsz
         or inst_incfsz
         or inst_comf
         )
begin
  if (intstart_reg)
  begin
    writew_node     <= 0;
    writeram_node   <= 0;
  end
  else if (inst_movwf || inst_bcf || inst_bsf || inst_clrf)
  begin
    writew_node     <= 0;
    writeram_node   <= 1;
  end
  else if (   inst_movlw || inst_addlw || inst_sublw || inst_andlw 
           || inst_iorlw || inst_xorlw || inst_retlw || inst_clrw)
  begin
    writew_node     <= 1;
    writeram_node   <= 0;
  end
  else if (   inst_movf   || inst_swapf || inst_addwf || inst_subwf
           || inst_andwf  || inst_iorwf || inst_xorwf || inst_decf 
           || inst_incf   || inst_rlf   || inst_rrf   || inst_decfsz 
           || inst_incfsz || inst_comf)
  begin
    writew_node     <= ~inst_reg[7];  // ("d" field of fetched instruction)
    writeram_node   <=  inst_reg[7];  // ("d" field of fetched instruction)
  end
  else
  begin
    writew_node     <= 0;
    writeram_node   <= 0;
  end
end // End of determine destination logic


// 2-4-1. Calculation and store result into alu-output register

always @(
            add_node
         or aluinp1_reg
         or status_reg
         or inst_reg
         or inst_movwf
         or inst_bcf
         or inst_bsf
         or inst_clrf
         or inst_movlw
         or inst_addlw
         or inst_sublw
         or inst_andlw
         or inst_iorlw
         or inst_xorlw
         or inst_retlw
         or inst_clrw
         or inst_movf
         or inst_swapf
         or inst_addwf
         or inst_subwf
         or inst_andwf
         or inst_iorwf
         or inst_xorwf
         or inst_decf
         or inst_incf
         or inst_rlf
         or inst_rrf
         or inst_decfsz
         or inst_incfsz
         or inst_comf
         )
begin
  // 2-4-1-1. Set aluout register
          // Rotate left
  if      (inst_rlf) 
          aluout <= {aluinp1_reg[6:0],status_reg[0]};
          // Rotate right
  else if (inst_rrf) 
          aluout  <= {status_reg[0],aluinp1_reg[7:1]};
          // Swap nibbles
  else if (inst_swapf)
          aluout <= {aluinp1_reg[3:0],aluinp1_reg[7:4]};
          // Logical inversion
  else if (inst_comf)
          aluout  <= ~aluinp1_reg;
          // Logical AND, bit clear/bit test
  else if (   inst_andlw || inst_andwf || inst_bcf || inst_btfsc
           || inst_btfss) 
          aluout  <= (aluinp1_reg & aluinp2_reg);
          // Logical OR, bit set
  else if (inst_bsf || inst_iorlw || inst_iorwf)
          aluout  <= (aluinp1_reg | aluinp2_reg);
          // Logical XOR
  else if (inst_xorlw || inst_xorwf)
          aluout  <= (aluinp1_reg ^ aluinp2_reg);
          // Addition, Subtraction, Increment, Decrement
  else if (  inst_addlw || inst_addwf  || inst_sublw || inst_subwf
           || inst_decf || inst_decfsz || inst_incf  || inst_incfsz)
          aluout  <= add_node[7:0];
          // Pass through
  else aluout  <= aluinp1_reg;
end


// MAIN EFSM: description of register value changes in each clock cycle
always @(posedge clk_i)
begin
if (clk_en_i)
begin

  // 2. EFSM body
  case (state_reg)

    // 2-1. Reset state (see pp.14 and pp.42 of PIC16F84 data sheet)
    QRESET_PP :
    begin
      pc_reg          <= 0;     // 0
      status_reg[7:5] <= 3'b0;
      pclath_reg      <= 0;     // 0
      intcon_reg[7:1] <= 7'b0;
      option_reg      <= -1;    // Set to all ones, like vhdl (others => 1)
      aux_adr_lo_reg  <= 0;
      aux_adr_hi_reg  <= 0;
      exec_op_reg     <= 0;
      intclr_reg      <= 1;     // clear int
      intstart_reg    <= 0;
      ram_we_reg      <= 0;
      sleepflag_reg   <= 0;
      status_reg[4]   <= 1;     // /T0 = 1
      status_reg[3]   <= 1;     // /PD = 1
      stack_pnt_reg   <= 0;     // Reset stack pointer

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产剧情在线观看一区二区| 日本韩国精品一区二区在线观看| 欧美一区二区三区视频在线| 性感美女极品91精品| 性久久久久久久| 日韩亚洲欧美在线| 91精品国产欧美一区二区18 | jizz一区二区| 粉嫩高潮美女一区二区三区| 国产精品一区二区91| 高清在线不卡av| 成人国产精品免费网站| 从欧美一区二区三区| 91免费精品国自产拍在线不卡| 91色在线porny| 欧美无人高清视频在线观看| 欧美男人的天堂一二区| 7777精品伊人久久久大香线蕉完整版 | 日韩高清电影一区| 亚洲3atv精品一区二区三区| 在线一区二区三区| 韩国女主播成人在线| 亚洲国产一区二区在线播放| 亚洲欧美综合在线精品| 亚洲欧美一区二区三区国产精品| 亚洲色图色小说| 亚洲成人免费在线观看| 开心九九激情九九欧美日韩精美视频电影 | 国产成人亚洲综合色影视| 成人国产在线观看| 91黄色在线观看| 91精品国产福利在线观看| 久久亚洲捆绑美女| 中文字幕亚洲欧美在线不卡| 一区二区三区久久| 蜜桃av一区二区在线观看 | 欧美自拍丝袜亚洲| 欧美一区二区三区小说| 久久久精品免费免费| 国产亚洲欧美一区在线观看| 国产精品国产三级国产有无不卡| 亚洲欧美一区二区三区极速播放 | 欧美一级黄色大片| 欧美激情中文字幕| 亚洲在线中文字幕| 久久爱另类一区二区小说| 波多野洁衣一区| 56国语精品自产拍在线观看| 国产喷白浆一区二区三区| 亚洲一区自拍偷拍| 精品一区二区三区不卡| 99精品欧美一区二区三区综合在线| 欧美这里有精品| 久久午夜老司机| 亚洲国产综合色| 国产精品系列在线观看| 欧美三区免费完整视频在线观看| 久久久久久久久久久久久久久99| 亚洲图片欧美激情| 国产原创一区二区三区| 91久久精品国产91性色tv| 男人的j进女人的j一区| 久草这里只有精品视频| 成人综合在线视频| 国产在线播放一区| 欧美在线一二三| 国产亚洲精品中文字幕| 日韩在线卡一卡二| heyzo一本久久综合| 精品裸体舞一区二区三区| 亚洲人成精品久久久久| 国产一区二区在线看| 欧美午夜理伦三级在线观看| 久久精品亚洲国产奇米99| 天堂精品中文字幕在线| av亚洲精华国产精华精华 | 国产精品夫妻自拍| 久久精品国产秦先生| 欧美午夜在线观看| 亚洲欧美一区二区在线观看| 狠狠色丁香婷综合久久| 欧美日韩国产高清一区| 亚洲欧美日韩小说| 菠萝蜜视频在线观看一区| 久久一区二区视频| 久久精品72免费观看| 欧美精品丝袜中出| 亚洲一区二区欧美日韩| 在线一区二区三区四区| 偷拍亚洲欧洲综合| 99久久免费精品高清特色大片| 国产欧美日韩不卡| 国产精品88av| 国产人妖乱国产精品人妖| 国产一区二区久久| 久久久国产精品麻豆| 国产精品亚洲成人| 国产亚洲精品中文字幕| 国产成人综合亚洲91猫咪| 久久久不卡网国产精品一区| 国内成+人亚洲+欧美+综合在线| 日韩美女一区二区三区四区| 蜜乳av一区二区三区| 日韩精品一区二区在线| 免费成人av在线播放| 日韩精品在线一区| 久久精工是国产品牌吗| 精品国产欧美一区二区| 精品午夜一区二区三区在线观看 | 日韩av二区在线播放| 欧美喷水一区二区| 欧美aaaaa成人免费观看视频| 欧美一区二区三级| 美国欧美日韩国产在线播放| 精品国产乱码久久久久久图片 | 夜夜精品视频一区二区| 欧美在线制服丝袜| 日韩中文字幕区一区有砖一区| 欧美日韩国产a| 美女高潮久久久| 久久久三级国产网站| 福利一区福利二区| 亚洲精品视频一区| 欧美日韩国产一级片| 精品一区二区三区免费毛片爱| 久久精品免费在线观看| 99久久精品免费看国产| 亚洲午夜一区二区三区| 日韩精品一区二区在线观看| 国产a区久久久| 亚洲精品伦理在线| 8x福利精品第一导航| 韩国一区二区在线观看| 中文字幕一区二区日韩精品绯色 | 日韩美女精品在线| 欧美三级午夜理伦三级中视频| 伦理电影国产精品| 国产精品日韩精品欧美在线| 91精彩视频在线| 久久精品国产成人一区二区三区| 中文字幕乱码久久午夜不卡| 日本电影亚洲天堂一区| 麻豆精品一二三| 国产精品成人免费在线| 欧美日韩精品久久久| 国产电影一区二区三区| 亚洲一区二区影院| 久久影院午夜论| 91精品办公室少妇高潮对白| 狠狠色丁香久久婷婷综合_中| 亚洲色图视频网站| 精品成人一区二区三区四区| www.日韩精品| 精品一区二区在线播放| 亚洲激情网站免费观看| 久久久久国产精品厨房| 欧美日韩国产乱码电影| 成人一区二区三区视频| 日本特黄久久久高潮| 亚洲丝袜自拍清纯另类| 欧美精品一区在线观看| 欧洲中文字幕精品| 国产.欧美.日韩| 人人精品人人爱| 亚洲精品菠萝久久久久久久| 欧美本精品男人aⅴ天堂| 欧美视频自拍偷拍| 成人福利电影精品一区二区在线观看| 偷拍一区二区三区| 亚洲男同性恋视频| 久久久久久日产精品| 91精品国产麻豆| 欧美亚洲另类激情小说| 不卡大黄网站免费看| 国产一区二区三区免费看| 丝袜诱惑亚洲看片| 亚洲男人的天堂在线aⅴ视频| 亚洲精品在线观看网站| 9191久久久久久久久久久| 97精品久久久午夜一区二区三区 | 精品国产一区二区三区忘忧草| 欧美午夜不卡在线观看免费| 99久久99久久精品免费观看 | 欧美三级三级三级| 91原创在线视频| 成人自拍视频在线| 国产精品一区二区果冻传媒| 天堂av在线一区| 午夜精品一区二区三区免费视频| 亚洲六月丁香色婷婷综合久久| 欧美高清在线视频| 国产欧美一区二区三区在线看蜜臀| 欧美哺乳videos| 欧美zozo另类异族| 日韩精品一区二区三区四区| 欧美日韩国产综合一区二区| 欧美午夜电影在线播放| 欧美吞精做爰啪啪高潮| 91极品视觉盛宴| 精品视频一区三区九区|