Aufgrund eines Problems in der Quartus II Software kann die Quartus® II Synthese diesen Fehler generieren, wenn sie versucht, einen indizierten Ausdruck in VHDL zu bewerten, der außerhalb des Bereichs innerhalb eines if-Ausdrucks innerhalb einer Schleife liegt.
Dieser Fehler kann auftreten, wenn alle der folgenden Bedingungen erfüllt sind:
- Eine if-Anweisung befindet sich in einer for-Schleife
- Die if-Anweisung ist ein Vergleich von zwei Integer-Expressions mit , >= oder =
- Die Schleife tritt in den Expressions auf, die von der if-Anweisung evaluiert werden
- Der von der if-Anweisung evaluierte Ausdruck ist auf , -, und* beschränkt.
Hier ist ein Beispiel dafür, wann dieser Fehler auftreten würde:
entity test is
port
(
i1_data_in : in std_logic_vector(3 downto 0);
i_div_pos : in std_logic_vector(7 downto 0);
o_data_out : out std_logic_vector(7 downto 0)
);
END entity test;
architecture rtl of test is
signal idx : integer;
signal lim : NATURAL range 0 to 5;
idx <= to_integer(unsigned(i_div_pos));
lim <= 3;
process(i1_data_in, idx)
variable temp : std_logic_vector(o_data_out\'range);
begin
temp := (others => \'0\');
u1 : for i in 0 to 7 loop
if i <= 3 - lim then
temp(i) := i1_data_in(i);
else
temp(i) := i_div_pos (i);
end if;
end loop;
o_data_out <= temp;
end process;
end rtl;
Zur Behebung dieses Problems steht für die Quartus II Software Version 11.0 SP1 ein Patch zur Verfügung. Laden Sie Patch 1.40 über den entsprechenden Link unten herunter und installieren Sie es. Nach der Installation des Patches aktivieren Sie die Lösung, indem Sie die Datei quartus.ini in Ihrem Projektverzeichnis erstellen oder bearbeiten, um die folgende Zeile aufzunehmen:
vrfx_optimize_if_dead_code=on
- Laden Sie den Version 11.0 SP1 Patch 1.40 für Windows herunter (.exe)
- Laden Sie den Version 11.0 SP1 Patch 1.40 für Linux herunter (.the.)
- Laden Sie den Readme für die Quartus II Softwareversion 11.0 SP1 Patch 1.40 herunter (.txt)
Wenn dieser Fehler bei der Verwendung einer anderen Version der Quartus II Software auftritt, erstellen Sie eine Serviceanfrage mit mySupport.