Aquí está mi código y es bastante simple. Debo recorrer las primeras 8 letras del alfabeto en un tablero de Altera Cyclone II.
entity lettercycle is
port(
SW : in std_logic; -- toggle switch
HEX0 : out std_logic_vector(6 downto 0) -- 7-segment display
);
end lettercycle;
architecture behavioural of lettercycle is
signal counter : integer range 0 to 7 := 0;
begin
process
type SEGMENT_ARRAY is array (0 to 7) of std_logic_vector(6 downto 0);
variable SEVENSEG : SEGMENT_ARRAY := ("0001000","0000011","1000110","0100001","0000110","0001110","0010000","0001001");
begin
HEX0 <= SEVENSEG(counter);
wait until SW = '0';
counter <= counter + 1;
end process;
end behavioural;
Esto funciona muy bien, hace ciclos pero inicialmente no muestra "A" en mi pantalla de siete segmentos. Muestra "8" (por lo que nada esencialmente). Una vez que presiono SW, que es un interruptor lógico 0, cambia a 'A' y pasa a 'B', 'C', etc. correctamente. También se enlaza correctamente. Lo que no está haciendo es establecer inicialmente en 'A'. Si fuerzo
HEX0 <= SEVENSEG(0);
Luego mostrará 'A' inicialmente, así que no tengo ideas. ¿Podría esto estar relacionado con el rebote?