Я занимаюсь разработкой детектора клавиш переключения регистра. Я написал тестовый стенд.Тест показал, что моя реализация была неправильной.
Вот симуляция в ModelSim.
Красная линия указывает НЕ УКАЗАНА.Такое поведение происходило только дважды.
Что меня озадачило: почему такой большой разрыв между этими двумя ценностями?Если вы посмотрите на испытательный стенд, в 3-й и 4-й процедурах используется формат, используемый для 1-го и 2-го.
Здесь находится тестовый стенд: http://pastebin.com/BJVFFgGr
Код детектораздесь: http://pastebin.com/di42FLqT
Как видите.У меня есть два состояния в моем дизайне.Приемник PS2 будет фильтровать и генерировать чистый 8-битный код make при нажатии (или отпускании) клавиши.Код разрыва - просто F0, сопровождаемый кодом make только что выпущенного ключа.Мой конечный автомат использует два дополнительных бита, чтобы отслеживать, какая клавиша Shift была нажата.
Я прошел отладку, и когда мы ввели 3-е тестовые значения, SHIFT = U вместо 1 от предыдущего значения.
-- release left shift
hex <= "11110000";
wait for 5 ns;
clk <= NOT clk;
wait for 50 ns;
clk <= NOT clk;
wait for 50 ns;
hex <= "00010010"; <----- when I am here shift is already U
wait for 5 ns;
clk <= NOT clk;
wait for 50 ns;
clk <= NOT clk;
wait for 50 ns;
if (shift /= '0')then
error <= '1';
end if;
left_pressed и right_pressed являются сигналами, а не переменными.Таким образом, они должны иметь значение в любом случае.Если один из них изменится, соединение с сигналом сдвига будет обновлено автоматически.
Может кто-нибудь помочь мне?Спасибо.
Спасибо.