Quartus® II ソフトウェアの問題により、ループ内の if 式の範囲外にある VHDL のインデックス付き式を評価しようとすると、Quartus® II 合成でこのエラーが発生する場合があります。
次の条件をすべて満たすと、このエラーが表示されることがあります。
- if ステートメントが for ループ内にある
- if ステートメントは、、>= または = を使用した 2 つの整数式の比較です。
- ループ変数は、if ステートメントで評価される式で発生します。
- if ステートメントで評価される式は、-、および * に限定されます。
このエラーが発生する例を以下に示します。
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;
Quartus® II ソフトウェア・バージョン 11.0 SP1 でこの問題を解決するためのパッチが利用可能です。以下の該当するリンクから Patch 1.40 をダウンロードしてインストールします。パッチをインストールした後で、プロジェクト・ディレクトリーで quartus.ini ファイルを作成または編集して修正プログラムを有効化し、次の行を含めます。
vrfx_optimize_if_dead_code=on
- Windows 用バージョン 11.0 SP1 パッチ 1.40 (.exe) をダウンロードします。
- Linux 向けバージョン 11.0 SP1 パッチ 1.40 (.linux.
- インテル® Quartus® II ソフトウェア・バージョン 11.0 SP1 パッチ 1.40 (.txt) の Readme をダウンロードする
別のバージョンの Quartus® II ソフトウェアの使用中にこのエラーが発生した場合は、mySupport を使用してサービスリクエストを提出してください。