pengdan0905 发表于 2011-9-23 16:56:07

按键消抖实验

module lcd_button2(
                  clk,
                  rst,
                  led_d1,
                   led_d2,
                   led_d3,
                  sw1,
                  sw2,
                  sw3
            );//按键按下,数码管依次显示0-9
input clk;
input rst;
input sw1,sw2,sw3;
output led_d1,led_d2, led_d3;
                  

reg key_rst;
always @(posedge clk or negedge rst)
if(!rst)
   key_rst <= 3'b111;
else
   key_rst <= {sw3,sw2,sw1};

reg key_rst_r;
always @(posedge clk or negedge rst)
if(!rst)
   key_rst_r <= 3'b111;
else
   key_rst_r <= key_rst;
wire key_an = key_rst_r & (~key_rst);

reg cnt;

always @(posedge clk or negedge rst)
if(!rst)
   cnt <= 0;
else if(key_an) cnt <= 0;
else cnt <= cnt+1'b1;

reg low_sw;
always @(posedge clk or negedge rst)
if(!rst)
   low_sw <= 3'b111;
else if(cnt==20'hfffff)
   low_sw <= {sw3,sw2,sw1};
   
reg low_sw_r;

always @(posedge clk or negedge rst)
if(!rst)
   low_sw_r <= 3'b111;
else
   low_sw_r <= low_sw;
   
wire led_ctr =low_sw_r&(~low_sw);

reg d1;
reg d2;
reg d3;
always @(posedge clk or negedge rst)
if(!rst) begin
   d1 <= 1'b0;
   d2 <= 1'b0;
   d3 <= 1'b0;
   
end

else begin
   if(led_ctr) d1<=~d1;
   if(led_ctr) d2<=~d2;
   if(led_ctr) d3<=~d3;
end
   assign led_d3=d3?1'b1:1'b0;
   assign led_d2=d2?1'b1:1'b0;
   assign led_d1=d1?1'b1:1'b0;
   
endmodule

pengdan0905 发表于 2011-9-23 16:57:34

具体说明还未上,先贴程序

ok1246 发表于 2011-10-24 16:58:03

............................

至芯兴洪 发表于 2011-10-28 13:51:26

你写程序always 不加上begin--end吗,加上吧,风格问题 你要不加,有的时候很难知道哪是一块了
wire key_an = key_rst_r & (~key_rst);这种写发行吗,程序中不少啊
注意代码风格
页: [1]
查看完整版本: 按键消抖实验