記事 ID: 000080561 コンテンツタイプ: エラーメッセージ 最終改訂日: 2021/08/28

エラー (10385): VHDL エラー時 <file>: インデックス値がオブジェクトの範囲外 (downto) <object></object></file>

環境

    インテル® Quartus® II サブスクリプション・エディション
BUILT IN - ARTICLE INTRO SECOND COMPONENT
詳細

Quartus® II ソフトウェアの問題により、ループ内の if 式の範囲外にある VHDL のインデックス付き式を評価しようとすると、Quartus® II 合成でこのエラーが発生する場合があります。

次の条件をすべて満たすと、このエラーが表示されることがあります。

  1. if ステートメントが for ループ内にある
  2. if ステートメントは、、>= または = を使用した 2 つの整数式の比較です。
  3. ループ変数は、if ステートメントで評価される式で発生します。
  4. 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

別のバージョンの Quartus® II ソフトウェアの使用中にこのエラーが発生した場合は、mySupport を使用してサービスリクエストを提出してください。

関連製品

本記事の適用対象: 1 製品

インテル® プログラマブル・デバイス

1

このページのコンテンツは、元の英語のコンテンツを人力翻訳および機械翻訳したものが混在しています。この内容は参考情報および一般的な情報を提供するためものであり、情報の正確さと完全性を保証するものではありません。インテルは不正確な翻訳があった場合でもいかなる責任を負いません。このページの英語版と翻訳の間に矛盾がある場合は、英語版に準拠します。 このページの英語版をご覧ください。