VHDL – Untertyp oder Typ hat einen Nullbereich

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

Nund Xsind ganzzahlige Konstanten, die an anderer Stelle im Code erfolgreich verwendet werden (ohne Warnungen auszulösen). qwird 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 );

Nist eine ganzzahlige Konstante, die an anderer Stelle im Code erfolgreich verwendet wird. qwird als deklariert q : out std_logic_vector( N - 1 downto 0 ). q0wird als deklariert signal q0 : std_logic_vector( N - 1 downto 0 ). zerowird 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.

Antworten (1)

Der Bereich: N - 1 downto Xwird 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.

Danke schön! Der Code wurde ursprünglich für 16+ Bits (N=16) geschrieben. Die Verwendung für 8 Bit (N = 8) verursachte den subtilen Fehler. N - 1 downto 8wurde7 downto 8
Mit VHDL können Sie NULL-Bereiche und NULL-Slices haben. Deshalb ist es eine Warnung und kein Fehler. Es gibt gute Anwendungsfälle mit NULL-Bereichen. In den meisten Fällen handelt es sich jedoch um einen Fehler bei der Berechnung der Slice-Grenzen.