首页 文章

VHDL按钮和LED

提问于
浏览
1

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 回答

  • 2

    Warning :我没有给你答案 . 我只是在"how it is done"处理你的问题)

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

    我希望LED在按下和释放按钮时转动并保持打开状态(再次按下时关闭)但我对如何完成此操作感到困惑 .

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

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

    希望这能为您提供解决方案的概述 .

相关问题