VHDL: обнаружение нажатой клавиши клавиатуры PS / 2 (FPGA) - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь определить, когда нажимается кнопка на клавиатуре PS / 2 с VHDL. Проблема заключается в том, чтобы найти хорошее решение для сигнала, который удерживается при правильном коде Make-клавиатуры PS / 2.

Я пробовал:

  • Проверка, когда часы PS / 2 постоянно высокие.
  • Проверка, не изменился ли сдвиговый регистр.
  • Обнаружение кода make + break с большим регистром сдвига.

;

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity Keyboard_Drive is 
    Port  ( PS2_DAT, PS2_CLK, clk, rstn : in std_logic;
end entity; 


architecture rtl of Keyboard_Drive is 
    signal PS2_CLK2, PS2_CLK2_old, PS2_DAT2, detected_fall : std_logic;
    signal shiftreg: std_logic_vector (9 downto 0);
    signal pressed: std_logic := '0';
begin 

input_signals : process (clk) begin 
    if rising_edge (clk) then 
        -- get data
        PS2_DAT2 <= PS2_DAT;
        PS2_CLK2 <= PS2_CLK;
        PS2_CLK2_old <= PS2_CLK2;
    end if;
end process;

detected_fall <= (NOT PS2_CLK2) AND PS2_CLK2_old;

Key: process (clk, rstn) begin 
    if rstn = '0' then 
        shiftreg <= (others => '0');
    elsif rising_edge (clk) then
        -- assign shift
        if detected_fall = '1' then
            shiftreg (8 downto 0)   <= shiftreg (9 downto 1);
            shiftreg (9)            <= PS2_DAT2;
        end if;
    end if;
end process;
...