在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2532|回复: 9

[求助] 按键消抖 没有输出 求教

[复制链接]
发表于 2011-10-19 22:44:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
按键消抖 代码 为什么没有输出呢
module sw_debounce(clk,res_n,sw1_n,sw2_n,sw3_n,led1_n,led2_n,led3_n);
  input clk,res_n;            
  input sw1_n,sw2_n,sw3_n;     
  output led1_n,led2_n,led3_n;
reg[2:0] key_res;            
   always @(posedge clk or negedge res_n)  
     if(!res_n) key_res<=3'b111;
     else key_res<={sw3_n,sw2_n,sw1_n};
reg[2:0] key_res_r;         
    always @(posedge clk or negedge res_n)
       if(!res_n) key_res_r<=3'b111;
       else key_res_r<=key_res;     
wire [2:0] key_an=key_res_r&(~key_res);
reg [19:0] cnt;
    always @(posedge clk or negedge res_n)
    if(!res_n) cnt<=20'd0;
    else if(key_an) cnt<=20'd0;
    else cnt<=cnt+1'b1;
reg[2:0] low_sw;
   always @(posedge clk or negedge res_n)
    if(!res_n) low_sw<=3'b111;
    else if(cnt==20'hfffff) low_sw<={sw3_n,sw2_n,sw1_n};
reg[2:0] low_sw_r;
  always @(posedge clk or negedge res_n)
   if(!res_n) low_sw_r<=3'b111;
   else  low_sw_r<=low_sw;   
  wire[2:0] led_ctrl=low_sw_r&(~low_sw);
  reg d1,d2,d3;
  always @(posedge clk or negedge res_n)
  if(!res_n)
   begin
    d1<=0;
    d2<=0;
    d3<=0;
   end
  else
      begin        
      if(led_ctrl[0])d1<=~d1;
      if(led_ctrl[1])d2<=~d2;
      if(led_ctrl[2])d3<=~d3;
      end
assign led3=d1;
assign led2=d2;
assign led1=d3;   
endmodule

  //`timescale 1ns/1ns
//`include "sw_debounce.v "
module sw_debounce_tb;
  reg sw1,sw2,sw3;
  reg clk;
  reg res;
  wire led1,led2,led3;
  initial
    begin
       clk=0;
       res=0;
       #100 res=1;
       #100 res=0;
       #100 res=1;
    end
  initial
   begin
     sw1=0;sw2=0;sw3=0;
     #100 sw1=0;sw2=0;sw3=1;
     #100 sw1=0;sw2=1;sw3=0;
     #100 sw1=0;sw2=1;sw3=1;
     #100 sw1=1;sw2=0;sw3=0;
     #100 sw1=1;sw2=0;sw3=1;
     #100 sw1=1;sw2=1;sw3=0;
     #100 sw1=1;sw2=1;sw3=1;
     #10000 $stop;
   end
  always #20 clk=~clk;
  sw_debounce sw_debounce_tb(clk,res,sw1,sw2,sw3,led1,led2,led3);
endmodule
为什么仿真的时候没有输出呢?哪位高手指点一下!谢谢!
发表于 2011-10-19 23:55:26 | 显示全部楼层
你的输出列表中为:led1_n,但你在assign是定义的是led1;所以不会看到输出吧
发表于 2011-10-20 09:02:18 | 显示全部楼层
额。。。。。。。
 楼主| 发表于 2011-10-20 10:31:04 | 显示全部楼层
回复 2# qq847941010


   程序有木有问题,改了,还是没有输出啊?
发表于 2011-10-20 11:08:00 | 显示全部楼层
else if(key_an) cnt<=20'd0;

key_an是wire[2:0],可以这样做条件判断吗?试着分开判断呢?
发表于 2011-10-20 13:21:49 | 显示全部楼层
你把l错误的log文件贴出来,看看
 楼主| 发表于 2011-10-20 18:54:12 | 显示全部楼层
回复 5# atomdust


    特权同学 好像就是这样写的。 条件的的意思是: 零为假,非零为真吧?
发表于 2011-10-21 10:23:54 | 显示全部楼层




    当信号为3'b000时为假,只要有一个bit为1就位真?。。。。
发表于 2014-5-12 22:32:39 | 显示全部楼层
按键消抖时长为20‘hffffff个CLK,tb中整个测试周围为10000个CLK,应该不会有输出吧
发表于 2014-5-13 15:22:36 | 显示全部楼层
你知道特权的思路么。利用抓沿来产生按键按下是的脉冲,利用这个脉冲启动计数器计数,进行延时操作,一旦计数延时达到20ms时,再利用再利用抓沿产生脉冲启动输出控制。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-22 09:36 , Processed in 0.026424 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表