VHDL按钮和LED

时间:2018-07-09 16:42:34

标签: vhdl fpga

VHDL的新手,使自己熟悉了一切。

按下按钮时,我让我的FPGA打开LED(下面的代码),但是必须按住按钮才能使LED保持点亮状态。我希望当按下和释放按钮时LED会保持打开状态(并在再次按下时会熄灭),但是我对执行的方法感到困惑。

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
 entity ButtonLED is Port (BUTTON: in  STD_LOGIC:='1';
                                    LED : out  STD_LOGIC:='0');
end ButtonLED;

architecture Behavioral of ButtonLED is
begin

LED <= not BUTTON;

end Behavioral;

1 个答案:

答案 0 :(得分:2)

警告:我没有给您答案。我只是在回答您有关“如何完成”的问题)

语句LED <= not BUTTON定义了LED通过反向元素直接直接连接到BUTTON。因此,您的LED将始终遵循BUTTON的相反电流状态。如果BUTTON处于高逻辑电平,则LED将被设置为低逻辑电平,反之亦然。

  

我希望在按下和释放按钮时LED能够保持打开状态(并在再次按下时熄灭),但是我对操作方法感到困惑。

要实现此功能,您必须能够(1)检测何时按下和释放按钮,以及(2)“保存” LED的当前状态。检测按钮“运动”仅是检测从高到低以及从低到高的状态变化。如评论中所述,在边缘检测器和按钮之间插入去抖机制也很重要。由于FPGA按钮非常敏感,因此去抖动器将确保您不会将毛刺/噪声解释为实际的按键。我建议您自己检查一下,实现带有和不带有去抖器的版本。当您的硬件未过滤输入时,根据您按按钮的方式,LED可能会多次切换。

一旦您知道如何检测按下和释放按钮的时间,就只需添加一个存储元件,该存储元件在每次满足条件时都会切换。现在,您将拥有一个内部变量来控制LED <= not BUTTON的行为(即LED),而不是使用LED <= led_state。可以通过对边缘检测“模块”敏感的process来控制此内部变量。此外,此变量将确保您的LED状态仅在满足条件(即按下并释放按钮)时才更改,而不是遵循BUTTON反向状态。

希望这对您的解决方案有一个概述概述。