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);