debouncing.vhd

来自「4*8矩阵键盘的驱动程序。QuartusII5.0编译通过!」· VHDL 代码 · 共 74 行

VHD
74
字号
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.ALL;
ENTITY DEBOUNCING IS
	PORT(
		clk, key:IN STD_LOGIC ;
		clr: IN	STD_LOGIC;
		dly_out, dif_out: OUT	STD_LOGIC);
END DEBOUNCING;
ARCHITECTURE a OF DEBOUNCING IS
	SIGNAL sample,dly,diff: STD_LOGIC;
BEGIN
free_counter:block
	signal QQ:std_logic_vector(4 downto 0);
	signal d0:std_logic;
begin
	process (CLR,clk)
	begin
	if clr='0' then
		d0<='0';
		QQ<=(OTHERS=>'0');
	ELSif clk'event and clk='1' then
		d0<=QQ(4);
		QQ<=QQ+1;
	end if;
	end process;
sample<=not(QQ(4) and (not d0));
end block free_counter;
debunce:block
	signal d0,d1,s,r:std_logic;
begin
	process(clk,clr)
	begin
	if clr='0' then
		dly<='0';
	elsif rising_edge(clk) then
		if sample='1' then
			d1<=d0;
			d0<=key;
			s<=d0 and d1;
			r<=not d0 and not d1;
			if s<='0' and r<='0' then
				dly<=dly;
			elsif s<='0' and r<='1' then
				dly<='0';
			elsif s<='1' and r<='0' then
				dly<='1';
			else
				dly<='0';
			end if;
		end if;
	end if;
	end process;
dly_out<=dly;
end block debunce;
differential:block
	signal d1,d0:std_logic;
begin
	process(clk,clr)
	begin
	if clr='0' then
		d0<='0';
		d1<='0';
	elsif rising_edge(clk) then
		d1<=d0;
		d0<=dly;
	end if;
		diff<=d0 and not d1;
	end process;
	dif_out<=diff;
end block differential;
END a;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?