VHDL: advertencia de elección estática no local

0

Tengo el siguiente código:

constant HALF_RANGE: unsigned(RANGE_WIDTH-1 downto 0) := (RANGE_WIDTH-1 => '1', others=>'0');

donde RANGE_WIDTH es un genérico de tipo entero. Hace exactamente lo que debe: Generar una constante donde el primer bit es 1 y los otros 0. El único problema es: genera un waring usando Questa Sim:

(vcom-1073) Non-locally static choice (association #1, choice #1) is allowed only if it is the only choice of the only association.

¿Qué significa esta advertencia? ¿Cuál sería la forma correcta de definir tal constante?

    
pregunta Botnic

1 respuesta

0

En caso de que los comentarios no fueran claros: la advertencia significa que no puede usar más de una opción en un agregado de matriz si está usando un valor no estático (un genérico o algo derivado de un genérico) para definir Los rangos o posiciones. No sé, sin embargo, por qué existe la restricción.

Hay una solución simple para definir tales constantes. Simplemente rompa la constante en partes más pequeñas que se pueden definir con un agregado con una sola opción y luego concatene. Útil para casos simples como este:

constant HALF_RANGE: unsigned(RANGE_WIDTH - 1 downto 0) := '1'&(RANGE_WIDTH - 2 downto 0 => '0');

No estoy seguro de que exista una solución mejor, ya que todo lo que se deriva de un genérico se vuelve no estático, pero no soy un experto.

    
respondido por el Miloš Ljubotina

Lea otras preguntas en las etiquetas