2016-04-08 16 views
0

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!

+0

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). –

+0

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

Antwort

2

Bereiche benötigen eine Richtung, die ihren Grenzen entspricht. Sie möchten 119 downto 1 oder 1 to 119. 119 to 1 ist kein Bereich, der zum Durchlaufen geeignet ist.

+0

Es ist nicht nötig zu sagen, dass du mich gerettet hast (ich brauche eine neue Brille lol) –

+1

Es ist ein absolut gültiger Bereich, es ist nur ein Null (leer)! –

+1

@BrianDrummond ist das besser? –