¿Necesita ayuda para desarrollar dos temporizadores que reciban entradas desde el teclado y el temporizador puede cambiar sobre la marcha en mi proyecto Controlador de semáforo en VHDL

0

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;
    
pregunta dhruv

0 respuestas

Lea otras preguntas en las etiquetas