記事 ID: 000077812 コンテンツタイプ: トラブルシューティング 最終改訂日: 2021/08/27

Quartus® II ソフトウェア・バージョン 8.1 で VHDL トライステート信号が正しく推論されないのはなぜですか?

環境

BUILT IN - ARTICLE INTRO SECOND COMPONENT
詳細

Quartus® II ソフトウェア・バージョン 8.1 に問題があり、VHDL トライステート信号がマルチプレクサーとして誤って推論される可能性があります。信号がデバイスの出力ピンに接続されている場合、コンパイル結果、ピンがトライステート出力として機能するのではなく、ボードにドライブアウトする可能性があります。

このソフトウェアの問題は、VHDL デザイン・エンティティーにデフォルト値が含まれている未使用の出力ポートが含まれている場合にのみ発生します 'Z' (つまり、出力ポートには 'Z' エンティティー宣言にトライステートの割り当てが存在しますが、デザインの信号に明示的な割り当てはありません)。問題が発生した場合、外側のアーキテクチャーの動作ステートメントで記述された推論されたトライステート・ロジックは、正しくマルチプレクサーとして推論されません。この問題はアーキテクチャー内の単一の階層に限定され、インスタンス化されたグループは存在しません。ただし、他のエンティティーにデフォルトの値を含む未使用の出力ポートが同じタイプでない限り、 'Z'この問題を説明する小さなデザインについては、このソリューションの最後にある例を参照してください。

影響を受けるトライステート信号が内部トライステート接続の場合、Alteraデバイスに内部トライステート・ロジックがないため、マルチプレクサーの推論が期待されます。ただし、トライステート・エンティティー・ポートがデバイス上の I/O ピンを供給する場合、このソフトウェア動作により、未使用の出力ピンがトライステート出力として動作する代わりにボードにドライブアウトし、システムの信号競合を引き起こす可能性があります。

問題を回避し、定義されたトライステート動作を推論するには、デフォルトのステートメントに依存するのではなく、デザインの信号割り当てを使用して、未使用の出力ピンをトライステート値に明示的に割り当てます。例えば、次のようなステートメントを使用 unused_output <= 'Z'; するか、 unused_output <= (others => 'Z');

Quartus® II ソフトウェア・バージョン 8.1 でこの問題を解決するためのパッチが利用可能です。 Windows* パッチ 0.34 または Linux* パッチ 0.34をダウンロードし、パッチをインストールしてデザインを再コンパイルします。

このソフトウェアの問題は、将来のバージョンの Quartus® II ソフトウェアでも修正される予定です。

この問題の影響を受けるデザインの例を以下に示します。

library ieee;
use ieee.std_logic_1164.all;
entity example is
  port (
    en : in std_logic;
    data : in std_logic;
    unused_output: out std_logic := 'Z';
    other_output : out std_logic);
end example;

architecture rtl of example is
begin  
   -- other_output should be tri-state but won't be tri-state due to this problem
   other_output <= data when en = '1' else 'Z';
end rtl;

上記のデザイン例の Quartus® II ソフトウェア・バージョン 8.1 で両出力ピンの正しいトライステート動作を推論するには、アーキテクチャーに次のステートメントを追加します。
   unused_output <= 'Z';

関連製品

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

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

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