# Contador 0 a 99 con pin de habilitacion



## jairoandreslopezmartinez (May 10, 2012)

Que tal todos necesito ayuda urgente... tengo que hacer un contador de 0 a 99 en VHDL en la tarjeta Basys 2. El diseño del contador ya lo tengo, y me funciona perfecto. El problema es que tengo que agregarle una entrada de 8 bits, en la cual los  4 menos significativos manejan el contador de unidades y los ultimos 4 manejan el de decenas. al yo ubicar cualquier dato en estas entradas y presionar un pulsador de la tarjeta el contador debe comenzar a contarme desde este numero.

La descripcion en VHDL del contador que ya tengo es la siguiente:

entity tercero is
    Port ( clk : in  STD_LOGIC;
           hab : in  STD_LOGIC;
           up : in  STD_LOGIC;
           seg : out  STD_LOGIC_VECTOR (6 downto 0);
           enable : out  STD_LOGIC_VECTOR (3 downto 0));
end tercero;

architecture Behavioral of tercero is

signal div: STD_LOGIC_VECTOR (25  DOWNTO 0);
signal uno: STD_LOGIC_VECTOR (3 DOWNTO 0);
signal dos: STD_LOGIC_VECTOR (3 DOWNTO 0);
signal tres: STD_LOGIC_VECTOR (3 DOWNTO 0);
begin

  PROCESS(clk)
  begin
    if((clk 'event)and(clk='1'))then
     div<=div+1;
    end if;
  end process;

  process(div(24))
  begin
    if((div(24)'event)and(div(24)='1'))then
     if(hab='1')then
       if(up='1')then
          if(dos<"1001")then
            dos<=cu+1;
          else
            dos<="0000";
            tres<=tres+1;
            if(tres="1001")then
             tres<="0000";
            end if;
          end if;
        else
            if(dos>"0000")then
            dos<=dos-1;
          else
            dos<="1001";
            if(tres="0000")then
             tres<="1001";
            else
             tres<=tres-1;
            end if;
          end if;
        end if;
     end if;
    end if;
  end process;

  process(div(15))
  begin
    if((div(15)'event)and(div(15)='1'))then
        case uno is
          when "1110" =>
            case tres is
                when "0000" =>
                 seg<="0000001";
                when "0001" =>
                 seg<="1001111";
                when "0010" =>
                 seg<="0010010";
                when "0011" =>
                 seg<="0000110";
                when "0100" =>
                 seg<="1001100";
                when "0101" =>
                 seg<="0100100";
                when "0110" =>
                 seg<="1100000";
                when "0111" =>
                 seg<="0001111";
                when "1000" =>
                 seg<="0000000";
                when "1001" =>
                 seg<="0001100";
                when others =>
                 seg<="0110000";
            end case;
            uno<="1101";
          when "1101" =>
           case dos is
                when "0000" =>
                 seg<="0000001";
                when "0001" =>
                 seg<="1001111";
                when "0010" =>
                 seg<="0010010";
                when "0011" =>
                 seg<="0000110";
                when "0100" =>
                 seg<="1001100";
                when "0101" =>
                 seg<="0100100";
                when "0110" =>
                 seg<="1100000";
                when "0111" =>
                 seg<="0001111";
                when "1000" =>
                 seg<="0000000";
                when "1001" =>
                 seg<="0001100";
                when others =>
                 seg<="0110000";
            end case;
            uno<="1110";
          when others =>
           uno<="1110";
        END case;
     end if;
    enable<=uno;
    end process;

end Behavioral;


Es decir, a partir del numero que yo coloque en la entrada de 8 bits, desde ese numero debe comenzar la cuenta.


----------



## fms (May 17, 2012)

Hola,
Por lo que he podido entender de tu código, podrías incluir una sentencia de carga de los datos en el proceso de los contadores. En el _else _de _hab = '1'_, o creando una nueva señal de carga.

Como recomendación incluye comentarios o al menos pon nombres de señales que ayuden a entender qué hacen. Por ejemplo, las señales _uno, dos, tres_ son poco descriptivas de lo que hacen. Esto facilita la tarea a los que te quieren ayudar en este foro.

Saludos


----------

