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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? keyboard_test1.v

?? ps2_鍵盤控制器源碼verilog源碼
?? V
字號:
////////////////////////////////////////////////////////////////////////////////
//公司: <Company Name>
//工程師: Lawson_jian
//
//創(chuàng)建日期: 2004年12月10日
//設(shè)計(jì)名字: 
//模塊名字: 鍵盤驅(qū)動(dòng)器 KeyBoard Divider
//目標(biāo)裝置: 
//工具版本: <tool_versions>
//描述:
//    
//屬性:
//    <Dependencies here>
//修改:
//    <Code_revision_information>
//附加說明:
//    <Additional_comments>
////////////////////////////////////////////////////////////////////////////////

`timescale 1 ns / 1 ns

module  keyboard_test1 (
      PS2K_DATA,
      PS2K_CLK,
      R_DATA,
      W_DATA,
      BUSY,
      Complete,
      Error,
      RW,
      ENA,
      CLK,
      CLR
      );

//+---------------------------KeyBoard 狀態(tài)設(shè)置---------------------------+

   parameter Data_Width = 8;     //輸入/輸出數(shù)據(jù)寬度
   parameter Count    = 5;     //狀態(tài)碼寬度

//+-----------------------------------------------------------------------+

 inout PS2K_DATA;
 inout PS2K_CLK;
 input [Data_Width-1:0] W_DATA;
 input RW;
 input ENA;
 input CLR;       // synthesis attribute clock_buffer of CLR is ibufg;
 input CLK;
 output [Data_Width-1:0] R_DATA;
 output BUSY;
 output Complete;
 output [1:0] Error;

//+---------------------------頻率發(fā)生器狀態(tài)代碼-------------------------+

 parameter Add_CounteState = 0;
 parameter Dec_CounteState = 1;

//+---------------------------KeyBoard 讀狀態(tài)代碼-------------------------+

 parameter Read_start     = 4'h0;
 parameter Read_start_complete  = 4'h1;
 parameter Read_data      = 4'h2;
 parameter Read_data_complete   = 4'h3;
 parameter Read_parity     = 4'h4;
 parameter Read_parity_complete  = 4'h5;
 parameter Read_stop      = 4'h6;
 parameter Read_finish     = 4'h7;

//+---------------------------KeyBoard 寫狀態(tài)代碼--------------------------+

 parameter Write_start     = 4'h0;
 parameter Restrain_read    = 4'h1;
 parameter Write_data     = 4'h2;
 parameter Write_data_complete  = 4'h3;
 parameter Write_parity     = 4'h4;
 parameter Write_parity_complete  = 4'h5;
 parameter Write_stop     = 4'h6;
 parameter Write_stop_complete  = 4'h7;
 parameter Write_ACK      = 4'h8;
 parameter Write_finish     = 4'h9;

//+-----------------------------KeyBoard 錯(cuò)誤代碼--------------------------+

 parameter No_R_stop_signal   = 4'h1;
 parameter Checkout_error    = 4'h2;
 parameter No_ACK_signal    = 4'h3; 

//+------------------------------------------------------------------------+

 reg [3:0] W_State;
 reg [3:0] R_State;
 reg [Data_Width-1:0] R_DATA;
 reg [Data_Width-1:0] W_Reg;
 reg CLK_W;
 reg DATA_W;
 reg K_DATA;
 reg BUSY;
 reg Complete;
 reg P_Reg;
 reg [7:0] Counter;
 reg [1:0] Error;
 reg [Data_Width-1:0] Counter_reg;        //計(jì)數(shù)器寄存器
 reg CounteState;              //計(jì)數(shù)器狀態(tài)寄存器
 reg Pulse_Out_reg;             //脈沖發(fā)生寄存器

 wire [Data_Width-1:0] Half_Frequency_Data;
 wire [Data_Width-1:0] Frequency_Data;
 wire us_CLK;
 wire P;

//----------------------------------------------------------------------------//
//                          //
//               接口邏輯函數(shù)           //
//                          //
//----------------------------------------------------------------------------//

 assign Frequency_Data = 8'd100;          //頻率數(shù)據(jù)
 assign us_CLK = Pulse_Out_reg;
 assign Half_Frequency_Data = Frequency_Data/2;

 assign PS2K_DATA = DATA_W ? 1'bz : K_DATA;
 assign PS2K_CLK = CLK_W ? 1'bz : 0;
 assign P = RW ? ^~R_DATA : ^~W_Reg;

//----------------------------------------------------------------------------//
//                          //
//            1ms脈沖發(fā)生器          //
//                          //
//----------------------------------------------------------------------------//

 always @(posedge CLK or negedge CLR)
 begin
  if (!CLR)                //復(fù)位
  begin
   Counter_reg = 1;
   CounteState = Add_CounteState;
   Pulse_Out_reg = 0;
  end
  else begin

   Counter_reg = Counter_reg + 1;

   case (CounteState)

   Add_CounteState :             //增量計(jì)數(shù)狀態(tài)
   begin    
    if(Counter_reg == Half_Frequency_Data)     //Half_Frequency_Data = Frequency_Reg/2 產(chǎn)生半個(gè)時(shí)鐘脈沖 
    begin
     CounteState = Dec_CounteState;
     Pulse_Out_reg = 1;
    end
   end
   
   Dec_CounteState :             //減量計(jì)數(shù)狀態(tài)
   begin
    if(Counter_reg == Frequency_Data)      //產(chǎn)生完整時(shí)鐘脈沖
    begin
     Counter_reg = 1;
     CounteState = Add_CounteState;
     Pulse_Out_reg = 0;
    end
   end
   endcase
  end
 end

//----------------------------------------------------------------------------//
//                          //
//          KeyBoard Read or Wrie         //
//                          //
//----------------------------------------------------------------------------//

   always @( posedge us_CLK or negedge CLR)
      if (!CLR) begin
   R_DATA = 0;
   W_Reg = 0;
   CLK_W = 1;
   DATA_W = 1;
   K_DATA = 0;
   BUSY = 0;
   Complete = 0;
   Counter = 0;
   P_Reg = 0;
   Error = 0;
   Counter = 0;
   W_State = Write_start;
   R_State = Read_start;
      end
      else if (ENA) begin
   if(RW) begin
      case (R_State)
         Read_start: begin
           CLK_W = 1;
         DATA_W = 1;
         Error = 0;
         Complete = 0;
                    if( PS2K_CLK == 0 && PS2K_DATA == 0) begin         
         BUSY = 1;
         R_State = Read_start_complete;
        end
        else begin 
         R_State = Read_start;
        end
                 end

         Read_start_complete: begin
                    if( PS2K_CLK == 1) begin
         Counter = 8'd0;
         R_State = Read_data;
        end
        else R_State = Read_start_complete;
                 end

         Read_data: begin
                    if( PS2K_CLK == 0 ) begin
         R_DATA[Counter] = PS2K_DATA;
         Counter = Counter + 1;
         R_State = Read_data_complete;
         $display("read R_DATA[%d] BIT is %b",Counter,PS2K_DATA);
        end
        else R_State = Read_data;
                 end

         Read_data_complete: begin
                    if( PS2K_CLK == 1 ) begin
         if( Counter == 8'd8) begin
          R_State = Read_parity;
         end
         else begin
          R_State = Read_data;
         end
        end
        else R_State = Read_data_complete;
                 end

         Read_parity: begin
                    if( PS2K_CLK == 0 ) begin
         P_Reg = PS2K_DATA;
         R_State = Read_parity_complete;
         $display("read PS2K parity bit "); 
        end
        else R_State = Read_parity;
                  end

      Read_parity_complete: begin
                    if( PS2K_CLK == 1 ) begin
         R_State = Read_stop;
        end
        else R_State = Read_parity_complete;
                  end

      Read_stop: begin
                    if( PS2K_CLK == 0) begin
         if(PS2K_DATA == 1) begin
          $display("PS2K_DATA STOP ");
          R_State = Read_finish; 
         end
         else begin
          Error = No_R_stop_signal;
          R_State = Read_finish;
         end
        end
        else R_State = Read_stop;
                 end

     Read_finish: begin
                    if( PS2K_CLK == 1) begin
         BUSY = 0;
         Complete = 1;
         $display("PS2K parity bit is %b",P_Reg);
         if( P == P_Reg ) begin
          $display("PS2K parity bit is right");
          $display("Complete read R_DATA is %b",R_DATA);          
          R_State = Read_start;
         end
         else begin
          $display("PS2K parity bit is error");          
          Error = Checkout_error;
          R_State = Read_start;
         end
        end
        else R_State = Read_finish;
                  end

         default: begin
                     R_State = Read_start;
                  end
     endcase
     end
     else begin
      case (W_State)
       Write_start: begin
                     CLK_W = 0;
         DATA_W = 0;
         W_Reg = W_DATA;
         K_DATA = 1;
         Counter = 0;
         BUSY = 1;
         Complete = 0;
         Error = 0;
         W_State = Restrain_read;
        end

         Restrain_read: begin
                    if(Counter == 8'd100) begin       //抑制鍵盤通訊400μS
         K_DATA = 0;
         Counter = 0;
         CLK_W = 1;
         $display("Complete Restrain Read ");
         W_State = Write_data;
        end
        else begin
         Counter = Counter + 1;
         W_State = Restrain_read;
        end
                  end

         Write_data: begin
                    if( PS2K_CLK == 0 ) begin
         K_DATA = W_Reg [Counter];
         Counter = Counter + 1;
         $display("write W_DATA[%d] BIT is %b",Counter,W_DATA[Counter]);
         W_State = Write_data_complete;
        end
        else W_State = Write_data;
                  end

         Write_data_complete: begin
                    if( PS2K_CLK == 1 ) begin
         if( Counter == 8'd8) W_State = Write_parity;
         else W_State = Write_data; 
        end
        else W_State = Write_data_complete;
                  end

         Write_parity: begin
                    if( PS2K_CLK == 0 ) begin
         K_DATA = P;
         $display("write Parity Bit is %b",P);
         W_State = Write_parity_complete;
        end
        else W_State = Write_parity;
                  end

     Write_parity_complete: begin
                    if( PS2K_CLK == 1 ) begin
         W_State = Write_stop;
        end
        else W_State = Write_parity_complete;
                  end

      Write_stop: begin
                    if( PS2K_CLK == 0 ) begin
         $display("Write stop ");
         K_DATA = 1;
         W_State = Write_stop_complete;
        end
        else W_State = Write_stop;
                  end


      Write_stop_complete: begin
                    if( PS2K_CLK == 1 ) begin
         DATA_W = 1;
         W_State = Write_ACK;
        end
        else W_State = Write_stop_complete;
                  end

     Write_ACK: begin
                    if( PS2K_CLK == 0) begin
         if( PS2K_DATA == 0) begin
          $display("PS2K_DATA ACK ");
          W_State = Write_finish;
         end
         else begin
          $display("PS2K_DATA NO ACK ");
          Error = No_ACK_signal;
          W_State = Write_finish;
         end
        end
        else begin
         W_State = Write_ACK;
        end
                 end

      Write_finish: begin
                    if( PS2K_DATA == 1 && PS2K_CLK == 1 ) begin
         $display("Complete write PS2K DATA");
         BUSY = 0;
         Complete = 1;
         W_State = Write_start;
        end
        else begin
         W_State = Write_finish;
        end
                  end

         default: begin
                     W_State = Write_start;
                  end
      endcase
   end
      end
endmodule

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
五月天国产精品| 黑人精品欧美一区二区蜜桃| 成人午夜在线免费| 亚洲www啪成人一区二区麻豆| 欧美精品一区二区三区在线播放| 色综合天天狠狠| 国产一区二区精品久久| 亚洲大片一区二区三区| 国产精品日产欧美久久久久| 91精品国产入口| 91国产免费观看| 床上的激情91.| 激情欧美日韩一区二区| 婷婷中文字幕一区三区| 亚洲欧美日韩国产综合在线| 久久久国产一区二区三区四区小说| 欧美群妇大交群的观看方式| 99精品视频在线观看| 国产精品自在欧美一区| 美女精品一区二区| 亚洲第一av色| 亚洲免费视频中文字幕| 国产精品嫩草影院av蜜臀| 日韩美女视频在线| 91.麻豆视频| 欧美日韩电影一区| 色哟哟亚洲精品| 9i在线看片成人免费| 国产精品一级片在线观看| 久久精品国产精品亚洲综合| 石原莉奈一区二区三区在线观看| 一区二区三国产精华液| 免费成人美女在线观看.| 亚洲一区二区三区四区不卡| 一区二区三区在线影院| 亚洲精品视频免费看| 日韩理论片在线| 亚洲精品一二三区| 亚洲欧美一区二区三区极速播放| 中文字幕在线播放不卡一区| 国产精品蜜臀在线观看| 中文字幕一区二区三区蜜月| 中文字幕一区在线观看视频| 国产精品福利av| 国产精品高清亚洲| 日韩伦理免费电影| 亚洲激情五月婷婷| 亚洲bdsm女犯bdsm网站| 天天色综合成人网| 日本不卡123| 久久99精品国产麻豆婷婷| 国产一区二区三区免费看| 久久精品二区亚洲w码| 国内外成人在线| 国产美女精品在线| 成人在线综合网| 日本道色综合久久| 欧美精品一卡两卡| 精品国产自在久精品国产| 国产日韩精品视频一区| 1024国产精品| 天堂午夜影视日韩欧美一区二区| 热久久久久久久| 国产一区二区三区四| av在线免费不卡| 欧美日韩一区二区三区在线| 日韩精品一区二区三区视频在线观看 | 日韩一区二区三区av| 欧美一二三区在线观看| 久久久久久久综合色一本| 国产精品福利一区| 亚洲成人精品一区| 国内精品久久久久影院色| 99久久精品一区二区| 欧美三级在线视频| 久久亚洲综合色| 亚洲另类春色校园小说| 人人精品人人爱| 成人精品gif动图一区| 欧美日韩一本到| 久久精品一区四区| 亚洲国产欧美另类丝袜| 精品制服美女久久| 91蜜桃在线观看| 2023国产精华国产精品| 18成人在线视频| 精品一区二区三区日韩| 色综合一区二区三区| 日韩免费一区二区三区在线播放| 国产精品久久毛片av大全日韩| 五月婷婷综合在线| 不卡av在线网| 欧美成人一区二区| 亚洲综合丁香婷婷六月香| 国产一区二区不卡| 欧美日韩小视频| 国产精品久久久久婷婷二区次| 天堂影院一区二区| 一本色道久久加勒比精品| 精品国产乱子伦一区| 亚洲高清免费观看高清完整版在线观看| 国产精品自拍av| 7777精品伊人久久久大香线蕉 | 精品成人佐山爱一区二区| 亚洲精品福利视频网站| 国产电影精品久久禁18| 欧美一区二区三区思思人| 亚洲视频你懂的| 国产精品一区一区三区| 日韩亚洲电影在线| 亚洲一区二区三区四区五区中文 | 中文字幕一区在线观看视频| 精品亚洲成a人| 91麻豆精品国产91久久久使用方法 | 精品国产乱码久久| 日韩精彩视频在线观看| 欧美吻胸吃奶大尺度电影| 国产精品国产三级国产aⅴ中文| 经典三级视频一区| 欧美一区二区三区公司| 日韩专区一卡二卡| 欧美在线视频你懂得| 亚洲欧美日韩小说| caoporm超碰国产精品| 欧美激情综合网| 国产成人免费视频网站| 久久久噜噜噜久久中文字幕色伊伊| 丝袜a∨在线一区二区三区不卡| 欧美性色aⅴ视频一区日韩精品| 中文字幕在线不卡一区| 波多野结衣欧美| 国产精品美女久久久久久2018| 国产剧情一区在线| 国产性天天综合网| 懂色av噜噜一区二区三区av| 久久久综合激的五月天| 国产乱色国产精品免费视频| 久久久久成人黄色影片| 国产精品一区免费视频| 国产网站一区二区| 波多野结衣在线一区| 国产精品色噜噜| 色悠悠亚洲一区二区| 亚洲国产日韩av| 欧美一区二区三区思思人| 蜜桃av一区二区在线观看| 精品国产一区二区亚洲人成毛片| 麻豆精品蜜桃视频网站| 欧美精品一区二| 东方aⅴ免费观看久久av| 国产精品女上位| 色综合久久中文综合久久牛| 亚洲国产精品久久人人爱 | 精品入口麻豆88视频| 国产综合久久久久久鬼色| 国产婷婷色一区二区三区| 91在线无精精品入口| 亚洲一二三四区| 欧美一区二区三区视频| 国产在线视频一区二区三区| 国产精品无遮挡| 欧美日韩在线播放一区| 狠狠色狠狠色综合系列| 日韩理论电影院| 4hu四虎永久在线影院成人| 黄色成人免费在线| 亚洲人成小说网站色在线| 欧美日韩成人一区二区| 国产一区二区福利视频| 亚洲人吸女人奶水| 欧美一级生活片| 国产精品一二三在| 夜夜精品视频一区二区| 日韩精品一区二区在线| 99视频超级精品| 免费人成黄页网站在线一区二区| 国产人妖乱国产精品人妖| 欧美亚洲国产一区在线观看网站| 精品一区二区三区久久久| 国产精品不卡一区二区三区| 3d成人动漫网站| av综合在线播放| 久久99国产精品免费| 亚洲精品久久7777| xfplay精品久久| 欧美日本一区二区| 成人午夜电影小说| 免费精品视频最新在线| 亚洲美女屁股眼交| 久久影院电视剧免费观看| 欧美色精品天天在线观看视频| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 99国产精品国产精品久久| 免费国产亚洲视频| 亚洲在线视频免费观看| 国产日韩欧美综合在线| 日韩欧美精品三级| 欧美专区在线观看一区| 不卡的av网站| 国产麻豆精品theporn|