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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

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

[讨论] 不同key控制不同LED亮灭,同样需求功能,请问第二种写法的优势是啥?

[复制链接]
发表于 2015-10-2 16:57:25 | 显示全部楼层 |阅读模式

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

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

x
第一个程序:
module KEY (
               // inputs:
                  clk,
                  rst,
                  PSW,
                  LED
             );

//===========================================================================
// PORT declarations
//===========================================================================
input clk;
input rst;
input [3:0] PSW;
output [3:0] LED;

//reg [15:0] timer1;
//reg [3:0] PSW_Status1;
//reg [3:0] PSW_Status2;
reg [3:0] PSW_OUT;


  always @(posedge clk or posedge rst)
    begin
      if (rst)

begin


PSW_OUT <= 4'b0000;

   end
      else

begin


PSW_OUT <= PSW;

end
    end

assign LED = PSW_OUT;

endmodule



第二个程序:
module KEY (
               // inputs:
                  clk,
                  rst,
                  PSW,
                  LED
             );

//===========================================================================
// PORT declarations
//===========================================================================
input clk;
input rst;
input [3:0] PSW;
output [3:0] LED;

reg [15:0] timer1;
reg [3:0] PSW_Status1;
reg [3:0] PSW_Status2;
reg [3:0] PSW_OUT;


  always @(posedge clk or posedge rst)
    begin
      if (rst)

begin
          PSW_Status1 <= 4'b0000;
          PSW_Status2 <= 4'b0000;



   end
      else

begin
          PSW_Status1 <= PSW;
          PSW_Status2 <= PSW_Status1;



end
    end


  always @(posedge clk or posedge rst)
    begin
      if (rst)
          timer1 <= 16'b0;
      else if (PSW_Status1[0] & ~PSW_Status2[0])          //rising edge detect
          timer1 <= 16'b0;
      else if (~PSW_Status1[0] & PSW_Status2[0])          //falling edge detect
          timer1 <= 16'b0;
      else if (timer1 != 50000)
   
          timer1 <= timer1 + 1;         
    end

  always @(posedge clk or posedge rst)
    begin
      if (rst)
          PSW_OUT <= 0;
      else if (PSW_Status1[0] & ~PSW_Status2[0])         //keep when rising edge
          PSW_OUT <= PSW_OUT;
      else if (PSW_Status1[0] & PSW_Status2[0])          //keep when failing edge
          PSW_OUT <= PSW_OUT;         
     else if(timer1 == 50000)
          PSW_OUT <= PSW;         
    end

assign LED = PSW_OUT;

endmodule


四个按键控制四个灯亮灭,都能实现功能,第二个程序优点是啥?
发表于 2015-10-3 11:53:53 | 显示全部楼层
第一个写法不稳定;
第二个写法有至少两个好处:一个是防抖动,一个是保证按下去的时间。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-12-26 21:06 , Processed in 0.024898 second(s), 9 queries , Gzip On, Redis On.

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