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

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

?? ps2_mouse_interface.v

?? 利用FPGA控制PS2
?? V
?? 第 1 頁 / 共 2 頁
字號:

    m1_rising_edge :
      begin
        rising_edge <= 1;
        m1_next_state <= m1_rising_wait;
      end

    m1_rising_wait :
      begin
        clean_clk <= 1;
        if (debounce_timer_done) m1_next_state <= m1_clk_h;
        else m1_next_state <= m1_rising_wait;
      end
    default : m1_next_state <= m1_clk_h;
  endcase
end


// State register
always @(posedge clk)
begin : m2_state_register
  if (!reset) m2_state <= m2_reset;
  else m2_state <= m2_next_state;
end

// State transition logic
always @(m2_state
         or q
         or falling_edge
         or rising_edge
         or watchdog_timer_done
         or bit_count
         or packet_good
         or ps2_data
         or clean_clk
         )
begin : m2_state_logic

  // Output signals default to this value, unless changed in a state condition.
  ps2_clk_hi_z <= 1;
  ps2_data_hi_z <= 1;
  error_no_ack <= 0;
  output_strobe <= 0;

  case (m2_state)
  
    m2_reset :    // After reset, sends command to mouse.
      begin
        m2_next_state <= m2_hold_clk_l;
      end

    m2_wait :
      begin
        if (falling_edge) m2_next_state <= m2_gather;
        else m2_next_state <= m2_wait;
      end

    m2_gather :
      begin
        if (watchdog_timer_done && (bit_count == `TOTAL_BITS))
          m2_next_state <= m2_verify;
        else if (watchdog_timer_done && (bit_count < `TOTAL_BITS))
          m2_next_state <= m2_hold_clk_l;
        else m2_next_state <= m2_gather;
      end

    m2_verify :
      begin
        if (packet_good) m2_next_state <= m2_use;
        else m2_next_state <= m2_wait;
      end

    m2_use :
      begin
        output_strobe <= 1;
        m2_next_state <= m2_wait;
      end

    // The following sequence of 9 states is designed to transmit the
    // "enable streaming mode" command to the mouse, and then await the
    // response from the mouse.  Upon completion of this operation, the
    // receive shift register contains 22 bits of data which are "invalid"
    // therefore, the m2_verify state will fail to validate the data, and
    // control will be passed into the m2_wait state once again (but the
    // mouse will then be enabled, and valid data packets will ensue whenever
    // there is activity on the mouse.)
    m2_hold_clk_l :
      begin
        ps2_clk_hi_z <= 0;   // This starts the watchdog timer!
        if (watchdog_timer_done && ~clean_clk) m2_next_state <= m2_data_low_1;
        else m2_next_state <= m2_hold_clk_l;
      end

    m2_data_low_1 :
      begin
        ps2_data_hi_z <= 0;  // Forms start bit, d[0] and d[1]
        if (rising_edge && (bit_count == 3))
          m2_next_state <= m2_data_high_1;
        else m2_next_state <= m2_data_low_1;
      end

    m2_data_high_1 :
      begin
        ps2_data_hi_z <= 1;  // Forms d[2]
        if (rising_edge && (bit_count == 4))
          m2_next_state <= m2_data_low_2;
        else m2_next_state <= m2_data_high_1;
      end

    m2_data_low_2 :
      begin
        ps2_data_hi_z <= 0;  // Forms d[3]
        if (rising_edge && (bit_count == 5))
          m2_next_state <= m2_data_high_2;
        else m2_next_state <= m2_data_low_2;
      end

    m2_data_high_2 :
      begin
        ps2_data_hi_z <= 1;  // Forms d[4],d[5],d[6],d[7]
        if (rising_edge && (bit_count == 9))
          m2_next_state <= m2_data_low_3;
        else m2_next_state <= m2_data_high_2;
      end

    m2_data_low_3 :
      begin
        ps2_data_hi_z <= 0;  // Forms parity bit
        if (rising_edge) m2_next_state <= m2_data_high_3;
        else m2_next_state <= m2_data_low_3;
      end

    m2_data_high_3 :
      begin
        ps2_data_hi_z <= 1;  // Allow mouse to pull low (ack pulse)
        if (falling_edge && ps2_data) m2_next_state <= m2_error_no_ack;
        else if (falling_edge && ~ps2_data)
          m2_next_state <= m2_await_response;
        else m2_next_state <= m2_data_high_3;
      end

    m2_error_no_ack :
      begin
        error_no_ack <= 1;
        m2_next_state <= m2_error_no_ack;
      end

    // In order to "cleanly" exit the setting of the mouse into "streaming"
    // data mode, the state machine should wait for a long enough time to
    // ensure the FA response is done being sent by the mouse.  Unfortunately,
    // this is tough to figure out, since the watchdog timeout might be longer
    // or shorter depending upon the user.  If the watchdog timeout is set to
    // a small enough value (less than about 560 usec?) then the bit_count
    // will get reset to zero by the watchdog before the FA response is
    // received.  In that case, bit_count will be 11.
    // If the bit_count is not reset by the watchdog, then the
    // total bit_count will be 22.
    // In either case, when this state is reached, the watchdog timer is still
    // running and it is best to let it expire before returning to normal
    // operation.  One easy way to do this is to check for the bit_count to
    // reach 22 (which it will always do when receiving a normal packet) and
    // then jump to "verify" which will always fail for that time.
    m2_await_response :
      begin
        if (bit_count == 22) m2_next_state <= m2_verify;
        else m2_next_state <= m2_await_response;
      end

    default : m2_next_state <= m2_wait;
  endcase
end



// State register
always @(posedge clk)
begin : m3_state_register
  if (!reset) m3_state <= m3_data_ready_ack;
  else m3_state <= m3_next_state;
end

// State transition logic
always @(m3_state or output_strobe or read)
begin : m3_state_logic
  case (m3_state)
    m3_data_ready_ack:
          begin
            data_ready <= 1'b0;
            if (output_strobe) m3_next_state <= m3_data_ready;
            else m3_next_state <= m3_data_ready_ack;
          end
    m3_data_ready:
          begin
            data_ready <= 1'b1;
            if (read) m3_next_state <= m3_data_ready_ack;
            else m3_next_state <= m3_data_ready;
          end
    default : m3_next_state <= m3_data_ready_ack;
  endcase
end

// This is the bit counter
always @(posedge clk)
begin
  if (!reset) bit_count <= 0;  // normal reset
  else if (falling_edge) bit_count <= bit_count + 1;
  else if (watchdog_timer_done) bit_count <= 0;  // rx watchdog timer reset
end

// This is the shift register
always @(posedge clk)
begin
  if (!reset) q <= 0;
  else if (falling_edge) q <= {ps2_data,q[`TOTAL_BITS-1:1]};
end

// This is the watchdog timer counter
// The watchdog timer is always "enabled" to operate.
always @(posedge clk)
begin
  if (!reset || rising_edge || falling_edge) watchdog_timer_count <= 0;
  else if (~watchdog_timer_done)
    watchdog_timer_count <= watchdog_timer_count + 1;
end
assign watchdog_timer_done = (watchdog_timer_count==WATCHDOG_TIMER_VALUE_PP-1);

// This is the debounce timer counter
always @(posedge clk)
begin
  if (!reset || falling_edge || rising_edge) debounce_timer_count <= 0;
//  else if (~debounce_timer_done)
  else debounce_timer_count <= debounce_timer_count + 1;
end
assign debounce_timer_done = (debounce_timer_count==DEBOUNCE_TIMER_VALUE_PP-1);

// This is the logic to verify that a received data packet is "valid"
// or good.
assign packet_good = (
                         (q[0]  == 0)
                      && (q[10] == 1)
                      && (q[11] == 0)
                      && (q[21] == 1)
                      && (q[22] == 0)
                      && (q[32] == 1)
                      && (q[9]  == ~^q[8:1])    // odd parity bit
                      && (q[20] == ~^q[19:12])  // odd parity bit
                      && (q[31] == ~^q[30:23])  // odd parity bit
                      );

// Output the special scan code flags, the scan code and the ascii
always @(posedge clk)
begin
  if (!reset)
  begin
    left_button <= 0;
    right_button <= 0;
    x_increment <= 0;
    y_increment <= 0;
  end
  else if (output_strobe)
  begin
    left_button <= q[1];
    right_button <= q[2];
    x_increment <= {q[5],q[19:12]};
    y_increment <= {q[6],q[30:23]};
  end
end


endmodule

//`undefine TOTAL_BITS

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久er99精品| 中文字幕一区二区三区av| 亚洲日本一区二区| 99国产精品视频免费观看| 国产欧美日韩亚州综合| 久久综合综合久久综合| 欧美日韩国产中文| 午夜伊人狠狠久久| 欧美日韩免费高清一区色橹橹| 曰韩精品一区二区| 色偷偷一区二区三区| 亚洲另类在线视频| 欧洲精品一区二区三区在线观看| 亚洲激情图片qvod| 91色九色蝌蚪| 亚洲图片自拍偷拍| 在线综合+亚洲+欧美中文字幕| 日韩黄色小视频| 日韩免费看的电影| 国产一二精品视频| 最新国产精品久久精品| 99久久er热在这里只有精品15| 一区二区三区国产精华| 欧美在线不卡一区| 蜜臀av性久久久久蜜臀aⅴ | 亚洲国产成人午夜在线一区| 成人自拍视频在线观看| 一区二区三区免费在线观看| 欧美日韩电影在线| 蜜桃av噜噜一区| 欧美激情中文不卡| 欧美日韩中文另类| 国产精品18久久久久| 洋洋成人永久网站入口| 欧美va在线播放| 91色porny在线视频| 久久疯狂做爰流白浆xx| 亚洲免费在线播放| 久久久久久一级片| 欧美视频在线一区二区三区| 国产精品自在欧美一区| 日一区二区三区| 亚洲伦理在线免费看| 久久免费美女视频| 欧美在线看片a免费观看| 成熟亚洲日本毛茸茸凸凹| 美腿丝袜亚洲一区| 亚洲国产日韩一区二区| 国产精品视频一二三| 欧美大白屁股肥臀xxxxxx| 日本道在线观看一区二区| 国产电影精品久久禁18| 蜜臂av日日欢夜夜爽一区| 亚洲一区二区三区在线| 一区二区三区在线观看网站| 国产精品乱人伦中文| 久久久久9999亚洲精品| 欧美一卡二卡在线观看| 欧美日产在线观看| 色婷婷久久一区二区三区麻豆| 国产99精品视频| 成人免费毛片高清视频| 国产成人av自拍| 国产夫妻精品视频| 国产成人av电影在线观看| 国产老肥熟一区二区三区| 麻豆一区二区在线| 久久se精品一区精品二区| 看国产成人h片视频| 寂寞少妇一区二区三区| 国内精品免费**视频| 国产一区二区在线免费观看| 国产成人午夜精品影院观看视频 | 91精品国产91久久久久久一区二区 | 亚洲欧洲av一区二区三区久久| 国产精品国产三级国产aⅴ入口| 亚洲欧洲一区二区三区| 亚洲一区在线看| 日韩在线一区二区三区| 国产最新精品免费| 91亚洲国产成人精品一区二区三 | 欧美精品一区二区三区久久久| 精品第一国产综合精品aⅴ| 欧美极品美女视频| 一区二区三区高清在线| 日韩电影在线一区二区| 激情偷乱视频一区二区三区| 成人午夜碰碰视频| 精品视频在线视频| 2023国产精品视频| 亚洲综合一区二区| 欧美主播一区二区三区| 欧美精品一卡二卡| 国产主播一区二区| 欧洲精品在线观看| 国产欧美一区二区精品仙草咪 | 色呦呦一区二区三区| 亚洲精品在线观看视频| 夜夜操天天操亚洲| 国产精品一区二区免费不卡 | 国产精品进线69影院| 免费精品99久久国产综合精品| 成人av网站在线观看| 欧美xxxxx牲另类人与| 亚洲午夜成aⅴ人片| 国产成人福利片| 日韩欧美中文一区| 亚洲国产一区在线观看| 94-欧美-setu| 日本一区二区免费在线观看视频 | 麻豆视频一区二区| 在线观看91精品国产麻豆| 亚洲伦在线观看| 成人av免费在线观看| 久久综合久久鬼色中文字| 蜜臀久久99精品久久久久宅男| 91极品美女在线| 亚洲免费观看高清完整版在线观看| 国产91对白在线观看九色| 久久久无码精品亚洲日韩按摩| 免费精品99久久国产综合精品| 国产精品久久久久毛片软件| 天堂午夜影视日韩欧美一区二区| 欧亚一区二区三区| 亚洲第四色夜色| 91精品国产免费| 久久99精品久久久久久久久久久久 | 蜜桃视频一区二区三区在线观看| 欧美久久一二区| 另类小说图片综合网| 日韩视频在线你懂得| 久久99精品国产.久久久久| 欧美成人免费网站| 成人一区二区三区中文字幕| 国产精品久久久久久久久免费丝袜 | 成人综合婷婷国产精品久久蜜臀 | 精品一区中文字幕| 国产夜色精品一区二区av| 91网站视频在线观看| 亚洲一区二区欧美| 日韩午夜在线播放| 国产不卡一区视频| 亚洲综合色区另类av| 日韩欧美在线不卡| 国产69精品久久久久777| 亚洲精品免费在线| 精品国产免费久久| 94色蜜桃网一区二区三区| 蜜桃传媒麻豆第一区在线观看| 国产日韩亚洲欧美综合| 欧洲人成人精品| 国产乱子伦视频一区二区三区 | av高清久久久| 老司机免费视频一区二区三区| 中文字幕亚洲一区二区av在线| 欧美一级电影网站| 色综合天天综合| 国产精品一区专区| 日韩在线a电影| 亚洲人妖av一区二区| 久久中文娱乐网| 欧美高清www午色夜在线视频| 成人激情动漫在线观看| 久久91精品久久久久久秒播| 亚洲免费av高清| 国产精品午夜春色av| 精品电影一区二区| 4hu四虎永久在线影院成人| 色综合中文字幕国产| 国产九色精品成人porny| 日韩激情视频在线观看| 亚洲一区二区三区四区不卡 | 粉嫩一区二区三区性色av| 久久成人av少妇免费| 秋霞av亚洲一区二区三| 亚洲免费观看高清完整版在线| 国产午夜精品理论片a级大结局| 日韩欧美国产成人一区二区| 91精品国产入口| 91精品国产麻豆| 欧美一区永久视频免费观看| 欧美日韩成人一区二区| 欧美精品xxxxbbbb| 欧美一区在线视频| 911国产精品| 欧美成人福利视频| 久久久久国产精品麻豆ai换脸| 亚洲精品一区在线观看| 久久精品亚洲精品国产欧美kt∨| 精品国产91洋老外米糕| 久久综合九色综合97婷婷| 中文一区在线播放| 亚洲激情在线播放| 免费不卡在线观看| 国产麻豆91精品| 色偷偷久久一区二区三区| 欧美另类久久久品| 国产亚洲欧美激情| 一区二区三区四区蜜桃 | 精品视频一区二区三区免费|