Error de sintaxis cerca de la variable y rango en VHDL

0

Aprendí Java el año pasado y comencé a aprender VHDL y la implementación en BASYS3 este año. Solo trato de mostrar los números en el segmento siete comenzando desde 0 y cada vez que se presiona un botón, el número aumentará. Estoy familiarizado con las declaraciones de entrada y salida, pero no pude declarar mi variable entera de la siguiente manera en VHDL vivado;

architecture Behavioral of top_module is
begin
shared variable total_foul : integer range 0 to 5;
total_foul := 0;

Sigue diciendo que hay un error de sintaxis cerca de la variable y el rango que no pude descubrir. También traté de escribir el código de siete segmentos en las declaraciones de casos de la siguiente manera;

 begin
        case total_foul is        
        when 1 => LED <= "1001111"; -- "1" 
        when 2 => LED <= "0010010"; -- "2" 
        when 3 => LED <= "0000110"; -- "3" 
        when 4 => LED <= "1001100"; -- "4" 
        when 5 => LED <= "0100100"; -- "5" 
        when others => LED <= "0000001"; -- "0"    

Pero esto también indica que hay un error de sintaxis cerca de cuándo.

El código general por ahora es;

entity top_module is
    Port ( increase : in STD_LOGIC;
           decrease : in STD_LOGIC;
           foul : in STD_LOGIC;
           anode : out STD_LOGIC_VECTOR (3 downto 0);
           LED : out STD_LOGIC_VECTOR (6 downto 0));

end top_module;

architecture Behavioral of top_module is
begin
anode <= "1111";
shared variable total_foul : integer range 0 to 5;
total_foul := 0;
begin
if foul = '1'  then
    if increase = '1' and decrease = '0' then
        total_foul := total_foul + 1;
    elsif decrease = '1' and increase = '0' then
        total_foul := total_foul - 1;
    end if;
    begin
        case total_foul is        
        when 1 => LED <= "1001111"; -- "1" 
        when 2 => LED <= "0010010"; -- "2" 
        when 3 => LED <= "0000110"; -- "3" 
        when 4 => LED <= "1001100"; -- "4" 
        when 5 => LED <= "0100100"; -- "5" 
        when others => LED <= "0000001"; -- "0"    

end Behavioral;

Gracias a todos por adelantado.

    
pregunta Ekin Alparslan

1 respuesta

1

Al eliminar las partes de su código que no son problemáticas, tenemos:

architecture Behavioral of top_module is
begin
  shared variable total_foul : integer range 0 to 5;
  begin
  if foul = '1'  then
  begin
    case total_foul is        
      when 1 => LED <= "1001111"; -- "1" 
      when 2 => LED <= "0010010"; -- "2" 
      when 3 => LED <= "0000110"; -- "3" 
      when 4 => LED <= "1001100"; -- "4" 
      when 5 => LED <= "0100100"; -- "5" 
      when others => LED <= "0000001"; -- "0" 

end Behavioral;

El primer problema es tu variable compartida. Estos solo se pueden declarar en una región declarativa, en este caso, parece que lo deseaba en la región declarativa de la arquitectura, que está antes del primer begin en el código anterior.

El siguiente problema es su segunda declaración begin . ¿Qué se suponía que debía hacer esto? Parece que quisieras comenzar un proceso aquí.

Hay un 3er begin después de la línea if foul = '1' . De nuevo, ¿qué se supone que hace esto? No coincide con ningún patrón de código válido, por lo que te sugiero que simplemente te deshagas de él.

La declaración de su caso comienza bien, pero ¿dónde está el end case; correspondiente?

Volviendo a la línea if foul = '1' , no tiene un end if; coincidente.

Debe volver atrás y ver algunos ejemplos de arquitecturas VHDL simples, luego escribir código cuidadosamente teniendo esto en cuenta. Por un comentario, también debes evitar usar una variable compartida hasta que realmente entiendas por qué estás usando esto, y no un signal o variable .

    
respondido por el scary_jeff

Lea otras preguntas en las etiquetas