BJ-EPM CPLD开发板:VHDL入门例程3(2)

2012年05月16日 11:01 来源:本站整理 作者:秩名 我要评论(0)

--第一拍按键锁存

  process(Clk,Rst_n)

  begin

  if (Rst_n = '0') then --异步复位

  key_inr0 <= "111";

  elsif (Clk'event AND Clk = '1') then --时钟上升沿

  key_inr0 <= Key_in; --锁存上一拍键值

  end if;

  end process;

  --第二拍按键锁存

  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;

  

上一页1234下一页

本文导航