Forum Discussion
Altera_Forum
Honored Contributor
18 years agoHi,
Heres a (4) switch debouncer written in AHDL quite like mentioned above: Hope it works for you - it certainly works for me. Peter ------------------------------------------------------------------- SUBDESIGN debounce ( clk : INPUT; key_pressed[3..0] : INPUT; pulse[3..0] : OUTPUT; ) VARIABLE count_reg0[20..0] : DFF; at_zero0 : NODE; count_reg1[20..0] : DFF; at_zero1 : NODE; count_reg2[20..0] : DFF; at_zero2 : NODE; count_reg3[20..0] : DFF; at_zero3 : NODE; BEGIN % Preset to 255 when key bounces or is not % % pressed. Decrement when key is pressed. % %-0---% count_reg0[].clk = clk; count_reg0[].prn = not key_pressed[0]; count_reg0[].d = count_reg0[].q - (00000,!at_zero0); % Emit single pulse when counter reaches 1. % pulse[0] = count_reg0[].q == h"00001"; % Don't let counter decrement below zero. % at_zero0 = count_reg0[].q == h"00000"; %-1---% count_reg1[].clk = clk; count_reg1[].prn = not key_pressed[1]; count_reg1[].d = count_reg1[].q - (00000,!at_zero1); % Emit single pulse when counter reaches 1. % pulse[1] = count_reg1[].q == h"00001"; % Don't let counter decrement below zero. % at_zero1 = count_reg1[].q == h"00000"; %-2---% count_reg2[].clk = clk; count_reg2[].prn = not key_pressed[2]; count_reg2[].d = count_reg2[].q - (00000,!at_zero2); % Emit single pulse when counter reaches 1. % pulse[2] = count_reg2[].q == h"00001"; % Don't let counter decrement below zero. % at_zero2 = count_reg2[].q == h"00000"; %-3--% count_reg3[].clk = clk; count_reg3[].prn = not key_pressed[3]; count_reg3[].d = count_reg3[].q - (00000,!at_zero3); % Emit single pulse when counter reaches 1. % pulse[3] = count_reg3[].q == h"00001"; % Don't let counter decrement below zero. % at_zero3 = count_reg3[].q == h"00000"; END;