¿Cuál es el significado de la siguiente advertencia (planteada 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 que se usan con éxito en otras partes del código (sin generar advertencias). q
se declara comoq : out std_logic_vector( N - 1 downto 0 )
También se genera el mismo error 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 utilizada con éxito 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 comoconstant 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.
El rango: N - 1 downto X
está evaluando un rango con 0 o tamaño negativo. Considere el rango: 0 downto 4
, tiene un tamaño que es menor que 0 ya que el número anterior al downto es menor que el número posterior.
El problema aquí es que usar 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í.
Azul azabache
N - 1 downto 8
convertirse7 downto 8
Paebbels