Vhdl Error (10500) cerca del texto "cuando"; esperando ";"

0

este es el error: Error (10500): error de sintaxis de VHDL en Bin7SegDecoder.vhd (15) cerca del texto "cuando"; esperando ";"

Puede ser simple pero no sé cuál es el error. Gracias de antemano!

library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity Bin7SegDecoder is
    port( enable   : in  std_logic;
            binInput : in  std_logic_vector(3 downto 0);
            decOut_n : out std_logic_vector(6 downto 0));
end Bin7SegDecoder;

architecture Behavioral of Bin7SegDecoder is
begin
    process(binInput, enable)
    begin
        if (enable = '1') then
            decOut_n <= "1111001" when (binInput = "0001") else --1
                            "0100100" when (binInput = "0010") else --2
                            "0110000" when (binInput = "0011") else --3
                            "0011001" when (binInput = "0100") else --4
                            "0010010" when (binInput = "0101") else --5
                            "0000010" when (binInput = "0110") else --6
                            "1111000" when (binInput = "0111") else --7
                            "0000000" when (binInput = "1000") else --8
                            "0010000" when (binInput = "1001") else --9
                            "0001000" when (binInput = "1010") else --A
                            "0000011" when (binInput = "1011") else --B
                            "1000110" when (binInput = "1100") else --C
                            "0100001" when (binInput = "1101") else --D
                            "0000110" when (binInput = "1110") else --E
                            "0001110" when (binInput = "1111") else --F
                            "1000000"; --0
        else
            decOut_n <= "1111111";
        end if;
    end process;
end Behavioral;
    
pregunta João

1 respuesta

1

Está intentando usar una cláusula de asignación concurrente when-else en un proceso secuencial.

Puede mover la asignación fuera del proceso y modificar la cláusula 'when' para probar primero habilitar = '0' antes de todas las pruebas 'when' en binInput.

O puede continuar con un proceso y cambiar la cláusula when-else a una declaración de caso y decodificar de esa manera. Esto se muestra a continuación y es una expresión más clara que el proceso.

library ieee;
use ieee.std_logic_1164.all;


entity Bin7SegDecoder is
  port(
    enable                        : in  std_logic;
    binInput                      : in  std_logic_vector(3 downto 0);
    decOut_n                      : out std_logic_vector(6 downto 0)
  );
end Bin7SegDecoder;


architecture Behavioral of Bin7SegDecoder is
begin


  decOut_n   <=   "1111111"  when (enable   =  '0')
            else  "1000000"  when (binInput = X"0")
            else  "1111001"  when (binInput = X"1")
            else  "0100100"  when (binInput = X"2")
            else  "0110000"  when (binInput = X"3")
            else  "0011001"  when (binInput = X"4")
            else  "0010010"  when (binInput = X"5")
            else  "0000010"  when (binInput = X"6")
            else  "1111000"  when (binInput = X"7")
            else  "0000000"  when (binInput = X"8")
            else  "0010000"  when (binInput = X"9")
            else  "0001000"  when (binInput = X"A")
            else  "0000011"  when (binInput = X"B")
            else  "1000110"  when (binInput = X"C")
            else  "0100001"  when (binInput = X"D")
            else  "0000110"  when (binInput = X"E")
            else  "0001110";   -- (binInput = X"F")


end Behavioral;
    
respondido por el TonyM

Lea otras preguntas en las etiquetas