Aquí Pmodout es la salida que proviene del decodificador de teclado. Estoy tratando de entender cómo aplicar dos entradas desde el teclado para diferentes temporizadores TS y TL mientras ejecuto mi proyecto de controlador de semáforo. Tcmd es la entrada que viene de la máquina de estado finito para el estado diferente del semáforo. Tcmd = 01 para TS y Tcmd = 11 para TL. Si algún experto en VHDL puede ayudarme a tomar entradas separadas para TS y TL desde el teclado para dar diferentes valores a TS y TL. La razón por la que quiero que esto se haga porque uno de los requisitos para tener TS puede ser mayor que TL.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
port( seclk : in std_logic;--set
Tcmd : in std_logic_vector(1 downto 0);
Pmodout : in std_logic_vector (7 downto 0);
SW : in std_logic;--set
Tsig : out std_logic:='1';
anode : out std_logic_vector(3 downto 0);
segOut : out STD_LOGIC_VECTOR (6 downto 0));--set
end Timer;
architecture Behavioral of Timer is
signal cntr : std_logic_vector(7 downto 0) := X"00";
signal cntr1 : std_logic_vector(7 downto 0) := X"01";
signal TS : STD_LOGIC_VECTOR (7 downto 0):=Pmodout+X"01";
signal TL : STD_LOGIC_VECTOR (7 downto 0):=Pmodout+X"05";
signal TD : STD_LOGIC_VECTOR (7 downto 0):=Pmodout+X"05";
component DisplayController is
Port (
DispVal : in STD_LOGIC_VECTOR (3 downto 0);
anode : out std_logic_vector(3 downto 0);
segOut : out STD_LOGIC_VECTOR (6 downto 0));
end component;
begin
C1: DisplayController port map (DispVal=>TD(3 downto 0), anode=>anode,
segOut=>segOut );
process (SW) begin
if (SW='1') then
TD<=TL;
else
TD <= cntr;
end if;
end process;
process(Pmodout) begin
TS <=Pmodout+X"01";
TL <=Pmodout+X"05";
end process;
process(seclk , Tcmd) begin
if (seclk = '1' and seclk'event) and Tcmd (0) = '1' then
Tsig <= '0';
cntr <= cntr + 1;
if ((Tcmd = "01") and (cntr = TS)) then --Short Timer
cntr <= X"00";
Tsig <= '1';
elsif ((Tcmd = "11") and (cntr = TL)) then --Long Timer
cntr1 <= X"00";
Tsig <= '1';
elsif (cntr >TL) then
cntr <= X"00";
end if;
end if;
end process;
end Behavioral;