0
私はVHDLを初めて使っています。私は2つのボタン(M - 増分分とS - 増分秒)を意味する私のプロジェクト(タイマー)のためのプロセスを作った。私はそれらをデバウンスする必要があります。私はよく知られているデバウンスプロセスですが、私は自分のプロジェクトでそれをどのように実装するのか分かりません。 [編集] 私のプロジェクトでは、デバウザーをどのように実装するのですか?新しいプロセスを作成するだけでよいですか?VHDLプロセスの作成後にいくつかのボタンをデバウンスする方法は?
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;
よう
Timer
unit.Somethingの入力と出力は、だからあなたの実際の質問は何ですか?あなたが理解していないのは何ですか? –