【问题标题】:VHDL Push Button & LEDVHDL 按钮和 LED
【发布时间】:2018-07-11 22:10:35
【问题描述】:

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;

【问题讨论】:

  • 您需要一个“一位内存元素”,通常是一个寄存器。 (寻找 VHDLregister)请注意,为了完美的操作,您可能需要添加一个反跳计数器。然后你需要一个计数器的时钟。
  • 如何熟悉自己?我希望你遵循某种教程。你所问的肯定是这样描述的。

标签: vhdl fpga


【解决方案1】:

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

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

我希望 LED 在按下和释放按钮时打开并保持亮起(再次按下时关闭),但我对如何做到这一点感到困惑。

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

一旦您知道如何检测按钮何时被按下和释放,您就必须简单地添加一个记忆元素,该元素会在每次满足您的条件时进行切换。现在,您将拥有一个内部变量来控制LED 的行为,而不是使用LED &lt;= not BUTTON(即LED &lt;= led_state)。这个内部变量可以通过对您的边缘检测“模块”敏感的process 进行控制。此外,此变量将确保您的 LED 状态仅在满足您的条件(即按下并释放按钮)时更改,而不是遵循 BUTTON 反转状态。

希望这能让您对解决方案有一个一般概述。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多