gpt4 book ai didi

VHDL - 增加按钮事件的寄存器值

转载 作者:行者123 更新时间:2023-12-03 23:55:48 25 4
gpt4 key购买 nike

我对 VHDL 非常陌生,正在尝试弄清楚如何在 Altera Cyclone II 上做一些相当基本的事情。 FPGA 有四个按钮——其中两个需要编程来增加和减少选定的寄存器 (0-F),两个需要编程来增加和减少将在的值(从 00 到 FF)那个寄存器。这是我到目前为止所拥有的:

entity raminfr is
port (
clk : in std_logic;
we : in std_logic;
a : in unsigned(3 downto 0);
di : in unsigned(7 downto 0);
do : out unsigned(7 downto 0)
);
end raminfr;

architecture rtl of raminfr is
type ram_type is array (0 to 15) of unsigned(7 downto 0);
signal RAM : ram_type;
signal read_a : unsigned(3 downto 0);

begin

process (clk)
begin
if rising_edge(clk) then
if we = '1' then
RAM(to_integer(a)) <= di;
end if;
read_a <= a;
end if;
end process;

do <= RAM(to_integer(read_a));

end rtl;

有人可以提供一些关于如何对按钮进行编程的基本示例代码吗?

最佳答案

您可以在时钟 process 中进行简单的边缘检测,然后对上升沿使用react。例如:

signal lastButtonState    : std_logic := '0';

process(clk)
begin
if(rising_edge(clk)) then
if(buttonState = '1' and lastButtonState = '0') then --assuming active-high
--Rising edge - do some work...
end if;
lastButtonState <= buttonState;
end if;
end process;

为了让一切正常工作,您需要确保您的按钮以某种方式去抖动。许多开发板都有一个硬件 RC 电路,否则你需要在你的代码中做到这一点(虽然这并不难 - 网上应该有很多这样的例子)。

关于VHDL - 增加按钮事件的寄存器值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14493625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com