Vhdl error 10327 - no se puede determinar la definición de operador “” & “” - se encontraron 0 definiciones posibles

0

Estoy ajustando un código vhdl y obtengo el siguiente error:

  

Error (10327): Error VHDL en myfile.vhd (87): no se puede determinar   definición de operador "" & "" - se encontraron 0 definiciones posibles

El código abreviado es:

port(
    input1: in std_logic_vector(1 to 1);
    ...)

signal   temp   : signed1x13;
-- defined elsewhere: type signed1x13   is array (1 to 1) of signed(12 downto 0);

begin
    ...
    variable slice : signed(12 downto 0);

    slice := temp(0); 
    temp <= slice(11 downto 0) & input1; 

Tal como lo entiendo, el operador & debería agregar un poco al final de la matriz de bits slice(11 downto 0) .

He estado jugando con el cambio de los tipos de datos, pero aún no lo he hecho funcionar.

¿Hay algo obvio que estoy haciendo mal?

    
pregunta atomh33ls

1 respuesta

2

Con un par de correcciones y creando un Ejemplo mínimo, completo y verificable :

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity atomh33ls is
port (
    input1: in std_logic_vector(1 to 1)
    );

end entity;
architecture foo of atomh33ls is
    type signed1x13 is array (1 to 1) of signed (12 downto 0);
    signal   temp   : signed1x13;
-- defined elsewhere: type signed1x13   is array (1 to 1) of signed(12 downto 0);

begin
    process
        variable slice : signed(12 downto 0);
    begin
        slice := temp(1); 
        temp <= slice(11 downto 0) & signed(input1); 
        wait;
    end process;
end architecture;

Su fragmento de código se convirtió en una entidad completa y un par de arquitectura y la creación de un proceso en el que se puede declarar una variable.

Los dos arreglos son la asignación a la porción variable en el proceso donde el índice (0) está fuera de los límites para la declaración de tipo utilizada para temp, corregida a (1) y una conversión de tipo de std_logic_vector a firmado en la asignación temp.

Este ejemplo de código expandido analiza.

El problema original es que no hay un operador de concatenación para un operando izquierdo de firmado y un derecho de std_logic_vector. Arreglar eso con la conversión de tipo a firmado reveló la violación de límites estáticos ( temp(0) ).

    
respondido por el user8352

Lea otras preguntas en las etiquetas