Mi código VHDL no hace lo que necesito que haga. Tengo un código de 8 bits entrante que necesito agarrar con el "botón" "restablecer", luego necesito devolver el número del primer "1" que hay en este código. para esto lo estoy copiando en una secuencia secundaria y presionándolo hasta que aparezca un "1" al final.
pero "q" no deja de aumentar algo de cómo ... ¿Qué está mal?
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity count is
port
(
clk : in std_logic;
reset : in std_logic;
start : in std_logic;
q : out integer range 0 to 7;
sequence : in bit_vector (0 to 7)
);
end entity;
architecture rtl of count is
signal sub_seq : bit_vector (0 to 7);
begin
process (clk)
variable cnt : integer range 0 to 7 := 0;
begin
if (rising_edge(clk)) then
if reset = '1' then
sub_seq <= sequence;
end if;
end if;
if reset = '1' then
cnt := 0;
sub_seq <= sequence;
end if;
if ((reset = '0') and (sub_seq(0) = '0')) then
cnt := cnt + 1;
sub_seq <= sub_seq sra 1;
end if;
if (start = '0') then
cnt := cnt + 1;
sub_seq <= sub_seq sra 1;
end if;
q <= cnt;
end process;
end rtl;