2012-05-08 5 views
0

Я пишу код vhdl для игры в теннис для спартанского стартового набора 3E. Я хочу управлять игровой панелью своей клавиатурой PS2. Для этого мне нужно генерировать сигналы вверх и вниз от полученного кода клавиатуры.Как фильтровать события клавиатуры?

Вот пример кода

-- Instantiate key_board controller 
    my_keyobard : entity work.ps2_key(Behavioral) 
        port map(ps2_clk => ps2_clk, ps2_data => ps2_data, clk => clk, 
        data_out => data); 

    process(data) 
    begin 
      case data is 
       when X"15" => up <= '1'; -- Q key for UP 
       when X"1C' => down <= '1'; -- A key for DOWN 
       when others => up <= '0'; down <= '0'; 
      end case; 
    end process; 

Но если я использую этот код кнопки вверх остается «1» ВЫСОКОЕ всегда, даже после того, как relesing клавишу Q на клавиатуре. Я хочу, чтобы сигнал оставался высоким до тех пор, пока я не задержу кнопку Q, если я отпустите его, тогда сигнал вверх должен вернуться к «0». В основном я хочу, чтобы мои клавиши клавиатуры функционировали как обычные кнопки. Если я нажимаю и удерживаю, он должен давать сигнал HIGH else, если он отпущен, он должен выдавать сигнал LOW.

ответ

0

others положения игнорируются синтеза (как правило, если вы не скажете им не)

process(data) 
    begin 
      up <= '0'; down <= '0'; 
      case data is 
       when X"15" => up <= '1'; -- Q key for UP 
       when X"1C" => down <= '1'; -- A key for DOWN 
      end case; 
    end process; 

Вы моделировали - он должен работать нормально в моделировании, как вы имели его.

0

Я считаю, что клавиатура PS2 Протокол отправляет командное слово, затем код клавиатуры при нажатии кнопки, затем два командных слова и код клавиатуры при отпускании. Вы имеете дело с этим в другом месте? Нам нужно узнать больше о вашем «Data out» с вашего контроллера клавиатуры. Задерживает ли он сигнал данных с клавиатуры? Если у вас есть сброс данных при отпускании ключа, ваш код должен работать по желанию.

Page 8 является то, что я говорю о http://www.cse.nd.edu/courses/cse20221/www/handouts/L21_%20PS2%20Keyboard.pdf

0

Протокол клавиатуры PS/2 является более сложным, чем это. Вам нужно будет реализовать декодер с сохранением состояния.

Вкратце:

  1. Когда ничего не происходит, как ps2_data и ps2_clk всегда '1'.
  2. В случае события клавиатура отправляет стартовый бит (0), бит данных один за другим, затем стоповый бит (1). Биты синхронизируются с ps2_clk.
  3. Когда клавиша нажата и удерживается, код сканирования отправляется повторно с определенным интервалом.
  4. Когда нажата клавиша, код 'F0', затем отправляется код сканирования (это немного сложнее для так называемых «расширенных» клавиш, которые содержат клавиши со стрелками).

См Xilinx Spartan-3E FPGA Starter Kit Board User Guide, "PS/2 Mouse/Keyboard Port" раздел и/или generic PS/2 electric protocol description (последний по существу повторяет прежний более подробно).

Смежные вопросы