Ich habe seit einigen Stunden bei diesem Problem stecken geblieben, und es scheint, ich kann die Lösung nicht finden, indem Sie suchen, d. H. Hier und bei Google nichts gefunden.VHDL "For" Loop Null Bereich
Hier ist mein Stück Code:
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.numeric_std;
USE work.arrays.ALL;
ENTITY parallel IS
PORT (clk:IN std_logic; text:IN INT_ARRAY(119 DOWNTO 0); result:OUT INT_MATRIX_2D);
END parallel;
ARCHITECTURE arch OF parallel IS
COMPONENT unit_comparator IS
PORT (letter:IN integer; difference:OUT integer);
END COMPONENT;
SIGNAL temp: INT_MATRIX_2D := (others => (others => 0));
SIGNAL temp_differences: INT_ARRAY(119 DOWNTO 0) := (others => 0);
BEGIN
PROCESS(clk)
BEGIN
IF(rising_edge(clk))THEN
FOR index IN 119 TO 1 LOOP
temp(temp_differences(index))(temp_differences(index - 1)) <=
temp(temp_differences(index))(temp_differences(index - 1)) + 1;
END LOOP;
result <= temp;
END IF;
END PROCESS;
wiring_loop: FOR index IN 119 DOWNTO 0 GENERATE
wiring_unit: unit_comparator PORT MAP (text(index), temp_differences(index));
END GENERATE;
END arch;
Sie sehen, dass "FÜR Index IN 119 bis 1 LOOP"?
Der Compiler gibt einen „Bereich 119-0 ist Null“ Warnung (keine Zweifel, die ganze Sache nicht funktioniert, wie es sollte), die ich scheinen ein Problem Verständnis zu haben. Wenn es bei jedem Schritt durch die Schleife eine Ganzzahl gibt, die "index" zugewiesen ist, wie kann sie null werden (und es sagt, dass es bei jedem Schritt passiert!). Ich brauche ein festes Verständnis und keine einfache Lösung. (Hinweis: Alle verwendeten Module und Pakete sind getestet und funktionieren ordnungsgemäß!)
Vielen Dank!
Der erste Google-Hit (für mich) auf "VHDL null range" ist [diese nette Erklärung von Sigasi] (http://insights.sigasi.com/tech/to-downto-ranges-vhdl.html). Ihr Beispiel ist auch nicht vollständig (weil Paket 'arrays' fehlt) oder minimal (wegen unnötiger Komponenten/Instanziierungen). –
IEEE Std 1076-2008 5.2.1 (Skalartypen): "Ein Bereich gibt eine Teilmenge von Werten eines Skalartyps an. Ein Bereich wird als Nullbereich bezeichnet, wenn die angegebene Teilmenge leer ist. Der Bereich von L bis R wird aufgerufen ein aufsteigender Bereich, wenn L> R, dann ist der Bereich ein Nullbereich.Der Bereich L abwärts zu R wird als absteigender Bereich bezeichnet; wenn L
user1155120