El bit de tipo no coincide con el literal entero al convertir un entero en bit_vector

1

En VHDL, ¿hay alguna forma de convertir un integer en bit_vector de la longitud de 14?

Actualmente, primero estoy convirtiendo integer en std_logic_vector y luego en bit_vector .

for i in 0 to 5 loop
    x_std(i) <= conv_std_logic_vector(x_int(i),14);
    x_bit(i) <= to_bitvector(x_std(i),14);   --here comes error
end loop;

En la sintaxis de verificación de comportamiento, el siguiente error se produce al convertir std_logic en bit :

Type bit does not match with the integer literal

Estoy usando las siguientes bibliotecas, ieee.std_logic_1164 , std_logic_arith y std_logic_unsigned .

¿Cómo puedo hacer esta conversión sin un error?

    
pregunta aman2392

1 respuesta

1

Para responder a su pregunta específica: la función to_bitvector() de std_logic_1164 solo toma una entrada, una señal del tipo std_ulogic_vector o std_logic_vector . Si busca el nombre de la función, encontrará documentación como esto que le da la interfaz

function to_bitvector ( s : std_ulogic_vector ) return bit_vector;

Así que cambia tu código a esto y debería funcionar (aunque no lo he probado):

for i in 0 to 5 loop
    x_std(i) <= conv_std_logic_vector(x_int(i),14);
    x_bit(i) <= to_bitvector(x_std(i));  --should compile
end loop;

En cuanto a por qué las funciones toman entradas diferentes, la función conv_std_logic_vector requiere un parámetro de longitud, ya que el tipo integer no tiene una longitud específica. El parámetro de longitud le dice al sintetizador qué tan ancho es creado por la función std_logic_vector . VHDL está fuertemente tipada y la longitud de la señal devuelta por la función se compara con el signo de la mano izquierda en la asignación ( x_std(i) ) para asegurarse de que coinciden.

A la inversa, la función to_bitvector simplemente pasa por cada elemento de la matriz y, a su vez, realiza una asignación de std_logic a bit y, por lo tanto, el ancho de la matriz devuelta se define por el ancho de la matriz de entrada.

También vale la pena estudiar el uso de atributos VHDL como la entrada de longitud a las funciones de conversión . Este código no se romperá si decides cambiar el ancho de x_std() y x_bit() más tarde:

x_std(i) <= conv_std_logic_vector(x_int(i),x_std(i)'LENGTH);
    
respondido por el Xcodo

Lea otras preguntas en las etiquetas