Ya anteriormente publique este semáforo pero ahora tengo un problema diferente, el mismo semáforo con menos estados funciono perfectamente, ahora lo que necesite fue aumentar el tiempo de 60 segundos a 80 segundos toda la transición de los colores, y a la hora de la simulación me tiro unos pequeños flancos en el color verde que no me gustaron para nada. En el color verde se le agrego una señal de reloj extra para que el parpadeo sea más rápido.
Esta es la simulación del semáforo con 60 estados que funciono perfectamente.
Esta es la nueva simulación del semáforo con 80 estados que saca flancos raros.
Si alguien tiene idea a que se debe este ruido en la simulación le agradecería me saque de la duda, logre eliminarlo poniendo el código de la siguiente manera...
pero no me parece correcto ya que el rojo tiene que durar 42 segundos, el verde 35 con todo y los parpadeos y el amarillo 3 segundos, cualquier ayuda gracias de antemano.
PHP:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity semaforodobleconif is
port (clk, alternin: in std_logic;
R, A, V: out std_logic);
end semaforodobleconif;
architecture contando of semaforodobleconif is
signal C1, C2, C3: std_logic_vector (6 downto 0);
begin
process (clk, C) begin
if (clk'event and clk = '1') then
if C < 79 then
C <= C + "0000001";
else
C <= "0000000";
end if;
end if;
end process;
process (C) begin
if (C >= 0 and C <= 41) then
R <= '1'; A <= '0'; V <= '0';
elsif (C >= 42 and C <= 72) then
R <= '0'; A <= '0'; V <= '1';
elsif (C >= 73 and C <= 76) then
R <= '0'; A <= '0'; V <= not alternin;
else
R <= '0'; A <= '1'; V <= '0';
end if;
end process;
end contando;
Esta es la simulación del semáforo con 60 estados que funciono perfectamente.
Esta es la nueva simulación del semáforo con 80 estados que saca flancos raros.
Si alguien tiene idea a que se debe este ruido en la simulación le agradecería me saque de la duda, logre eliminarlo poniendo el código de la siguiente manera...
PHP:
process (C) begin
if (C >= 0 and C <= 42) then
R <= '1'; A <= '0'; V <= '0';
elsif (C >= 42 and C <= 72) then
R <= '0'; A <= '0'; V <= '1';
elsif (C >= 73 and C <= 76) then
R <= '0'; A <= '0'; V <= not alternin;
else
R <= '0'; A <= '1'; V <= '0';
end if;
end process;
pero no me parece correcto ya que el rojo tiene que durar 42 segundos, el verde 35 con todo y los parpadeos y el amarillo 3 segundos, cualquier ayuda gracias de antemano.