我是 VHDL 新手。我为我的项目(一个计时器)制作了一个过程,其中包含两个按钮(M - 增量分钟和 S - 增量秒)。我需要消除它们的抖动。我熟悉去抖动过程,但我不知道如何在我的项目中实现它。[编辑] 我的问题是如何在我的项目中实现去抖动器?我只需要创建一个新流程吗?
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_unsigned.all;
use IEEE.STD_LOGIC_arith.all;
entity Timer is
port(start_stop,M,S : in std_logic; --Start/Stop , Minutes,Seconds
clk : in std_logic; -- clock 1MHz
s1,s2,m1,m2 : out std_logic_vector(3 downto 0)); --BCD representation for seconds and minutes
end Timer;
--}} End of automatically maintained section
architecture Timer of Timer is
begin
P0 : process(M,S,start_stop)
variable temp1,temp2,temp3,temp4 : std_logic_vector(3 downto 0);
variable carry_s,carry_m : std_logic;
begin
if(M = '1' and S = '1')
then
temp1 := "0000";
temp2 := "0000";
temp3 := "0000";
temp4 := "0000";
s1 <= temp1;
s2 <= temp2;
m1 <= temp3;
m2 <= temp4;
end if;--RESET when you press M and S
if(M = '0' and S = '1')
then
temp1 := temp1 + "0001";
if(temp1 = "1010")
then
temp1 := "0000";
carry_s := '1';
else
carry_s := '0';
end if;
if(carry_s = '1')
then
temp2 := temp2 + "0001";
if(temp2 = "0110")
then
temp2 := "0000";
carry_s := '0';
end if;
end if;
s1 <= temp1;
s2 <= temp2;
end if;-- Increment seconds when you press S
if(M = '1' and S = '0')
then
temp3 := temp3 + "0001";
if(temp3 = "1010")
then
temp3 := "0000";
carry_m := '1';
else
carry_m := '0';
end if;
if(carry_m = '1')
then
temp4 := temp4 + "0001";
if(temp4 = "0110")
then
temp4 := "0000";
carry_m := '0';
end if;
end if;
m1 <= temp3;
m2 <= temp4;
end if;-- Increment seconds when you press S
end process P0;
end Timer;