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.
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.