关于特权同学按键消抖的问题

2019-07-16 00:27发布

对按键消抖是设计思想已经理解了,但有一处纠结了很久,还是不解:
wire[2:0] key_an = key_rst_r & ( ~key_rst);
else if(key_an) cnt <=20'd0;
key_an不是三位位宽吗,那怎么判断其整体的大小呢?如key_an=110
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
创新cpu
2019-07-16 05:51
下面一段是用Verilog写的按钮去抖动,及按住不放间隔取值的描述,会不会对你有帮助?       
    对于按钮使用除了物理的抖动,还可能出现人按压按钮是手颤动,为了预防手颤动或按压时间过长的问题,也需要对按压动作取值控制一定的时间间隔。在计算物理抖动时,必须是没有取值的状态。按钮下压值为0。这里的设计使我们按住按钮不松手,就可以按照一定的间隔时间(大约1秒),连续取值。这种情况用在浏览按钮使用非常方便。按住左或右浏览按钮不松手,可以连续浏览缓冲区的内容。
        always@(posedge clk18)       
        //去抖动
        begin
            if (  SW[0]==1 && KEY[0]==0 && kz==0)          //有效键按下输入
               begin
                   Co  <= Co+1'b1;                                //有效按下按钮计时        
                   if (Co==10800 )  writ<=1;                        //越过抖动时间正确取值
                   else  
                      begin
                        writ <= 0;                                //取值延长一个节拍
                        if (Co[22]==1)                                //进入连续取值计时
                           begin
                            kz<=1;                              //不准取值标志
                            coo<=0;                        //开始间隔计时
                           end
                      end
              end
            else                                                                //没有按压按钮的情况:
              begin
                 Co<=0;
                 writ <= 0;
                 coo <= coo+1'b1;                        //为无效按压计时
                 if (coo[22]==1) kz <= 0;                //预备输入按钮按压
              end
       

一周热门 更多>