Я пытаюсь придумать простую клавиатуру 4x4 FSM в VHDL.Я гуглил и не могу найти примеров для начала, и что я имею, я не могу придумать, как протестировать его на тестовом стенде.Я использую ISE на Spartan-3E.
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_signed.all;
entity keypad is
port(
clk, reset: in std_logic;
kcol: in std_logic_vector(3 downto 0);
krow: out std_logic_vector(3 downto 0);
key_press: out std_logic_vector(7 downto 0);
valid: out std_logic
);
end keypad;
architecture arch of keypad is
type kstate_type is (idle1, start, wait1, done);
signal kstate_reg, kstate_next: kstate_type;
signal scan: std_logic_vector(3 downto 0);
signal res_col: std_logic_vector(3 downto 0);
begin
key_pressed_proc: process(clk,reset, kstate_reg, kcol)
begin
if reset = '0' then
krow <= (others=>'1');
scan <= "1110";
kstate_reg <= idle1;
kstate_next <= idle1;
res_col <= (others=>'1');
valid <= '0';
elsif clk'event and clk = '1' then
case kstate_reg is
when idle1 =>
valid <= '0';
if kcol /= "1111" then
kstate_next <= start;
end if;
when start =>
case scan is
when "1110" => scan <= "1101";
kstate_next <= wait1;
when "1101" => scan <= "1011";
kstate_next <= wait1;
when "1011" => scan <= "0111";
kstate_next <= wait1;
when "0111" =>
scan <= "1110";
krow <= (others=>'1');
kstate_next <= done;
key_press <= scan & res_col;
when others =>
end case;
when wait1 =>
krow <= scan;
if kcol(0) = '0' then
res_col <= "0111";
end if;
if kcol(1) = '0' then
res_col <= "1011";
end if;
if kcol(2) = '0' then
res_col <= "1101";
end if;
if kcol(3) = '0' then
res_col <= "1110";
end if;
kstate_next <= start;
when done =>
if kcol = "1111" then
valid <= '0';
key_press <= (others=>'0');
kstate_next <= idle1;
end if;
end case;
kstate_reg <= kstate_next;
end if;
end process;
end arch;
Имея риск походить на студента, пытающегося заставить кого-то сделать мою домашнюю работу, кто-нибудь может сказать мне, сработает ли это, прежде чем я подключу провода и попытаюсь отладить его при включенных 4 светодиодах?чип Xilinx, который я использую?