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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1982|回复: 1

[求助] verilog 消抖实验,单独的模块能实现消抖,别的模块调用时没法实现

[复制链接]
发表于 2014-12-9 18:00:54 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 wlmnzf 于 2014-12-9 18:08 编辑

实现一个消抖模块,并通过调用它来达到按一个按钮就亮一个led灯

代码如下,前面一个是直接在消抖模块中控制led(成功),后一个是在别的模块中调用消抖模块,(失败)






  1. module xiaodou(pinIn,clr,clk,h2lSig,l2hSig,cnt,out);
  2.     input pinIn;
  3.          input clr;
  4.          input clk;
  5.          output reg h2lSig;
  6.          output reg l2hSig;
  7.     reg stateNow;//当前状态
  8.     reg stateNext;//检测后的状态
  9.     output reg [10:0] cnt;
  10.          output reg [7:0] out;

  11.             
  12.     always @( posedge clk or posedge clr)
  13.         if ( clr )
  14.                 begin
  15.                       stateNow<=0;//与实验要求不同,这里值为零
  16.                       stateNext<=0;
  17.                       h2lSig<=0; //松开
  18.                       l2hSig<=0;//按下
  19.                     cnt <= 0;
  20.                  end
  21.         else
  22.              begin
  23.                    if(stateNow==0)
  24.                            begin
  25.                        if(pinIn==1)//按下
  26.                            begin
  27.                            stateNext<=1;
  28.                          if(cnt<500) cnt <= cnt+1;
  29.                             else  
  30.                                 begin
  31.     case(out)
  32. 8'b00000000:out<=8'b10000000;
  33. 8'b10000000:out<=8'b11000000;
  34. 8'b11000000:out<=8'b11100000;
  35. 8'b11100000:out<=8'b11110000;
  36. 8'b11110000:out<=8'b11111000;
  37. 8'b11111000:out<=8'b11111100;
  38. 8'b11111100:out<=8'b11111110;
  39. 8'b11111110:out<=8'b11111111;
  40. 8'b11111111:out<=8'b10000000;
  41. default:out<=8'b00000000;
  42. endcase
  43.                           l2hSig<=1;
  44.                           h2lSig<=0;
  45.                           stateNow<=1;
  46.                            cnt<=0;
  47.                            end
  48.                       end
  49.                        else  
  50.                            begin
  51.                               stateNext<=0;
  52.                                cnt<=0;
  53.                            end
  54.                       end
  55.           else //if(stateNow==1)
  56.                 begin
  57.               if(pinIn==0)   //松开
  58.                       begin
  59.                           stateNext<=0;
  60.                           if(cnt<500) cnt <= cnt+1;
  61.                           else
  62.                              begin
  63.                                 l2hSig<=0;
  64.                                 h2lSig<=1;
  65.                                stateNow<=0;
  66.                                cnt<=0;
  67.                            end
  68.                       end
  69.                else
  70.                 begin
  71.                    cnt<=0;
  72.                   stateNext<=1;
  73.                end
  74.                 end
  75.    end        
  76. endmodule


复制代码







  1. module wlmALL(clr,clk,in,out,h2lSig,l2hSig);
  2. input in;
  3. reg cnt;
  4. output reg [7:0]out=8'b00000000;
  5. input clr;
  6. input clk;
  7. reg [10:0] i;
  8. //reg [7:0] tmp=8'b00000000;
  9. reg flag;
  10. output  h2lSig;
  11. output  l2hSig;

  12. xiaodou XD(
  13.   .pinIn  (in),
  14.   .clr  (clr),
  15.   .clk  (clk),
  16.   .h2lSig(h2lSig),
  17.   .l2hSig(l2hSig)
  18. );
  19. always @(l2hSig)
  20. if(l2hSig==1)
  21. begin
  22. case(out)
  23. 8'b00000000:out<=8'b10000000;
  24. 8'b10000000:out<=8'b11000000;
  25. 8'b11000000:out<=8'b11100000;
  26. 8'b11100000:out<=8'b11110000;
  27. 8'b11110000:out<=8'b11111000;
  28. 8'b11111000:out<=8'b11111100;
  29. 8'b11111100:out<=8'b11111110;
  30. 8'b11111110:out<=8'b11111111;
  31. 8'b11111111:out<=8'b10000000;
  32. default:out<=8'b00000000;
  33. endcase
  34. end
  35. endmodule




  36. module xiaodou(pinIn,clr,clk,h2lSig,l2hSig);
  37.     input pinIn;
  38.          input clr;
  39.          input clk;
  40.          output reg h2lSig;
  41.          output reg l2hSig;
  42.     reg stateNow;//当前状态
  43.     reg stateNext;//检测后的状态
  44.     reg [20:0] cnt;

  45.             
  46.     always @( posedge clk or posedge clr)
  47.         if ( clr )
  48.             begin
  49.                     stateNow<=0;//与实验要求不同,这里值为零
  50.                     stateNext<=0;
  51.                     h2lSig<=0; //松开
  52.                     l2hSig<=0;//按下
  53.                     cnt <= 0;
  54.            end
  55.        else
  56.            begin
  57.               if(stateNow==0)
  58.                 begin
  59.                   if(pinIn==1)//按下
  60.                       begin
  61.                        stateNext<=1;
  62.                        if(cnt<70000) cnt <= cnt+1;
  63.                        else  
  64.                           begin
  65.                             l2hSig<=1;
  66.                             h2lSig<=0;
  67.                             stateNow<=1;
  68.                             cnt<=0;
  69.                           end
  70.                    end
  71.                   else  
  72.                     begin
  73.                        stateNext<=0;
  74.                        cnt<=0;
  75.                        end
  76.                      end
  77.          else //if(stateNow==1)
  78.                 begin
  79.                     if(pinIn==0)   //松开
  80.                       begin
  81.                          stateNext<=0;
  82.                          if(cnt<70000) cnt <= cnt+1;
  83.                           else
  84.                               begin
  85.                                    l2hSig<=0;
  86.                                   h2lSig<=1;
  87.                                    stateNow<=0;
  88.                                    cnt<=0;
  89.                               end
  90.                       end
  91.                     else
  92.                        begin
  93.                            cnt<=0;
  94.                            stateNext<=1;
  95.                       end
  96.                 end
  97.   end        
  98. endmodule



复制代码

 楼主| 发表于 2014-12-10 18:36:57 | 显示全部楼层
求一点思路
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

X

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

GMT+8, 2025-6-24 05:18 , Processed in 0.018994 second(s), 11 queries , Gzip On, MemCached On.

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