多个按钮

时间:2014-01-17 04:25:01

标签: button vhdl clock xilinx

如何更改此代码以使其与多个(2,3或4)按钮配合使用?

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;

我想让几个按钮工作,并按下'state'做一些工作。这部分代码仅适用于1个按钮。

由于

1 个答案:

答案 0 :(得分:1)

std_logic_vector类型可用于多个按钮。代码可能看起来 像:

constant BUTTONS        :  positive    := 4;                -- Number of buttons
subtype buttons_t       is std_logic_vector(1 to BUTTONS);                     -- Type for buttons
signal buttonsState     :  buttons_t;                       -- Input from buttons (remember to debounce)
signal lastButtonsState :  buttons_t   := (others => '0');  -- Last state
...  -- End of declarations, and start of concurrent code (processes etc.)
process (clk)
  variable buttonsRise_v : buttons_t;  -- Support variable to make writing easier
begin
  if rising_edge(clk) then
    buttonsRise_v := buttonsState and (not lastButtonsState);  -- Make '1' for each button going 0 to 1
    if buttonsRise_v(1) = '1' then  -- Detect button 1 going 0 to 1
      -- Do some work...
    end if;
    -- More code reacting on buttons...
    lastButtonsState <= buttonsState;
  end if;
end process;