您的位置:电子发烧友网 > 电子技术应用 > 实验中心 > 编程实验 >
BJ-EPM CPLD开发板:VHDL入门例程2(2)
2012年05月16日 10:52 来源:本站整理 作者:秩名 我要评论(0)
process(Clk,Rst_n)
begin
if (Rst_n = '0') then --异步复位
key_inr1 <= "111";
elsif (Clk'event AND Clk = '1') then --时钟上升沿
key_inr1 <= key_inr0; --锁存上一拍键值
end if;
end process;
--按键边沿检测
key_posedge <= (NOT key_inr1) AND key_inr0; --按键上升沿标志位,高电平有效一个时钟周期
key_negedge <= key_inr1 AND (NOT key_inr0); --按键下降沿标志位,高电平有效一个时钟周期
--20ms计数
process(Clk,Rst_n)
begin
if (Rst_n = '0') then --异步复位
cnt20ms <= x"00000";
elsif (Clk'event AND Clk = '1') then --时钟上升沿
if ((key_posedge /= "000") OR (key_negedge /= "000")) then --键值边沿标志位复位计数器,此处理目的为消除抖动
cnt20ms <= x"00000";
elsif (cnt20ms < 10#1000000#) then --20ms计数
cnt20ms <= cnt20ms+1;
else
cnt20ms <= x"00000";
end if;
end if;
end process;
--消抖后键值锁存
process(Clk,Rst_n)
begin
if (Rst_n = '0') then --异步复位
key_value <= "111";
elsif (Clk'event AND Clk = '1') then --时钟上升沿
if (cnt20ms = 10#1000000#) then --计数值到20ms
key_value <= key_inr1; --锁存键值
end if;
end if;
end process;
本文导航
- 第 1 页:BJ-EPM CPLD开发板:VHDL入门例程2(1)
- 第 2 页:第二拍按键锁存
- 第 3 页:消抖后第一拍按键锁存
标签: