Error de sintaxis del flip-flop VHDL

0

Estoy tratando de averiguar cómo usar VHDL, y tengo algunas dificultades para escribir un simple flip flop. Quiero un flip flop T que funcione estrictamente fuera del reloj, cambiando de estado cada vez que recibe un flanco ascendente.

Los errores de sintaxis son un tanto crípticos y tengo dificultades para descubrir qué es lo que está mal.

library lattice;
use lattice.components.all;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity blinker is
    port(
            clk     :   IN  STD_LOGIC;
            ledout  :   OUT STD_LOGIC
    );
end blinker;

architecture Behavioral of blinker is
    signal ledState: STD_LOGIC;
begin
    process(clk)
    begin
        if(rising_edge(clk)) then
        --if clk'event and clk='1' then
            if ledState = '1' then
                ledout <= '0';
            elsif ledState = '0' then
                ledout <= '1';
            endif;
        endif;
    end process;

    ledout <= led_state;

end Behavioral;

Intenté dos métodos de correr en un flanco ascendente, ninguno de los dos parecía hacer una diferencia. Así es como se ve la salida:

Estoy completamente perdido en este punto. ¿Qué estoy haciendo mal aquí?

¡Gracias!

    
pregunta alphasierra

1 respuesta

3

Tienes algunos problemas:

1. endif; debería ser end if;

2. Ya tienes asignaciones a ledout dentro de tu proceso, pero luego intentas asignarle un valor nuevamente en la última línea ledout <= led_state; . No puede tener varios controladores para una señal dada.

3. Tu código es un poco complicado. Puede simplificar la alternancia de la señal ledState así: ledState <= not ledState; sin la cláusula if / elsif incrustada.

4. Uno de los mensajes de error señala un error tipográfico que hizo en la última línea ledout <= led_state; , donde creo que quiso decir ledout <= ledState ;

Prueba esto en su lugar:

library ieee;
use ieee.std_logic_1164.all;

entity blinker is
    port(
            clk     :   IN  std_logic;
            ledout  :   OUT std_logic
    );
end blinker;

architecture Behavioral of blinker is
    signal ledState: std_logic := '0';
begin
    process(clk)
    begin
        if(rising_edge(clk)) then
            ledState <= not ledState;
        end if;
    end process;

    ledout <= ledState;

end Behavioral;

RTL

    
respondido por el Blair Fonville

Lea otras preguntas en las etiquetas