Was bedeutet die folgende Warnung (erhoben von Quartus)?
Warning (10445): VHDL Subtype or Type Declaration warning at someFile.vhd(32): subtype or type has null range
Die fehlerhafte Codezeile lautet:
-- Drive unused low
q( N - 1 downto X ) <= ( others => '0' ); -- drive unused low
N
und X
sind ganzzahlige Konstanten, die an anderer Stelle im Code erfolgreich verwendet werden (ohne Warnungen auszulösen). q
wird als deklariertq : out std_logic_vector( N - 1 downto 0 )
Derselbe Fehler wird auch für diese Codezeile (in einer anderen Datei) ausgelöst:
-- Upper nibble
q <= zero( N - 1 downto 8 ) & q0( 7 downto 4 ) & zero( 3 downto 0 );
N
ist eine ganzzahlige Konstante, die an anderer Stelle im Code erfolgreich verwendet wird. q
wird als deklariert q : out std_logic_vector( N - 1 downto 0 )
. q0
wird als deklariert signal q0 : std_logic_vector( N - 1 downto 0 )
. zero
wird als deklariertconstant zero : std_logic_vector( N - 1 downto 0 ) := ( others => '0' )
Es scheint ( others => '0' )
der gemeinsame Punkt für beide zu sein, aber ich weiß nicht, wie dies mit der Nullbereichswarnung zusammenhängt.
Der Bereich: N - 1 downto X
wird zu einem Bereich mit 0 oder negativer Größe ausgewertet. Betrachten Sie den Bereich: 0 downto 4
, er hat eine Größe kleiner als 0, da die Zahl vor dem downto kleiner ist als die Zahl danach.
Das Problem hier ist, dass die Verwendung eines Bereichs mit einer Größe von weniger als 1 ihn zu einem Nullbereich macht, der einige gültige Verwendungen in vhdl hat. Da dies jedoch möglicherweise ein Bereichsfehler ist, gibt Quartus die Warnung aus, die Sie hier sehen.
Jet-Blau
N - 1 downto 8
wurde7 downto 8
Paebbels