Un simple circuito VHDL no mostrará el valor inicial

1

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?

    
pregunta aeolus

1 respuesta

1

Está inicializando "contador: rango entero 0 a 7: = 0;"

Entonces, inicialmente el valor de contador = 0000000. Así que al comienzo de este bucle

begin
HEX0 <= SEVENSEG(counter);
wait until SW = '0';
counter <= counter + 1;
end process;

el contador es todo ceros. Así que obviamente se mostrará 8 en 7-seg. Intenta usar

counter : integer range 0 to 7 := "0001000"

Esto establecerá tu valor de contador en A inicialmente.

    
respondido por el Damon

Lea otras preguntas en las etiquetas