2017-01-17 14 views
1

、しない理由理由である:Zがハイインピーダンスであり、Xは未知であるVHDLは: 'Z' = 'X' VHDLで

NOT 'Z' = 'X' 

(以下STD_LOGIC信号タイプを参照します)。

コンテキスト:これはVHDLにのみ適用されます。私は、インバータを介して 'Z'信号が送られ、これによって 'X'が出された試験問題を受けました。私はなぜこれが起こり、答えが単に「Z」でないのか理解していません。あなたが言ったこととの関連では

'U': uninitialized. (signal hasn't been set yet) 
'X': unknown (impossible to determine this value/result) 
'0': logic 0 
'1': logic 1 
'Z': High Impedance (signal source when that source makes no effective contribution to the resolved value of the signal) 
'W': Weak unknown signal (can't tell if it should be 0 or 1) 
'L': Weak signal that should probably go to 0 
'H': Weak signal that should probably go to 1 
'-': Don't care 
+0

オーケーをあなたの質問を不明確にすることはどうですか? 'NOT 'Z' = 'X''はBOOLEAN値TRUEを返す式です。何を聞いていますか?なぜそれは本当ですか?列挙リテラルは同じではないためです。 (5.2.2.1 *各列挙型リテラルは異なる列挙値を生成する*、9.2.3関係演算子*等価演算子は、2つのオペランドが等しい場合はTRUEを返し、そうでない場合はFALSEを返します。答えられる人のための文脈を追加してください。 – user1155120

+0

あなたは理解していないようです。これはVHDLにのみ適用されます。私は 'Z'信号がインバータに送られて、なぜ私が理解できない 'X'を出したかという試験問題を与えられました。私は私の質問にこの明確化を加えました - あなたの助言に感謝します。 – Psi

+0

私は理解できませんでした。あなたの質問は不明です。最後のコメントの文脈を質問に追加し、前述のstd_logic_1164-body.vhdlファイルのnot_tableを見ると、 'Z'ではないことが確かに 'X'であることがわかります。バイナリ値を表す '0'、 '1'、 'L'、 'H'のみが反転して 'X'にマップされないことに注意してください。単調論理演算子は、実効寄与*または*強制*または弱い*金属学的値ではないものは何ですか?インバータの出力が強制されていると仮定できます。モデルでは論理レベル*(16.8.2.2)を区別できません。 – user1155120

答えて

3

(私はこのコメント作られているだろうが、私はできません)、インバータ(またはそのことについては任意のコンポーネント)への入力が「Z」である場合には(駆動高インピーダンス)、出力をどのように期待しますか?結果は、std_logic信号の定義された値のセットに収まる必要があります。

インバータの入力に値が入力されていない場合(つまり、入力を駆動する信号が1つしかなく、 'Z'の場合)、シミュレータは入力値を解決できません。その結果未知の出力( 'X')です。

EDIT

user1155120がリンクされた文書で指摘したように、動作は次のようなマッピングを述べstd_logic_1164-体に起因する宣言 "not_table" に発生します、

-- truth table for "not" function 
    constant not_table : stdlogic_1d := 
    -- ------------------------------------------------- 
    -- | U X 0 1 Z W L H - | 
    -- ------------------------------------------------- 
      ('U', 'X', '1', '0', 'X', 'X', '1', '0', 'X'); 
+0

解像度は1つのドライバ(IEEE Std 1076-2008 14.7.2)で動作し、std_logicの解像度テーブルは単一の値を返します(前述のstd_logic_1164-body.vhdlを参照してください。関数resolved - std_logicと通信していると仮定し、それは質問には書かれていません)。 "not" [std_logic return std_logic]関数宣言とnot_tableの問題点は何ですか。インバータの出力が強制されていると仮定できます。モデルでは論理レベル*(16.8.2.2)を区別できません。 – user1155120

+0

私は出力が高いインピーダンス 'Z'のままになると期待しています...なぜ私の質問よりも 'Z'ではないことを説明できるなら、完全に答えられます。ありがとう! – Psi

+0

投稿した後、あなたのコメントを読んでいます。私はあなたが今リンクしている文書を読んでいるだけです。 – gsm