función de concatinación

1

En una pregunta anterior pregunté acerca de una función de truncado, lo que insinuó que Debería probar una función con un ancho de retorno estático.

Estoy tratando de combinar dos vectores x y y tomando los primeros c bits de x y los restantes x'length - c bits de y . (Supongo que x y y están en el mismo rango). Por lo tanto, escribí la siguiente función, que nuevamente produce un error, esta vez en la línea donde asigno result

/*
 Combines two signals by taking bitsFromX bits from x and the rest from y.

 x vector 1 to combine
 y vector 2 to combine, must be of same length as x
 bitsFromX number of bits taken from x
 */
function combine(x: in std_logic_vector; y: in std_logic_vector; bitsFromX: in natural)
return std_logic_vector is
    variable result : std_logic_vector(x'RANGE);
begin
    --assert x'LENGTH= y'LENGTH report "Attempt to combine different length vectors" & lf & "X: " & RANGE'IMAGE(x'RANGE) & "Y: " & RANGE'IMAGE(y'RANGE);
    result := x(x'LEFT downto x'LEFT-bitsFromX+1) & y(y'LEFT-bitsFromX downto y'RIGHT);
    return result;
end function;

El mensaje de error (de synplify) es:

  

Esperando expresión constante

Puedo resolver esto usando dos asignaciones:

result(x'LEFT downto x'LEFT-bitsFromX+1) := x(x'LEFT downto x'LEFT-bitsFromX+1);
result(y'LEFT-bitsFromX downto y'RIGHT)  := y(y'LEFT-bitsFromX downto y'RIGHT);

y me gustaría entender por qué esto es así? (Me parece que es la segunda vez que cometo el mismo error, porque todavía no entiendo la razón).

Como bonificación: ¿Cómo no me funciona el resultado de report , x'RANGE y to_string(x'RANGE) ?

    
pregunta ted

0 respuestas

Lea otras preguntas en las etiquetas