zoukankan      html  css  js  c++  java
  • verilog 状态机键盘扫描

    module key (clk,rst,key_up,led);
    input clk,rst,key_up;
    output reg [3:0] led;
    parameter T10ms=31'd2_000_00;
    reg clk_state;
    reg [31:0] cnt;
    parameter state_init=2'b00,state_click=2'b01,state_check=2'b10;
    reg [1:0] current_state,next_state;
    reg [3:0] num_click,num_check,led_on;
    always @ (posedge clk or negedge rst)
    if(!rst)
     begin
      cnt<=0;
      clk_state<=0;
     end
          else if(cnt==T10ms)
           begin
            cnt<=0;
            clk_state<=~clk_state;
           end
               else
                cnt<=cnt+1'b1;
    always @ (posedge clk_state or negedge rst)
    if(!rst)
     current_state<=state_init;
            else 
             current_state<=next_state;
    always @ (posedge clk_state)
    begin
     case(current_state)
     state_init: if(key_up) next_state<=state_init;
         else begin next_state<=state_click; num_click<=0;end
     state_click: if(key_up) begin next_state<=state_init;num_click<=0; end
         else begin num_click<=num_click+1;
           if(num_click==10)
             if(key_up)
               begin
               num_click<=0;
               next_state<=state_init;
               end
               else begin next_state<=state_check; num_check<=0;end
               end 
     state_check: if(key_up) begin next_state<=state_init; num_check<=0;led_on<=0;end
                             else begin num_check<=num_check+1;
             if(num_check==10)
             begin
             if(key_up)
              begin
               next_state<=state_init;
               num_check<=0;
              end
              else
              begin
              next_state<=state_check;
              num_check<=0;
              led_on<=led_on+1;
              end
             end end
    endcase
    end
    always @ (current_state)
    begin
    led<=4'b1111;
    case (current_state)
    state_init: led<=4'b0101;
    state_click: led<=4'b0111;
    state_check: led<=led_on;
    endcase
    end
     
    endmodule

  • 相关阅读:
    Servlet的几种跳转(转)
    Java String.split()用法小结(转)
    表单数据提交的方法
    gedit文本编辑器乱码解决办法
    J-Link烧写bootloader到mini2440的Nor Flash
    虚拟机安装Fedora10系统遇到异常
    linux系统忘记root密码怎么办?
    编译busybox时出错及解决方案
    source insight代码查看器如何自定义添加文件类型
    < Objective-C >文件操作-NSFileHandle
  • 原文地址:https://www.cnblogs.com/luxiaolai/p/5255737.html
Copyright © 2011-2022 走看看