VHDL - El subtipo o tipo tiene rango nulo

3

¿Cuál es el significado de la siguiente advertencia (presentada por Quartus)?

Warning (10445): VHDL Subtype or Type Declaration warning at someFile.vhd(32): subtype or type has null range


La línea de código ofensiva es:

-- Drive unused low
q( N - 1 downto X ) <= ( others => '0' );  -- drive unused low

N y X son constantes enteras utilizadas con éxito en otras partes del código (sin generar advertencias). q se declara como q : out std_logic_vector( N - 1 downto 0 )


El mismo error también se genera para esta línea de código (en otro archivo):

-- Upper nibble
q <= zero( N - 1 downto 8 ) & q0( 7 downto 4 ) & zero( 3 downto 0 );

N es una constante entera usada exitosamente en otras partes del código. q se declara como q : out std_logic_vector( N - 1 downto 0 ) . q0 se declara como signal q0 : std_logic_vector( N - 1 downto 0 ) . zero se declara como constant zero : std_logic_vector( N - 1 downto 0 ) := ( others => '0' )


Parece que ( others => '0' ) es el punto común para ambos, pero no sé cómo se relaciona esto con la advertencia de rango nulo.

    
pregunta Jet Blue

1 respuesta

2

El rango: N - 1 downto X se está evaluando a un rango con 0 o tamaño negativo. Considere el rango: 0 downto 4 , tiene un tamaño menor que 0, ya que el número anterior al final es menor que el número posterior.

El problema aquí es que el uso de un rango que tiene un tamaño inferior a 1 lo convierte en un rango nulo que tiene algunos usos válidos en vhdl. Sin embargo, dado que esto es potencialmente un error de rango, Quartus da la advertencia que está viendo aquí.

    
respondido por el Lincoln

Lea otras preguntas en las etiquetas