防抖小程序

2020-02-17 19:58发布

新手一枚,刚开始学FPGA,从学长那里拿来了一块开发板,可是他把例程全丢了,幸亏还给我留了一张原理图,哎哎哎。 这寒假就这么匆匆的来了,时间这么多,不能浪费啊,开始自学,废话不多说,上主题 。
用的是按键驱动LED,在网上找了几个程序,在此特地感谢特权同学给我提供了很多帮助,可是我还是觉得下面的这个防抖程序更简单。
`define ud #1
module ANTI_SHAKE(
                                  //input ports
                                  SYSCLK,
                                  RST_B,
                                  KEY_B,
                                  //output ports
                                  LED_B
                                                );
//****************************************
//input and output declaration
//****************************************
input                          SYSCLK;
input                          RST_B;
input                [3:0]     KEY_B;
output                [3:0]     LED_B;
//****************************************
//reg and wire declaration
//****************************************
wire                          SYSCLK;
wire                          RST_B;
wire                [3:0]     KEY_B;
reg                [3:0]     LED_B;
//****************************************
//reg and wire declaration in the  module
//****************************************
reg                [3:0]     LED_B_N;
reg                [19:0]    TIME_CNT;
wire                [19:0]    TIME_CNT_N;
reg                [3:0]     KEY_B_REG;
wire                [3:0]     KEY_B_REG_N;
wire                [3:0]     PRESS;

//counter
always        @        (posedge SYSCLK or negedge RST_B)
begin
        if(!RST_B)
                TIME_CNT        <=        `ud 20'h0;
        else
                TIME_CNT        <=        `ud TIME_CNT_N;
end
assign TIME_CNT_N        =        TIME_CNT+20'h1;

always        @        (posedge SYSCLK or negedge RST_B)
begin
        if(!RST_B)
                KEY_B_REG        <=        `ud 4'hf;
        else
                KEY_B_REG        <=        `ud KEY_B_REG_N;
end
assign KEY_B_REG_N = (TIME_CNT==20'hfffff)? KEY_B : KEY_B_REG;
assign PRESS = (KEY_B_REG)&(~KEY_B_REG_N);        //pulse edge detected method
//****************************************
//Logic about ANTI_SHAKE,LED control
//****************************************
always        @        (posedge SYSCLK or negedge RST_B)
begin
        if(!RST_B)
                LED_B        <=        `ud        4'hf;
        else
                LED_B        <=        `ud LED_B_N;
end
always        @        (*)
begin
        case (PRESS)
                4'b0001:        LED_B_N = {LED_B[3:1],(~LED_B[0])};
                4'b0010:        LED_B_N = {LED_B[3:2],(~LED_B[1]),LED_B[0]};
                4'b0100:        LED_B_N = {LED_B[3],(~LED_B[2]),LED_B[1:0]};
                4'b1000:        LED_B_N = {(~LED_B[3]),LED_B[2:0]};
                default:LED_B_N = LED_B;
        endcase
end
endmodule
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
风魔小象
1楼-- · 2020-02-17 22:52
在学校有寒假真幸福~
chenzhi658
2楼-- · 2020-02-17 23:05
 精彩回答 2  元偷偷看……
qq470373513
3楼-- · 2020-02-18 05:05
chenzhi658 发表于 2015-1-23 15:21
//counter
always        @        (posedge SYSCLK or negedge RST_B)
begin

额。我只是觉得这样比较好理解啊,还没想过这个问题呐
qq470373513
4楼-- · 2020-02-18 08:52
qq470373513 发表于 2015-1-29 22:23
额。我只是觉得这样比较好理解啊,还没想过这个问题呐

嗷,我刚仿真了一下,发现你的写法执行加一更快!但是占的资源都是一样的
你可以试一下。
我也是新手,可以相互学习
qq470373513
5楼-- · 2020-02-18 13:48
chenzhi658 发表于 2015-1-23 15:21
//counter
always        @        (posedge SYSCLK or negedge RST_B)
begin

嗷,我刚仿真了一下,发现你的写法执行加一更快!但是占的资源都是一样的
你可以试一下。
我也是新手,可以相互学习

一周热门 更多>